bare-ffmpeg 1.0.0-25 → 1.0.0-26
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 +73 -0
- package/binding.cc +230 -0
- package/lib/codec-context.js +15 -1
- package/lib/codec-parameters.js +8 -0
- package/lib/constants.js +48 -0
- package/lib/packet.js +59 -0
- package/package.json +1 -1
- package/prebuilds/android-arm/bare-ffmpeg.bare +0 -0
- package/prebuilds/android-arm64/bare-ffmpeg.bare +0 -0
- package/prebuilds/android-ia32/bare-ffmpeg.bare +0 -0
- package/prebuilds/android-x64/bare-ffmpeg.bare +0 -0
- package/prebuilds/darwin-arm64/bare-ffmpeg.bare +0 -0
- package/prebuilds/darwin-x64/bare-ffmpeg.bare +0 -0
- package/prebuilds/ios-arm64/bare-ffmpeg.bare +0 -0
- package/prebuilds/ios-arm64-simulator/bare-ffmpeg.bare +0 -0
- package/prebuilds/ios-x64-simulator/bare-ffmpeg.bare +0 -0
- package/prebuilds/linux-arm64/bare-ffmpeg.bare +0 -0
- package/prebuilds/linux-x64/bare-ffmpeg.bare +0 -0
- package/prebuilds/win32-arm64/bare-ffmpeg.bare +0 -0
- package/prebuilds/win32-x64/bare-ffmpeg.bare +0 -0
package/README.md
CHANGED
|
@@ -752,6 +752,18 @@ Gets the stream index this packet belongs to.
|
|
|
752
752
|
|
|
753
753
|
**Returns**: `number`
|
|
754
754
|
|
|
755
|
+
##### `Packet.isKeyFrame`
|
|
756
|
+
|
|
757
|
+
Get or set the key frame flag.
|
|
758
|
+
|
|
759
|
+
**Returns**: `boolean`
|
|
760
|
+
|
|
761
|
+
##### `Packet.sideData`
|
|
762
|
+
|
|
763
|
+
Gets or sets the side data associated with the packet.
|
|
764
|
+
|
|
765
|
+
**Returns**: `Array<SideData>`
|
|
766
|
+
|
|
755
767
|
#### Methods
|
|
756
768
|
|
|
757
769
|
##### `Packet.unref()`
|
|
@@ -766,6 +778,67 @@ Destroys the `Packet` and frees all associated resources. Automatically called w
|
|
|
766
778
|
|
|
767
779
|
**Returns**: `void`
|
|
768
780
|
|
|
781
|
+
### `SideData`
|
|
782
|
+
|
|
783
|
+
The `SideData` API provides functionality to handle side data associated with packets. Side data contains additional metadata that may be useful for specific codecs or processing.
|
|
784
|
+
|
|
785
|
+
```js
|
|
786
|
+
const sideData = new ffmpeg.Packet.SideData(handle, options)
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
Parameters:
|
|
790
|
+
|
|
791
|
+
- `handle` (`ArrayBuffer`): Internal side data handle
|
|
792
|
+
- `options` (`object`, optional): Configuration options
|
|
793
|
+
- `type` (`number`): The side data type
|
|
794
|
+
- `data` (`Buffer`): The side data buffer
|
|
795
|
+
|
|
796
|
+
**Returns**: A new `SideData` instance
|
|
797
|
+
|
|
798
|
+
#### Static Methods
|
|
799
|
+
|
|
800
|
+
##### `SideData.fromData(data, type)`
|
|
801
|
+
|
|
802
|
+
Creates a new `SideData` instance from data and type.
|
|
803
|
+
|
|
804
|
+
Parameters:
|
|
805
|
+
|
|
806
|
+
- `data` (`Buffer`): The side data buffer
|
|
807
|
+
- `type` (`number`): The side data type constant
|
|
808
|
+
|
|
809
|
+
**Returns**: A new `SideData` instance
|
|
810
|
+
|
|
811
|
+
#### Properties
|
|
812
|
+
|
|
813
|
+
##### `SideData.type`
|
|
814
|
+
|
|
815
|
+
Gets the side data type.
|
|
816
|
+
|
|
817
|
+
**Returns**: `number`
|
|
818
|
+
|
|
819
|
+
##### `SideData.name`
|
|
820
|
+
|
|
821
|
+
Gets the human-readable name of the side data type.
|
|
822
|
+
|
|
823
|
+
**Returns**: `string`
|
|
824
|
+
|
|
825
|
+
##### `SideData.data`
|
|
826
|
+
|
|
827
|
+
Gets the side data buffer.
|
|
828
|
+
|
|
829
|
+
**Returns**: `Buffer`
|
|
830
|
+
|
|
831
|
+
#### Example
|
|
832
|
+
|
|
833
|
+
```js
|
|
834
|
+
const packet = new ffmpeg.Packet()
|
|
835
|
+
const sideData = ffmpeg.Packet.SideData.fromData(
|
|
836
|
+
Buffer.from('metadata'),
|
|
837
|
+
ffmpeg.constants.packetSideDataType.NEW_EXTRADATA
|
|
838
|
+
)
|
|
839
|
+
packet.sideData = [sideData]
|
|
840
|
+
```
|
|
841
|
+
|
|
769
842
|
### `Image`
|
|
770
843
|
|
|
771
844
|
The `Image` API provides functionality to create and manage image buffers.
|
package/binding.cc
CHANGED
|
@@ -103,6 +103,10 @@ typedef struct {
|
|
|
103
103
|
AVAudioFifo *handle;
|
|
104
104
|
} bare_ffmpeg_audio_fifo_t;
|
|
105
105
|
|
|
106
|
+
typedef struct {
|
|
107
|
+
AVPacketSideData *handle;
|
|
108
|
+
} bare_ffmpeg_side_data_t;
|
|
109
|
+
|
|
106
110
|
static uv_once_t bare_ffmpeg__init_guard = UV_ONCE_INIT;
|
|
107
111
|
|
|
108
112
|
static inline bool
|
|
@@ -817,6 +821,11 @@ bare_ffmpeg_get_codec_name_by_id(js_env_t *env, js_receiver_t, uint32_t id) {
|
|
|
817
821
|
return std::string(name);
|
|
818
822
|
}
|
|
819
823
|
|
|
824
|
+
static std::string
|
|
825
|
+
bare_ffmpeg_get_sample_format_name_by_id(js_env_t *env, js_receiver_t, uint32_t id) {
|
|
826
|
+
return av_get_sample_fmt_name(static_cast<enum AVSampleFormat>(id));
|
|
827
|
+
}
|
|
828
|
+
|
|
820
829
|
static js_arraybuffer_t
|
|
821
830
|
bare_ffmpeg_codec_context_init(
|
|
822
831
|
js_env_t *env,
|
|
@@ -884,6 +893,49 @@ bare_ffmpeg_codec_context_set_flags(
|
|
|
884
893
|
context->handle->flags = value;
|
|
885
894
|
}
|
|
886
895
|
|
|
896
|
+
static js_arraybuffer_t
|
|
897
|
+
bare_ffmpeg_codec_context_get_extra_data(
|
|
898
|
+
js_env_t *env,
|
|
899
|
+
js_receiver_t,
|
|
900
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context
|
|
901
|
+
) {
|
|
902
|
+
js_arraybuffer_t buffer;
|
|
903
|
+
int err = js_create_arraybuffer(
|
|
904
|
+
env,
|
|
905
|
+
context->handle->extradata,
|
|
906
|
+
static_cast<size_t>(context->handle->extradata_size),
|
|
907
|
+
buffer
|
|
908
|
+
);
|
|
909
|
+
assert(err == 0);
|
|
910
|
+
|
|
911
|
+
return buffer;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
void
|
|
915
|
+
bare_ffmpeg_codec_context_set_extra_data(
|
|
916
|
+
js_env_t *env,
|
|
917
|
+
js_receiver_t,
|
|
918
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context,
|
|
919
|
+
js_arraybuffer_t buffer,
|
|
920
|
+
uint32_t offset,
|
|
921
|
+
uint32_t len
|
|
922
|
+
) {
|
|
923
|
+
std::span<uint8_t> view;
|
|
924
|
+
int err = js_get_arraybuffer_info(env, buffer, view);
|
|
925
|
+
assert(err == 0);
|
|
926
|
+
|
|
927
|
+
if (context->handle->extradata_size) {
|
|
928
|
+
av_free(context->handle->extradata);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
context->handle->extradata = reinterpret_cast<uint8_t *>(av_malloc(len + AV_INPUT_BUFFER_PADDING_SIZE));
|
|
932
|
+
|
|
933
|
+
memset(&context->handle->extradata[len], 0, AV_INPUT_BUFFER_PADDING_SIZE);
|
|
934
|
+
memcpy(context->handle->extradata, &view[offset], len);
|
|
935
|
+
|
|
936
|
+
context->handle->extradata_size = static_cast<int>(len);
|
|
937
|
+
}
|
|
938
|
+
|
|
887
939
|
static int
|
|
888
940
|
bare_ffmpeg_frame_get_format(
|
|
889
941
|
js_env_t *env,
|
|
@@ -1809,6 +1861,25 @@ bare_ffmpeg_codec_parameters_set_video_delay(
|
|
|
1809
1861
|
parameters->handle->video_delay = delay;
|
|
1810
1862
|
}
|
|
1811
1863
|
|
|
1864
|
+
static int
|
|
1865
|
+
bare_ffmpeg_codec_parameters_get_frame_size(
|
|
1866
|
+
js_env_t *env,
|
|
1867
|
+
js_receiver_t,
|
|
1868
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
|
|
1869
|
+
) {
|
|
1870
|
+
return parameters->handle->frame_size;
|
|
1871
|
+
}
|
|
1872
|
+
|
|
1873
|
+
static void
|
|
1874
|
+
bare_ffmpeg_codec_parameters_set_frame_size(
|
|
1875
|
+
js_env_t *env,
|
|
1876
|
+
js_receiver_t,
|
|
1877
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
|
|
1878
|
+
int frame_size
|
|
1879
|
+
) {
|
|
1880
|
+
parameters->handle->frame_size = frame_size;
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1812
1883
|
static js_arraybuffer_t
|
|
1813
1884
|
bare_ffmpeg_frame_init(js_env_t *env, js_receiver_t) {
|
|
1814
1885
|
int err;
|
|
@@ -2318,6 +2389,62 @@ bare_ffmpeg_packet_set_data(
|
|
|
2318
2389
|
memcpy(packet->handle->data, &data[offset], len);
|
|
2319
2390
|
}
|
|
2320
2391
|
|
|
2392
|
+
static std::vector<js_arraybuffer_t>
|
|
2393
|
+
bare_ffmpeg_packet_get_side_data(
|
|
2394
|
+
js_env_t *env,
|
|
2395
|
+
js_receiver_t,
|
|
2396
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> packet
|
|
2397
|
+
) {
|
|
2398
|
+
std::vector<js_arraybuffer_t> res{};
|
|
2399
|
+
|
|
2400
|
+
int count = packet->handle->side_data_elems;
|
|
2401
|
+
if (count == 0) return res;
|
|
2402
|
+
|
|
2403
|
+
for (int i = 0; i < count; i++) {
|
|
2404
|
+
js_arraybuffer_t handle;
|
|
2405
|
+
bare_ffmpeg_side_data_t *sd;
|
|
2406
|
+
int err = js_create_arraybuffer(env, sd, handle);
|
|
2407
|
+
assert(err == 0);
|
|
2408
|
+
|
|
2409
|
+
sd->handle = &packet->handle->side_data[i];
|
|
2410
|
+
|
|
2411
|
+
res.push_back(handle);
|
|
2412
|
+
}
|
|
2413
|
+
|
|
2414
|
+
return res;
|
|
2415
|
+
}
|
|
2416
|
+
|
|
2417
|
+
static void
|
|
2418
|
+
bare_ffmpeg_packet_set_side_data(
|
|
2419
|
+
js_env_t *env,
|
|
2420
|
+
js_receiver_t,
|
|
2421
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> packet,
|
|
2422
|
+
std::vector<js_object_t> side_data_array
|
|
2423
|
+
) {
|
|
2424
|
+
for (js_object_t side_data : side_data_array) {
|
|
2425
|
+
int err;
|
|
2426
|
+
|
|
2427
|
+
int32_t type;
|
|
2428
|
+
err = js_get_property(env, side_data, "type", type);
|
|
2429
|
+
assert(err == 0);
|
|
2430
|
+
|
|
2431
|
+
js_arraybuffer_span_t buf;
|
|
2432
|
+
err = js_get_property(env, side_data, "buffer", buf);
|
|
2433
|
+
assert(err == 0);
|
|
2434
|
+
|
|
2435
|
+
int32_t offset;
|
|
2436
|
+
err = js_get_property(env, side_data, "offset", offset);
|
|
2437
|
+
assert(err == 0);
|
|
2438
|
+
|
|
2439
|
+
int32_t len;
|
|
2440
|
+
err = js_get_property(env, side_data, "length", len);
|
|
2441
|
+
assert(err == 0);
|
|
2442
|
+
|
|
2443
|
+
uint8_t *data = av_packet_new_side_data(packet->handle, static_cast<AVPacketSideDataType>(type), static_cast<size_t>(len));
|
|
2444
|
+
memcpy(data, &buf[static_cast<size_t>(offset)], static_cast<size_t>(len));
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
|
|
2321
2448
|
static bool
|
|
2322
2449
|
bare_ffmpeg_packet_is_keyframe(
|
|
2323
2450
|
js_env_t *,
|
|
@@ -2327,6 +2454,20 @@ bare_ffmpeg_packet_is_keyframe(
|
|
|
2327
2454
|
return packet->handle->flags & AV_PKT_FLAG_KEY;
|
|
2328
2455
|
}
|
|
2329
2456
|
|
|
2457
|
+
static void
|
|
2458
|
+
bare_ffmpeg_packet_set_is_keyframe(
|
|
2459
|
+
js_env_t *,
|
|
2460
|
+
js_receiver_t,
|
|
2461
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> packet,
|
|
2462
|
+
bool has_key_frame
|
|
2463
|
+
) {
|
|
2464
|
+
if (has_key_frame) {
|
|
2465
|
+
packet->handle->flags |= AV_PKT_FLAG_KEY;
|
|
2466
|
+
} else {
|
|
2467
|
+
packet->handle->flags &= ~AV_PKT_FLAG_KEY;
|
|
2468
|
+
}
|
|
2469
|
+
}
|
|
2470
|
+
|
|
2330
2471
|
static int64_t
|
|
2331
2472
|
bare_ffmpeg_packet_get_dts(
|
|
2332
2473
|
js_env_t *env,
|
|
@@ -2469,6 +2610,40 @@ bare_ffmpeg_packet_set_flags(
|
|
|
2469
2610
|
packet->handle->flags = value;
|
|
2470
2611
|
}
|
|
2471
2612
|
|
|
2613
|
+
static int
|
|
2614
|
+
bare_ffmpeg_side_data_get_type(
|
|
2615
|
+
js_env_t *env,
|
|
2616
|
+
js_receiver_t,
|
|
2617
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_side_data_t, 1> side_data
|
|
2618
|
+
) {
|
|
2619
|
+
return side_data->handle->type;
|
|
2620
|
+
}
|
|
2621
|
+
|
|
2622
|
+
static std::string
|
|
2623
|
+
bare_ffmpeg_side_data_get_name(
|
|
2624
|
+
js_env_t *env,
|
|
2625
|
+
js_receiver_t,
|
|
2626
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_side_data_t, 1> side_data
|
|
2627
|
+
) {
|
|
2628
|
+
return av_packet_side_data_name(side_data->handle->type);
|
|
2629
|
+
}
|
|
2630
|
+
|
|
2631
|
+
static js_arraybuffer_t
|
|
2632
|
+
bare_ffmpeg_side_data_get_data(
|
|
2633
|
+
js_env_t *env,
|
|
2634
|
+
js_receiver_t,
|
|
2635
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_side_data_t, 1> side_data
|
|
2636
|
+
) {
|
|
2637
|
+
js_arraybuffer_t handle;
|
|
2638
|
+
uint8_t *buf;
|
|
2639
|
+
int err = js_create_arraybuffer(env, side_data->handle->size, buf, handle);
|
|
2640
|
+
assert(err == 0);
|
|
2641
|
+
|
|
2642
|
+
memcpy(buf, side_data->handle->data, side_data->handle->size);
|
|
2643
|
+
|
|
2644
|
+
return handle;
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2472
2647
|
static js_arraybuffer_t
|
|
2473
2648
|
bare_ffmpeg_scaler_init(
|
|
2474
2649
|
js_env_t *env,
|
|
@@ -3020,6 +3195,7 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3020
3195
|
V("findDecoderByID", bare_ffmpeg_find_decoder_by_id)
|
|
3021
3196
|
V("findEncoderByID", bare_ffmpeg_find_encoder_by_id)
|
|
3022
3197
|
V("getCodecNameByID", bare_ffmpeg_get_codec_name_by_id)
|
|
3198
|
+
V("getSampleFormatNameByID", bare_ffmpeg_get_sample_format_name_by_id)
|
|
3023
3199
|
|
|
3024
3200
|
V("initCodecContext", bare_ffmpeg_codec_context_init)
|
|
3025
3201
|
V("destroyCodecContext", bare_ffmpeg_codec_context_destroy)
|
|
@@ -3045,6 +3221,8 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3045
3221
|
V("setCodecContextGOPSize", bare_ffmpeg_codec_context_set_gop_size)
|
|
3046
3222
|
V("getCodecContextFramerate", bare_ffmpeg_codec_context_get_framerate)
|
|
3047
3223
|
V("setCodecContextFramerate", bare_ffmpeg_codec_context_set_framerate)
|
|
3224
|
+
V("getCodecContextExtraData", bare_ffmpeg_codec_context_get_extra_data)
|
|
3225
|
+
V("setCodecContextExtraData", bare_ffmpeg_codec_context_set_extra_data)
|
|
3048
3226
|
|
|
3049
3227
|
V("sendCodecContextPacket", bare_ffmpeg_codec_context_send_packet)
|
|
3050
3228
|
V("receiveCodecContextPacket", bare_ffmpeg_codec_context_receive_packet)
|
|
@@ -3099,6 +3277,8 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3099
3277
|
V("setCodecParametersSampleAspectRatio", bare_ffmpeg_codec_parameters_set_sample_aspect_ratio)
|
|
3100
3278
|
V("getCodecParametersVideoDelay", bare_ffmpeg_codec_parameters_get_video_delay)
|
|
3101
3279
|
V("setCodecParametersVideoDelay", bare_ffmpeg_codec_parameters_set_video_delay)
|
|
3280
|
+
V("getCodecParametersFrameSize", bare_ffmpeg_codec_parameters_get_frame_size)
|
|
3281
|
+
V("setCodecParametersFrameSize", bare_ffmpeg_codec_parameters_set_frame_size)
|
|
3102
3282
|
|
|
3103
3283
|
V("initFrame", bare_ffmpeg_frame_init)
|
|
3104
3284
|
V("destroyFrame", bare_ffmpeg_frame_destroy)
|
|
@@ -3138,7 +3318,10 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3138
3318
|
V("setPacketStreamIndex", bare_ffmpeg_packet_set_stream_index)
|
|
3139
3319
|
V("getPacketData", bare_ffmpeg_packet_get_data)
|
|
3140
3320
|
V("setPacketData", bare_ffmpeg_packet_set_data)
|
|
3321
|
+
V("getPacketSideData", bare_ffmpeg_packet_get_side_data)
|
|
3322
|
+
V("setPacketSideData", bare_ffmpeg_packet_set_side_data)
|
|
3141
3323
|
V("isPacketKeyframe", bare_ffmpeg_packet_is_keyframe)
|
|
3324
|
+
V("setPacketIsKeyFrame", bare_ffmpeg_packet_set_is_keyframe)
|
|
3142
3325
|
V("getPacketDTS", bare_ffmpeg_packet_get_dts)
|
|
3143
3326
|
V("setPacketDTS", bare_ffmpeg_packet_set_dts)
|
|
3144
3327
|
V("getPacketPTS", bare_ffmpeg_packet_get_pts)
|
|
@@ -3151,6 +3334,10 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3151
3334
|
V("getPacketFlags", bare_ffmpeg_packet_get_flags)
|
|
3152
3335
|
V("setPacketFlags", bare_ffmpeg_packet_set_flags)
|
|
3153
3336
|
|
|
3337
|
+
V("getSideDataType", bare_ffmpeg_side_data_get_type)
|
|
3338
|
+
V("getSideDataName", bare_ffmpeg_side_data_get_name)
|
|
3339
|
+
V("getSideDataBuffer", bare_ffmpeg_side_data_get_data)
|
|
3340
|
+
|
|
3154
3341
|
V("initScaler", bare_ffmpeg_scaler_init)
|
|
3155
3342
|
V("destroyScaler", bare_ffmpeg_scaler_destroy)
|
|
3156
3343
|
V("scaleScaler", bare_ffmpeg_scaler_scale)
|
|
@@ -3417,6 +3604,49 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3417
3604
|
V(SEEK_CUR)
|
|
3418
3605
|
V(SEEK_SET)
|
|
3419
3606
|
V(SEEK_END)
|
|
3607
|
+
|
|
3608
|
+
V(AV_PKT_DATA_PALETTE)
|
|
3609
|
+
V(AV_PKT_DATA_NEW_EXTRADATA)
|
|
3610
|
+
V(AV_PKT_DATA_PARAM_CHANGE)
|
|
3611
|
+
V(AV_PKT_DATA_H263_MB_INFO)
|
|
3612
|
+
V(AV_PKT_DATA_REPLAYGAIN)
|
|
3613
|
+
V(AV_PKT_DATA_DISPLAYMATRIX)
|
|
3614
|
+
V(AV_PKT_DATA_STEREO3D)
|
|
3615
|
+
V(AV_PKT_DATA_AUDIO_SERVICE_TYPE)
|
|
3616
|
+
V(AV_PKT_DATA_QUALITY_STATS)
|
|
3617
|
+
V(AV_PKT_DATA_FALLBACK_TRACK)
|
|
3618
|
+
V(AV_PKT_DATA_CPB_PROPERTIES)
|
|
3619
|
+
V(AV_PKT_DATA_SKIP_SAMPLES)
|
|
3620
|
+
V(AV_PKT_DATA_JP_DUALMONO)
|
|
3621
|
+
V(AV_PKT_DATA_STRINGS_METADATA)
|
|
3622
|
+
V(AV_PKT_DATA_SUBTITLE_POSITION)
|
|
3623
|
+
V(AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL)
|
|
3624
|
+
V(AV_PKT_DATA_WEBVTT_IDENTIFIER)
|
|
3625
|
+
V(AV_PKT_DATA_WEBVTT_SETTINGS)
|
|
3626
|
+
V(AV_PKT_DATA_METADATA_UPDATE)
|
|
3627
|
+
V(AV_PKT_DATA_MPEGTS_STREAM_ID)
|
|
3628
|
+
V(AV_PKT_DATA_MASTERING_DISPLAY_METADATA)
|
|
3629
|
+
V(AV_PKT_DATA_SPHERICAL)
|
|
3630
|
+
V(AV_PKT_DATA_CONTENT_LIGHT_LEVEL)
|
|
3631
|
+
V(AV_PKT_DATA_A53_CC)
|
|
3632
|
+
V(AV_PKT_DATA_ENCRYPTION_INIT_INFO)
|
|
3633
|
+
V(AV_PKT_DATA_ENCRYPTION_INFO)
|
|
3634
|
+
V(AV_PKT_DATA_AFD)
|
|
3635
|
+
V(AV_PKT_DATA_PRFT)
|
|
3636
|
+
V(AV_PKT_DATA_ICC_PROFILE)
|
|
3637
|
+
V(AV_PKT_DATA_DOVI_CONF)
|
|
3638
|
+
V(AV_PKT_DATA_S12M_TIMECODE)
|
|
3639
|
+
V(AV_PKT_DATA_DYNAMIC_HDR10_PLUS)
|
|
3640
|
+
V(AV_PKT_DATA_IAMF_MIX_GAIN_PARAM)
|
|
3641
|
+
V(AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM)
|
|
3642
|
+
V(AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM)
|
|
3643
|
+
V(AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT)
|
|
3644
|
+
V(AV_PKT_DATA_FRAME_CROPPING)
|
|
3645
|
+
V(AV_PKT_DATA_LCEVC)
|
|
3646
|
+
V(AV_PKT_DATA_3D_REFERENCE_DISPLAYS)
|
|
3647
|
+
V(AV_PKT_DATA_RTCP_SR)
|
|
3648
|
+
V(AV_PKT_DATA_NB)
|
|
3649
|
+
|
|
3420
3650
|
#undef V
|
|
3421
3651
|
|
|
3422
3652
|
return exports;
|
package/lib/codec-context.js
CHANGED
|
@@ -107,6 +107,19 @@ module.exports = class FFmpegCodecContext {
|
|
|
107
107
|
binding.setCodecContextFlags(this._handle, value)
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
get extraData() {
|
|
111
|
+
return Buffer.from(binding.getCodecContextExtraData(this._handle))
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
set extraData(value) {
|
|
115
|
+
binding.setCodecContextExtraData(
|
|
116
|
+
this._handle,
|
|
117
|
+
value.buffer,
|
|
118
|
+
value.byteOffset,
|
|
119
|
+
value.byteLength
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
|
|
110
123
|
open(options) {
|
|
111
124
|
if (this._opened) return
|
|
112
125
|
this._opened = true
|
|
@@ -155,7 +168,8 @@ module.exports = class FFmpegCodecContext {
|
|
|
155
168
|
sampleRate: this.sampleRate,
|
|
156
169
|
timeBase: this.timeBase,
|
|
157
170
|
channelLayout: this.channelLayout,
|
|
158
|
-
gopSize: this.gopSize
|
|
171
|
+
gopSize: this.gopSize,
|
|
172
|
+
extraData: this.extraData
|
|
159
173
|
}
|
|
160
174
|
}
|
|
161
175
|
}
|
package/lib/codec-parameters.js
CHANGED
|
@@ -72,6 +72,14 @@ module.exports = class FFmpegCodecParameters {
|
|
|
72
72
|
)
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
get frameSize() {
|
|
76
|
+
return binding.getCodecParametersFrameSize(this._handle)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
set frameSize(size) {
|
|
80
|
+
binding.setCodecParametersFrameSize(this._handle, size)
|
|
81
|
+
}
|
|
82
|
+
|
|
75
83
|
get videoDelay() {
|
|
76
84
|
return binding.getCodecParametersVideoDelay(this._handle)
|
|
77
85
|
}
|
package/lib/constants.js
CHANGED
|
@@ -140,6 +140,50 @@ module.exports = exports = {
|
|
|
140
140
|
CUR: binding.SEEK_CUR,
|
|
141
141
|
SET: binding.SEEK_SET,
|
|
142
142
|
END: binding.SEEK_END
|
|
143
|
+
},
|
|
144
|
+
packetSideDataType: {
|
|
145
|
+
PALETTE: binding.AV_PKT_DATA_PALETTE,
|
|
146
|
+
NEW_EXTRADATA: binding.AV_PKT_DATA_NEW_EXTRADATA,
|
|
147
|
+
PARAM_CHANGE: binding.AV_PKT_DATA_PARAM_CHANGE,
|
|
148
|
+
H263_MB_INFO: binding.AV_PKT_DATA_H263_MB_INFO,
|
|
149
|
+
REPLAYGAIN: binding.AV_PKT_DATA_REPLAYGAIN,
|
|
150
|
+
DISPLAYMATRIX: binding.AV_PKT_DATA_DISPLAYMATRIX,
|
|
151
|
+
STEREO3D: binding.AV_PKT_DATA_STEREO3D,
|
|
152
|
+
AUDIO_SERVICE_TYPE: binding.AV_PKT_DATA_AUDIO_SERVICE_TYPE,
|
|
153
|
+
QUALITY_STATS: binding.AV_PKT_DATA_QUALITY_STATS,
|
|
154
|
+
FALLBACK_TRACK: binding.AV_PKT_DATA_FALLBACK_TRACK,
|
|
155
|
+
CPB_PROPERTIES: binding.AV_PKT_DATA_CPB_PROPERTIES,
|
|
156
|
+
SKIP_SAMPLES: binding.AV_PKT_DATA_SKIP_SAMPLES,
|
|
157
|
+
JP_DUALMONO: binding.AV_PKT_DATA_JP_DUALMONO,
|
|
158
|
+
STRINGS_METADATA: binding.AV_PKT_DATA_STRINGS_METADATA,
|
|
159
|
+
SUBTITLE_POSITION: binding.AV_PKT_DATA_SUBTITLE_POSITION,
|
|
160
|
+
MATROSKA_BLOCKADDITIONAL: binding.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
|
|
161
|
+
WEBVTT_IDENTIFIER: binding.AV_PKT_DATA_WEBVTT_IDENTIFIER,
|
|
162
|
+
WEBVTT_SETTINGS: binding.AV_PKT_DATA_WEBVTT_SETTINGS,
|
|
163
|
+
METADATA_UPDATE: binding.AV_PKT_DATA_METADATA_UPDATE,
|
|
164
|
+
MPEGTS_STREAM_ID: binding.AV_PKT_DATA_MPEGTS_STREAM_ID,
|
|
165
|
+
MASTERING_DISPLAY_METADATA: binding.AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
|
|
166
|
+
SPHERICAL: binding.AV_PKT_DATA_SPHERICAL,
|
|
167
|
+
CONTENT_LIGHT_LEVEL: binding.AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
|
|
168
|
+
A53_CC: binding.AV_PKT_DATA_A53_CC,
|
|
169
|
+
ENCRYPTION_INIT_INFO: binding.AV_PKT_DATA_ENCRYPTION_INIT_INFO,
|
|
170
|
+
ENCRYPTION_INFO: binding.AV_PKT_DATA_ENCRYPTION_INFO,
|
|
171
|
+
AFD: binding.AV_PKT_DATA_AFD,
|
|
172
|
+
PRFT: binding.AV_PKT_DATA_PRFT,
|
|
173
|
+
ICC_PROFILE: binding.AV_PKT_DATA_ICC_PROFILE,
|
|
174
|
+
DOVI_CONF: binding.AV_PKT_DATA_DOVI_CONF,
|
|
175
|
+
S12M_TIMECODE: binding.AV_PKT_DATA_S12M_TIMECODE,
|
|
176
|
+
DYNAMIC_HDR10_PLUS: binding.AV_PKT_DATA_DYNAMIC_HDR10_PLUS,
|
|
177
|
+
IAMF_MIX_GAIN_PARAM: binding.AV_PKT_DATA_IAMF_MIX_GAIN_PARAM,
|
|
178
|
+
IAMF_DEMIXING_INFO_PARAM: binding.AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM,
|
|
179
|
+
IAMF_RECON_GAIN_INFO_PARAM: binding.AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM,
|
|
180
|
+
AMBIENT_VIEWING_ENVIRONMENT:
|
|
181
|
+
binding.AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,
|
|
182
|
+
FRAME_CROPPING: binding.AV_PKT_DATA_FRAME_CROPPING,
|
|
183
|
+
LCEVC: binding.AV_PKT_DATA_LCEVC,
|
|
184
|
+
'3D_REFERENCE_DISPLAYS': binding.AV_PKT_DATA_3D_REFERENCE_DISPLAYS,
|
|
185
|
+
RTCP_SR: binding.AV_PKT_DATA_RTCP_SR,
|
|
186
|
+
NB: binding.AV_PKT_DATA_NB
|
|
143
187
|
}
|
|
144
188
|
}
|
|
145
189
|
|
|
@@ -190,3 +234,7 @@ exports.toChannelLayout = function toChannelLayout(layout) {
|
|
|
190
234
|
`Channel layout must be a number or string. Received ${typeof layout} (${layout})`
|
|
191
235
|
)
|
|
192
236
|
}
|
|
237
|
+
|
|
238
|
+
exports.getSampleFormatName = function (sampleFormat) {
|
|
239
|
+
return binding.getSampleFormatNameByID(sampleFormat)
|
|
240
|
+
}
|
package/lib/packet.js
CHANGED
|
@@ -1,6 +1,42 @@
|
|
|
1
1
|
const binding = require('../binding')
|
|
2
2
|
const Rational = require('./rational')
|
|
3
3
|
|
|
4
|
+
class SideData {
|
|
5
|
+
constructor(handle, opts = {}) {
|
|
6
|
+
this._handle = handle
|
|
7
|
+
this._type = opts.type || null
|
|
8
|
+
this._data = opts.data || null
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
static fromData(data, type) {
|
|
12
|
+
return new SideData(null, { data, type })
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get type() {
|
|
16
|
+
if (this._type) return this._type
|
|
17
|
+
return binding.getSideDataType(this._handle)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get name() {
|
|
21
|
+
if (!this._handle) return null
|
|
22
|
+
return binding.getSideDataName(this._handle)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
get data() {
|
|
26
|
+
if (this._data) return this._data
|
|
27
|
+
return Buffer.from(binding.getSideDataBuffer(this._handle))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
[Symbol.for('bare.inspect')]() {
|
|
31
|
+
return {
|
|
32
|
+
__proto__: { constructor: SideData },
|
|
33
|
+
type: this.type,
|
|
34
|
+
name: this.name,
|
|
35
|
+
data: this.data
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
4
40
|
module.exports = class FFmpegPacket {
|
|
5
41
|
constructor(buffer) {
|
|
6
42
|
if (buffer) {
|
|
@@ -44,10 +80,31 @@ module.exports = class FFmpegPacket {
|
|
|
44
80
|
)
|
|
45
81
|
}
|
|
46
82
|
|
|
83
|
+
get sideData() {
|
|
84
|
+
const handles = binding.getPacketSideData(this._handle)
|
|
85
|
+
return handles.map((handle) => new SideData(handle))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
set sideData(values) {
|
|
89
|
+
binding.setPacketSideData(
|
|
90
|
+
this._handle,
|
|
91
|
+
values.map((value) => ({
|
|
92
|
+
buffer: value.data.buffer,
|
|
93
|
+
offset: value.data.byteOffset,
|
|
94
|
+
length: value.data.byteLength,
|
|
95
|
+
type: value.type
|
|
96
|
+
}))
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
|
|
47
100
|
get isKeyframe() {
|
|
48
101
|
return binding.isPacketKeyframe(this._handle)
|
|
49
102
|
}
|
|
50
103
|
|
|
104
|
+
set isKeyframe(value) {
|
|
105
|
+
binding.setPacketIsKeyFrame(this._handle, value)
|
|
106
|
+
}
|
|
107
|
+
|
|
51
108
|
get dts() {
|
|
52
109
|
return binding.getPacketDTS(this._handle)
|
|
53
110
|
}
|
|
@@ -115,3 +172,5 @@ module.exports = class FFmpegPacket {
|
|
|
115
172
|
this.destroy()
|
|
116
173
|
}
|
|
117
174
|
}
|
|
175
|
+
|
|
176
|
+
module.exports.SideData = SideData
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|