@libmedia/avutil 0.12.0 → 1.0.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/dist/cjs/{AVStream.js → AVStream.cjs} +5 -5
- package/dist/cjs/AVStream.js.map +1 -1
- package/dist/cjs/audiosamplefmt.js.map +1 -1
- package/dist/cjs/avformat.js.map +1 -1
- package/dist/cjs/codec.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/avsubtitle.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/audiosamplefmt.js.map +1 -1
- package/dist/esm/avformat.js.map +1 -1
- package/dist/esm/codec.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/avsubtitle.js.map +1 -1
- 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,503 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia av1 util
|
|
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 { AVPacketSideDataType } from '../codec'
|
|
27
|
+
import * as av1syntax from '../util/av1syntax'
|
|
28
|
+
import type AVCodecParameters from '../struct/avcodecparameters'
|
|
29
|
+
import { getAVPixelFormatDescriptor } from '../pixelFormatDescriptor'
|
|
30
|
+
import type { AVPixelFormat } from '../pixfmt'
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
BitReader,
|
|
34
|
+
BitWriter,
|
|
35
|
+
type Uint8ArrayInterface
|
|
36
|
+
} from '@libmedia/common/io'
|
|
37
|
+
|
|
38
|
+
export const enum AV1Profile {
|
|
39
|
+
Main,
|
|
40
|
+
High,
|
|
41
|
+
Professional
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const enum OBUType {
|
|
45
|
+
Reserved,
|
|
46
|
+
SEQUENCE_HEADER,
|
|
47
|
+
TEMPORAL_DELIMITER,
|
|
48
|
+
FRAME_HEADER,
|
|
49
|
+
TILE_GROUP,
|
|
50
|
+
METADATA,
|
|
51
|
+
FRAME,
|
|
52
|
+
REDUNDANT_FRAME_HEADER,
|
|
53
|
+
TILE_LIST,
|
|
54
|
+
PADDING = 15
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export const AV1Profile2Name: Record<AV1Profile, string> = {
|
|
58
|
+
[AV1Profile.Main]: 'Main',
|
|
59
|
+
[AV1Profile.High]: 'High',
|
|
60
|
+
[AV1Profile.Professional]: 'Professional'
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const LevelCapabilities = [
|
|
64
|
+
{ level: 20, maxResolution: 2048 * 1152 },
|
|
65
|
+
{ level: 21, maxResolution: 2816 * 1584 },
|
|
66
|
+
{ level: 30, maxResolution: 4352 * 2448 },
|
|
67
|
+
{ level: 31, maxResolution: 5504 * 3096 },
|
|
68
|
+
{ level: 40, maxResolution: 6144 * 3456 },
|
|
69
|
+
{ level: 41, maxResolution: 6144 * 3456 },
|
|
70
|
+
{ level: 50, maxResolution: 8192 * 4352 },
|
|
71
|
+
{ level: 51, maxResolution: 8192 * 4352 },
|
|
72
|
+
{ level: 52, maxResolution: 8192 * 4352 },
|
|
73
|
+
{ level: 53, maxResolution: 8192 * 4352 },
|
|
74
|
+
{ level: 60, maxResolution: 16384 * 8704 },
|
|
75
|
+
{ level: 61, maxResolution: 16384 * 8704 },
|
|
76
|
+
{ level: 62, maxResolution: 16384 * 8704 },
|
|
77
|
+
{ level: 63, maxResolution: 16384 * 8704 }
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
export const AV1LevelIdx = [20, 21, 22, 23, 30, 31, 32, 33, 40, 41, 42, 43, 50, 51, 52, 53, 60, 61, 62, 63, 70, 71, 72, 73]
|
|
81
|
+
|
|
82
|
+
export function getLevelByResolution(width: number, height: number, fps: number) {
|
|
83
|
+
const resolution = width * height
|
|
84
|
+
for (const level of LevelCapabilities) {
|
|
85
|
+
if (resolution <= level.maxResolution) {
|
|
86
|
+
return level.level
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function parseAVCodecParameters(
|
|
92
|
+
stream: {
|
|
93
|
+
codecpar: AVCodecParameters,
|
|
94
|
+
sideData: Partial<Record<AVPacketSideDataType, Uint8Array>>,
|
|
95
|
+
},
|
|
96
|
+
extradata?: Uint8ArrayInterface
|
|
97
|
+
) {
|
|
98
|
+
if (!extradata && stream.sideData[AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA]) {
|
|
99
|
+
extradata = stream.sideData[AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA]
|
|
100
|
+
}
|
|
101
|
+
if (extradata && extradata.length >= 4) {
|
|
102
|
+
const params = parseExtraData(extradata)
|
|
103
|
+
|
|
104
|
+
stream.codecpar.profile = params.profile
|
|
105
|
+
stream.codecpar.level = params.level
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* - 1 bit marker
|
|
111
|
+
* - 7 bit version
|
|
112
|
+
* - 3 bit profile
|
|
113
|
+
* - 5 bit level
|
|
114
|
+
* - 1 bit tier
|
|
115
|
+
* - 1 bit bitdepth > 8
|
|
116
|
+
* - 1 bit bitdepth == 12
|
|
117
|
+
* - 1 bit monochrome
|
|
118
|
+
* - 1 bit chroma_subsampling_x
|
|
119
|
+
* - 1 bit chroma_subsampling_y
|
|
120
|
+
* - 2 bit chroma_sample_position
|
|
121
|
+
* - 8 bit padding
|
|
122
|
+
*
|
|
123
|
+
* @param header
|
|
124
|
+
*/
|
|
125
|
+
export function parseExtraData(extradata: Uint8ArrayInterface) {
|
|
126
|
+
const bitReader = new BitReader(extradata.length)
|
|
127
|
+
bitReader.appendBuffer(extradata)
|
|
128
|
+
// marker
|
|
129
|
+
bitReader.readU1()
|
|
130
|
+
// version
|
|
131
|
+
bitReader.readU(7)
|
|
132
|
+
|
|
133
|
+
const profile = bitReader.readU(3)
|
|
134
|
+
const level = bitReader.readU(5)
|
|
135
|
+
const tier = bitReader.readU1()
|
|
136
|
+
let bitDepth = bitReader.readU1() ? 10 : 8
|
|
137
|
+
if (bitReader.readU1()) {
|
|
138
|
+
bitDepth = 12
|
|
139
|
+
}
|
|
140
|
+
const monochrome = bitReader.readU1()
|
|
141
|
+
const chromaSubsamplingX = bitReader.readU1()
|
|
142
|
+
const chromaSubsamplingY = bitReader.readU1()
|
|
143
|
+
const chromaSamplePosition = bitReader.readU(2)
|
|
144
|
+
|
|
145
|
+
return {
|
|
146
|
+
profile,
|
|
147
|
+
level,
|
|
148
|
+
tier,
|
|
149
|
+
bitDepth,
|
|
150
|
+
monochrome,
|
|
151
|
+
chromaSubsamplingX,
|
|
152
|
+
chromaSubsamplingY,
|
|
153
|
+
chromaSamplePosition
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* eslint-disable camelcase */
|
|
158
|
+
export function parseSequenceHeader(header: Uint8ArrayInterface) {
|
|
159
|
+
const bitReader = new BitReader(header.length)
|
|
160
|
+
bitReader.appendBuffer(header)
|
|
161
|
+
|
|
162
|
+
bitReader.readU1()
|
|
163
|
+
bitReader.readU(4)
|
|
164
|
+
const extensionFlag = bitReader.readU1()
|
|
165
|
+
const hasSizeFlag = bitReader.readU1()
|
|
166
|
+
// obu_reserved_1bit
|
|
167
|
+
bitReader.readU1()
|
|
168
|
+
if (extensionFlag) {
|
|
169
|
+
bitReader.readU(8)
|
|
170
|
+
}
|
|
171
|
+
if (hasSizeFlag) {
|
|
172
|
+
av1syntax.leb128(bitReader)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const seq_profile = av1syntax.f(bitReader, 3)
|
|
176
|
+
const still_picture = av1syntax.f(bitReader, 1)
|
|
177
|
+
const reduced_still_picture_header = av1syntax.f(bitReader, 1)
|
|
178
|
+
|
|
179
|
+
let timing_info_present_flag = 0
|
|
180
|
+
let decoder_model_info_present_flag = 0
|
|
181
|
+
let initial_display_delay_present_flag = 0
|
|
182
|
+
let operating_points_cnt_minus_1 = 0
|
|
183
|
+
let operating_point_idc: number[] = [0]
|
|
184
|
+
let seq_level_idx: number[] = [0]
|
|
185
|
+
let seq_tier: number[] = [0]
|
|
186
|
+
let decoder_model_present_for_this_op: number[] = [0]
|
|
187
|
+
let initial_display_delay_present_for_this_op: number[] = [0]
|
|
188
|
+
let initial_display_delay_minus_1: number[] = [0]
|
|
189
|
+
let buffer_delay_length_minus_1 = 0
|
|
190
|
+
let decoder_buffer_delay: number[] = [0]
|
|
191
|
+
let encoder_buffer_delay: number[] = [0]
|
|
192
|
+
let low_delay_mode_flag: number[] = [0]
|
|
193
|
+
|
|
194
|
+
if (reduced_still_picture_header) {
|
|
195
|
+
seq_level_idx[0] = av1syntax.f(bitReader, 5)
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
timing_info_present_flag = av1syntax.f(bitReader, 1)
|
|
199
|
+
if (timing_info_present_flag) {
|
|
200
|
+
|
|
201
|
+
let num_units_in_display_tick = av1syntax.f(bitReader, 32)
|
|
202
|
+
let time_scale = av1syntax.f(bitReader, 32)
|
|
203
|
+
let equal_picture_interval = av1syntax.f(bitReader, 1)
|
|
204
|
+
if (equal_picture_interval) {
|
|
205
|
+
let num_ticks_per_picture_minus_1 = av1syntax.uvlc(bitReader)
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
let decoder_model_info_present_flag = av1syntax.f(bitReader, 1)
|
|
209
|
+
if (decoder_model_info_present_flag) {
|
|
210
|
+
buffer_delay_length_minus_1 = av1syntax.f(bitReader, 5)
|
|
211
|
+
let num_units_in_decoding_tick = av1syntax.f(bitReader, 32)
|
|
212
|
+
let buffer_removal_time_length_minus_1 = av1syntax.f(bitReader, 5)
|
|
213
|
+
let frame_presentation_time_length_minus_1 = av1syntax.f(bitReader, 5)
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
decoder_model_info_present_flag = 0
|
|
218
|
+
}
|
|
219
|
+
let initial_display_delay_present_flag = av1syntax.f(bitReader, 1)
|
|
220
|
+
let operating_points_cnt_minus_1 = av1syntax.f(bitReader, 5)
|
|
221
|
+
for (let i = 0; i <= operating_points_cnt_minus_1; i++ ) {
|
|
222
|
+
operating_point_idc[i] = av1syntax.f(bitReader, 12)
|
|
223
|
+
seq_level_idx[i] = av1syntax.f(bitReader, 5)
|
|
224
|
+
if (seq_level_idx[i] > 7) {
|
|
225
|
+
seq_tier[i] = av1syntax.f(bitReader, 1)
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
seq_tier[i] = 0
|
|
229
|
+
}
|
|
230
|
+
if (decoder_model_info_present_flag) {
|
|
231
|
+
decoder_model_present_for_this_op[i] = av1syntax.f(bitReader, 1)
|
|
232
|
+
if (decoder_model_present_for_this_op[i]) {
|
|
233
|
+
let n = buffer_delay_length_minus_1 + 1
|
|
234
|
+
decoder_buffer_delay[i] = av1syntax.f(bitReader, n)
|
|
235
|
+
encoder_buffer_delay[i] = av1syntax.f(bitReader, n)
|
|
236
|
+
low_delay_mode_flag[i] = av1syntax.f(bitReader, 1)
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
decoder_model_present_for_this_op[i] = 0
|
|
241
|
+
}
|
|
242
|
+
if (initial_display_delay_present_flag) {
|
|
243
|
+
initial_display_delay_present_for_this_op[i] = av1syntax.f(bitReader, 1)
|
|
244
|
+
if ( initial_display_delay_present_for_this_op[i] ) {
|
|
245
|
+
initial_display_delay_minus_1[i] = av1syntax.f(bitReader, 4)
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
let frame_width_bits_minus_1 = av1syntax.f(bitReader, 4)
|
|
251
|
+
let frame_height_bits_minus_1 = av1syntax.f(bitReader, 4)
|
|
252
|
+
let n = frame_width_bits_minus_1 + 1
|
|
253
|
+
let max_frame_width_minus_1 = av1syntax.f(bitReader, n)
|
|
254
|
+
n = frame_height_bits_minus_1 + 1
|
|
255
|
+
let max_frame_height_minus_1 = av1syntax.f(bitReader, n)
|
|
256
|
+
let frame_id_numbers_present_flag = 0
|
|
257
|
+
let delta_frame_id_length_minus_2 = 0
|
|
258
|
+
let additional_frame_id_length_minus_1 = 0
|
|
259
|
+
if (reduced_still_picture_header ) {
|
|
260
|
+
frame_id_numbers_present_flag = 0
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
frame_id_numbers_present_flag = av1syntax.f(bitReader, 1)
|
|
264
|
+
}
|
|
265
|
+
if ( frame_id_numbers_present_flag ) {
|
|
266
|
+
delta_frame_id_length_minus_2 = av1syntax.f(bitReader, 4)
|
|
267
|
+
additional_frame_id_length_minus_1 = av1syntax.f(bitReader, 3)
|
|
268
|
+
}
|
|
269
|
+
let use_128x128_superblock = av1syntax.f(bitReader, 1)
|
|
270
|
+
let enable_filter_intra = av1syntax.f(bitReader, 1)
|
|
271
|
+
let enable_intra_edge_filter = av1syntax.f(bitReader, 1)
|
|
272
|
+
let enable_interintra_compound = 0
|
|
273
|
+
let enable_masked_compound = 0
|
|
274
|
+
let enable_warped_motion = 0
|
|
275
|
+
let enable_dual_filter = 0
|
|
276
|
+
let enable_order_hint = 0
|
|
277
|
+
let enable_jnt_comp = 0
|
|
278
|
+
let enable_ref_frame_mvs = 0
|
|
279
|
+
let seq_force_screen_content_tools = 2
|
|
280
|
+
let seq_force_integer_mv = 2
|
|
281
|
+
let OrderHintBits = 0
|
|
282
|
+
if (!reduced_still_picture_header) {
|
|
283
|
+
let enable_interintra_compound = av1syntax.f(bitReader, 1)
|
|
284
|
+
enable_masked_compound = av1syntax.f(bitReader, 1)
|
|
285
|
+
enable_warped_motion = av1syntax.f(bitReader, 1)
|
|
286
|
+
enable_dual_filter = av1syntax.f(bitReader, 1)
|
|
287
|
+
enable_order_hint = av1syntax.f(bitReader, 1)
|
|
288
|
+
if (enable_order_hint) {
|
|
289
|
+
enable_jnt_comp = av1syntax.f(bitReader, 1)
|
|
290
|
+
enable_ref_frame_mvs = av1syntax.f(bitReader, 1)
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
enable_jnt_comp = 0
|
|
294
|
+
enable_ref_frame_mvs = 0
|
|
295
|
+
}
|
|
296
|
+
let seq_choose_screen_content_tools = av1syntax.f(bitReader, 1)
|
|
297
|
+
if (seq_choose_screen_content_tools) {
|
|
298
|
+
seq_force_screen_content_tools = 2
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
seq_force_screen_content_tools = av1syntax.f(bitReader, 1)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
if (seq_force_screen_content_tools > 0) {
|
|
305
|
+
let seq_choose_integer_mv = av1syntax.f(bitReader, 1)
|
|
306
|
+
if (seq_choose_integer_mv) {
|
|
307
|
+
seq_force_integer_mv = 2
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
seq_force_integer_mv = av1syntax.f(bitReader, 1)
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
seq_force_integer_mv = 2
|
|
315
|
+
}
|
|
316
|
+
if (enable_order_hint) {
|
|
317
|
+
const order_hint_bits_minus_1 = av1syntax.f(bitReader, 3)
|
|
318
|
+
OrderHintBits = order_hint_bits_minus_1 + 1
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
OrderHintBits = 0
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
let enable_superres = av1syntax.f(bitReader, 1)
|
|
325
|
+
let enable_cdef = av1syntax.f(bitReader, 1)
|
|
326
|
+
let enable_restoration = av1syntax.f(bitReader, 1)
|
|
327
|
+
|
|
328
|
+
let high_bitdepth = av1syntax.f(bitReader, 1)
|
|
329
|
+
let twelve_bit = 0
|
|
330
|
+
let bit_depth = 0
|
|
331
|
+
let mono_chrome = 0
|
|
332
|
+
if (seq_profile == 2 && high_bitdepth ) {
|
|
333
|
+
twelve_bit = av1syntax.f(bitReader, 1)
|
|
334
|
+
bit_depth = twelve_bit ? 12 : 10
|
|
335
|
+
}
|
|
336
|
+
else if (seq_profile <= 2) {
|
|
337
|
+
bit_depth = high_bitdepth ? 10 : 8
|
|
338
|
+
}
|
|
339
|
+
if ( seq_profile == 1 ) {
|
|
340
|
+
mono_chrome = 0
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
mono_chrome = av1syntax.f(bitReader, 1)
|
|
344
|
+
}
|
|
345
|
+
const color_description_present_flag = av1syntax.f(bitReader, 1)
|
|
346
|
+
let color_primaries = 0
|
|
347
|
+
let transfer_characteristics = 0
|
|
348
|
+
let matrix_coefficients = 0
|
|
349
|
+
if (color_description_present_flag ) {
|
|
350
|
+
color_primaries = av1syntax.f(bitReader, 8)
|
|
351
|
+
transfer_characteristics = av1syntax.f(bitReader, 8)
|
|
352
|
+
matrix_coefficients = av1syntax.f(bitReader, 8)
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
color_primaries = 2
|
|
356
|
+
transfer_characteristics = 2
|
|
357
|
+
matrix_coefficients = 2
|
|
358
|
+
}
|
|
359
|
+
let color_range = 0
|
|
360
|
+
let subsampling_x = 0
|
|
361
|
+
let subsampling_y = 0
|
|
362
|
+
let chroma_sample_position = 0
|
|
363
|
+
let separate_uv_delta_q = 0
|
|
364
|
+
if (mono_chrome) {
|
|
365
|
+
color_range = av1syntax.f(bitReader, 1)
|
|
366
|
+
subsampling_x = 1
|
|
367
|
+
subsampling_y = 1
|
|
368
|
+
chroma_sample_position = 0
|
|
369
|
+
separate_uv_delta_q = 0
|
|
370
|
+
}
|
|
371
|
+
else if (color_primaries == 1
|
|
372
|
+
&& transfer_characteristics == 13
|
|
373
|
+
&& matrix_coefficients == 0
|
|
374
|
+
) {
|
|
375
|
+
color_range = 1
|
|
376
|
+
subsampling_x = 0
|
|
377
|
+
subsampling_y = 0
|
|
378
|
+
separate_uv_delta_q = av1syntax.f(bitReader, 1)
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
color_range = av1syntax.f(bitReader, 1)
|
|
382
|
+
if (seq_profile == 0) {
|
|
383
|
+
subsampling_x = 1
|
|
384
|
+
subsampling_y = 1
|
|
385
|
+
}
|
|
386
|
+
else if ( seq_profile == 1 ) {
|
|
387
|
+
subsampling_x = 0
|
|
388
|
+
subsampling_y = 0
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
if (bit_depth == 12) {
|
|
392
|
+
subsampling_x = av1syntax.f(bitReader, 1)
|
|
393
|
+
if (subsampling_x) {
|
|
394
|
+
subsampling_y = av1syntax.f(bitReader, 1)
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
subsampling_y = 0
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
subsampling_x = 1
|
|
402
|
+
subsampling_y = 0
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (subsampling_x && subsampling_y) {
|
|
406
|
+
chroma_sample_position = av1syntax.f(bitReader, 2)
|
|
407
|
+
}
|
|
408
|
+
separate_uv_delta_q = av1syntax.f(bitReader, 1)
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
let film_grain_params_present = av1syntax.f(bitReader, 1)
|
|
412
|
+
|
|
413
|
+
return {
|
|
414
|
+
width: max_frame_width_minus_1 + 1,
|
|
415
|
+
height: max_frame_height_minus_1 + 1,
|
|
416
|
+
profile: seq_profile,
|
|
417
|
+
level: AV1LevelIdx[seq_level_idx[0]],
|
|
418
|
+
tier: seq_tier[0],
|
|
419
|
+
bitDepth: bit_depth,
|
|
420
|
+
monoChrome: mono_chrome,
|
|
421
|
+
colorRange: color_range,
|
|
422
|
+
colorPrimaries: color_primaries,
|
|
423
|
+
transferCharacteristics: transfer_characteristics,
|
|
424
|
+
matrixCoefficients: matrix_coefficients,
|
|
425
|
+
subsamplingX: subsampling_x,
|
|
426
|
+
subsamplingY: subsampling_y,
|
|
427
|
+
chromaSamplePosition: chroma_sample_position
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
export function splitOBU(buffer: Uint8ArrayInterface) {
|
|
432
|
+
const bitReader = new BitReader()
|
|
433
|
+
|
|
434
|
+
bitReader.appendBuffer(buffer)
|
|
435
|
+
|
|
436
|
+
const list: Uint8ArrayInterface[] = []
|
|
437
|
+
|
|
438
|
+
while (bitReader.remainingLength()) {
|
|
439
|
+
const now = bitReader.getPointer()
|
|
440
|
+
// obu_forbidden_bit
|
|
441
|
+
bitReader.readU1()
|
|
442
|
+
const type = bitReader.readU(4)
|
|
443
|
+
const extensionFlag = bitReader.readU1()
|
|
444
|
+
const hasSizeFlag = bitReader.readU1()
|
|
445
|
+
// obu_reserved_1bit
|
|
446
|
+
bitReader.readU1()
|
|
447
|
+
|
|
448
|
+
if (extensionFlag) {
|
|
449
|
+
bitReader.readU(8)
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const size = hasSizeFlag ? av1syntax.leb128(bitReader) : buffer.length - 1 - extensionFlag
|
|
453
|
+
|
|
454
|
+
const headerSize = bitReader.getPointer() - now
|
|
455
|
+
|
|
456
|
+
list.push(buffer.subarray(now, now + headerSize + size))
|
|
457
|
+
|
|
458
|
+
bitReader.skip(size * 8)
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
return list
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
export function generateExtradata(codecpar: pointer<AVCodecParameters>, buffer: Uint8ArrayInterface) {
|
|
465
|
+
const bitWriter = new BitWriter(4)
|
|
466
|
+
// marker
|
|
467
|
+
bitWriter.writeU1(1)
|
|
468
|
+
// version
|
|
469
|
+
bitWriter.writeU(7, 1)
|
|
470
|
+
|
|
471
|
+
const header = splitOBU(buffer).find((buffer) => {
|
|
472
|
+
return ((buffer[0] >>> 3) & 0x0f) === OBUType.SEQUENCE_HEADER
|
|
473
|
+
})
|
|
474
|
+
|
|
475
|
+
if (header) {
|
|
476
|
+
const params = parseSequenceHeader(header)
|
|
477
|
+
bitWriter.writeU(3, params.profile)
|
|
478
|
+
bitWriter.writeU(5, params.level)
|
|
479
|
+
bitWriter.writeU(1, params.tier)
|
|
480
|
+
bitWriter.writeU(1, params.bitDepth > 8 ? 1 : 0)
|
|
481
|
+
bitWriter.writeU(1, params.bitDepth === 12 ? 1 : 0)
|
|
482
|
+
bitWriter.writeU(1, params.monoChrome)
|
|
483
|
+
bitWriter.writeU(1, params.subsamplingX)
|
|
484
|
+
bitWriter.writeU(1, params.subsamplingY)
|
|
485
|
+
bitWriter.writeU(1, params.chromaSamplePosition)
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
const desc = getAVPixelFormatDescriptor(codecpar.format as AVPixelFormat)
|
|
489
|
+
bitWriter.writeU(3, codecpar.profile)
|
|
490
|
+
bitWriter.writeU(5, codecpar.level)
|
|
491
|
+
bitWriter.writeU(1, 0)
|
|
492
|
+
bitWriter.writeU(1, desc.comp[0].depth > 8 ? 1 : 0)
|
|
493
|
+
bitWriter.writeU(1, desc.comp[0].depth === 12 ? 1 : 0)
|
|
494
|
+
bitWriter.writeU(1, 0)
|
|
495
|
+
bitWriter.writeU(1, 1)
|
|
496
|
+
bitWriter.writeU(1, 1)
|
|
497
|
+
bitWriter.writeU(1, 0)
|
|
498
|
+
}
|
|
499
|
+
// padding
|
|
500
|
+
bitWriter.writeU(8, 0)
|
|
501
|
+
bitWriter.padding()
|
|
502
|
+
return bitWriter.getBuffer()
|
|
503
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia dts util
|
|
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 { align } from '@libmedia/common/math'
|
|
27
|
+
|
|
28
|
+
import {
|
|
29
|
+
BitReader,
|
|
30
|
+
type Uint8ArrayInterface
|
|
31
|
+
} from '@libmedia/common/io'
|
|
32
|
+
|
|
33
|
+
const DTSChannelTab = [1, 2, 2, 2, 2, 3, 3, 4, 4, 5, 6, 6, 6, 7, 8, 8]
|
|
34
|
+
|
|
35
|
+
const DTSSampleRateTab = [0, 8000, 16000, 32000, 0, 0, 11025, 22050, 44100, 0, 0, 12000, 24000, 48000, 96000, 192000]
|
|
36
|
+
|
|
37
|
+
const DTSBitrateTab = [32000, 56000, 64000, 96000, 112000, 128000, 192000, 224000, 256000, 320000, 384000, 448000,
|
|
38
|
+
512000, 576000, 640000, 768000, 960000, 1024000, 1152000, 1280000, 1344000, 1408000, 1411200, 1472000, 1536000,
|
|
39
|
+
1920000, 2048000, 3072000, 3840000, 0, 0, 0
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
export const DTS_PCMBLOCK_SAMPLES = 32
|
|
43
|
+
|
|
44
|
+
export interface DTSHeaderInfo {
|
|
45
|
+
syncWord: uint32
|
|
46
|
+
frameType: int32
|
|
47
|
+
deficitSamples: int32
|
|
48
|
+
crcFlag: int32
|
|
49
|
+
sampleBlock: int32
|
|
50
|
+
frameSize: int32
|
|
51
|
+
channelIndex: int32
|
|
52
|
+
sampleRateIndex: int32
|
|
53
|
+
bitrateIndex: int32
|
|
54
|
+
|
|
55
|
+
channels: int32
|
|
56
|
+
sampleRate: int32
|
|
57
|
+
bitrate: int32
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function parseHeader(buf: Uint8ArrayInterface) {
|
|
61
|
+
const bitReader = new BitReader(buf.length)
|
|
62
|
+
bitReader.appendBuffer(buf)
|
|
63
|
+
|
|
64
|
+
const info: DTSHeaderInfo = {
|
|
65
|
+
syncWord: 0,
|
|
66
|
+
frameType: 0,
|
|
67
|
+
deficitSamples: 0,
|
|
68
|
+
crcFlag: 0,
|
|
69
|
+
sampleBlock: 0,
|
|
70
|
+
frameSize: 0,
|
|
71
|
+
channelIndex: 0,
|
|
72
|
+
sampleRateIndex: 0,
|
|
73
|
+
bitrateIndex: 0,
|
|
74
|
+
|
|
75
|
+
channels: 0,
|
|
76
|
+
sampleRate: 0,
|
|
77
|
+
bitrate: 0
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
info.syncWord = bitReader.readU(32)
|
|
81
|
+
|
|
82
|
+
if (info.syncWord !== 0x7ffe8001 && info.syncWord !== 0xfe7f0180) {
|
|
83
|
+
return -1
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
info.frameType = bitReader.readU1()
|
|
87
|
+
info.deficitSamples = bitReader.readU(5) + 1
|
|
88
|
+
info.crcFlag = bitReader.readU1()
|
|
89
|
+
info.sampleBlock = bitReader.readU(7) + 1
|
|
90
|
+
info.frameSize = align(bitReader.readU(14) + 1, 4)
|
|
91
|
+
info.channelIndex = bitReader.readU(6)
|
|
92
|
+
info.sampleRateIndex = bitReader.readU(4)
|
|
93
|
+
info.bitrateIndex = bitReader.readU(5)
|
|
94
|
+
|
|
95
|
+
info.channels = DTSChannelTab[info.channelIndex]
|
|
96
|
+
info.sampleRate = DTSSampleRateTab[info.sampleRateIndex]
|
|
97
|
+
info.bitrate = DTSBitrateTab[info.bitrateIndex]
|
|
98
|
+
|
|
99
|
+
return info
|
|
100
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* libmedia flac util
|
|
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 { AVPacketSideDataType } from '../codec'
|
|
27
|
+
import type AVCodecParameters from '../struct/avcodecparameters'
|
|
28
|
+
|
|
29
|
+
import {
|
|
30
|
+
BufferReader,
|
|
31
|
+
type Uint8ArrayInterface
|
|
32
|
+
} from '@libmedia/common/io'
|
|
33
|
+
|
|
34
|
+
export const enum MetaDataBlockType {
|
|
35
|
+
STREAMINFO,
|
|
36
|
+
PADDING,
|
|
37
|
+
APPLICATION,
|
|
38
|
+
SEEKTABLE,
|
|
39
|
+
VORBIS_COMMENT,
|
|
40
|
+
CUESHEET,
|
|
41
|
+
PICTURE
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const enum FlacCHMode {
|
|
45
|
+
INDEPENDENT = 0,
|
|
46
|
+
LEFT_SIDE = 1,
|
|
47
|
+
RIGHT_SIDE = 2,
|
|
48
|
+
MID_SIDE = 3
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const FLAC_STREAMINFO_SIZE = 34
|
|
52
|
+
export const FLAC_MAX_CHANNELS = 8
|
|
53
|
+
export const FLAC_MIN_BLOCKSIZE = 16
|
|
54
|
+
export const FLAC_MAX_BLOCKSIZE = 65535
|
|
55
|
+
export const FLAC_MIN_FRAME_SIZE = 10
|
|
56
|
+
|
|
57
|
+
export const SampleSizeTable: number[] = [0, 8, 12, 0, 16, 20, 24, 32]
|
|
58
|
+
|
|
59
|
+
export const SampleRateTable: number[] = [
|
|
60
|
+
0, 88200, 176400, 192000, 8000, 16000, 22050,
|
|
61
|
+
24000, 32000, 44100, 48000, 96000,
|
|
62
|
+
0, 0, 0, 0
|
|
63
|
+
]
|
|
64
|
+
|
|
65
|
+
export const BlockSizeTable: number[] = [
|
|
66
|
+
0, 192, 576 << 0, 576 << 1, 576 << 2, 576 << 3, 0, 0,
|
|
67
|
+
256 << 0, 256 << 1, 256 << 2, 256 << 3, 256 << 4, 256 << 5, 256 << 6, 256 << 7
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
export const enum FlacChmode {
|
|
71
|
+
FLAC_CHMODE_INDEPENDENT = 0,
|
|
72
|
+
FLAC_CHMODE_LEFT_SIDE = 1,
|
|
73
|
+
FLAC_CHMODE_RIGHT_SIDE = 2,
|
|
74
|
+
FLAC_CHMODE_MID_SIDE = 3,
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const enum FlacMetadataType {
|
|
78
|
+
FLAC_METADATA_TYPE_STREAMINFO = 0,
|
|
79
|
+
FLAC_METADATA_TYPE_PADDING,
|
|
80
|
+
FLAC_METADATA_TYPE_APPLICATION,
|
|
81
|
+
FLAC_METADATA_TYPE_SEEKTABLE,
|
|
82
|
+
FLAC_METADATA_TYPE_VORBIS_COMMENT,
|
|
83
|
+
FLAC_METADATA_TYPE_CUESHEET,
|
|
84
|
+
FLAC_METADATA_TYPE_PICTURE,
|
|
85
|
+
FLAC_METADATA_TYPE_INVALID = 127
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function parseAVCodecParameters(
|
|
89
|
+
stream: {
|
|
90
|
+
codecpar: AVCodecParameters,
|
|
91
|
+
sideData: Partial<Record<AVPacketSideDataType, Uint8Array>>,
|
|
92
|
+
},
|
|
93
|
+
extradata?: Uint8ArrayInterface
|
|
94
|
+
) {
|
|
95
|
+
if (!extradata && stream.sideData[AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA]) {
|
|
96
|
+
extradata = stream.sideData[AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA]
|
|
97
|
+
}
|
|
98
|
+
if (extradata && extradata.length === FLAC_STREAMINFO_SIZE) {
|
|
99
|
+
const { bitsPerRawSample, sampleRate, channels } = getAVCodecParameters(extradata)
|
|
100
|
+
stream.codecpar.bitsPerRawSample = bitsPerRawSample
|
|
101
|
+
stream.codecpar.sampleRate = sampleRate
|
|
102
|
+
stream.codecpar.chLayout.nbChannels = channels
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function getAVCodecParameters(extradata: Uint8ArrayInterface) {
|
|
107
|
+
const bufferReader = new BufferReader(extradata)
|
|
108
|
+
bufferReader.skip(10)
|
|
109
|
+
const value = bufferReader.readUint24()
|
|
110
|
+
const sampleRate = (value >> 4)
|
|
111
|
+
const channels = ((value & 0x0f) >>> 1) + 1
|
|
112
|
+
const bitPerSample = bufferReader.readUint8()
|
|
113
|
+
return {
|
|
114
|
+
sampleRate,
|
|
115
|
+
channels,
|
|
116
|
+
bitsPerRawSample: (((value & 0x01) << 4) | ((bitPerSample & 0xf0) >>> 4)) + 1
|
|
117
|
+
}
|
|
118
|
+
}
|