MCPcopy Create free account
hub / github.com/CapSoftware/Cap / processFrameBytesSync

Function processFrameBytesSync

apps/desktop/src/utils/frame-worker.ts:981–1128  ·  view source on GitHub ↗
(
	bytes: Uint8Array,
	releaseCallback?: () => void,
)

Source from the content-addressed store, hash-verified

979type DecodeResult = FrameQueuedMessage | DecodedFrame | ErrorMessage;
980
981function processFrameBytesSync(
982 bytes: Uint8Array,
983 releaseCallback?: () => void,
984): DecodeResult {
985 if (bytes.byteLength < 24) {
986 releaseCallback?.();
987 return {
988 type: "error",
989 message: "Received frame too small to contain metadata",
990 };
991 }
992
993 const meta = parseFrameMetadata(bytes);
994 if (!meta) {
995 releaseCallback?.();
996 return {
997 type: "error",
998 message: "Failed to parse frame metadata",
999 };
1000 }
1001
1002 const { width, height, frameNumber, targetTimeNs } = meta;
1003 const timing: FrameTiming = { frameNumber, targetTimeNs };
1004
1005 if (renderMode === "webgpu" || renderMode === "pending") {
1006 while (frameQueue.length >= FRAME_QUEUE_SIZE) {
1007 const dropped = frameQueue.shift();
1008 if (dropped?.mode === "webgpu" && dropped.releaseCallback) {
1009 dropped.releaseCallback();
1010 }
1011 }
1012
1013 if (meta.format === "nv12") {
1014 const frameData = new Uint8ClampedArray(
1015 bytes.buffer,
1016 bytes.byteOffset,
1017 meta.totalSize,
1018 );
1019 frameQueue.push({
1020 mode: "webgpu",
1021 pixelFormat: "nv12",
1022 data: frameData,
1023 width,
1024 height,
1025 yStride: meta.yStride,
1026 fullRange: meta.fullRange,
1027 timing,
1028 releaseCallback,
1029 });
1030 } else {
1031 const frameData = new Uint8ClampedArray(
1032 bytes.buffer,
1033 bytes.byteOffset,
1034 bytes.byteLength - 24,
1035 );
1036 frameQueue.push({
1037 mode: "webgpu",
1038 pixelFormat: "rgba",

Callers 1

frame-worker.tsFile · 0.85

Calls 3

parseFrameMetadataFunction · 0.85
startRenderLoopFunction · 0.85
convertNv12ToRgbaFunction · 0.70

Tested by

no test coverage detected