@livekit/rtc-node 0.13.9 → 0.13.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.cts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/video_frame.cjs +3 -1
- package/dist/video_frame.cjs.map +1 -1
- package/dist/video_frame.d.ts.map +1 -1
- package/dist/video_frame.js +4 -2
- package/dist/video_frame.js.map +1 -1
- package/package.json +6 -6
- package/src/version.ts +1 -1
- package/src/video_frame.ts +5 -2
package/dist/version.cjs
CHANGED
|
@@ -21,7 +21,7 @@ __export(version_exports, {
|
|
|
21
21
|
SDK_VERSION: () => SDK_VERSION
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(version_exports);
|
|
24
|
-
const SDK_VERSION = "0.13.
|
|
24
|
+
const SDK_VERSION = "0.13.10";
|
|
25
25
|
// Annotate the CommonJS export names for ESM import in node:
|
|
26
26
|
0 && (module.exports = {
|
|
27
27
|
SDK_VERSION
|
package/dist/version.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.10\";\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,cAAc;","names":[]}
|
package/dist/version.d.cts
CHANGED
package/dist/version.d.ts
CHANGED
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,YAAY,CAAC"}
|
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.
|
|
1
|
+
{"version":3,"sources":["../src/version.ts"],"sourcesContent":["export const SDK_VERSION = \"0.13.10\";\n"],"mappings":"AAAO,MAAM,cAAc;","names":[]}
|
package/dist/video_frame.cjs
CHANGED
|
@@ -61,7 +61,7 @@ class VideoFrame {
|
|
|
61
61
|
/** @internal */
|
|
62
62
|
static fromOwnedInfo(owned) {
|
|
63
63
|
const info = owned.info;
|
|
64
|
-
|
|
64
|
+
const frame = new VideoFrame(
|
|
65
65
|
import_ffi_client.FfiClient.instance.copyBuffer(
|
|
66
66
|
info.dataPtr,
|
|
67
67
|
getPlaneLength(info.type, info.width, info.height)
|
|
@@ -70,6 +70,8 @@ class VideoFrame {
|
|
|
70
70
|
info.height,
|
|
71
71
|
info.type
|
|
72
72
|
);
|
|
73
|
+
new import_ffi_client.FfiHandle(owned.handle.id).dispose();
|
|
74
|
+
return frame;
|
|
73
75
|
}
|
|
74
76
|
getPlane(planeNth) {
|
|
75
77
|
const planeInfos = getPlaneInfos(this.dataPtr, this.type, this.width, this.height);
|
package/dist/video_frame.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/video_frame.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient, FfiRequest } from './ffi_client.js';\nimport type { OwnedVideoBuffer, VideoConvertResponse } from './proto/video_frame_pb.js';\nimport {\n VideoBufferInfo,\n VideoBufferInfo_ComponentInfo,\n VideoBufferType,\n} from './proto/video_frame_pb.js';\n\nexport class VideoFrame {\n data: Uint8Array;\n width: number;\n height: number;\n type: VideoBufferType;\n\n constructor(data: Uint8Array, width: number, height: number, type: VideoBufferType) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.type = type;\n }\n\n /** @internal */\n get dataPtr(): bigint {\n return FfiClient.instance.retrievePtr(new Uint8Array(this.data.buffer));\n }\n\n /** @internal */\n protoInfo(): VideoBufferInfo {\n const info = new VideoBufferInfo({\n width: this.width,\n height: this.height,\n type: this.type,\n dataPtr: this.dataPtr,\n });\n\n switch (this.type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n info.stride = this.width * 4;\n break;\n case VideoBufferType.RGB24:\n info.stride = this.width * 3;\n break;\n default:\n info.stride = 0;\n }\n\n info.components.push(...getPlaneInfos(this.dataPtr, this.type, this.width, this.height));\n\n return info;\n }\n\n /** @internal */\n static fromOwnedInfo(owned: OwnedVideoBuffer): VideoFrame {\n const info = owned.info!;\n return new VideoFrame(\n FfiClient.instance.copyBuffer(\n info.dataPtr!,\n getPlaneLength(info.type!, info.width!, info.height!),\n ),\n info.width!,\n info.height!,\n info.type!,\n );\n }\n\n getPlane(planeNth: number): Uint8Array | void {\n const planeInfos = getPlaneInfos(this.dataPtr, this.type, this.width, this.height);\n if (planeNth >= planeInfos.length) return;\n\n const planeInfo = planeInfos[planeNth]!;\n return FfiClient.instance.copyBuffer(planeInfo.dataPtr!, planeInfo.size!);\n }\n\n convert(dstType: VideoBufferType, flipY = false): VideoFrame {\n const req = new FfiRequest({\n message: {\n case: 'videoConvert',\n value: {\n flipY,\n dstType,\n buffer: this.protoInfo(),\n },\n },\n });\n const resp = FfiClient.instance.request<VideoConvertResponse>(req);\n\n switch (resp.message.case) {\n case 'buffer':\n return VideoFrame.fromOwnedInfo(resp.message.value);\n case 'error':\n default:\n throw resp.message.value;\n }\n }\n}\n\nconst getPlaneLength = (type: VideoBufferType, width: number, height: number): number => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n return width * height * 4;\n case VideoBufferType.RGB24:\n case VideoBufferType.I444:\n return width * height * 3;\n case VideoBufferType.I420:\n return width * height + chromaWidth * chromaHeight * 2;\n case VideoBufferType.I420A:\n return width * height * 2 + chromaWidth * chromaWidth * 2;\n case VideoBufferType.I422:\n return width * height + chromaWidth * height * 2;\n case VideoBufferType.I010:\n return width * height * 2 + chromaWidth * chromaHeight * 4;\n case VideoBufferType.NV12:\n return width * height + chromaWidth * chromaWidth * 2;\n }\n};\n\nconst getPlaneInfos = (\n dataPtr: bigint,\n type: VideoBufferType,\n width: number,\n height: number,\n): VideoBufferInfo_ComponentInfo[] => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.I420: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n return [y, u, v];\n }\n case VideoBufferType.I420A: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const a = new VideoBufferInfo_ComponentInfo({\n dataPtr: v.dataPtr! + BigInt(v.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v, a];\n }\n case VideoBufferType.I422: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I444: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: width,\n size: width * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I010: {\n const y = new VideoBufferInfo_ComponentInfo({\n dataPtr,\n stride: width * 2,\n size: width * height * 2,\n });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, u, v];\n }\n case VideoBufferType.NV12: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const uv = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, uv];\n }\n default:\n return [];\n }\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/video_frame.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient, FfiHandle, FfiRequest } from './ffi_client.js';\nimport type { OwnedVideoBuffer, VideoConvertResponse } from './proto/video_frame_pb.js';\nimport {\n VideoBufferInfo,\n VideoBufferInfo_ComponentInfo,\n VideoBufferType,\n} from './proto/video_frame_pb.js';\n\nexport class VideoFrame {\n data: Uint8Array;\n width: number;\n height: number;\n type: VideoBufferType;\n\n constructor(data: Uint8Array, width: number, height: number, type: VideoBufferType) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.type = type;\n }\n\n /** @internal */\n get dataPtr(): bigint {\n return FfiClient.instance.retrievePtr(new Uint8Array(this.data.buffer));\n }\n\n /** @internal */\n protoInfo(): VideoBufferInfo {\n const info = new VideoBufferInfo({\n width: this.width,\n height: this.height,\n type: this.type,\n dataPtr: this.dataPtr,\n });\n\n switch (this.type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n info.stride = this.width * 4;\n break;\n case VideoBufferType.RGB24:\n info.stride = this.width * 3;\n break;\n default:\n info.stride = 0;\n }\n\n info.components.push(...getPlaneInfos(this.dataPtr, this.type, this.width, this.height));\n\n return info;\n }\n\n /** @internal */\n static fromOwnedInfo(owned: OwnedVideoBuffer): VideoFrame {\n const info = owned.info!;\n const frame = new VideoFrame(\n FfiClient.instance.copyBuffer(\n info.dataPtr!,\n getPlaneLength(info.type!, info.width!, info.height!),\n ),\n info.width!,\n info.height!,\n info.type!,\n );\n // Dispose of the handle to prevent memory leaks\n new FfiHandle(owned.handle!.id!).dispose();\n return frame;\n }\n\n getPlane(planeNth: number): Uint8Array | void {\n const planeInfos = getPlaneInfos(this.dataPtr, this.type, this.width, this.height);\n if (planeNth >= planeInfos.length) return;\n\n const planeInfo = planeInfos[planeNth]!;\n return FfiClient.instance.copyBuffer(planeInfo.dataPtr!, planeInfo.size!);\n }\n\n convert(dstType: VideoBufferType, flipY = false): VideoFrame {\n const req = new FfiRequest({\n message: {\n case: 'videoConvert',\n value: {\n flipY,\n dstType,\n buffer: this.protoInfo(),\n },\n },\n });\n const resp = FfiClient.instance.request<VideoConvertResponse>(req);\n\n switch (resp.message.case) {\n case 'buffer':\n return VideoFrame.fromOwnedInfo(resp.message.value);\n case 'error':\n default:\n throw resp.message.value;\n }\n }\n}\n\nconst getPlaneLength = (type: VideoBufferType, width: number, height: number): number => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n return width * height * 4;\n case VideoBufferType.RGB24:\n case VideoBufferType.I444:\n return width * height * 3;\n case VideoBufferType.I420:\n return width * height + chromaWidth * chromaHeight * 2;\n case VideoBufferType.I420A:\n return width * height * 2 + chromaWidth * chromaWidth * 2;\n case VideoBufferType.I422:\n return width * height + chromaWidth * height * 2;\n case VideoBufferType.I010:\n return width * height * 2 + chromaWidth * chromaHeight * 4;\n case VideoBufferType.NV12:\n return width * height + chromaWidth * chromaWidth * 2;\n }\n};\n\nconst getPlaneInfos = (\n dataPtr: bigint,\n type: VideoBufferType,\n width: number,\n height: number,\n): VideoBufferInfo_ComponentInfo[] => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.I420: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n return [y, u, v];\n }\n case VideoBufferType.I420A: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const a = new VideoBufferInfo_ComponentInfo({\n dataPtr: v.dataPtr! + BigInt(v.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v, a];\n }\n case VideoBufferType.I422: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I444: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: width,\n size: width * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I010: {\n const y = new VideoBufferInfo_ComponentInfo({\n dataPtr,\n stride: width * 2,\n size: width * height * 2,\n });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, u, v];\n }\n case VideoBufferType.NV12: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const uv = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, uv];\n }\n default:\n return [];\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAAiD;AAEjD,4BAIO;AAEA,MAAM,WAAW;AAAA,EAMtB,YAAY,MAAkB,OAAe,QAAgB,MAAuB;AAClF,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,UAAkB;AACpB,WAAO,4BAAU,SAAS,YAAY,IAAI,WAAW,KAAK,KAAK,MAAM,CAAC;AAAA,EACxE;AAAA;AAAA,EAGA,YAA6B;AAC3B,UAAM,OAAO,IAAI,sCAAgB;AAAA,MAC/B,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,IAChB,CAAC;AAED,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,sCAAgB;AAAA,MACrB,KAAK,sCAAgB;AAAA,MACrB,KAAK,sCAAgB;AAAA,MACrB,KAAK,sCAAgB;AACnB,aAAK,SAAS,KAAK,QAAQ;AAC3B;AAAA,MACF,KAAK,sCAAgB;AACnB,aAAK,SAAS,KAAK,QAAQ;AAC3B;AAAA,MACF;AACE,aAAK,SAAS;AAAA,IAClB;AAEA,SAAK,WAAW,KAAK,GAAG,cAAc,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC;AAEvF,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,cAAc,OAAqC;AACxD,UAAM,OAAO,MAAM;AACnB,UAAM,QAAQ,IAAI;AAAA,MAChB,4BAAU,SAAS;AAAA,QACjB,KAAK;AAAA,QACL,eAAe,KAAK,MAAO,KAAK,OAAQ,KAAK,MAAO;AAAA,MACtD;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEA,QAAI,4BAAU,MAAM,OAAQ,EAAG,EAAE,QAAQ;AACzC,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAqC;AAC5C,UAAM,aAAa,cAAc,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM;AACjF,QAAI,YAAY,WAAW,OAAQ;AAEnC,UAAM,YAAY,WAAW,QAAQ;AACrC,WAAO,4BAAU,SAAS,WAAW,UAAU,SAAU,UAAU,IAAK;AAAA,EAC1E;AAAA,EAEA,QAAQ,SAA0B,QAAQ,OAAmB;AAC3D,UAAM,MAAM,IAAI,6BAAW;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAQ,KAAK,UAAU;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,OAAO,4BAAU,SAAS,QAA8B,GAAG;AAEjE,YAAQ,KAAK,QAAQ,MAAM;AAAA,MACzB,KAAK;AACH,eAAO,WAAW,cAAc,KAAK,QAAQ,KAAK;AAAA,MACpD,KAAK;AAAA,MACL;AACE,cAAM,KAAK,QAAQ;AAAA,IACvB;AAAA,EACF;AACF;AAEA,MAAM,iBAAiB,CAAC,MAAuB,OAAe,WAA2B;AACvF,QAAM,cAAc,KAAK,OAAO,QAAQ,KAAK,CAAC;AAC9C,QAAM,eAAe,KAAK,OAAO,SAAS,KAAK,CAAC;AAChD,UAAQ,MAAM;AAAA,IACZ,KAAK,sCAAgB;AAAA,IACrB,KAAK,sCAAgB;AAAA,IACrB,KAAK,sCAAgB;AAAA,IACrB,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS;AAAA,IAC1B,KAAK,sCAAgB;AAAA,IACrB,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS;AAAA,IAC1B,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS,cAAc,eAAe;AAAA,IACvD,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS,IAAI,cAAc,cAAc;AAAA,IAC1D,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS,cAAc,SAAS;AAAA,IACjD,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS,IAAI,cAAc,eAAe;AAAA,IAC3D,KAAK,sCAAgB;AACnB,aAAO,QAAQ,SAAS,cAAc,cAAc;AAAA,EACxD;AACF;AAEA,MAAM,gBAAgB,CACpB,SACA,MACA,OACA,WACoC;AACpC,QAAM,cAAc,KAAK,OAAO,QAAQ,KAAK,CAAC;AAC9C,QAAM,eAAe,KAAK,OAAO,SAAS,KAAK,CAAC;AAChD,UAAQ,MAAM;AAAA,IACZ,KAAK,sCAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,oDAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,sCAAgB,OAAO;AAC1B,YAAM,IAAI,IAAI,oDAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,QAAQ;AAAA,MAChB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AAAA,IACA,KAAK,sCAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,oDAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,sCAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,oDAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,QAAQ;AAAA,MAChB,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,QAAQ;AAAA,MAChB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,sCAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ,SAAS;AAAA,MACzB,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ,cAAc;AAAA,QACtB,MAAM,cAAc,eAAe;AAAA,MACrC,CAAC;AACD,YAAM,IAAI,IAAI,oDAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ,cAAc;AAAA,QACtB,MAAM,cAAc,eAAe;AAAA,MACrC,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,sCAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,oDAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,KAAK,IAAI,oDAA8B;AAAA,QAC3C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ,cAAc;AAAA,QACtB,MAAM,cAAc,eAAe;AAAA,MACrC,CAAC;AACD,aAAO,CAAC,GAAG,EAAE;AAAA,IACf;AAAA,IACA;AACE,aAAO,CAAC;AAAA,EACZ;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video_frame.d.ts","sourceRoot":"","sources":["../src/video_frame.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,eAAe,EAEf,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAEnC,qBAAa,UAAU;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;gBAEV,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe;IAOlF,gBAAgB;IAChB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,gBAAgB;IAChB,SAAS,IAAI,eAAe;IA2B5B,gBAAgB;IAChB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU;
|
|
1
|
+
{"version":3,"file":"video_frame.d.ts","sourceRoot":"","sources":["../src/video_frame.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,2BAA2B,CAAC;AACxF,OAAO,EACL,eAAe,EAEf,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAEnC,qBAAa,UAAU;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,eAAe,CAAC;gBAEV,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe;IAOlF,gBAAgB;IAChB,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,gBAAgB;IAChB,SAAS,IAAI,eAAe;IA2B5B,gBAAgB;IAChB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU;IAgBzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAQ7C,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,UAAQ,GAAG,UAAU;CAqB7D"}
|
package/dist/video_frame.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FfiClient, FfiRequest } from "./ffi_client.js";
|
|
1
|
+
import { FfiClient, FfiHandle, FfiRequest } from "./ffi_client.js";
|
|
2
2
|
import {
|
|
3
3
|
VideoBufferInfo,
|
|
4
4
|
VideoBufferInfo_ComponentInfo,
|
|
@@ -42,7 +42,7 @@ class VideoFrame {
|
|
|
42
42
|
/** @internal */
|
|
43
43
|
static fromOwnedInfo(owned) {
|
|
44
44
|
const info = owned.info;
|
|
45
|
-
|
|
45
|
+
const frame = new VideoFrame(
|
|
46
46
|
FfiClient.instance.copyBuffer(
|
|
47
47
|
info.dataPtr,
|
|
48
48
|
getPlaneLength(info.type, info.width, info.height)
|
|
@@ -51,6 +51,8 @@ class VideoFrame {
|
|
|
51
51
|
info.height,
|
|
52
52
|
info.type
|
|
53
53
|
);
|
|
54
|
+
new FfiHandle(owned.handle.id).dispose();
|
|
55
|
+
return frame;
|
|
54
56
|
}
|
|
55
57
|
getPlane(planeNth) {
|
|
56
58
|
const planeInfos = getPlaneInfos(this.dataPtr, this.type, this.width, this.height);
|
package/dist/video_frame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/video_frame.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient, FfiRequest } from './ffi_client.js';\nimport type { OwnedVideoBuffer, VideoConvertResponse } from './proto/video_frame_pb.js';\nimport {\n VideoBufferInfo,\n VideoBufferInfo_ComponentInfo,\n VideoBufferType,\n} from './proto/video_frame_pb.js';\n\nexport class VideoFrame {\n data: Uint8Array;\n width: number;\n height: number;\n type: VideoBufferType;\n\n constructor(data: Uint8Array, width: number, height: number, type: VideoBufferType) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.type = type;\n }\n\n /** @internal */\n get dataPtr(): bigint {\n return FfiClient.instance.retrievePtr(new Uint8Array(this.data.buffer));\n }\n\n /** @internal */\n protoInfo(): VideoBufferInfo {\n const info = new VideoBufferInfo({\n width: this.width,\n height: this.height,\n type: this.type,\n dataPtr: this.dataPtr,\n });\n\n switch (this.type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n info.stride = this.width * 4;\n break;\n case VideoBufferType.RGB24:\n info.stride = this.width * 3;\n break;\n default:\n info.stride = 0;\n }\n\n info.components.push(...getPlaneInfos(this.dataPtr, this.type, this.width, this.height));\n\n return info;\n }\n\n /** @internal */\n static fromOwnedInfo(owned: OwnedVideoBuffer): VideoFrame {\n const info = owned.info!;\n return new VideoFrame(\n FfiClient.instance.copyBuffer(\n info.dataPtr!,\n getPlaneLength(info.type!, info.width!, info.height!),\n ),\n info.width!,\n info.height!,\n info.type!,\n );\n }\n\n getPlane(planeNth: number): Uint8Array | void {\n const planeInfos = getPlaneInfos(this.dataPtr, this.type, this.width, this.height);\n if (planeNth >= planeInfos.length) return;\n\n const planeInfo = planeInfos[planeNth]!;\n return FfiClient.instance.copyBuffer(planeInfo.dataPtr!, planeInfo.size!);\n }\n\n convert(dstType: VideoBufferType, flipY = false): VideoFrame {\n const req = new FfiRequest({\n message: {\n case: 'videoConvert',\n value: {\n flipY,\n dstType,\n buffer: this.protoInfo(),\n },\n },\n });\n const resp = FfiClient.instance.request<VideoConvertResponse>(req);\n\n switch (resp.message.case) {\n case 'buffer':\n return VideoFrame.fromOwnedInfo(resp.message.value);\n case 'error':\n default:\n throw resp.message.value;\n }\n }\n}\n\nconst getPlaneLength = (type: VideoBufferType, width: number, height: number): number => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n return width * height * 4;\n case VideoBufferType.RGB24:\n case VideoBufferType.I444:\n return width * height * 3;\n case VideoBufferType.I420:\n return width * height + chromaWidth * chromaHeight * 2;\n case VideoBufferType.I420A:\n return width * height * 2 + chromaWidth * chromaWidth * 2;\n case VideoBufferType.I422:\n return width * height + chromaWidth * height * 2;\n case VideoBufferType.I010:\n return width * height * 2 + chromaWidth * chromaHeight * 4;\n case VideoBufferType.NV12:\n return width * height + chromaWidth * chromaWidth * 2;\n }\n};\n\nconst getPlaneInfos = (\n dataPtr: bigint,\n type: VideoBufferType,\n width: number,\n height: number,\n): VideoBufferInfo_ComponentInfo[] => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.I420: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n return [y, u, v];\n }\n case VideoBufferType.I420A: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const a = new VideoBufferInfo_ComponentInfo({\n dataPtr: v.dataPtr! + BigInt(v.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v, a];\n }\n case VideoBufferType.I422: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I444: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: width,\n size: width * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I010: {\n const y = new VideoBufferInfo_ComponentInfo({\n dataPtr,\n stride: width * 2,\n size: width * height * 2,\n });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, u, v];\n }\n case VideoBufferType.NV12: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const uv = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, uv];\n }\n default:\n return [];\n }\n};\n"],"mappings":"AAGA,SAAS,WAAW,kBAAkB;AAEtC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,WAAW;AAAA,EAMtB,YAAY,MAAkB,OAAe,QAAgB,MAAuB;AAClF,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,UAAkB;AACpB,WAAO,UAAU,SAAS,YAAY,IAAI,WAAW,KAAK,KAAK,MAAM,CAAC;AAAA,EACxE;AAAA;AAAA,EAGA,YAA6B;AAC3B,UAAM,OAAO,IAAI,gBAAgB;AAAA,MAC/B,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,IAChB,CAAC;AAED,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AACnB,aAAK,SAAS,KAAK,QAAQ;AAC3B;AAAA,MACF,KAAK,gBAAgB;AACnB,aAAK,SAAS,KAAK,QAAQ;AAC3B;AAAA,MACF;AACE,aAAK,SAAS;AAAA,IAClB;AAEA,SAAK,WAAW,KAAK,GAAG,cAAc,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,CAAC;AAEvF,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,cAAc,OAAqC;AACxD,UAAM,OAAO,MAAM;AACnB,WAAO,IAAI;AAAA,MACT,UAAU,SAAS;AAAA,QACjB,KAAK;AAAA,QACL,eAAe,KAAK,MAAO,KAAK,OAAQ,KAAK,MAAO;AAAA,MACtD;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,SAAS,UAAqC;AAC5C,UAAM,aAAa,cAAc,KAAK,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM;AACjF,QAAI,YAAY,WAAW,OAAQ;AAEnC,UAAM,YAAY,WAAW,QAAQ;AACrC,WAAO,UAAU,SAAS,WAAW,UAAU,SAAU,UAAU,IAAK;AAAA,EAC1E;AAAA,EAEA,QAAQ,SAA0B,QAAQ,OAAmB;AAC3D,UAAM,MAAM,IAAI,WAAW;AAAA,MACzB,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,QAAQ,KAAK,UAAU;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,OAAO,UAAU,SAAS,QAA8B,GAAG;AAEjE,YAAQ,KAAK,QAAQ,MAAM;AAAA,MACzB,KAAK;AACH,eAAO,WAAW,cAAc,KAAK,QAAQ,KAAK;AAAA,MACpD,KAAK;AAAA,MACL;AACE,cAAM,KAAK,QAAQ;AAAA,IACvB;AAAA,EACF;AACF;AAEA,MAAM,iBAAiB,CAAC,MAAuB,OAAe,WAA2B;AACvF,QAAM,cAAc,KAAK,OAAO,QAAQ,KAAK,CAAC;AAC9C,QAAM,eAAe,KAAK,OAAO,SAAS,KAAK,CAAC;AAChD,UAAQ,MAAM;AAAA,IACZ,KAAK,gBAAgB;AAAA,IACrB,KAAK,gBAAgB;AAAA,IACrB,KAAK,gBAAgB;AAAA,IACrB,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS;AAAA,IAC1B,KAAK,gBAAgB;AAAA,IACrB,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS;AAAA,IAC1B,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS,cAAc,eAAe;AAAA,IACvD,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS,IAAI,cAAc,cAAc;AAAA,IAC1D,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS,cAAc,SAAS;AAAA,IACjD,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS,IAAI,cAAc,eAAe;AAAA,IAC3D,KAAK,gBAAgB;AACnB,aAAO,QAAQ,SAAS,cAAc,cAAc;AAAA,EACxD;AACF;AAEA,MAAM,gBAAgB,CACpB,SACA,MACA,OACA,WACoC;AACpC,QAAM,cAAc,KAAK,OAAO,QAAQ,KAAK,CAAC;AAC9C,QAAM,eAAe,KAAK,OAAO,SAAS,KAAK,CAAC;AAChD,UAAQ,MAAM;AAAA,IACZ,KAAK,gBAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,8BAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,gBAAgB,OAAO;AAC1B,YAAM,IAAI,IAAI,8BAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,QAAQ;AAAA,MAChB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACpB;AAAA,IACA,KAAK,gBAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,8BAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,cAAc;AAAA,MACtB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,gBAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,8BAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,QAAQ;AAAA,MAChB,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ;AAAA,QACR,MAAM,QAAQ;AAAA,MAChB,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,gBAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,MAAM,QAAQ,SAAS;AAAA,MACzB,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ,cAAc;AAAA,QACtB,MAAM,cAAc,eAAe;AAAA,MACrC,CAAC;AACD,YAAM,IAAI,IAAI,8BAA8B;AAAA,QAC1C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ,cAAc;AAAA,QACtB,MAAM,cAAc,eAAe;AAAA,MACrC,CAAC;AACD,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAAA,IACA,KAAK,gBAAgB,MAAM;AACzB,YAAM,IAAI,IAAI,8BAA8B,EAAE,SAAS,QAAQ,OAAO,MAAM,QAAQ,OAAO,CAAC;AAC5F,YAAM,KAAK,IAAI,8BAA8B;AAAA,QAC3C,SAAS,EAAE,UAAW,OAAO,EAAE,IAAK;AAAA,QACpC,QAAQ,cAAc;AAAA,QACtB,MAAM,cAAc,eAAe;AAAA,MACrC,CAAC;AACD,aAAO,CAAC,GAAG,EAAE;AAAA,IACf;AAAA,IACA;AACE,aAAO,CAAC;AAAA,EACZ;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/video_frame.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { FfiClient, FfiHandle, FfiRequest } from './ffi_client.js';\nimport type { OwnedVideoBuffer, VideoConvertResponse } from './proto/video_frame_pb.js';\nimport {\n VideoBufferInfo,\n VideoBufferInfo_ComponentInfo,\n VideoBufferType,\n} from './proto/video_frame_pb.js';\n\nexport class VideoFrame {\n data: Uint8Array;\n width: number;\n height: number;\n type: VideoBufferType;\n\n constructor(data: Uint8Array, width: number, height: number, type: VideoBufferType) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.type = type;\n }\n\n /** @internal */\n get dataPtr(): bigint {\n return FfiClient.instance.retrievePtr(new Uint8Array(this.data.buffer));\n }\n\n /** @internal */\n protoInfo(): VideoBufferInfo {\n const info = new VideoBufferInfo({\n width: this.width,\n height: this.height,\n type: this.type,\n dataPtr: this.dataPtr,\n });\n\n switch (this.type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n info.stride = this.width * 4;\n break;\n case VideoBufferType.RGB24:\n info.stride = this.width * 3;\n break;\n default:\n info.stride = 0;\n }\n\n info.components.push(...getPlaneInfos(this.dataPtr, this.type, this.width, this.height));\n\n return info;\n }\n\n /** @internal */\n static fromOwnedInfo(owned: OwnedVideoBuffer): VideoFrame {\n const info = owned.info!;\n const frame = new VideoFrame(\n FfiClient.instance.copyBuffer(\n info.dataPtr!,\n getPlaneLength(info.type!, info.width!, info.height!),\n ),\n info.width!,\n info.height!,\n info.type!,\n );\n // Dispose of the handle to prevent memory leaks\n new FfiHandle(owned.handle!.id!).dispose();\n return frame;\n }\n\n getPlane(planeNth: number): Uint8Array | void {\n const planeInfos = getPlaneInfos(this.dataPtr, this.type, this.width, this.height);\n if (planeNth >= planeInfos.length) return;\n\n const planeInfo = planeInfos[planeNth]!;\n return FfiClient.instance.copyBuffer(planeInfo.dataPtr!, planeInfo.size!);\n }\n\n convert(dstType: VideoBufferType, flipY = false): VideoFrame {\n const req = new FfiRequest({\n message: {\n case: 'videoConvert',\n value: {\n flipY,\n dstType,\n buffer: this.protoInfo(),\n },\n },\n });\n const resp = FfiClient.instance.request<VideoConvertResponse>(req);\n\n switch (resp.message.case) {\n case 'buffer':\n return VideoFrame.fromOwnedInfo(resp.message.value);\n case 'error':\n default:\n throw resp.message.value;\n }\n }\n}\n\nconst getPlaneLength = (type: VideoBufferType, width: number, height: number): number => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.ARGB:\n case VideoBufferType.RGBA:\n case VideoBufferType.ABGR:\n case VideoBufferType.BGRA:\n return width * height * 4;\n case VideoBufferType.RGB24:\n case VideoBufferType.I444:\n return width * height * 3;\n case VideoBufferType.I420:\n return width * height + chromaWidth * chromaHeight * 2;\n case VideoBufferType.I420A:\n return width * height * 2 + chromaWidth * chromaWidth * 2;\n case VideoBufferType.I422:\n return width * height + chromaWidth * height * 2;\n case VideoBufferType.I010:\n return width * height * 2 + chromaWidth * chromaHeight * 4;\n case VideoBufferType.NV12:\n return width * height + chromaWidth * chromaWidth * 2;\n }\n};\n\nconst getPlaneInfos = (\n dataPtr: bigint,\n type: VideoBufferType,\n width: number,\n height: number,\n): VideoBufferInfo_ComponentInfo[] => {\n const chromaWidth = Math.trunc((width + 1) / 2);\n const chromaHeight = Math.trunc((height + 1) / 2);\n switch (type) {\n case VideoBufferType.I420: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n return [y, u, v];\n }\n case VideoBufferType.I420A: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * chromaHeight,\n });\n const a = new VideoBufferInfo_ComponentInfo({\n dataPtr: v.dataPtr! + BigInt(v.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v, a];\n }\n case VideoBufferType.I422: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth,\n size: chromaWidth * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I444: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: width,\n size: width * height,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: width,\n size: width * height,\n });\n return [y, u, v];\n }\n case VideoBufferType.I010: {\n const y = new VideoBufferInfo_ComponentInfo({\n dataPtr,\n stride: width * 2,\n size: width * height * 2,\n });\n const u = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n const v = new VideoBufferInfo_ComponentInfo({\n dataPtr: u.dataPtr! + BigInt(u.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, u, v];\n }\n case VideoBufferType.NV12: {\n const y = new VideoBufferInfo_ComponentInfo({ dataPtr, stride: width, size: width * height });\n const uv = new VideoBufferInfo_ComponentInfo({\n dataPtr: y.dataPtr! + BigInt(y.size!),\n stride: chromaWidth * 2,\n size: chromaWidth * chromaHeight * 2,\n });\n return [y, uv];\n }\n default:\n return [];\n }\n};\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "LiveKit RTC Node",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "LiveKit",
|
|
6
|
-
"version": "0.13.
|
|
6
|
+
"version": "0.13.10",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"require": "dist/index.cjs",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"@bufbuild/protoc-gen-es": "^1.10.0"
|
|
62
62
|
},
|
|
63
63
|
"optionalDependencies": {
|
|
64
|
-
"@livekit/rtc-node-darwin-arm64": "0.13.
|
|
65
|
-
"@livekit/rtc-node-darwin-x64": "0.13.
|
|
66
|
-
"@livekit/rtc-node-linux-arm64-gnu": "0.13.
|
|
67
|
-
"@livekit/rtc-node-linux-x64-gnu": "0.13.
|
|
68
|
-
"@livekit/rtc-node-win32-x64-msvc": "0.13.
|
|
64
|
+
"@livekit/rtc-node-darwin-arm64": "0.13.10",
|
|
65
|
+
"@livekit/rtc-node-darwin-x64": "0.13.10",
|
|
66
|
+
"@livekit/rtc-node-linux-arm64-gnu": "0.13.10",
|
|
67
|
+
"@livekit/rtc-node-linux-x64-gnu": "0.13.10",
|
|
68
|
+
"@livekit/rtc-node-win32-x64-msvc": "0.13.10"
|
|
69
69
|
},
|
|
70
70
|
"engines": {
|
|
71
71
|
"node": ">= 18"
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const SDK_VERSION = "0.13.
|
|
1
|
+
export const SDK_VERSION = "0.13.10";
|
package/src/video_frame.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
import { FfiClient, FfiRequest } from './ffi_client.js';
|
|
4
|
+
import { FfiClient, FfiHandle, FfiRequest } from './ffi_client.js';
|
|
5
5
|
import type { OwnedVideoBuffer, VideoConvertResponse } from './proto/video_frame_pb.js';
|
|
6
6
|
import {
|
|
7
7
|
VideoBufferInfo,
|
|
@@ -58,7 +58,7 @@ export class VideoFrame {
|
|
|
58
58
|
/** @internal */
|
|
59
59
|
static fromOwnedInfo(owned: OwnedVideoBuffer): VideoFrame {
|
|
60
60
|
const info = owned.info!;
|
|
61
|
-
|
|
61
|
+
const frame = new VideoFrame(
|
|
62
62
|
FfiClient.instance.copyBuffer(
|
|
63
63
|
info.dataPtr!,
|
|
64
64
|
getPlaneLength(info.type!, info.width!, info.height!),
|
|
@@ -67,6 +67,9 @@ export class VideoFrame {
|
|
|
67
67
|
info.height!,
|
|
68
68
|
info.type!,
|
|
69
69
|
);
|
|
70
|
+
// Dispose of the handle to prevent memory leaks
|
|
71
|
+
new FfiHandle(owned.handle!.id!).dispose();
|
|
72
|
+
return frame;
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
getPlane(planeNth: number): Uint8Array | void {
|