@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.
Files changed (572) hide show
  1. package/dist/cjs/{AVStream.js → AVStream.cjs} +5 -5
  2. package/dist/cjs/AVStream.js.map +1 -1
  3. package/dist/cjs/audiosamplefmt.js.map +1 -1
  4. package/dist/cjs/avformat.js.map +1 -1
  5. package/dist/cjs/codec.js.map +1 -1
  6. package/dist/cjs/codecs/{aac.js → aac.cjs} +2 -8
  7. package/dist/cjs/codecs/aac.js.map +1 -1
  8. package/dist/cjs/codecs/{ac3.js → ac3.cjs} +2 -8
  9. package/dist/cjs/codecs/ac3.js.map +1 -1
  10. package/dist/cjs/codecs/{av1.js → av1.cjs} +6 -10
  11. package/dist/cjs/codecs/av1.js.map +1 -1
  12. package/dist/cjs/codecs/{dts.js → dts.cjs} +3 -9
  13. package/dist/cjs/codecs/dts.js.map +1 -1
  14. package/dist/cjs/codecs/{flac.js → flac.cjs} +2 -8
  15. package/dist/cjs/codecs/flac.js.map +1 -1
  16. package/dist/cjs/codecs/{h264.js → h264.cjs} +20 -23
  17. package/dist/cjs/codecs/h264.js.map +1 -1
  18. package/dist/cjs/codecs/{hevc.js → hevc.cjs} +23 -23
  19. package/dist/cjs/codecs/hevc.js.map +1 -1
  20. package/dist/cjs/codecs/{mp3.js → mp3.cjs} +1 -1
  21. package/dist/cjs/codecs/mp3.js.map +1 -1
  22. package/dist/cjs/codecs/{mpeg4.js → mpeg4.cjs} +1 -1
  23. package/dist/cjs/codecs/mpeg4.js.map +1 -1
  24. package/dist/cjs/codecs/{mpegvideo.js → mpegvideo.cjs} +1 -1
  25. package/dist/cjs/codecs/mpegvideo.js.map +1 -1
  26. package/dist/cjs/codecs/{opus.js → opus.cjs} +3 -9
  27. package/dist/cjs/codecs/opus.js.map +1 -1
  28. package/dist/cjs/codecs/ttml.cjs +51 -0
  29. package/dist/cjs/codecs/ttml.js.map +1 -1
  30. package/dist/cjs/codecs/{vp8.js → vp8.cjs} +2 -8
  31. package/dist/cjs/codecs/vp8.js.map +1 -1
  32. package/dist/cjs/codecs/{vp9.js → vp9.cjs} +4 -10
  33. package/dist/cjs/codecs/vp9.js.map +1 -1
  34. package/dist/cjs/codecs/{vvc.js → vvc.cjs} +25 -25
  35. package/dist/cjs/codecs/vvc.js.map +1 -1
  36. package/dist/cjs/{constant.js → constant.cjs} +6 -7
  37. package/dist/cjs/constant.js.map +1 -1
  38. package/dist/cjs/{enum.js → enum.cjs} +3 -1
  39. package/dist/cjs/enum.js.map +1 -1
  40. package/dist/cjs/error.js.map +1 -1
  41. package/dist/cjs/function/analyzeAVFormat.js.map +1 -1
  42. package/dist/cjs/function/analyzeUrlIOLoader.cjs +66 -0
  43. package/dist/cjs/function/analyzeUrlIOLoader.js.map +1 -1
  44. package/dist/cjs/function/{audioData2AVFrame.js → audioData2AVFrame.cjs} +9 -9
  45. package/dist/cjs/function/audioData2AVFrame.js.map +1 -1
  46. package/dist/cjs/function/{avPCMBuffer2AVFrame.js → avPCMBuffer2AVFrame.cjs} +20 -20
  47. package/dist/cjs/function/avPCMBuffer2AVFrame.js.map +1 -1
  48. package/dist/cjs/function/{avframe2AudioData.js → avframe2AudioData.cjs} +7 -7
  49. package/dist/cjs/function/avframe2AudioData.js.map +1 -1
  50. package/dist/cjs/function/avframe2VideoFrame.cjs +48 -0
  51. package/dist/cjs/function/avframe2VideoFrame.js.map +1 -1
  52. package/dist/cjs/function/{avpacket2EncodedAudioChunk.js → avpacket2EncodedAudioChunk.cjs} +3 -3
  53. package/dist/cjs/function/avpacket2EncodedAudioChunk.js.map +1 -1
  54. package/dist/cjs/function/{avpacket2EncodedVideoChunk.js → avpacket2EncodedVideoChunk.cjs} +3 -3
  55. package/dist/cjs/function/avpacket2EncodedVideoChunk.js.map +1 -1
  56. package/dist/cjs/function/compileResource.cjs +19 -0
  57. package/dist/cjs/function/compileResource.js.map +1 -1
  58. package/dist/cjs/function/constant/webcodecs.cjs +50 -0
  59. package/dist/cjs/function/constant/webcodecs.js.map +1 -0
  60. package/dist/cjs/function/encodedAudioChunk2AVPacket.cjs +23 -0
  61. package/dist/cjs/function/encodedAudioChunk2AVPacket.js.map +1 -1
  62. package/dist/cjs/function/{encodedVideoChunk2AVPacket.js → encodedVideoChunk2AVPacket.cjs} +8 -8
  63. package/dist/cjs/function/encodedVideoChunk2AVPacket.js.map +1 -1
  64. package/dist/cjs/function/{getAudioCodec.js → getAudioCodec.cjs} +1 -1
  65. package/dist/cjs/function/getAudioCodec.js.map +1 -1
  66. package/dist/cjs/function/getAudioMimeType.cjs +19 -0
  67. package/dist/cjs/function/getAudioMimeType.js.map +1 -0
  68. package/dist/cjs/function/getHardwarePreference.cjs +10 -0
  69. package/dist/cjs/function/getHardwarePreference.js.map +1 -1
  70. package/dist/cjs/function/{getVideoCodec.js → getVideoCodec.cjs} +12 -12
  71. package/dist/cjs/function/getVideoCodec.js.map +1 -1
  72. package/dist/cjs/function/getVideoMimeType.cjs +18 -0
  73. package/dist/cjs/function/getVideoMimeType.js.map +1 -0
  74. package/dist/cjs/function/{getWasmUrl.js → getWasmUrl.cjs} +2 -3
  75. package/dist/cjs/function/getWasmUrl.js.map +1 -1
  76. package/dist/cjs/function/{hasAlphaChannel.js → hasAlphaChannel.cjs} +1 -1
  77. package/dist/cjs/function/hasAlphaChannel.js.map +1 -1
  78. package/dist/cjs/function/{isHdr.js → isHdr.cjs} +1 -1
  79. package/dist/cjs/function/isHdr.js.map +1 -1
  80. package/dist/cjs/function/videoFrame2AVFrame.cjs +51 -0
  81. package/dist/cjs/function/videoFrame2AVFrame.js.map +1 -1
  82. package/dist/cjs/implement/AVFramePoolImpl.cjs +28 -0
  83. package/dist/cjs/implement/AVFramePoolImpl.js.map +1 -1
  84. package/dist/cjs/implement/AVPCMBufferPoolImpl.cjs +27 -0
  85. package/dist/cjs/implement/AVPCMBufferPoolImpl.js.map +1 -1
  86. package/dist/cjs/implement/AVPacketPoolImpl.cjs +29 -0
  87. package/dist/cjs/implement/AVPacketPoolImpl.js.map +1 -1
  88. package/dist/cjs/index.cjs +840 -0
  89. package/dist/cjs/index.js.map +1 -0
  90. package/dist/cjs/internal.cjs +283 -0
  91. package/dist/cjs/internal.js.map +1 -0
  92. package/dist/cjs/{pixelFormatDescriptor.js → pixelFormatDescriptor.cjs} +2 -0
  93. package/dist/cjs/pixelFormatDescriptor.js.map +1 -1
  94. package/dist/cjs/pixfmt.js.map +1 -1
  95. package/dist/cjs/sampleFormatDescriptor.js.map +1 -1
  96. package/dist/cjs/{stringEnum.js → stringEnum.cjs} +4 -1
  97. package/dist/cjs/stringEnum.js.map +1 -1
  98. package/dist/cjs/struct/{audiosample.js → audiosample.cjs} +13 -13
  99. package/dist/cjs/struct/audiosample.js.map +1 -1
  100. package/dist/cjs/struct/{avbuffer.js → avbuffer.cjs} +18 -18
  101. package/dist/cjs/struct/avbuffer.js.map +1 -1
  102. package/dist/cjs/struct/{avcodecparameters.js → avcodecparameters.cjs} +11 -11
  103. package/dist/cjs/struct/avcodecparameters.js.map +1 -1
  104. package/dist/cjs/struct/{avdict.js → avdict.cjs} +9 -9
  105. package/dist/cjs/struct/avdict.js.map +1 -1
  106. package/dist/cjs/struct/{avframe.js → avframe.cjs} +30 -30
  107. package/dist/cjs/struct/avframe.js.map +1 -1
  108. package/dist/cjs/struct/{avpacket.js → avpacket.cjs} +19 -19
  109. package/dist/cjs/struct/avpacket.js.map +1 -1
  110. package/dist/cjs/struct/{avpcmbuffer.js → avpcmbuffer.cjs} +9 -9
  111. package/dist/cjs/struct/avpcmbuffer.js.map +1 -1
  112. package/dist/cjs/struct/avsubtitle.js.map +1 -1
  113. package/dist/cjs/struct/{encryption.js → encryption.cjs} +13 -13
  114. package/dist/cjs/struct/encryption.js.map +1 -1
  115. package/dist/cjs/struct/rational.cjs +43 -0
  116. package/dist/cjs/struct/rational.js.map +1 -1
  117. package/dist/cjs/util/{amf.js → amf.cjs} +7 -38
  118. package/dist/cjs/util/amf.js.map +1 -1
  119. package/dist/cjs/util/av1syntax.js.map +1 -1
  120. package/dist/cjs/util/avbuffer.cjs +122 -0
  121. package/dist/cjs/util/avbuffer.js.map +1 -1
  122. package/dist/cjs/util/avdict.cjs +75 -0
  123. package/dist/cjs/util/avdict.js.map +1 -1
  124. package/dist/cjs/util/{avframe.js → avframe.cjs} +82 -87
  125. package/dist/cjs/util/avframe.js.map +1 -1
  126. package/dist/cjs/util/{avpacket.js → avpacket.cjs} +58 -58
  127. package/dist/cjs/util/avpacket.js.map +1 -1
  128. package/dist/cjs/util/{channel.js → channel.cjs} +7 -7
  129. package/dist/cjs/util/channel.js.map +1 -1
  130. package/dist/cjs/util/codecparameters.cjs +95 -0
  131. package/dist/cjs/util/codecparameters.js.map +1 -1
  132. package/dist/cjs/util/common.js.map +1 -1
  133. package/dist/cjs/util/{encryption.js → encryption.cjs} +5 -11
  134. package/dist/cjs/util/encryption.js.map +1 -1
  135. package/dist/cjs/util/expgolomb.js.map +1 -1
  136. package/dist/cjs/util/{intread.js → intread.cjs} +1 -1
  137. package/dist/cjs/util/intread.js.map +1 -1
  138. package/dist/cjs/util/{intwrite.js → intwrite.cjs} +1 -1
  139. package/dist/cjs/util/intwrite.js.map +1 -1
  140. package/dist/cjs/util/mem.cjs +23 -0
  141. package/dist/cjs/util/mem.js.map +1 -1
  142. package/dist/cjs/util/{nalu.js → nalu.cjs} +7 -42
  143. package/dist/cjs/util/nalu.js.map +1 -1
  144. package/dist/cjs/util/ntp.js.map +1 -1
  145. package/dist/cjs/util/pcm.js.map +1 -1
  146. package/dist/cjs/util/{pixel.js → pixel.cjs} +26 -30
  147. package/dist/cjs/util/pixel.js.map +1 -1
  148. package/dist/cjs/util/{rational.js → rational.cjs} +5 -11
  149. package/dist/cjs/util/rational.js.map +1 -1
  150. package/dist/cjs/util/{sample.js → sample.cjs} +6 -12
  151. package/dist/cjs/util/sample.js.map +1 -1
  152. package/dist/cjs/util/{serialize.js → serialize.cjs} +40 -42
  153. package/dist/cjs/util/serialize.js.map +1 -1
  154. package/dist/esm/AVStream.d.ts +7 -7
  155. package/dist/esm/AVStream.js +10 -12
  156. package/dist/esm/AVStream.js.map +1 -1
  157. package/dist/esm/audiosamplefmt.js.map +1 -1
  158. package/dist/esm/avformat.js.map +1 -1
  159. package/dist/esm/codec.js.map +1 -1
  160. package/dist/esm/codecs/aac.d.ts +10 -5
  161. package/dist/esm/codecs/aac.js +2 -2
  162. package/dist/esm/codecs/aac.js.map +1 -1
  163. package/dist/esm/codecs/ac3.d.ts +1 -1
  164. package/dist/esm/codecs/ac3.js +1 -1
  165. package/dist/esm/codecs/ac3.js.map +1 -1
  166. package/dist/esm/codecs/av1.d.ts +3 -3
  167. package/dist/esm/codecs/av1.js +4 -6
  168. package/dist/esm/codecs/av1.js.map +1 -1
  169. package/dist/esm/codecs/dts.d.ts +1 -1
  170. package/dist/esm/codecs/dts.js +2 -2
  171. package/dist/esm/codecs/dts.js.map +1 -1
  172. package/dist/esm/codecs/flac.d.ts +3 -3
  173. package/dist/esm/codecs/flac.js +1 -1
  174. package/dist/esm/codecs/flac.js.map +1 -1
  175. package/dist/esm/codecs/h264.d.ts +5 -5
  176. package/dist/esm/codecs/h264.js +13 -18
  177. package/dist/esm/codecs/h264.js.map +1 -1
  178. package/dist/esm/codecs/hevc.d.ts +5 -5
  179. package/dist/esm/codecs/hevc.js +16 -15
  180. package/dist/esm/codecs/hevc.js.map +1 -1
  181. package/dist/esm/codecs/mp3.d.ts +4 -4
  182. package/dist/esm/codecs/mp3.js +1 -1
  183. package/dist/esm/codecs/mp3.js.map +1 -1
  184. package/dist/esm/codecs/mpeg4.d.ts +1 -1
  185. package/dist/esm/codecs/mpeg4.js +1 -1
  186. package/dist/esm/codecs/mpeg4.js.map +1 -1
  187. package/dist/esm/codecs/mpegvideo.d.ts +1 -1
  188. package/dist/esm/codecs/mpegvideo.js +1 -1
  189. package/dist/esm/codecs/mpegvideo.js.map +1 -1
  190. package/dist/esm/codecs/opus.d.ts +3 -3
  191. package/dist/esm/codecs/opus.js +2 -4
  192. package/dist/esm/codecs/opus.js.map +1 -1
  193. package/dist/esm/codecs/ttml.js +5 -11
  194. package/dist/esm/codecs/ttml.js.map +1 -1
  195. package/dist/esm/codecs/vp8.d.ts +4 -4
  196. package/dist/esm/codecs/vp8.js +2 -2
  197. package/dist/esm/codecs/vp8.js.map +1 -1
  198. package/dist/esm/codecs/vp9.d.ts +4 -4
  199. package/dist/esm/codecs/vp9.js +8 -10
  200. package/dist/esm/codecs/vp9.js.map +1 -1
  201. package/dist/esm/codecs/vvc.d.ts +5 -5
  202. package/dist/esm/codecs/vvc.js +16 -17
  203. package/dist/esm/codecs/vvc.js.map +1 -1
  204. package/dist/esm/constant.d.ts +5 -7
  205. package/dist/esm/constant.js +5 -9
  206. package/dist/esm/constant.js.map +1 -1
  207. package/dist/esm/enum.d.ts +9 -1
  208. package/dist/esm/enum.js +3 -1
  209. package/dist/esm/enum.js.map +1 -1
  210. package/dist/esm/error.js.map +1 -1
  211. package/dist/esm/function/analyzeAVFormat.d.ts +2 -2
  212. package/dist/esm/function/analyzeAVFormat.js.map +1 -1
  213. package/dist/esm/function/analyzeUrlIOLoader.d.ts +2 -2
  214. package/dist/esm/function/analyzeUrlIOLoader.js +2 -10
  215. package/dist/esm/function/analyzeUrlIOLoader.js.map +1 -1
  216. package/dist/esm/function/audioData2AVFrame.d.ts +1 -1
  217. package/dist/esm/function/audioData2AVFrame.js +6 -6
  218. package/dist/esm/function/audioData2AVFrame.js.map +1 -1
  219. package/dist/esm/function/avPCMBuffer2AVFrame.d.ts +2 -2
  220. package/dist/esm/function/avPCMBuffer2AVFrame.js +9 -9
  221. package/dist/esm/function/avPCMBuffer2AVFrame.js.map +1 -1
  222. package/dist/esm/function/avframe2AudioData.d.ts +1 -1
  223. package/dist/esm/function/avframe2AudioData.js +6 -8
  224. package/dist/esm/function/avframe2AudioData.js.map +1 -1
  225. package/dist/esm/function/avframe2VideoFrame.d.ts +3 -3
  226. package/dist/esm/function/avframe2VideoFrame.js +14 -79
  227. package/dist/esm/function/avframe2VideoFrame.js.map +1 -1
  228. package/dist/esm/function/avpacket2EncodedAudioChunk.d.ts +1 -1
  229. package/dist/esm/function/avpacket2EncodedAudioChunk.js +5 -7
  230. package/dist/esm/function/avpacket2EncodedAudioChunk.js.map +1 -1
  231. package/dist/esm/function/avpacket2EncodedVideoChunk.d.ts +1 -1
  232. package/dist/esm/function/avpacket2EncodedVideoChunk.js +5 -7
  233. package/dist/esm/function/avpacket2EncodedVideoChunk.js.map +1 -1
  234. package/dist/esm/function/compileResource.d.ts +1 -1
  235. package/dist/esm/function/compileResource.js +2 -4
  236. package/dist/esm/function/compileResource.js.map +1 -1
  237. package/dist/esm/function/constant/webcodecs.d.ts +5 -0
  238. package/dist/esm/function/constant/webcodecs.js +51 -0
  239. package/dist/esm/function/constant/webcodecs.js.map +1 -0
  240. package/dist/esm/function/encodedAudioChunk2AVPacket.d.ts +1 -1
  241. package/dist/esm/function/encodedAudioChunk2AVPacket.js +6 -6
  242. package/dist/esm/function/encodedAudioChunk2AVPacket.js.map +1 -1
  243. package/dist/esm/function/encodedVideoChunk2AVPacket.d.ts +1 -1
  244. package/dist/esm/function/encodedVideoChunk2AVPacket.js +7 -7
  245. package/dist/esm/function/encodedVideoChunk2AVPacket.js.map +1 -1
  246. package/dist/esm/function/getAudioCodec.d.ts +1 -1
  247. package/dist/esm/function/getAudioCodec.js +2 -2
  248. package/dist/esm/function/getAudioCodec.js.map +1 -1
  249. package/dist/esm/function/getAudioMimeType.d.ts +2 -0
  250. package/dist/esm/function/getAudioMimeType.js +12 -0
  251. package/dist/esm/function/getAudioMimeType.js.map +1 -0
  252. package/dist/esm/function/getHardwarePreference.js +1 -1
  253. package/dist/esm/function/getHardwarePreference.js.map +1 -1
  254. package/dist/esm/function/getVideoCodec.d.ts +1 -1
  255. package/dist/esm/function/getVideoCodec.js +11 -13
  256. package/dist/esm/function/getVideoCodec.js.map +1 -1
  257. package/dist/esm/function/getVideoMimeType.d.ts +2 -0
  258. package/dist/esm/function/getVideoMimeType.js +8 -0
  259. package/dist/esm/function/getVideoMimeType.js.map +1 -0
  260. package/dist/esm/function/getWasmUrl.d.ts +1 -1
  261. package/dist/esm/function/getWasmUrl.js +2 -2
  262. package/dist/esm/function/getWasmUrl.js.map +1 -1
  263. package/dist/esm/function/hasAlphaChannel.d.ts +1 -1
  264. package/dist/esm/function/hasAlphaChannel.js +2 -2
  265. package/dist/esm/function/hasAlphaChannel.js.map +1 -1
  266. package/dist/esm/function/isHdr.d.ts +1 -1
  267. package/dist/esm/function/isHdr.js +2 -2
  268. package/dist/esm/function/isHdr.js.map +1 -1
  269. package/dist/esm/function/videoFrame2AVFrame.d.ts +6 -6
  270. package/dist/esm/function/videoFrame2AVFrame.js +13 -74
  271. package/dist/esm/function/videoFrame2AVFrame.js.map +1 -1
  272. package/dist/esm/implement/AVFramePoolImpl.d.ts +3 -4
  273. package/dist/esm/implement/AVFramePoolImpl.js +5 -7
  274. package/dist/esm/implement/AVFramePoolImpl.js.map +1 -1
  275. package/dist/esm/implement/AVPCMBufferPoolImpl.d.ts +3 -4
  276. package/dist/esm/implement/AVPCMBufferPoolImpl.js +4 -6
  277. package/dist/esm/implement/AVPCMBufferPoolImpl.js.map +1 -1
  278. package/dist/esm/implement/AVPacketPoolImpl.d.ts +3 -4
  279. package/dist/esm/implement/AVPacketPoolImpl.js +5 -7
  280. package/dist/esm/implement/AVPacketPoolImpl.js.map +1 -1
  281. package/dist/esm/index.d.ts +54 -0
  282. package/dist/esm/index.js +98 -0
  283. package/dist/esm/index.js.map +1 -0
  284. package/dist/esm/internal.d.ts +26 -0
  285. package/dist/esm/internal.js +52 -0
  286. package/dist/esm/internal.js.map +1 -0
  287. package/dist/esm/pixelFormatDescriptor.d.ts +1 -1
  288. package/dist/esm/pixelFormatDescriptor.js +2 -0
  289. package/dist/esm/pixelFormatDescriptor.js.map +1 -1
  290. package/dist/esm/pixfmt.d.ts +9 -1
  291. package/dist/esm/pixfmt.js.map +1 -1
  292. package/dist/esm/sampleFormatDescriptor.d.ts +1 -1
  293. package/dist/esm/sampleFormatDescriptor.js.map +1 -1
  294. package/dist/esm/stringEnum.d.ts +5 -5
  295. package/dist/esm/stringEnum.js +4 -1
  296. package/dist/esm/stringEnum.js.map +1 -1
  297. package/dist/esm/struct/audiosample.d.ts +1 -1
  298. package/dist/esm/struct/audiosample.js +2 -2
  299. package/dist/esm/struct/audiosample.js.map +1 -1
  300. package/dist/esm/struct/avbuffer.d.ts +1 -1
  301. package/dist/esm/struct/avbuffer.js +4 -4
  302. package/dist/esm/struct/avbuffer.js.map +1 -1
  303. package/dist/esm/struct/avcodecparameters.d.ts +9 -9
  304. package/dist/esm/struct/avcodecparameters.js +14 -16
  305. package/dist/esm/struct/avcodecparameters.js.map +1 -1
  306. package/dist/esm/struct/avdict.js +2 -2
  307. package/dist/esm/struct/avdict.js.map +1 -1
  308. package/dist/esm/struct/avframe.d.ts +12 -12
  309. package/dist/esm/struct/avframe.js +18 -22
  310. package/dist/esm/struct/avframe.js.map +1 -1
  311. package/dist/esm/struct/avpacket.d.ts +4 -4
  312. package/dist/esm/struct/avpacket.js +7 -9
  313. package/dist/esm/struct/avpacket.js.map +1 -1
  314. package/dist/esm/struct/avpcmbuffer.d.ts +1 -1
  315. package/dist/esm/struct/avpcmbuffer.js +2 -2
  316. package/dist/esm/struct/avpcmbuffer.js.map +1 -1
  317. package/dist/esm/struct/avsubtitle.d.ts +2 -2
  318. package/dist/esm/struct/avsubtitle.js.map +1 -1
  319. package/dist/esm/struct/encryption.js +2 -2
  320. package/dist/esm/struct/encryption.js.map +1 -1
  321. package/dist/esm/struct/rational.d.ts +1 -1
  322. package/dist/esm/struct/rational.js +4 -4
  323. package/dist/esm/struct/rational.js.map +1 -1
  324. package/dist/esm/util/amf.d.ts +1 -4
  325. package/dist/esm/util/amf.js +1 -5
  326. package/dist/esm/util/amf.js.map +1 -1
  327. package/dist/esm/util/av1syntax.d.ts +1 -1
  328. package/dist/esm/util/av1syntax.js.map +1 -1
  329. package/dist/esm/util/avbuffer.d.ts +2 -2
  330. package/dist/esm/util/avbuffer.js +7 -15
  331. package/dist/esm/util/avbuffer.js.map +1 -1
  332. package/dist/esm/util/avdict.d.ts +2 -2
  333. package/dist/esm/util/avdict.js +12 -16
  334. package/dist/esm/util/avdict.js.map +1 -1
  335. package/dist/esm/util/avframe.d.ts +2 -2
  336. package/dist/esm/util/avframe.js +22 -24
  337. package/dist/esm/util/avframe.js.map +1 -1
  338. package/dist/esm/util/avpacket.d.ts +3 -3
  339. package/dist/esm/util/avpacket.js +11 -13
  340. package/dist/esm/util/avpacket.js.map +1 -1
  341. package/dist/esm/util/channel.d.ts +1 -1
  342. package/dist/esm/util/channel.js +6 -6
  343. package/dist/esm/util/channel.js.map +1 -1
  344. package/dist/esm/util/codecparameters.d.ts +3 -1
  345. package/dist/esm/util/codecparameters.js +16 -12
  346. package/dist/esm/util/codecparameters.js.map +1 -1
  347. package/dist/esm/util/common.js.map +1 -1
  348. package/dist/esm/util/encryption.d.ts +2 -2
  349. package/dist/esm/util/encryption.js +1 -3
  350. package/dist/esm/util/encryption.js.map +1 -1
  351. package/dist/esm/util/expgolomb.d.ts +1 -2
  352. package/dist/esm/util/expgolomb.js.map +1 -1
  353. package/dist/esm/util/intread.js +1 -1
  354. package/dist/esm/util/intread.js.map +1 -1
  355. package/dist/esm/util/intwrite.js +1 -1
  356. package/dist/esm/util/intwrite.js.map +1 -1
  357. package/dist/esm/util/mem.js +7 -7
  358. package/dist/esm/util/mem.js.map +1 -1
  359. package/dist/esm/util/nalu.d.ts +1 -1
  360. package/dist/esm/util/nalu.js +3 -5
  361. package/dist/esm/util/nalu.js.map +1 -1
  362. package/dist/esm/util/ntp.js.map +1 -1
  363. package/dist/esm/util/pcm.d.ts +1 -1
  364. package/dist/esm/util/pcm.js.map +1 -1
  365. package/dist/esm/util/pixel.d.ts +1 -1
  366. package/dist/esm/util/pixel.js +8 -10
  367. package/dist/esm/util/pixel.js.map +1 -1
  368. package/dist/esm/util/rational.d.ts +10 -10
  369. package/dist/esm/util/rational.js +4 -4
  370. package/dist/esm/util/rational.js.map +1 -1
  371. package/dist/esm/util/sample.d.ts +1 -1
  372. package/dist/esm/util/sample.js +7 -7
  373. package/dist/esm/util/sample.js.map +1 -1
  374. package/dist/esm/util/serialize.d.ts +9 -9
  375. package/dist/esm/util/serialize.js +6 -6
  376. package/dist/esm/util/serialize.js.map +1 -1
  377. package/package.json +23 -390
  378. package/src/AVStream.ts +677 -0
  379. package/src/audiosamplefmt.ts +302 -0
  380. package/src/avformat.ts +96 -0
  381. package/src/codec.ts +1016 -0
  382. package/src/codecs/aac.ts +429 -0
  383. package/src/codecs/ac3.ts +309 -0
  384. package/src/codecs/av1.ts +503 -0
  385. package/src/codecs/dts.ts +100 -0
  386. package/src/codecs/flac.ts +118 -0
  387. package/src/codecs/h264.ts +1013 -0
  388. package/src/codecs/hevc.ts +1049 -0
  389. package/src/codecs/mp3.ts +172 -0
  390. package/src/codecs/mpeg4.ts +37 -0
  391. package/src/codecs/mpegvideo.ts +49 -0
  392. package/src/codecs/opus.ts +148 -0
  393. package/src/codecs/ttml.ts +158 -0
  394. package/src/codecs/vp8.ts +91 -0
  395. package/src/codecs/vp9.ts +213 -0
  396. package/src/codecs/vvc.ts +1086 -0
  397. package/src/constant.ts +72 -0
  398. package/src/enum.ts +47 -0
  399. package/src/error.ts +45 -0
  400. package/src/function/analyzeAVFormat.ts +94 -0
  401. package/src/function/analyzeUrlIOLoader.ts +166 -0
  402. package/src/function/audioData2AVFrame.ts +82 -0
  403. package/src/function/avPCMBuffer2AVFrame.ts +111 -0
  404. package/src/function/avframe2AudioData.ts +131 -0
  405. package/src/function/avframe2VideoFrame.ts +88 -0
  406. package/src/function/avpacket2EncodedAudioChunk.ts +39 -0
  407. package/src/function/avpacket2EncodedVideoChunk.ts +39 -0
  408. package/src/function/compileResource.ts +57 -0
  409. package/src/function/constant/webcodecs.ts +81 -0
  410. package/src/function/encodedAudioChunk2AVPacket.ts +62 -0
  411. package/src/function/encodedVideoChunk2AVPacket.ts +86 -0
  412. package/src/function/getAudioCodec.ts +45 -0
  413. package/src/function/getAudioMimeType.ts +44 -0
  414. package/src/function/getHardwarePreference.ts +45 -0
  415. package/src/function/getVideoCodec.ts +244 -0
  416. package/src/function/getVideoMimeType.ts +35 -0
  417. package/src/function/getWasmUrl.ts +190 -0
  418. package/src/function/hasAlphaChannel.ts +37 -0
  419. package/src/function/isHdr.ts +44 -0
  420. package/src/function/videoFrame2AVFrame.ts +95 -0
  421. package/src/implement/AVFramePoolImpl.ts +83 -0
  422. package/src/implement/AVPCMBufferPoolImpl.ts +79 -0
  423. package/src/implement/AVPacketPoolImpl.ts +82 -0
  424. package/src/index.ts +264 -0
  425. package/src/internal.ts +71 -0
  426. package/src/pixelFormatDescriptor.ts +819 -0
  427. package/src/pixfmt.ts +1400 -0
  428. package/src/sampleFormatDescriptor.ts +57 -0
  429. package/src/stringEnum.ts +366 -0
  430. package/src/struct/audiosample.ts +95 -0
  431. package/src/struct/avbuffer.ts +139 -0
  432. package/src/struct/avcodecparameters.ts +243 -0
  433. package/src/struct/avdict.ts +44 -0
  434. package/src/struct/avframe.ts +663 -0
  435. package/src/struct/avpacket.ts +178 -0
  436. package/src/struct/avpcmbuffer.ts +77 -0
  437. package/src/struct/avsubtitle.ts +59 -0
  438. package/src/struct/encryption.ts +180 -0
  439. package/src/struct/rational.ts +43 -0
  440. package/src/util/amf.ts +178 -0
  441. package/src/util/av1syntax.ts +112 -0
  442. package/src/util/avbuffer.ts +294 -0
  443. package/src/util/avdict.ts +171 -0
  444. package/src/util/avframe.ts +520 -0
  445. package/src/util/avpacket.ts +313 -0
  446. package/src/util/channel.ts +66 -0
  447. package/src/util/codecparameters.ts +148 -0
  448. package/src/util/common.ts +42 -0
  449. package/src/util/encryption.ts +154 -0
  450. package/src/util/expgolomb.ts +170 -0
  451. package/src/util/intread.ts +60 -0
  452. package/src/util/intwrite.ts +71 -0
  453. package/src/util/mem.ts +60 -0
  454. package/src/util/nalu.ts +297 -0
  455. package/src/util/ntp.ts +32 -0
  456. package/src/util/pcm.ts +161 -0
  457. package/src/util/pixel.ts +381 -0
  458. package/src/util/rational.ts +152 -0
  459. package/src/util/sample.ts +136 -0
  460. package/src/util/serialize.ts +268 -0
  461. package/dist/cjs/AVStream.d.ts +0 -577
  462. package/dist/cjs/audiosamplefmt.d.ts +0 -248
  463. package/dist/cjs/avformat.d.ts +0 -66
  464. package/dist/cjs/codec.d.ts +0 -927
  465. package/dist/cjs/codecs/aac.d.ts +0 -121
  466. package/dist/cjs/codecs/ac3.d.ts +0 -72
  467. package/dist/cjs/codecs/av1.d.ts +0 -75
  468. package/dist/cjs/codecs/dts.d.ts +0 -17
  469. package/dist/cjs/codecs/flac.d.ts +0 -46
  470. package/dist/cjs/codecs/h264.d.ts +0 -188
  471. package/dist/cjs/codecs/hevc.d.ts +0 -220
  472. package/dist/cjs/codecs/mp3.d.ts +0 -17
  473. package/dist/cjs/codecs/mpeg4.d.ts +0 -7
  474. package/dist/cjs/codecs/mpegvideo.d.ts +0 -7
  475. package/dist/cjs/codecs/opus.d.ts +0 -26
  476. package/dist/cjs/codecs/ttml.d.ts +0 -9
  477. package/dist/cjs/codecs/ttml.js +0 -87
  478. package/dist/cjs/codecs/vp8.d.ts +0 -31
  479. package/dist/cjs/codecs/vp9.d.ts +0 -45
  480. package/dist/cjs/codecs/vvc.d.ts +0 -235
  481. package/dist/cjs/constant.d.ts +0 -36
  482. package/dist/cjs/enum.d.ts +0 -3285
  483. package/dist/cjs/error.d.ts +0 -10
  484. package/dist/cjs/function/analyzeAVFormat.d.ts +0 -3
  485. package/dist/cjs/function/analyzeUrlIOLoader.d.ts +0 -7
  486. package/dist/cjs/function/analyzeUrlIOLoader.js +0 -101
  487. package/dist/cjs/function/audioData2AVFrame.d.ts +0 -2
  488. package/dist/cjs/function/avPCMBuffer2AVFrame.d.ts +0 -3
  489. package/dist/cjs/function/avframe2AudioData.d.ts +0 -2
  490. package/dist/cjs/function/avframe2VideoFrame.d.ts +0 -5
  491. package/dist/cjs/function/avframe2VideoFrame.js +0 -146
  492. package/dist/cjs/function/avpacket2EncodedAudioChunk.d.ts +0 -2
  493. package/dist/cjs/function/avpacket2EncodedVideoChunk.d.ts +0 -2
  494. package/dist/cjs/function/compileResource.d.ts +0 -2
  495. package/dist/cjs/function/compileResource.js +0 -53
  496. package/dist/cjs/function/encodedAudioChunk2AVPacket.d.ts +0 -2
  497. package/dist/cjs/function/encodedAudioChunk2AVPacket.js +0 -23
  498. package/dist/cjs/function/encodedVideoChunk2AVPacket.d.ts +0 -7
  499. package/dist/cjs/function/getAudioCodec.d.ts +0 -2
  500. package/dist/cjs/function/getHardwarePreference.d.ts +0 -1
  501. package/dist/cjs/function/getHardwarePreference.js +0 -16
  502. package/dist/cjs/function/getVideoCodec.d.ts +0 -2
  503. package/dist/cjs/function/getWasmUrl.d.ts +0 -2
  504. package/dist/cjs/function/hasAlphaChannel.d.ts +0 -2
  505. package/dist/cjs/function/isHdr.d.ts +0 -2
  506. package/dist/cjs/function/videoFrame2AVFrame.d.ts +0 -7
  507. package/dist/cjs/function/videoFrame2AVFrame.js +0 -113
  508. package/dist/cjs/implement/AVFramePoolImpl.d.ts +0 -11
  509. package/dist/cjs/implement/AVFramePoolImpl.js +0 -59
  510. package/dist/cjs/implement/AVPCMBufferPoolImpl.d.ts +0 -11
  511. package/dist/cjs/implement/AVPCMBufferPoolImpl.js +0 -57
  512. package/dist/cjs/implement/AVPacketPoolImpl.d.ts +0 -11
  513. package/dist/cjs/implement/AVPacketPoolImpl.js +0 -60
  514. package/dist/cjs/pixelFormatDescriptor.d.ts +0 -100
  515. package/dist/cjs/pixfmt.d.ts +0 -1293
  516. package/dist/cjs/sampleFormatDescriptor.d.ts +0 -6
  517. package/dist/cjs/stringEnum.d.ts +0 -161
  518. package/dist/cjs/struct/audiosample.d.ts +0 -64
  519. package/dist/cjs/struct/avbuffer.d.ts +0 -85
  520. package/dist/cjs/struct/avcodecparameters.d.ts +0 -181
  521. package/dist/cjs/struct/avdict.d.ts +0 -17
  522. package/dist/cjs/struct/avframe.d.ts +0 -559
  523. package/dist/cjs/struct/avpacket.d.ts +0 -124
  524. package/dist/cjs/struct/avpcmbuffer.d.ts +0 -49
  525. package/dist/cjs/struct/avsubtitle.d.ts +0 -30
  526. package/dist/cjs/struct/encryption.d.ts +0 -137
  527. package/dist/cjs/struct/rational.d.ts +0 -15
  528. package/dist/cjs/struct/rational.js +0 -43
  529. package/dist/cjs/util/amf.d.ts +0 -10
  530. package/dist/cjs/util/av1syntax.d.ts +0 -9
  531. package/dist/cjs/util/avbuffer.d.ts +0 -18
  532. package/dist/cjs/util/avbuffer.js +0 -153
  533. package/dist/cjs/util/avdict.d.ts +0 -9
  534. package/dist/cjs/util/avdict.js +0 -111
  535. package/dist/cjs/util/avframe.d.ts +0 -21
  536. package/dist/cjs/util/avpacket.d.ts +0 -24
  537. package/dist/cjs/util/channel.d.ts +0 -5
  538. package/dist/cjs/util/codecparameters.d.ts +0 -4
  539. package/dist/cjs/util/codecparameters.js +0 -70
  540. package/dist/cjs/util/common.d.ts +0 -3
  541. package/dist/cjs/util/crypto.d.ts +0 -1
  542. package/dist/cjs/util/crypto.js +0 -8
  543. package/dist/cjs/util/crypto.js.map +0 -1
  544. package/dist/cjs/util/encryption.d.ts +0 -6
  545. package/dist/cjs/util/expgolomb.d.ts +0 -26
  546. package/dist/cjs/util/intread.d.ts +0 -9
  547. package/dist/cjs/util/intwrite.d.ts +0 -9
  548. package/dist/cjs/util/mem.d.ts +0 -5
  549. package/dist/cjs/util/mem.js +0 -54
  550. package/dist/cjs/util/nalu.d.ts +0 -32
  551. package/dist/cjs/util/ntp.d.ts +0 -1
  552. package/dist/cjs/util/pcm.d.ts +0 -4
  553. package/dist/cjs/util/pixel.d.ts +0 -11
  554. package/dist/cjs/util/rational.d.ts +0 -58
  555. package/dist/cjs/util/sample.d.ts +0 -7
  556. package/dist/cjs/util/serialize.d.ts +0 -63
  557. package/dist/esm/util/crypto.d.ts +0 -1
  558. package/dist/esm/util/crypto.js +0 -4
  559. package/dist/esm/util/crypto.js.map +0 -1
  560. /package/dist/cjs/{audiosamplefmt.js → audiosamplefmt.cjs} +0 -0
  561. /package/dist/cjs/{avformat.js → avformat.cjs} +0 -0
  562. /package/dist/cjs/{codec.js → codec.cjs} +0 -0
  563. /package/dist/cjs/{error.js → error.cjs} +0 -0
  564. /package/dist/cjs/function/{analyzeAVFormat.js → analyzeAVFormat.cjs} +0 -0
  565. /package/dist/cjs/{pixfmt.js → pixfmt.cjs} +0 -0
  566. /package/dist/cjs/{sampleFormatDescriptor.js → sampleFormatDescriptor.cjs} +0 -0
  567. /package/dist/cjs/struct/{avsubtitle.js → avsubtitle.cjs} +0 -0
  568. /package/dist/cjs/util/{av1syntax.js → av1syntax.cjs} +0 -0
  569. /package/dist/cjs/util/{common.js → common.cjs} +0 -0
  570. /package/dist/cjs/util/{expgolomb.js → expgolomb.cjs} +0 -0
  571. /package/dist/cjs/util/{ntp.js → ntp.cjs} +0 -0
  572. /package/dist/cjs/util/{pcm.js → pcm.cjs} +0 -0
@@ -0,0 +1,1086 @@
1
+ /*
2
+ * libmedia vvc 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 type AVPacket from '../struct/avpacket'
27
+ import { AVPacketFlags } from '../struct/avpacket'
28
+ import { AVPacketSideDataType } from '../codec'
29
+ import * as naluUtil from '../util/nalu'
30
+ import { avMalloc } from '../util/mem'
31
+ import * as expgolomb from '../util/expgolomb'
32
+ import * as intread from '../util/intread'
33
+ import * as intwrite from '../util/intwrite'
34
+ import { AVPixelFormat } from '../pixfmt'
35
+ import type AVCodecParameters from '../struct/avcodecparameters'
36
+
37
+ import {
38
+ mapUint8Array
39
+ } from '@libmedia/cheap'
40
+
41
+ import {
42
+ type Data,
43
+ array
44
+ } from '@libmedia/common'
45
+
46
+ import {
47
+ BitReader,
48
+ BitWriter,
49
+ BufferReader,
50
+ BufferWriter,
51
+ type Uint8ArrayInterface
52
+ } from '@libmedia/common/io'
53
+
54
+ const NALULengthSizeMinusOne = 3
55
+
56
+ export const enum VVCNaluType {
57
+ kTRAIL_NUT = 0,
58
+ kSTSA_NUT = 1,
59
+ kRADL_NUT = 2,
60
+ kRASL_NUT = 3,
61
+ kRSV_VCL_4 = 4,
62
+ kRSV_VCL_5 = 5,
63
+ kRSV_VCL_6 = 6,
64
+ kIDR_W_RADL = 7,
65
+ kIDR_N_LP = 8,
66
+ kCRA_NUT = 9,
67
+ kGDR_NUT = 10,
68
+ kRSV_IRAP_11 = 11,
69
+ kOPI_NUT = 12,
70
+ kDCI_NUT = 13,
71
+ kVPS_NUT = 14,
72
+ kSPS_NUT = 15,
73
+ kPPS_NUT = 16,
74
+ kPREFIX_APS_NUT = 17,
75
+ kSUFFIX_APS_NUT = 18,
76
+ kPH_NUT = 19,
77
+ kAUD_NUT = 20,
78
+ kEOS_NUT = 21,
79
+ kEOB_NUT = 22,
80
+ kPREFIX_SEI_NUT = 23,
81
+ kSUFFIX_SEI_NUT = 24,
82
+ kFD_NUT = 25,
83
+ kRSV_NVCL_26 = 26,
84
+ kRSV_NVCL_27 = 27,
85
+ kUNSPEC_28 = 28,
86
+ kUNSPEC_29 = 29,
87
+ kUNSPEC_30 = 30,
88
+ kUNSPEC_31 = 31,
89
+ }
90
+
91
+ export const enum VVCSliceType {
92
+ kSliceNone = -1,
93
+ kSliceB = 0,
94
+ kSliceP = 1,
95
+ kSliceI = 2
96
+ }
97
+
98
+ export const enum VVCAPSType {
99
+ kALF = 0,
100
+ kLMCS = 1,
101
+ kSCALING = 2
102
+ }
103
+
104
+ /* eslint-disable camelcase */
105
+ function parsePTL(bitReader: BitReader) {
106
+ const olsIdx = bitReader.readU(9)
107
+ const numSublayers = bitReader.readU(3)
108
+ const constantFrameRate = bitReader.readU(2)
109
+ const chromaFormatIdc = bitReader.readU(2)
110
+ const bitDepthMinus8 = bitReader.readU(3)
111
+ bitReader.readU(5)
112
+
113
+ // VvcPTLRecord
114
+ bitReader.readU(2)
115
+ const num_bytes_constraint_info = bitReader.readU(6)
116
+ const generalProfileIdc = bitReader.readU(7)
117
+ const generalTierFlag = bitReader.readU(1)
118
+ const generalLevelIdc = bitReader.readU(8)
119
+ const ptlFrameOnlyConstraintFlag = bitReader.readU(1)
120
+ const ptlMultilayerEnabledFlag = bitReader.readU(1)
121
+ const generalConstraintInfo = []
122
+ const sublayerLevelIdc = []
123
+
124
+ if (num_bytes_constraint_info) {
125
+ for (let i = 0; i < num_bytes_constraint_info - 1; i++) {
126
+ generalConstraintInfo[i] = bitReader.readU(8)
127
+ }
128
+ generalConstraintInfo[num_bytes_constraint_info - 1] = bitReader.readU(6)
129
+ }
130
+ else {
131
+ bitReader.readU(6)
132
+ }
133
+ if (numSublayers > 1) {
134
+ let ptl_sublayer_present_mask = 0
135
+ for (let j = numSublayers - 2; j >= 0; --j) {
136
+ const val = bitReader.readU(1)
137
+ ptl_sublayer_present_mask |= val << j
138
+ }
139
+ for (let j = numSublayers; j <= 8 && numSublayers > 1; ++j) {
140
+ bitReader.readU(1)
141
+ }
142
+
143
+ for (let j = numSublayers - 2; j >= 0; --j) {
144
+ if (ptl_sublayer_present_mask & (1 << j)) {
145
+ sublayerLevelIdc[j] = bitReader.readU(8)
146
+ }
147
+ }
148
+ }
149
+ const ptl_num_sub_profiles = bitReader.readU(8)
150
+ const generalSubProfileIdc = []
151
+ if (ptl_num_sub_profiles) {
152
+ for (let i = 0; i < ptl_num_sub_profiles; i++) {
153
+ generalSubProfileIdc.push(bitReader.readU(8))
154
+ }
155
+ }
156
+
157
+ const maxPictureWidth = bitReader.readU(16)
158
+ const maxPictureHeight = bitReader.readU(16)
159
+ const avgFramerate = bitReader.readU(16)
160
+
161
+ return {
162
+ olsIdx,
163
+ numSublayers,
164
+ bitDepthMinus8,
165
+ chromaFormatIdc,
166
+ constantFrameRate,
167
+ generalProfileIdc,
168
+ generalTierFlag,
169
+ generalLevelIdc,
170
+ ptlFrameOnlyConstraintFlag,
171
+ ptlMultilayerEnabledFlag,
172
+ generalConstraintInfo,
173
+ sublayerLevelIdc,
174
+ generalSubProfileIdc,
175
+ maxPictureWidth,
176
+ maxPictureHeight,
177
+ avgFramerate
178
+ }
179
+ }
180
+ /* eslint-enable camelcase */
181
+
182
+ /**
183
+ *
184
+ * vvcc 格式的 extradata 转 annexb vps sps pps
185
+ *
186
+ * bits
187
+ * - 5 reserved (11111)
188
+ * - 2 lengthSizeMinusOne
189
+ * - 1 ptl_present_flag
190
+ * if ptl_present_flag
191
+ * - 9 ols_idx
192
+ * - 3 num_sublayers
193
+ * - 2 constant_frame_rate
194
+ * - 2 chroma_format_idc
195
+ * - 3 bit_depth_minus8
196
+ * - 5 reserved (11111)
197
+ * VvcPTLRecord
198
+ * - 2 reserved (11)
199
+ * - 6 num_bytes_constraint_info
200
+ * - 7 general_profile_idc
201
+ * - 1 general_tier_flag
202
+ * - 8 general_level_idc
203
+ * - 1 general_level_idc
204
+ * - 1 ptl_multilayer_enabled_flag
205
+ * if num_bytes_constraint_info > 0
206
+ * for (i = 0; i < num_bytes_constraint_info - 1; i++)
207
+ * - 8 general_constraint_info[i]
208
+ * - 6 general_constraint_info[num_bytes_constraint_info - 1]
209
+ * else
210
+ * - 6 reserved
211
+ * if num_sublayers > 1
212
+ * - num_sublayers - 2 ptl_sublayer_level_present_flag
213
+ * - 8 - num_sublayers + 1 ptl_reserved_zero_bit
214
+ * for (i = num_sublayers -2; i >= 0; i--)
215
+ * if ptl_sublayer_present_mask & (1 << i)
216
+ * - 8 sublayer_level_idc[i]
217
+ * - 8 ptl_num_sub_profiles
218
+ * if ptl_num_sub_profiles
219
+ * for (i = 0; i < ptl_num_sub_profiles; i++)
220
+ * - 32 general_sub_profile_idc[i]
221
+ * - 16 max_picture_width
222
+ * - 16 max_picture_height
223
+ * - 16 avg_frame_rate
224
+ * - 8 numOfArrays
225
+ * - repeated of array (vps/sps/pps)
226
+ * - 1 array_completeness
227
+ * - 2 reserved (0)
228
+ * - 5 NAL_unit_type
229
+ * if nalu_type != VVC_NALU_DEC_PARAM && nalu_type != VVC_NALU_OPI
230
+ * - 16 numNalus
231
+ * else
232
+ * numNalus = 1
233
+ * - repeated once per NAL
234
+ * - 16 nalUnitLength
235
+ * - N NALU data
236
+ *
237
+ */
238
+ export function extradata2VpsSpsPps(extradata: Uint8ArrayInterface) {
239
+
240
+ const bufferReader = new BufferReader(extradata, true)
241
+
242
+ const ptlPresentFlag = bufferReader.readUint8() & 0x01
243
+
244
+ if (ptlPresentFlag) {
245
+ const bitReader = new BitReader()
246
+ bitReader.appendBuffer(extradata.subarray(1))
247
+ parsePTL(bitReader)
248
+ bufferReader.skip(bitReader.getPointer())
249
+ }
250
+
251
+ let vpss: Uint8ArrayInterface[] = []
252
+ let spss: Uint8ArrayInterface[] = []
253
+ let ppss: Uint8ArrayInterface[] = []
254
+
255
+ const arrayLen = bufferReader.readUint8()
256
+
257
+ for (let i = 0; i < arrayLen; i++) {
258
+ const naluType = bufferReader.readUint8() & 0x1f
259
+ let count = 1
260
+
261
+ if (naluType !== VVCNaluType.kDCI_NUT && naluType !== VVCNaluType.kOPI_NUT) {
262
+ count = bufferReader.readUint16()
263
+ }
264
+ const list = []
265
+
266
+ for (let j = 0; j < count; j++) {
267
+ const len = bufferReader.readUint16()
268
+ list.push(bufferReader.readBuffer(len))
269
+ }
270
+
271
+ if (naluType === VVCNaluType.kVPS_NUT) {
272
+ vpss = list
273
+ }
274
+ else if (naluType === VVCNaluType.kSPS_NUT) {
275
+ spss = list
276
+ }
277
+ else if (naluType === VVCNaluType.kPPS_NUT) {
278
+ ppss = list
279
+ }
280
+ }
281
+
282
+ return {
283
+ vpss,
284
+ spss,
285
+ ppss
286
+ }
287
+ }
288
+
289
+ /**
290
+ * annexb vps sps pps 转 avcc 格式的 extradata
291
+ *
292
+ * @param vpss
293
+ * @param spss
294
+ * @param ppss
295
+ * @returns
296
+ */
297
+ export function vpsSpsPps2Extradata(vpss: Uint8ArrayInterface[], spss: Uint8ArrayInterface[], ppss: Uint8ArrayInterface[]) {
298
+
299
+ const sps = spss[0]
300
+ let ptl: Uint8Array
301
+ if (sps) {
302
+ const spsParams = parseSPS(sps)
303
+ let generalConstraintInfo = spsParams.generalConstraintInfo
304
+ if (!generalConstraintInfo.length) {
305
+ generalConstraintInfo = new Array(12).fill(0)
306
+ }
307
+ const biWriter = new BitWriter()
308
+ biWriter.writeU(9, 0)
309
+ biWriter.writeU(3, spsParams.spsMaxSublayersMinus1 + 1)
310
+ biWriter.writeU(2, 1)
311
+ biWriter.writeU(2, spsParams.chromaFormatIdc)
312
+ biWriter.writeU(3, spsParams.bitDepthMinus8)
313
+ biWriter.writeU(5, 0b11111)
314
+ biWriter.writeU(2, 0)
315
+ biWriter.writeU(6, generalConstraintInfo.length)
316
+ biWriter.writeU(7, spsParams.profile)
317
+ biWriter.writeU1(spsParams.tierFlag)
318
+ biWriter.writeU(8, spsParams.level)
319
+ biWriter.writeU1(spsParams.ptlFrameOnlyConstraintFlag)
320
+ biWriter.writeU1(spsParams.ptlMultilayerEnabledFlag)
321
+
322
+ if (generalConstraintInfo.length) {
323
+ for (let i = 0; i < generalConstraintInfo.length - 1; i++) {
324
+ biWriter.writeU(8, generalConstraintInfo[i])
325
+ }
326
+ biWriter.writeU(6, generalConstraintInfo[generalConstraintInfo.length - 1])
327
+ }
328
+ else {
329
+ biWriter.writeU(6, 0b111111)
330
+ }
331
+
332
+ if (spsParams.spsMaxSublayersMinus1 + 1 > 1) {
333
+ let ptlSubLayerLevelPresentFlags = 0
334
+ for (let i = spsParams.spsMaxSublayersMinus1 - 1; i >= 0; i--) {
335
+ ptlSubLayerLevelPresentFlags = (ptlSubLayerLevelPresentFlags << 1 | spsParams.ptlSublayerLevelPresentFlag[i])
336
+ }
337
+ biWriter.writeU(spsParams.spsMaxSublayersMinus1, ptlSubLayerLevelPresentFlags)
338
+
339
+ for (let j = spsParams.spsMaxSublayersMinus1 + 1; j <= 8 && spsParams.spsMaxSublayersMinus1 > 0; ++j) {
340
+ biWriter.writeU1(0)
341
+ }
342
+ for (let i = spsParams.spsMaxSublayersMinus1 - 1; i >= 0; i--) {
343
+ if (spsParams.ptlSublayerLevelPresentFlag[i]) {
344
+ biWriter.writeU(8, spsParams.sublayerLevelIdc[i])
345
+ }
346
+ }
347
+ }
348
+ biWriter.writeU(8, spsParams.generalSubProfileIdc.length)
349
+ for (let i = 0; i < spsParams.generalSubProfileIdc.length; i++) {
350
+ biWriter.writeU(8, spsParams.sublayerLevelIdc[i])
351
+ }
352
+ biWriter.writeU(16, spsParams.width)
353
+ biWriter.writeU(16, spsParams.height)
354
+ biWriter.writeU(16, 0)
355
+ biWriter.padding()
356
+ ptl = biWriter.getBuffer().subarray(0, biWriter.getPointer())
357
+ }
358
+
359
+ let length = 2 + (ptl ? ptl.length : 0)
360
+
361
+ if (vpss.length) {
362
+ // type + count
363
+ length += 3
364
+ length = vpss.reduce((prev, value) => {
365
+ // length + data
366
+ return prev + 2 + value.length
367
+ }, length)
368
+ }
369
+
370
+ if (spss.length) {
371
+ // type + count
372
+ length += 3
373
+ length = spss.reduce((prev, value) => {
374
+ // length + data
375
+ return prev + 2 + value.length
376
+ }, length)
377
+ }
378
+
379
+ if (ppss.length) {
380
+ // type + count
381
+ length += 3
382
+ length = ppss.reduce((prev, value) => {
383
+ // length + data
384
+ return prev + 2 + value.length
385
+ }, length)
386
+ }
387
+
388
+ const buffer = new Uint8Array(length)
389
+ const bufferWriter = new BufferWriter(buffer, true)
390
+
391
+ bufferWriter.writeUint8(NALULengthSizeMinusOne << 1 | (ptl ? 1 : 0) | 0xf8)
392
+
393
+ if (ptl) {
394
+ bufferWriter.writeBuffer(ptl)
395
+ }
396
+
397
+ // numOfArrays
398
+ let numOfArrays = 0
399
+ if (vpss.length) {
400
+ numOfArrays++
401
+ }
402
+ if (spss.length) {
403
+ numOfArrays++
404
+ }
405
+ if (ppss.length) {
406
+ numOfArrays++
407
+ }
408
+ bufferWriter.writeUint8(numOfArrays)
409
+
410
+ // vps
411
+ if (vpss.length) {
412
+ bufferWriter.writeUint8((1 << 7) | VVCNaluType.kVPS_NUT)
413
+ bufferWriter.writeUint16(vpss.length)
414
+ array.each(vpss, (vps) => {
415
+ bufferWriter.writeUint16(vps.length)
416
+ bufferWriter.writeBuffer(vps)
417
+ })
418
+ }
419
+
420
+ // sps
421
+ if (spss.length) {
422
+ bufferWriter.writeUint8((1 << 7) | VVCNaluType.kSPS_NUT)
423
+ bufferWriter.writeUint16(spss.length)
424
+ array.each(spss, (sps) => {
425
+ bufferWriter.writeUint16(sps.length)
426
+ bufferWriter.writeBuffer(sps)
427
+ })
428
+ }
429
+
430
+ // pps
431
+ if (ppss.length) {
432
+ bufferWriter.writeUint8((1 << 7) | VVCNaluType.kPPS_NUT)
433
+ bufferWriter.writeUint16(ppss.length)
434
+ array.each(ppss, (pps) => {
435
+ bufferWriter.writeUint16(pps.length)
436
+ bufferWriter.writeBuffer(pps)
437
+ })
438
+ }
439
+
440
+ return buffer
441
+ }
442
+
443
+ /**
444
+ * annexb extradata 转 avcc extradata
445
+ *
446
+ * @param data
447
+ * @returns
448
+ */
449
+ export function annexbExtradata2AvccExtradata(data: Uint8ArrayInterface) {
450
+ let nalus = naluUtil.splitNaluByStartCode(data)
451
+
452
+ if (nalus.length >= 2) {
453
+ const vpss: Uint8ArrayInterface[] = []
454
+ const spss: Uint8ArrayInterface[] = []
455
+ const ppss: Uint8ArrayInterface[] = []
456
+
457
+ nalus.forEach((nalu) => {
458
+ const type = (nalu[1] >>> 3) & 0x1f
459
+ if (type === VVCNaluType.kVPS_NUT) {
460
+ vpss.push(nalu)
461
+ }
462
+ else if (type === VVCNaluType.kSPS_NUT) {
463
+ spss.push(nalu)
464
+ }
465
+ else if (type === VVCNaluType.kPPS_NUT) {
466
+ ppss.push(nalu)
467
+ }
468
+ })
469
+
470
+ if (spss.length && ppss.length) {
471
+ return vpsSpsPps2Extradata(vpss, spss, ppss)
472
+ }
473
+ }
474
+ }
475
+
476
+ /**
477
+ * 从 annexb 码流里面生成 annexb extradata
478
+ *
479
+ * 提取出 vps、 sps 和 pps
480
+ *
481
+ * @param data
482
+ * @returns
483
+ */
484
+ export function generateAnnexbExtradata(data: Uint8ArrayInterface) {
485
+ let nalus = naluUtil.splitNaluByStartCode(data)
486
+
487
+ if (nalus.length >= 2) {
488
+ const vpss: Uint8ArrayInterface[] = []
489
+ const spss: Uint8ArrayInterface[] = []
490
+ const ppss: Uint8ArrayInterface[] = []
491
+
492
+ nalus.forEach((nalu) => {
493
+ const type = (nalu[1] >>> 3) & 0x1f
494
+ if (type === VVCNaluType.kVPS_NUT) {
495
+ vpss.push(nalu)
496
+ }
497
+ else if (type === VVCNaluType.kSPS_NUT) {
498
+ spss.push(nalu)
499
+ }
500
+ else if (type === VVCNaluType.kPPS_NUT) {
501
+ ppss.push(nalu)
502
+ }
503
+ })
504
+
505
+ if (spss.length && ppss.length) {
506
+ const nalus = [spss[0], ppss[0]]
507
+ if (vpss.length) {
508
+ nalus.unshift(vpss[0])
509
+ }
510
+ return naluUtil.joinNaluByStartCode(nalus, 0)
511
+ }
512
+ }
513
+ }
514
+
515
+ /**
516
+ *
517
+ * annexb 格式的 NALU 转 avcc NALU
518
+ *
519
+ * 需要保证 data 是 safe 的
520
+ *
521
+ */
522
+ export function annexb2Avcc(data: Uint8ArrayInterface, reverseSps: boolean = false) {
523
+ let extradata: Uint8Array
524
+ let key: boolean = false
525
+
526
+ let nalus = naluUtil.splitNaluByStartCode(data)
527
+
528
+ if (nalus.length) {
529
+ const vpss: Uint8ArrayInterface[] = []
530
+ const spss: Uint8ArrayInterface[] = []
531
+ const ppss: Uint8ArrayInterface[] = []
532
+
533
+ nalus.forEach((nalu) => {
534
+ const type = (nalu[1] >>> 3) & 0x1f
535
+ if (type === VVCNaluType.kVPS_NUT) {
536
+ vpss.push(nalu)
537
+ }
538
+ else if (type === VVCNaluType.kSPS_NUT) {
539
+ spss.push(nalu)
540
+ }
541
+ else if (type === VVCNaluType.kPPS_NUT) {
542
+ ppss.push(nalu)
543
+ }
544
+ if (type === VVCNaluType.kIDR_N_LP
545
+ || type === VVCNaluType.kIDR_W_RADL
546
+ || type === VVCNaluType.kCRA_NUT
547
+ || type === VVCNaluType.kGDR_NUT
548
+ ) {
549
+ key = true
550
+ }
551
+ })
552
+
553
+ if (spss.length && ppss.length) {
554
+ extradata = vpsSpsPps2Extradata(vpss, spss, ppss)
555
+ nalus = nalus.filter((nalu) => {
556
+ const type = (nalu[1] >>> 3) & 0x1f
557
+ return reverseSps
558
+ ? type !== VVCNaluType.kAUD_NUT
559
+ : (type !== VVCNaluType.kVPS_NUT
560
+ && type !== VVCNaluType.kSPS_NUT
561
+ && type !== VVCNaluType.kPPS_NUT
562
+ && type !== VVCNaluType.kAUD_NUT)
563
+ })
564
+ }
565
+ else {
566
+ nalus = nalus.filter((nalu) => {
567
+ const type = (nalu[1] >>> 3) & 0x1f
568
+ return type !== VVCNaluType.kAUD_NUT
569
+ })
570
+ }
571
+ }
572
+
573
+ const length = nalus.reduce((prev, nalu) => {
574
+ return prev + NALULengthSizeMinusOne + 1 + nalu.length
575
+ }, 0)
576
+
577
+ const bufferPointer: pointer<uint8> = avMalloc(length)
578
+ const buffer = mapUint8Array(bufferPointer, length)
579
+
580
+ naluUtil.joinNaluByLength(nalus, NALULengthSizeMinusOne, buffer)
581
+
582
+ return {
583
+ bufferPointer,
584
+ length,
585
+ extradata,
586
+ key
587
+ }
588
+ }
589
+
590
+ /**
591
+ *
592
+ * 需要保证 data 是 safe 的
593
+ *
594
+ * @param vpss
595
+ * @param spss
596
+ * @param ppss
597
+ * @param nalus
598
+ * @returns
599
+ */
600
+ export function nalus2Annexb(
601
+ vpss: Uint8ArrayInterface[],
602
+ spss: Uint8ArrayInterface[],
603
+ ppss: Uint8ArrayInterface[],
604
+ nalus: Uint8ArrayInterface[],
605
+ key: boolean
606
+ ) {
607
+ const lengths = [
608
+ naluUtil.joinNaluByStartCodeLength(vpss, 0),
609
+ naluUtil.joinNaluByStartCodeLength(spss, 0),
610
+ naluUtil.joinNaluByStartCodeLength(ppss, 0),
611
+ naluUtil.joinNaluByStartCodeLength(nalus, 2)
612
+ ]
613
+
614
+ let length = lengths.reduce((prev, length) => {
615
+ return prev + length
616
+ }, 0)
617
+
618
+ const bufferPointer: pointer<uint8> = avMalloc(length + 7)
619
+
620
+ let offset = bufferPointer
621
+
622
+ // AUD
623
+ intwrite.w8(offset++, 0)
624
+ intwrite.w8(offset++, 0)
625
+ intwrite.w8(offset++, 0)
626
+ intwrite.w8(offset++, 1)
627
+ intwrite.w8(offset++, 0)
628
+ intwrite.w8(offset++, (VVCNaluType.kAUD_NUT << 3) | 1)
629
+ intwrite.w8(offset++, (key ? 1 : 0) << 7 | 0x28)
630
+
631
+ if (vpss.length) {
632
+ naluUtil.joinNaluByStartCode(vpss, 0, mapUint8Array(offset, lengths[0]))
633
+ offset = reinterpret_cast<pointer<uint8>>(offset + lengths[0])
634
+ }
635
+ if (spss.length) {
636
+ naluUtil.joinNaluByStartCode(spss, 0, mapUint8Array(offset, lengths[1]))
637
+ offset = reinterpret_cast<pointer<uint8>>(offset + lengths[1])
638
+ }
639
+ if (ppss.length) {
640
+ naluUtil.joinNaluByStartCode(ppss, 0, mapUint8Array(offset, lengths[2]))
641
+ offset = reinterpret_cast<pointer<uint8>>(offset + lengths[2])
642
+ }
643
+ if (nalus.length) {
644
+ naluUtil.joinNaluByStartCode(nalus, 2, mapUint8Array(offset, lengths[3]))
645
+ }
646
+
647
+ return {
648
+ bufferPointer,
649
+ length: length + 7
650
+ }
651
+ }
652
+
653
+ /**
654
+ * annexb 添加 sps pps
655
+ *
656
+ * @param data
657
+ * @param extradata
658
+ */
659
+ export function annexbAddExtradata(data: Uint8ArrayInterface, extradata: Uint8ArrayInterface) {
660
+ let nalus = naluUtil.splitNaluByStartCode(data).concat(naluUtil.splitNaluByStartCode(extradata))
661
+ if (nalus.length) {
662
+ let vpss: Uint8ArrayInterface[] = []
663
+ let spss: Uint8ArrayInterface[] = []
664
+ let ppss: Uint8ArrayInterface[] = []
665
+ let others: Uint8ArrayInterface[] = []
666
+
667
+ nalus.forEach((nalu) => {
668
+ const type = (nalu[1] >>> 3) & 0x1f
669
+ if (type === VVCNaluType.kVPS_NUT) {
670
+ vpss.push(nalu)
671
+ }
672
+ else if (type === VVCNaluType.kSPS_NUT) {
673
+ spss.push(nalu)
674
+ }
675
+ else if (type === VVCNaluType.kPPS_NUT) {
676
+ ppss.push(nalu)
677
+ }
678
+ else if (type !== VVCNaluType.kAUD_NUT) {
679
+ others.push(nalu)
680
+ }
681
+ })
682
+ return nalus2Annexb(vpss, spss, ppss, others, true)
683
+ }
684
+ }
685
+
686
+ /**
687
+ * avcc 格式的 NALU 转 annexb NALU
688
+ *
689
+ * 需要保证 data 是 safe 的
690
+ *
691
+ */
692
+ export function avcc2Annexb(
693
+ data: Uint8ArrayInterface,
694
+ extradata?: Uint8ArrayInterface,
695
+ naluLengthSizeMinusOne: int32 = NALULengthSizeMinusOne
696
+ ) {
697
+ if (extradata) {
698
+ naluLengthSizeMinusOne = (extradata[0] >>> 1) & 0x03
699
+ }
700
+
701
+ let vpss: Uint8ArrayInterface[] = []
702
+ let spss: Uint8ArrayInterface[] = []
703
+ let ppss: Uint8ArrayInterface[] = []
704
+ let key = false
705
+
706
+ if (extradata) {
707
+ const result = extradata2VpsSpsPps(extradata)
708
+ vpss = result.vpss
709
+ spss = result.spss
710
+ ppss = result.ppss
711
+ key = true
712
+ }
713
+
714
+ const nalus = naluUtil.splitNaluByLength(data, naluLengthSizeMinusOne).filter((nalu) => {
715
+ const type = (nalu[1] >>> 3) & 0x1f
716
+ return type !== VVCNaluType.kAUD_NUT
717
+ })
718
+ const others: Uint8ArrayInterface[] = []
719
+ nalus.forEach((nalu) => {
720
+ const naluType = (nalu[1] >>> 3) & 0x1f
721
+ if (naluType === VVCNaluType.kSPS_NUT && !spss.length) {
722
+ spss.push(nalu)
723
+ }
724
+ else if (naluType === VVCNaluType.kPPS_NUT && !ppss.length) {
725
+ ppss.push(nalu)
726
+ }
727
+ else if (naluType !== VVCNaluType.kAUD_NUT) {
728
+ others.push(nalu)
729
+ }
730
+ if (naluType === VVCNaluType.kIDR_N_LP
731
+ || naluType === VVCNaluType.kIDR_W_RADL
732
+ ) {
733
+ key = true
734
+ }
735
+ })
736
+ return {
737
+ ...nalus2Annexb(vpss, spss, ppss, others, key),
738
+ key
739
+ }
740
+ }
741
+
742
+ export function parseAVCodecParametersBySps(stream: { codecpar: AVCodecParameters }, sps: Uint8ArrayInterface) {
743
+ const { profile, level, width, height, videoDelay, chromaFormatIdc, bitDepthMinus8 } = parseSPS(sps)
744
+ stream.codecpar.profile = profile
745
+ stream.codecpar.level = level
746
+ stream.codecpar.width = width
747
+ stream.codecpar.height = height
748
+ stream.codecpar.videoDelay = videoDelay
749
+
750
+ switch (bitDepthMinus8) {
751
+ case 0:
752
+ if (chromaFormatIdc === 3) {
753
+ stream.codecpar.format = AVPixelFormat.AV_PIX_FMT_YUV444P
754
+ }
755
+ else if (chromaFormatIdc === 2) {
756
+ stream.codecpar.format = AVPixelFormat.AV_PIX_FMT_YUV422P
757
+ }
758
+ else {
759
+ stream.codecpar.format = AVPixelFormat.AV_PIX_FMT_YUV420P
760
+ }
761
+ break
762
+ case 2:
763
+ if (chromaFormatIdc === 3) {
764
+ stream.codecpar.format = AVPixelFormat.AV_PIX_FMT_YUV444P10LE
765
+ }
766
+ else if (chromaFormatIdc === 2) {
767
+ stream.codecpar.format = AVPixelFormat.AV_PIX_FMT_YUV422P10LE
768
+ }
769
+ else {
770
+ stream.codecpar.format = AVPixelFormat.AV_PIX_FMT_YUV420P10LE
771
+ }
772
+ break
773
+ }
774
+ }
775
+
776
+ export function parseAVCodecParameters(
777
+ stream: {
778
+ codecpar: AVCodecParameters,
779
+ sideData: Partial<Record<AVPacketSideDataType, Uint8Array>>,
780
+ metadata: Data
781
+ },
782
+ extradata?: Uint8ArrayInterface
783
+ ) {
784
+ if (!extradata && stream.sideData[AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA]) {
785
+ extradata = stream.sideData[AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA]
786
+ }
787
+ let sps: Uint8ArrayInterface
788
+ if (extradata && naluUtil.isAnnexb(extradata)) {
789
+ array.each(naluUtil.splitNaluByStartCode(extradata), (nalu) => {
790
+ const type = (nalu[1] >>> 3) & 0x1f
791
+ if (type === VVCNaluType.kSPS_NUT) {
792
+ sps = nalu
793
+ return false
794
+ }
795
+ })
796
+ }
797
+ else if (extradata && extradata.length >= 6) {
798
+
799
+ const { spss } = extradata2VpsSpsPps(extradata)
800
+
801
+ if (spss.length) {
802
+ sps = spss[0]
803
+ }
804
+ }
805
+ if (sps) {
806
+ parseAVCodecParametersBySps(stream, sps)
807
+ }
808
+ }
809
+
810
+ export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
811
+ if (avpacket.flags & AVPacketFlags.AV_PKT_FLAG_H26X_ANNEXB) {
812
+ let nalus = naluUtil.splitNaluByStartCode(mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size)))
813
+ return nalus.some((nalu) => {
814
+ const type = (nalu[1] >>> 3) & 0x1f
815
+ return type === VVCNaluType.kIDR_N_LP || type === VVCNaluType.kIDR_W_RADL
816
+ })
817
+ }
818
+ else {
819
+ const size = avpacket.size
820
+ let i = 0
821
+ while (i < (size - naluLengthSize)) {
822
+ const type = (intread.r8(avpacket.data + (i + naluLengthSize + 1)) >>> 3) & 0x1f
823
+ if (type === VVCNaluType.kIDR_N_LP || type === VVCNaluType.kIDR_W_RADL) {
824
+ return true
825
+ }
826
+ if (naluLengthSize === 4) {
827
+ i += intread.rb32(avpacket.data + i)
828
+ }
829
+ else if (naluLengthSize === 3) {
830
+ i += intread.rb24(avpacket.data + i)
831
+ }
832
+ else if (naluLengthSize === 2) {
833
+ i += intread.rb16(avpacket.data + i)
834
+ }
835
+ else {
836
+ i += intread.r8(avpacket.data + i)
837
+ }
838
+ i += naluLengthSize
839
+ }
840
+ return false
841
+ }
842
+ }
843
+
844
+ /* eslint-disable camelcase */
845
+ export interface VvcSPS {
846
+ profile: number
847
+ level: number
848
+ width: number
849
+ height: number
850
+ videoDelay: number
851
+ chromaFormatIdc: number
852
+ bitDepthMinus8: number
853
+ generalProfileSpace: number
854
+ tierFlag: number
855
+ generalConstraintInfo: number[]
856
+ generalSubProfileIdc: number[]
857
+ ptlFrameOnlyConstraintFlag: number
858
+ ptlMultilayerEnabledFlag: number
859
+ spsMaxSublayersMinus1: number
860
+ ptlSublayerLevelPresentFlag: number[]
861
+ sublayerLevelIdc: number[]
862
+ sps_log2_max_pic_order_cnt_lsb_minus4: number
863
+ sps_poc_msb_cycle_flag: number
864
+ sps_poc_msb_cycle_len_minus1: number
865
+ sps_num_extra_ph_bytes: number
866
+ sps_extra_ph_bit_present_flag: number[]
867
+ }
868
+
869
+ export function parseSPS(sps: Uint8ArrayInterface): VvcSPS {
870
+ if (!sps || sps.length < 3) {
871
+ return
872
+ }
873
+
874
+ let offset = 0
875
+ if (sps[0] === 0x00
876
+ && sps[1] === 0x00
877
+ && sps[2] === 0x00
878
+ && sps[3] === 0x01
879
+ ) {
880
+ offset = 4
881
+ }
882
+
883
+ let profile = 0
884
+ let level = 0
885
+ let width = 0
886
+ let height = 0
887
+ let bitDepthMinus8 = 0
888
+ let chromaFormatIdc = 1
889
+ let generalProfileSpace = 0
890
+ let tierFlag = 0
891
+ let ptlFrameOnlyConstraintFlag = 0
892
+ let ptlMultilayerEnabledFlag = 0
893
+
894
+ const generalConstraintInfo = []
895
+ const ptlSublayerLevelPresentFlag = []
896
+ const sublayerLevelIdc = []
897
+ const generalSubProfileIdc = []
898
+
899
+ const buffer = naluUtil.naluUnescape(sps.subarray(offset))
900
+ const bitReader = new BitReader(buffer.length)
901
+ bitReader.appendBuffer(buffer)
902
+
903
+ // forbidden_zero_bit
904
+ bitReader.readU1()
905
+ // nuh_reserved_zero_bit
906
+ bitReader.readU1()
907
+ // layerId
908
+ bitReader.readU(6)
909
+ // nalu type
910
+ bitReader.readU(5)
911
+ // tid
912
+ bitReader.readU(3)
913
+
914
+ // sps_seq_parameter_set_id && sps_video_parameter_set_id
915
+ bitReader.readU(8)
916
+
917
+ const spsMaxSublayersMinus1 = bitReader.readU(3)
918
+ chromaFormatIdc = bitReader.readU(2)
919
+ const sps_log2_ctu_size_minus5 = bitReader.readU(2)
920
+ const sps_ptl_dpb_hrd_params_present_flag = bitReader.readU(1)
921
+ if (sps_ptl_dpb_hrd_params_present_flag) {
922
+ profile = bitReader.readU(7)
923
+ tierFlag = bitReader.readU(1)
924
+ level = bitReader.readU(8)
925
+ ptlFrameOnlyConstraintFlag = bitReader.readU(1)
926
+ ptlMultilayerEnabledFlag = bitReader.readU(1)
927
+ const gci_present_flag = bitReader.readU(1)
928
+ if (gci_present_flag) {
929
+ for (let j = 0; j < 8; j++) {
930
+ generalConstraintInfo[j] = bitReader.readU(8)
931
+ }
932
+ generalConstraintInfo[8] = bitReader.readU(7)
933
+ const gci_num_reserved_bits = bitReader.readU(8)
934
+ bitReader.readU(gci_num_reserved_bits)
935
+ }
936
+ bitReader.skipPadding()
937
+ for (let i = spsMaxSublayersMinus1 - 1; i >= 0; i--) {
938
+ ptlSublayerLevelPresentFlag[i] = bitReader.readU(1)
939
+ }
940
+ bitReader.skipPadding()
941
+ for (let i = spsMaxSublayersMinus1 - 1; i >= 0; i--) {
942
+ if (ptlSublayerLevelPresentFlag[i]) {
943
+ sublayerLevelIdc[i] = bitReader.readU(8)
944
+ }
945
+ }
946
+
947
+ const ptl_num_sub_profiles = bitReader.readU(8)
948
+ if (ptl_num_sub_profiles) {
949
+ for (let i = 0; i < ptl_num_sub_profiles; i++) {
950
+ generalSubProfileIdc[i] = bitReader.readU(32)
951
+ }
952
+ }
953
+ }
954
+
955
+ // sps_gdr_enabled_flag
956
+ bitReader.readU1()
957
+ const sps_ref_pic_resampling_enabled_flag = bitReader.readU1()
958
+ if (sps_ref_pic_resampling_enabled_flag) {
959
+ // sps_res_change_in_clvs_allowed_flag
960
+ bitReader.readU1()
961
+ }
962
+
963
+ const sps_pic_width_max_in_luma_samples = width = expgolomb.readUE(bitReader)
964
+ const sps_pic_height_max_in_luma_samples = height = expgolomb.readUE(bitReader)
965
+
966
+ if (bitReader.readU1()) {
967
+ // sps_conf_win_left_offset
968
+ expgolomb.readUE(bitReader)
969
+ // sps_conf_win_right_offset
970
+ expgolomb.readUE(bitReader)
971
+ // sps_conf_win_top_offset
972
+ expgolomb.readUE(bitReader)
973
+ // sps_conf_win_bottom_offset
974
+ expgolomb.readUE(bitReader)
975
+ }
976
+
977
+ if (bitReader.readU1()) {
978
+ const sps_num_subpics_minus1 = expgolomb.readUE(bitReader)
979
+ const ctb_log2_size_y = sps_log2_ctu_size_minus5 + 5
980
+ const ctb_size_y = 1 << ctb_log2_size_y
981
+ const tmp_width_val = sps_pic_width_max_in_luma_samples / (1 << ctb_log2_size_y)
982
+ const tmp_height_val = sps_pic_height_max_in_luma_samples / (1 << ctb_log2_size_y)
983
+ const wlen = Math.ceil(Math.log2(tmp_width_val))
984
+ const hlen = Math.ceil(Math.log2(tmp_height_val))
985
+
986
+ let sps_subpic_id_len = 0
987
+ let sps_subpic_same_size_flag = 0
988
+ let sps_independent_subpics_flag = 0
989
+ // sps_num_subpics_minus1
990
+ if (sps_num_subpics_minus1 > 0) {
991
+ sps_independent_subpics_flag = bitReader.readU1()
992
+ sps_subpic_same_size_flag = bitReader.readU1()
993
+ }
994
+ for (let i = 0; sps_num_subpics_minus1 > 0 && i <= sps_num_subpics_minus1; i++) {
995
+ if (!sps_subpic_same_size_flag || i == 0) {
996
+ if (i > 0 && sps_pic_width_max_in_luma_samples > ctb_size_y) {
997
+ bitReader.readU(wlen)
998
+ }
999
+ if (i > 0 && sps_pic_height_max_in_luma_samples > ctb_size_y) {
1000
+ bitReader.readU(hlen)
1001
+ }
1002
+ if (i < sps_num_subpics_minus1 && sps_pic_width_max_in_luma_samples > ctb_size_y) {
1003
+ bitReader.readU(wlen)
1004
+ }
1005
+ if (i < sps_num_subpics_minus1 && sps_pic_height_max_in_luma_samples > ctb_size_y) {
1006
+ bitReader.readU(hlen)
1007
+ }
1008
+ }
1009
+ if (!sps_independent_subpics_flag) {
1010
+ // sps_subpic_treated_as_pic_flag && sps_loop_filter_across_subpic_enabled_flag
1011
+ bitReader.readU(2)
1012
+ }
1013
+ }
1014
+ sps_subpic_id_len = expgolomb.readUE(bitReader) + 1
1015
+ // sps_subpic_id_mapping_explicitly_signalled_flag
1016
+ if (bitReader.readU(1)) {
1017
+ // sps_subpic_id_mapping_present_flag
1018
+ if (bitReader.readU(1)) {
1019
+ for (let i = 0; i <= sps_num_subpics_minus1; i++) {
1020
+ // sps_subpic_id[i]
1021
+ bitReader.readU(sps_subpic_id_len)
1022
+ }
1023
+ }
1024
+ }
1025
+ }
1026
+
1027
+ bitDepthMinus8 = expgolomb.readUE(bitReader)
1028
+
1029
+ // sps_entropy_coding_sync_enabled_flag
1030
+ bitReader.readU(1)
1031
+ // sps_entry_point_offsets_present_flag
1032
+ bitReader.readU(1)
1033
+
1034
+ const sps_log2_max_pic_order_cnt_lsb_minus4 = bitReader.readU(4)
1035
+ const sps_poc_msb_cycle_flag = bitReader.readU(1)
1036
+ let sps_poc_msb_cycle_len_minus1 = 0
1037
+ if (sps_poc_msb_cycle_flag) {
1038
+ sps_poc_msb_cycle_len_minus1 = expgolomb.readUE(bitReader)
1039
+ }
1040
+ const sps_extra_ph_bit_present_flag: number[] = []
1041
+ const sps_num_extra_ph_bytes = bitReader.readU(2)
1042
+ for (let i = 0; i < (sps_num_extra_ph_bytes * 8); i++) {
1043
+ sps_extra_ph_bit_present_flag[i] = bitReader.readU(1)
1044
+ }
1045
+
1046
+ const videoDelay = (spsMaxSublayersMinus1 + 1) > 2 ? 2 : spsMaxSublayersMinus1
1047
+
1048
+ return {
1049
+ profile,
1050
+ level,
1051
+ width,
1052
+ height,
1053
+ videoDelay,
1054
+ chromaFormatIdc,
1055
+ bitDepthMinus8,
1056
+ generalProfileSpace,
1057
+ tierFlag,
1058
+ generalConstraintInfo,
1059
+ generalSubProfileIdc,
1060
+ ptlFrameOnlyConstraintFlag,
1061
+ ptlMultilayerEnabledFlag,
1062
+ spsMaxSublayersMinus1,
1063
+ ptlSublayerLevelPresentFlag,
1064
+ sublayerLevelIdc,
1065
+ sps_log2_max_pic_order_cnt_lsb_minus4,
1066
+ sps_poc_msb_cycle_flag,
1067
+ sps_poc_msb_cycle_len_minus1,
1068
+ sps_num_extra_ph_bytes,
1069
+ sps_extra_ph_bit_present_flag
1070
+ }
1071
+ }
1072
+
1073
+ export function parseExtraData(extradata: Uint8ArrayInterface) {
1074
+
1075
+ if (naluUtil.isAnnexb(extradata)) {
1076
+ extradata = annexbExtradata2AvccExtradata(extradata)
1077
+ }
1078
+
1079
+ const bitReader = new BitReader()
1080
+ bitReader.appendBuffer(extradata)
1081
+ const ptlPresentFlag = bitReader.readU(8) & 0x01
1082
+ if (ptlPresentFlag) {
1083
+ return parsePTL(bitReader)
1084
+ }
1085
+ return {} as Data
1086
+ }