@libmedia/avutil 1.1.0 → 1.3.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 (141) hide show
  1. package/dist/cjs/codecs/h264.cjs +8 -3
  2. package/dist/cjs/codecs/h264.js.map +1 -1
  3. package/dist/cjs/codecs/hevc.cjs +3 -3
  4. package/dist/cjs/codecs/hevc.js.map +1 -1
  5. package/dist/cjs/codecs/mpeg4.cjs +1 -1
  6. package/dist/cjs/codecs/mpeg4.js.map +1 -1
  7. package/dist/cjs/codecs/mpegvideo.cjs +1 -1
  8. package/dist/cjs/codecs/mpegvideo.js.map +1 -1
  9. package/dist/cjs/codecs/vp8.cjs +1 -1
  10. package/dist/cjs/codecs/vp8.js.map +1 -1
  11. package/dist/cjs/codecs/vp9.cjs +1 -1
  12. package/dist/cjs/codecs/vp9.js.map +1 -1
  13. package/dist/cjs/codecs/vvc.cjs +3 -3
  14. package/dist/cjs/codecs/vvc.js.map +1 -1
  15. package/dist/cjs/function/audioData2AVFrame.cjs +7 -9
  16. package/dist/cjs/function/audioData2AVFrame.js.map +1 -1
  17. package/dist/cjs/function/avframe2VideoFrame.cjs +3 -2
  18. package/dist/cjs/function/avframe2VideoFrame.js.map +1 -1
  19. package/dist/cjs/function/videoFrame2AVFrame.cjs +12 -18
  20. package/dist/cjs/function/videoFrame2AVFrame.js.map +1 -1
  21. package/dist/cjs/struct/audiosample.cjs +113 -111
  22. package/dist/cjs/struct/audiosample.js.map +1 -1
  23. package/dist/cjs/struct/avbuffer.cjs +274 -269
  24. package/dist/cjs/struct/avbuffer.js.map +1 -1
  25. package/dist/cjs/struct/avcodecparameters.cjs +328 -326
  26. package/dist/cjs/struct/avcodecparameters.js.map +1 -1
  27. package/dist/cjs/struct/avdict.cjs +56 -54
  28. package/dist/cjs/struct/avdict.js.map +1 -1
  29. package/dist/cjs/struct/avframe.cjs +630 -625
  30. package/dist/cjs/struct/avframe.js.map +1 -1
  31. package/dist/cjs/struct/avpacket.cjs +232 -228
  32. package/dist/cjs/struct/avpacket.js.map +1 -1
  33. package/dist/cjs/struct/avpcmbuffer.cjs +116 -113
  34. package/dist/cjs/struct/avpcmbuffer.js.map +1 -1
  35. package/dist/cjs/struct/encryption.cjs +214 -211
  36. package/dist/cjs/struct/encryption.js.map +1 -1
  37. package/dist/cjs/struct/rational.cjs +28 -26
  38. package/dist/cjs/struct/rational.js.map +1 -1
  39. package/dist/esm/AVStream.d.ts +4 -4
  40. package/dist/esm/codecs/aac.d.ts +2 -2
  41. package/dist/esm/codecs/av1.d.ts +2 -2
  42. package/dist/esm/codecs/flac.d.ts +2 -2
  43. package/dist/esm/codecs/h264.d.ts +11 -4
  44. package/dist/esm/codecs/h264.js +8 -3
  45. package/dist/esm/codecs/h264.js.map +1 -1
  46. package/dist/esm/codecs/hevc.d.ts +11 -4
  47. package/dist/esm/codecs/hevc.js +3 -3
  48. package/dist/esm/codecs/hevc.js.map +1 -1
  49. package/dist/esm/codecs/mp3.d.ts +2 -2
  50. package/dist/esm/codecs/mpeg4.d.ts +8 -2
  51. package/dist/esm/codecs/mpeg4.js +1 -1
  52. package/dist/esm/codecs/mpeg4.js.map +1 -1
  53. package/dist/esm/codecs/mpegvideo.d.ts +8 -2
  54. package/dist/esm/codecs/mpegvideo.js +1 -1
  55. package/dist/esm/codecs/mpegvideo.js.map +1 -1
  56. package/dist/esm/codecs/opus.d.ts +2 -2
  57. package/dist/esm/codecs/vp8.d.ts +10 -4
  58. package/dist/esm/codecs/vp8.js +1 -1
  59. package/dist/esm/codecs/vp8.js.map +1 -1
  60. package/dist/esm/codecs/vp9.d.ts +10 -4
  61. package/dist/esm/codecs/vp9.js +1 -1
  62. package/dist/esm/codecs/vp9.js.map +1 -1
  63. package/dist/esm/codecs/vvc.d.ts +11 -4
  64. package/dist/esm/codecs/vvc.js +3 -3
  65. package/dist/esm/codecs/vvc.js.map +1 -1
  66. package/dist/esm/constant.d.ts +1 -1
  67. package/dist/esm/function/analyzeAVFormat.d.ts +1 -1
  68. package/dist/esm/function/analyzeUrlIOLoader.d.ts +1 -1
  69. package/dist/esm/function/audioData2AVFrame.d.ts +2 -2
  70. package/dist/esm/function/audioData2AVFrame.js +8 -11
  71. package/dist/esm/function/audioData2AVFrame.js.map +1 -1
  72. package/dist/esm/function/avPCMBuffer2AVFrame.d.ts +2 -2
  73. package/dist/esm/function/avframe2AudioData.d.ts +1 -1
  74. package/dist/esm/function/avframe2VideoFrame.d.ts +2 -2
  75. package/dist/esm/function/avframe2VideoFrame.js +3 -3
  76. package/dist/esm/function/avframe2VideoFrame.js.map +1 -1
  77. package/dist/esm/function/avpacket2EncodedAudioChunk.d.ts +1 -1
  78. package/dist/esm/function/avpacket2EncodedVideoChunk.d.ts +1 -1
  79. package/dist/esm/function/constant/webcodecs.d.ts +1 -1
  80. package/dist/esm/function/encodedAudioChunk2AVPacket.d.ts +1 -1
  81. package/dist/esm/function/encodedVideoChunk2AVPacket.d.ts +1 -1
  82. package/dist/esm/function/getAudioCodec.d.ts +1 -1
  83. package/dist/esm/function/getAudioMimeType.d.ts +1 -1
  84. package/dist/esm/function/getVideoCodec.d.ts +1 -1
  85. package/dist/esm/function/getVideoMimeType.d.ts +1 -1
  86. package/dist/esm/function/getWasmUrl.d.ts +1 -1
  87. package/dist/esm/function/hasAlphaChannel.d.ts +1 -1
  88. package/dist/esm/function/isHdr.d.ts +1 -1
  89. package/dist/esm/function/videoFrame2AVFrame.d.ts +3 -3
  90. package/dist/esm/function/videoFrame2AVFrame.js +12 -21
  91. package/dist/esm/function/videoFrame2AVFrame.js.map +1 -1
  92. package/dist/esm/implement/AVFramePoolImpl.d.ts +2 -2
  93. package/dist/esm/implement/AVPCMBufferPoolImpl.d.ts +2 -2
  94. package/dist/esm/implement/AVPacketPoolImpl.d.ts +2 -2
  95. package/dist/esm/index.d.ts +54 -54
  96. package/dist/esm/internal.d.ts +26 -26
  97. package/dist/esm/pixelFormatDescriptor.d.ts +1 -1
  98. package/dist/esm/sampleFormatDescriptor.d.ts +1 -1
  99. package/dist/esm/stringEnum.d.ts +5 -5
  100. package/dist/esm/struct/audiosample.d.ts +1 -1
  101. package/dist/esm/struct/audiosample.js +105 -106
  102. package/dist/esm/struct/avbuffer.js +262 -265
  103. package/dist/esm/struct/avbuffer.js.map +1 -1
  104. package/dist/esm/struct/avcodecparameters.d.ts +7 -7
  105. package/dist/esm/struct/avcodecparameters.js +325 -325
  106. package/dist/esm/struct/avdict.js +50 -51
  107. package/dist/esm/struct/avframe.d.ts +6 -6
  108. package/dist/esm/struct/avframe.js +615 -619
  109. package/dist/esm/struct/avframe.js.map +1 -1
  110. package/dist/esm/struct/avpacket.d.ts +3 -3
  111. package/dist/esm/struct/avpacket.js +220 -223
  112. package/dist/esm/struct/avpacket.js.map +1 -1
  113. package/dist/esm/struct/avpcmbuffer.d.ts +1 -1
  114. package/dist/esm/struct/avpcmbuffer.js +110 -111
  115. package/dist/esm/struct/avsubtitle.d.ts +1 -1
  116. package/dist/esm/struct/encryption.js +205 -207
  117. package/dist/esm/struct/encryption.js.map +1 -1
  118. package/dist/esm/struct/rational.js +25 -25
  119. package/dist/esm/util/avbuffer.d.ts +2 -2
  120. package/dist/esm/util/avdict.d.ts +2 -2
  121. package/dist/esm/util/avframe.d.ts +2 -2
  122. package/dist/esm/util/avpacket.d.ts +2 -2
  123. package/dist/esm/util/channel.d.ts +1 -1
  124. package/dist/esm/util/codecparameters.d.ts +3 -3
  125. package/dist/esm/util/encryption.d.ts +1 -1
  126. package/dist/esm/util/pcm.d.ts +1 -1
  127. package/dist/esm/util/pixel.d.ts +1 -1
  128. package/dist/esm/util/rational.d.ts +1 -1
  129. package/dist/esm/util/sample.d.ts +1 -1
  130. package/dist/esm/util/serialize.d.ts +6 -6
  131. package/package.json +3 -3
  132. package/src/codecs/h264.ts +17 -1
  133. package/src/codecs/hevc.ts +15 -3
  134. package/src/codecs/mpeg4.ts +7 -1
  135. package/src/codecs/mpegvideo.ts +7 -1
  136. package/src/codecs/vp8.ts +7 -1
  137. package/src/codecs/vp9.ts +7 -1
  138. package/src/codecs/vvc.ts +15 -3
  139. package/src/function/audioData2AVFrame.ts +3 -3
  140. package/src/function/avframe2VideoFrame.ts +6 -3
  141. package/src/function/videoFrame2AVFrame.ts +3 -3
@@ -8,30 +8,30 @@ export class AVRational {
8
8
  constructor(init) {
9
9
  init && (this.den = init.den, this.num = init.num);
10
10
  }
11
+ static {
12
+ const prototype = this.prototype, map = new Map;
13
+ map.set("num", {
14
+ 0: 15,
15
+ 1: 0,
16
+ 2: 0,
17
+ 3: 0,
18
+ 4: 0,
19
+ 5: 0,
20
+ 6: 0,
21
+ 7: 0,
22
+ 8: 0
23
+ }), map.set("den", {
24
+ 0: 15,
25
+ 1: 0,
26
+ 2: 0,
27
+ 3: 0,
28
+ 4: 0,
29
+ 5: 0,
30
+ 6: 0,
31
+ 7: 4,
32
+ 8: 0
33
+ }), cheap__definedMetaProperty__0(prototype, cheap__symbolStruct__1, !0), cheap__definedMetaProperty__0(prototype, cheap__symbolStructMaxBaseTypeByteLength__2, 4),
34
+ cheap__definedMetaProperty__0(prototype, cheap__symbolStructLength__3, 8), cheap__definedMetaProperty__0(prototype, cheap__symbolStructKeysMeta__4, map);
35
+ }
11
36
  }
12
-
13
- var prototype, map;
14
-
15
- prototype = AVRational.prototype, (map = new Map).set("num", {
16
- 0: 15,
17
- 1: 0,
18
- 2: 0,
19
- 3: 0,
20
- 4: 0,
21
- 5: 0,
22
- 6: 0,
23
- 7: 0,
24
- 8: 0
25
- }), map.set("den", {
26
- 0: 15,
27
- 1: 0,
28
- 2: 0,
29
- 3: 0,
30
- 4: 0,
31
- 5: 0,
32
- 6: 0,
33
- 7: 4,
34
- 8: 0
35
- }), cheap__definedMetaProperty__0(prototype, cheap__symbolStruct__1, !0), cheap__definedMetaProperty__0(prototype, cheap__symbolStructMaxBaseTypeByteLength__2, 4),
36
- cheap__definedMetaProperty__0(prototype, cheap__symbolStructLength__3, 8), cheap__definedMetaProperty__0(prototype, cheap__symbolStructKeysMeta__4, map);
37
37
  //# sourceMappingURL=rational.js.map
@@ -1,5 +1,5 @@
1
- import type { AVBufferPool } from "../struct/avbuffer.d.ts";
2
- import { AVBuffer, AVBufferRef } from "../struct/avbuffer.d.ts";
1
+ import type { AVBufferPool } from "../struct/avbuffer.ts";
2
+ import { AVBuffer, AVBufferRef } from "../struct/avbuffer.ts";
3
3
  export declare function bufferCreate(buf: pointer<AVBuffer>, data: pointer<uint8>, size: size, free?: pointer<(opaque: pointer<void>, data: pointer<uint8>) => void>, opaque?: pointer<void>, flags?: int32): pointer<AVBufferRef>;
4
4
  export declare function avbufferCreate(data: pointer<uint8>, size: size, free?: pointer<(opaque: pointer<void>, data: pointer<uint8>) => void>, opaque?: pointer<void>, flags?: int32): pointer<AVBufferRef>;
5
5
  export declare function avbufferAlloc(size: size): pointer<AVBufferRef>;
@@ -1,5 +1,5 @@
1
- import type { AVDictionary } from "../struct/avdict.d.ts";
2
- import { AVDictionaryEntry } from "../struct/avdict.d.ts";
1
+ import type { AVDictionary } from "../struct/avdict.ts";
2
+ import { AVDictionaryEntry } from "../struct/avdict.ts";
3
3
  export declare function freeAVDict(pm: pointer<pointer<AVDictionary>>): void;
4
4
  export declare function freeAVDict2(m: pointer<AVDictionary>): void;
5
5
  export declare function avDictCount(m: pointer<AVDictionary>): 0 | int32;
@@ -1,5 +1,5 @@
1
- import type { AVFrameSideDataType } from "../struct/avframe.d.ts";
2
- import AVFrame, { AVFrameSideData } from "../struct/avframe.d.ts";
1
+ import type { AVFrameSideDataType } from "../struct/avframe.ts";
2
+ import AVFrame, { AVFrameSideData } from "../struct/avframe.ts";
3
3
  export declare enum AV_FRAME_SIDE_DATA_FLAG {
4
4
  UNIQUE = 1
5
5
  }
@@ -1,5 +1,5 @@
1
- import AVPacket, { AVPacketSideData } from "../struct/avpacket.d.ts";
2
- import type { AVPacketSideDataType } from "../codec.d.ts";
1
+ import AVPacket, { AVPacketSideData } from "../struct/avpacket.ts";
2
+ import type { AVPacketSideDataType } from "../codec.ts";
3
3
  import { type SafeUint8Array } from "@libmedia/cheap";
4
4
  export declare function getAVPacketData(avpacket: pointer<AVPacket>): Uint8Array<ArrayBufferLike>;
5
5
  export declare function getAVPacketData(avpacket: pointer<AVPacket>, safe: boolean): SafeUint8Array;
@@ -1,4 +1,4 @@
1
- import type { AVChannelLayout } from "../struct/audiosample.d.ts";
1
+ import type { AVChannelLayout } from "../struct/audiosample.ts";
2
2
  export declare function getChannelLayoutNBChannels(layout: uint64): number;
3
3
  export declare function unInitChannelLayout(channelLayout: pointer<AVChannelLayout>): void;
4
4
  export declare function setChannelLayoutFromMask(channelLayout: pointer<AVChannelLayout>, mask: uint64): 0 | -3;
@@ -1,6 +1,6 @@
1
- import type AVCodecParameters from "../struct/avcodecparameters.d.ts";
2
- export { default as isHdr } from '../function/isHdr.d.ts';
3
- export { default as hasAlphaChannel } from '../function/hasAlphaChannel.d.ts';
1
+ import type AVCodecParameters from "../struct/avcodecparameters.ts";
2
+ export { default as isHdr } from '../function/isHdr.ts';
3
+ export { default as hasAlphaChannel } from '../function/hasAlphaChannel.ts';
4
4
  export declare function copyCodecParameters(dst: pointer<AVCodecParameters>, src: pointer<AVCodecParameters>): void;
5
5
  export declare function resetCodecParameters(par: pointer<AVCodecParameters>): void;
6
6
  export declare function freeCodecParameters(par: pointer<AVCodecParameters>): void;
@@ -1,4 +1,4 @@
1
- import type { EncryptionInfo, EncryptionInitInfo } from "../struct/encryption.d.ts";
1
+ import type { EncryptionInfo, EncryptionInitInfo } from "../struct/encryption.ts";
2
2
  import { type Uint8ArrayInterface } from "@libmedia/common/io";
3
3
  export declare function encryptionSideData2Info(buffer: Uint8ArrayInterface): EncryptionInfo;
4
4
  export declare function encryptionInfo2SideData(info: EncryptionInfo): Uint8Array;
@@ -1,4 +1,4 @@
1
- import { AVCodecID } from "../codec.d.ts";
1
+ import { AVCodecID } from "../codec.ts";
2
2
  export declare function getPcmCodecId(bps: int32, flt: boolean, be: boolean, flags: int32): AVCodecID.AV_CODEC_ID_NONE | AVCodecID.AV_CODEC_ID_FIRST_AUDIO | AVCodecID.AV_CODEC_ID_PCM_S16BE | AVCodecID.AV_CODEC_ID_PCM_U16LE | AVCodecID.AV_CODEC_ID_PCM_U16BE | AVCodecID.AV_CODEC_ID_PCM_S8 | AVCodecID.AV_CODEC_ID_PCM_U8 | AVCodecID.AV_CODEC_ID_PCM_S32LE | AVCodecID.AV_CODEC_ID_PCM_S32BE | AVCodecID.AV_CODEC_ID_PCM_U32LE | AVCodecID.AV_CODEC_ID_PCM_U32BE | AVCodecID.AV_CODEC_ID_PCM_S24LE | AVCodecID.AV_CODEC_ID_PCM_S24BE | AVCodecID.AV_CODEC_ID_PCM_U24LE | AVCodecID.AV_CODEC_ID_PCM_U24BE | AVCodecID.AV_CODEC_ID_PCM_F32BE | AVCodecID.AV_CODEC_ID_PCM_F32LE | AVCodecID.AV_CODEC_ID_PCM_F64BE | AVCodecID.AV_CODEC_ID_PCM_F64LE | AVCodecID.AV_CODEC_ID_PCM_S64LE | AVCodecID.AV_CODEC_ID_PCM_S64BE;
3
3
  export declare function getExactBitsPerSample(codecId: AVCodecID): 0 | 4 | 8 | 16 | 32 | 64 | 24;
4
4
  export declare function getBitsPerSample(codecId: AVCodecID): 0 | 2 | 3 | 4 | 8 | 16 | 32 | 64 | 24;
@@ -1,4 +1,4 @@
1
- import { AVChromaLocation, AVPixelFormat } from "../pixfmt.d.ts";
1
+ import { AVChromaLocation, AVPixelFormat } from "../pixfmt.ts";
2
2
  export declare function chromaLocation2Pos(pos: AVChromaLocation): {
3
3
  x: number;
4
4
  y: number;
@@ -1,4 +1,4 @@
1
- import type { AVRational } from "../struct/rational.d.ts";
1
+ import type { AVRational } from "../struct/rational.ts";
2
2
  /**
3
3
  * 将一个时间戳由一个时间基转换到另一个时间基
4
4
  *
@@ -1,4 +1,4 @@
1
- import { AVSampleFormat } from "../audiosamplefmt.d.ts";
1
+ import { AVSampleFormat } from "../audiosamplefmt.ts";
2
2
  export declare function getBytesPerSample(format: AVSampleFormat): number;
3
3
  export declare function sampleFormatIsPlanar(format: AVSampleFormat): boolean;
4
4
  export declare function sampleFormatGetLinesize(format: AVSampleFormat, channels: int32, nbSamples: int32, align?: int32): number;
@@ -1,9 +1,9 @@
1
- import type { AVCodecID, AVMediaType, AVPacketSideDataType } from "../codec.d.ts";
2
- import type AVPacket from "../struct/avpacket.d.ts";
3
- import type { AVRational } from "../struct/rational.d.ts";
4
- import type { AVChromaLocation, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVFieldOrder, AVPixelFormat } from "../pixfmt.d.ts";
5
- import type { AVChannelOrder, AVSampleFormat } from "../audiosamplefmt.d.ts";
6
- import AVCodecParameters from "../struct/avcodecparameters.d.ts";
1
+ import type { AVCodecID, AVMediaType, AVPacketSideDataType } from "../codec.ts";
2
+ import type AVPacket from "../struct/avpacket.ts";
3
+ import type { AVRational } from "../struct/rational.ts";
4
+ import type { AVChromaLocation, AVColorPrimaries, AVColorRange, AVColorSpace, AVColorTransferCharacteristic, AVFieldOrder, AVPixelFormat } from "../pixfmt.ts";
5
+ import type { AVChannelOrder, AVSampleFormat } from "../audiosamplefmt.ts";
6
+ import AVCodecParameters from "../struct/avcodecparameters.ts";
7
7
  export interface AVPacketSerialize {
8
8
  pts: int64;
9
9
  dts: int64;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libmedia/avutil",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "libmedia 工具模块",
5
5
  "sideEffects": false,
6
6
  "repository": {
@@ -18,8 +18,8 @@
18
18
  "author": "Gaoxing Zhao",
19
19
  "license": "LGPL-3.0-or-later",
20
20
  "dependencies": {
21
- "@libmedia/common": "~2.1.0",
22
- "@libmedia/cheap": "~1.1.0"
21
+ "@libmedia/common": "~2.3.0",
22
+ "@libmedia/cheap": "~1.3.0"
23
23
  },
24
24
  "type": "module",
25
25
  "types": "./dist/esm/index.d.ts",
@@ -662,12 +662,22 @@ export function parseAVCodecParameters(
662
662
  }
663
663
  }
664
664
 
665
- export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
665
+ /**
666
+ * 判断是否是随机访问点
667
+ *
668
+ * @param avpacket
669
+ * @param naluLengthSize
670
+ * @returns
671
+ */
672
+ export function isRAP(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
666
673
  if (avpacket.flags & AVPacketFlags.AV_PKT_FLAG_H26X_ANNEXB) {
667
674
  let nalus = naluUtil.splitNaluByStartCode(mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size)))
668
675
  return nalus.some((nalu) => {
669
676
  const type = nalu[0] & 0x1f
670
677
  return type === H264NaluType.kSliceIDR
678
+ // H.264 Recovery Point SEI
679
+ || type === H264NaluType.kSliceSEI
680
+ && nalu[1] === 6
671
681
  })
672
682
  }
673
683
  else {
@@ -678,6 +688,12 @@ export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
678
688
  if (type === H264NaluType.kSliceIDR) {
679
689
  return true
680
690
  }
691
+ // H.264 Recovery Point SEI
692
+ if (type === H264NaluType.kSliceSEI
693
+ && intread.r8(avpacket.data + (i + naluLengthSize) + 1) === 6
694
+ ) {
695
+ return true
696
+ }
681
697
  if (naluLengthSize === 4) {
682
698
  i += intread.rb32(avpacket.data + i)
683
699
  }
@@ -702,12 +702,21 @@ export function parseAVCodecParameters(
702
702
  }
703
703
  }
704
704
 
705
- export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
705
+ /**
706
+ * 判断是否是随机访问点
707
+ *
708
+ * @param avpacket
709
+ * @param naluLengthSize
710
+ * @returns
711
+ */
712
+ export function isRAP(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
706
713
  if (avpacket.flags & AVPacketFlags.AV_PKT_FLAG_H26X_ANNEXB) {
707
714
  let nalus = naluUtil.splitNaluByStartCode(mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size)))
708
715
  return nalus.some((nalu) => {
709
716
  const type = (nalu[0] >>> 1) & 0x3f
710
- return type === HEVCNaluType.kSliceIDR_N_LP || type === HEVCNaluType.kSliceIDR_W_RADL
717
+ return type === HEVCNaluType.kSliceIDR_N_LP
718
+ || type === HEVCNaluType.kSliceIDR_W_RADL
719
+ || type === HEVCNaluType.kSliceCRA_NUT
711
720
  })
712
721
  }
713
722
  else {
@@ -715,7 +724,10 @@ export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
715
724
  let i = 0
716
725
  while (i < (size - naluLengthSize)) {
717
726
  const type = (intread.r8(avpacket.data + (i + naluLengthSize)) >>> 1) & 0x3f
718
- if (type === HEVCNaluType.kSliceIDR_N_LP || type === HEVCNaluType.kSliceIDR_W_RADL) {
727
+ if (type === HEVCNaluType.kSliceIDR_N_LP
728
+ || type === HEVCNaluType.kSliceIDR_W_RADL
729
+ || type === HEVCNaluType.kSliceCRA_NUT
730
+ ) {
719
731
  return true
720
732
  }
721
733
  if (naluLengthSize === 4) {
@@ -31,7 +31,13 @@ export const enum Mpeg4PictureType {
31
31
  B
32
32
  }
33
33
 
34
- export function isIDR(avpacket: pointer<AVPacket>) {
34
+ /**
35
+ * 判断是否是随机访问点
36
+ *
37
+ * @param avpacket
38
+ * @returns
39
+ */
40
+ export function isRAP(avpacket: pointer<AVPacket>) {
35
41
  const byte = accessof(reinterpret_cast<pointer<uint8>>(avpacket.data + 4))
36
42
  return (byte >>> 6) === Mpeg4PictureType.I
37
43
  }
@@ -32,7 +32,13 @@ export const enum MpegVideoPictureType {
32
32
  B
33
33
  }
34
34
 
35
- export function isIDR(avpacket: pointer<AVPacket>) {
35
+ /**
36
+ * 判断是否是随机访问点
37
+ *
38
+ * @param avpacket
39
+ * @returns
40
+ */
41
+ export function isRAP(avpacket: pointer<AVPacket>) {
36
42
  const data = getAVPacketData(avpacket)
37
43
 
38
44
  for (let i = 0; i < data.length - 6; i++) {
package/src/codecs/vp8.ts CHANGED
@@ -85,7 +85,13 @@ export function parseExtraData(extradata: Uint8ArrayInterface) {
85
85
  }
86
86
  }
87
87
 
88
- export function isIDR(avpacket: pointer<AVPacket>) {
88
+ /**
89
+ * 判断是否是随机访问点
90
+ *
91
+ * @param avpacket
92
+ * @returns
93
+ */
94
+ export function isRAP(avpacket: pointer<AVPacket>) {
89
95
  const first = accessof(avpacket.data)
90
96
  return !(first >>> 7)
91
97
  }
package/src/codecs/vp9.ts CHANGED
@@ -196,7 +196,13 @@ export function generateExtradata(codecpar: pointer<AVCodecParameters>) {
196
196
  return ioWriter.getWroteBuffer()
197
197
  }
198
198
 
199
- export function isIDR(avpacket: pointer<AVPacket>) {
199
+ /**
200
+ * 判断是否是随机访问点
201
+ *
202
+ * @param avpacket
203
+ * @returns
204
+ */
205
+ export function isRAP(avpacket: pointer<AVPacket>) {
200
206
  const first = accessof(avpacket.data)
201
207
 
202
208
  const version = (first >>> 5) & 0x01
package/src/codecs/vvc.ts CHANGED
@@ -807,12 +807,21 @@ export function parseAVCodecParameters(
807
807
  }
808
808
  }
809
809
 
810
- export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
810
+ /**
811
+ * 判断是否是随机访问点
812
+ *
813
+ * @param avpacket
814
+ * @param naluLengthSize
815
+ * @returns
816
+ */
817
+ export function isRAP(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
811
818
  if (avpacket.flags & AVPacketFlags.AV_PKT_FLAG_H26X_ANNEXB) {
812
819
  let nalus = naluUtil.splitNaluByStartCode(mapUint8Array(avpacket.data, reinterpret_cast<size>(avpacket.size)))
813
820
  return nalus.some((nalu) => {
814
821
  const type = (nalu[1] >>> 3) & 0x1f
815
- return type === VVCNaluType.kIDR_N_LP || type === VVCNaluType.kIDR_W_RADL
822
+ return type === VVCNaluType.kIDR_N_LP
823
+ || type === VVCNaluType.kIDR_W_RADL
824
+ || type === VVCNaluType.kCRA_NUT
816
825
  })
817
826
  }
818
827
  else {
@@ -820,7 +829,10 @@ export function isIDR(avpacket: pointer<AVPacket>, naluLengthSize: int32 = 4) {
820
829
  let i = 0
821
830
  while (i < (size - naluLengthSize)) {
822
831
  const type = (intread.r8(avpacket.data + (i + naluLengthSize + 1)) >>> 3) & 0x1f
823
- if (type === VVCNaluType.kIDR_N_LP || type === VVCNaluType.kIDR_W_RADL) {
832
+ if (type === VVCNaluType.kIDR_N_LP
833
+ || type === VVCNaluType.kIDR_W_RADL
834
+ || type === VVCNaluType.kCRA_NUT
835
+ ) {
824
836
  return true
825
837
  }
826
838
  if (naluLengthSize === 4) {
@@ -53,9 +53,9 @@ function mapFormat(format: AudioSampleFormat) {
53
53
  }
54
54
  }
55
55
 
56
- export function audioData2AVFrame(audioData: AudioData, avframe: pointer<AVFrame> = nullptr) {
56
+ export function audioData2AVFrame<T extends pointer<AVFrame> = pointer<AVFrame>>(audioData: AudioData, avframe: T = nullptr) {
57
57
  if (avframe === nullptr) {
58
- avframe = createAVFrame()
58
+ avframe = createAVFrame() as T
59
59
  }
60
60
 
61
61
  avframe.sampleRate = audioData.sampleRate
@@ -78,5 +78,5 @@ export function audioData2AVFrame(audioData: AudioData, avframe: pointer<AVFrame
78
78
  })
79
79
  }
80
80
 
81
- return avframe
81
+ return avframe as T
82
82
  }
@@ -25,9 +25,9 @@
25
25
 
26
26
  import type AVFrame from '../struct/avframe'
27
27
  import { getAVPixelFormatDescriptor } from '../pixelFormatDescriptor'
28
- import { AVColorRange, type AVPixelFormat } from '../pixfmt'
28
+ import { AVColorRange, AVPixelFormat } from '../pixfmt'
29
29
  import { avRescaleQ2 } from '../util/rational'
30
- import { AV_TIME_BASE_Q } from '../constant'
30
+ import { AV_TIME_BASE_Q, NOPTS_VALUE_BIGINT } from '../constant'
31
31
  import { getHeap } from '@libmedia/cheap/internal'
32
32
  import { object } from '@libmedia/common'
33
33
  import { pixelFormatMap, colorPrimariesMap, colorSpaceMap, colorTrcMap } from './constant/webcodecs'
@@ -38,6 +38,9 @@ const colorSpaceMapReverse = object.reverse(colorSpaceMap)
38
38
  const colorTrcMapReverse = object.reverse(colorTrcMap)
39
39
 
40
40
  export function avPixelFormat2Format(pixfmt: AVPixelFormat) {
41
+ if (pixfmt === AVPixelFormat.AV_PIX_FMT_YUVJ420P) {
42
+ return 'I420'
43
+ }
41
44
  return pixelFormatMapReverse[pixfmt] ?? null
42
45
  }
43
46
 
@@ -74,7 +77,7 @@ export function avframe2VideoFrame(avframe: pointer<AVFrame>, pts?: int64, video
74
77
  codedHeight: height,
75
78
  timestamp: pts ? static_cast<double>(pts) : static_cast<double>(avRescaleQ2(avframe.pts, addressof(avframe.timeBase), AV_TIME_BASE_Q)),
76
79
  format: avPixelFormat2Format(avframe.format),
77
- duration: static_cast<double>(avRescaleQ2(avframe.duration, addressof(avframe.timeBase), AV_TIME_BASE_Q)),
80
+ duration: avframe.duration !== NOPTS_VALUE_BIGINT ? static_cast<double>(avRescaleQ2(avframe.duration, addressof(avframe.timeBase), AV_TIME_BASE_Q)) : null,
78
81
  layout,
79
82
  colorSpace: getVideoColorSpaceInit(avframe),
80
83
  visibleRect: {
@@ -46,9 +46,9 @@ export function mapColorTrc(colorTrc: VideoTransferCharacteristics) {
46
46
  return colorTrcMap[colorTrc] ?? AVColorTransferCharacteristic.AVCOL_TRC_BT709
47
47
  }
48
48
 
49
- export async function videoFrame2AVFrame(videoFrame: VideoFrame, avframe: pointer<AVFrame> = nullptr) {
49
+ export async function videoFrame2AVFrame<T extends pointer<AVFrame> = pointer<AVFrame>>(videoFrame: VideoFrame, avframe: T = nullptr) {
50
50
  if (avframe === nullptr) {
51
- avframe = createAVFrame()
51
+ avframe = createAVFrame() as T
52
52
  }
53
53
  else {
54
54
  unrefAVFrame(avframe)
@@ -91,5 +91,5 @@ export async function videoFrame2AVFrame(videoFrame: VideoFrame, avframe: pointe
91
91
  layout
92
92
  })
93
93
 
94
- return avframe
94
+ return avframe as T
95
95
  }