@carbonenginejs/runtime-resource 0.1.0
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/FORMAT-PROVENANCE.md +135 -0
- package/LICENSE +21 -0
- package/NOTICE +29 -0
- package/README.md +241 -0
- package/dist/CjsMotherLode.js +56 -0
- package/dist/CjsMotherLode.js.map +1 -0
- package/dist/CjsResMan.js +740 -0
- package/dist/CjsResMan.js.map +1 -0
- package/dist/CjsResManQueue.js +214 -0
- package/dist/CjsResManQueue.js.map +1 -0
- package/dist/CjsResource.js +366 -0
- package/dist/CjsResource.js.map +1 -0
- package/dist/CjsResourceSource.js +59 -0
- package/dist/CjsResourceSource.js.map +1 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -0
- package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
- package/dist/format/CjsFormat.js +178 -0
- package/dist/format/CjsFormat.js.map +1 -0
- package/dist/format/CjsResourceProbe.js +269 -0
- package/dist/format/CjsResourceProbe.js.map +1 -0
- package/dist/format/payloadContract.js +173 -0
- package/dist/format/payloadContract.js.map +1 -0
- package/dist/formats/black/CjsBlackFormat.js +272 -0
- package/dist/formats/black/CjsBlackFormat.js.map +1 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -0
- package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -0
- package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -0
- package/dist/formats/black/core/CjsBlackReader.js +760 -0
- package/dist/formats/black/core/CjsBlackReader.js.map +1 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -0
- package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -0
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -0
- package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js.map +1 -0
- package/dist/formats/black/core/blackConstants.js +7 -0
- package/dist/formats/black/core/blackConstants.js.map +1 -0
- package/dist/formats/black/core/blackDefinitions.js +10 -0
- package/dist/formats/black/core/blackDefinitions.js.map +1 -0
- package/dist/formats/black/core/blackEnums.js +6 -0
- package/dist/formats/black/core/blackEnums.js.map +1 -0
- package/dist/formats/black/core/blackSchema.js +3 -0
- package/dist/formats/black/core/blackSchema.js.map +1 -0
- package/dist/formats/black/core/blackVersion.js +22 -0
- package/dist/formats/black/core/blackVersion.js.map +1 -0
- package/dist/formats/black/core/helpers.js +182 -0
- package/dist/formats/black/core/helpers.js.map +1 -0
- package/dist/formats/black/core/schema.js +4 -0
- package/dist/formats/black/core/schema.js.map +1 -0
- package/dist/formats/black/index.js +2 -0
- package/dist/formats/black/index.js.map +1 -0
- package/dist/formats/bnk/CjsBnkFormat.js +245 -0
- package/dist/formats/bnk/CjsBnkFormat.js.map +1 -0
- package/dist/formats/bnk/core/helpers.js +354 -0
- package/dist/formats/bnk/core/helpers.js.map +1 -0
- package/dist/formats/bnk/core/soundbanksInfo.js +246 -0
- package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -0
- package/dist/formats/bnk/index.js +3 -0
- package/dist/formats/bnk/index.js.map +1 -0
- package/dist/formats/cmf/CjsCmfFormat.js +491 -0
- package/dist/formats/cmf/CjsCmfFormat.js.map +1 -0
- package/dist/formats/cmf/core/binary.js +118 -0
- package/dist/formats/cmf/core/binary.js.map +1 -0
- package/dist/formats/cmf/core/buffers.js +233 -0
- package/dist/formats/cmf/core/buffers.js.map +1 -0
- package/dist/formats/cmf/core/constants.js +47 -0
- package/dist/formats/cmf/core/constants.js.map +1 -0
- package/dist/formats/cmf/core/gr2Anim.js +453 -0
- package/dist/formats/cmf/core/gr2Anim.js.map +1 -0
- package/dist/formats/cmf/core/helpers.js +287 -0
- package/dist/formats/cmf/core/helpers.js.map +1 -0
- package/dist/formats/cmf/core/pack.js +276 -0
- package/dist/formats/cmf/core/pack.js.map +1 -0
- package/dist/formats/cmf/core/schema.js +364 -0
- package/dist/formats/cmf/core/schema.js.map +1 -0
- package/dist/formats/cmf/core/shared.js +268 -0
- package/dist/formats/cmf/core/shared.js.map +1 -0
- package/dist/formats/cmf/core/writer.js +517 -0
- package/dist/formats/cmf/core/writer.js.map +1 -0
- package/dist/formats/cmf/index.js +2 -0
- package/dist/formats/cmf/index.js.map +1 -0
- package/dist/formats/dds/CjsDdsFormat.js +187 -0
- package/dist/formats/dds/CjsDdsFormat.js.map +1 -0
- package/dist/formats/dds/core/helpers.js +812 -0
- package/dist/formats/dds/core/helpers.js.map +1 -0
- package/dist/formats/dds/index.js +2 -0
- package/dist/formats/dds/index.js.map +1 -0
- package/dist/formats/fbx/CjsFbxFormat.js +260 -0
- package/dist/formats/fbx/CjsFbxFormat.js.map +1 -0
- package/dist/formats/fbx/core/helpers.js +3901 -0
- package/dist/formats/fbx/core/helpers.js.map +1 -0
- package/dist/formats/fbx/index.js +2 -0
- package/dist/formats/fbx/index.js.map +1 -0
- package/dist/formats/flac/CjsFlacFormat.js +81 -0
- package/dist/formats/flac/CjsFlacFormat.js.map +1 -0
- package/dist/formats/flac/core/helpers.js +295 -0
- package/dist/formats/flac/core/helpers.js.map +1 -0
- package/dist/formats/flac/index.js +2 -0
- package/dist/formats/flac/index.js.map +1 -0
- package/dist/formats/gif/CjsGifFormat.js +81 -0
- package/dist/formats/gif/CjsGifFormat.js.map +1 -0
- package/dist/formats/gif/core/helpers.js +360 -0
- package/dist/formats/gif/core/helpers.js.map +1 -0
- package/dist/formats/gif/index.js +2 -0
- package/dist/formats/gif/index.js.map +1 -0
- package/dist/formats/gltf/CjsGltfFormat.js +284 -0
- package/dist/formats/gltf/CjsGltfFormat.js.map +1 -0
- package/dist/formats/gltf/core/helpers.js +292 -0
- package/dist/formats/gltf/core/helpers.js.map +1 -0
- package/dist/formats/gltf/core/json.js +79 -0
- package/dist/formats/gltf/core/json.js.map +1 -0
- package/dist/formats/gltf/core/parser.js +666 -0
- package/dist/formats/gltf/core/parser.js.map +1 -0
- package/dist/formats/gltf/core/targets.js +163 -0
- package/dist/formats/gltf/core/targets.js.map +1 -0
- package/dist/formats/gltf/index.js +2 -0
- package/dist/formats/gltf/index.js.map +1 -0
- package/dist/formats/index.js +23 -0
- package/dist/formats/index.js.map +1 -0
- package/dist/formats/jpeg/CjsJpegFormat.js +200 -0
- package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -0
- package/dist/formats/jpeg/core/helpers.js +350 -0
- package/dist/formats/jpeg/core/helpers.js.map +1 -0
- package/dist/formats/jpeg/core/jpeg.js +377 -0
- package/dist/formats/jpeg/core/jpeg.js.map +1 -0
- package/dist/formats/jpeg/index.js +2 -0
- package/dist/formats/jpeg/index.js.map +1 -0
- package/dist/formats/mp3/CjsMp3Format.js +186 -0
- package/dist/formats/mp3/CjsMp3Format.js.map +1 -0
- package/dist/formats/mp3/core/helpers.js +338 -0
- package/dist/formats/mp3/core/helpers.js.map +1 -0
- package/dist/formats/mp3/index.js +2 -0
- package/dist/formats/mp3/index.js.map +1 -0
- package/dist/formats/mp4/CjsMp4Format.js +185 -0
- package/dist/formats/mp4/CjsMp4Format.js.map +1 -0
- package/dist/formats/mp4/core/helpers.js +449 -0
- package/dist/formats/mp4/core/helpers.js.map +1 -0
- package/dist/formats/mp4/index.js +2 -0
- package/dist/formats/mp4/index.js.map +1 -0
- package/dist/formats/obj/CjsObjFormat.js +247 -0
- package/dist/formats/obj/CjsObjFormat.js.map +1 -0
- package/dist/formats/obj/core/helpers.js +573 -0
- package/dist/formats/obj/core/helpers.js.map +1 -0
- package/dist/formats/obj/core/json.js +64 -0
- package/dist/formats/obj/core/json.js.map +1 -0
- package/dist/formats/obj/core/parser.js +321 -0
- package/dist/formats/obj/core/parser.js.map +1 -0
- package/dist/formats/obj/index.js +2 -0
- package/dist/formats/obj/index.js.map +1 -0
- package/dist/formats/ogg/CjsOggFormat.js +82 -0
- package/dist/formats/ogg/CjsOggFormat.js.map +1 -0
- package/dist/formats/ogg/core/helpers.js +387 -0
- package/dist/formats/ogg/core/helpers.js.map +1 -0
- package/dist/formats/ogg/core/imdct.js +178 -0
- package/dist/formats/ogg/core/imdct.js.map +1 -0
- package/dist/formats/ogg/core/vorbis.js +999 -0
- package/dist/formats/ogg/core/vorbis.js.map +1 -0
- package/dist/formats/ogg/index.js +2 -0
- package/dist/formats/ogg/index.js.map +1 -0
- package/dist/formats/png/CjsPngFormat.js +189 -0
- package/dist/formats/png/CjsPngFormat.js.map +1 -0
- package/dist/formats/png/core/helpers.js +583 -0
- package/dist/formats/png/core/helpers.js.map +1 -0
- package/dist/formats/png/index.js +2 -0
- package/dist/formats/png/index.js.map +1 -0
- package/dist/formats/red/CjsRedFormat.js +247 -0
- package/dist/formats/red/CjsRedFormat.js.map +1 -0
- package/dist/formats/red/core/CjsRedReader.js +201 -0
- package/dist/formats/red/core/CjsRedReader.js.map +1 -0
- package/dist/formats/red/core/blackDefinitions.js +3 -0
- package/dist/formats/red/core/blackDefinitions.js.map +1 -0
- package/dist/formats/red/core/helpers.js +136 -0
- package/dist/formats/red/core/helpers.js.map +1 -0
- package/dist/formats/red/core/redGraph.js +68 -0
- package/dist/formats/red/core/redGraph.js.map +1 -0
- package/dist/formats/red/core/schema.js +4 -0
- package/dist/formats/red/core/schema.js.map +1 -0
- package/dist/formats/red/index.js +2 -0
- package/dist/formats/red/index.js.map +1 -0
- package/dist/formats/stl/CjsStlFormat.js +304 -0
- package/dist/formats/stl/CjsStlFormat.js.map +1 -0
- package/dist/formats/stl/core/helpers.js +257 -0
- package/dist/formats/stl/core/helpers.js.map +1 -0
- package/dist/formats/stl/core/json.js +51 -0
- package/dist/formats/stl/core/json.js.map +1 -0
- package/dist/formats/stl/core/stl.js +544 -0
- package/dist/formats/stl/core/stl.js.map +1 -0
- package/dist/formats/stl/core/targets.js +163 -0
- package/dist/formats/stl/core/targets.js.map +1 -0
- package/dist/formats/stl/index.js +2 -0
- package/dist/formats/stl/index.js.map +1 -0
- package/dist/formats/tga/CjsTgaFormat.js +186 -0
- package/dist/formats/tga/CjsTgaFormat.js.map +1 -0
- package/dist/formats/tga/core/helpers.js +446 -0
- package/dist/formats/tga/core/helpers.js.map +1 -0
- package/dist/formats/tga/index.js +2 -0
- package/dist/formats/tga/index.js.map +1 -0
- package/dist/formats/wav/CjsWavFormat.js +186 -0
- package/dist/formats/wav/CjsWavFormat.js.map +1 -0
- package/dist/formats/wav/core/helpers.js +328 -0
- package/dist/formats/wav/core/helpers.js.map +1 -0
- package/dist/formats/wav/index.js +2 -0
- package/dist/formats/wav/index.js.map +1 -0
- package/dist/formats/webm/CjsWebmFormat.js +185 -0
- package/dist/formats/webm/CjsWebmFormat.js.map +1 -0
- package/dist/formats/webm/core/helpers.js +537 -0
- package/dist/formats/webm/core/helpers.js.map +1 -0
- package/dist/formats/webm/index.js +2 -0
- package/dist/formats/webm/index.js.map +1 -0
- package/dist/formats/webp/CjsWebpFormat.js +80 -0
- package/dist/formats/webp/CjsWebpFormat.js.map +1 -0
- package/dist/formats/webp/core/helpers.js +214 -0
- package/dist/formats/webp/core/helpers.js.map +1 -0
- package/dist/formats/webp/index.js +2 -0
- package/dist/formats/webp/index.js.map +1 -0
- package/dist/formats/wem/CjsWemFormat.js +197 -0
- package/dist/formats/wem/CjsWemFormat.js.map +1 -0
- package/dist/formats/wem/core/bitStream.js +259 -0
- package/dist/formats/wem/core/bitStream.js.map +1 -0
- package/dist/formats/wem/core/codebookLibrary.js +164 -0
- package/dist/formats/wem/core/codebookLibrary.js.map +1 -0
- package/dist/formats/wem/core/helpers.js +336 -0
- package/dist/formats/wem/core/helpers.js.map +1 -0
- package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -0
- package/dist/formats/wem/core/packedCodebooksAotuv603.js.map +1 -0
- package/dist/formats/wem/core/wemToOgg.js +485 -0
- package/dist/formats/wem/core/wemToOgg.js.map +1 -0
- package/dist/formats/wem/index.js +2 -0
- package/dist/formats/wem/index.js.map +1 -0
- package/dist/formats/yaml/CjsYamlFormat.js +77 -0
- package/dist/formats/yaml/CjsYamlFormat.js.map +1 -0
- package/dist/formats/yaml/core/CjsYamlReader.js +304 -0
- package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -0
- package/dist/formats/yaml/core/helpers.js +160 -0
- package/dist/formats/yaml/core/helpers.js.map +1 -0
- package/dist/formats/yaml/index.js +2 -0
- package/dist/formats/yaml/index.js.map +1 -0
- package/dist/generated/resources/AudioGeometryResData.js +47 -0
- package/dist/generated/resources/AudioGeometryResData.js.map +1 -0
- package/dist/generated/resources/CmfVertexReader.js +46 -0
- package/dist/generated/resources/CmfVertexReader.js.map +1 -0
- package/dist/generated/resources/GStateBindingCallbackData.js +31 -0
- package/dist/generated/resources/GStateBindingCallbackData.js.map +1 -0
- package/dist/generated/resources/MeshDecalData.js +37 -0
- package/dist/generated/resources/MeshDecalData.js.map +1 -0
- package/dist/generated/resources/MeshDecalLodData.js +34 -0
- package/dist/generated/resources/MeshDecalLodData.js.map +1 -0
- package/dist/generated/resources/Tr2AsyncSave.js +46 -0
- package/dist/generated/resources/Tr2AsyncSave.js.map +1 -0
- package/dist/generated/resources/Tr2CmfContents.js +37 -0
- package/dist/generated/resources/Tr2CmfContents.js.map +1 -0
- package/dist/generated/resources/Tr2GrannyIntersectionResult.js +58 -0
- package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +1 -0
- package/dist/generated/resources/Tr2LoadPrepareFence.js +37 -0
- package/dist/generated/resources/Tr2LoadPrepareFence.js.map +1 -0
- package/dist/generated/resources/Tr2MaterialArea.js +34 -0
- package/dist/generated/resources/Tr2MaterialArea.js.map +1 -0
- package/dist/generated/resources/Tr2MaterialMesh.js +31 -0
- package/dist/generated/resources/Tr2MaterialMesh.js.map +1 -0
- package/dist/generated/resources/Tr2MaterialRes.js +34 -0
- package/dist/generated/resources/Tr2MaterialRes.js.map +1 -0
- package/dist/generated/resources/Tr2ShaderPermutation.js +43 -0
- package/dist/generated/resources/Tr2ShaderPermutation.js.map +1 -0
- package/dist/generated/resources/Tr2TextureLodManager.js +60 -0
- package/dist/generated/resources/Tr2TextureLodManager.js.map +1 -0
- package/dist/generated/resources/Tr2TextureLodUpdateRequest.js +37 -0
- package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePackChannel.js +37 -0
- package/dist/generated/resources/Tr2TexturePackChannel.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipeline.js +44 -0
- package/dist/generated/resources/Tr2TexturePipeline.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineParams.js +34 -0
- package/dist/generated/resources/Tr2TexturePipelineParams.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepCompress.js +40 -0
- package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js +34 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLoad.js +31 -0
- package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
- package/dist/generated/resources/Tr2TexturePipelineStepPack.js +43 -0
- package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +1 -0
- package/dist/generated/resources/TriGeometryResAreaData.js +59 -0
- package/dist/generated/resources/TriGeometryResAreaData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResJointData.js +38 -0
- package/dist/generated/resources/TriGeometryResJointData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResLodData.js +88 -0
- package/dist/generated/resources/TriGeometryResLodData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResMeshData.js +63 -0
- package/dist/generated/resources/TriGeometryResMeshData.js.map +1 -0
- package/dist/generated/resources/TriGeometryResSkeletonData.js +34 -0
- package/dist/generated/resources/TriGeometryResSkeletonData.js.map +1 -0
- package/dist/generated/resources/TriJointBinding.js +38 -0
- package/dist/generated/resources/TriJointBinding.js.map +1 -0
- package/dist/generated/resources/TriMorphTargetGeometryConstants.js +46 -0
- package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +1 -0
- package/dist/generated/resources/TriRtGeometryConstants.js +88 -0
- package/dist/generated/resources/TriRtGeometryConstants.js.map +1 -0
- package/dist/generated/resources/enums.js +18 -0
- package/dist/generated/resources/enums.js.map +1 -0
- package/dist/generated/resources/index.js +32 -0
- package/dist/generated/resources/index.js.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/resourcePath.js +18 -0
- package/dist/resourcePath.js.map +1 -0
- package/dist/resourceStates.js +9 -0
- package/dist/resourceStates.js.map +1 -0
- package/dist/resources/Tr2EffectRes.js +71 -0
- package/dist/resources/Tr2EffectRes.js.map +1 -0
- package/dist/resources/Tr2GrannyStateRes.js +44 -0
- package/dist/resources/Tr2GrannyStateRes.js.map +1 -0
- package/dist/resources/Tr2ImageRes.js +114 -0
- package/dist/resources/Tr2ImageRes.js.map +1 -0
- package/dist/resources/Tr2LightProfileRes.js +40 -0
- package/dist/resources/Tr2LightProfileRes.js.map +1 -0
- package/dist/resources/TriGeometryRes.js +216 -0
- package/dist/resources/TriGeometryRes.js.map +1 -0
- package/dist/resources/TriGrannyRes.js +43 -0
- package/dist/resources/TriGrannyRes.js.map +1 -0
- package/dist/resources/TriTextureRes.js +304 -0
- package/dist/resources/TriTextureRes.js.map +1 -0
- package/dist/resources/resourceBoundary.js +47 -0
- package/dist/resources/resourceBoundary.js.map +1 -0
- package/dist/texture/CjsTextureArrayRes.js +406 -0
- package/dist/texture/CjsTextureArrayRes.js.map +1 -0
- package/dist/texture/CjsTextureParameterProxy.js +133 -0
- package/dist/texture/CjsTextureParameterProxy.js.map +1 -0
- package/format-notices/black/LICENSE +21 -0
- package/format-notices/black/NOTICE +47 -0
- package/format-notices/bnk/LICENSE +21 -0
- package/format-notices/bnk/NOTICE +17 -0
- package/format-notices/cmf/LICENSE +21 -0
- package/format-notices/cmf/NOTICE +36 -0
- package/format-notices/dds/LICENSE +21 -0
- package/format-notices/dds/NOTICE +14 -0
- package/format-notices/fbx/LICENSE +21 -0
- package/format-notices/fbx/NOTICE +14 -0
- package/format-notices/flac/LICENSE +21 -0
- package/format-notices/flac/NOTICE +14 -0
- package/format-notices/gif/LICENSE +21 -0
- package/format-notices/gif/NOTICE +14 -0
- package/format-notices/gltf/LICENSE +21 -0
- package/format-notices/gltf/NOTICE +27 -0
- package/format-notices/jpeg/LICENSE +21 -0
- package/format-notices/jpeg/NOTICE +14 -0
- package/format-notices/mp3/LICENSE +21 -0
- package/format-notices/mp3/NOTICE +14 -0
- package/format-notices/mp4/LICENSE +21 -0
- package/format-notices/mp4/NOTICE +14 -0
- package/format-notices/obj/LICENSE +21 -0
- package/format-notices/obj/NOTICE +26 -0
- package/format-notices/ogg/LICENSE +21 -0
- package/format-notices/ogg/NOTICE +28 -0
- package/format-notices/png/LICENSE +21 -0
- package/format-notices/png/NOTICE +14 -0
- package/format-notices/red/LICENSE +21 -0
- package/format-notices/red/NOTICE +31 -0
- package/format-notices/stl/LICENSE +21 -0
- package/format-notices/stl/NOTICE +21 -0
- package/format-notices/tga/LICENSE +21 -0
- package/format-notices/tga/NOTICE +14 -0
- package/format-notices/wav/LICENSE +21 -0
- package/format-notices/wav/NOTICE +14 -0
- package/format-notices/webm/LICENSE +21 -0
- package/format-notices/webm/NOTICE +14 -0
- package/format-notices/webp/LICENSE +21 -0
- package/format-notices/webp/NOTICE +14 -0
- package/format-notices/wem/LICENSE +57 -0
- package/format-notices/wem/NOTICE +33 -0
- package/format-notices/yaml/LICENSE +21 -0
- package/format-notices/yaml/NOTICE +44 -0
- package/package.json +51 -0
- package/resource-lifecycle.md +487 -0
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
const OUTPUT_VIDEO = "video";
|
|
2
|
+
const OUTPUT_RAW = "raw";
|
|
3
|
+
const OUTPUT_JSON = "json";
|
|
4
|
+
const DEFAULT_VALUES = Object.freeze({
|
|
5
|
+
emit: OUTPUT_RAW,
|
|
6
|
+
inputType: "",
|
|
7
|
+
source: ""
|
|
8
|
+
});
|
|
9
|
+
const DEBUG_OUTPUTS = Object.freeze({
|
|
10
|
+
mp4: "mp4Json",
|
|
11
|
+
webm: "webmJson"
|
|
12
|
+
});
|
|
13
|
+
function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = "CjsVideoFormat") {
|
|
14
|
+
const values = {
|
|
15
|
+
...DEFAULT_VALUES,
|
|
16
|
+
...(base || {}),
|
|
17
|
+
...(options || {})
|
|
18
|
+
};
|
|
19
|
+
values.inputType = values.inputType ? String(values.inputType).replace(/^\./u, "").toLowerCase() : "";
|
|
20
|
+
values.emit = normalizeEmit(values.emit, values.inputType, readerName);
|
|
21
|
+
return values;
|
|
22
|
+
}
|
|
23
|
+
function normalizeEmit(emit, inputType, readerName) {
|
|
24
|
+
if (emit === undefined || emit === null) return OUTPUT_RAW;
|
|
25
|
+
if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;
|
|
26
|
+
if ([OUTPUT_VIDEO, OUTPUT_RAW, OUTPUT_JSON].includes(emit)) return emit;
|
|
27
|
+
if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;
|
|
28
|
+
throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);
|
|
29
|
+
}
|
|
30
|
+
function toBytes(input) {
|
|
31
|
+
if (input instanceof Uint8Array) return input;
|
|
32
|
+
if (input instanceof ArrayBuffer) return new Uint8Array(input);
|
|
33
|
+
if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
|
|
34
|
+
throw new TypeError("Video input must be Uint8Array, ArrayBuffer, or DataView");
|
|
35
|
+
}
|
|
36
|
+
function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
37
|
+
const bytes = toBytes(input);
|
|
38
|
+
const metadata = inspectBytes(bytes);
|
|
39
|
+
if (expectedType && metadata.sourceFormat && metadata.sourceFormat !== expectedType) {
|
|
40
|
+
throw new TypeError(`CjsVideoFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
payloadType: "video",
|
|
44
|
+
mediaTypes: ["video"],
|
|
45
|
+
byteLength: bytes.byteLength,
|
|
46
|
+
sourceFormat: expectedType || values.inputType || metadata.sourceFormat,
|
|
47
|
+
...metadata
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
51
|
+
try {
|
|
52
|
+
const metadata = inspectWithValues(input, values, expectedType);
|
|
53
|
+
const codecs = getTrackCodecSummary(metadata);
|
|
54
|
+
const mimeType = getMediaMimeType(metadata);
|
|
55
|
+
return {
|
|
56
|
+
format: metadata.sourceFormat,
|
|
57
|
+
source: values.source || "buffer",
|
|
58
|
+
supported: metadata.sourceFormat ? "partial" : "none",
|
|
59
|
+
confidence: metadata.sourceFormat ? 1 : 0,
|
|
60
|
+
preferred: "container",
|
|
61
|
+
reason: metadata.sourceFormat ? "Container/header recognized." : "Unrecognized video format.",
|
|
62
|
+
metadata,
|
|
63
|
+
variants: [{
|
|
64
|
+
kind: "raw",
|
|
65
|
+
payloadType: "raw",
|
|
66
|
+
codec: metadata.sourceFormat,
|
|
67
|
+
mimeType,
|
|
68
|
+
supported: true,
|
|
69
|
+
containerOnly: true,
|
|
70
|
+
isDecoded: false,
|
|
71
|
+
frameDecodeSupported: false
|
|
72
|
+
}, {
|
|
73
|
+
kind: "container",
|
|
74
|
+
payloadType: "video",
|
|
75
|
+
codec: metadata.sourceFormat,
|
|
76
|
+
mimeType,
|
|
77
|
+
codecs: codecs.codecs,
|
|
78
|
+
videoCodecs: codecs.videoCodecs,
|
|
79
|
+
audioCodecs: codecs.audioCodecs,
|
|
80
|
+
supported: true,
|
|
81
|
+
containerOnly: true,
|
|
82
|
+
isDecoded: false,
|
|
83
|
+
frameDecodeSupported: false
|
|
84
|
+
}, {
|
|
85
|
+
kind: "decoded",
|
|
86
|
+
payloadType: "video-frame",
|
|
87
|
+
codec: "frames",
|
|
88
|
+
supported: false,
|
|
89
|
+
reason: "Video decode is not implemented in this package."
|
|
90
|
+
}],
|
|
91
|
+
warnings: [],
|
|
92
|
+
errors: []
|
|
93
|
+
};
|
|
94
|
+
} catch (error) {
|
|
95
|
+
return {
|
|
96
|
+
format: expectedType || values.inputType || "",
|
|
97
|
+
source: values.source || "buffer",
|
|
98
|
+
supported: "none",
|
|
99
|
+
confidence: 0,
|
|
100
|
+
preferred: "",
|
|
101
|
+
reason: error.message,
|
|
102
|
+
metadata: null,
|
|
103
|
+
variants: [],
|
|
104
|
+
warnings: [],
|
|
105
|
+
errors: [error.message]
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function readWithValues(input, values = DEFAULT_VALUES, expectedType = "") {
|
|
110
|
+
const bytes = toBytes(input);
|
|
111
|
+
const metadata = inspectWithValues(bytes, values, expectedType);
|
|
112
|
+
if (values.emit === OUTPUT_RAW) {
|
|
113
|
+
return {
|
|
114
|
+
payloadType: "raw",
|
|
115
|
+
sourceFormat: metadata.sourceFormat,
|
|
116
|
+
metadata,
|
|
117
|
+
bytes
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat]) return metadata;
|
|
121
|
+
if (values.emit === OUTPUT_VIDEO && metadata.sourceFormat === "webm") {
|
|
122
|
+
const codecs = getTrackCodecSummary(metadata);
|
|
123
|
+
const mimeType = getMediaMimeType(metadata);
|
|
124
|
+
return {
|
|
125
|
+
payloadType: OUTPUT_VIDEO,
|
|
126
|
+
sourceFormat: "webm",
|
|
127
|
+
container: metadata.container,
|
|
128
|
+
mimeType,
|
|
129
|
+
containerOnly: true,
|
|
130
|
+
isDecoded: false,
|
|
131
|
+
frameDecodeSupported: false,
|
|
132
|
+
codecs: codecs.codecs,
|
|
133
|
+
videoCodecs: codecs.videoCodecs,
|
|
134
|
+
audioCodecs: codecs.audioCodecs,
|
|
135
|
+
duration: metadata.duration || 0,
|
|
136
|
+
durationTimescale: metadata.durationTimescale || 1,
|
|
137
|
+
tracks: metadata.tracks || [],
|
|
138
|
+
metadata,
|
|
139
|
+
sourceBytes: bytes
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const error = new Error(`${metadata.sourceFormat}: emit "${values.emit}" is not implemented yet`);
|
|
143
|
+
error.code = "CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED";
|
|
144
|
+
error.sourceFormat = metadata.sourceFormat;
|
|
145
|
+
error.emit = values.emit;
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
function getTrackCodecSummary(metadata) {
|
|
149
|
+
const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];
|
|
150
|
+
return {
|
|
151
|
+
codecs: uniqueTrackCodecs(tracks),
|
|
152
|
+
videoCodecs: uniqueTrackCodecs(tracks.filter(track => track.type === "video")),
|
|
153
|
+
audioCodecs: uniqueTrackCodecs(tracks.filter(track => track.type === "audio"))
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function uniqueTrackCodecs(tracks) {
|
|
157
|
+
return [...new Set(tracks.map(track => track.codec).filter(Boolean))];
|
|
158
|
+
}
|
|
159
|
+
function getMediaMimeType(metadata) {
|
|
160
|
+
const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];
|
|
161
|
+
return tracks.some(track => track.type === "video") ? "video/webm" : "audio/webm";
|
|
162
|
+
}
|
|
163
|
+
function inspectBytes(bytes) {
|
|
164
|
+
if (isMP4(bytes)) return inspectMP4(bytes);
|
|
165
|
+
if (isWebM(bytes)) return inspectWebM(bytes);
|
|
166
|
+
return {
|
|
167
|
+
sourceFormat: ""
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function isMP4(bytes) {
|
|
171
|
+
return bytes.byteLength >= 12 && fourCc(bytes, 4) === "ftyp";
|
|
172
|
+
}
|
|
173
|
+
function isWebM(bytes) {
|
|
174
|
+
return bytes.byteLength >= 4 && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3;
|
|
175
|
+
}
|
|
176
|
+
function toJsonValue(value) {
|
|
177
|
+
if (value instanceof Uint8Array) return {
|
|
178
|
+
byteLength: value.byteLength
|
|
179
|
+
};
|
|
180
|
+
if (Array.isArray(value)) return value.map(toJsonValue);
|
|
181
|
+
if (value && typeof value === "object") {
|
|
182
|
+
const output = {};
|
|
183
|
+
for (const [key, entry] of Object.entries(value)) output[key] = toJsonValue(entry);
|
|
184
|
+
return output;
|
|
185
|
+
}
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
function inspectMP4(bytes) {
|
|
189
|
+
return {
|
|
190
|
+
sourceFormat: "mp4",
|
|
191
|
+
brand: fourCc(bytes, 8),
|
|
192
|
+
container: "isobmff"
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function inspectWebM(bytes) {
|
|
196
|
+
const roots = readEbmlElements(bytes, 0, bytes.byteLength);
|
|
197
|
+
const fallbackRoots = readEbmlElements(bytes, 4, bytes.byteLength);
|
|
198
|
+
const segment = roots.find(element => element.id === 0x18538067) || fallbackRoots.find(element => element.id === 0x18538067);
|
|
199
|
+
if (!segment) {
|
|
200
|
+
return {
|
|
201
|
+
sourceFormat: "webm",
|
|
202
|
+
container: "ebml",
|
|
203
|
+
duration: 0,
|
|
204
|
+
durationTimescale: 1,
|
|
205
|
+
tracks: []
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
const children = readEbmlElements(bytes, segment.dataStart, segment.end);
|
|
209
|
+
const info = children.find(element => element.id === 0x1549a966);
|
|
210
|
+
const tracks = children.find(element => element.id === 0x1654ae6b);
|
|
211
|
+
const infoChildren = info ? readEbmlElements(bytes, info.dataStart, info.end) : [];
|
|
212
|
+
const timecodeScale = readEbmlUnsignedValue(bytes, infoChildren.find(element => element.id === 0x2ad7b1)) || 1000000;
|
|
213
|
+
const durationTicks = readEbmlFloatValue(bytes, infoChildren.find(element => element.id === 0x4489)) || 0;
|
|
214
|
+
const duration = Math.round(durationTicks * timecodeScale);
|
|
215
|
+
const clusters = children.filter(element => element.id === 0x1f43b675);
|
|
216
|
+
const blockSummary = readWebmBlocks(bytes, clusters);
|
|
217
|
+
return {
|
|
218
|
+
sourceFormat: "webm",
|
|
219
|
+
container: "ebml",
|
|
220
|
+
timecodeScale,
|
|
221
|
+
duration,
|
|
222
|
+
durationTimescale: 1000000000,
|
|
223
|
+
durationSeconds: duration / 1000000000,
|
|
224
|
+
tracks: tracks ? readWebmTracks(bytes, tracks) : [],
|
|
225
|
+
clusterCount: clusters.length,
|
|
226
|
+
blockCount: blockSummary.blockCount,
|
|
227
|
+
blockTrackIds: blockSummary.trackIds,
|
|
228
|
+
clusterTimecodes: blockSummary.clusterTimecodes,
|
|
229
|
+
blocks: blockSummary.blocks
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
function readWebmTracks(bytes, tracksElement) {
|
|
233
|
+
return readEbmlElements(bytes, tracksElement.dataStart, tracksElement.end).filter(element => element.id === 0xae).map(entry => {
|
|
234
|
+
const fields = readEbmlElements(bytes, entry.dataStart, entry.end);
|
|
235
|
+
const trackType = readEbmlUnsignedValue(bytes, fields.find(field => field.id === 0x83));
|
|
236
|
+
const video = fields.find(field => field.id === 0xe0);
|
|
237
|
+
const audio = fields.find(field => field.id === 0xe1);
|
|
238
|
+
const codecPrivate = fields.find(field => field.id === 0x63a2);
|
|
239
|
+
const result = {
|
|
240
|
+
id: readEbmlUnsignedValue(bytes, fields.find(field => field.id === 0xd7)) || 0,
|
|
241
|
+
type: trackType === 1 ? "video" : trackType === 2 ? "audio" : "unknown",
|
|
242
|
+
codec: readEbmlStringValue(bytes, fields.find(field => field.id === 0x86)) || "",
|
|
243
|
+
language: readEbmlStringValue(bytes, fields.find(field => field.id === 0x22b59c)) || "und"
|
|
244
|
+
};
|
|
245
|
+
const defaultDuration = readEbmlUnsignedValue(bytes, fields.find(field => field.id === 0x23e383));
|
|
246
|
+
if (defaultDuration) result.defaultDuration = defaultDuration;
|
|
247
|
+
if (codecPrivate) result.codecPrivateBytes = codecPrivate.end - codecPrivate.dataStart;
|
|
248
|
+
if (video) {
|
|
249
|
+
const videoFields = readEbmlElements(bytes, video.dataStart, video.end);
|
|
250
|
+
result.width = readEbmlUnsignedValue(bytes, videoFields.find(field => field.id === 0xb0)) || 0;
|
|
251
|
+
result.height = readEbmlUnsignedValue(bytes, videoFields.find(field => field.id === 0xba)) || 0;
|
|
252
|
+
}
|
|
253
|
+
if (audio) {
|
|
254
|
+
const audioFields = readEbmlElements(bytes, audio.dataStart, audio.end);
|
|
255
|
+
result.channels = readEbmlUnsignedValue(bytes, audioFields.find(field => field.id === 0x9f)) || 0;
|
|
256
|
+
result.sampleRate = readEbmlFloatValue(bytes, audioFields.find(field => field.id === 0xb5)) || 0;
|
|
257
|
+
result.bitDepth = readEbmlUnsignedValue(bytes, audioFields.find(field => field.id === 0x6264)) || 0;
|
|
258
|
+
}
|
|
259
|
+
return result;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
function readWebmBlocks(bytes, clusters) {
|
|
263
|
+
const trackIds = new Set();
|
|
264
|
+
const clusterTimecodes = [];
|
|
265
|
+
const blocks = [];
|
|
266
|
+
let blockCount = 0;
|
|
267
|
+
for (const cluster of clusters) {
|
|
268
|
+
const children = readEbmlElements(bytes, cluster.dataStart, cluster.end);
|
|
269
|
+
const clusterTimecode = readEbmlUnsignedValue(bytes, children.find(child => child.id === 0xe7));
|
|
270
|
+
clusterTimecodes.push(clusterTimecode);
|
|
271
|
+
for (const child of children) {
|
|
272
|
+
if (child.id === 0xa3) {
|
|
273
|
+
blockCount++;
|
|
274
|
+
const block = readWebmBlock(bytes, child, clusterTimecode, true);
|
|
275
|
+
if (block) {
|
|
276
|
+
blocks.push(block);
|
|
277
|
+
trackIds.add(block.trackId);
|
|
278
|
+
}
|
|
279
|
+
} else if (child.id === 0xa0) {
|
|
280
|
+
const groupChildren = readEbmlElements(bytes, child.dataStart, child.end);
|
|
281
|
+
const reference = groupChildren.some(groupChild => groupChild.id === 0xfb);
|
|
282
|
+
for (const groupChild of groupChildren) {
|
|
283
|
+
if (groupChild.id !== 0xa1) continue;
|
|
284
|
+
blockCount++;
|
|
285
|
+
const block = readWebmBlock(bytes, groupChild, clusterTimecode, false);
|
|
286
|
+
if (block) {
|
|
287
|
+
block.keyframe = !reference;
|
|
288
|
+
blocks.push(block);
|
|
289
|
+
trackIds.add(block.trackId);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return {
|
|
296
|
+
blockCount,
|
|
297
|
+
trackIds: Array.from(trackIds).sort((a, b) => a - b),
|
|
298
|
+
clusterTimecodes,
|
|
299
|
+
blocks
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
function readWebmBlock(bytes, element, clusterTimecode, simple) {
|
|
303
|
+
const track = readEbmlVint(bytes, element.dataStart, element.end);
|
|
304
|
+
if (!track || track.value === null || element.dataStart + track.length + 3 > element.end) return null;
|
|
305
|
+
const timecodeOffset = element.dataStart + track.length;
|
|
306
|
+
const relativeTimecode = bytes[timecodeOffset] << 8 | bytes[timecodeOffset + 1];
|
|
307
|
+
const signedTimecode = relativeTimecode & 0x8000 ? relativeTimecode - 0x10000 : relativeTimecode;
|
|
308
|
+
const flags = bytes[timecodeOffset + 2];
|
|
309
|
+
const lacing = ["none", "xiph", "fixed", "ebml"][flags >> 1 & 0x03];
|
|
310
|
+
const frames = readWebmBlockFrames(bytes, timecodeOffset + 3, element.end, lacing);
|
|
311
|
+
return {
|
|
312
|
+
trackId: track.value,
|
|
313
|
+
timecode: signedTimecode,
|
|
314
|
+
absoluteTimecode: clusterTimecode + signedTimecode,
|
|
315
|
+
keyframe: simple ? !!(flags & 0x80) : false,
|
|
316
|
+
invisible: !!(flags & 0x08),
|
|
317
|
+
lacing,
|
|
318
|
+
frameCount: frames.frameCount,
|
|
319
|
+
frameSizes: frames.frameSizes,
|
|
320
|
+
payloadBytes: frames.payloadBytes,
|
|
321
|
+
...(frames.error ? {
|
|
322
|
+
lacingError: frames.error
|
|
323
|
+
} : {})
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
function readWebmBlockFrames(bytes, payloadStart, payloadEnd, lacing) {
|
|
327
|
+
const payloadBytes = Math.max(0, payloadEnd - payloadStart);
|
|
328
|
+
if (payloadStart > payloadEnd) return {
|
|
329
|
+
frameCount: 0,
|
|
330
|
+
frameSizes: [],
|
|
331
|
+
payloadBytes: 0,
|
|
332
|
+
error: "invalid-payload-range"
|
|
333
|
+
};
|
|
334
|
+
if (lacing === "none") return {
|
|
335
|
+
frameCount: 1,
|
|
336
|
+
frameSizes: [payloadBytes],
|
|
337
|
+
payloadBytes
|
|
338
|
+
};
|
|
339
|
+
if (payloadStart >= payloadEnd) return {
|
|
340
|
+
frameCount: 0,
|
|
341
|
+
frameSizes: [],
|
|
342
|
+
payloadBytes,
|
|
343
|
+
error: "missing-lacing-header"
|
|
344
|
+
};
|
|
345
|
+
const frameCount = bytes[payloadStart] + 1;
|
|
346
|
+
const dataStart = payloadStart + 1;
|
|
347
|
+
if (frameCount < 2) return {
|
|
348
|
+
frameCount,
|
|
349
|
+
frameSizes: [],
|
|
350
|
+
payloadBytes,
|
|
351
|
+
error: "invalid-laced-frame-count"
|
|
352
|
+
};
|
|
353
|
+
if (lacing === "fixed") return readFixedLacedFrames(payloadBytes, frameCount);
|
|
354
|
+
if (lacing === "xiph") return readXiphLacedFrames(bytes, dataStart, payloadEnd, payloadBytes, frameCount);
|
|
355
|
+
return readEbmlLacedFrames(bytes, dataStart, payloadEnd, payloadBytes, frameCount);
|
|
356
|
+
}
|
|
357
|
+
function readFixedLacedFrames(payloadBytes, frameCount) {
|
|
358
|
+
const dataBytes = payloadBytes - 1;
|
|
359
|
+
if (dataBytes < 0 || dataBytes % frameCount !== 0) {
|
|
360
|
+
return {
|
|
361
|
+
frameCount,
|
|
362
|
+
frameSizes: [],
|
|
363
|
+
payloadBytes,
|
|
364
|
+
error: "invalid-fixed-lacing-size"
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
frameCount,
|
|
369
|
+
frameSizes: Array.from({
|
|
370
|
+
length: frameCount
|
|
371
|
+
}, () => dataBytes / frameCount),
|
|
372
|
+
payloadBytes
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
function readXiphLacedFrames(bytes, offset, end, payloadBytes, frameCount) {
|
|
376
|
+
const frameSizes = [];
|
|
377
|
+
for (let frame = 0; frame < frameCount - 1; frame++) {
|
|
378
|
+
let size = 0;
|
|
379
|
+
let closed = false;
|
|
380
|
+
while (offset < end) {
|
|
381
|
+
const value = bytes[offset++];
|
|
382
|
+
size += value;
|
|
383
|
+
if (value !== 255) {
|
|
384
|
+
closed = true;
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (!closed) return {
|
|
389
|
+
frameCount,
|
|
390
|
+
frameSizes: [],
|
|
391
|
+
payloadBytes,
|
|
392
|
+
error: "unterminated-xiph-lacing-size"
|
|
393
|
+
};
|
|
394
|
+
frameSizes.push(size);
|
|
395
|
+
}
|
|
396
|
+
const remaining = end - offset - frameSizes.reduce((sum, size) => sum + size, 0);
|
|
397
|
+
if (remaining < 0) return {
|
|
398
|
+
frameCount,
|
|
399
|
+
frameSizes: [],
|
|
400
|
+
payloadBytes,
|
|
401
|
+
error: "invalid-xiph-lacing-size"
|
|
402
|
+
};
|
|
403
|
+
frameSizes.push(remaining);
|
|
404
|
+
return {
|
|
405
|
+
frameCount,
|
|
406
|
+
frameSizes,
|
|
407
|
+
payloadBytes
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
function readEbmlLacedFrames(bytes, offset, end, payloadBytes, frameCount) {
|
|
411
|
+
const first = readEbmlVint(bytes, offset, end);
|
|
412
|
+
if (!first || first.value === null) return {
|
|
413
|
+
frameCount,
|
|
414
|
+
frameSizes: [],
|
|
415
|
+
payloadBytes,
|
|
416
|
+
error: "missing-ebml-lacing-size"
|
|
417
|
+
};
|
|
418
|
+
const frameSizes = [first.value];
|
|
419
|
+
offset += first.length;
|
|
420
|
+
for (let frame = 1; frame < frameCount - 1; frame++) {
|
|
421
|
+
const delta = readEbmlSignedVint(bytes, offset, end);
|
|
422
|
+
if (!delta) return {
|
|
423
|
+
frameCount,
|
|
424
|
+
frameSizes: [],
|
|
425
|
+
payloadBytes,
|
|
426
|
+
error: "missing-ebml-lacing-delta"
|
|
427
|
+
};
|
|
428
|
+
const size = frameSizes[frame - 1] + delta.value;
|
|
429
|
+
if (size < 0) return {
|
|
430
|
+
frameCount,
|
|
431
|
+
frameSizes: [],
|
|
432
|
+
payloadBytes,
|
|
433
|
+
error: "invalid-ebml-lacing-size"
|
|
434
|
+
};
|
|
435
|
+
frameSizes.push(size);
|
|
436
|
+
offset += delta.length;
|
|
437
|
+
}
|
|
438
|
+
const remaining = end - offset - frameSizes.reduce((sum, size) => sum + size, 0);
|
|
439
|
+
if (remaining < 0) return {
|
|
440
|
+
frameCount,
|
|
441
|
+
frameSizes: [],
|
|
442
|
+
payloadBytes,
|
|
443
|
+
error: "invalid-ebml-lacing-size"
|
|
444
|
+
};
|
|
445
|
+
frameSizes.push(remaining);
|
|
446
|
+
return {
|
|
447
|
+
frameCount,
|
|
448
|
+
frameSizes,
|
|
449
|
+
payloadBytes
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function readEbmlElements(bytes, start, end) {
|
|
453
|
+
const elements = [];
|
|
454
|
+
let offset = start;
|
|
455
|
+
while (offset < end) {
|
|
456
|
+
const id = readEbmlId(bytes, offset, end);
|
|
457
|
+
if (!id) break;
|
|
458
|
+
const size = readEbmlVint(bytes, offset + id.length, end);
|
|
459
|
+
if (!size) break;
|
|
460
|
+
const dataStart = offset + id.length + size.length;
|
|
461
|
+
const elementEnd = size.value === null ? end : dataStart + size.value;
|
|
462
|
+
if (elementEnd > end) break;
|
|
463
|
+
elements.push({
|
|
464
|
+
id: id.value,
|
|
465
|
+
dataStart,
|
|
466
|
+
end: elementEnd
|
|
467
|
+
});
|
|
468
|
+
if (size.value === null) break;
|
|
469
|
+
offset = elementEnd;
|
|
470
|
+
}
|
|
471
|
+
return elements;
|
|
472
|
+
}
|
|
473
|
+
function readEbmlId(bytes, offset, end) {
|
|
474
|
+
if (offset >= end) return null;
|
|
475
|
+
const first = bytes[offset];
|
|
476
|
+
let length = 1;
|
|
477
|
+
let mask = 0x80;
|
|
478
|
+
while (length <= 4 && !(first & mask)) {
|
|
479
|
+
length++;
|
|
480
|
+
mask >>>= 1;
|
|
481
|
+
}
|
|
482
|
+
if (length > 4 || offset + length > end) return null;
|
|
483
|
+
let value = 0;
|
|
484
|
+
for (let i = 0; i < length; i++) value = value * 256 + bytes[offset + i];
|
|
485
|
+
return {
|
|
486
|
+
value,
|
|
487
|
+
length
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
function readEbmlVint(bytes, offset, end, removeMarker) {
|
|
491
|
+
if (offset >= end) return null;
|
|
492
|
+
const first = bytes[offset];
|
|
493
|
+
let length = 1;
|
|
494
|
+
let mask = 0x80;
|
|
495
|
+
while (length <= 8 && !(first & mask)) {
|
|
496
|
+
length++;
|
|
497
|
+
mask >>>= 1;
|
|
498
|
+
}
|
|
499
|
+
if (length > 8 || offset + length > end) return null;
|
|
500
|
+
let value = first & (~mask & 0xff) ;
|
|
501
|
+
for (let i = 1; i < length; i++) value = value * 256 + bytes[offset + i];
|
|
502
|
+
const unknown = value === Math.pow(2, length * 7) - 1;
|
|
503
|
+
return {
|
|
504
|
+
value: unknown ? null : value,
|
|
505
|
+
length
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
function readEbmlSignedVint(bytes, offset, end) {
|
|
509
|
+
const vint = readEbmlVint(bytes, offset, end);
|
|
510
|
+
if (!vint || vint.value === null) return null;
|
|
511
|
+
const bias = Math.pow(2, vint.length * 7 - 1) - 1;
|
|
512
|
+
return {
|
|
513
|
+
value: vint.value - bias,
|
|
514
|
+
length: vint.length
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
function readEbmlUnsignedValue(bytes, element) {
|
|
518
|
+
if (!element) return 0;
|
|
519
|
+
let value = 0;
|
|
520
|
+
for (let offset = element.dataStart; offset < element.end; offset++) value = value * 256 + bytes[offset];
|
|
521
|
+
return value;
|
|
522
|
+
}
|
|
523
|
+
function readEbmlFloatValue(bytes, element) {
|
|
524
|
+
if (!element || ![4, 8].includes(element.end - element.dataStart)) return 0;
|
|
525
|
+
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
526
|
+
return element.end - element.dataStart === 4 ? view.getFloat32(element.dataStart, false) : view.getFloat64(element.dataStart, false);
|
|
527
|
+
}
|
|
528
|
+
function readEbmlStringValue(bytes, element) {
|
|
529
|
+
if (!element) return "";
|
|
530
|
+
return new TextDecoder().decode(bytes.subarray(element.dataStart, element.end));
|
|
531
|
+
}
|
|
532
|
+
function fourCc(bytes, offset) {
|
|
533
|
+
return String.fromCharCode(bytes[offset] || 0, bytes[offset + 1] || 0, bytes[offset + 2] || 0, bytes[offset + 3] || 0);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
export { DEFAULT_VALUES, OUTPUT_JSON, OUTPUT_RAW, OUTPUT_VIDEO, inspectBytes, inspectWithValues, isMP4, isSupportedWithValues, isWebM, normalizeEmit, normalizeValues, readWithValues, toBytes, toJsonValue };
|
|
537
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../../../src/formats/webm/core/helpers.js"],"sourcesContent":["export const OUTPUT_VIDEO = \"video\";\nexport const OUTPUT_RAW = \"raw\";\nexport const OUTPUT_JSON = \"json\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_RAW,\n inputType: \"\",\n source: \"\"\n});\n\nconst DEBUG_OUTPUTS = Object.freeze({\n mp4: \"mp4Json\",\n webm: \"webmJson\"\n});\n\nexport function normalizeValues(base = DEFAULT_VALUES, options = {}, readerName = \"CjsVideoFormat\")\n{\n const values = { ...DEFAULT_VALUES, ...(base || {}), ...(options || {}) };\n values.inputType = values.inputType ? String(values.inputType).replace(/^\\./u, \"\").toLowerCase() : \"\";\n values.emit = normalizeEmit(values.emit, values.inputType, readerName);\n return values;\n}\n\nexport function normalizeEmit(emit, inputType, readerName)\n{\n if (emit === undefined || emit === null) return OUTPUT_RAW;\n if (emit === OUTPUT_JSON && inputType) return DEBUG_OUTPUTS[inputType] || OUTPUT_JSON;\n if ([ OUTPUT_VIDEO, OUTPUT_RAW, OUTPUT_JSON ].includes(emit)) return emit;\n if (Object.values(DEBUG_OUTPUTS).includes(emit)) return emit;\n throw new TypeError(`${readerName}: unknown emit value ${JSON.stringify(emit)}`);\n}\n\nexport function toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"Video input must be Uint8Array, ArrayBuffer, or DataView\");\n}\n\nexport function inspectWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const metadata = inspectBytes(bytes);\n if (expectedType && metadata.sourceFormat && metadata.sourceFormat !== expectedType)\n {\n throw new TypeError(`CjsVideoFormat: expected ${expectedType}, got ${metadata.sourceFormat}`);\n }\n return {\n payloadType: \"video\",\n mediaTypes: [ \"video\" ],\n byteLength: bytes.byteLength,\n sourceFormat: expectedType || values.inputType || metadata.sourceFormat,\n ...metadata\n };\n}\n\nexport function isSupportedWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n try\n {\n const metadata = inspectWithValues(input, values, expectedType);\n const codecs = getTrackCodecSummary(metadata);\n const mimeType = getMediaMimeType(metadata);\n return {\n format: metadata.sourceFormat,\n source: values.source || \"buffer\",\n supported: metadata.sourceFormat ? \"partial\" : \"none\",\n confidence: metadata.sourceFormat ? 1 : 0,\n preferred: \"container\",\n reason: metadata.sourceFormat ? \"Container/header recognized.\" : \"Unrecognized video format.\",\n metadata,\n variants: [\n {\n kind: \"raw\",\n payloadType: \"raw\",\n codec: metadata.sourceFormat,\n mimeType,\n supported: true,\n containerOnly: true,\n isDecoded: false,\n frameDecodeSupported: false\n },\n {\n kind: \"container\",\n payloadType: \"video\",\n codec: metadata.sourceFormat,\n mimeType,\n codecs: codecs.codecs,\n videoCodecs: codecs.videoCodecs,\n audioCodecs: codecs.audioCodecs,\n supported: true,\n containerOnly: true,\n isDecoded: false,\n frameDecodeSupported: false\n },\n {\n kind: \"decoded\",\n payloadType: \"video-frame\",\n codec: \"frames\",\n supported: false,\n reason: \"Video decode is not implemented in this package.\"\n }\n ],\n warnings: [],\n errors: []\n };\n }\n catch (error)\n {\n return {\n format: expectedType || values.inputType || \"\",\n source: values.source || \"buffer\",\n supported: \"none\",\n confidence: 0,\n preferred: \"\",\n reason: error.message,\n metadata: null,\n variants: [],\n warnings: [],\n errors: [ error.message ]\n };\n }\n}\n\nexport function readWithValues(input, values = DEFAULT_VALUES, expectedType = \"\")\n{\n const bytes = toBytes(input);\n const metadata = inspectWithValues(bytes, values, expectedType);\n if (values.emit === OUTPUT_RAW)\n {\n return {\n payloadType: \"raw\",\n sourceFormat: metadata.sourceFormat,\n metadata,\n bytes\n };\n }\n if (values.emit === OUTPUT_JSON || values.emit === DEBUG_OUTPUTS[metadata.sourceFormat]) return metadata;\n\n if (values.emit === OUTPUT_VIDEO && metadata.sourceFormat === \"webm\")\n {\n const codecs = getTrackCodecSummary(metadata);\n const mimeType = getMediaMimeType(metadata);\n return {\n payloadType: OUTPUT_VIDEO,\n sourceFormat: \"webm\",\n container: metadata.container,\n mimeType,\n containerOnly: true,\n isDecoded: false,\n frameDecodeSupported: false,\n codecs: codecs.codecs,\n videoCodecs: codecs.videoCodecs,\n audioCodecs: codecs.audioCodecs,\n duration: metadata.duration || 0,\n durationTimescale: metadata.durationTimescale || 1,\n tracks: metadata.tracks || [],\n metadata,\n sourceBytes: bytes\n };\n }\n\n const error = new Error(`${metadata.sourceFormat}: emit \"${values.emit}\" is not implemented yet`);\n error.code = \"CJS_FORMAT_OUTPUT_NOT_IMPLEMENTED\";\n error.sourceFormat = metadata.sourceFormat;\n error.emit = values.emit;\n throw error;\n}\n\nfunction getTrackCodecSummary(metadata)\n{\n const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];\n return {\n codecs: uniqueTrackCodecs(tracks),\n videoCodecs: uniqueTrackCodecs(tracks.filter((track) => track.type === \"video\")),\n audioCodecs: uniqueTrackCodecs(tracks.filter((track) => track.type === \"audio\"))\n };\n}\n\nfunction uniqueTrackCodecs(tracks)\n{\n return [ ...new Set(tracks.map((track) => track.codec).filter(Boolean)) ];\n}\n\nfunction getMediaMimeType(metadata)\n{\n const tracks = Array.isArray(metadata.tracks) ? metadata.tracks : [];\n return tracks.some((track) => track.type === \"video\") ? \"video/webm\" : \"audio/webm\";\n}\n\nexport function inspectBytes(bytes)\n{\n if (isMP4(bytes)) return inspectMP4(bytes);\n if (isWebM(bytes)) return inspectWebM(bytes);\n return { sourceFormat: \"\" };\n}\n\nexport function isMP4(bytes)\n{\n return bytes.byteLength >= 12 && fourCc(bytes, 4) === \"ftyp\";\n}\n\nexport function isWebM(bytes)\n{\n return bytes.byteLength >= 4 && bytes[0] === 0x1a && bytes[1] === 0x45 && bytes[2] === 0xdf && bytes[3] === 0xa3;\n}\n\nexport function toJsonValue(value)\n{\n if (value instanceof Uint8Array) return { byteLength: value.byteLength };\n if (Array.isArray(value)) return value.map(toJsonValue);\n if (value && typeof value === \"object\")\n {\n const output = {};\n for (const [ key, entry ] of Object.entries(value)) output[key] = toJsonValue(entry);\n return output;\n }\n return value;\n}\n\nfunction inspectMP4(bytes)\n{\n return {\n sourceFormat: \"mp4\",\n brand: fourCc(bytes, 8),\n container: \"isobmff\"\n };\n}\n\nfunction inspectWebM(bytes)\n{\n const roots = readEbmlElements(bytes, 0, bytes.byteLength);\n const fallbackRoots = readEbmlElements(bytes, 4, bytes.byteLength);\n const segment = roots.find((element) => element.id === 0x18538067) ||\n fallbackRoots.find((element) => element.id === 0x18538067);\n if (!segment)\n {\n return {\n sourceFormat: \"webm\",\n container: \"ebml\",\n duration: 0,\n durationTimescale: 1,\n tracks: []\n };\n }\n\n const children = readEbmlElements(bytes, segment.dataStart, segment.end);\n const info = children.find((element) => element.id === 0x1549a966);\n const tracks = children.find((element) => element.id === 0x1654ae6b);\n const infoChildren = info ? readEbmlElements(bytes, info.dataStart, info.end) : [];\n const timecodeScale = readEbmlUnsignedValue(bytes, infoChildren.find((element) => element.id === 0x2ad7b1)) || 1000000;\n const durationTicks = readEbmlFloatValue(bytes, infoChildren.find((element) => element.id === 0x4489)) || 0;\n const duration = Math.round(durationTicks * timecodeScale);\n const clusters = children.filter((element) => element.id === 0x1f43b675);\n const blockSummary = readWebmBlocks(bytes, clusters);\n\n return {\n sourceFormat: \"webm\",\n container: \"ebml\",\n timecodeScale,\n duration,\n durationTimescale: 1000000000,\n durationSeconds: duration / 1000000000,\n tracks: tracks ? readWebmTracks(bytes, tracks) : [],\n clusterCount: clusters.length,\n blockCount: blockSummary.blockCount,\n blockTrackIds: blockSummary.trackIds,\n clusterTimecodes: blockSummary.clusterTimecodes,\n blocks: blockSummary.blocks\n };\n}\n\nfunction readWebmTracks(bytes, tracksElement)\n{\n return readEbmlElements(bytes, tracksElement.dataStart, tracksElement.end)\n .filter((element) => element.id === 0xae)\n .map((entry) =>\n {\n const fields = readEbmlElements(bytes, entry.dataStart, entry.end);\n const trackType = readEbmlUnsignedValue(bytes, fields.find((field) => field.id === 0x83));\n const video = fields.find((field) => field.id === 0xe0);\n const audio = fields.find((field) => field.id === 0xe1);\n const codecPrivate = fields.find((field) => field.id === 0x63a2);\n const result = {\n id: readEbmlUnsignedValue(bytes, fields.find((field) => field.id === 0xd7)) || 0,\n type: trackType === 1 ? \"video\" : trackType === 2 ? \"audio\" : \"unknown\",\n codec: readEbmlStringValue(bytes, fields.find((field) => field.id === 0x86)) || \"\",\n language: readEbmlStringValue(bytes, fields.find((field) => field.id === 0x22b59c)) || \"und\"\n };\n const defaultDuration = readEbmlUnsignedValue(bytes, fields.find((field) => field.id === 0x23e383));\n if (defaultDuration) result.defaultDuration = defaultDuration;\n if (codecPrivate) result.codecPrivateBytes = codecPrivate.end - codecPrivate.dataStart;\n if (video)\n {\n const videoFields = readEbmlElements(bytes, video.dataStart, video.end);\n result.width = readEbmlUnsignedValue(bytes, videoFields.find((field) => field.id === 0xb0)) || 0;\n result.height = readEbmlUnsignedValue(bytes, videoFields.find((field) => field.id === 0xba)) || 0;\n }\n if (audio)\n {\n const audioFields = readEbmlElements(bytes, audio.dataStart, audio.end);\n result.channels = readEbmlUnsignedValue(bytes, audioFields.find((field) => field.id === 0x9f)) || 0;\n result.sampleRate = readEbmlFloatValue(bytes, audioFields.find((field) => field.id === 0xb5)) || 0;\n result.bitDepth = readEbmlUnsignedValue(bytes, audioFields.find((field) => field.id === 0x6264)) || 0;\n }\n return result;\n });\n}\n\nfunction readWebmBlocks(bytes, clusters)\n{\n const trackIds = new Set();\n const clusterTimecodes = [];\n const blocks = [];\n let blockCount = 0;\n for (const cluster of clusters)\n {\n const children = readEbmlElements(bytes, cluster.dataStart, cluster.end);\n const clusterTimecode = readEbmlUnsignedValue(bytes, children.find((child) => child.id === 0xe7));\n clusterTimecodes.push(clusterTimecode);\n for (const child of children)\n {\n if (child.id === 0xa3)\n {\n blockCount++;\n const block = readWebmBlock(bytes, child, clusterTimecode, true);\n if (block)\n {\n blocks.push(block);\n trackIds.add(block.trackId);\n }\n }\n else if (child.id === 0xa0)\n {\n const groupChildren = readEbmlElements(bytes, child.dataStart, child.end);\n const reference = groupChildren.some((groupChild) => groupChild.id === 0xfb);\n for (const groupChild of groupChildren)\n {\n if (groupChild.id !== 0xa1) continue;\n blockCount++;\n const block = readWebmBlock(bytes, groupChild, clusterTimecode, false);\n if (block)\n {\n block.keyframe = !reference;\n blocks.push(block);\n trackIds.add(block.trackId);\n }\n }\n }\n }\n }\n return {\n blockCount,\n trackIds: Array.from(trackIds).sort((a, b) => a - b),\n clusterTimecodes,\n blocks\n };\n}\n\nfunction readWebmBlock(bytes, element, clusterTimecode, simple)\n{\n const track = readEbmlVint(bytes, element.dataStart, element.end, true);\n if (!track || track.value === null || element.dataStart + track.length + 3 > element.end) return null;\n const timecodeOffset = element.dataStart + track.length;\n const relativeTimecode = (bytes[timecodeOffset] << 8) | bytes[timecodeOffset + 1];\n const signedTimecode = relativeTimecode & 0x8000 ? relativeTimecode - 0x10000 : relativeTimecode;\n const flags = bytes[timecodeOffset + 2];\n const lacing = [ \"none\", \"xiph\", \"fixed\", \"ebml\" ][(flags >> 1) & 0x03];\n const frames = readWebmBlockFrames(bytes, timecodeOffset + 3, element.end, lacing);\n return {\n trackId: track.value,\n timecode: signedTimecode,\n absoluteTimecode: clusterTimecode + signedTimecode,\n keyframe: simple ? !!(flags & 0x80) : false,\n invisible: !!(flags & 0x08),\n lacing,\n frameCount: frames.frameCount,\n frameSizes: frames.frameSizes,\n payloadBytes: frames.payloadBytes,\n ...(frames.error ? { lacingError: frames.error } : {})\n };\n}\n\nfunction readWebmBlockFrames(bytes, payloadStart, payloadEnd, lacing)\n{\n const payloadBytes = Math.max(0, payloadEnd - payloadStart);\n if (payloadStart > payloadEnd) return { frameCount: 0, frameSizes: [], payloadBytes: 0, error: \"invalid-payload-range\" };\n if (lacing === \"none\") return { frameCount: 1, frameSizes: [ payloadBytes ], payloadBytes };\n if (payloadStart >= payloadEnd) return { frameCount: 0, frameSizes: [], payloadBytes, error: \"missing-lacing-header\" };\n\n const frameCount = bytes[payloadStart] + 1;\n const dataStart = payloadStart + 1;\n if (frameCount < 2) return { frameCount, frameSizes: [], payloadBytes, error: \"invalid-laced-frame-count\" };\n if (lacing === \"fixed\") return readFixedLacedFrames(payloadBytes, frameCount);\n if (lacing === \"xiph\") return readXiphLacedFrames(bytes, dataStart, payloadEnd, payloadBytes, frameCount);\n return readEbmlLacedFrames(bytes, dataStart, payloadEnd, payloadBytes, frameCount);\n}\n\nfunction readFixedLacedFrames(payloadBytes, frameCount)\n{\n const dataBytes = payloadBytes - 1;\n if (dataBytes < 0 || dataBytes % frameCount !== 0)\n {\n return { frameCount, frameSizes: [], payloadBytes, error: \"invalid-fixed-lacing-size\" };\n }\n return { frameCount, frameSizes: Array.from({ length: frameCount }, () => dataBytes / frameCount), payloadBytes };\n}\n\nfunction readXiphLacedFrames(bytes, offset, end, payloadBytes, frameCount)\n{\n const frameSizes = [];\n for (let frame = 0; frame < frameCount - 1; frame++)\n {\n let size = 0;\n let closed = false;\n while (offset < end)\n {\n const value = bytes[offset++];\n size += value;\n if (value !== 255)\n {\n closed = true;\n break;\n }\n }\n if (!closed) return { frameCount, frameSizes: [], payloadBytes, error: \"unterminated-xiph-lacing-size\" };\n frameSizes.push(size);\n }\n\n const remaining = end - offset - frameSizes.reduce((sum, size) => sum + size, 0);\n if (remaining < 0) return { frameCount, frameSizes: [], payloadBytes, error: \"invalid-xiph-lacing-size\" };\n frameSizes.push(remaining);\n return { frameCount, frameSizes, payloadBytes };\n}\n\nfunction readEbmlLacedFrames(bytes, offset, end, payloadBytes, frameCount)\n{\n const first = readEbmlVint(bytes, offset, end, true);\n if (!first || first.value === null) return { frameCount, frameSizes: [], payloadBytes, error: \"missing-ebml-lacing-size\" };\n\n const frameSizes = [ first.value ];\n offset += first.length;\n for (let frame = 1; frame < frameCount - 1; frame++)\n {\n const delta = readEbmlSignedVint(bytes, offset, end);\n if (!delta) return { frameCount, frameSizes: [], payloadBytes, error: \"missing-ebml-lacing-delta\" };\n const size = frameSizes[frame - 1] + delta.value;\n if (size < 0) return { frameCount, frameSizes: [], payloadBytes, error: \"invalid-ebml-lacing-size\" };\n frameSizes.push(size);\n offset += delta.length;\n }\n\n const remaining = end - offset - frameSizes.reduce((sum, size) => sum + size, 0);\n if (remaining < 0) return { frameCount, frameSizes: [], payloadBytes, error: \"invalid-ebml-lacing-size\" };\n frameSizes.push(remaining);\n return { frameCount, frameSizes, payloadBytes };\n}\n\nfunction readEbmlElements(bytes, start, end)\n{\n const elements = [];\n let offset = start;\n while (offset < end)\n {\n const id = readEbmlId(bytes, offset, end);\n if (!id) break;\n const size = readEbmlVint(bytes, offset + id.length, end, true);\n if (!size) break;\n const dataStart = offset + id.length + size.length;\n const elementEnd = size.value === null ? end : dataStart + size.value;\n if (elementEnd > end) break;\n elements.push({ id: id.value, dataStart, end: elementEnd });\n if (size.value === null) break;\n offset = elementEnd;\n }\n return elements;\n}\n\nfunction readEbmlId(bytes, offset, end)\n{\n if (offset >= end) return null;\n const first = bytes[offset];\n let length = 1;\n let mask = 0x80;\n while (length <= 4 && !(first & mask))\n {\n length++;\n mask >>>= 1;\n }\n if (length > 4 || offset + length > end) return null;\n let value = 0;\n for (let i = 0; i < length; i++) value = value * 256 + bytes[offset + i];\n return { value, length };\n}\n\nfunction readEbmlVint(bytes, offset, end, removeMarker)\n{\n if (offset >= end) return null;\n const first = bytes[offset];\n let length = 1;\n let mask = 0x80;\n while (length <= 8 && !(first & mask))\n {\n length++;\n mask >>>= 1;\n }\n if (length > 8 || offset + length > end) return null;\n let value = removeMarker ? first & (~mask & 0xff) : first;\n for (let i = 1; i < length; i++) value = value * 256 + bytes[offset + i];\n const unknown = removeMarker && value === Math.pow(2, length * 7) - 1;\n return { value: unknown ? null : value, length };\n}\n\nfunction readEbmlSignedVint(bytes, offset, end)\n{\n const vint = readEbmlVint(bytes, offset, end, true);\n if (!vint || vint.value === null) return null;\n const bias = Math.pow(2, (vint.length * 7) - 1) - 1;\n return { value: vint.value - bias, length: vint.length };\n}\n\nfunction readEbmlUnsignedValue(bytes, element)\n{\n if (!element) return 0;\n let value = 0;\n for (let offset = element.dataStart; offset < element.end; offset++) value = value * 256 + bytes[offset];\n return value;\n}\n\nfunction readEbmlFloatValue(bytes, element)\n{\n if (!element || ![ 4, 8 ].includes(element.end - element.dataStart)) return 0;\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n return element.end - element.dataStart === 4\n ? view.getFloat32(element.dataStart, false)\n : view.getFloat64(element.dataStart, false);\n}\n\nfunction readEbmlStringValue(bytes, element)\n{\n if (!element) return \"\";\n return new TextDecoder().decode(bytes.subarray(element.dataStart, element.end));\n}\n\nfunction fourCc(bytes, offset)\n{\n return String.fromCharCode(bytes[offset] || 0, bytes[offset + 1] || 0, bytes[offset + 2] || 0, bytes[offset + 3] || 0);\n}\n"],"names":["OUTPUT_VIDEO","OUTPUT_RAW","OUTPUT_JSON","DEFAULT_VALUES","Object","freeze","emit","inputType","source","DEBUG_OUTPUTS","mp4","webm","normalizeValues","base","options","readerName","values","String","replace","toLowerCase","normalizeEmit","undefined","includes","TypeError","JSON","stringify","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","inspectWithValues","expectedType","bytes","metadata","inspectBytes","sourceFormat","payloadType","mediaTypes","isSupportedWithValues","codecs","getTrackCodecSummary","mimeType","getMediaMimeType","format","supported","confidence","preferred","reason","variants","kind","codec","containerOnly","isDecoded","frameDecodeSupported","videoCodecs","audioCodecs","warnings","errors","error","message","readWithValues","container","duration","durationTimescale","tracks","sourceBytes","Error","code","Array","isArray","uniqueTrackCodecs","filter","track","type","Set","map","Boolean","some","isMP4","inspectMP4","isWebM","inspectWebM","fourCc","toJsonValue","value","output","key","entry","entries","brand","roots","readEbmlElements","fallbackRoots","segment","find","element","id","children","dataStart","end","info","infoChildren","timecodeScale","readEbmlUnsignedValue","durationTicks","readEbmlFloatValue","Math","round","clusters","blockSummary","readWebmBlocks","durationSeconds","readWebmTracks","clusterCount","length","blockCount","blockTrackIds","trackIds","clusterTimecodes","blocks","tracksElement","fields","trackType","field","video","audio","codecPrivate","result","readEbmlStringValue","language","defaultDuration","codecPrivateBytes","videoFields","width","height","audioFields","channels","sampleRate","bitDepth","cluster","clusterTimecode","child","push","block","readWebmBlock","add","trackId","groupChildren","reference","groupChild","keyframe","from","sort","a","b","simple","readEbmlVint","timecodeOffset","relativeTimecode","signedTimecode","flags","lacing","frames","readWebmBlockFrames","timecode","absoluteTimecode","invisible","frameCount","frameSizes","payloadBytes","lacingError","payloadStart","payloadEnd","max","readFixedLacedFrames","readXiphLacedFrames","readEbmlLacedFrames","dataBytes","offset","frame","size","closed","remaining","reduce","sum","first","delta","readEbmlSignedVint","start","elements","readEbmlId","elementEnd","mask","i","removeMarker","unknown","pow","vint","bias","view","DataView","getFloat32","getFloat64","TextDecoder","decode","subarray","fromCharCode"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|