bare-ffmpeg 1.0.0-9 → 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 (58) hide show
  1. package/CMakeLists.txt +32 -10
  2. package/README.md +65 -769
  3. package/binding.cc +5372 -0
  4. package/cmake/ports/ffmpeg/port.cmake +513 -0
  5. package/cmake/ports/libdrm/port.cmake +32 -0
  6. package/cmake/ports/libva/port.cmake +53 -0
  7. package/cmake/ports/opus/patches/01-windows-clang.patch +52 -0
  8. package/cmake/ports/opus/port.cmake +42 -0
  9. package/cmake/ports/svt-av1/port.cmake +42 -0
  10. package/cmake/ports/x264/patches/01-windows-clang.patch +33 -0
  11. package/cmake/ports/x264/port.cmake +162 -0
  12. package/index.js +28 -9
  13. package/lib/audio-fifo.js +47 -0
  14. package/lib/channel-layout.js +35 -0
  15. package/lib/codec-context.js +185 -7
  16. package/lib/codec-parameters.js +252 -4
  17. package/lib/codec.js +16 -0
  18. package/lib/constants.js +339 -12
  19. package/lib/dictionary.js +20 -0
  20. package/lib/errors.js +26 -0
  21. package/lib/filter-context.js +7 -0
  22. package/lib/filter-graph.js +42 -0
  23. package/lib/filter-inout.js +52 -0
  24. package/lib/filter.js +7 -0
  25. package/lib/format-context.js +42 -23
  26. package/lib/frame.js +81 -12
  27. package/lib/hw-device-context.js +31 -0
  28. package/lib/hw-frames-constraints.js +54 -0
  29. package/lib/hw-frames-context.js +92 -0
  30. package/lib/image.js +14 -3
  31. package/lib/input-format.js +36 -2
  32. package/lib/io-context.js +29 -4
  33. package/lib/log.js +16 -0
  34. package/lib/output-format.js +33 -2
  35. package/lib/packet.js +143 -1
  36. package/lib/rational.js +46 -1
  37. package/lib/resampler.js +23 -17
  38. package/lib/samples.js +85 -0
  39. package/lib/scaler.js +3 -9
  40. package/lib/stream.js +51 -14
  41. package/package.json +9 -5
  42. package/prebuilds/android-arm/bare-ffmpeg.bare +0 -0
  43. package/prebuilds/android-arm64/bare-ffmpeg.bare +0 -0
  44. package/prebuilds/android-ia32/bare-ffmpeg.bare +0 -0
  45. package/prebuilds/android-x64/bare-ffmpeg.bare +0 -0
  46. package/prebuilds/darwin-arm64/bare-ffmpeg.bare +0 -0
  47. package/prebuilds/darwin-x64/bare-ffmpeg.bare +0 -0
  48. package/prebuilds/ios-arm64/bare-ffmpeg.bare +0 -0
  49. package/prebuilds/ios-arm64-simulator/bare-ffmpeg.bare +0 -0
  50. package/prebuilds/ios-x64-simulator/bare-ffmpeg.bare +0 -0
  51. package/prebuilds/linux-arm64/bare-ffmpeg/libva-drm.so.2 +0 -0
  52. package/prebuilds/linux-arm64/bare-ffmpeg/libva.so.2 +0 -0
  53. package/prebuilds/linux-arm64/bare-ffmpeg.bare +0 -0
  54. package/prebuilds/linux-x64/bare-ffmpeg/libva-drm.so.2 +0 -0
  55. package/prebuilds/linux-x64/bare-ffmpeg/libva.so.2 +0 -0
  56. package/prebuilds/linux-x64/bare-ffmpeg.bare +0 -0
  57. package/prebuilds/win32-arm64/bare-ffmpeg.bare +0 -0
  58. package/prebuilds/win32-x64/bare-ffmpeg.bare +0 -0
@@ -1,30 +1,240 @@
1
1
  const binding = require('../binding')
2
+ const ChannelLayout = require('./channel-layout')
3
+ const Rational = require('./rational')
2
4
 
3
5
  module.exports = class FFmpegCodecParameters {
4
- constructor(handle) {
6
+ constructor(handle, owned = false) {
5
7
  this._handle = handle
8
+ this._owned = owned
6
9
  }
7
10
 
8
- destroy() {
9
- this._handle = null
10
- }
11
+ // Getters, Setters
11
12
 
12
13
  get bitRate() {
13
14
  return binding.getCodecParametersBitRate(this._handle)
14
15
  }
15
16
 
17
+ set bitRate(rate) {
18
+ binding.setCodecParametersBitRate(this._handle, rate)
19
+ }
20
+
16
21
  get bitsPerCodedSample() {
17
22
  return binding.getCodecParametersBitsPerCodedSample(this._handle)
18
23
  }
19
24
 
25
+ set bitsPerCodedSample(bits) {
26
+ binding.setCodecParametersBitsPerCodedSample(this._handle, bits)
27
+ }
28
+
20
29
  get bitsPerRawSample() {
21
30
  return binding.getCodecParametersBitsPerRawSample(this._handle)
22
31
  }
23
32
 
33
+ set bitsPerRawSample(bits) {
34
+ binding.setCodecParametersBitsPerRawSample(this._handle, bits)
35
+ }
36
+
24
37
  get sampleRate() {
25
38
  return binding.getCodecParametersSampleRate(this._handle)
26
39
  }
27
40
 
41
+ set sampleRate(rate) {
42
+ binding.setCodecParametersSampleRate(this._handle, rate)
43
+ }
44
+
45
+ get sampleAspectRatio() {
46
+ const view = new Int32Array(binding.getCodecParametersSampleAspectRatio(this._handle))
47
+ return new Rational(view[0], view[1])
48
+ }
49
+
50
+ set sampleAspectRatio(ratio) {
51
+ binding.setCodecParametersSampleAspectRatio(this._handle, ratio.numerator, ratio.denominator)
52
+ }
53
+
54
+ get frameRate() {
55
+ const view = new Int32Array(binding.getCodecParametersFramerate(this._handle))
56
+ return new Rational(view[0], view[1])
57
+ }
58
+
59
+ set frameRate(rate) {
60
+ binding.setCodecParametersFramerate(this._handle, rate.numerator, rate.denominator)
61
+ }
62
+
63
+ get frameSize() {
64
+ return binding.getCodecParametersFrameSize(this._handle)
65
+ }
66
+
67
+ set frameSize(size) {
68
+ binding.setCodecParametersFrameSize(this._handle, size)
69
+ }
70
+
71
+ get videoDelay() {
72
+ return binding.getCodecParametersVideoDelay(this._handle)
73
+ }
74
+
75
+ set videoDelay(delay) {
76
+ binding.setCodecParametersVideoDelay(this._handle, delay)
77
+ }
78
+
79
+ get nbChannels() {
80
+ return binding.getCodecParametersNbChannels(this._handle)
81
+ }
82
+
83
+ set nbChannels(numberOfChannels) {
84
+ binding.setCodecParametersNbChannels(this._handle, numberOfChannels)
85
+ }
86
+
87
+ get type() {
88
+ return binding.getCodecParametersType(this._handle)
89
+ }
90
+
91
+ set type(type) {
92
+ binding.setCodecParametersType(this._handle, type)
93
+ }
94
+
95
+ get tag() {
96
+ return binding.getCodecParametersTag(this._handle)
97
+ }
98
+
99
+ set tag(tag) {
100
+ binding.setCodecParametersTag(this._handle, tag)
101
+ }
102
+
103
+ get id() {
104
+ return binding.getCodecParametersId(this._handle)
105
+ }
106
+
107
+ set id(id) {
108
+ binding.setCodecParametersId(this._handle, id)
109
+ }
110
+
111
+ get level() {
112
+ return binding.getCodecParametersLevel(this._handle)
113
+ }
114
+
115
+ set level(level) {
116
+ binding.setCodecParametersLevel(this._handle, level)
117
+ }
118
+
119
+ get profile() {
120
+ return binding.getCodecParametersProfile(this._handle)
121
+ }
122
+
123
+ set profile(profile) {
124
+ binding.setCodecParametersProfile(this._handle, profile)
125
+ }
126
+
127
+ get format() {
128
+ return binding.getCodecParametersFormat(this._handle)
129
+ }
130
+
131
+ set format(format) {
132
+ binding.setCodecParametersFormat(this._handle, format)
133
+ }
134
+
135
+ get channelLayout() {
136
+ return new ChannelLayout(binding.getCodecParametersChannelLayout(this._handle))
137
+ }
138
+
139
+ set channelLayout(value) {
140
+ binding.setCodecParametersChannelLayout(this._handle, ChannelLayout.from(value)._handle)
141
+ }
142
+
143
+ get width() {
144
+ return binding.getCodecParametersWidth(this._handle)
145
+ }
146
+
147
+ set width(value) {
148
+ binding.setCodecParametersWidth(this._handle, value)
149
+ }
150
+
151
+ get height() {
152
+ return binding.getCodecParametersHeight(this._handle)
153
+ }
154
+
155
+ set height(value) {
156
+ binding.setCodecParametersHeight(this._handle, value)
157
+ }
158
+
159
+ get extraData() {
160
+ return Buffer.from(binding.getCodecParametersExtraData(this._handle))
161
+ }
162
+
163
+ set extraData(value) {
164
+ binding.setCodecParametersExtraData(
165
+ this._handle,
166
+ value.buffer,
167
+ value.byteOffset,
168
+ value.byteLength
169
+ )
170
+ }
171
+
172
+ get blockAlign() {
173
+ return binding.getCodecParametersBlockAlign(this._handle)
174
+ }
175
+
176
+ set blockAlign(value) {
177
+ binding.setCodecParametersBlockAlign(this._handle, value)
178
+ }
179
+
180
+ get initialPadding() {
181
+ return binding.getCodecParametersInitialPadding(this._handle)
182
+ }
183
+
184
+ set initialPadding(value) {
185
+ binding.setCodecParametersInitialPadding(this._handle, value)
186
+ }
187
+
188
+ get trailingPadding() {
189
+ return binding.getCodecParametersTrailingPadding(this._handle)
190
+ }
191
+
192
+ set trailingPadding(value) {
193
+ binding.setCodecParametersTrailingPadding(this._handle, value)
194
+ }
195
+
196
+ get seekPreroll() {
197
+ return binding.getCodecParametersSeekPreroll(this._handle)
198
+ }
199
+
200
+ set seekPreroll(value) {
201
+ binding.setCodecParametersSeekPreroll(this._handle, value)
202
+ }
203
+
204
+ get colorSpace() {
205
+ return binding.getCodecParametersColorSpace(this._handle)
206
+ }
207
+
208
+ set colorSpace(value) {
209
+ binding.setCodecParametersColorSpace(this._handle, value)
210
+ }
211
+
212
+ get colorPrimaries() {
213
+ return binding.getCodecParametersColorPrimaries(this._handle)
214
+ }
215
+
216
+ set colorPrimaries(value) {
217
+ binding.setCodecParametersColorPrimaries(this._handle, value)
218
+ }
219
+
220
+ get colorTRC() {
221
+ return binding.getCodecParametersColorTRC(this._handle)
222
+ }
223
+
224
+ set colorTRC(value) {
225
+ binding.setCodecParametersColorTRC(this._handle, value)
226
+ }
227
+
228
+ get colorRange() {
229
+ return binding.getCodecParametersColorRange(this._handle)
230
+ }
231
+
232
+ set colorRange(value) {
233
+ binding.setCodecParametersColorRange(this._handle, value)
234
+ }
235
+
236
+ // Methods
237
+
28
238
  fromContext(context) {
29
239
  binding.codecParametersFromContext(this._handle, context._handle)
30
240
  }
@@ -33,7 +243,45 @@ module.exports = class FFmpegCodecParameters {
33
243
  binding.codecParametersToContext(context._handle, this._handle)
34
244
  }
35
245
 
246
+ destroy() {
247
+ if (this._owned) binding.destroyCodecParameters(this._handle)
248
+ }
249
+
36
250
  [Symbol.dispose]() {
37
251
  this.destroy()
38
252
  }
253
+
254
+ // TODO: add other props
255
+ [Symbol.for('bare.inspect')]() {
256
+ return {
257
+ __proto__: { constructor: FFmpegCodecParameters },
258
+ type: this.type,
259
+ id: this.id,
260
+ format: this.format,
261
+ tag: this.tag,
262
+ frameRate: this.frameRate,
263
+ videoDelay: this.videoDelay,
264
+ profile: this.profile,
265
+ level: this.level,
266
+ width: this.width,
267
+ height: this.height,
268
+ sampleAsectRatio: this.sampleAspectRatio,
269
+ bitRate: this.bitRate,
270
+ bitsPerCodedSample: this.bitsPerCodedSample,
271
+ bitsPerRawSample: this.bitsPerRawSample,
272
+ sampleRate: this.sampleRate,
273
+ nbChannels: this.nbChannels,
274
+ channelLayout: this.channelLayout,
275
+ extraData: this.extraData,
276
+ blockAlign: this.blockAlign,
277
+ initialPadding: this.initialPadding,
278
+ trailingPadding: this.trailingPadding,
279
+ seekPreroll: this.seekPreroll,
280
+ frameSize: this.frameSize
281
+ }
282
+ }
283
+
284
+ static alloc() {
285
+ return new FFmpegCodecParameters(binding.allocCodecParameters(), true)
286
+ }
39
287
  }
package/lib/codec.js CHANGED
@@ -1,6 +1,7 @@
1
1
  const Decoder = require('./decoder')
2
2
  const Encoder = require('./encoder')
3
3
  const constants = require('./constants')
4
+ const binding = require('../binding')
4
5
 
5
6
  const codecs = new Map()
6
7
 
@@ -25,6 +26,21 @@ module.exports = class FFmpegCodec {
25
26
  return this._encoder
26
27
  }
27
28
 
29
+ get name() {
30
+ if (Number.isInteger(this._id)) {
31
+ return binding.getCodecNameByID(this._id)
32
+ }
33
+ }
34
+
35
+ [Symbol.for('bare.inspect')]() {
36
+ return {
37
+ __proto__: { constructor: FFmpegCodec },
38
+ id: this.id,
39
+ name: this.name
40
+ }
41
+ }
42
+
43
+ /** @return {FFmpegCodec} */
28
44
  static for(id) {
29
45
  let codec = codecs.get(id)
30
46
  if (codec === undefined) {
package/lib/constants.js CHANGED
@@ -1,19 +1,58 @@
1
1
  const binding = require('../binding')
2
+ const errors = require('./errors')
3
+
4
+ function makeTag(a, b, c, d) {
5
+ return (
6
+ a.charCodeAt(0) | (b.charCodeAt(0) << 8) | (c.charCodeAt(0) << 16) | (d.charCodeAt(0) << 24)
7
+ )
8
+ }
2
9
 
3
10
  module.exports = exports = {
4
11
  codecs: {
5
12
  MJPEG: binding.AV_CODEC_ID_MJPEG,
6
13
  H264: binding.AV_CODEC_ID_H264,
14
+ AVC: binding.AV_CODEC_ID_H264, // Alias for H264
7
15
  AAC: binding.AV_CODEC_ID_AAC,
8
16
  OPUS: binding.AV_CODEC_ID_OPUS,
9
- AV1: binding.AV_CODEC_ID_AV1
17
+ AV1: binding.AV_CODEC_ID_AV1,
18
+ FLAC: binding.AV_CODEC_ID_FLAC,
19
+ MP3: binding.AV_CODEC_ID_MP3,
20
+ H265: binding.AV_CODEC_ID_HEVC,
21
+ HEVC: binding.AV_CODEC_ID_HEVC,
22
+ VP8: binding.AV_CODEC_ID_VP8,
23
+ VP9: binding.AV_CODEC_ID_VP9,
24
+ VORBIS: binding.AV_CODEC_ID_VORBIS,
25
+ PCM_S16LE: binding.AV_CODEC_ID_PCM_S16LE,
26
+ PCM_S16BE: binding.AV_CODEC_ID_PCM_S16BE,
27
+ PCM_U8: binding.AV_CODEC_ID_PCM_U8,
28
+ PCM_ALAW: binding.AV_CODEC_ID_PCM_ALAW,
29
+ PCM_MULAW: binding.AV_CODEC_ID_PCM_MULAW
30
+ },
31
+ tags: {
32
+ MJPEG: makeTag('M', 'J', 'P', 'G'),
33
+ AV1: makeTag('A', 'V', '0', '1'),
34
+ H264: makeTag('H', '2', '6', '4'),
35
+ AAC: 0x00ff,
36
+ FLAC: 0xf1ac,
37
+ MP3: 0x0055
38
+ },
39
+ profiles: {
40
+ H264_MAIN: binding.AV_PROFILE_H264_MAIN
41
+ },
42
+ levels: {
43
+ UNKNOWN: binding.AV_LEVEL_UNKNOWN
10
44
  },
11
45
  pixelFormats: {
46
+ NONE: binding.AV_PIX_FMT_NONE,
12
47
  RGBA: binding.AV_PIX_FMT_RGBA,
13
48
  RGB24: binding.AV_PIX_FMT_RGB24,
14
49
  YUVJ420P: binding.AV_PIX_FMT_YUVJ420P,
15
50
  UYVY422: binding.AV_PIX_FMT_UYVY422,
16
- YUV420P: binding.AV_PIX_FMT_YUV420P
51
+ YUV420P: binding.AV_PIX_FMT_YUV420P,
52
+ NV12: binding.AV_PIX_FMT_NV12,
53
+ NV21: binding.AV_PIX_FMT_NV21,
54
+ NV24: binding.AV_PIX_FMT_NV24,
55
+ VIDEOTOOLBOX: binding.AV_PIX_FMT_VIDEOTOOLBOX
17
56
  },
18
57
  mediaTypes: {
19
58
  UNKNOWN: binding.AVMEDIA_TYPE_UNKNOWN,
@@ -29,31 +68,319 @@ module.exports = exports = {
29
68
  U8: binding.AV_SAMPLE_FMT_U8,
30
69
  S16: binding.AV_SAMPLE_FMT_S16,
31
70
  S32: binding.AV_SAMPLE_FMT_S32,
71
+ S64: binding.AV_SAMPLE_FMT_S64,
32
72
  FLT: binding.AV_SAMPLE_FMT_FLT,
33
- FLTP: binding.AV_SAMPLE_FMT_FLTP,
34
73
  DBL: binding.AV_SAMPLE_FMT_DBL,
35
74
  U8P: binding.AV_SAMPLE_FMT_U8P,
36
75
  S16P: binding.AV_SAMPLE_FMT_S16P,
37
76
  S32P: binding.AV_SAMPLE_FMT_S32P,
38
- DBLP: binding.AV_SAMPLE_FMT_DBLP,
39
- S64: binding.AV_SAMPLE_FMT_S64,
40
77
  S64P: binding.AV_SAMPLE_FMT_S64P,
78
+ FLTP: binding.AV_SAMPLE_FMT_FLTP,
79
+ DBLP: binding.AV_SAMPLE_FMT_DBLP,
41
80
  NB: binding.AV_SAMPLE_FMT_NB
42
81
  },
43
82
  channelLayouts: {
44
83
  MONO: binding.AV_CH_LAYOUT_MONO,
45
- STEREO: binding.AV_CH_LAYOUT_STEREO
84
+ STEREO: binding.AV_CH_LAYOUT_STEREO,
85
+ QUAD: binding.AV_CH_LAYOUT_QUAD,
86
+ SURROUND: binding.AV_CH_LAYOUT_SURROUND,
87
+ 2_1: binding.AV_CH_LAYOUT_2POINT1,
88
+ 5_0: binding.AV_CH_LAYOUT_5POINT0,
89
+ 5_1: binding.AV_CH_LAYOUT_5POINT1,
90
+ 7_1: binding.AV_CH_LAYOUT_7POINT1,
91
+ // Aliases
92
+ 2.1: binding.AV_CH_LAYOUT_2POINT1,
93
+ '5.0': binding.AV_CH_LAYOUT_5POINT0,
94
+ 5.1: binding.AV_CH_LAYOUT_5POINT1,
95
+ 7.1: binding.AV_CH_LAYOUT_7POINT1
96
+ },
97
+ pictureTypes: {
98
+ NONE: binding.AV_PICTURE_TYPE_NONE,
99
+ I: binding.AV_PICTURE_TYPE_I,
100
+ P: binding.AV_PICTURE_TYPE_P,
101
+ B: binding.AV_PICTURE_TYPE_B,
102
+ S: binding.AV_PICTURE_TYPE_S,
103
+ SI: binding.AV_PICTURE_TYPE_SI,
104
+ SP: binding.AV_PICTURE_TYPE_SP,
105
+ BI: binding.AV_PICTURE_TYPE_BI
106
+ },
107
+ logLevels: {
108
+ QUIET: binding.AV_LOG_QUIET,
109
+ PANIC: binding.AV_LOG_PANIC,
110
+ FATAL: binding.AV_LOG_FATAL,
111
+ ERROR: binding.AV_LOG_ERROR,
112
+ WARNING: binding.AV_LOG_WARNING,
113
+ INFO: binding.AV_LOG_INFO,
114
+ VERBOSE: binding.AV_LOG_VERBOSE,
115
+ DEBUG: binding.AV_LOG_DEBUG,
116
+ TRACE: binding.AV_LOG_TRACE
117
+ },
118
+ codecFlags: {
119
+ COPY_OPAQUE: binding.AV_CODEC_FLAG_COPY_OPAQUE,
120
+ FRAME_DURATION: binding.AV_CODEC_FLAG_FRAME_DURATION,
121
+ PASS1: binding.AV_CODEC_FLAG_PASS1,
122
+ PASS2: binding.AV_CODEC_FLAG_PASS2,
123
+ LOOP_FILTER: binding.AV_CODEC_FLAG_LOOP_FILTER,
124
+ GRAY: binding.AV_CODEC_FLAG_GRAY,
125
+ PSNR: binding.AV_CODEC_FLAG_PSNR,
126
+ INTERLACED_DCT: binding.AV_CODEC_FLAG_INTERLACED_DCT,
127
+ LOW_DELAY: binding.AV_CODEC_FLAG_LOW_DELAY,
128
+ GLOBAL_HEADER: binding.AV_CODEC_FLAG_GLOBAL_HEADER,
129
+ BITEXACT: binding.AV_CODEC_FLAG_BITEXACT,
130
+ AC_PRED: binding.AV_CODEC_FLAG_AC_PRED,
131
+ INTERLACED_ME: binding.AV_CODEC_FLAG_INTERLACED_ME,
132
+ CLOSED_GOP: binding.AV_CODEC_FLAG_CLOSED_GOP
133
+ },
134
+ formatFlags: {
135
+ SHOW_IDS: binding.AVFMT_SHOW_IDS,
136
+ GENERIC_INDEX: binding.AVFMT_GENERIC_INDEX,
137
+ TS_DISCONT: binding.AVFMT_TS_DISCONT,
138
+ NOBINSEARCH: binding.AVFMT_NOBINSEARCH,
139
+ NOGENSEARCH: binding.AVFMT_NOGENSEARCH,
140
+ NO_BYTE_SEEK: binding.AVFMT_NO_BYTE_SEEK,
141
+ SEEK_TO_PTS: binding.AVFMT_SEEK_TO_PTS,
142
+ GLOBALHEADER: binding.AVFMT_GLOBALHEADER,
143
+ VARIABLE_FPS: binding.AVFMT_VARIABLE_FPS,
144
+ NODIMENSIONS: binding.AVFMT_NODIMENSIONS,
145
+ NOSTREAMS: binding.AVFMT_NOSTREAMS,
146
+ TS_NONSTRICT: binding.AVFMT_TS_NONSTRICT,
147
+ TS_NEGATIVE: binding.AVFMT_TS_NEGATIVE,
148
+ NOFILE: binding.AVFMT_NOFILE,
149
+ NEEDNUMBER: binding.AVFMT_NEEDNUMBER,
150
+ NOTIMESTAMPS: binding.AVFMT_NOTIMESTAMPS
151
+ },
152
+ seek: {
153
+ SIZE: binding.AVSEEK_SIZE,
154
+ FORCE: binding.AVSEEK_FORCE,
155
+ CUR: binding.SEEK_CUR,
156
+ SET: binding.SEEK_SET,
157
+ END: binding.SEEK_END
158
+ },
159
+ packetSideDataType: {
160
+ PALETTE: binding.AV_PKT_DATA_PALETTE,
161
+ NEW_EXTRADATA: binding.AV_PKT_DATA_NEW_EXTRADATA,
162
+ PARAM_CHANGE: binding.AV_PKT_DATA_PARAM_CHANGE,
163
+ H263_MB_INFO: binding.AV_PKT_DATA_H263_MB_INFO,
164
+ REPLAYGAIN: binding.AV_PKT_DATA_REPLAYGAIN,
165
+ DISPLAYMATRIX: binding.AV_PKT_DATA_DISPLAYMATRIX,
166
+ STEREO3D: binding.AV_PKT_DATA_STEREO3D,
167
+ AUDIO_SERVICE_TYPE: binding.AV_PKT_DATA_AUDIO_SERVICE_TYPE,
168
+ QUALITY_STATS: binding.AV_PKT_DATA_QUALITY_STATS,
169
+ FALLBACK_TRACK: binding.AV_PKT_DATA_FALLBACK_TRACK,
170
+ CPB_PROPERTIES: binding.AV_PKT_DATA_CPB_PROPERTIES,
171
+ SKIP_SAMPLES: binding.AV_PKT_DATA_SKIP_SAMPLES,
172
+ JP_DUALMONO: binding.AV_PKT_DATA_JP_DUALMONO,
173
+ STRINGS_METADATA: binding.AV_PKT_DATA_STRINGS_METADATA,
174
+ SUBTITLE_POSITION: binding.AV_PKT_DATA_SUBTITLE_POSITION,
175
+ MATROSKA_BLOCKADDITIONAL: binding.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
176
+ WEBVTT_IDENTIFIER: binding.AV_PKT_DATA_WEBVTT_IDENTIFIER,
177
+ WEBVTT_SETTINGS: binding.AV_PKT_DATA_WEBVTT_SETTINGS,
178
+ METADATA_UPDATE: binding.AV_PKT_DATA_METADATA_UPDATE,
179
+ MPEGTS_STREAM_ID: binding.AV_PKT_DATA_MPEGTS_STREAM_ID,
180
+ MASTERING_DISPLAY_METADATA: binding.AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
181
+ SPHERICAL: binding.AV_PKT_DATA_SPHERICAL,
182
+ CONTENT_LIGHT_LEVEL: binding.AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
183
+ A53_CC: binding.AV_PKT_DATA_A53_CC,
184
+ ENCRYPTION_INIT_INFO: binding.AV_PKT_DATA_ENCRYPTION_INIT_INFO,
185
+ ENCRYPTION_INFO: binding.AV_PKT_DATA_ENCRYPTION_INFO,
186
+ AFD: binding.AV_PKT_DATA_AFD,
187
+ PRFT: binding.AV_PKT_DATA_PRFT,
188
+ ICC_PROFILE: binding.AV_PKT_DATA_ICC_PROFILE,
189
+ DOVI_CONF: binding.AV_PKT_DATA_DOVI_CONF,
190
+ S12M_TIMECODE: binding.AV_PKT_DATA_S12M_TIMECODE,
191
+ DYNAMIC_HDR10_PLUS: binding.AV_PKT_DATA_DYNAMIC_HDR10_PLUS,
192
+ IAMF_MIX_GAIN_PARAM: binding.AV_PKT_DATA_IAMF_MIX_GAIN_PARAM,
193
+ IAMF_DEMIXING_INFO_PARAM: binding.AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM,
194
+ IAMF_RECON_GAIN_INFO_PARAM: binding.AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM,
195
+ AMBIENT_VIEWING_ENVIRONMENT: binding.AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,
196
+ FRAME_CROPPING: binding.AV_PKT_DATA_FRAME_CROPPING,
197
+ LCEVC: binding.AV_PKT_DATA_LCEVC,
198
+ '3D_REFERENCE_DISPLAYS': binding.AV_PKT_DATA_3D_REFERENCE_DISPLAYS,
199
+ RTCP_SR: binding.AV_PKT_DATA_RTCP_SR,
200
+ NB: binding.AV_PKT_DATA_NB
201
+ },
202
+ codecConfig: {
203
+ PIX_FORMAT: binding.AV_CODEC_CONFIG_PIX_FORMAT,
204
+ FRAME_RATE: binding.AV_CODEC_CONFIG_FRAME_RATE,
205
+ SAMPLE_RATE: binding.AV_CODEC_CONFIG_SAMPLE_RATE,
206
+ SAMPLE_FORMAT: binding.AV_CODEC_CONFIG_SAMPLE_FORMAT,
207
+ CHANNEL_LAYOUT: binding.AV_CODEC_CONFIG_CHANNEL_LAYOUT,
208
+ COLOR_RANGE: binding.AV_CODEC_CONFIG_COLOR_RANGE,
209
+ COLOR_SPACE: binding.AV_CODEC_CONFIG_COLOR_SPACE
210
+ },
211
+ rounding: {
212
+ AV_ROUND_ZERO: binding.AV_ROUND_ZERO,
213
+ AV_ROUND_INF: binding.AV_ROUND_INF,
214
+ AV_ROUND_DOWN: binding.AV_ROUND_DOWN,
215
+ AV_ROUND_UP: binding.AV_ROUND_UP,
216
+ AV_ROUND_NEAR_INF: binding.AV_ROUND_NEAR_INF,
217
+ AV_ROUND_PASS_MINMAX: binding.AV_ROUND_PASS_MINMAX
218
+ },
219
+ optionFlags: {
220
+ SEARCH_CHILDREN: binding.AV_OPT_SEARCH_CHILDREN,
221
+ SEARCH_FAKE_OBJ: binding.AV_OPT_SEARCH_FAKE_OBJ,
222
+ ALLOW_NULL: binding.AV_OPT_ALLOW_NULL,
223
+ ARRAY_REPLACE: binding.AV_OPT_ARRAY_REPLACE,
224
+ MULTI_COMPONENT_RANGE: binding.AV_OPT_MULTI_COMPONENT_RANGE
225
+ },
226
+ hwDeviceTypes: {
227
+ VIDEOTOOLBOX: binding.AV_HWDEVICE_TYPE_VIDEOTOOLBOX,
228
+ CUDA: binding.AV_HWDEVICE_TYPE_CUDA,
229
+ VAAPI: binding.AV_HWDEVICE_TYPE_VAAPI,
230
+ DXVA2: binding.AV_HWDEVICE_TYPE_DXVA2,
231
+ QSV: binding.AV_HWDEVICE_TYPE_QSV,
232
+ D3D11VA: binding.AV_HWDEVICE_TYPE_D3D11VA
233
+ },
234
+ hwFrameMapFlags: {
235
+ NONE: 0,
236
+ READ: binding.AV_HWFRAME_MAP_READ,
237
+ WRITE: binding.AV_HWFRAME_MAP_WRITE,
238
+ OVERWRITE: binding.AV_HWFRAME_MAP_OVERWRITE,
239
+ DIRECT: binding.AV_HWFRAME_MAP_DIRECT
240
+ },
241
+ colorSpace: {
242
+ RGB: binding.AVCOL_SPC_RGB,
243
+ BT709: binding.AVCOL_SPC_BT709,
244
+ UNSPECIFIED: binding.AVCOL_SPC_UNSPECIFIED,
245
+ RESERVED: binding.AVCOL_SPC_RESERVED,
246
+ FCC: binding.AVCOL_SPC_FCC,
247
+ BT470BG: binding.AVCOL_SPC_BT470BG,
248
+ SMPTE170M: binding.AVCOL_SPC_SMPTE170M,
249
+ SMPTE240M: binding.AVCOL_SPC_SMPTE240M,
250
+ YCGCO: binding.AVCOL_SPC_YCGCO,
251
+ YCOCG: binding.AVCOL_SPC_YCOCG,
252
+ BT2020_NCL: binding.AVCOL_SPC_BT2020_NCL,
253
+ BT2020_CL: binding.AVCOL_SPC_BT2020_CL,
254
+ SMPTE2085: binding.AVCOL_SPC_SMPTE2085,
255
+ CHROMA_DERIVED_NCL: binding.AVCOL_SPC_CHROMA_DERIVED_NCL,
256
+ CHROMA_DERIVED_CL: binding.AVCOL_SPC_CHROMA_DERIVED_CL,
257
+ ICTCP: binding.AVCOL_SPC_ICTCP,
258
+ IPT_C2: binding.AVCOL_SPC_IPT_C2,
259
+ YCGCO_RE: binding.AVCOL_SPC_YCGCO_RE,
260
+ YCGCO_RO: binding.AVCOL_SPC_YCGCO_RO
261
+ },
262
+ colorRange: {
263
+ UNSPECIFIED: binding.AVCOL_RANGE_UNSPECIFIED,
264
+ MPEG: binding.AVCOL_RANGE_MPEG,
265
+ JPEG: binding.AVCOL_RANGE_JPEG
266
+ },
267
+ colorPrimaries: {
268
+ BT709: binding.AVCOL_PRI_BT709,
269
+ UNSPECIFIED: binding.AVCOL_PRI_UNSPECIFIED,
270
+ RESERVED: binding.AVCOL_PRI_RESERVED,
271
+ BT470M: binding.AVCOL_PRI_BT470M,
272
+ BT470BG: binding.AVCOL_PRI_BT470BG,
273
+ SMPTE170M: binding.AVCOL_PRI_SMPTE170M,
274
+ SMPTE240M: binding.AVCOL_PRI_SMPTE240M,
275
+ FILM: binding.AVCOL_PRI_FILM,
276
+ BT2020: binding.AVCOL_PRI_BT2020,
277
+ SMPTE428: binding.AVCOL_PRI_SMPTE428,
278
+ SMPTEST428_1: binding.AVCOL_PRI_SMPTEST428_1,
279
+ SMPTE431: binding.AVCOL_PRI_SMPTE431,
280
+ SMPTE432: binding.AVCOL_PRI_SMPTE432,
281
+ EBU3213: binding.AVCOL_PRI_EBU3213,
282
+ JEDEC_P22: binding.AVCOL_PRI_JEDEC_P22
283
+ },
284
+ colorTRC: {
285
+ BT709: binding.AVCOL_TRC_BT709,
286
+ UNSPECIFIED: binding.AVCOL_TRC_UNSPECIFIED,
287
+ RESERVED: binding.AVCOL_TRC_RESERVED,
288
+ GAMMA22: binding.AVCOL_TRC_GAMMA22,
289
+ GAMMA28: binding.AVCOL_TRC_GAMMA28,
290
+ SMPTE170M: binding.AVCOL_TRC_SMPTE170M,
291
+ SMPTE240M: binding.AVCOL_TRC_SMPTE240M,
292
+ LINEAR: binding.AVCOL_TRC_LINEAR,
293
+ LOG: binding.AVCOL_TRC_LOG,
294
+ LOG_SQRT: binding.AVCOL_TRC_LOG_SQRT,
295
+ IEC61966_2_4: binding.AVCOL_TRC_IEC61966_2_4,
296
+ BT1361_ECG: binding.AVCOL_TRC_BT1361_ECG,
297
+ IEC61966_2_1: binding.AVCOL_TRC_IEC61966_2_1,
298
+ BT2020_10: binding.AVCOL_TRC_BT2020_10,
299
+ BT2020_12: binding.AVCOL_TRC_BT2020_12,
300
+ SMPTE2084: binding.AVCOL_TRC_SMPTE2084,
301
+ SMPTEST2084: binding.AVCOL_TRC_SMPTEST2084,
302
+ SMPTE428: binding.AVCOL_TRC_SMPTE428,
303
+ SMPTEST428_1: binding.AVCOL_TRC_SMPTEST428_1,
304
+ ARIB_STD_B67: binding.AVCOL_TRC_ARIB_STD_B67
46
305
  }
47
306
  }
48
307
 
49
- exports.toPixelFormat = function toPixelFormat(pixelFormat) {
50
- if (typeof pixelFormat === 'number') return pixelFormat
308
+ exports.toPixelFormat = function toPixelFormat(format) {
309
+ if (typeof format === 'number') return format
51
310
 
52
- if (typeof pixelFormat === 'string') {
53
- if (pixelFormat in exports.pixelFormats === false) {
54
- throw errors.UNKNOWN_PIXEL_FORMAT(`Unknown pixel format '${pixelFormat}'`)
311
+ if (typeof format === 'string') {
312
+ if (format in exports.pixelFormats === false) {
313
+ throw errors.UNKNOWN_PIXEL_FORMAT(`Unknown pixel format '${format}'`)
55
314
  }
56
315
 
57
- return exports.pixelFormats[pixelFormat]
316
+ return exports.pixelFormats[format]
58
317
  }
318
+
319
+ throw new TypeError(
320
+ `Pixel format must be a number or string. Received ${typeof format} (${format})`
321
+ )
322
+ }
323
+
324
+ exports.toSampleFormat = function toSampleFormat(format) {
325
+ if (typeof format === 'number') return format
326
+
327
+ if (typeof format === 'string') {
328
+ if (format in exports.sampleFormats === false) {
329
+ throw errors.UNKNOWN_SAMPLE_FORMAT(`Unknown sample format '${format}'`)
330
+ }
331
+
332
+ return exports.sampleFormats[format]
333
+ }
334
+
335
+ throw new TypeError(
336
+ `Sample format must be a number or string. Received ${typeof format} (${format})`
337
+ )
338
+ }
339
+
340
+ exports.toChannelLayout = function toChannelLayout(layout) {
341
+ if (typeof layout === 'number') return layout
342
+
343
+ if (typeof layout === 'string') {
344
+ if (layout in exports.channelLayouts === false) {
345
+ throw errors.UNKNOWN_CHANNEL_LAYOUT(`Unknown channel layout '${layout}'`)
346
+ }
347
+
348
+ return exports.channelLayouts[layout]
349
+ }
350
+
351
+ throw new TypeError(
352
+ `Channel layout must be a number or string. Received ${typeof layout} (${layout})`
353
+ )
354
+ }
355
+
356
+ exports.getSampleFormatName = function (sampleFormat) {
357
+ return binding.getSampleFormatNameByID(sampleFormat)
358
+ }
359
+
360
+ exports.getPixelFormatName = function (pixelFormat) {
361
+ return binding.getPixelFormatNameByID(pixelFormat)
362
+ }
363
+
364
+ exports.getColorSpaceName = function (colorSpace) {
365
+ return binding.getColorSpaceNameByID(colorSpace)
366
+ }
367
+
368
+ exports.toColorSpace = function (name) {
369
+ return binding.getColorSpaceFromName(name)
370
+ }
371
+
372
+ exports.getColorPrimariesName = function (colorPrimaries) {
373
+ return binding.getColorPrimariesNameByID(colorPrimaries)
374
+ }
375
+
376
+ exports.toColorPrimaries = function (name) {
377
+ return binding.getColorPrimariesFromName(name)
378
+ }
379
+
380
+ exports.getColorTransferName = function (colorTransfer) {
381
+ return binding.getColorTransferNameByID(colorTransfer)
382
+ }
383
+
384
+ exports.toColorTransfer = function (name) {
385
+ return binding.getColorTransferFromName(name)
59
386
  }