bare-ffmpeg 1.0.0-17 → 1.0.0-19

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
@@ -315,6 +315,24 @@ const params = stream.codecParameters // Get from stream
315
315
 
316
316
  #### Properties
317
317
 
318
+ ##### `CodecParameters.codecType`
319
+
320
+ General type of the encoded data.
321
+
322
+ **Returns**: `number`
323
+
324
+ ##### `CodecParameters.codecId`
325
+
326
+ Specific type of the encoded data (the codec used).
327
+
328
+ **Returns**: `number`
329
+
330
+ ##### `CodecParameters.codecTag`
331
+
332
+ Additional information about the codec (corresponds to the AVI FOURCC).
333
+
334
+ **Returns**: `number`
335
+
318
336
  ##### `CodecParameters.bitRate`
319
337
 
320
338
  Gets the bit rate.
@@ -339,6 +357,31 @@ Gets the sample rate for audio codecs.
339
357
 
340
358
  **Returns**: `number`
341
359
 
360
+ ##### `CodecParameters.extraData`
361
+
362
+ Out-of-band global headers that may be used by some codecs.
363
+
364
+ **Returns**: `Buffer`
365
+
366
+ ##### `CodecParameters.codecProfile`
367
+
368
+ Codec-specific bitstream restrictions that the stream conforms to.
369
+
370
+ **Returns**: `number`
371
+
372
+ ##### `CodecParameters.codecLevel`
373
+
374
+ Codec-specific bitstream restrictions that the stream conforms to.
375
+
376
+ **Returns**: `number`
377
+
378
+ ##### `CodecParameters.codecFormat`
379
+
380
+ Video: the pixel format, the value corresponds to AVPixelFormat.
381
+ Audio: the sample format, the value corresponds to AVSampleFormat.
382
+
383
+ **Returns**: `number`
384
+
342
385
  #### Methods
343
386
 
344
387
  ##### `CodecParameters.fromContext(context)`
@@ -636,6 +679,36 @@ Gets the denominator.
636
679
 
637
680
  **Returns**: `number`
638
681
 
682
+ ##### `Rational.valid`
683
+
684
+ Returns if true if rational describes a non-zero & non-negative quantity.
685
+
686
+ **Returns**: `number`
687
+
688
+ ##### `Rational.uninitialized`
689
+
690
+ Returns if true when is not set.
691
+
692
+ **Returns**: `number`
693
+
694
+ ##### `Rational.toNumber()`
695
+
696
+ see `av_q2d()`
697
+
698
+ **Returns**: `number`
699
+
700
+ ##### `static Rational.from(number)`
701
+
702
+ see `av_d2q()`
703
+
704
+ **Returns**: `Rational`
705
+
706
+ ##### `Rational.rescaleQ(number, timebaseA, timebaseB)`
707
+
708
+ see `av_rescale_q()`
709
+
710
+ **Returns**: `number`
711
+
639
712
  ### `Stream`
640
713
 
641
714
  The `Stream` API provides functionality to access media stream information and create decoders/encoders.
package/binding.cc CHANGED
@@ -1271,6 +1271,35 @@ bare_ffmpeg_codec_parameters_get_codec_type(
1271
1271
  return parameters->handle->codec_type;
1272
1272
  }
1273
1273
 
1274
+ static void
1275
+ bare_ffmpeg_codec_parameters_set_codec_type(
1276
+ js_env_t *env,
1277
+ js_receiver_t,
1278
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1279
+ int type
1280
+ ) {
1281
+ parameters->handle->codec_type = static_cast<AVMediaType>(type);
1282
+ }
1283
+
1284
+ static uint32_t
1285
+ bare_ffmpeg_codec_parameters_get_codec_tag(
1286
+ js_env_t *env,
1287
+ js_receiver_t,
1288
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
1289
+ ) {
1290
+ return parameters->handle->codec_tag;
1291
+ }
1292
+
1293
+ static void
1294
+ bare_ffmpeg_codec_parameters_set_codec_tag(
1295
+ js_env_t *env,
1296
+ js_receiver_t,
1297
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1298
+ uint32_t codec_tag
1299
+ ) {
1300
+ parameters->handle->codec_tag = codec_tag;
1301
+ }
1302
+
1274
1303
  static int32_t
1275
1304
  bare_ffmpeg_codec_parameters_get_codec_id(
1276
1305
  js_env_t *env,
@@ -1280,6 +1309,73 @@ bare_ffmpeg_codec_parameters_get_codec_id(
1280
1309
  return parameters->handle->codec_id;
1281
1310
  }
1282
1311
 
1312
+ static void
1313
+ bare_ffmpeg_codec_parameters_set_codec_id(
1314
+ js_env_t *env,
1315
+ js_receiver_t,
1316
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1317
+ uint32_t codec_id
1318
+ ) {
1319
+ parameters->handle->codec_id = static_cast<AVCodecID>(codec_id);
1320
+ }
1321
+
1322
+ static int
1323
+ bare_ffmpeg_codec_parameters_get_codec_level(
1324
+ js_env_t *env,
1325
+ js_receiver_t,
1326
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
1327
+ ) {
1328
+ return parameters->handle->level;
1329
+ }
1330
+
1331
+ static void
1332
+ bare_ffmpeg_codec_parameters_set_codec_level(
1333
+ js_env_t *env,
1334
+ js_receiver_t,
1335
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1336
+ int level
1337
+ ) {
1338
+ parameters->handle->level = level;
1339
+ }
1340
+
1341
+ static int
1342
+ bare_ffmpeg_codec_parameters_get_codec_profile(
1343
+ js_env_t *env,
1344
+ js_receiver_t,
1345
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
1346
+ ) {
1347
+ return parameters->handle->profile;
1348
+ }
1349
+
1350
+ static void
1351
+ bare_ffmpeg_codec_parameters_set_codec_profile(
1352
+ js_env_t *env,
1353
+ js_receiver_t,
1354
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1355
+ int profile
1356
+ ) {
1357
+ parameters->handle->profile = profile;
1358
+ }
1359
+
1360
+ static int
1361
+ bare_ffmpeg_codec_parameters_get_codec_format(
1362
+ js_env_t *env,
1363
+ js_receiver_t,
1364
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
1365
+ ) {
1366
+ return parameters->handle->format;
1367
+ }
1368
+
1369
+ static void
1370
+ bare_ffmpeg_codec_parameters_set_codec_format(
1371
+ js_env_t *env,
1372
+ js_receiver_t,
1373
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1374
+ int format
1375
+ ) {
1376
+ parameters->handle->format = format;
1377
+ }
1378
+
1283
1379
  static js_arraybuffer_t
1284
1380
  bare_ffmpeg_codec_parameters_get_channel_layout(
1285
1381
  js_env_t *env,
@@ -1338,6 +1434,62 @@ bare_ffmpeg_codec_parameters_get_framerate(
1338
1434
  return result;
1339
1435
  }
1340
1436
 
1437
+ static js_arraybuffer_t
1438
+ bare_ffmpeg_codec_parameters_get_extra_data(
1439
+ js_env_t *env,
1440
+ js_receiver_t,
1441
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
1442
+ ) {
1443
+ int err;
1444
+
1445
+ js_arraybuffer_t buffer;
1446
+
1447
+ assert(parameters->handle->extradata_size >= 0);
1448
+
1449
+ err = js_create_arraybuffer(
1450
+ env,
1451
+ parameters->handle->extradata,
1452
+ static_cast<size_t>(parameters->handle->extradata_size),
1453
+ buffer
1454
+ );
1455
+ assert(err == 0);
1456
+
1457
+ return buffer;
1458
+ }
1459
+
1460
+ void
1461
+ bare_ffmpeg_codec_parameters_set_extra_data(
1462
+ js_env_t *env,
1463
+ js_receiver_t,
1464
+ js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
1465
+ js_arraybuffer_t buffer,
1466
+ uint32_t offset,
1467
+ uint32_t len
1468
+ ) {
1469
+ int err;
1470
+
1471
+ std::span<uint8_t> view;
1472
+
1473
+ err = js_get_arraybuffer_info(env, buffer, view);
1474
+ assert(err == 0);
1475
+
1476
+ if (parameters->handle->extradata_size) {
1477
+ assert(parameters->handle->extradata_size > 0);
1478
+ assert(parameters->handle->extradata);
1479
+
1480
+ av_free(parameters->handle->extradata);
1481
+ }
1482
+
1483
+ size_t min_size = len + AV_INPUT_BUFFER_PADDING_SIZE;
1484
+
1485
+ parameters->handle->extradata = reinterpret_cast<uint8_t *>(av_malloc(min_size));
1486
+ memset(&parameters->handle->extradata[len], 0, AV_INPUT_BUFFER_PADDING_SIZE);
1487
+
1488
+ memcpy(parameters->handle->extradata, &view[offset], len);
1489
+
1490
+ parameters->handle->extradata_size = static_cast<int>(len);
1491
+ }
1492
+
1341
1493
  static js_arraybuffer_t
1342
1494
  bare_ffmpeg_frame_init(js_env_t *env, js_receiver_t) {
1343
1495
  int err;
@@ -2568,11 +2720,23 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
2568
2720
  V("getCodecParametersSampleRate", bare_ffmpeg_codec_parameters_get_sample_rate)
2569
2721
  V("getCodecParametersNbChannels", bare_ffmpeg_codec_parameters_get_nb_channels)
2570
2722
  V("getCodecParametersCodecType", bare_ffmpeg_codec_parameters_get_codec_type)
2723
+ V("setCodecParametersCodecType", bare_ffmpeg_codec_parameters_set_codec_type)
2724
+ V("getCodecParametersCodecTag", bare_ffmpeg_codec_parameters_get_codec_tag)
2725
+ V("setCodecParametersCodecTag", bare_ffmpeg_codec_parameters_set_codec_tag)
2571
2726
  V("getCodecParametersCodecId", bare_ffmpeg_codec_parameters_get_codec_id)
2727
+ V("setCodecParametersCodecId", bare_ffmpeg_codec_parameters_set_codec_id)
2728
+ V("getCodecParametersCodecLevel", bare_ffmpeg_codec_parameters_get_codec_level)
2729
+ V("setCodecParametersCodecLevel", bare_ffmpeg_codec_parameters_set_codec_level)
2730
+ V("getCodecParametersCodecProfile", bare_ffmpeg_codec_parameters_get_codec_profile)
2731
+ V("setCodecParametersCodecProfile", bare_ffmpeg_codec_parameters_set_codec_profile)
2732
+ V("getCodecParametersCodecFormat", bare_ffmpeg_codec_parameters_get_codec_format)
2733
+ V("setCodecParametersCodecFormat", bare_ffmpeg_codec_parameters_set_codec_format)
2572
2734
  V("getCodecParametersChannelLayout", bare_ffmpeg_codec_parameters_get_channel_layout)
2573
2735
  V("getCodecParametersWidth", bare_ffmpeg_codec_parameters_get_width)
2574
2736
  V("getCodecParametersHeight", bare_ffmpeg_codec_parameters_get_height)
2575
2737
  V("getCodecParametersFramerate", bare_ffmpeg_codec_parameters_get_framerate)
2738
+ V("getCodecParametersExtraData", bare_ffmpeg_codec_parameters_get_extra_data)
2739
+ V("setCodecParametersExtraData", bare_ffmpeg_codec_parameters_set_extra_data)
2576
2740
 
2577
2741
  V("initFrame", bare_ffmpeg_frame_init)
2578
2742
  V("destroyFrame", bare_ffmpeg_frame_destroy)
@@ -2770,6 +2934,120 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
2770
2934
  V(AVFMT_NEEDNUMBER)
2771
2935
  V(AVFMT_NOTIMESTAMPS)
2772
2936
 
2937
+ // Profile
2938
+ V(AV_PROFILE_UNKNOWN)
2939
+ V(AV_PROFILE_RESERVED)
2940
+ V(AV_PROFILE_AAC_MAIN)
2941
+ V(AV_PROFILE_AAC_LOW)
2942
+ V(AV_PROFILE_AAC_SSR)
2943
+ V(AV_PROFILE_AAC_LTP)
2944
+ V(AV_PROFILE_AAC_HE)
2945
+ V(AV_PROFILE_AAC_HE_V2)
2946
+ V(AV_PROFILE_AAC_LD)
2947
+ V(AV_PROFILE_AAC_ELD)
2948
+ V(AV_PROFILE_AAC_USAC)
2949
+ V(AV_PROFILE_MPEG2_AAC_LOW)
2950
+ V(AV_PROFILE_MPEG2_AAC_HE)
2951
+ V(AV_PROFILE_DNXHD)
2952
+ V(AV_PROFILE_DNXHR_LB)
2953
+ V(AV_PROFILE_DNXHR_SQ)
2954
+ V(AV_PROFILE_DNXHR_HQ)
2955
+ V(AV_PROFILE_DNXHR_HQX)
2956
+ V(AV_PROFILE_DNXHR_444)
2957
+ V(AV_PROFILE_DTS)
2958
+ V(AV_PROFILE_DTS_ES)
2959
+ V(AV_PROFILE_DTS_96_24)
2960
+ V(AV_PROFILE_DTS_HD_HRA)
2961
+ V(AV_PROFILE_DTS_HD_MA)
2962
+ V(AV_PROFILE_DTS_EXPRESS)
2963
+ V(AV_PROFILE_DTS_HD_MA_X)
2964
+ V(AV_PROFILE_DTS_HD_MA_X_IMAX)
2965
+ V(AV_PROFILE_EAC3_DDP_ATMOS)
2966
+ V(AV_PROFILE_TRUEHD_ATMOS)
2967
+ V(AV_PROFILE_MPEG2_422)
2968
+ V(AV_PROFILE_MPEG2_HIGH)
2969
+ V(AV_PROFILE_MPEG2_SS)
2970
+ V(AV_PROFILE_MPEG2_SNR_SCALABLE)
2971
+ V(AV_PROFILE_MPEG2_MAIN)
2972
+ V(AV_PROFILE_MPEG2_SIMPLE)
2973
+ V(AV_PROFILE_H264_CONSTRAINED)
2974
+ V(AV_PROFILE_H264_INTRA)
2975
+ V(AV_PROFILE_H264_BASELINE)
2976
+ V(AV_PROFILE_H264_CONSTRAINED_BASELINE)
2977
+ V(AV_PROFILE_H264_MAIN)
2978
+ V(AV_PROFILE_H264_EXTENDED)
2979
+ V(AV_PROFILE_H264_HIGH)
2980
+ V(AV_PROFILE_H264_HIGH_10)
2981
+ V(AV_PROFILE_H264_HIGH_10_INTRA)
2982
+ V(AV_PROFILE_H264_MULTIVIEW_HIGH)
2983
+ V(AV_PROFILE_H264_HIGH_422)
2984
+ V(AV_PROFILE_H264_HIGH_422_INTRA)
2985
+ V(AV_PROFILE_H264_STEREO_HIGH)
2986
+ V(AV_PROFILE_H264_HIGH_444)
2987
+ V(AV_PROFILE_H264_HIGH_444_PREDICTIVE)
2988
+ V(AV_PROFILE_H264_HIGH_444_INTRA)
2989
+ V(AV_PROFILE_H264_CAVLC_444)
2990
+ V(AV_PROFILE_VC1_SIMPLE)
2991
+ V(AV_PROFILE_VC1_MAIN)
2992
+ V(AV_PROFILE_VC1_COMPLEX)
2993
+ V(AV_PROFILE_VC1_ADVANCED)
2994
+ V(AV_PROFILE_MPEG4_SIMPLE)
2995
+ V(AV_PROFILE_MPEG4_SIMPLE_SCALABLE)
2996
+ V(AV_PROFILE_MPEG4_CORE)
2997
+ V(AV_PROFILE_MPEG4_MAIN)
2998
+ V(AV_PROFILE_MPEG4_N_BIT)
2999
+ V(AV_PROFILE_MPEG4_SCALABLE_TEXTURE)
3000
+ V(AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION)
3001
+ V(AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE)
3002
+ V(AV_PROFILE_MPEG4_HYBRID)
3003
+ V(AV_PROFILE_MPEG4_ADVANCED_REAL_TIME)
3004
+ V(AV_PROFILE_MPEG4_CORE_SCALABLE)
3005
+ V(AV_PROFILE_MPEG4_ADVANCED_CODING)
3006
+ V(AV_PROFILE_MPEG4_ADVANCED_CORE)
3007
+ V(AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE)
3008
+ V(AV_PROFILE_MPEG4_SIMPLE_STUDIO)
3009
+ V(AV_PROFILE_MPEG4_ADVANCED_SIMPLE)
3010
+ V(AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0)
3011
+ V(AV_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1)
3012
+ V(AV_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION)
3013
+ V(AV_PROFILE_JPEG2000_DCINEMA_2K)
3014
+ V(AV_PROFILE_JPEG2000_DCINEMA_4K)
3015
+ V(AV_PROFILE_VP9_0)
3016
+ V(AV_PROFILE_VP9_1)
3017
+ V(AV_PROFILE_VP9_2)
3018
+ V(AV_PROFILE_VP9_3)
3019
+ V(AV_PROFILE_HEVC_MAIN)
3020
+ V(AV_PROFILE_HEVC_MAIN_10)
3021
+ V(AV_PROFILE_HEVC_MAIN_STILL_PICTURE)
3022
+ V(AV_PROFILE_HEVC_REXT)
3023
+ V(AV_PROFILE_HEVC_MULTIVIEW_MAIN)
3024
+ V(AV_PROFILE_HEVC_SCC)
3025
+ V(AV_PROFILE_VVC_MAIN_10)
3026
+ V(AV_PROFILE_VVC_MAIN_10_444)
3027
+ V(AV_PROFILE_AV1_MAIN)
3028
+ V(AV_PROFILE_AV1_HIGH)
3029
+ V(AV_PROFILE_AV1_PROFESSIONAL)
3030
+ V(AV_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT)
3031
+ V(AV_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT)
3032
+ V(AV_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT)
3033
+ V(AV_PROFILE_MJPEG_HUFFMAN_LOSSLESS)
3034
+ V(AV_PROFILE_MJPEG_JPEG_LS)
3035
+ V(AV_PROFILE_SBC_MSBC)
3036
+ V(AV_PROFILE_PRORES_PROXY)
3037
+ V(AV_PROFILE_PRORES_LT)
3038
+ V(AV_PROFILE_PRORES_STANDARD)
3039
+ V(AV_PROFILE_PRORES_HQ)
3040
+ V(AV_PROFILE_PRORES_4444)
3041
+ V(AV_PROFILE_PRORES_XQ)
3042
+ V(AV_PROFILE_ARIB_PROFILE_A)
3043
+ V(AV_PROFILE_ARIB_PROFILE_C)
3044
+ V(AV_PROFILE_KLVA_SYNC)
3045
+ V(AV_PROFILE_KLVA_ASYNC)
3046
+ V(AV_PROFILE_EVC_BASELINE)
3047
+ V(AV_PROFILE_EVC_MAIN)
3048
+
3049
+ // Levels
3050
+ V(AV_LEVEL_UNKNOWN)
2773
3051
  #undef V
2774
3052
 
2775
3053
  return exports;
@@ -8,8 +8,14 @@ declare class FFmpegCodecParameters {
8
8
  readonly format: number
9
9
  readonly sampleRate: number
10
10
  readonly nbChannels: number
11
- readonly codecType: number
11
+ codecType: number
12
+ codecTag: number
13
+ codecId: number
14
+ codecProfile: number
15
+ codecLevel: number
16
+ codecFormat: number
12
17
  readonly channelLayout: FFmpegChannelLayout
18
+ extraData: Buffer
13
19
 
14
20
  constructor(handle: ArrayBuffer)
15
21
 
@@ -42,10 +42,50 @@ module.exports = class FFmpegCodecParameters {
42
42
  return binding.getCodecParametersCodecType(this._handle)
43
43
  }
44
44
 
45
+ set codecType(type) {
46
+ return binding.setCodecParametersCodecType(this._handle, type)
47
+ }
48
+
49
+ get codecTag() {
50
+ return binding.getCodecParametersCodecTag(this._handle)
51
+ }
52
+
53
+ set codecTag(tag) {
54
+ return binding.setCodecParametersCodecTag(this._handle, tag)
55
+ }
56
+
45
57
  get codecId() {
46
58
  return binding.getCodecParametersCodecId(this._handle)
47
59
  }
48
60
 
61
+ set codecId(id) {
62
+ return binding.setCodecParametersCodecId(this._handle, id)
63
+ }
64
+
65
+ get codecLevel() {
66
+ return binding.getCodecParametersCodecLevel(this._handle)
67
+ }
68
+
69
+ set codecLevel(level) {
70
+ return binding.setCodecParametersCodecLevel(this._handle, level)
71
+ }
72
+
73
+ get codecProfile() {
74
+ return binding.getCodecParametersCodecProfile(this._handle)
75
+ }
76
+
77
+ set codecProfile(profile) {
78
+ return binding.setCodecParametersCodecProfile(this._handle, profile)
79
+ }
80
+
81
+ get codecFormat() {
82
+ return binding.getCodecParametersCodecFormat(this._handle)
83
+ }
84
+
85
+ set codecFormat(format) {
86
+ return binding.setCodecParametersCodecFormat(this._handle, format)
87
+ }
88
+
49
89
  get channelLayout() {
50
90
  return new ChannelLayout(
51
91
  binding.getCodecParametersChannelLayout(this._handle)
@@ -60,6 +100,19 @@ module.exports = class FFmpegCodecParameters {
60
100
  return binding.getCodecParametersHeight(this._handle)
61
101
  }
62
102
 
103
+ get extraData() {
104
+ return Buffer.from(binding.getCodecParametersExtraData(this._handle))
105
+ }
106
+
107
+ set extraData(value) {
108
+ binding.setCodecParametersExtraData(
109
+ this._handle,
110
+ value.buffer,
111
+ value.byteOffset,
112
+ value.byteLength
113
+ )
114
+ }
115
+
63
116
  fromContext(context) {
64
117
  binding.codecParametersFromContext(this._handle, context._handle)
65
118
  }
@@ -82,7 +135,8 @@ module.exports = class FFmpegCodecParameters {
82
135
  sampleRate: this.sampleRate,
83
136
  nbChannels: this.nbChannels,
84
137
  channelLayout: this.channelLayout,
85
- frameRate: this.frameRate
138
+ frameRate: this.frameRate,
139
+ extraData: this.extraData
86
140
  }
87
141
  }
88
142
  }
@@ -6,6 +6,15 @@ declare const constants: {
6
6
  OPUS: number
7
7
  AV1: number
8
8
  }
9
+ tags: {
10
+ H264: number
11
+ }
12
+ profiles: {
13
+ H264_MAIN: number
14
+ }
15
+ levels: {
16
+ UNKNOWN: number
17
+ }
9
18
  pixelFormats: {
10
19
  RGBA: number
11
20
  RGB24: number
package/lib/constants.js CHANGED
@@ -1,6 +1,16 @@
1
1
  const binding = require('../binding')
2
2
  const errors = require('./errors')
3
3
 
4
+ // Helpers
5
+ function makeTag(a, b, c, d) {
6
+ return (
7
+ a.charCodeAt(0) |
8
+ (b.charCodeAt(0) << 8) |
9
+ (c.charCodeAt(0) << 16) |
10
+ (d.charCodeAt(0) << 24)
11
+ )
12
+ }
13
+
4
14
  module.exports = exports = {
5
15
  codecs: {
6
16
  MJPEG: binding.AV_CODEC_ID_MJPEG,
@@ -11,6 +21,23 @@ module.exports = exports = {
11
21
  FLAC: binding.AV_CODEC_ID_FLAC,
12
22
  MP3: binding.AV_CODEC_ID_MP3
13
23
  },
24
+ tags: {
25
+ // Source Ref:
26
+ // https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/riff.c#L36
27
+ // https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/riff.c#L530
28
+ MJPEG: makeTag('M', 'J', 'P', 'G'),
29
+ H264: makeTag('H', '2', '6', '4'),
30
+ AV1: makeTag('A', 'V', '0', '1'),
31
+ AAC: 0x00ff,
32
+ FLAC: 0xf1ac,
33
+ MP3: 0x0055
34
+ },
35
+ profiles: {
36
+ H264_MAIN: binding.AV_PROFILE_H264_MAIN
37
+ },
38
+ levels: {
39
+ UNKNOWN: binding.AV_LEVEL_UNKNOWN
40
+ },
14
41
  pixelFormats: {
15
42
  RGBA: binding.AV_PIX_FMT_RGBA,
16
43
  RGB24: binding.AV_PIX_FMT_RGB24,
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-19",
4
4
  "description": "Low-level FFmpeg bindings for Bare",
5
5
  "exports": {
6
6
  ".": {