@libmedia/avutil 0.12.0 → 1.0.1
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/cjs/{AVStream.js → AVStream.cjs} +5 -5
- package/dist/cjs/AVStream.js.map +1 -1
- package/dist/cjs/codecs/{aac.js → aac.cjs} +2 -8
- package/dist/cjs/codecs/aac.js.map +1 -1
- package/dist/cjs/codecs/{ac3.js → ac3.cjs} +2 -8
- package/dist/cjs/codecs/ac3.js.map +1 -1
- package/dist/cjs/codecs/{av1.js → av1.cjs} +6 -10
- package/dist/cjs/codecs/av1.js.map +1 -1
- package/dist/cjs/codecs/{dts.js → dts.cjs} +3 -9
- package/dist/cjs/codecs/dts.js.map +1 -1
- package/dist/cjs/codecs/{flac.js → flac.cjs} +2 -8
- package/dist/cjs/codecs/flac.js.map +1 -1
- package/dist/cjs/codecs/{h264.js → h264.cjs} +20 -23
- package/dist/cjs/codecs/h264.js.map +1 -1
- package/dist/cjs/codecs/{hevc.js → hevc.cjs} +23 -23
- package/dist/cjs/codecs/hevc.js.map +1 -1
- package/dist/cjs/codecs/{mp3.js → mp3.cjs} +1 -1
- package/dist/cjs/codecs/mp3.js.map +1 -1
- package/dist/cjs/codecs/{mpeg4.js → mpeg4.cjs} +1 -1
- package/dist/cjs/codecs/mpeg4.js.map +1 -1
- package/dist/cjs/codecs/{mpegvideo.js → mpegvideo.cjs} +1 -1
- package/dist/cjs/codecs/mpegvideo.js.map +1 -1
- package/dist/cjs/codecs/{opus.js → opus.cjs} +3 -9
- package/dist/cjs/codecs/opus.js.map +1 -1
- package/dist/cjs/codecs/ttml.cjs +51 -0
- package/dist/cjs/codecs/ttml.js.map +1 -1
- package/dist/cjs/codecs/{vp8.js → vp8.cjs} +2 -8
- package/dist/cjs/codecs/vp8.js.map +1 -1
- package/dist/cjs/codecs/{vp9.js → vp9.cjs} +4 -10
- package/dist/cjs/codecs/vp9.js.map +1 -1
- package/dist/cjs/codecs/{vvc.js → vvc.cjs} +25 -25
- package/dist/cjs/codecs/vvc.js.map +1 -1
- package/dist/cjs/{constant.js → constant.cjs} +6 -7
- package/dist/cjs/constant.js.map +1 -1
- package/dist/cjs/{enum.js → enum.cjs} +3 -1
- package/dist/cjs/enum.js.map +1 -1
- package/dist/cjs/error.js.map +1 -1
- package/dist/cjs/function/analyzeAVFormat.js.map +1 -1
- package/dist/cjs/function/analyzeUrlIOLoader.cjs +66 -0
- package/dist/cjs/function/analyzeUrlIOLoader.js.map +1 -1
- package/dist/cjs/function/{audioData2AVFrame.js → audioData2AVFrame.cjs} +9 -9
- package/dist/cjs/function/audioData2AVFrame.js.map +1 -1
- package/dist/cjs/function/{avPCMBuffer2AVFrame.js → avPCMBuffer2AVFrame.cjs} +20 -20
- package/dist/cjs/function/avPCMBuffer2AVFrame.js.map +1 -1
- package/dist/cjs/function/{avframe2AudioData.js → avframe2AudioData.cjs} +7 -7
- package/dist/cjs/function/avframe2AudioData.js.map +1 -1
- package/dist/cjs/function/avframe2VideoFrame.cjs +48 -0
- package/dist/cjs/function/avframe2VideoFrame.js.map +1 -1
- package/dist/cjs/function/{avpacket2EncodedAudioChunk.js → avpacket2EncodedAudioChunk.cjs} +3 -3
- package/dist/cjs/function/avpacket2EncodedAudioChunk.js.map +1 -1
- package/dist/cjs/function/{avpacket2EncodedVideoChunk.js → avpacket2EncodedVideoChunk.cjs} +3 -3
- package/dist/cjs/function/avpacket2EncodedVideoChunk.js.map +1 -1
- package/dist/cjs/function/compileResource.cjs +19 -0
- package/dist/cjs/function/compileResource.js.map +1 -1
- package/dist/cjs/function/constant/webcodecs.cjs +50 -0
- package/dist/cjs/function/constant/webcodecs.js.map +1 -0
- package/dist/cjs/function/encodedAudioChunk2AVPacket.cjs +23 -0
- package/dist/cjs/function/encodedAudioChunk2AVPacket.js.map +1 -1
- package/dist/cjs/function/{encodedVideoChunk2AVPacket.js → encodedVideoChunk2AVPacket.cjs} +8 -8
- package/dist/cjs/function/encodedVideoChunk2AVPacket.js.map +1 -1
- package/dist/cjs/function/{getAudioCodec.js → getAudioCodec.cjs} +1 -1
- package/dist/cjs/function/getAudioCodec.js.map +1 -1
- package/dist/cjs/function/getAudioMimeType.cjs +19 -0
- package/dist/cjs/function/getAudioMimeType.js.map +1 -0
- package/dist/cjs/function/getHardwarePreference.cjs +10 -0
- package/dist/cjs/function/getHardwarePreference.js.map +1 -1
- package/dist/cjs/function/{getVideoCodec.js → getVideoCodec.cjs} +12 -12
- package/dist/cjs/function/getVideoCodec.js.map +1 -1
- package/dist/cjs/function/getVideoMimeType.cjs +18 -0
- package/dist/cjs/function/getVideoMimeType.js.map +1 -0
- package/dist/cjs/function/{getWasmUrl.js → getWasmUrl.cjs} +2 -3
- package/dist/cjs/function/getWasmUrl.js.map +1 -1
- package/dist/cjs/function/{hasAlphaChannel.js → hasAlphaChannel.cjs} +1 -1
- package/dist/cjs/function/hasAlphaChannel.js.map +1 -1
- package/dist/cjs/function/{isHdr.js → isHdr.cjs} +1 -1
- package/dist/cjs/function/isHdr.js.map +1 -1
- package/dist/cjs/function/videoFrame2AVFrame.cjs +51 -0
- package/dist/cjs/function/videoFrame2AVFrame.js.map +1 -1
- package/dist/cjs/implement/AVFramePoolImpl.cjs +28 -0
- package/dist/cjs/implement/AVFramePoolImpl.js.map +1 -1
- package/dist/cjs/implement/AVPCMBufferPoolImpl.cjs +27 -0
- package/dist/cjs/implement/AVPCMBufferPoolImpl.js.map +1 -1
- package/dist/cjs/implement/AVPacketPoolImpl.cjs +29 -0
- package/dist/cjs/implement/AVPacketPoolImpl.js.map +1 -1
- package/dist/cjs/index.cjs +840 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal.cjs +283 -0
- package/dist/cjs/internal.js.map +1 -0
- package/dist/cjs/{pixelFormatDescriptor.js → pixelFormatDescriptor.cjs} +2 -0
- package/dist/cjs/pixelFormatDescriptor.js.map +1 -1
- package/dist/cjs/pixfmt.js.map +1 -1
- package/dist/cjs/sampleFormatDescriptor.js.map +1 -1
- package/dist/cjs/{stringEnum.js → stringEnum.cjs} +4 -1
- package/dist/cjs/stringEnum.js.map +1 -1
- package/dist/cjs/struct/{audiosample.js → audiosample.cjs} +13 -13
- package/dist/cjs/struct/audiosample.js.map +1 -1
- package/dist/cjs/struct/{avbuffer.js → avbuffer.cjs} +18 -18
- package/dist/cjs/struct/avbuffer.js.map +1 -1
- package/dist/cjs/struct/{avcodecparameters.js → avcodecparameters.cjs} +11 -11
- package/dist/cjs/struct/avcodecparameters.js.map +1 -1
- package/dist/cjs/struct/{avdict.js → avdict.cjs} +9 -9
- package/dist/cjs/struct/avdict.js.map +1 -1
- package/dist/cjs/struct/{avframe.js → avframe.cjs} +30 -30
- package/dist/cjs/struct/avframe.js.map +1 -1
- package/dist/cjs/struct/{avpacket.js → avpacket.cjs} +19 -19
- package/dist/cjs/struct/avpacket.js.map +1 -1
- package/dist/cjs/struct/{avpcmbuffer.js → avpcmbuffer.cjs} +9 -9
- package/dist/cjs/struct/avpcmbuffer.js.map +1 -1
- package/dist/cjs/struct/{encryption.js → encryption.cjs} +13 -13
- package/dist/cjs/struct/encryption.js.map +1 -1
- package/dist/cjs/struct/rational.cjs +43 -0
- package/dist/cjs/struct/rational.js.map +1 -1
- package/dist/cjs/util/{amf.js → amf.cjs} +7 -38
- package/dist/cjs/util/amf.js.map +1 -1
- package/dist/cjs/util/av1syntax.js.map +1 -1
- package/dist/cjs/util/avbuffer.cjs +122 -0
- package/dist/cjs/util/avbuffer.js.map +1 -1
- package/dist/cjs/util/avdict.cjs +75 -0
- package/dist/cjs/util/avdict.js.map +1 -1
- package/dist/cjs/util/{avframe.js → avframe.cjs} +82 -87
- package/dist/cjs/util/avframe.js.map +1 -1
- package/dist/cjs/util/{avpacket.js → avpacket.cjs} +58 -58
- package/dist/cjs/util/avpacket.js.map +1 -1
- package/dist/cjs/util/{channel.js → channel.cjs} +7 -7
- package/dist/cjs/util/channel.js.map +1 -1
- package/dist/cjs/util/codecparameters.cjs +95 -0
- package/dist/cjs/util/codecparameters.js.map +1 -1
- package/dist/cjs/util/common.js.map +1 -1
- package/dist/cjs/util/{encryption.js → encryption.cjs} +5 -11
- package/dist/cjs/util/encryption.js.map +1 -1
- package/dist/cjs/util/expgolomb.js.map +1 -1
- package/dist/cjs/util/{intread.js → intread.cjs} +1 -1
- package/dist/cjs/util/intread.js.map +1 -1
- package/dist/cjs/util/{intwrite.js → intwrite.cjs} +1 -1
- package/dist/cjs/util/intwrite.js.map +1 -1
- package/dist/cjs/util/mem.cjs +23 -0
- package/dist/cjs/util/mem.js.map +1 -1
- package/dist/cjs/util/{nalu.js → nalu.cjs} +7 -42
- package/dist/cjs/util/nalu.js.map +1 -1
- package/dist/cjs/util/ntp.js.map +1 -1
- package/dist/cjs/util/pcm.js.map +1 -1
- package/dist/cjs/util/{pixel.js → pixel.cjs} +26 -30
- package/dist/cjs/util/pixel.js.map +1 -1
- package/dist/cjs/util/{rational.js → rational.cjs} +5 -11
- package/dist/cjs/util/rational.js.map +1 -1
- package/dist/cjs/util/{sample.js → sample.cjs} +6 -12
- package/dist/cjs/util/sample.js.map +1 -1
- package/dist/cjs/util/{serialize.js → serialize.cjs} +40 -42
- package/dist/cjs/util/serialize.js.map +1 -1
- package/dist/esm/AVStream.d.ts +7 -7
- package/dist/esm/AVStream.js +10 -12
- package/dist/esm/AVStream.js.map +1 -1
- package/dist/esm/codecs/aac.d.ts +10 -5
- package/dist/esm/codecs/aac.js +2 -2
- package/dist/esm/codecs/aac.js.map +1 -1
- package/dist/esm/codecs/ac3.d.ts +1 -1
- package/dist/esm/codecs/ac3.js +1 -1
- package/dist/esm/codecs/ac3.js.map +1 -1
- package/dist/esm/codecs/av1.d.ts +3 -3
- package/dist/esm/codecs/av1.js +4 -6
- package/dist/esm/codecs/av1.js.map +1 -1
- package/dist/esm/codecs/dts.d.ts +1 -1
- package/dist/esm/codecs/dts.js +2 -2
- package/dist/esm/codecs/dts.js.map +1 -1
- package/dist/esm/codecs/flac.d.ts +3 -3
- package/dist/esm/codecs/flac.js +1 -1
- package/dist/esm/codecs/flac.js.map +1 -1
- package/dist/esm/codecs/h264.d.ts +5 -5
- package/dist/esm/codecs/h264.js +13 -18
- package/dist/esm/codecs/h264.js.map +1 -1
- package/dist/esm/codecs/hevc.d.ts +5 -5
- package/dist/esm/codecs/hevc.js +16 -15
- package/dist/esm/codecs/hevc.js.map +1 -1
- package/dist/esm/codecs/mp3.d.ts +4 -4
- package/dist/esm/codecs/mp3.js +1 -1
- package/dist/esm/codecs/mp3.js.map +1 -1
- package/dist/esm/codecs/mpeg4.d.ts +1 -1
- package/dist/esm/codecs/mpeg4.js +1 -1
- package/dist/esm/codecs/mpeg4.js.map +1 -1
- package/dist/esm/codecs/mpegvideo.d.ts +1 -1
- package/dist/esm/codecs/mpegvideo.js +1 -1
- package/dist/esm/codecs/mpegvideo.js.map +1 -1
- package/dist/esm/codecs/opus.d.ts +3 -3
- package/dist/esm/codecs/opus.js +2 -4
- package/dist/esm/codecs/opus.js.map +1 -1
- package/dist/esm/codecs/ttml.js +5 -11
- package/dist/esm/codecs/ttml.js.map +1 -1
- package/dist/esm/codecs/vp8.d.ts +4 -4
- package/dist/esm/codecs/vp8.js +2 -2
- package/dist/esm/codecs/vp8.js.map +1 -1
- package/dist/esm/codecs/vp9.d.ts +4 -4
- package/dist/esm/codecs/vp9.js +8 -10
- package/dist/esm/codecs/vp9.js.map +1 -1
- package/dist/esm/codecs/vvc.d.ts +5 -5
- package/dist/esm/codecs/vvc.js +16 -17
- package/dist/esm/codecs/vvc.js.map +1 -1
- package/dist/esm/constant.d.ts +5 -7
- package/dist/esm/constant.js +5 -9
- package/dist/esm/constant.js.map +1 -1
- package/dist/esm/enum.d.ts +9 -1
- package/dist/esm/enum.js +3 -1
- package/dist/esm/enum.js.map +1 -1
- package/dist/esm/error.js.map +1 -1
- package/dist/esm/function/analyzeAVFormat.d.ts +2 -2
- package/dist/esm/function/analyzeAVFormat.js.map +1 -1
- package/dist/esm/function/analyzeUrlIOLoader.d.ts +2 -2
- package/dist/esm/function/analyzeUrlIOLoader.js +2 -10
- package/dist/esm/function/analyzeUrlIOLoader.js.map +1 -1
- package/dist/esm/function/audioData2AVFrame.d.ts +1 -1
- package/dist/esm/function/audioData2AVFrame.js +6 -6
- package/dist/esm/function/audioData2AVFrame.js.map +1 -1
- package/dist/esm/function/avPCMBuffer2AVFrame.d.ts +2 -2
- package/dist/esm/function/avPCMBuffer2AVFrame.js +9 -9
- package/dist/esm/function/avPCMBuffer2AVFrame.js.map +1 -1
- package/dist/esm/function/avframe2AudioData.d.ts +1 -1
- package/dist/esm/function/avframe2AudioData.js +6 -8
- package/dist/esm/function/avframe2AudioData.js.map +1 -1
- package/dist/esm/function/avframe2VideoFrame.d.ts +3 -3
- package/dist/esm/function/avframe2VideoFrame.js +14 -79
- package/dist/esm/function/avframe2VideoFrame.js.map +1 -1
- package/dist/esm/function/avpacket2EncodedAudioChunk.d.ts +1 -1
- package/dist/esm/function/avpacket2EncodedAudioChunk.js +5 -7
- package/dist/esm/function/avpacket2EncodedAudioChunk.js.map +1 -1
- package/dist/esm/function/avpacket2EncodedVideoChunk.d.ts +1 -1
- package/dist/esm/function/avpacket2EncodedVideoChunk.js +5 -7
- package/dist/esm/function/avpacket2EncodedVideoChunk.js.map +1 -1
- package/dist/esm/function/compileResource.d.ts +1 -1
- package/dist/esm/function/compileResource.js +2 -4
- package/dist/esm/function/compileResource.js.map +1 -1
- package/dist/esm/function/constant/webcodecs.d.ts +5 -0
- package/dist/esm/function/constant/webcodecs.js +51 -0
- package/dist/esm/function/constant/webcodecs.js.map +1 -0
- package/dist/esm/function/encodedAudioChunk2AVPacket.d.ts +1 -1
- package/dist/esm/function/encodedAudioChunk2AVPacket.js +6 -6
- package/dist/esm/function/encodedAudioChunk2AVPacket.js.map +1 -1
- package/dist/esm/function/encodedVideoChunk2AVPacket.d.ts +1 -1
- package/dist/esm/function/encodedVideoChunk2AVPacket.js +7 -7
- package/dist/esm/function/encodedVideoChunk2AVPacket.js.map +1 -1
- package/dist/esm/function/getAudioCodec.d.ts +1 -1
- package/dist/esm/function/getAudioCodec.js +2 -2
- package/dist/esm/function/getAudioCodec.js.map +1 -1
- package/dist/esm/function/getAudioMimeType.d.ts +2 -0
- package/dist/esm/function/getAudioMimeType.js +12 -0
- package/dist/esm/function/getAudioMimeType.js.map +1 -0
- package/dist/esm/function/getHardwarePreference.js +1 -1
- package/dist/esm/function/getHardwarePreference.js.map +1 -1
- package/dist/esm/function/getVideoCodec.d.ts +1 -1
- package/dist/esm/function/getVideoCodec.js +11 -13
- package/dist/esm/function/getVideoCodec.js.map +1 -1
- package/dist/esm/function/getVideoMimeType.d.ts +2 -0
- package/dist/esm/function/getVideoMimeType.js +8 -0
- package/dist/esm/function/getVideoMimeType.js.map +1 -0
- package/dist/esm/function/getWasmUrl.d.ts +1 -1
- package/dist/esm/function/getWasmUrl.js +2 -2
- package/dist/esm/function/getWasmUrl.js.map +1 -1
- package/dist/esm/function/hasAlphaChannel.d.ts +1 -1
- package/dist/esm/function/hasAlphaChannel.js +2 -2
- package/dist/esm/function/hasAlphaChannel.js.map +1 -1
- package/dist/esm/function/isHdr.d.ts +1 -1
- package/dist/esm/function/isHdr.js +2 -2
- package/dist/esm/function/isHdr.js.map +1 -1
- package/dist/esm/function/videoFrame2AVFrame.d.ts +6 -6
- package/dist/esm/function/videoFrame2AVFrame.js +13 -74
- package/dist/esm/function/videoFrame2AVFrame.js.map +1 -1
- package/dist/esm/implement/AVFramePoolImpl.d.ts +3 -4
- package/dist/esm/implement/AVFramePoolImpl.js +5 -7
- package/dist/esm/implement/AVFramePoolImpl.js.map +1 -1
- package/dist/esm/implement/AVPCMBufferPoolImpl.d.ts +3 -4
- package/dist/esm/implement/AVPCMBufferPoolImpl.js +4 -6
- package/dist/esm/implement/AVPCMBufferPoolImpl.js.map +1 -1
- package/dist/esm/implement/AVPacketPoolImpl.d.ts +3 -4
- package/dist/esm/implement/AVPacketPoolImpl.js +5 -7
- package/dist/esm/implement/AVPacketPoolImpl.js.map +1 -1
- package/dist/esm/index.d.ts +54 -0
- package/dist/esm/index.js +98 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal.d.ts +26 -0
- package/dist/esm/internal.js +52 -0
- package/dist/esm/internal.js.map +1 -0
- package/dist/esm/pixelFormatDescriptor.d.ts +1 -1
- package/dist/esm/pixelFormatDescriptor.js +2 -0
- package/dist/esm/pixelFormatDescriptor.js.map +1 -1
- package/dist/esm/pixfmt.d.ts +9 -1
- package/dist/esm/pixfmt.js.map +1 -1
- package/dist/esm/sampleFormatDescriptor.d.ts +1 -1
- package/dist/esm/sampleFormatDescriptor.js.map +1 -1
- package/dist/esm/stringEnum.d.ts +5 -5
- package/dist/esm/stringEnum.js +4 -1
- package/dist/esm/stringEnum.js.map +1 -1
- package/dist/esm/struct/audiosample.d.ts +1 -1
- package/dist/esm/struct/audiosample.js +2 -2
- package/dist/esm/struct/audiosample.js.map +1 -1
- package/dist/esm/struct/avbuffer.d.ts +1 -1
- package/dist/esm/struct/avbuffer.js +4 -4
- package/dist/esm/struct/avbuffer.js.map +1 -1
- package/dist/esm/struct/avcodecparameters.d.ts +9 -9
- package/dist/esm/struct/avcodecparameters.js +14 -16
- package/dist/esm/struct/avcodecparameters.js.map +1 -1
- package/dist/esm/struct/avdict.js +2 -2
- package/dist/esm/struct/avdict.js.map +1 -1
- package/dist/esm/struct/avframe.d.ts +12 -12
- package/dist/esm/struct/avframe.js +18 -22
- package/dist/esm/struct/avframe.js.map +1 -1
- package/dist/esm/struct/avpacket.d.ts +4 -4
- package/dist/esm/struct/avpacket.js +7 -9
- package/dist/esm/struct/avpacket.js.map +1 -1
- package/dist/esm/struct/avpcmbuffer.d.ts +1 -1
- package/dist/esm/struct/avpcmbuffer.js +2 -2
- package/dist/esm/struct/avpcmbuffer.js.map +1 -1
- package/dist/esm/struct/avsubtitle.d.ts +2 -2
- package/dist/esm/struct/encryption.js +2 -2
- package/dist/esm/struct/encryption.js.map +1 -1
- package/dist/esm/struct/rational.d.ts +1 -1
- package/dist/esm/struct/rational.js +4 -4
- package/dist/esm/struct/rational.js.map +1 -1
- package/dist/esm/util/amf.d.ts +1 -4
- package/dist/esm/util/amf.js +1 -5
- package/dist/esm/util/amf.js.map +1 -1
- package/dist/esm/util/av1syntax.d.ts +1 -1
- package/dist/esm/util/av1syntax.js.map +1 -1
- package/dist/esm/util/avbuffer.d.ts +2 -2
- package/dist/esm/util/avbuffer.js +7 -15
- package/dist/esm/util/avbuffer.js.map +1 -1
- package/dist/esm/util/avdict.d.ts +2 -2
- package/dist/esm/util/avdict.js +12 -16
- package/dist/esm/util/avdict.js.map +1 -1
- package/dist/esm/util/avframe.d.ts +2 -2
- package/dist/esm/util/avframe.js +22 -24
- package/dist/esm/util/avframe.js.map +1 -1
- package/dist/esm/util/avpacket.d.ts +3 -3
- package/dist/esm/util/avpacket.js +11 -13
- package/dist/esm/util/avpacket.js.map +1 -1
- package/dist/esm/util/channel.d.ts +1 -1
- package/dist/esm/util/channel.js +6 -6
- package/dist/esm/util/channel.js.map +1 -1
- package/dist/esm/util/codecparameters.d.ts +3 -1
- package/dist/esm/util/codecparameters.js +16 -12
- package/dist/esm/util/codecparameters.js.map +1 -1
- package/dist/esm/util/common.js.map +1 -1
- package/dist/esm/util/encryption.d.ts +2 -2
- package/dist/esm/util/encryption.js +1 -3
- package/dist/esm/util/encryption.js.map +1 -1
- package/dist/esm/util/expgolomb.d.ts +1 -2
- package/dist/esm/util/expgolomb.js.map +1 -1
- package/dist/esm/util/intread.js +1 -1
- package/dist/esm/util/intread.js.map +1 -1
- package/dist/esm/util/intwrite.js +1 -1
- package/dist/esm/util/intwrite.js.map +1 -1
- package/dist/esm/util/mem.js +7 -7
- package/dist/esm/util/mem.js.map +1 -1
- package/dist/esm/util/nalu.d.ts +1 -1
- package/dist/esm/util/nalu.js +3 -5
- package/dist/esm/util/nalu.js.map +1 -1
- package/dist/esm/util/ntp.js.map +1 -1
- package/dist/esm/util/pcm.d.ts +1 -1
- package/dist/esm/util/pcm.js.map +1 -1
- package/dist/esm/util/pixel.d.ts +1 -1
- package/dist/esm/util/pixel.js +8 -10
- package/dist/esm/util/pixel.js.map +1 -1
- package/dist/esm/util/rational.d.ts +10 -10
- package/dist/esm/util/rational.js +4 -4
- package/dist/esm/util/rational.js.map +1 -1
- package/dist/esm/util/sample.d.ts +1 -1
- package/dist/esm/util/sample.js +7 -7
- package/dist/esm/util/sample.js.map +1 -1
- package/dist/esm/util/serialize.d.ts +9 -9
- package/dist/esm/util/serialize.js +6 -6
- package/dist/esm/util/serialize.js.map +1 -1
- package/package.json +23 -390
- package/src/AVStream.ts +677 -0
- package/src/audiosamplefmt.ts +302 -0
- package/src/avformat.ts +96 -0
- package/src/codec.ts +1016 -0
- package/src/codecs/aac.ts +429 -0
- package/src/codecs/ac3.ts +309 -0
- package/src/codecs/av1.ts +503 -0
- package/src/codecs/dts.ts +100 -0
- package/src/codecs/flac.ts +118 -0
- package/src/codecs/h264.ts +1013 -0
- package/src/codecs/hevc.ts +1049 -0
- package/src/codecs/mp3.ts +172 -0
- package/src/codecs/mpeg4.ts +37 -0
- package/src/codecs/mpegvideo.ts +49 -0
- package/src/codecs/opus.ts +148 -0
- package/src/codecs/ttml.ts +158 -0
- package/src/codecs/vp8.ts +91 -0
- package/src/codecs/vp9.ts +213 -0
- package/src/codecs/vvc.ts +1086 -0
- package/src/constant.ts +72 -0
- package/src/enum.ts +47 -0
- package/src/error.ts +45 -0
- package/src/function/analyzeAVFormat.ts +94 -0
- package/src/function/analyzeUrlIOLoader.ts +166 -0
- package/src/function/audioData2AVFrame.ts +82 -0
- package/src/function/avPCMBuffer2AVFrame.ts +111 -0
- package/src/function/avframe2AudioData.ts +131 -0
- package/src/function/avframe2VideoFrame.ts +88 -0
- package/src/function/avpacket2EncodedAudioChunk.ts +39 -0
- package/src/function/avpacket2EncodedVideoChunk.ts +39 -0
- package/src/function/compileResource.ts +57 -0
- package/src/function/constant/webcodecs.ts +81 -0
- package/src/function/encodedAudioChunk2AVPacket.ts +62 -0
- package/src/function/encodedVideoChunk2AVPacket.ts +86 -0
- package/src/function/getAudioCodec.ts +45 -0
- package/src/function/getAudioMimeType.ts +44 -0
- package/src/function/getHardwarePreference.ts +45 -0
- package/src/function/getVideoCodec.ts +244 -0
- package/src/function/getVideoMimeType.ts +35 -0
- package/src/function/getWasmUrl.ts +190 -0
- package/src/function/hasAlphaChannel.ts +37 -0
- package/src/function/isHdr.ts +44 -0
- package/src/function/videoFrame2AVFrame.ts +95 -0
- package/src/implement/AVFramePoolImpl.ts +83 -0
- package/src/implement/AVPCMBufferPoolImpl.ts +79 -0
- package/src/implement/AVPacketPoolImpl.ts +82 -0
- package/src/index.ts +264 -0
- package/src/internal.ts +71 -0
- package/src/pixelFormatDescriptor.ts +819 -0
- package/src/pixfmt.ts +1400 -0
- package/src/sampleFormatDescriptor.ts +57 -0
- package/src/stringEnum.ts +366 -0
- package/src/struct/audiosample.ts +95 -0
- package/src/struct/avbuffer.ts +139 -0
- package/src/struct/avcodecparameters.ts +243 -0
- package/src/struct/avdict.ts +44 -0
- package/src/struct/avframe.ts +663 -0
- package/src/struct/avpacket.ts +178 -0
- package/src/struct/avpcmbuffer.ts +77 -0
- package/src/struct/avsubtitle.ts +59 -0
- package/src/struct/encryption.ts +180 -0
- package/src/struct/rational.ts +43 -0
- package/src/util/amf.ts +178 -0
- package/src/util/av1syntax.ts +112 -0
- package/src/util/avbuffer.ts +294 -0
- package/src/util/avdict.ts +171 -0
- package/src/util/avframe.ts +520 -0
- package/src/util/avpacket.ts +313 -0
- package/src/util/channel.ts +66 -0
- package/src/util/codecparameters.ts +148 -0
- package/src/util/common.ts +42 -0
- package/src/util/encryption.ts +154 -0
- package/src/util/expgolomb.ts +170 -0
- package/src/util/intread.ts +60 -0
- package/src/util/intwrite.ts +71 -0
- package/src/util/mem.ts +60 -0
- package/src/util/nalu.ts +297 -0
- package/src/util/ntp.ts +32 -0
- package/src/util/pcm.ts +161 -0
- package/src/util/pixel.ts +381 -0
- package/src/util/rational.ts +152 -0
- package/src/util/sample.ts +136 -0
- package/src/util/serialize.ts +268 -0
- package/dist/cjs/AVStream.d.ts +0 -577
- package/dist/cjs/audiosamplefmt.d.ts +0 -248
- package/dist/cjs/avformat.d.ts +0 -66
- package/dist/cjs/codec.d.ts +0 -927
- package/dist/cjs/codecs/aac.d.ts +0 -121
- package/dist/cjs/codecs/ac3.d.ts +0 -72
- package/dist/cjs/codecs/av1.d.ts +0 -75
- package/dist/cjs/codecs/dts.d.ts +0 -17
- package/dist/cjs/codecs/flac.d.ts +0 -46
- package/dist/cjs/codecs/h264.d.ts +0 -188
- package/dist/cjs/codecs/hevc.d.ts +0 -220
- package/dist/cjs/codecs/mp3.d.ts +0 -17
- package/dist/cjs/codecs/mpeg4.d.ts +0 -7
- package/dist/cjs/codecs/mpegvideo.d.ts +0 -7
- package/dist/cjs/codecs/opus.d.ts +0 -26
- package/dist/cjs/codecs/ttml.d.ts +0 -9
- package/dist/cjs/codecs/ttml.js +0 -87
- package/dist/cjs/codecs/vp8.d.ts +0 -31
- package/dist/cjs/codecs/vp9.d.ts +0 -45
- package/dist/cjs/codecs/vvc.d.ts +0 -235
- package/dist/cjs/constant.d.ts +0 -36
- package/dist/cjs/enum.d.ts +0 -3285
- package/dist/cjs/error.d.ts +0 -10
- package/dist/cjs/function/analyzeAVFormat.d.ts +0 -3
- package/dist/cjs/function/analyzeUrlIOLoader.d.ts +0 -7
- package/dist/cjs/function/analyzeUrlIOLoader.js +0 -101
- package/dist/cjs/function/audioData2AVFrame.d.ts +0 -2
- package/dist/cjs/function/avPCMBuffer2AVFrame.d.ts +0 -3
- package/dist/cjs/function/avframe2AudioData.d.ts +0 -2
- package/dist/cjs/function/avframe2VideoFrame.d.ts +0 -5
- package/dist/cjs/function/avframe2VideoFrame.js +0 -146
- package/dist/cjs/function/avpacket2EncodedAudioChunk.d.ts +0 -2
- package/dist/cjs/function/avpacket2EncodedVideoChunk.d.ts +0 -2
- package/dist/cjs/function/compileResource.d.ts +0 -2
- package/dist/cjs/function/compileResource.js +0 -53
- package/dist/cjs/function/encodedAudioChunk2AVPacket.d.ts +0 -2
- package/dist/cjs/function/encodedAudioChunk2AVPacket.js +0 -23
- package/dist/cjs/function/encodedVideoChunk2AVPacket.d.ts +0 -7
- package/dist/cjs/function/getAudioCodec.d.ts +0 -2
- package/dist/cjs/function/getHardwarePreference.d.ts +0 -1
- package/dist/cjs/function/getHardwarePreference.js +0 -16
- package/dist/cjs/function/getVideoCodec.d.ts +0 -2
- package/dist/cjs/function/getWasmUrl.d.ts +0 -2
- package/dist/cjs/function/hasAlphaChannel.d.ts +0 -2
- package/dist/cjs/function/isHdr.d.ts +0 -2
- package/dist/cjs/function/videoFrame2AVFrame.d.ts +0 -7
- package/dist/cjs/function/videoFrame2AVFrame.js +0 -113
- package/dist/cjs/implement/AVFramePoolImpl.d.ts +0 -11
- package/dist/cjs/implement/AVFramePoolImpl.js +0 -59
- package/dist/cjs/implement/AVPCMBufferPoolImpl.d.ts +0 -11
- package/dist/cjs/implement/AVPCMBufferPoolImpl.js +0 -57
- package/dist/cjs/implement/AVPacketPoolImpl.d.ts +0 -11
- package/dist/cjs/implement/AVPacketPoolImpl.js +0 -60
- package/dist/cjs/pixelFormatDescriptor.d.ts +0 -100
- package/dist/cjs/pixfmt.d.ts +0 -1293
- package/dist/cjs/sampleFormatDescriptor.d.ts +0 -6
- package/dist/cjs/stringEnum.d.ts +0 -161
- package/dist/cjs/struct/audiosample.d.ts +0 -64
- package/dist/cjs/struct/avbuffer.d.ts +0 -85
- package/dist/cjs/struct/avcodecparameters.d.ts +0 -181
- package/dist/cjs/struct/avdict.d.ts +0 -17
- package/dist/cjs/struct/avframe.d.ts +0 -559
- package/dist/cjs/struct/avpacket.d.ts +0 -124
- package/dist/cjs/struct/avpcmbuffer.d.ts +0 -49
- package/dist/cjs/struct/avsubtitle.d.ts +0 -30
- package/dist/cjs/struct/encryption.d.ts +0 -137
- package/dist/cjs/struct/rational.d.ts +0 -15
- package/dist/cjs/struct/rational.js +0 -43
- package/dist/cjs/util/amf.d.ts +0 -10
- package/dist/cjs/util/av1syntax.d.ts +0 -9
- package/dist/cjs/util/avbuffer.d.ts +0 -18
- package/dist/cjs/util/avbuffer.js +0 -153
- package/dist/cjs/util/avdict.d.ts +0 -9
- package/dist/cjs/util/avdict.js +0 -111
- package/dist/cjs/util/avframe.d.ts +0 -21
- package/dist/cjs/util/avpacket.d.ts +0 -24
- package/dist/cjs/util/channel.d.ts +0 -5
- package/dist/cjs/util/codecparameters.d.ts +0 -4
- package/dist/cjs/util/codecparameters.js +0 -70
- package/dist/cjs/util/common.d.ts +0 -3
- package/dist/cjs/util/crypto.d.ts +0 -1
- package/dist/cjs/util/crypto.js +0 -8
- package/dist/cjs/util/crypto.js.map +0 -1
- package/dist/cjs/util/encryption.d.ts +0 -6
- package/dist/cjs/util/expgolomb.d.ts +0 -26
- package/dist/cjs/util/intread.d.ts +0 -9
- package/dist/cjs/util/intwrite.d.ts +0 -9
- package/dist/cjs/util/mem.d.ts +0 -5
- package/dist/cjs/util/mem.js +0 -54
- package/dist/cjs/util/nalu.d.ts +0 -32
- package/dist/cjs/util/ntp.d.ts +0 -1
- package/dist/cjs/util/pcm.d.ts +0 -4
- package/dist/cjs/util/pixel.d.ts +0 -11
- package/dist/cjs/util/rational.d.ts +0 -58
- package/dist/cjs/util/sample.d.ts +0 -7
- package/dist/cjs/util/serialize.d.ts +0 -63
- package/dist/esm/util/crypto.d.ts +0 -1
- package/dist/esm/util/crypto.js +0 -4
- package/dist/esm/util/crypto.js.map +0 -1
- /package/dist/cjs/{audiosamplefmt.js → audiosamplefmt.cjs} +0 -0
- /package/dist/cjs/{avformat.js → avformat.cjs} +0 -0
- /package/dist/cjs/{codec.js → codec.cjs} +0 -0
- /package/dist/cjs/{error.js → error.cjs} +0 -0
- /package/dist/cjs/function/{analyzeAVFormat.js → analyzeAVFormat.cjs} +0 -0
- /package/dist/cjs/{pixfmt.js → pixfmt.cjs} +0 -0
- /package/dist/cjs/{sampleFormatDescriptor.js → sampleFormatDescriptor.cjs} +0 -0
- /package/dist/cjs/struct/{avsubtitle.js → avsubtitle.cjs} +0 -0
- /package/dist/cjs/util/{av1syntax.js → av1syntax.cjs} +0 -0
- /package/dist/cjs/util/{common.js → common.cjs} +0 -0
- /package/dist/cjs/util/{expgolomb.js → expgolomb.cjs} +0 -0
- /package/dist/cjs/util/{ntp.js → ntp.cjs} +0 -0
- /package/dist/cjs/util/{pcm.js → pcm.cjs} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia AVFrame to AudioData utils
|
|
3
|
+
*
|
|
4
|
+
* 版权所有 (C) 2024 赵高兴
|
|
5
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
6
|
+
*
|
|
7
|
+
* 此文件是 libmedia 的一部分
|
|
8
|
+
* This file is part of libmedia.
|
|
9
|
+
*
|
|
10
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
11
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
12
|
+
* libmedia is free software; you can redistribute it and/or
|
|
13
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
* License as published by the Free Software Foundation; either
|
|
15
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
16
|
+
*
|
|
17
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
18
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
19
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
* Lesser General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { mapFloat32Array, mapInt16Array, mapInt32Array, mapUint8Array } from '@libmedia/cheap'
|
|
27
|
+
import type AVFrame from '../struct/avframe'
|
|
28
|
+
import { AVSampleFormat } from '../audiosamplefmt'
|
|
29
|
+
import { getBytesPerSample, sampleFormatIsPlanar } from '../util/sample'
|
|
30
|
+
import { avRescaleQ2 } from '../util/rational'
|
|
31
|
+
import { AV_TIME_BASE_Q, NOPTS_VALUE_BIGINT } from '../constant'
|
|
32
|
+
|
|
33
|
+
function mapFormat(avframe: pointer<AVFrame>) {
|
|
34
|
+
switch (avframe.format) {
|
|
35
|
+
case AVSampleFormat.AV_SAMPLE_FMT_U8:
|
|
36
|
+
return 'u8'
|
|
37
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S16:
|
|
38
|
+
return 's16'
|
|
39
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S32:
|
|
40
|
+
return 's32'
|
|
41
|
+
case AVSampleFormat.AV_SAMPLE_FMT_FLT:
|
|
42
|
+
return 'f32'
|
|
43
|
+
case AVSampleFormat.AV_SAMPLE_FMT_U8P:
|
|
44
|
+
return 'u8-planar'
|
|
45
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S16P:
|
|
46
|
+
return 's16-planar'
|
|
47
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S32P:
|
|
48
|
+
return 's32-planar'
|
|
49
|
+
case AVSampleFormat.AV_SAMPLE_FMT_FLTP:
|
|
50
|
+
return 'f32-planar'
|
|
51
|
+
default:
|
|
52
|
+
throw new Error('not support')
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function mapBuffer(format: AVSampleFormat, data: Uint8Array) {
|
|
57
|
+
switch (format) {
|
|
58
|
+
case AVSampleFormat.AV_SAMPLE_FMT_U8:
|
|
59
|
+
case AVSampleFormat.AV_SAMPLE_FMT_U8P:
|
|
60
|
+
return data
|
|
61
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S16:
|
|
62
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S16P:
|
|
63
|
+
return new Int16Array(data.buffer)
|
|
64
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S32:
|
|
65
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S32P:
|
|
66
|
+
return new Int32Array(data.buffer)
|
|
67
|
+
case AVSampleFormat.AV_SAMPLE_FMT_FLT:
|
|
68
|
+
case AVSampleFormat.AV_SAMPLE_FMT_FLTP:
|
|
69
|
+
return new Float32Array(data.buffer)
|
|
70
|
+
default:
|
|
71
|
+
throw new Error('not support')
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function mapTypeBuffer(format: AVSampleFormat, pointer: pointer<void>, size: int32) {
|
|
76
|
+
switch (format) {
|
|
77
|
+
case AVSampleFormat.AV_SAMPLE_FMT_U8:
|
|
78
|
+
case AVSampleFormat.AV_SAMPLE_FMT_U8P:
|
|
79
|
+
return mapUint8Array(pointer, reinterpret_cast<size>(size))
|
|
80
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S16:
|
|
81
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S16P:
|
|
82
|
+
return mapInt16Array(reinterpret_cast<pointer<int16>>(pointer), size >>> 1)
|
|
83
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S32:
|
|
84
|
+
case AVSampleFormat.AV_SAMPLE_FMT_S32P:
|
|
85
|
+
return mapInt32Array(reinterpret_cast<pointer<int32>>(pointer), size >>> 2)
|
|
86
|
+
case AVSampleFormat.AV_SAMPLE_FMT_FLT:
|
|
87
|
+
case AVSampleFormat.AV_SAMPLE_FMT_FLTP:
|
|
88
|
+
return mapFloat32Array(reinterpret_cast<pointer<float>>(pointer), size >>> 2)
|
|
89
|
+
default:
|
|
90
|
+
throw new Error('not support')
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function avframe2AudioData(avframe: pointer<AVFrame>, pts?: int64) {
|
|
95
|
+
|
|
96
|
+
const planar = sampleFormatIsPlanar(avframe.format)
|
|
97
|
+
const planes = planar ? avframe.chLayout.nbChannels : 1
|
|
98
|
+
|
|
99
|
+
let data: ArrayBufferView
|
|
100
|
+
|
|
101
|
+
const sampleSize = getBytesPerSample(avframe.format)
|
|
102
|
+
|
|
103
|
+
if (planar) {
|
|
104
|
+
const linesize = avframe.nbSamples * sampleSize
|
|
105
|
+
const buffer = new Uint8Array(planes * linesize)
|
|
106
|
+
let offset = 0
|
|
107
|
+
for (let i = 0; i < planes; i++) {
|
|
108
|
+
buffer.set(mapUint8Array(avframe.data[i], linesize), offset)
|
|
109
|
+
offset += linesize
|
|
110
|
+
}
|
|
111
|
+
data = mapBuffer(avframe.format, buffer)
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
data = mapTypeBuffer(avframe.format, avframe.data[0], sampleSize * avframe.nbSamples * avframe.chLayout.nbChannels)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const audioData = new AudioData({
|
|
118
|
+
data: data as BufferSource,
|
|
119
|
+
format: mapFormat(avframe),
|
|
120
|
+
sampleRate: avframe.sampleRate,
|
|
121
|
+
numberOfFrames: avframe.nbSamples,
|
|
122
|
+
numberOfChannels: avframe.chLayout.nbChannels,
|
|
123
|
+
timestamp: pts
|
|
124
|
+
? static_cast<double>(pts)
|
|
125
|
+
: (avframe.pts === NOPTS_VALUE_BIGINT
|
|
126
|
+
? -1
|
|
127
|
+
: static_cast<double>(avRescaleQ2(avframe.pts, addressof(avframe.timeBase), AV_TIME_BASE_Q))
|
|
128
|
+
)
|
|
129
|
+
})
|
|
130
|
+
return audioData
|
|
131
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia AVFrame to VideoFrame utils
|
|
3
|
+
*
|
|
4
|
+
* 版权所有 (C) 2024 赵高兴
|
|
5
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
6
|
+
*
|
|
7
|
+
* 此文件是 libmedia 的一部分
|
|
8
|
+
* This file is part of libmedia.
|
|
9
|
+
*
|
|
10
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
11
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
12
|
+
* libmedia is free software; you can redistribute it and/or
|
|
13
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
* License as published by the Free Software Foundation; either
|
|
15
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
16
|
+
*
|
|
17
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
18
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
19
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
* Lesser General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import type AVFrame from '../struct/avframe'
|
|
27
|
+
import { getAVPixelFormatDescriptor } from '../pixelFormatDescriptor'
|
|
28
|
+
import { AVColorRange, type AVPixelFormat } from '../pixfmt'
|
|
29
|
+
import { avRescaleQ2 } from '../util/rational'
|
|
30
|
+
import { AV_TIME_BASE_Q } from '../constant'
|
|
31
|
+
import { getHeap } from '@libmedia/cheap/internal'
|
|
32
|
+
import { object } from '@libmedia/common'
|
|
33
|
+
import { pixelFormatMap, colorPrimariesMap, colorSpaceMap, colorTrcMap } from './constant/webcodecs'
|
|
34
|
+
|
|
35
|
+
const pixelFormatMapReverse = object.reverse(pixelFormatMap)
|
|
36
|
+
const colorPrimariesMapReverse = object.reverse(colorPrimariesMap)
|
|
37
|
+
const colorSpaceMapReverse = object.reverse(colorSpaceMap)
|
|
38
|
+
const colorTrcMapReverse = object.reverse(colorTrcMap)
|
|
39
|
+
|
|
40
|
+
export function avPixelFormat2Format(pixfmt: AVPixelFormat) {
|
|
41
|
+
return pixelFormatMapReverse[pixfmt] ?? null
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function getVideoColorSpaceInit(avframe: pointer<AVFrame>) {
|
|
45
|
+
const init: VideoColorSpaceInit = {
|
|
46
|
+
fullRange: false,
|
|
47
|
+
matrix: colorSpaceMapReverse[avframe.colorSpace] ?? null,
|
|
48
|
+
primaries: colorPrimariesMapReverse[avframe.colorPrimaries] ?? null,
|
|
49
|
+
transfer: colorTrcMapReverse[avframe.colorTrc] ?? null
|
|
50
|
+
}
|
|
51
|
+
if (avframe.colorRange === AVColorRange.AVCOL_RANGE_JPEG) {
|
|
52
|
+
init.fullRange = true
|
|
53
|
+
}
|
|
54
|
+
return init
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function avframe2VideoFrame(avframe: pointer<AVFrame>, pts?: int64, videoFrameInit: Partial<VideoFrameBufferInit> = {}) {
|
|
58
|
+
|
|
59
|
+
let height = avframe.height
|
|
60
|
+
|
|
61
|
+
const des = getAVPixelFormatDescriptor(avframe.format as AVPixelFormat)
|
|
62
|
+
|
|
63
|
+
const layout: PlaneLayout[] = []
|
|
64
|
+
|
|
65
|
+
for (let i = 0; i < des.comp.length; i++) {
|
|
66
|
+
layout.push({
|
|
67
|
+
offset: static_cast<double>(reinterpret_cast<size>(avframe.data[i])),
|
|
68
|
+
stride: avframe.linesize[i]
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const init: VideoFrameBufferInit = object.extend({
|
|
73
|
+
codedWidth: avframe.width,
|
|
74
|
+
codedHeight: height,
|
|
75
|
+
timestamp: pts ? static_cast<double>(pts) : static_cast<double>(avRescaleQ2(avframe.pts, addressof(avframe.timeBase), AV_TIME_BASE_Q)),
|
|
76
|
+
format: avPixelFormat2Format(avframe.format),
|
|
77
|
+
duration: static_cast<double>(avRescaleQ2(avframe.duration, addressof(avframe.timeBase), AV_TIME_BASE_Q)),
|
|
78
|
+
layout,
|
|
79
|
+
colorSpace: getVideoColorSpaceInit(avframe),
|
|
80
|
+
visibleRect: {
|
|
81
|
+
x: reinterpret_cast<double>(avframe.cropLeft),
|
|
82
|
+
y: reinterpret_cast<double>(avframe.cropTop),
|
|
83
|
+
width: avframe.width - reinterpret_cast<int32>((avframe.cropLeft + avframe.cropRight) as size),
|
|
84
|
+
height: avframe.height - reinterpret_cast<int32>((avframe.cropTop + avframe.cropBottom) as size)
|
|
85
|
+
}
|
|
86
|
+
}, videoFrameInit)
|
|
87
|
+
return new VideoFrame(getHeap(), init)
|
|
88
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* libmedia AVPacket to EncodedAudioChunk utils
|
|
2
|
+
*
|
|
3
|
+
* 版权所有 (C) 2024 赵高兴
|
|
4
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
5
|
+
*
|
|
6
|
+
* 此文件是 libmedia 的一部分
|
|
7
|
+
* This file is part of libmedia.
|
|
8
|
+
*
|
|
9
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
10
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
11
|
+
* libmedia is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
17
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
18
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { avRescaleQ2 } from '../util/rational'
|
|
26
|
+
import type AVPacket from '../struct/avpacket'
|
|
27
|
+
import { AVPacketFlags } from '../struct/avpacket'
|
|
28
|
+
import { mapUint8Array } from '@libmedia/cheap'
|
|
29
|
+
import { AV_TIME_BASE_Q, NOPTS_VALUE, NOPTS_VALUE_BIGINT } from '../constant'
|
|
30
|
+
|
|
31
|
+
export default function avpacket2EncodedAudioChunk(avpacket: pointer<AVPacket>) {
|
|
32
|
+
const key = avpacket.flags & AVPacketFlags.AV_PKT_FLAG_KEY
|
|
33
|
+
return new EncodedAudioChunk({
|
|
34
|
+
type: key ? 'key' : 'delta',
|
|
35
|
+
duration: avpacket.duration < 0 ? undefined : static_cast<double>(avRescaleQ2(avpacket.duration, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
|
|
36
|
+
timestamp: avpacket.pts === NOPTS_VALUE_BIGINT ? NOPTS_VALUE : static_cast<double>(avRescaleQ2(avpacket.pts, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
|
|
37
|
+
data: mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size))
|
|
38
|
+
})
|
|
39
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* libmedia AVPacket to EncodedVideoChunk utils
|
|
2
|
+
*
|
|
3
|
+
* 版权所有 (C) 2024 赵高兴
|
|
4
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
5
|
+
*
|
|
6
|
+
* 此文件是 libmedia 的一部分
|
|
7
|
+
* This file is part of libmedia.
|
|
8
|
+
*
|
|
9
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
10
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
11
|
+
* libmedia is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
17
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
18
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { avRescaleQ2 } from '../util/rational'
|
|
26
|
+
import type AVPacket from '../struct/avpacket'
|
|
27
|
+
import { AVPacketFlags } from '../struct/avpacket'
|
|
28
|
+
import { mapUint8Array } from '@libmedia/cheap'
|
|
29
|
+
import { AV_TIME_BASE_Q, NOPTS_VALUE, NOPTS_VALUE_BIGINT } from '../constant'
|
|
30
|
+
|
|
31
|
+
export default function avpacket2EncodedVideoChunk(avpacket: pointer<AVPacket>) {
|
|
32
|
+
const key = avpacket.flags & AVPacketFlags.AV_PKT_FLAG_KEY
|
|
33
|
+
return new EncodedVideoChunk({
|
|
34
|
+
type: key ? 'key' : 'delta',
|
|
35
|
+
duration: avpacket.duration < 0 ? undefined : static_cast<double>(avRescaleQ2(avpacket.duration, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
|
|
36
|
+
timestamp: avpacket.pts === NOPTS_VALUE_BIGINT ? NOPTS_VALUE : static_cast<double>(avRescaleQ2(avpacket.pts, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
|
|
37
|
+
data: mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size))
|
|
38
|
+
})
|
|
39
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* libmedia compile resource
|
|
2
|
+
*
|
|
3
|
+
* 版权所有 (C) 2024 赵高兴
|
|
4
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
5
|
+
*
|
|
6
|
+
* 此文件是 libmedia 的一部分
|
|
7
|
+
* This file is part of libmedia.
|
|
8
|
+
*
|
|
9
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
10
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
11
|
+
* libmedia is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
17
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
18
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { is } from '@libmedia/common'
|
|
26
|
+
|
|
27
|
+
import {
|
|
28
|
+
config as cheapConfig,
|
|
29
|
+
type WebAssemblyResource,
|
|
30
|
+
compileResource as compile
|
|
31
|
+
} from '@libmedia/cheap'
|
|
32
|
+
|
|
33
|
+
export default async function compileResource(wasmUrl: string | ArrayBuffer | WebAssemblyResource, thread: boolean = false) {
|
|
34
|
+
let resource: WebAssemblyResource
|
|
35
|
+
|
|
36
|
+
if (is.string(wasmUrl) || is.arrayBuffer(wasmUrl)) {
|
|
37
|
+
resource = await compile({
|
|
38
|
+
source: wasmUrl
|
|
39
|
+
})
|
|
40
|
+
if (cheapConfig.USE_THREADS && defined(ENABLE_THREADS) && thread) {
|
|
41
|
+
resource.threadModule = await compile(
|
|
42
|
+
{
|
|
43
|
+
source: resource.buffer
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
child: true
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
delete resource.buffer
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
resource = wasmUrl
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return resource
|
|
57
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia webcodecs constant define
|
|
3
|
+
*
|
|
4
|
+
* 版权所有 (C) 2024 赵高兴
|
|
5
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
6
|
+
*
|
|
7
|
+
* 此文件是 libmedia 的一部分
|
|
8
|
+
* This file is part of libmedia.
|
|
9
|
+
*
|
|
10
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
11
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
12
|
+
* libmedia is free software; you can redistribute it and/or
|
|
13
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
* License as published by the Free Software Foundation; either
|
|
15
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
16
|
+
*
|
|
17
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
18
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
19
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
* Lesser General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { AVColorPrimaries, AVColorSpace, AVColorTransferCharacteristic, AVPixelFormat } from '../../pixfmt'
|
|
27
|
+
|
|
28
|
+
export const pixelFormatMap: Record<VideoPixelFormat, AVPixelFormat> = {
|
|
29
|
+
'BGRA': AVPixelFormat.AV_PIX_FMT_BGRA,
|
|
30
|
+
'BGRX': AVPixelFormat.AV_PIX_FMT_BGR0,
|
|
31
|
+
'I420': AVPixelFormat.AV_PIX_FMT_YUV420P,
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
'I420P10': AVPixelFormat.AV_PIX_FMT_YUV420P10LE,
|
|
34
|
+
'I420P12': AVPixelFormat.AV_PIX_FMT_YUV420P12LE,
|
|
35
|
+
'I420A': AVPixelFormat.AV_PIX_FMT_YUVA420P,
|
|
36
|
+
'I420AP10': AVPixelFormat.AV_PIX_FMT_YUVA420P10LE,
|
|
37
|
+
'I420AP12': AVPixelFormat.AV_PIX_FMT_YUVA420P12LE,
|
|
38
|
+
'I422': AVPixelFormat.AV_PIX_FMT_YUV422P,
|
|
39
|
+
'I422P10': AVPixelFormat.AV_PIX_FMT_YUV422P10LE,
|
|
40
|
+
'I422P12': AVPixelFormat.AV_PIX_FMT_YUV422P12LE,
|
|
41
|
+
'I422A': AVPixelFormat.AV_PIX_FMT_YUVA422P,
|
|
42
|
+
'I422AP10': AVPixelFormat.AV_PIX_FMT_YUVA422P10LE,
|
|
43
|
+
'I422AP12': AVPixelFormat.AV_PIX_FMT_YUVA422P12LE,
|
|
44
|
+
'I444': AVPixelFormat.AV_PIX_FMT_YUV444P,
|
|
45
|
+
'I444P10': AVPixelFormat.AV_PIX_FMT_YUV444P10LE,
|
|
46
|
+
'I444P12': AVPixelFormat.AV_PIX_FMT_YUV444P12LE,
|
|
47
|
+
'I444A': AVPixelFormat.AV_PIX_FMT_YUVA444P,
|
|
48
|
+
'I444AP10': AVPixelFormat.AV_PIX_FMT_YUVA444P10LE,
|
|
49
|
+
'I444AP12': AVPixelFormat.AV_PIX_FMT_YUVA444P12LE,
|
|
50
|
+
'NV12': AVPixelFormat.AV_PIX_FMT_NV12,
|
|
51
|
+
'RGBA': AVPixelFormat.AV_PIX_FMT_RGBA,
|
|
52
|
+
'RGBX': AVPixelFormat.AV_PIX_FMT_RGB0
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const colorSpaceMap: Record<VideoMatrixCoefficients, AVColorSpace> = {
|
|
56
|
+
'bt709': AVColorSpace.AVCOL_SPC_BT709,
|
|
57
|
+
'smpte170m': AVColorSpace.AVCOL_SPC_SMPTE170M,
|
|
58
|
+
'bt470bg': AVColorSpace.AVCOL_SPC_BT470BG,
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
'bt2020-ncl': AVColorSpace.AVCOL_SPC_BT2020_NCL,
|
|
61
|
+
'rgb': AVColorSpace.AVCOL_SPC_RGB
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const colorPrimariesMap: Record<VideoColorPrimaries, AVColorPrimaries> = {
|
|
65
|
+
'bt709': AVColorPrimaries.AVCOL_PRI_BT709,
|
|
66
|
+
'bt470bg': AVColorPrimaries.AVCOL_PRI_BT470BG,
|
|
67
|
+
'smpte170m': AVColorPrimaries.AVCOL_PRI_SMPTE170M,
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
'bt2020': AVColorPrimaries.AVCOL_PRI_BT2020,
|
|
70
|
+
'smpte432': AVColorPrimaries.AVCOL_PRI_SMPTE432
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const colorTrcMap: Record<VideoTransferCharacteristics, AVColorTransferCharacteristic> = {
|
|
74
|
+
'bt709': AVColorTransferCharacteristic.AVCOL_TRC_BT709,
|
|
75
|
+
'iec61966-2-1': AVColorTransferCharacteristic.AVCOL_TRC_IEC61966_2_1,
|
|
76
|
+
'smpte170m': AVColorTransferCharacteristic.AVCOL_TRC_SMPTE170M,
|
|
77
|
+
// @ts-ignore
|
|
78
|
+
'linear': AVColorTransferCharacteristic.AVCOL_TRC_LINEAR,
|
|
79
|
+
'pq': AVColorTransferCharacteristic.AVCOL_TRC_SMPTE2084,
|
|
80
|
+
'hlg': AVColorTransferCharacteristic.AVCOL_TRC_ARIB_STD_B67
|
|
81
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* libmedia EncodedAudioChunk to AVPacket utils
|
|
2
|
+
*
|
|
3
|
+
* 版权所有 (C) 2024 赵高兴
|
|
4
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
5
|
+
*
|
|
6
|
+
* 此文件是 libmedia 的一部分
|
|
7
|
+
* This file is part of libmedia.
|
|
8
|
+
*
|
|
9
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
10
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
11
|
+
* libmedia is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
17
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
18
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { addAVPacketData, addAVPacketSideData, createAVPacket } from '../util/avpacket'
|
|
26
|
+
import type AVPacket from '../struct/avpacket'
|
|
27
|
+
import { AVPacketFlags } from '../struct/avpacket'
|
|
28
|
+
import { avMalloc } from '../util/mem'
|
|
29
|
+
import { mapUint8Array, memcpyFromUint8Array } from '@libmedia/cheap'
|
|
30
|
+
import { AV_TIME_BASE, NOPTS_VALUE_BIGINT } from '../constant'
|
|
31
|
+
import { AVPacketSideDataType } from '../codec'
|
|
32
|
+
|
|
33
|
+
export default function encodedAudioChunk2AVPacket(chunk: EncodedAudioChunk, avpacket: pointer<AVPacket> = nullptr, metadata?: EncodedAudioChunkMetadata) {
|
|
34
|
+
if (avpacket === nullptr) {
|
|
35
|
+
avpacket = createAVPacket()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
avpacket.pts = avpacket.dts = static_cast<int64>(chunk.timestamp)
|
|
39
|
+
avpacket.duration = chunk.duration == null ? NOPTS_VALUE_BIGINT : static_cast<int64>(chunk.duration)
|
|
40
|
+
avpacket.timeBase.den = AV_TIME_BASE
|
|
41
|
+
avpacket.timeBase.num = 1
|
|
42
|
+
avpacket.flags |= AVPacketFlags.AV_PKT_FLAG_KEY
|
|
43
|
+
const data: pointer<uint8> = avMalloc(chunk.byteLength)
|
|
44
|
+
chunk.copyTo(mapUint8Array(data, chunk.byteLength))
|
|
45
|
+
addAVPacketData(avpacket, data, chunk.byteLength)
|
|
46
|
+
|
|
47
|
+
if (metadata) {
|
|
48
|
+
if (metadata.decoderConfig?.description) {
|
|
49
|
+
let buffer: Uint8Array
|
|
50
|
+
if (metadata.decoderConfig.description instanceof ArrayBuffer) {
|
|
51
|
+
buffer = new Uint8Array(metadata.decoderConfig.description)
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// @ts-ignore
|
|
55
|
+
buffer = new Uint8Array(metadata.decoderConfig.description.buffer)
|
|
56
|
+
}
|
|
57
|
+
const extradata = avMalloc(buffer.length)
|
|
58
|
+
memcpyFromUint8Array(extradata, buffer.length, buffer)
|
|
59
|
+
addAVPacketSideData(avpacket, AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA, extradata, buffer.length)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* libmedia EncodedVideoChunk to AVPacket utils
|
|
2
|
+
*
|
|
3
|
+
* 版权所有 (C) 2024 赵高兴
|
|
4
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
5
|
+
*
|
|
6
|
+
* 此文件是 libmedia 的一部分
|
|
7
|
+
* This file is part of libmedia.
|
|
8
|
+
*
|
|
9
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
10
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
11
|
+
* libmedia is free software; you can redistribute it and/or
|
|
12
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
13
|
+
* License as published by the Free Software Foundation; either
|
|
14
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
15
|
+
*
|
|
16
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
17
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
18
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
19
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
20
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
21
|
+
* Lesser General Public License for more details.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { addAVPacketData, addAVPacketSideData, createAVPacket } from '../util/avpacket'
|
|
26
|
+
import type AVPacket from '../struct/avpacket'
|
|
27
|
+
import { AVPacketFlags } from '../struct/avpacket'
|
|
28
|
+
import { avMalloc } from '../util/mem'
|
|
29
|
+
import { mapUint8Array, memcpyFromUint8Array } from '@libmedia/cheap'
|
|
30
|
+
import { AV_TIME_BASE, NOPTS_VALUE_BIGINT } from '../constant'
|
|
31
|
+
import { AVPacketSideDataType } from '../codec'
|
|
32
|
+
import * as intwrite from '../util/intwrite'
|
|
33
|
+
|
|
34
|
+
export default function encodedVideoChunk2AVPacket(chunk: EncodedVideoChunk, avpacket: pointer<AVPacket> = nullptr, metadata?: EncodedVideoChunkMetadata & {
|
|
35
|
+
svc?: {
|
|
36
|
+
temporalLayerId: number
|
|
37
|
+
}
|
|
38
|
+
alphaSideData?: BufferSource
|
|
39
|
+
}) {
|
|
40
|
+
if (avpacket === nullptr) {
|
|
41
|
+
avpacket = createAVPacket()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
avpacket.pts = static_cast<int64>(chunk.timestamp)
|
|
45
|
+
avpacket.timeBase.den = AV_TIME_BASE
|
|
46
|
+
avpacket.timeBase.num = 1
|
|
47
|
+
avpacket.duration = chunk.duration == null ? NOPTS_VALUE_BIGINT : static_cast<int64>(chunk.duration)
|
|
48
|
+
const data: pointer<uint8> = avMalloc(chunk.byteLength)
|
|
49
|
+
chunk.copyTo(mapUint8Array(data, chunk.byteLength))
|
|
50
|
+
|
|
51
|
+
addAVPacketData(avpacket, data, chunk.byteLength)
|
|
52
|
+
|
|
53
|
+
if (metadata) {
|
|
54
|
+
if (metadata.decoderConfig?.description) {
|
|
55
|
+
let buffer: Uint8Array
|
|
56
|
+
if (metadata.decoderConfig.description instanceof ArrayBuffer) {
|
|
57
|
+
buffer = new Uint8Array(metadata.decoderConfig.description)
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// @ts-ignore
|
|
61
|
+
buffer = new Uint8Array(metadata.decoderConfig.description.buffer)
|
|
62
|
+
}
|
|
63
|
+
const extradata = avMalloc(buffer.length)
|
|
64
|
+
memcpyFromUint8Array(extradata, buffer.length, buffer)
|
|
65
|
+
addAVPacketSideData(avpacket, AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA, extradata, buffer.length)
|
|
66
|
+
}
|
|
67
|
+
if (metadata.alphaSideData) {
|
|
68
|
+
const extradata = avMalloc(metadata.alphaSideData.byteLength + 8)
|
|
69
|
+
let buffer: Uint8Array
|
|
70
|
+
if (metadata.alphaSideData instanceof ArrayBuffer) {
|
|
71
|
+
buffer = new Uint8Array(metadata.alphaSideData)
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
buffer = new Uint8Array(metadata.alphaSideData.buffer)
|
|
75
|
+
}
|
|
76
|
+
// 1 stands for alpha channel data
|
|
77
|
+
intwrite.wb64(data, 1n)
|
|
78
|
+
memcpyFromUint8Array(extradata + 8, buffer.length, buffer)
|
|
79
|
+
addAVPacketSideData(avpacket, AVPacketSideDataType.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, extradata, buffer.length)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (chunk.type === 'key') {
|
|
84
|
+
avpacket.flags |= AVPacketFlags.AV_PKT_FLAG_KEY
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia generate audio codec string
|
|
3
|
+
*
|
|
4
|
+
* 版权所有 (C) 2024 赵高兴
|
|
5
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
6
|
+
*
|
|
7
|
+
* 此文件是 libmedia 的一部分
|
|
8
|
+
* This file is part of libmedia.
|
|
9
|
+
*
|
|
10
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
11
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
12
|
+
* libmedia is free software; you can redistribute it and/or
|
|
13
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
* License as published by the Free Software Foundation; either
|
|
15
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
16
|
+
*
|
|
17
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
18
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
19
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
* Lesser General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { AVCodecID } from '../codec'
|
|
27
|
+
import { CodecId2MimeType } from '../stringEnum'
|
|
28
|
+
import type AVCodecParameters from '../struct/avcodecparameters'
|
|
29
|
+
|
|
30
|
+
export default function getAudioCodec(codecpar: pointer<AVCodecParameters>) {
|
|
31
|
+
|
|
32
|
+
const codecId = codecpar.codecId
|
|
33
|
+
let profile = codecpar.profile
|
|
34
|
+
|
|
35
|
+
let codec = CodecId2MimeType[codecId]
|
|
36
|
+
|
|
37
|
+
if (codecId === AVCodecID.AV_CODEC_ID_AAC) {
|
|
38
|
+
/*
|
|
39
|
+
* mp4a.40.profile
|
|
40
|
+
* url: https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter#iso_base_media_file_format_mp4_quicktime_and_3gp
|
|
41
|
+
*/
|
|
42
|
+
codec = `${codec}.${profile}`
|
|
43
|
+
}
|
|
44
|
+
return codec || 'unknown'
|
|
45
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia get audio mimetype
|
|
3
|
+
*
|
|
4
|
+
* 版权所有 (C) 2024 赵高兴
|
|
5
|
+
* Copyright (C) 2024 Gaoxing Zhao
|
|
6
|
+
*
|
|
7
|
+
* 此文件是 libmedia 的一部分
|
|
8
|
+
* This file is part of libmedia.
|
|
9
|
+
*
|
|
10
|
+
* libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
|
|
11
|
+
* 或任何其更新的版本条款重新分发或修改它
|
|
12
|
+
* libmedia is free software; you can redistribute it and/or
|
|
13
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
* License as published by the Free Software Foundation; either
|
|
15
|
+
* version 3.1 of the License, or (at your option) any later version.
|
|
16
|
+
*
|
|
17
|
+
* libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
|
|
18
|
+
* 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
|
|
19
|
+
* libmedia is distributed in the hope that it will be useful,
|
|
20
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
21
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
22
|
+
* Lesser General Public License for more details.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import {
|
|
27
|
+
browser
|
|
28
|
+
} from '@libmedia/common'
|
|
29
|
+
|
|
30
|
+
import getAudioCodec from './getAudioCodec'
|
|
31
|
+
import { AVCodecID } from '../codec'
|
|
32
|
+
import type AVCodecParameters from '../struct/avcodecparameters'
|
|
33
|
+
|
|
34
|
+
export default function getAudioMimeType(codecpar: pointer<AVCodecParameters>) {
|
|
35
|
+
let mimeType = ''
|
|
36
|
+
// firefox supports 'audio/mp4, codecs="mp3"', use 'audio/mpeg' for chrome, safari
|
|
37
|
+
if (codecpar.codecId === AVCodecID.AV_CODEC_ID_MP3 && !browser.firefox) {
|
|
38
|
+
mimeType = 'audio/mpeg'
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
mimeType = `audio/mp4; codecs="${getAudioCodec(codecpar)}"`
|
|
42
|
+
}
|
|
43
|
+
return mimeType
|
|
44
|
+
}
|