bare-ffmpeg 1.0.0-17 → 1.0.0-18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -339,6 +339,12 @@ Gets the sample rate for audio codecs.
339
339
 
340
340
  **Returns**: `number`
341
341
 
342
+ ##### `CodecParameters.extraData`
343
+
344
+ Out-of-band global headers that may be used by some codecs.
345
+
346
+ **Returns**: `Buffer`
347
+
342
348
  #### Methods
343
349
 
344
350
  ##### `CodecParameters.fromContext(context)`
@@ -636,6 +642,36 @@ Gets the denominator.
636
642
 
637
643
  **Returns**: `number`
638
644
 
645
+ ##### `Rational.valid`
646
+
647
+ Returns if true if rational describes a non-zero & non-negative quantity.
648
+
649
+ **Returns**: `number`
650
+
651
+ ##### `Rational.uninitialized`
652
+
653
+ Returns if true when is not set.
654
+
655
+ **Returns**: `number`
656
+
657
+ ##### `Rational.toNumber()`
658
+
659
+ see `av_q2d()`
660
+
661
+ **Returns**: `number`
662
+
663
+ ##### `static Rational.from(number)`
664
+
665
+ see `av_d2q()`
666
+
667
+ **Returns**: `Rational`
668
+
669
+ ##### `Rational.rescaleQ(number, timebaseA, timebaseB)`
670
+
671
+ see `av_rescale_q()`
672
+
673
+ **Returns**: `number`
674
+
639
675
  ### `Stream`
640
676
 
641
677
  The `Stream` API provides functionality to access media stream information and create decoders/encoders.
package/binding.cc CHANGED
@@ -1338,6 +1338,62 @@ bare_ffmpeg_codec_parameters_get_framerate(
1338
1338
  return result;
1339
1339
  }
1340
1340
 
1341
+ static js_arraybuffer_t
1342
+ bare_ffmpeg_codec_parameters_get_extra_data(
1343
+ js_env_t *env,
1344
+ js_receiver_t,
1345
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
1346
+ ) {
1347
+ int err;
1348
+
1349
+ js_arraybuffer_t buffer;
1350
+
1351
+ assert(parameters->handle->extradata_size >= 0);
1352
+
1353
+ err = js_create_arraybuffer(
1354
+ env,
1355
+ parameters->handle->extradata,
1356
+ static_cast<size_t>(parameters->handle->extradata_size),
1357
+ buffer
1358
+ );
1359
+ assert(err == 0);
1360
+
1361
+ return buffer;
1362
+ }
1363
+
1364
+ void
1365
+ bare_ffmpeg_codec_parameters_set_extra_data(
1366
+ js_env_t *env,
1367
+ js_receiver_t,
1368
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1369
+ js_arraybuffer_t buffer,
1370
+ uint32_t offset,
1371
+ uint32_t len
1372
+ ) {
1373
+ int err;
1374
+
1375
+ std::span<uint8_t> view;
1376
+
1377
+ err = js_get_arraybuffer_info(env, buffer, view);
1378
+ assert(err == 0);
1379
+
1380
+ if (parameters->handle->extradata_size) {
1381
+ assert(parameters->handle->extradata_size > 0);
1382
+ assert(parameters->handle->extradata);
1383
+
1384
+ av_free(parameters->handle->extradata);
1385
+ }
1386
+
1387
+ size_t min_size = len + AV_INPUT_BUFFER_PADDING_SIZE;
1388
+
1389
+ parameters->handle->extradata = reinterpret_cast<uint8_t *>(av_malloc(min_size));
1390
+ memset(&parameters->handle->extradata[len], 0, AV_INPUT_BUFFER_PADDING_SIZE);
1391
+
1392
+ memcpy(parameters->handle->extradata, &view[offset], len);
1393
+
1394
+ parameters->handle->extradata_size = static_cast<int>(len);
1395
+ }
1396
+
1341
1397
  static js_arraybuffer_t
1342
1398
  bare_ffmpeg_frame_init(js_env_t *env, js_receiver_t) {
1343
1399
  int err;
@@ -2573,6 +2629,8 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
2573
2629
  V("getCodecParametersWidth", bare_ffmpeg_codec_parameters_get_width)
2574
2630
  V("getCodecParametersHeight", bare_ffmpeg_codec_parameters_get_height)
2575
2631
  V("getCodecParametersFramerate", bare_ffmpeg_codec_parameters_get_framerate)
2632
+ V("getCodecParametersExtraData", bare_ffmpeg_codec_parameters_get_extra_data)
2633
+ V("setCodecParametersExtraData", bare_ffmpeg_codec_parameters_set_extra_data)
2576
2634
 
2577
2635
  V("initFrame", bare_ffmpeg_frame_init)
2578
2636
  V("destroyFrame", bare_ffmpeg_frame_destroy)
@@ -10,6 +10,7 @@ declare class FFmpegCodecParameters {
10
10
  readonly nbChannels: number
11
11
  readonly codecType: number
12
12
  readonly channelLayout: FFmpegChannelLayout
13
+ extraData: Buffer
13
14
 
14
15
  constructor(handle: ArrayBuffer)
15
16
 
@@ -60,6 +60,19 @@ module.exports = class FFmpegCodecParameters {
60
60
  return binding.getCodecParametersHeight(this._handle)
61
61
  }
62
62
 
63
+ get extraData() {
64
+ return Buffer.from(binding.getCodecParametersExtraData(this._handle))
65
+ }
66
+
67
+ set extraData(value) {
68
+ binding.setCodecParametersExtraData(
69
+ this._handle,
70
+ value.buffer,
71
+ value.byteOffset,
72
+ value.byteLength
73
+ )
74
+ }
75
+
63
76
  fromContext(context) {
64
77
  binding.codecParametersFromContext(this._handle, context._handle)
65
78
  }
@@ -82,7 +95,8 @@ module.exports = class FFmpegCodecParameters {
82
95
  sampleRate: this.sampleRate,
83
96
  nbChannels: this.nbChannels,
84
97
  channelLayout: this.channelLayout,
85
- frameRate: this.frameRate
98
+ frameRate: this.frameRate,
99
+ extraData: this.extraData
86
100
  }
87
101
  }
88
102
  }
package/lib/rational.d.ts CHANGED
@@ -1,8 +1,14 @@
1
1
  declare class FFmpegRational {
2
2
  numerator: number
3
3
  denominator: number
4
+ valid: boolean
5
+ unintialized: boolean
4
6
 
5
7
  constructor(numerator: number, denominator: number)
8
+
9
+ toNumber(): number
10
+ static from(number: number): Rational
11
+ static rescaleQ(n: Number, a: Rational, b: Rational)
6
12
  }
7
13
 
8
14
  export = FFmpegRational
package/lib/rational.js CHANGED
@@ -7,21 +7,22 @@ module.exports = class FFmpegRational {
7
7
  }
8
8
 
9
9
  get valid() {
10
- // don't support negative denominators unless
11
- // required by codec or format
12
- if (this.denominator < 1) return false
10
+ // don't support negative denominators for now
11
+ if (this.denominator < 0) return false
13
12
 
14
- // common initial value for AVRational(0, 1)
15
- if (this.q2d === 0) return false
13
+ const n = this.toNumber()
14
+
15
+ if (Number.isNaN(n) || n === 0) return false
16
16
 
17
17
  return true
18
18
  }
19
19
 
20
20
  get uninitialized() {
21
+ // common initial value for AVRational(0, 1)
21
22
  return this.numerator === 0 && this.denominator === 1
22
23
  }
23
24
 
24
- get q2d() {
25
+ toNumber() {
25
26
  return this.numerator / this.denominator
26
27
  }
27
28
 
@@ -29,4 +30,11 @@ module.exports = class FFmpegRational {
29
30
  const view = new Int32Array(binding.rationalD2Q(num))
30
31
  return new FFmpegRational(view[0], view[1])
31
32
  }
33
+
34
+ static rescaleQ(n, src, dst) {
35
+ return (
36
+ (n * (src.numerator / src.denominator)) /
37
+ (dst.numerator / dst.denominator)
38
+ )
39
+ }
32
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bare-ffmpeg",
3
- "version": "1.0.0-17",
3
+ "version": "1.0.0-18",
4
4
  "description": "Low-level FFmpeg bindings for Bare",
5
5
  "exports": {
6
6
  ".": {