@libmedia/avutil 0.12.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) 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/codecs/{aac.js → aac.cjs} +2 -8
  4. package/dist/cjs/codecs/aac.js.map +1 -1
  5. package/dist/cjs/codecs/{ac3.js → ac3.cjs} +2 -8
  6. package/dist/cjs/codecs/ac3.js.map +1 -1
  7. package/dist/cjs/codecs/{av1.js → av1.cjs} +6 -10
  8. package/dist/cjs/codecs/av1.js.map +1 -1
  9. package/dist/cjs/codecs/{dts.js → dts.cjs} +3 -9
  10. package/dist/cjs/codecs/dts.js.map +1 -1
  11. package/dist/cjs/codecs/{flac.js → flac.cjs} +2 -8
  12. package/dist/cjs/codecs/flac.js.map +1 -1
  13. package/dist/cjs/codecs/{h264.js → h264.cjs} +20 -23
  14. package/dist/cjs/codecs/h264.js.map +1 -1
  15. package/dist/cjs/codecs/{hevc.js → hevc.cjs} +23 -23
  16. package/dist/cjs/codecs/hevc.js.map +1 -1
  17. package/dist/cjs/codecs/{mp3.js → mp3.cjs} +1 -1
  18. package/dist/cjs/codecs/mp3.js.map +1 -1
  19. package/dist/cjs/codecs/{mpeg4.js → mpeg4.cjs} +1 -1
  20. package/dist/cjs/codecs/mpeg4.js.map +1 -1
  21. package/dist/cjs/codecs/{mpegvideo.js → mpegvideo.cjs} +1 -1
  22. package/dist/cjs/codecs/mpegvideo.js.map +1 -1
  23. package/dist/cjs/codecs/{opus.js → opus.cjs} +3 -9
  24. package/dist/cjs/codecs/opus.js.map +1 -1
  25. package/dist/cjs/codecs/ttml.cjs +51 -0
  26. package/dist/cjs/codecs/ttml.js.map +1 -1
  27. package/dist/cjs/codecs/{vp8.js → vp8.cjs} +2 -8
  28. package/dist/cjs/codecs/vp8.js.map +1 -1
  29. package/dist/cjs/codecs/{vp9.js → vp9.cjs} +4 -10
  30. package/dist/cjs/codecs/vp9.js.map +1 -1
  31. package/dist/cjs/codecs/{vvc.js → vvc.cjs} +25 -25
  32. package/dist/cjs/codecs/vvc.js.map +1 -1
  33. package/dist/cjs/{constant.js → constant.cjs} +6 -7
  34. package/dist/cjs/constant.js.map +1 -1
  35. package/dist/cjs/{enum.js → enum.cjs} +3 -1
  36. package/dist/cjs/enum.js.map +1 -1
  37. package/dist/cjs/error.js.map +1 -1
  38. package/dist/cjs/function/analyzeAVFormat.js.map +1 -1
  39. package/dist/cjs/function/analyzeUrlIOLoader.cjs +66 -0
  40. package/dist/cjs/function/analyzeUrlIOLoader.js.map +1 -1
  41. package/dist/cjs/function/{audioData2AVFrame.js → audioData2AVFrame.cjs} +9 -9
  42. package/dist/cjs/function/audioData2AVFrame.js.map +1 -1
  43. package/dist/cjs/function/{avPCMBuffer2AVFrame.js → avPCMBuffer2AVFrame.cjs} +20 -20
  44. package/dist/cjs/function/avPCMBuffer2AVFrame.js.map +1 -1
  45. package/dist/cjs/function/{avframe2AudioData.js → avframe2AudioData.cjs} +7 -7
  46. package/dist/cjs/function/avframe2AudioData.js.map +1 -1
  47. package/dist/cjs/function/avframe2VideoFrame.cjs +48 -0
  48. package/dist/cjs/function/avframe2VideoFrame.js.map +1 -1
  49. package/dist/cjs/function/{avpacket2EncodedAudioChunk.js → avpacket2EncodedAudioChunk.cjs} +3 -3
  50. package/dist/cjs/function/avpacket2EncodedAudioChunk.js.map +1 -1
  51. package/dist/cjs/function/{avpacket2EncodedVideoChunk.js → avpacket2EncodedVideoChunk.cjs} +3 -3
  52. package/dist/cjs/function/avpacket2EncodedVideoChunk.js.map +1 -1
  53. package/dist/cjs/function/compileResource.cjs +19 -0
  54. package/dist/cjs/function/compileResource.js.map +1 -1
  55. package/dist/cjs/function/constant/webcodecs.cjs +50 -0
  56. package/dist/cjs/function/constant/webcodecs.js.map +1 -0
  57. package/dist/cjs/function/encodedAudioChunk2AVPacket.cjs +23 -0
  58. package/dist/cjs/function/encodedAudioChunk2AVPacket.js.map +1 -1
  59. package/dist/cjs/function/{encodedVideoChunk2AVPacket.js → encodedVideoChunk2AVPacket.cjs} +8 -8
  60. package/dist/cjs/function/encodedVideoChunk2AVPacket.js.map +1 -1
  61. package/dist/cjs/function/{getAudioCodec.js → getAudioCodec.cjs} +1 -1
  62. package/dist/cjs/function/getAudioCodec.js.map +1 -1
  63. package/dist/cjs/function/getAudioMimeType.cjs +19 -0
  64. package/dist/cjs/function/getAudioMimeType.js.map +1 -0
  65. package/dist/cjs/function/getHardwarePreference.cjs +10 -0
  66. package/dist/cjs/function/getHardwarePreference.js.map +1 -1
  67. package/dist/cjs/function/{getVideoCodec.js → getVideoCodec.cjs} +12 -12
  68. package/dist/cjs/function/getVideoCodec.js.map +1 -1
  69. package/dist/cjs/function/getVideoMimeType.cjs +18 -0
  70. package/dist/cjs/function/getVideoMimeType.js.map +1 -0
  71. package/dist/cjs/function/{getWasmUrl.js → getWasmUrl.cjs} +2 -3
  72. package/dist/cjs/function/getWasmUrl.js.map +1 -1
  73. package/dist/cjs/function/{hasAlphaChannel.js → hasAlphaChannel.cjs} +1 -1
  74. package/dist/cjs/function/hasAlphaChannel.js.map +1 -1
  75. package/dist/cjs/function/{isHdr.js → isHdr.cjs} +1 -1
  76. package/dist/cjs/function/isHdr.js.map +1 -1
  77. package/dist/cjs/function/videoFrame2AVFrame.cjs +51 -0
  78. package/dist/cjs/function/videoFrame2AVFrame.js.map +1 -1
  79. package/dist/cjs/implement/AVFramePoolImpl.cjs +28 -0
  80. package/dist/cjs/implement/AVFramePoolImpl.js.map +1 -1
  81. package/dist/cjs/implement/AVPCMBufferPoolImpl.cjs +27 -0
  82. package/dist/cjs/implement/AVPCMBufferPoolImpl.js.map +1 -1
  83. package/dist/cjs/implement/AVPacketPoolImpl.cjs +29 -0
  84. package/dist/cjs/implement/AVPacketPoolImpl.js.map +1 -1
  85. package/dist/cjs/index.cjs +840 -0
  86. package/dist/cjs/index.js.map +1 -0
  87. package/dist/cjs/internal.cjs +283 -0
  88. package/dist/cjs/internal.js.map +1 -0
  89. package/dist/cjs/{pixelFormatDescriptor.js → pixelFormatDescriptor.cjs} +2 -0
  90. package/dist/cjs/pixelFormatDescriptor.js.map +1 -1
  91. package/dist/cjs/pixfmt.js.map +1 -1
  92. package/dist/cjs/sampleFormatDescriptor.js.map +1 -1
  93. package/dist/cjs/{stringEnum.js → stringEnum.cjs} +4 -1
  94. package/dist/cjs/stringEnum.js.map +1 -1
  95. package/dist/cjs/struct/{audiosample.js → audiosample.cjs} +13 -13
  96. package/dist/cjs/struct/audiosample.js.map +1 -1
  97. package/dist/cjs/struct/{avbuffer.js → avbuffer.cjs} +18 -18
  98. package/dist/cjs/struct/avbuffer.js.map +1 -1
  99. package/dist/cjs/struct/{avcodecparameters.js → avcodecparameters.cjs} +11 -11
  100. package/dist/cjs/struct/avcodecparameters.js.map +1 -1
  101. package/dist/cjs/struct/{avdict.js → avdict.cjs} +9 -9
  102. package/dist/cjs/struct/avdict.js.map +1 -1
  103. package/dist/cjs/struct/{avframe.js → avframe.cjs} +30 -30
  104. package/dist/cjs/struct/avframe.js.map +1 -1
  105. package/dist/cjs/struct/{avpacket.js → avpacket.cjs} +19 -19
  106. package/dist/cjs/struct/avpacket.js.map +1 -1
  107. package/dist/cjs/struct/{avpcmbuffer.js → avpcmbuffer.cjs} +9 -9
  108. package/dist/cjs/struct/avpcmbuffer.js.map +1 -1
  109. package/dist/cjs/struct/{encryption.js → encryption.cjs} +13 -13
  110. package/dist/cjs/struct/encryption.js.map +1 -1
  111. package/dist/cjs/struct/rational.cjs +43 -0
  112. package/dist/cjs/struct/rational.js.map +1 -1
  113. package/dist/cjs/util/{amf.js → amf.cjs} +7 -38
  114. package/dist/cjs/util/amf.js.map +1 -1
  115. package/dist/cjs/util/av1syntax.js.map +1 -1
  116. package/dist/cjs/util/avbuffer.cjs +122 -0
  117. package/dist/cjs/util/avbuffer.js.map +1 -1
  118. package/dist/cjs/util/avdict.cjs +75 -0
  119. package/dist/cjs/util/avdict.js.map +1 -1
  120. package/dist/cjs/util/{avframe.js → avframe.cjs} +82 -87
  121. package/dist/cjs/util/avframe.js.map +1 -1
  122. package/dist/cjs/util/{avpacket.js → avpacket.cjs} +58 -58
  123. package/dist/cjs/util/avpacket.js.map +1 -1
  124. package/dist/cjs/util/{channel.js → channel.cjs} +7 -7
  125. package/dist/cjs/util/channel.js.map +1 -1
  126. package/dist/cjs/util/codecparameters.cjs +95 -0
  127. package/dist/cjs/util/codecparameters.js.map +1 -1
  128. package/dist/cjs/util/common.js.map +1 -1
  129. package/dist/cjs/util/{encryption.js → encryption.cjs} +5 -11
  130. package/dist/cjs/util/encryption.js.map +1 -1
  131. package/dist/cjs/util/expgolomb.js.map +1 -1
  132. package/dist/cjs/util/{intread.js → intread.cjs} +1 -1
  133. package/dist/cjs/util/intread.js.map +1 -1
  134. package/dist/cjs/util/{intwrite.js → intwrite.cjs} +1 -1
  135. package/dist/cjs/util/intwrite.js.map +1 -1
  136. package/dist/cjs/util/mem.cjs +23 -0
  137. package/dist/cjs/util/mem.js.map +1 -1
  138. package/dist/cjs/util/{nalu.js → nalu.cjs} +7 -42
  139. package/dist/cjs/util/nalu.js.map +1 -1
  140. package/dist/cjs/util/ntp.js.map +1 -1
  141. package/dist/cjs/util/pcm.js.map +1 -1
  142. package/dist/cjs/util/{pixel.js → pixel.cjs} +26 -30
  143. package/dist/cjs/util/pixel.js.map +1 -1
  144. package/dist/cjs/util/{rational.js → rational.cjs} +5 -11
  145. package/dist/cjs/util/rational.js.map +1 -1
  146. package/dist/cjs/util/{sample.js → sample.cjs} +6 -12
  147. package/dist/cjs/util/sample.js.map +1 -1
  148. package/dist/cjs/util/{serialize.js → serialize.cjs} +40 -42
  149. package/dist/cjs/util/serialize.js.map +1 -1
  150. package/dist/esm/AVStream.d.ts +7 -7
  151. package/dist/esm/AVStream.js +10 -12
  152. package/dist/esm/AVStream.js.map +1 -1
  153. package/dist/esm/codecs/aac.d.ts +10 -5
  154. package/dist/esm/codecs/aac.js +2 -2
  155. package/dist/esm/codecs/aac.js.map +1 -1
  156. package/dist/esm/codecs/ac3.d.ts +1 -1
  157. package/dist/esm/codecs/ac3.js +1 -1
  158. package/dist/esm/codecs/ac3.js.map +1 -1
  159. package/dist/esm/codecs/av1.d.ts +3 -3
  160. package/dist/esm/codecs/av1.js +4 -6
  161. package/dist/esm/codecs/av1.js.map +1 -1
  162. package/dist/esm/codecs/dts.d.ts +1 -1
  163. package/dist/esm/codecs/dts.js +2 -2
  164. package/dist/esm/codecs/dts.js.map +1 -1
  165. package/dist/esm/codecs/flac.d.ts +3 -3
  166. package/dist/esm/codecs/flac.js +1 -1
  167. package/dist/esm/codecs/flac.js.map +1 -1
  168. package/dist/esm/codecs/h264.d.ts +5 -5
  169. package/dist/esm/codecs/h264.js +13 -18
  170. package/dist/esm/codecs/h264.js.map +1 -1
  171. package/dist/esm/codecs/hevc.d.ts +5 -5
  172. package/dist/esm/codecs/hevc.js +16 -15
  173. package/dist/esm/codecs/hevc.js.map +1 -1
  174. package/dist/esm/codecs/mp3.d.ts +4 -4
  175. package/dist/esm/codecs/mp3.js +1 -1
  176. package/dist/esm/codecs/mp3.js.map +1 -1
  177. package/dist/esm/codecs/mpeg4.d.ts +1 -1
  178. package/dist/esm/codecs/mpeg4.js +1 -1
  179. package/dist/esm/codecs/mpeg4.js.map +1 -1
  180. package/dist/esm/codecs/mpegvideo.d.ts +1 -1
  181. package/dist/esm/codecs/mpegvideo.js +1 -1
  182. package/dist/esm/codecs/mpegvideo.js.map +1 -1
  183. package/dist/esm/codecs/opus.d.ts +3 -3
  184. package/dist/esm/codecs/opus.js +2 -4
  185. package/dist/esm/codecs/opus.js.map +1 -1
  186. package/dist/esm/codecs/ttml.js +5 -11
  187. package/dist/esm/codecs/ttml.js.map +1 -1
  188. package/dist/esm/codecs/vp8.d.ts +4 -4
  189. package/dist/esm/codecs/vp8.js +2 -2
  190. package/dist/esm/codecs/vp8.js.map +1 -1
  191. package/dist/esm/codecs/vp9.d.ts +4 -4
  192. package/dist/esm/codecs/vp9.js +8 -10
  193. package/dist/esm/codecs/vp9.js.map +1 -1
  194. package/dist/esm/codecs/vvc.d.ts +5 -5
  195. package/dist/esm/codecs/vvc.js +16 -17
  196. package/dist/esm/codecs/vvc.js.map +1 -1
  197. package/dist/esm/constant.d.ts +5 -7
  198. package/dist/esm/constant.js +5 -9
  199. package/dist/esm/constant.js.map +1 -1
  200. package/dist/esm/enum.d.ts +9 -1
  201. package/dist/esm/enum.js +3 -1
  202. package/dist/esm/enum.js.map +1 -1
  203. package/dist/esm/error.js.map +1 -1
  204. package/dist/esm/function/analyzeAVFormat.d.ts +2 -2
  205. package/dist/esm/function/analyzeAVFormat.js.map +1 -1
  206. package/dist/esm/function/analyzeUrlIOLoader.d.ts +2 -2
  207. package/dist/esm/function/analyzeUrlIOLoader.js +2 -10
  208. package/dist/esm/function/analyzeUrlIOLoader.js.map +1 -1
  209. package/dist/esm/function/audioData2AVFrame.d.ts +1 -1
  210. package/dist/esm/function/audioData2AVFrame.js +6 -6
  211. package/dist/esm/function/audioData2AVFrame.js.map +1 -1
  212. package/dist/esm/function/avPCMBuffer2AVFrame.d.ts +2 -2
  213. package/dist/esm/function/avPCMBuffer2AVFrame.js +9 -9
  214. package/dist/esm/function/avPCMBuffer2AVFrame.js.map +1 -1
  215. package/dist/esm/function/avframe2AudioData.d.ts +1 -1
  216. package/dist/esm/function/avframe2AudioData.js +6 -8
  217. package/dist/esm/function/avframe2AudioData.js.map +1 -1
  218. package/dist/esm/function/avframe2VideoFrame.d.ts +3 -3
  219. package/dist/esm/function/avframe2VideoFrame.js +14 -79
  220. package/dist/esm/function/avframe2VideoFrame.js.map +1 -1
  221. package/dist/esm/function/avpacket2EncodedAudioChunk.d.ts +1 -1
  222. package/dist/esm/function/avpacket2EncodedAudioChunk.js +5 -7
  223. package/dist/esm/function/avpacket2EncodedAudioChunk.js.map +1 -1
  224. package/dist/esm/function/avpacket2EncodedVideoChunk.d.ts +1 -1
  225. package/dist/esm/function/avpacket2EncodedVideoChunk.js +5 -7
  226. package/dist/esm/function/avpacket2EncodedVideoChunk.js.map +1 -1
  227. package/dist/esm/function/compileResource.d.ts +1 -1
  228. package/dist/esm/function/compileResource.js +2 -4
  229. package/dist/esm/function/compileResource.js.map +1 -1
  230. package/dist/esm/function/constant/webcodecs.d.ts +5 -0
  231. package/dist/esm/function/constant/webcodecs.js +51 -0
  232. package/dist/esm/function/constant/webcodecs.js.map +1 -0
  233. package/dist/esm/function/encodedAudioChunk2AVPacket.d.ts +1 -1
  234. package/dist/esm/function/encodedAudioChunk2AVPacket.js +6 -6
  235. package/dist/esm/function/encodedAudioChunk2AVPacket.js.map +1 -1
  236. package/dist/esm/function/encodedVideoChunk2AVPacket.d.ts +1 -1
  237. package/dist/esm/function/encodedVideoChunk2AVPacket.js +7 -7
  238. package/dist/esm/function/encodedVideoChunk2AVPacket.js.map +1 -1
  239. package/dist/esm/function/getAudioCodec.d.ts +1 -1
  240. package/dist/esm/function/getAudioCodec.js +2 -2
  241. package/dist/esm/function/getAudioCodec.js.map +1 -1
  242. package/dist/esm/function/getAudioMimeType.d.ts +2 -0
  243. package/dist/esm/function/getAudioMimeType.js +12 -0
  244. package/dist/esm/function/getAudioMimeType.js.map +1 -0
  245. package/dist/esm/function/getHardwarePreference.js +1 -1
  246. package/dist/esm/function/getHardwarePreference.js.map +1 -1
  247. package/dist/esm/function/getVideoCodec.d.ts +1 -1
  248. package/dist/esm/function/getVideoCodec.js +11 -13
  249. package/dist/esm/function/getVideoCodec.js.map +1 -1
  250. package/dist/esm/function/getVideoMimeType.d.ts +2 -0
  251. package/dist/esm/function/getVideoMimeType.js +8 -0
  252. package/dist/esm/function/getVideoMimeType.js.map +1 -0
  253. package/dist/esm/function/getWasmUrl.d.ts +1 -1
  254. package/dist/esm/function/getWasmUrl.js +2 -2
  255. package/dist/esm/function/getWasmUrl.js.map +1 -1
  256. package/dist/esm/function/hasAlphaChannel.d.ts +1 -1
  257. package/dist/esm/function/hasAlphaChannel.js +2 -2
  258. package/dist/esm/function/hasAlphaChannel.js.map +1 -1
  259. package/dist/esm/function/isHdr.d.ts +1 -1
  260. package/dist/esm/function/isHdr.js +2 -2
  261. package/dist/esm/function/isHdr.js.map +1 -1
  262. package/dist/esm/function/videoFrame2AVFrame.d.ts +6 -6
  263. package/dist/esm/function/videoFrame2AVFrame.js +13 -74
  264. package/dist/esm/function/videoFrame2AVFrame.js.map +1 -1
  265. package/dist/esm/implement/AVFramePoolImpl.d.ts +3 -4
  266. package/dist/esm/implement/AVFramePoolImpl.js +5 -7
  267. package/dist/esm/implement/AVFramePoolImpl.js.map +1 -1
  268. package/dist/esm/implement/AVPCMBufferPoolImpl.d.ts +3 -4
  269. package/dist/esm/implement/AVPCMBufferPoolImpl.js +4 -6
  270. package/dist/esm/implement/AVPCMBufferPoolImpl.js.map +1 -1
  271. package/dist/esm/implement/AVPacketPoolImpl.d.ts +3 -4
  272. package/dist/esm/implement/AVPacketPoolImpl.js +5 -7
  273. package/dist/esm/implement/AVPacketPoolImpl.js.map +1 -1
  274. package/dist/esm/index.d.ts +54 -0
  275. package/dist/esm/index.js +98 -0
  276. package/dist/esm/index.js.map +1 -0
  277. package/dist/esm/internal.d.ts +26 -0
  278. package/dist/esm/internal.js +52 -0
  279. package/dist/esm/internal.js.map +1 -0
  280. package/dist/esm/pixelFormatDescriptor.d.ts +1 -1
  281. package/dist/esm/pixelFormatDescriptor.js +2 -0
  282. package/dist/esm/pixelFormatDescriptor.js.map +1 -1
  283. package/dist/esm/pixfmt.d.ts +9 -1
  284. package/dist/esm/pixfmt.js.map +1 -1
  285. package/dist/esm/sampleFormatDescriptor.d.ts +1 -1
  286. package/dist/esm/sampleFormatDescriptor.js.map +1 -1
  287. package/dist/esm/stringEnum.d.ts +5 -5
  288. package/dist/esm/stringEnum.js +4 -1
  289. package/dist/esm/stringEnum.js.map +1 -1
  290. package/dist/esm/struct/audiosample.d.ts +1 -1
  291. package/dist/esm/struct/audiosample.js +2 -2
  292. package/dist/esm/struct/audiosample.js.map +1 -1
  293. package/dist/esm/struct/avbuffer.d.ts +1 -1
  294. package/dist/esm/struct/avbuffer.js +4 -4
  295. package/dist/esm/struct/avbuffer.js.map +1 -1
  296. package/dist/esm/struct/avcodecparameters.d.ts +9 -9
  297. package/dist/esm/struct/avcodecparameters.js +14 -16
  298. package/dist/esm/struct/avcodecparameters.js.map +1 -1
  299. package/dist/esm/struct/avdict.js +2 -2
  300. package/dist/esm/struct/avdict.js.map +1 -1
  301. package/dist/esm/struct/avframe.d.ts +12 -12
  302. package/dist/esm/struct/avframe.js +18 -22
  303. package/dist/esm/struct/avframe.js.map +1 -1
  304. package/dist/esm/struct/avpacket.d.ts +4 -4
  305. package/dist/esm/struct/avpacket.js +7 -9
  306. package/dist/esm/struct/avpacket.js.map +1 -1
  307. package/dist/esm/struct/avpcmbuffer.d.ts +1 -1
  308. package/dist/esm/struct/avpcmbuffer.js +2 -2
  309. package/dist/esm/struct/avpcmbuffer.js.map +1 -1
  310. package/dist/esm/struct/avsubtitle.d.ts +2 -2
  311. package/dist/esm/struct/encryption.js +2 -2
  312. package/dist/esm/struct/encryption.js.map +1 -1
  313. package/dist/esm/struct/rational.d.ts +1 -1
  314. package/dist/esm/struct/rational.js +4 -4
  315. package/dist/esm/struct/rational.js.map +1 -1
  316. package/dist/esm/util/amf.d.ts +1 -4
  317. package/dist/esm/util/amf.js +1 -5
  318. package/dist/esm/util/amf.js.map +1 -1
  319. package/dist/esm/util/av1syntax.d.ts +1 -1
  320. package/dist/esm/util/av1syntax.js.map +1 -1
  321. package/dist/esm/util/avbuffer.d.ts +2 -2
  322. package/dist/esm/util/avbuffer.js +7 -15
  323. package/dist/esm/util/avbuffer.js.map +1 -1
  324. package/dist/esm/util/avdict.d.ts +2 -2
  325. package/dist/esm/util/avdict.js +12 -16
  326. package/dist/esm/util/avdict.js.map +1 -1
  327. package/dist/esm/util/avframe.d.ts +2 -2
  328. package/dist/esm/util/avframe.js +22 -24
  329. package/dist/esm/util/avframe.js.map +1 -1
  330. package/dist/esm/util/avpacket.d.ts +3 -3
  331. package/dist/esm/util/avpacket.js +11 -13
  332. package/dist/esm/util/avpacket.js.map +1 -1
  333. package/dist/esm/util/channel.d.ts +1 -1
  334. package/dist/esm/util/channel.js +6 -6
  335. package/dist/esm/util/channel.js.map +1 -1
  336. package/dist/esm/util/codecparameters.d.ts +3 -1
  337. package/dist/esm/util/codecparameters.js +16 -12
  338. package/dist/esm/util/codecparameters.js.map +1 -1
  339. package/dist/esm/util/common.js.map +1 -1
  340. package/dist/esm/util/encryption.d.ts +2 -2
  341. package/dist/esm/util/encryption.js +1 -3
  342. package/dist/esm/util/encryption.js.map +1 -1
  343. package/dist/esm/util/expgolomb.d.ts +1 -2
  344. package/dist/esm/util/expgolomb.js.map +1 -1
  345. package/dist/esm/util/intread.js +1 -1
  346. package/dist/esm/util/intread.js.map +1 -1
  347. package/dist/esm/util/intwrite.js +1 -1
  348. package/dist/esm/util/intwrite.js.map +1 -1
  349. package/dist/esm/util/mem.js +7 -7
  350. package/dist/esm/util/mem.js.map +1 -1
  351. package/dist/esm/util/nalu.d.ts +1 -1
  352. package/dist/esm/util/nalu.js +3 -5
  353. package/dist/esm/util/nalu.js.map +1 -1
  354. package/dist/esm/util/ntp.js.map +1 -1
  355. package/dist/esm/util/pcm.d.ts +1 -1
  356. package/dist/esm/util/pcm.js.map +1 -1
  357. package/dist/esm/util/pixel.d.ts +1 -1
  358. package/dist/esm/util/pixel.js +8 -10
  359. package/dist/esm/util/pixel.js.map +1 -1
  360. package/dist/esm/util/rational.d.ts +10 -10
  361. package/dist/esm/util/rational.js +4 -4
  362. package/dist/esm/util/rational.js.map +1 -1
  363. package/dist/esm/util/sample.d.ts +1 -1
  364. package/dist/esm/util/sample.js +7 -7
  365. package/dist/esm/util/sample.js.map +1 -1
  366. package/dist/esm/util/serialize.d.ts +9 -9
  367. package/dist/esm/util/serialize.js +6 -6
  368. package/dist/esm/util/serialize.js.map +1 -1
  369. package/package.json +23 -390
  370. package/src/AVStream.ts +677 -0
  371. package/src/audiosamplefmt.ts +302 -0
  372. package/src/avformat.ts +96 -0
  373. package/src/codec.ts +1016 -0
  374. package/src/codecs/aac.ts +429 -0
  375. package/src/codecs/ac3.ts +309 -0
  376. package/src/codecs/av1.ts +503 -0
  377. package/src/codecs/dts.ts +100 -0
  378. package/src/codecs/flac.ts +118 -0
  379. package/src/codecs/h264.ts +1013 -0
  380. package/src/codecs/hevc.ts +1049 -0
  381. package/src/codecs/mp3.ts +172 -0
  382. package/src/codecs/mpeg4.ts +37 -0
  383. package/src/codecs/mpegvideo.ts +49 -0
  384. package/src/codecs/opus.ts +148 -0
  385. package/src/codecs/ttml.ts +158 -0
  386. package/src/codecs/vp8.ts +91 -0
  387. package/src/codecs/vp9.ts +213 -0
  388. package/src/codecs/vvc.ts +1086 -0
  389. package/src/constant.ts +72 -0
  390. package/src/enum.ts +47 -0
  391. package/src/error.ts +45 -0
  392. package/src/function/analyzeAVFormat.ts +94 -0
  393. package/src/function/analyzeUrlIOLoader.ts +166 -0
  394. package/src/function/audioData2AVFrame.ts +82 -0
  395. package/src/function/avPCMBuffer2AVFrame.ts +111 -0
  396. package/src/function/avframe2AudioData.ts +131 -0
  397. package/src/function/avframe2VideoFrame.ts +88 -0
  398. package/src/function/avpacket2EncodedAudioChunk.ts +39 -0
  399. package/src/function/avpacket2EncodedVideoChunk.ts +39 -0
  400. package/src/function/compileResource.ts +57 -0
  401. package/src/function/constant/webcodecs.ts +81 -0
  402. package/src/function/encodedAudioChunk2AVPacket.ts +62 -0
  403. package/src/function/encodedVideoChunk2AVPacket.ts +86 -0
  404. package/src/function/getAudioCodec.ts +45 -0
  405. package/src/function/getAudioMimeType.ts +44 -0
  406. package/src/function/getHardwarePreference.ts +45 -0
  407. package/src/function/getVideoCodec.ts +244 -0
  408. package/src/function/getVideoMimeType.ts +35 -0
  409. package/src/function/getWasmUrl.ts +190 -0
  410. package/src/function/hasAlphaChannel.ts +37 -0
  411. package/src/function/isHdr.ts +44 -0
  412. package/src/function/videoFrame2AVFrame.ts +95 -0
  413. package/src/implement/AVFramePoolImpl.ts +83 -0
  414. package/src/implement/AVPCMBufferPoolImpl.ts +79 -0
  415. package/src/implement/AVPacketPoolImpl.ts +82 -0
  416. package/src/index.ts +264 -0
  417. package/src/internal.ts +71 -0
  418. package/src/pixelFormatDescriptor.ts +819 -0
  419. package/src/pixfmt.ts +1400 -0
  420. package/src/sampleFormatDescriptor.ts +57 -0
  421. package/src/stringEnum.ts +366 -0
  422. package/src/struct/audiosample.ts +95 -0
  423. package/src/struct/avbuffer.ts +139 -0
  424. package/src/struct/avcodecparameters.ts +243 -0
  425. package/src/struct/avdict.ts +44 -0
  426. package/src/struct/avframe.ts +663 -0
  427. package/src/struct/avpacket.ts +178 -0
  428. package/src/struct/avpcmbuffer.ts +77 -0
  429. package/src/struct/avsubtitle.ts +59 -0
  430. package/src/struct/encryption.ts +180 -0
  431. package/src/struct/rational.ts +43 -0
  432. package/src/util/amf.ts +178 -0
  433. package/src/util/av1syntax.ts +112 -0
  434. package/src/util/avbuffer.ts +294 -0
  435. package/src/util/avdict.ts +171 -0
  436. package/src/util/avframe.ts +520 -0
  437. package/src/util/avpacket.ts +313 -0
  438. package/src/util/channel.ts +66 -0
  439. package/src/util/codecparameters.ts +148 -0
  440. package/src/util/common.ts +42 -0
  441. package/src/util/encryption.ts +154 -0
  442. package/src/util/expgolomb.ts +170 -0
  443. package/src/util/intread.ts +60 -0
  444. package/src/util/intwrite.ts +71 -0
  445. package/src/util/mem.ts +60 -0
  446. package/src/util/nalu.ts +297 -0
  447. package/src/util/ntp.ts +32 -0
  448. package/src/util/pcm.ts +161 -0
  449. package/src/util/pixel.ts +381 -0
  450. package/src/util/rational.ts +152 -0
  451. package/src/util/sample.ts +136 -0
  452. package/src/util/serialize.ts +268 -0
  453. package/dist/cjs/AVStream.d.ts +0 -577
  454. package/dist/cjs/audiosamplefmt.d.ts +0 -248
  455. package/dist/cjs/avformat.d.ts +0 -66
  456. package/dist/cjs/codec.d.ts +0 -927
  457. package/dist/cjs/codecs/aac.d.ts +0 -121
  458. package/dist/cjs/codecs/ac3.d.ts +0 -72
  459. package/dist/cjs/codecs/av1.d.ts +0 -75
  460. package/dist/cjs/codecs/dts.d.ts +0 -17
  461. package/dist/cjs/codecs/flac.d.ts +0 -46
  462. package/dist/cjs/codecs/h264.d.ts +0 -188
  463. package/dist/cjs/codecs/hevc.d.ts +0 -220
  464. package/dist/cjs/codecs/mp3.d.ts +0 -17
  465. package/dist/cjs/codecs/mpeg4.d.ts +0 -7
  466. package/dist/cjs/codecs/mpegvideo.d.ts +0 -7
  467. package/dist/cjs/codecs/opus.d.ts +0 -26
  468. package/dist/cjs/codecs/ttml.d.ts +0 -9
  469. package/dist/cjs/codecs/ttml.js +0 -87
  470. package/dist/cjs/codecs/vp8.d.ts +0 -31
  471. package/dist/cjs/codecs/vp9.d.ts +0 -45
  472. package/dist/cjs/codecs/vvc.d.ts +0 -235
  473. package/dist/cjs/constant.d.ts +0 -36
  474. package/dist/cjs/enum.d.ts +0 -3285
  475. package/dist/cjs/error.d.ts +0 -10
  476. package/dist/cjs/function/analyzeAVFormat.d.ts +0 -3
  477. package/dist/cjs/function/analyzeUrlIOLoader.d.ts +0 -7
  478. package/dist/cjs/function/analyzeUrlIOLoader.js +0 -101
  479. package/dist/cjs/function/audioData2AVFrame.d.ts +0 -2
  480. package/dist/cjs/function/avPCMBuffer2AVFrame.d.ts +0 -3
  481. package/dist/cjs/function/avframe2AudioData.d.ts +0 -2
  482. package/dist/cjs/function/avframe2VideoFrame.d.ts +0 -5
  483. package/dist/cjs/function/avframe2VideoFrame.js +0 -146
  484. package/dist/cjs/function/avpacket2EncodedAudioChunk.d.ts +0 -2
  485. package/dist/cjs/function/avpacket2EncodedVideoChunk.d.ts +0 -2
  486. package/dist/cjs/function/compileResource.d.ts +0 -2
  487. package/dist/cjs/function/compileResource.js +0 -53
  488. package/dist/cjs/function/encodedAudioChunk2AVPacket.d.ts +0 -2
  489. package/dist/cjs/function/encodedAudioChunk2AVPacket.js +0 -23
  490. package/dist/cjs/function/encodedVideoChunk2AVPacket.d.ts +0 -7
  491. package/dist/cjs/function/getAudioCodec.d.ts +0 -2
  492. package/dist/cjs/function/getHardwarePreference.d.ts +0 -1
  493. package/dist/cjs/function/getHardwarePreference.js +0 -16
  494. package/dist/cjs/function/getVideoCodec.d.ts +0 -2
  495. package/dist/cjs/function/getWasmUrl.d.ts +0 -2
  496. package/dist/cjs/function/hasAlphaChannel.d.ts +0 -2
  497. package/dist/cjs/function/isHdr.d.ts +0 -2
  498. package/dist/cjs/function/videoFrame2AVFrame.d.ts +0 -7
  499. package/dist/cjs/function/videoFrame2AVFrame.js +0 -113
  500. package/dist/cjs/implement/AVFramePoolImpl.d.ts +0 -11
  501. package/dist/cjs/implement/AVFramePoolImpl.js +0 -59
  502. package/dist/cjs/implement/AVPCMBufferPoolImpl.d.ts +0 -11
  503. package/dist/cjs/implement/AVPCMBufferPoolImpl.js +0 -57
  504. package/dist/cjs/implement/AVPacketPoolImpl.d.ts +0 -11
  505. package/dist/cjs/implement/AVPacketPoolImpl.js +0 -60
  506. package/dist/cjs/pixelFormatDescriptor.d.ts +0 -100
  507. package/dist/cjs/pixfmt.d.ts +0 -1293
  508. package/dist/cjs/sampleFormatDescriptor.d.ts +0 -6
  509. package/dist/cjs/stringEnum.d.ts +0 -161
  510. package/dist/cjs/struct/audiosample.d.ts +0 -64
  511. package/dist/cjs/struct/avbuffer.d.ts +0 -85
  512. package/dist/cjs/struct/avcodecparameters.d.ts +0 -181
  513. package/dist/cjs/struct/avdict.d.ts +0 -17
  514. package/dist/cjs/struct/avframe.d.ts +0 -559
  515. package/dist/cjs/struct/avpacket.d.ts +0 -124
  516. package/dist/cjs/struct/avpcmbuffer.d.ts +0 -49
  517. package/dist/cjs/struct/avsubtitle.d.ts +0 -30
  518. package/dist/cjs/struct/encryption.d.ts +0 -137
  519. package/dist/cjs/struct/rational.d.ts +0 -15
  520. package/dist/cjs/struct/rational.js +0 -43
  521. package/dist/cjs/util/amf.d.ts +0 -10
  522. package/dist/cjs/util/av1syntax.d.ts +0 -9
  523. package/dist/cjs/util/avbuffer.d.ts +0 -18
  524. package/dist/cjs/util/avbuffer.js +0 -153
  525. package/dist/cjs/util/avdict.d.ts +0 -9
  526. package/dist/cjs/util/avdict.js +0 -111
  527. package/dist/cjs/util/avframe.d.ts +0 -21
  528. package/dist/cjs/util/avpacket.d.ts +0 -24
  529. package/dist/cjs/util/channel.d.ts +0 -5
  530. package/dist/cjs/util/codecparameters.d.ts +0 -4
  531. package/dist/cjs/util/codecparameters.js +0 -70
  532. package/dist/cjs/util/common.d.ts +0 -3
  533. package/dist/cjs/util/crypto.d.ts +0 -1
  534. package/dist/cjs/util/crypto.js +0 -8
  535. package/dist/cjs/util/crypto.js.map +0 -1
  536. package/dist/cjs/util/encryption.d.ts +0 -6
  537. package/dist/cjs/util/expgolomb.d.ts +0 -26
  538. package/dist/cjs/util/intread.d.ts +0 -9
  539. package/dist/cjs/util/intwrite.d.ts +0 -9
  540. package/dist/cjs/util/mem.d.ts +0 -5
  541. package/dist/cjs/util/mem.js +0 -54
  542. package/dist/cjs/util/nalu.d.ts +0 -32
  543. package/dist/cjs/util/ntp.d.ts +0 -1
  544. package/dist/cjs/util/pcm.d.ts +0 -4
  545. package/dist/cjs/util/pixel.d.ts +0 -11
  546. package/dist/cjs/util/rational.d.ts +0 -58
  547. package/dist/cjs/util/sample.d.ts +0 -7
  548. package/dist/cjs/util/serialize.d.ts +0 -63
  549. package/dist/esm/util/crypto.d.ts +0 -1
  550. package/dist/esm/util/crypto.js +0 -4
  551. package/dist/esm/util/crypto.js.map +0 -1
  552. /package/dist/cjs/{audiosamplefmt.js → audiosamplefmt.cjs} +0 -0
  553. /package/dist/cjs/{avformat.js → avformat.cjs} +0 -0
  554. /package/dist/cjs/{codec.js → codec.cjs} +0 -0
  555. /package/dist/cjs/{error.js → error.cjs} +0 -0
  556. /package/dist/cjs/function/{analyzeAVFormat.js → analyzeAVFormat.cjs} +0 -0
  557. /package/dist/cjs/{pixfmt.js → pixfmt.cjs} +0 -0
  558. /package/dist/cjs/{sampleFormatDescriptor.js → sampleFormatDescriptor.cjs} +0 -0
  559. /package/dist/cjs/struct/{avsubtitle.js → avsubtitle.cjs} +0 -0
  560. /package/dist/cjs/util/{av1syntax.js → av1syntax.cjs} +0 -0
  561. /package/dist/cjs/util/{common.js → common.cjs} +0 -0
  562. /package/dist/cjs/util/{expgolomb.js → expgolomb.cjs} +0 -0
  563. /package/dist/cjs/util/{ntp.js → ntp.cjs} +0 -0
  564. /package/dist/cjs/util/{pcm.js → pcm.cjs} +0 -0
@@ -0,0 +1,131 @@
1
+ /*
2
+ * libmedia AVFrame to AudioData utils
3
+ *
4
+ * 版权所有 (C) 2024 赵高兴
5
+ * Copyright (C) 2024 Gaoxing Zhao
6
+ *
7
+ * 此文件是 libmedia 的一部分
8
+ * This file is part of libmedia.
9
+ *
10
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
11
+ * 或任何其更新的版本条款重新分发或修改它
12
+ * libmedia is free software; you can redistribute it and/or
13
+ * modify it under the terms of the GNU Lesser General Public
14
+ * License as published by the Free Software Foundation; either
15
+ * version 3.1 of the License, or (at your option) any later version.
16
+ *
17
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
18
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
19
+ * libmedia is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22
+ * Lesser General Public License for more details.
23
+ *
24
+ */
25
+
26
+ import { mapFloat32Array, mapInt16Array, mapInt32Array, mapUint8Array } from '@libmedia/cheap'
27
+ import type AVFrame from '../struct/avframe'
28
+ import { AVSampleFormat } from '../audiosamplefmt'
29
+ import { getBytesPerSample, sampleFormatIsPlanar } from '../util/sample'
30
+ import { avRescaleQ2 } from '../util/rational'
31
+ import { AV_TIME_BASE_Q, NOPTS_VALUE_BIGINT } from '../constant'
32
+
33
+ function mapFormat(avframe: pointer<AVFrame>) {
34
+ switch (avframe.format) {
35
+ case AVSampleFormat.AV_SAMPLE_FMT_U8:
36
+ return 'u8'
37
+ case AVSampleFormat.AV_SAMPLE_FMT_S16:
38
+ return 's16'
39
+ case AVSampleFormat.AV_SAMPLE_FMT_S32:
40
+ return 's32'
41
+ case AVSampleFormat.AV_SAMPLE_FMT_FLT:
42
+ return 'f32'
43
+ case AVSampleFormat.AV_SAMPLE_FMT_U8P:
44
+ return 'u8-planar'
45
+ case AVSampleFormat.AV_SAMPLE_FMT_S16P:
46
+ return 's16-planar'
47
+ case AVSampleFormat.AV_SAMPLE_FMT_S32P:
48
+ return 's32-planar'
49
+ case AVSampleFormat.AV_SAMPLE_FMT_FLTP:
50
+ return 'f32-planar'
51
+ default:
52
+ throw new Error('not support')
53
+ }
54
+ }
55
+
56
+ function mapBuffer(format: AVSampleFormat, data: Uint8Array) {
57
+ switch (format) {
58
+ case AVSampleFormat.AV_SAMPLE_FMT_U8:
59
+ case AVSampleFormat.AV_SAMPLE_FMT_U8P:
60
+ return data
61
+ case AVSampleFormat.AV_SAMPLE_FMT_S16:
62
+ case AVSampleFormat.AV_SAMPLE_FMT_S16P:
63
+ return new Int16Array(data.buffer)
64
+ case AVSampleFormat.AV_SAMPLE_FMT_S32:
65
+ case AVSampleFormat.AV_SAMPLE_FMT_S32P:
66
+ return new Int32Array(data.buffer)
67
+ case AVSampleFormat.AV_SAMPLE_FMT_FLT:
68
+ case AVSampleFormat.AV_SAMPLE_FMT_FLTP:
69
+ return new Float32Array(data.buffer)
70
+ default:
71
+ throw new Error('not support')
72
+ }
73
+ }
74
+
75
+ function mapTypeBuffer(format: AVSampleFormat, pointer: pointer<void>, size: int32) {
76
+ switch (format) {
77
+ case AVSampleFormat.AV_SAMPLE_FMT_U8:
78
+ case AVSampleFormat.AV_SAMPLE_FMT_U8P:
79
+ return mapUint8Array(pointer, reinterpret_cast<size>(size))
80
+ case AVSampleFormat.AV_SAMPLE_FMT_S16:
81
+ case AVSampleFormat.AV_SAMPLE_FMT_S16P:
82
+ return mapInt16Array(reinterpret_cast<pointer<int16>>(pointer), size >>> 1)
83
+ case AVSampleFormat.AV_SAMPLE_FMT_S32:
84
+ case AVSampleFormat.AV_SAMPLE_FMT_S32P:
85
+ return mapInt32Array(reinterpret_cast<pointer<int32>>(pointer), size >>> 2)
86
+ case AVSampleFormat.AV_SAMPLE_FMT_FLT:
87
+ case AVSampleFormat.AV_SAMPLE_FMT_FLTP:
88
+ return mapFloat32Array(reinterpret_cast<pointer<float>>(pointer), size >>> 2)
89
+ default:
90
+ throw new Error('not support')
91
+ }
92
+ }
93
+
94
+ export function avframe2AudioData(avframe: pointer<AVFrame>, pts?: int64) {
95
+
96
+ const planar = sampleFormatIsPlanar(avframe.format)
97
+ const planes = planar ? avframe.chLayout.nbChannels : 1
98
+
99
+ let data: ArrayBufferView
100
+
101
+ const sampleSize = getBytesPerSample(avframe.format)
102
+
103
+ if (planar) {
104
+ const linesize = avframe.nbSamples * sampleSize
105
+ const buffer = new Uint8Array(planes * linesize)
106
+ let offset = 0
107
+ for (let i = 0; i < planes; i++) {
108
+ buffer.set(mapUint8Array(avframe.data[i], linesize), offset)
109
+ offset += linesize
110
+ }
111
+ data = mapBuffer(avframe.format, buffer)
112
+ }
113
+ else {
114
+ data = mapTypeBuffer(avframe.format, avframe.data[0], sampleSize * avframe.nbSamples * avframe.chLayout.nbChannels)
115
+ }
116
+
117
+ const audioData = new AudioData({
118
+ data: data as BufferSource,
119
+ format: mapFormat(avframe),
120
+ sampleRate: avframe.sampleRate,
121
+ numberOfFrames: avframe.nbSamples,
122
+ numberOfChannels: avframe.chLayout.nbChannels,
123
+ timestamp: pts
124
+ ? static_cast<double>(pts)
125
+ : (avframe.pts === NOPTS_VALUE_BIGINT
126
+ ? -1
127
+ : static_cast<double>(avRescaleQ2(avframe.pts, addressof(avframe.timeBase), AV_TIME_BASE_Q))
128
+ )
129
+ })
130
+ return audioData
131
+ }
@@ -0,0 +1,88 @@
1
+ /*
2
+ * libmedia AVFrame to VideoFrame utils
3
+ *
4
+ * 版权所有 (C) 2024 赵高兴
5
+ * Copyright (C) 2024 Gaoxing Zhao
6
+ *
7
+ * 此文件是 libmedia 的一部分
8
+ * This file is part of libmedia.
9
+ *
10
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
11
+ * 或任何其更新的版本条款重新分发或修改它
12
+ * libmedia is free software; you can redistribute it and/or
13
+ * modify it under the terms of the GNU Lesser General Public
14
+ * License as published by the Free Software Foundation; either
15
+ * version 3.1 of the License, or (at your option) any later version.
16
+ *
17
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
18
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
19
+ * libmedia is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22
+ * Lesser General Public License for more details.
23
+ *
24
+ */
25
+
26
+ import type AVFrame from '../struct/avframe'
27
+ import { getAVPixelFormatDescriptor } from '../pixelFormatDescriptor'
28
+ import { AVColorRange, type AVPixelFormat } from '../pixfmt'
29
+ import { avRescaleQ2 } from '../util/rational'
30
+ import { AV_TIME_BASE_Q } from '../constant'
31
+ import { getHeap } from '@libmedia/cheap/internal'
32
+ import { object } from '@libmedia/common'
33
+ import { pixelFormatMap, colorPrimariesMap, colorSpaceMap, colorTrcMap } from './constant/webcodecs'
34
+
35
+ const pixelFormatMapReverse = object.reverse(pixelFormatMap)
36
+ const colorPrimariesMapReverse = object.reverse(colorPrimariesMap)
37
+ const colorSpaceMapReverse = object.reverse(colorSpaceMap)
38
+ const colorTrcMapReverse = object.reverse(colorTrcMap)
39
+
40
+ export function avPixelFormat2Format(pixfmt: AVPixelFormat) {
41
+ return pixelFormatMapReverse[pixfmt] ?? null
42
+ }
43
+
44
+ export function getVideoColorSpaceInit(avframe: pointer<AVFrame>) {
45
+ const init: VideoColorSpaceInit = {
46
+ fullRange: false,
47
+ matrix: colorSpaceMapReverse[avframe.colorSpace] ?? null,
48
+ primaries: colorPrimariesMapReverse[avframe.colorPrimaries] ?? null,
49
+ transfer: colorTrcMapReverse[avframe.colorTrc] ?? null
50
+ }
51
+ if (avframe.colorRange === AVColorRange.AVCOL_RANGE_JPEG) {
52
+ init.fullRange = true
53
+ }
54
+ return init
55
+ }
56
+
57
+ export function avframe2VideoFrame(avframe: pointer<AVFrame>, pts?: int64, videoFrameInit: Partial<VideoFrameBufferInit> = {}) {
58
+
59
+ let height = avframe.height
60
+
61
+ const des = getAVPixelFormatDescriptor(avframe.format as AVPixelFormat)
62
+
63
+ const layout: PlaneLayout[] = []
64
+
65
+ for (let i = 0; i < des.comp.length; i++) {
66
+ layout.push({
67
+ offset: static_cast<double>(reinterpret_cast<size>(avframe.data[i])),
68
+ stride: avframe.linesize[i]
69
+ })
70
+ }
71
+
72
+ const init: VideoFrameBufferInit = object.extend({
73
+ codedWidth: avframe.width,
74
+ codedHeight: height,
75
+ timestamp: pts ? static_cast<double>(pts) : static_cast<double>(avRescaleQ2(avframe.pts, addressof(avframe.timeBase), AV_TIME_BASE_Q)),
76
+ format: avPixelFormat2Format(avframe.format),
77
+ duration: static_cast<double>(avRescaleQ2(avframe.duration, addressof(avframe.timeBase), AV_TIME_BASE_Q)),
78
+ layout,
79
+ colorSpace: getVideoColorSpaceInit(avframe),
80
+ visibleRect: {
81
+ x: reinterpret_cast<double>(avframe.cropLeft),
82
+ y: reinterpret_cast<double>(avframe.cropTop),
83
+ width: avframe.width - reinterpret_cast<int32>((avframe.cropLeft + avframe.cropRight) as size),
84
+ height: avframe.height - reinterpret_cast<int32>((avframe.cropTop + avframe.cropBottom) as size)
85
+ }
86
+ }, videoFrameInit)
87
+ return new VideoFrame(getHeap(), init)
88
+ }
@@ -0,0 +1,39 @@
1
+ /* libmedia AVPacket to EncodedAudioChunk utils
2
+ *
3
+ * 版权所有 (C) 2024 赵高兴
4
+ * Copyright (C) 2024 Gaoxing Zhao
5
+ *
6
+ * 此文件是 libmedia 的一部分
7
+ * This file is part of libmedia.
8
+ *
9
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
10
+ * 或任何其更新的版本条款重新分发或修改它
11
+ * libmedia is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 3.1 of the License, or (at your option) any later version.
15
+ *
16
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
17
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
18
+ * libmedia is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ */
24
+
25
+ import { avRescaleQ2 } from '../util/rational'
26
+ import type AVPacket from '../struct/avpacket'
27
+ import { AVPacketFlags } from '../struct/avpacket'
28
+ import { mapUint8Array } from '@libmedia/cheap'
29
+ import { AV_TIME_BASE_Q, NOPTS_VALUE, NOPTS_VALUE_BIGINT } from '../constant'
30
+
31
+ export default function avpacket2EncodedAudioChunk(avpacket: pointer<AVPacket>) {
32
+ const key = avpacket.flags & AVPacketFlags.AV_PKT_FLAG_KEY
33
+ return new EncodedAudioChunk({
34
+ type: key ? 'key' : 'delta',
35
+ duration: avpacket.duration < 0 ? undefined : static_cast<double>(avRescaleQ2(avpacket.duration, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
36
+ timestamp: avpacket.pts === NOPTS_VALUE_BIGINT ? NOPTS_VALUE : static_cast<double>(avRescaleQ2(avpacket.pts, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
37
+ data: mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size))
38
+ })
39
+ }
@@ -0,0 +1,39 @@
1
+ /* libmedia AVPacket to EncodedVideoChunk utils
2
+ *
3
+ * 版权所有 (C) 2024 赵高兴
4
+ * Copyright (C) 2024 Gaoxing Zhao
5
+ *
6
+ * 此文件是 libmedia 的一部分
7
+ * This file is part of libmedia.
8
+ *
9
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
10
+ * 或任何其更新的版本条款重新分发或修改它
11
+ * libmedia is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 3.1 of the License, or (at your option) any later version.
15
+ *
16
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
17
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
18
+ * libmedia is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ */
24
+
25
+ import { avRescaleQ2 } from '../util/rational'
26
+ import type AVPacket from '../struct/avpacket'
27
+ import { AVPacketFlags } from '../struct/avpacket'
28
+ import { mapUint8Array } from '@libmedia/cheap'
29
+ import { AV_TIME_BASE_Q, NOPTS_VALUE, NOPTS_VALUE_BIGINT } from '../constant'
30
+
31
+ export default function avpacket2EncodedVideoChunk(avpacket: pointer<AVPacket>) {
32
+ const key = avpacket.flags & AVPacketFlags.AV_PKT_FLAG_KEY
33
+ return new EncodedVideoChunk({
34
+ type: key ? 'key' : 'delta',
35
+ duration: avpacket.duration < 0 ? undefined : static_cast<double>(avRescaleQ2(avpacket.duration, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
36
+ timestamp: avpacket.pts === NOPTS_VALUE_BIGINT ? NOPTS_VALUE : static_cast<double>(avRescaleQ2(avpacket.pts, addressof(avpacket.timeBase), AV_TIME_BASE_Q)),
37
+ data: mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size))
38
+ })
39
+ }
@@ -0,0 +1,57 @@
1
+ /* libmedia compile resource
2
+ *
3
+ * 版权所有 (C) 2024 赵高兴
4
+ * Copyright (C) 2024 Gaoxing Zhao
5
+ *
6
+ * 此文件是 libmedia 的一部分
7
+ * This file is part of libmedia.
8
+ *
9
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
10
+ * 或任何其更新的版本条款重新分发或修改它
11
+ * libmedia is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 3.1 of the License, or (at your option) any later version.
15
+ *
16
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
17
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
18
+ * libmedia is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ */
24
+
25
+ import { is } from '@libmedia/common'
26
+
27
+ import {
28
+ config as cheapConfig,
29
+ type WebAssemblyResource,
30
+ compileResource as compile
31
+ } from '@libmedia/cheap'
32
+
33
+ export default async function compileResource(wasmUrl: string | ArrayBuffer | WebAssemblyResource, thread: boolean = false) {
34
+ let resource: WebAssemblyResource
35
+
36
+ if (is.string(wasmUrl) || is.arrayBuffer(wasmUrl)) {
37
+ resource = await compile({
38
+ source: wasmUrl
39
+ })
40
+ if (cheapConfig.USE_THREADS && defined(ENABLE_THREADS) && thread) {
41
+ resource.threadModule = await compile(
42
+ {
43
+ source: resource.buffer
44
+ },
45
+ {
46
+ child: true
47
+ }
48
+ )
49
+ }
50
+ delete resource.buffer
51
+ }
52
+ else {
53
+ resource = wasmUrl
54
+ }
55
+
56
+ return resource
57
+ }
@@ -0,0 +1,81 @@
1
+ /*
2
+ * libmedia webcodecs constant define
3
+ *
4
+ * 版权所有 (C) 2024 赵高兴
5
+ * Copyright (C) 2024 Gaoxing Zhao
6
+ *
7
+ * 此文件是 libmedia 的一部分
8
+ * This file is part of libmedia.
9
+ *
10
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
11
+ * 或任何其更新的版本条款重新分发或修改它
12
+ * libmedia is free software; you can redistribute it and/or
13
+ * modify it under the terms of the GNU Lesser General Public
14
+ * License as published by the Free Software Foundation; either
15
+ * version 3.1 of the License, or (at your option) any later version.
16
+ *
17
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
18
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
19
+ * libmedia is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22
+ * Lesser General Public License for more details.
23
+ *
24
+ */
25
+
26
+ import { AVColorPrimaries, AVColorSpace, AVColorTransferCharacteristic, AVPixelFormat } from '../../pixfmt'
27
+
28
+ export const pixelFormatMap: Record<VideoPixelFormat, AVPixelFormat> = {
29
+ 'BGRA': AVPixelFormat.AV_PIX_FMT_BGRA,
30
+ 'BGRX': AVPixelFormat.AV_PIX_FMT_BGR0,
31
+ 'I420': AVPixelFormat.AV_PIX_FMT_YUV420P,
32
+ // @ts-ignore
33
+ 'I420P10': AVPixelFormat.AV_PIX_FMT_YUV420P10LE,
34
+ 'I420P12': AVPixelFormat.AV_PIX_FMT_YUV420P12LE,
35
+ 'I420A': AVPixelFormat.AV_PIX_FMT_YUVA420P,
36
+ 'I420AP10': AVPixelFormat.AV_PIX_FMT_YUVA420P10LE,
37
+ 'I420AP12': AVPixelFormat.AV_PIX_FMT_YUVA420P12LE,
38
+ 'I422': AVPixelFormat.AV_PIX_FMT_YUV422P,
39
+ 'I422P10': AVPixelFormat.AV_PIX_FMT_YUV422P10LE,
40
+ 'I422P12': AVPixelFormat.AV_PIX_FMT_YUV422P12LE,
41
+ 'I422A': AVPixelFormat.AV_PIX_FMT_YUVA422P,
42
+ 'I422AP10': AVPixelFormat.AV_PIX_FMT_YUVA422P10LE,
43
+ 'I422AP12': AVPixelFormat.AV_PIX_FMT_YUVA422P12LE,
44
+ 'I444': AVPixelFormat.AV_PIX_FMT_YUV444P,
45
+ 'I444P10': AVPixelFormat.AV_PIX_FMT_YUV444P10LE,
46
+ 'I444P12': AVPixelFormat.AV_PIX_FMT_YUV444P12LE,
47
+ 'I444A': AVPixelFormat.AV_PIX_FMT_YUVA444P,
48
+ 'I444AP10': AVPixelFormat.AV_PIX_FMT_YUVA444P10LE,
49
+ 'I444AP12': AVPixelFormat.AV_PIX_FMT_YUVA444P12LE,
50
+ 'NV12': AVPixelFormat.AV_PIX_FMT_NV12,
51
+ 'RGBA': AVPixelFormat.AV_PIX_FMT_RGBA,
52
+ 'RGBX': AVPixelFormat.AV_PIX_FMT_RGB0
53
+ }
54
+
55
+ export const colorSpaceMap: Record<VideoMatrixCoefficients, AVColorSpace> = {
56
+ 'bt709': AVColorSpace.AVCOL_SPC_BT709,
57
+ 'smpte170m': AVColorSpace.AVCOL_SPC_SMPTE170M,
58
+ 'bt470bg': AVColorSpace.AVCOL_SPC_BT470BG,
59
+ // @ts-ignore
60
+ 'bt2020-ncl': AVColorSpace.AVCOL_SPC_BT2020_NCL,
61
+ 'rgb': AVColorSpace.AVCOL_SPC_RGB
62
+ }
63
+
64
+ export const colorPrimariesMap: Record<VideoColorPrimaries, AVColorPrimaries> = {
65
+ 'bt709': AVColorPrimaries.AVCOL_PRI_BT709,
66
+ 'bt470bg': AVColorPrimaries.AVCOL_PRI_BT470BG,
67
+ 'smpte170m': AVColorPrimaries.AVCOL_PRI_SMPTE170M,
68
+ // @ts-ignore
69
+ 'bt2020': AVColorPrimaries.AVCOL_PRI_BT2020,
70
+ 'smpte432': AVColorPrimaries.AVCOL_PRI_SMPTE432
71
+ }
72
+
73
+ export const colorTrcMap: Record<VideoTransferCharacteristics, AVColorTransferCharacteristic> = {
74
+ 'bt709': AVColorTransferCharacteristic.AVCOL_TRC_BT709,
75
+ 'iec61966-2-1': AVColorTransferCharacteristic.AVCOL_TRC_IEC61966_2_1,
76
+ 'smpte170m': AVColorTransferCharacteristic.AVCOL_TRC_SMPTE170M,
77
+ // @ts-ignore
78
+ 'linear': AVColorTransferCharacteristic.AVCOL_TRC_LINEAR,
79
+ 'pq': AVColorTransferCharacteristic.AVCOL_TRC_SMPTE2084,
80
+ 'hlg': AVColorTransferCharacteristic.AVCOL_TRC_ARIB_STD_B67
81
+ }
@@ -0,0 +1,62 @@
1
+ /* libmedia EncodedAudioChunk to AVPacket utils
2
+ *
3
+ * 版权所有 (C) 2024 赵高兴
4
+ * Copyright (C) 2024 Gaoxing Zhao
5
+ *
6
+ * 此文件是 libmedia 的一部分
7
+ * This file is part of libmedia.
8
+ *
9
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
10
+ * 或任何其更新的版本条款重新分发或修改它
11
+ * libmedia is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 3.1 of the License, or (at your option) any later version.
15
+ *
16
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
17
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
18
+ * libmedia is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ */
24
+
25
+ import { addAVPacketData, addAVPacketSideData, createAVPacket } from '../util/avpacket'
26
+ import type AVPacket from '../struct/avpacket'
27
+ import { AVPacketFlags } from '../struct/avpacket'
28
+ import { avMalloc } from '../util/mem'
29
+ import { mapUint8Array, memcpyFromUint8Array } from '@libmedia/cheap'
30
+ import { AV_TIME_BASE, NOPTS_VALUE_BIGINT } from '../constant'
31
+ import { AVPacketSideDataType } from '../codec'
32
+
33
+ export default function encodedAudioChunk2AVPacket(chunk: EncodedAudioChunk, avpacket: pointer<AVPacket> = nullptr, metadata?: EncodedAudioChunkMetadata) {
34
+ if (avpacket === nullptr) {
35
+ avpacket = createAVPacket()
36
+ }
37
+
38
+ avpacket.pts = avpacket.dts = static_cast<int64>(chunk.timestamp)
39
+ avpacket.duration = chunk.duration == null ? NOPTS_VALUE_BIGINT : static_cast<int64>(chunk.duration)
40
+ avpacket.timeBase.den = AV_TIME_BASE
41
+ avpacket.timeBase.num = 1
42
+ avpacket.flags |= AVPacketFlags.AV_PKT_FLAG_KEY
43
+ const data: pointer<uint8> = avMalloc(chunk.byteLength)
44
+ chunk.copyTo(mapUint8Array(data, chunk.byteLength))
45
+ addAVPacketData(avpacket, data, chunk.byteLength)
46
+
47
+ if (metadata) {
48
+ if (metadata.decoderConfig?.description) {
49
+ let buffer: Uint8Array
50
+ if (metadata.decoderConfig.description instanceof ArrayBuffer) {
51
+ buffer = new Uint8Array(metadata.decoderConfig.description)
52
+ }
53
+ else {
54
+ // @ts-ignore
55
+ buffer = new Uint8Array(metadata.decoderConfig.description.buffer)
56
+ }
57
+ const extradata = avMalloc(buffer.length)
58
+ memcpyFromUint8Array(extradata, buffer.length, buffer)
59
+ addAVPacketSideData(avpacket, AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA, extradata, buffer.length)
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,86 @@
1
+ /* libmedia EncodedVideoChunk to AVPacket utils
2
+ *
3
+ * 版权所有 (C) 2024 赵高兴
4
+ * Copyright (C) 2024 Gaoxing Zhao
5
+ *
6
+ * 此文件是 libmedia 的一部分
7
+ * This file is part of libmedia.
8
+ *
9
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
10
+ * 或任何其更新的版本条款重新分发或修改它
11
+ * libmedia is free software; you can redistribute it and/or
12
+ * modify it under the terms of the GNU Lesser General Public
13
+ * License as published by the Free Software Foundation; either
14
+ * version 3.1 of the License, or (at your option) any later version.
15
+ *
16
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
17
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
18
+ * libmedia is distributed in the hope that it will be useful,
19
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ * Lesser General Public License for more details.
22
+ *
23
+ */
24
+
25
+ import { addAVPacketData, addAVPacketSideData, createAVPacket } from '../util/avpacket'
26
+ import type AVPacket from '../struct/avpacket'
27
+ import { AVPacketFlags } from '../struct/avpacket'
28
+ import { avMalloc } from '../util/mem'
29
+ import { mapUint8Array, memcpyFromUint8Array } from '@libmedia/cheap'
30
+ import { AV_TIME_BASE, NOPTS_VALUE_BIGINT } from '../constant'
31
+ import { AVPacketSideDataType } from '../codec'
32
+ import * as intwrite from '../util/intwrite'
33
+
34
+ export default function encodedVideoChunk2AVPacket(chunk: EncodedVideoChunk, avpacket: pointer<AVPacket> = nullptr, metadata?: EncodedVideoChunkMetadata & {
35
+ svc?: {
36
+ temporalLayerId: number
37
+ }
38
+ alphaSideData?: BufferSource
39
+ }) {
40
+ if (avpacket === nullptr) {
41
+ avpacket = createAVPacket()
42
+ }
43
+
44
+ avpacket.pts = static_cast<int64>(chunk.timestamp)
45
+ avpacket.timeBase.den = AV_TIME_BASE
46
+ avpacket.timeBase.num = 1
47
+ avpacket.duration = chunk.duration == null ? NOPTS_VALUE_BIGINT : static_cast<int64>(chunk.duration)
48
+ const data: pointer<uint8> = avMalloc(chunk.byteLength)
49
+ chunk.copyTo(mapUint8Array(data, chunk.byteLength))
50
+
51
+ addAVPacketData(avpacket, data, chunk.byteLength)
52
+
53
+ if (metadata) {
54
+ if (metadata.decoderConfig?.description) {
55
+ let buffer: Uint8Array
56
+ if (metadata.decoderConfig.description instanceof ArrayBuffer) {
57
+ buffer = new Uint8Array(metadata.decoderConfig.description)
58
+ }
59
+ else {
60
+ // @ts-ignore
61
+ buffer = new Uint8Array(metadata.decoderConfig.description.buffer)
62
+ }
63
+ const extradata = avMalloc(buffer.length)
64
+ memcpyFromUint8Array(extradata, buffer.length, buffer)
65
+ addAVPacketSideData(avpacket, AVPacketSideDataType.AV_PKT_DATA_NEW_EXTRADATA, extradata, buffer.length)
66
+ }
67
+ if (metadata.alphaSideData) {
68
+ const extradata = avMalloc(metadata.alphaSideData.byteLength + 8)
69
+ let buffer: Uint8Array
70
+ if (metadata.alphaSideData instanceof ArrayBuffer) {
71
+ buffer = new Uint8Array(metadata.alphaSideData)
72
+ }
73
+ else {
74
+ buffer = new Uint8Array(metadata.alphaSideData.buffer)
75
+ }
76
+ // 1 stands for alpha channel data
77
+ intwrite.wb64(data, 1n)
78
+ memcpyFromUint8Array(extradata + 8, buffer.length, buffer)
79
+ addAVPacketSideData(avpacket, AVPacketSideDataType.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, extradata, buffer.length)
80
+ }
81
+ }
82
+
83
+ if (chunk.type === 'key') {
84
+ avpacket.flags |= AVPacketFlags.AV_PKT_FLAG_KEY
85
+ }
86
+ }
@@ -0,0 +1,45 @@
1
+ /*
2
+ * libmedia generate audio codec string
3
+ *
4
+ * 版权所有 (C) 2024 赵高兴
5
+ * Copyright (C) 2024 Gaoxing Zhao
6
+ *
7
+ * 此文件是 libmedia 的一部分
8
+ * This file is part of libmedia.
9
+ *
10
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
11
+ * 或任何其更新的版本条款重新分发或修改它
12
+ * libmedia is free software; you can redistribute it and/or
13
+ * modify it under the terms of the GNU Lesser General Public
14
+ * License as published by the Free Software Foundation; either
15
+ * version 3.1 of the License, or (at your option) any later version.
16
+ *
17
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
18
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
19
+ * libmedia is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22
+ * Lesser General Public License for more details.
23
+ *
24
+ */
25
+
26
+ import { AVCodecID } from '../codec'
27
+ import { CodecId2MimeType } from '../stringEnum'
28
+ import type AVCodecParameters from '../struct/avcodecparameters'
29
+
30
+ export default function getAudioCodec(codecpar: pointer<AVCodecParameters>) {
31
+
32
+ const codecId = codecpar.codecId
33
+ let profile = codecpar.profile
34
+
35
+ let codec = CodecId2MimeType[codecId]
36
+
37
+ if (codecId === AVCodecID.AV_CODEC_ID_AAC) {
38
+ /*
39
+ * mp4a.40.profile
40
+ * url: https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter#iso_base_media_file_format_mp4_quicktime_and_3gp
41
+ */
42
+ codec = `${codec}.${profile}`
43
+ }
44
+ return codec || 'unknown'
45
+ }
@@ -0,0 +1,44 @@
1
+ /*
2
+ * libmedia get audio mimetype
3
+ *
4
+ * 版权所有 (C) 2024 赵高兴
5
+ * Copyright (C) 2024 Gaoxing Zhao
6
+ *
7
+ * 此文件是 libmedia 的一部分
8
+ * This file is part of libmedia.
9
+ *
10
+ * libmedia 是自由软件;您可以根据 GNU Lesser General Public License(GNU LGPL)3.1
11
+ * 或任何其更新的版本条款重新分发或修改它
12
+ * libmedia is free software; you can redistribute it and/or
13
+ * modify it under the terms of the GNU Lesser General Public
14
+ * License as published by the Free Software Foundation; either
15
+ * version 3.1 of the License, or (at your option) any later version.
16
+ *
17
+ * libmedia 希望能够为您提供帮助,但不提供任何明示或暗示的担保,包括但不限于适销性或特定用途的保证
18
+ * 您应自行承担使用 libmedia 的风险,并且需要遵守 GNU Lesser General Public License 中的条款和条件。
19
+ * libmedia is distributed in the hope that it will be useful,
20
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22
+ * Lesser General Public License for more details.
23
+ *
24
+ */
25
+
26
+ import {
27
+ browser
28
+ } from '@libmedia/common'
29
+
30
+ import getAudioCodec from './getAudioCodec'
31
+ import { AVCodecID } from '../codec'
32
+ import type AVCodecParameters from '../struct/avcodecparameters'
33
+
34
+ export default function getAudioMimeType(codecpar: pointer<AVCodecParameters>) {
35
+ let mimeType = ''
36
+ // firefox supports 'audio/mp4, codecs="mp3"', use 'audio/mpeg' for chrome, safari
37
+ if (codecpar.codecId === AVCodecID.AV_CODEC_ID_MP3 && !browser.firefox) {
38
+ mimeType = 'audio/mpeg'
39
+ }
40
+ else {
41
+ mimeType = `audio/mp4; codecs="${getAudioCodec(codecpar)}"`
42
+ }
43
+ return mimeType
44
+ }