|
|
|
@ -3,12 +3,11 @@
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
|
|
|
|
(() => {
|
|
|
|
import * as cvatData from 'cvat-data';
|
|
|
|
const cvatData = require('cvat-data');
|
|
|
|
import { isBrowser, isNode } from 'browser-or-node';
|
|
|
|
const PluginRegistry = require('./plugins').default;
|
|
|
|
import PluginRegistry from './plugins';
|
|
|
|
const serverProxy = require('./server-proxy').default;
|
|
|
|
import serverProxy from './server-proxy';
|
|
|
|
const { isBrowser, isNode } = require('browser-or-node');
|
|
|
|
import { Exception, ArgumentError, DataError } from './exceptions';
|
|
|
|
const { Exception, ArgumentError, DataError } = require('./exceptions');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// This is the frames storage
|
|
|
|
// This is the frames storage
|
|
|
|
const frameDataCache = {};
|
|
|
|
const frameDataCache = {};
|
|
|
|
@ -18,7 +17,7 @@
|
|
|
|
* @memberof module:API.cvat.classes
|
|
|
|
* @memberof module:API.cvat.classes
|
|
|
|
* @hideconstructor
|
|
|
|
* @hideconstructor
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
class FrameData {
|
|
|
|
export class FrameData {
|
|
|
|
constructor({
|
|
|
|
constructor({
|
|
|
|
width,
|
|
|
|
width,
|
|
|
|
height,
|
|
|
|
height,
|
|
|
|
@ -652,7 +651,7 @@
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function getContextImage(jobID, frame) {
|
|
|
|
export async function getContextImage(jobID, frame) {
|
|
|
|
if (frameDataCache[jobID].frameBuffer.isContextImageAvailable(frame)) {
|
|
|
|
if (frameDataCache[jobID].frameBuffer.isContextImageAvailable(frame)) {
|
|
|
|
return frameDataCache[jobID].frameBuffer.getContextImage(frame);
|
|
|
|
return frameDataCache[jobID].frameBuffer.getContextImage(frame);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -661,7 +660,7 @@
|
|
|
|
return frameDataCache[jobID].frameBuffer.getContextImage(frame);
|
|
|
|
return frameDataCache[jobID].frameBuffer.getContextImage(frame);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function getPreview(taskID = null, jobID = null) {
|
|
|
|
export async function getPreview(taskID = null, jobID = null) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
// Just go to server and get preview (no any cache)
|
|
|
|
// Just go to server and get preview (no any cache)
|
|
|
|
serverProxy.frames
|
|
|
|
serverProxy.frames
|
|
|
|
@ -684,7 +683,7 @@
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function getFrame(
|
|
|
|
export async function getFrame(
|
|
|
|
jobID,
|
|
|
|
jobID,
|
|
|
|
chunkSize,
|
|
|
|
chunkSize,
|
|
|
|
chunkType,
|
|
|
|
chunkType,
|
|
|
|
@ -741,7 +740,7 @@
|
|
|
|
return frameDataCache[jobID].frameBuffer.require(frame, jobID, isPlaying, step);
|
|
|
|
return frameDataCache[jobID].frameBuffer.require(frame, jobID, isPlaying, step);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function getDeletedFrames(instanceType, id) {
|
|
|
|
export async function getDeletedFrames(instanceType, id) {
|
|
|
|
if (instanceType === 'job') {
|
|
|
|
if (instanceType === 'job') {
|
|
|
|
const { meta } = frameDataCache[id];
|
|
|
|
const { meta } = frameDataCache[id];
|
|
|
|
return meta.deleted_frames;
|
|
|
|
return meta.deleted_frames;
|
|
|
|
@ -756,19 +755,19 @@
|
|
|
|
throw new Exception(`getDeletedFrames is not implemented for ${instanceType}`);
|
|
|
|
throw new Exception(`getDeletedFrames is not implemented for ${instanceType}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function deleteFrame(jobID, frame) {
|
|
|
|
export function deleteFrame(jobID, frame) {
|
|
|
|
const { meta } = frameDataCache[jobID];
|
|
|
|
const { meta } = frameDataCache[jobID];
|
|
|
|
meta.deleted_frames[frame] = true;
|
|
|
|
meta.deleted_frames[frame] = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function restoreFrame(jobID, frame) {
|
|
|
|
export function restoreFrame(jobID, frame) {
|
|
|
|
const { meta } = frameDataCache[jobID];
|
|
|
|
const { meta } = frameDataCache[jobID];
|
|
|
|
if (frame in meta.deleted_frames) {
|
|
|
|
if (frame in meta.deleted_frames) {
|
|
|
|
delete meta.deleted_frames[frame];
|
|
|
|
delete meta.deleted_frames[frame];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function patchMeta(jobID) {
|
|
|
|
export async function patchMeta(jobID) {
|
|
|
|
const { meta } = frameDataCache[jobID];
|
|
|
|
const { meta } = frameDataCache[jobID];
|
|
|
|
const newMeta = await serverProxy.frames.saveMeta('job', jobID, {
|
|
|
|
const newMeta = await serverProxy.frames.saveMeta('job', jobID, {
|
|
|
|
deleted_frames: Object.keys(meta.deleted_frames),
|
|
|
|
deleted_frames: Object.keys(meta.deleted_frames),
|
|
|
|
@ -787,7 +786,7 @@
|
|
|
|
frameDataCache[jobID].meta.deleted_frames = prevDeletedFrames;
|
|
|
|
frameDataCache[jobID].meta.deleted_frames = prevDeletedFrames;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function findNotDeletedFrame(jobID, frameFrom, frameTo, offset) {
|
|
|
|
export async function findNotDeletedFrame(jobID, frameFrom, frameTo, offset) {
|
|
|
|
let meta;
|
|
|
|
let meta;
|
|
|
|
if (!frameDataCache[jobID]) {
|
|
|
|
if (!frameDataCache[jobID]) {
|
|
|
|
meta = await serverProxy.frames.getMeta('job', jobID);
|
|
|
|
meta = await serverProxy.frames.getMeta('job', jobID);
|
|
|
|
@ -812,7 +811,7 @@
|
|
|
|
return lastUndeletedFrame;
|
|
|
|
return lastUndeletedFrame;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getRanges(jobID) {
|
|
|
|
export function getRanges(jobID) {
|
|
|
|
if (!(jobID in frameDataCache)) {
|
|
|
|
if (!(jobID in frameDataCache)) {
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
decoded: [],
|
|
|
|
decoded: [],
|
|
|
|
@ -826,24 +825,9 @@
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function clear(jobID) {
|
|
|
|
export function clear(jobID) {
|
|
|
|
if (jobID in frameDataCache) {
|
|
|
|
if (jobID in frameDataCache) {
|
|
|
|
frameDataCache[jobID].frameBuffer.clear();
|
|
|
|
frameDataCache[jobID].frameBuffer.clear();
|
|
|
|
delete frameDataCache[jobID];
|
|
|
|
delete frameDataCache[jobID];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
|
|
|
FrameData,
|
|
|
|
|
|
|
|
getFrame,
|
|
|
|
|
|
|
|
getDeletedFrames,
|
|
|
|
|
|
|
|
deleteFrame,
|
|
|
|
|
|
|
|
restoreFrame,
|
|
|
|
|
|
|
|
patchMeta,
|
|
|
|
|
|
|
|
getRanges,
|
|
|
|
|
|
|
|
getPreview,
|
|
|
|
|
|
|
|
clear,
|
|
|
|
|
|
|
|
findNotDeletedFrame,
|
|
|
|
|
|
|
|
getContextImage,
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|