bare-ffmpeg 1.0.0-25 → 1.0.0-27
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 +299 -0
- package/binding.cc +730 -32
- package/index.js +8 -0
- package/lib/codec-context.js +63 -1
- package/lib/codec-parameters.js +14 -2
- package/lib/constants.js +57 -0
- package/lib/filter-context.js +7 -0
- package/lib/filter-graph.js +54 -0
- package/lib/filter-inout.js +55 -0
- package/lib/filter.js +7 -0
- package/lib/packet.js +65 -1
- package/lib/rational.js +15 -3
- package/lib/samples.js +40 -25
- package/lib/stream.js +11 -0
- package/package.json +4 -2
- 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/binding.cc
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#include <optional>
|
|
1
2
|
#include <tuple>
|
|
2
3
|
#include <vector>
|
|
3
4
|
|
|
@@ -16,6 +17,9 @@ extern "C" {
|
|
|
16
17
|
#include <libavcodec/codec_par.h>
|
|
17
18
|
#include <libavcodec/packet.h>
|
|
18
19
|
#include <libavdevice/avdevice.h>
|
|
20
|
+
#include <libavfilter/avfilter.h>
|
|
21
|
+
#include <libavfilter/buffersink.h>
|
|
22
|
+
#include <libavfilter/buffersrc.h>
|
|
19
23
|
#include <libavformat/avformat.h>
|
|
20
24
|
#include <libavformat/avio.h>
|
|
21
25
|
#include <libavutil/audio_fifo.h>
|
|
@@ -103,6 +107,26 @@ typedef struct {
|
|
|
103
107
|
AVAudioFifo *handle;
|
|
104
108
|
} bare_ffmpeg_audio_fifo_t;
|
|
105
109
|
|
|
110
|
+
typedef struct {
|
|
111
|
+
AVPacketSideData *handle;
|
|
112
|
+
} bare_ffmpeg_side_data_t;
|
|
113
|
+
|
|
114
|
+
typedef struct {
|
|
115
|
+
const AVFilter *handle;
|
|
116
|
+
} bare_ffmpeg_filter_t;
|
|
117
|
+
|
|
118
|
+
typedef struct {
|
|
119
|
+
AVFilterContext *handle;
|
|
120
|
+
} bare_ffmpeg_filter_context_t;
|
|
121
|
+
|
|
122
|
+
typedef struct {
|
|
123
|
+
AVFilterGraph *handle;
|
|
124
|
+
} bare_ffmpeg_filter_graph_t;
|
|
125
|
+
|
|
126
|
+
typedef struct {
|
|
127
|
+
AVFilterInOut *handle;
|
|
128
|
+
} bare_ffmpeg_filter_inout_t;
|
|
129
|
+
|
|
106
130
|
static uv_once_t bare_ffmpeg__init_guard = UV_ONCE_INIT;
|
|
107
131
|
|
|
108
132
|
static inline bool
|
|
@@ -817,6 +841,160 @@ bare_ffmpeg_get_codec_name_by_id(js_env_t *env, js_receiver_t, uint32_t id) {
|
|
|
817
841
|
return std::string(name);
|
|
818
842
|
}
|
|
819
843
|
|
|
844
|
+
static std::string
|
|
845
|
+
bare_ffmpeg_get_sample_format_name_by_id(js_env_t *env, js_receiver_t, uint32_t id) {
|
|
846
|
+
return av_get_sample_fmt_name(static_cast<enum AVSampleFormat>(id));
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
static std::vector<int32_t>
|
|
850
|
+
bare_ffmpeg_codec_get_supported_config(
|
|
851
|
+
js_env_t *env,
|
|
852
|
+
js_receiver_t,
|
|
853
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context,
|
|
854
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_t, 1> codec,
|
|
855
|
+
int32_t cfg
|
|
856
|
+
) {
|
|
857
|
+
int err;
|
|
858
|
+
|
|
859
|
+
int count = 0;
|
|
860
|
+
const void *list = nullptr;
|
|
861
|
+
|
|
862
|
+
err = avcodec_get_supported_config(context->handle, codec->handle, static_cast<AVCodecConfig>(cfg), 0, &list, &count);
|
|
863
|
+
if (err < 0) {
|
|
864
|
+
err = js_throw_error(env, NULL, av_err2str(err));
|
|
865
|
+
assert(err == 0);
|
|
866
|
+
|
|
867
|
+
throw js_pending_exception;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
std::vector<int32_t> values;
|
|
871
|
+
|
|
872
|
+
if (count > 0 && list) {
|
|
873
|
+
const int32_t *int_list = static_cast<const int32_t *>(list);
|
|
874
|
+
for (int i = 0; i < count; i++) {
|
|
875
|
+
values.push_back(int_list[i]);
|
|
876
|
+
}
|
|
877
|
+
return values;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
switch (static_cast<AVCodecConfig>(cfg)) {
|
|
881
|
+
case AV_CODEC_CONFIG_PIX_FORMAT:
|
|
882
|
+
for (int i = 0; i < AV_PIX_FMT_NB; i++) {
|
|
883
|
+
if (av_pix_fmt_desc_get(static_cast<AVPixelFormat>(i)) != nullptr) {
|
|
884
|
+
values.push_back(i);
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
break;
|
|
888
|
+
case AV_CODEC_CONFIG_SAMPLE_FORMAT:
|
|
889
|
+
for (int i = 0; i < AV_SAMPLE_FMT_NB; i++) {
|
|
890
|
+
values.push_back(i);
|
|
891
|
+
}
|
|
892
|
+
break;
|
|
893
|
+
case AV_CODEC_CONFIG_COLOR_RANGE:
|
|
894
|
+
values.push_back(AVCOL_RANGE_UNSPECIFIED);
|
|
895
|
+
values.push_back(AVCOL_RANGE_MPEG);
|
|
896
|
+
values.push_back(AVCOL_RANGE_JPEG);
|
|
897
|
+
break;
|
|
898
|
+
case AV_CODEC_CONFIG_COLOR_SPACE:
|
|
899
|
+
for (int i = 0; i < AVCOL_SPC_NB; i++) {
|
|
900
|
+
values.push_back(i);
|
|
901
|
+
}
|
|
902
|
+
break;
|
|
903
|
+
case AV_CODEC_CONFIG_SAMPLE_RATE:
|
|
904
|
+
values.push_back(0);
|
|
905
|
+
break;
|
|
906
|
+
default:
|
|
907
|
+
break;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
return values;
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
static std::optional<js_arraybuffer_t>
|
|
914
|
+
bare_ffmpeg_codec_get_supported_frame_rates(
|
|
915
|
+
js_env_t *env,
|
|
916
|
+
js_receiver_t,
|
|
917
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context,
|
|
918
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_t, 1> codec
|
|
919
|
+
) {
|
|
920
|
+
int err;
|
|
921
|
+
|
|
922
|
+
const AVCodecContext *ctx = context->handle;
|
|
923
|
+
const AVCodec *c = codec->handle;
|
|
924
|
+
|
|
925
|
+
int count = 0;
|
|
926
|
+
const void *list = nullptr;
|
|
927
|
+
|
|
928
|
+
err = avcodec_get_supported_config(ctx, c, AV_CODEC_CONFIG_FRAME_RATE, 0, &list, &count);
|
|
929
|
+
if (err < 0) {
|
|
930
|
+
err = js_throw_error(env, NULL, av_err2str(err));
|
|
931
|
+
assert(err == 0);
|
|
932
|
+
|
|
933
|
+
throw js_pending_exception;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
if (!list || count == 0) {
|
|
937
|
+
return std::nullopt;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
js_arraybuffer_t result;
|
|
941
|
+
int32_t *data;
|
|
942
|
+
err = js_create_arraybuffer(env, static_cast<size_t>(count * 2), data, result);
|
|
943
|
+
assert(err == 0);
|
|
944
|
+
|
|
945
|
+
const AVRational *rational_list = static_cast<const AVRational *>(list);
|
|
946
|
+
for (int i = 0; i < count; i++) {
|
|
947
|
+
data[i * 2] = rational_list[i].num;
|
|
948
|
+
data[i * 2 + 1] = rational_list[i].den;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
return result;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
static std::optional<std::vector<js_arraybuffer_t>>
|
|
955
|
+
bare_ffmpeg_codec_get_supported_channel_layouts(
|
|
956
|
+
js_env_t *env,
|
|
957
|
+
js_receiver_t,
|
|
958
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context,
|
|
959
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_t, 1> codec
|
|
960
|
+
) {
|
|
961
|
+
int err;
|
|
962
|
+
std::vector<js_arraybuffer_t> result;
|
|
963
|
+
|
|
964
|
+
const AVCodecContext *ctx = context->handle;
|
|
965
|
+
const AVCodec *c = codec->handle;
|
|
966
|
+
|
|
967
|
+
int count = 0;
|
|
968
|
+
const void *list = nullptr;
|
|
969
|
+
|
|
970
|
+
err = avcodec_get_supported_config(ctx, c, AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, &list, &count);
|
|
971
|
+
if (err < 0) {
|
|
972
|
+
err = js_throw_error(env, NULL, av_err2str(err));
|
|
973
|
+
assert(err == 0);
|
|
974
|
+
|
|
975
|
+
throw js_pending_exception;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
if (!list || count == 0) {
|
|
979
|
+
return std::nullopt;
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
const AVChannelLayout *layout_list = static_cast<const AVChannelLayout *>(list);
|
|
983
|
+
for (int i = 0; i < count; i++) {
|
|
984
|
+
js_arraybuffer_t handle;
|
|
985
|
+
bare_ffmpeg_channel_layout_t *layout;
|
|
986
|
+
err = js_create_arraybuffer(env, layout, handle);
|
|
987
|
+
assert(err == 0);
|
|
988
|
+
|
|
989
|
+
err = av_channel_layout_copy(&layout->handle, &layout_list[i]);
|
|
990
|
+
assert(err >= 0);
|
|
991
|
+
|
|
992
|
+
result.push_back(handle);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
return result;
|
|
996
|
+
}
|
|
997
|
+
|
|
820
998
|
static js_arraybuffer_t
|
|
821
999
|
bare_ffmpeg_codec_context_init(
|
|
822
1000
|
js_env_t *env,
|
|
@@ -884,6 +1062,49 @@ bare_ffmpeg_codec_context_set_flags(
|
|
|
884
1062
|
context->handle->flags = value;
|
|
885
1063
|
}
|
|
886
1064
|
|
|
1065
|
+
static js_arraybuffer_t
|
|
1066
|
+
bare_ffmpeg_codec_context_get_extra_data(
|
|
1067
|
+
js_env_t *env,
|
|
1068
|
+
js_receiver_t,
|
|
1069
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context
|
|
1070
|
+
) {
|
|
1071
|
+
js_arraybuffer_t buffer;
|
|
1072
|
+
int err = js_create_arraybuffer(
|
|
1073
|
+
env,
|
|
1074
|
+
context->handle->extradata,
|
|
1075
|
+
static_cast<size_t>(context->handle->extradata_size),
|
|
1076
|
+
buffer
|
|
1077
|
+
);
|
|
1078
|
+
assert(err == 0);
|
|
1079
|
+
|
|
1080
|
+
return buffer;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
void
|
|
1084
|
+
bare_ffmpeg_codec_context_set_extra_data(
|
|
1085
|
+
js_env_t *env,
|
|
1086
|
+
js_receiver_t,
|
|
1087
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context,
|
|
1088
|
+
js_arraybuffer_t buffer,
|
|
1089
|
+
uint32_t offset,
|
|
1090
|
+
uint32_t len
|
|
1091
|
+
) {
|
|
1092
|
+
std::span<uint8_t> view;
|
|
1093
|
+
int err = js_get_arraybuffer_info(env, buffer, view);
|
|
1094
|
+
assert(err == 0);
|
|
1095
|
+
|
|
1096
|
+
if (context->handle->extradata_size) {
|
|
1097
|
+
av_free(context->handle->extradata);
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
context->handle->extradata = reinterpret_cast<uint8_t *>(av_malloc(len + AV_INPUT_BUFFER_PADDING_SIZE));
|
|
1101
|
+
|
|
1102
|
+
memset(&context->handle->extradata[len], 0, AV_INPUT_BUFFER_PADDING_SIZE);
|
|
1103
|
+
memcpy(context->handle->extradata, &view[offset], len);
|
|
1104
|
+
|
|
1105
|
+
context->handle->extradata_size = static_cast<int>(len);
|
|
1106
|
+
}
|
|
1107
|
+
|
|
887
1108
|
static int
|
|
888
1109
|
bare_ffmpeg_frame_get_format(
|
|
889
1110
|
js_env_t *env,
|
|
@@ -1135,6 +1356,24 @@ bare_ffmpeg_codec_context_set_gop_size(
|
|
|
1135
1356
|
context->handle->gop_size = gop_size;
|
|
1136
1357
|
}
|
|
1137
1358
|
|
|
1359
|
+
static int
|
|
1360
|
+
bare_ffmpeg_codec_context_get_frame_size(
|
|
1361
|
+
js_env_t *env,
|
|
1362
|
+
js_receiver_t,
|
|
1363
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context
|
|
1364
|
+
) {
|
|
1365
|
+
return context->handle->frame_size;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
static int64_t
|
|
1369
|
+
bare_ffmpeg_codec_context_get_frame_num(
|
|
1370
|
+
js_env_t *env,
|
|
1371
|
+
js_receiver_t,
|
|
1372
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_context_t, 1> context
|
|
1373
|
+
) {
|
|
1374
|
+
return context->handle->frame_num;
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1138
1377
|
static js_arraybuffer_t
|
|
1139
1378
|
bare_ffmpeg_codec_context_get_framerate(
|
|
1140
1379
|
js_env_t *env,
|
|
@@ -1809,6 +2048,25 @@ bare_ffmpeg_codec_parameters_set_video_delay(
|
|
|
1809
2048
|
parameters->handle->video_delay = delay;
|
|
1810
2049
|
}
|
|
1811
2050
|
|
|
2051
|
+
static int
|
|
2052
|
+
bare_ffmpeg_codec_parameters_get_frame_size(
|
|
2053
|
+
js_env_t *env,
|
|
2054
|
+
js_receiver_t,
|
|
2055
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters
|
|
2056
|
+
) {
|
|
2057
|
+
return parameters->handle->frame_size;
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2060
|
+
static void
|
|
2061
|
+
bare_ffmpeg_codec_parameters_set_frame_size(
|
|
2062
|
+
js_env_t *env,
|
|
2063
|
+
js_receiver_t,
|
|
2064
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_codec_parameters_t, 1> parameters,
|
|
2065
|
+
int frame_size
|
|
2066
|
+
) {
|
|
2067
|
+
parameters->handle->frame_size = frame_size;
|
|
2068
|
+
}
|
|
2069
|
+
|
|
1812
2070
|
static js_arraybuffer_t
|
|
1813
2071
|
bare_ffmpeg_frame_init(js_env_t *env, js_receiver_t) {
|
|
1814
2072
|
int err;
|
|
@@ -2129,71 +2387,60 @@ bare_ffmpeg_image_get_line_size(
|
|
|
2129
2387
|
);
|
|
2130
2388
|
}
|
|
2131
2389
|
|
|
2132
|
-
static
|
|
2133
|
-
|
|
2390
|
+
static int
|
|
2391
|
+
bare_ffmpeg_samples_buffer_size(
|
|
2134
2392
|
js_env_t *env,
|
|
2135
2393
|
js_receiver_t,
|
|
2136
2394
|
int32_t sample_format,
|
|
2137
2395
|
int32_t nb_channels,
|
|
2138
2396
|
int32_t nb_samples,
|
|
2139
|
-
|
|
2397
|
+
bool no_alignment
|
|
2140
2398
|
) {
|
|
2141
|
-
int err;
|
|
2142
|
-
|
|
2143
2399
|
auto len = av_samples_get_buffer_size(
|
|
2144
2400
|
NULL,
|
|
2145
2401
|
nb_channels,
|
|
2146
2402
|
nb_samples,
|
|
2147
2403
|
static_cast<AVSampleFormat>(sample_format),
|
|
2148
|
-
|
|
2404
|
+
no_alignment
|
|
2149
2405
|
);
|
|
2150
2406
|
|
|
2151
2407
|
if (len < 0) {
|
|
2152
|
-
err = js_throw_error(env, NULL, av_err2str(len));
|
|
2408
|
+
int err = js_throw_error(env, NULL, av_err2str(len));
|
|
2153
2409
|
assert(err == 0);
|
|
2154
2410
|
|
|
2155
2411
|
throw js_pending_exception;
|
|
2156
2412
|
}
|
|
2157
2413
|
|
|
2158
|
-
|
|
2159
|
-
err = js_create_arraybuffer(env, static_cast<size_t>(len), handle);
|
|
2160
|
-
assert(err == 0);
|
|
2161
|
-
|
|
2162
|
-
return handle;
|
|
2414
|
+
return len;
|
|
2163
2415
|
}
|
|
2164
2416
|
|
|
2165
2417
|
static int
|
|
2166
2418
|
bare_ffmpeg_samples_fill(
|
|
2167
2419
|
js_env_t *env,
|
|
2168
2420
|
js_receiver_t,
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
int32_t nb_samples,
|
|
2172
|
-
int32_t align,
|
|
2173
|
-
js_arraybuffer_span_t data,
|
|
2421
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_frame_t, 1> frame,
|
|
2422
|
+
js_arraybuffer_span_t target,
|
|
2174
2423
|
uint64_t offset,
|
|
2175
|
-
|
|
2424
|
+
bool no_alignment
|
|
2176
2425
|
) {
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
auto len = av_samples_fill_arrays(
|
|
2426
|
+
auto res = av_samples_fill_arrays(
|
|
2180
2427
|
frame->handle->data,
|
|
2181
2428
|
frame->handle->linesize,
|
|
2182
|
-
&
|
|
2183
|
-
nb_channels,
|
|
2184
|
-
nb_samples,
|
|
2185
|
-
static_cast<AVSampleFormat>(
|
|
2186
|
-
|
|
2429
|
+
&target[offset],
|
|
2430
|
+
frame->handle->ch_layout.nb_channels,
|
|
2431
|
+
frame->handle->nb_samples,
|
|
2432
|
+
static_cast<AVSampleFormat>(frame->handle->format),
|
|
2433
|
+
no_alignment
|
|
2187
2434
|
);
|
|
2188
2435
|
|
|
2189
|
-
if (
|
|
2190
|
-
err = js_throw_error(env, NULL, av_err2str(
|
|
2436
|
+
if (res < 0) {
|
|
2437
|
+
int err = js_throw_error(env, NULL, av_err2str(res));
|
|
2191
2438
|
assert(err == 0);
|
|
2192
2439
|
|
|
2193
2440
|
throw js_pending_exception;
|
|
2194
2441
|
}
|
|
2195
2442
|
|
|
2196
|
-
return
|
|
2443
|
+
return res;
|
|
2197
2444
|
}
|
|
2198
2445
|
|
|
2199
2446
|
static js_arraybuffer_t
|
|
@@ -2318,6 +2565,62 @@ bare_ffmpeg_packet_set_data(
|
|
|
2318
2565
|
memcpy(packet->handle->data, &data[offset], len);
|
|
2319
2566
|
}
|
|
2320
2567
|
|
|
2568
|
+
static std::vector<js_arraybuffer_t>
|
|
2569
|
+
bare_ffmpeg_packet_get_side_data(
|
|
2570
|
+
js_env_t *env,
|
|
2571
|
+
js_receiver_t,
|
|
2572
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> packet
|
|
2573
|
+
) {
|
|
2574
|
+
std::vector<js_arraybuffer_t> res{};
|
|
2575
|
+
|
|
2576
|
+
int count = packet->handle->side_data_elems;
|
|
2577
|
+
if (count == 0) return res;
|
|
2578
|
+
|
|
2579
|
+
for (int i = 0; i < count; i++) {
|
|
2580
|
+
js_arraybuffer_t handle;
|
|
2581
|
+
bare_ffmpeg_side_data_t *sd;
|
|
2582
|
+
int err = js_create_arraybuffer(env, sd, handle);
|
|
2583
|
+
assert(err == 0);
|
|
2584
|
+
|
|
2585
|
+
sd->handle = &packet->handle->side_data[i];
|
|
2586
|
+
|
|
2587
|
+
res.push_back(handle);
|
|
2588
|
+
}
|
|
2589
|
+
|
|
2590
|
+
return res;
|
|
2591
|
+
}
|
|
2592
|
+
|
|
2593
|
+
static void
|
|
2594
|
+
bare_ffmpeg_packet_set_side_data(
|
|
2595
|
+
js_env_t *env,
|
|
2596
|
+
js_receiver_t,
|
|
2597
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> packet,
|
|
2598
|
+
std::vector<js_object_t> side_data_array
|
|
2599
|
+
) {
|
|
2600
|
+
for (js_object_t side_data : side_data_array) {
|
|
2601
|
+
int err;
|
|
2602
|
+
|
|
2603
|
+
int32_t type;
|
|
2604
|
+
err = js_get_property(env, side_data, "type", type);
|
|
2605
|
+
assert(err == 0);
|
|
2606
|
+
|
|
2607
|
+
js_arraybuffer_span_t buf;
|
|
2608
|
+
err = js_get_property(env, side_data, "buffer", buf);
|
|
2609
|
+
assert(err == 0);
|
|
2610
|
+
|
|
2611
|
+
int32_t offset;
|
|
2612
|
+
err = js_get_property(env, side_data, "offset", offset);
|
|
2613
|
+
assert(err == 0);
|
|
2614
|
+
|
|
2615
|
+
int32_t len;
|
|
2616
|
+
err = js_get_property(env, side_data, "length", len);
|
|
2617
|
+
assert(err == 0);
|
|
2618
|
+
|
|
2619
|
+
uint8_t *data = av_packet_new_side_data(packet->handle, static_cast<AVPacketSideDataType>(type), static_cast<size_t>(len));
|
|
2620
|
+
memcpy(data, &buf[static_cast<size_t>(offset)], static_cast<size_t>(len));
|
|
2621
|
+
}
|
|
2622
|
+
}
|
|
2623
|
+
|
|
2321
2624
|
static bool
|
|
2322
2625
|
bare_ffmpeg_packet_is_keyframe(
|
|
2323
2626
|
js_env_t *,
|
|
@@ -2327,6 +2630,20 @@ bare_ffmpeg_packet_is_keyframe(
|
|
|
2327
2630
|
return packet->handle->flags & AV_PKT_FLAG_KEY;
|
|
2328
2631
|
}
|
|
2329
2632
|
|
|
2633
|
+
static void
|
|
2634
|
+
bare_ffmpeg_packet_set_is_keyframe(
|
|
2635
|
+
js_env_t *,
|
|
2636
|
+
js_receiver_t,
|
|
2637
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> packet,
|
|
2638
|
+
bool has_key_frame
|
|
2639
|
+
) {
|
|
2640
|
+
if (has_key_frame) {
|
|
2641
|
+
packet->handle->flags |= AV_PKT_FLAG_KEY;
|
|
2642
|
+
} else {
|
|
2643
|
+
packet->handle->flags &= ~AV_PKT_FLAG_KEY;
|
|
2644
|
+
}
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2330
2647
|
static int64_t
|
|
2331
2648
|
bare_ffmpeg_packet_get_dts(
|
|
2332
2649
|
js_env_t *env,
|
|
@@ -2469,6 +2786,58 @@ bare_ffmpeg_packet_set_flags(
|
|
|
2469
2786
|
packet->handle->flags = value;
|
|
2470
2787
|
}
|
|
2471
2788
|
|
|
2789
|
+
static void
|
|
2790
|
+
bare_ffmpeg_packet_copy_props(
|
|
2791
|
+
js_env_t *env,
|
|
2792
|
+
js_receiver_t,
|
|
2793
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> dst,
|
|
2794
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_packet_t, 1> src
|
|
2795
|
+
) {
|
|
2796
|
+
int err;
|
|
2797
|
+
|
|
2798
|
+
err = av_packet_copy_props(dst->handle, src->handle);
|
|
2799
|
+
if (err < 0) {
|
|
2800
|
+
err = js_throw_error(env, NULL, av_err2str(err));
|
|
2801
|
+
assert(err == 0);
|
|
2802
|
+
|
|
2803
|
+
throw js_pending_exception;
|
|
2804
|
+
}
|
|
2805
|
+
}
|
|
2806
|
+
|
|
2807
|
+
static int
|
|
2808
|
+
bare_ffmpeg_side_data_get_type(
|
|
2809
|
+
js_env_t *env,
|
|
2810
|
+
js_receiver_t,
|
|
2811
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_side_data_t, 1> side_data
|
|
2812
|
+
) {
|
|
2813
|
+
return side_data->handle->type;
|
|
2814
|
+
}
|
|
2815
|
+
|
|
2816
|
+
static std::string
|
|
2817
|
+
bare_ffmpeg_side_data_get_name(
|
|
2818
|
+
js_env_t *env,
|
|
2819
|
+
js_receiver_t,
|
|
2820
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_side_data_t, 1> side_data
|
|
2821
|
+
) {
|
|
2822
|
+
return av_packet_side_data_name(side_data->handle->type);
|
|
2823
|
+
}
|
|
2824
|
+
|
|
2825
|
+
static js_arraybuffer_t
|
|
2826
|
+
bare_ffmpeg_side_data_get_data(
|
|
2827
|
+
js_env_t *env,
|
|
2828
|
+
js_receiver_t,
|
|
2829
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_side_data_t, 1> side_data
|
|
2830
|
+
) {
|
|
2831
|
+
js_arraybuffer_t handle;
|
|
2832
|
+
uint8_t *buf;
|
|
2833
|
+
int err = js_create_arraybuffer(env, side_data->handle->size, buf, handle);
|
|
2834
|
+
assert(err == 0);
|
|
2835
|
+
|
|
2836
|
+
memcpy(buf, side_data->handle->data, side_data->handle->size);
|
|
2837
|
+
|
|
2838
|
+
return handle;
|
|
2839
|
+
}
|
|
2840
|
+
|
|
2472
2841
|
static js_arraybuffer_t
|
|
2473
2842
|
bare_ffmpeg_scaler_init(
|
|
2474
2843
|
js_env_t *env,
|
|
@@ -2693,8 +3062,6 @@ bare_ffmpeg_resampler_convert_frames(
|
|
|
2693
3062
|
throw js_pending_exception;
|
|
2694
3063
|
}
|
|
2695
3064
|
|
|
2696
|
-
out_frame->handle->nb_samples = result;
|
|
2697
|
-
|
|
2698
3065
|
return result;
|
|
2699
3066
|
}
|
|
2700
3067
|
|
|
@@ -2973,6 +3340,246 @@ bare_ffmpeg_rational_d2q(
|
|
|
2973
3340
|
return result;
|
|
2974
3341
|
}
|
|
2975
3342
|
|
|
3343
|
+
static js_arraybuffer_t
|
|
3344
|
+
bare_ffmpeg_filter_get_by_name(
|
|
3345
|
+
js_env_t *env,
|
|
3346
|
+
js_receiver_t,
|
|
3347
|
+
std::string name
|
|
3348
|
+
) {
|
|
3349
|
+
int err;
|
|
3350
|
+
|
|
3351
|
+
js_arraybuffer_t handle;
|
|
3352
|
+
bare_ffmpeg_filter_t *filter;
|
|
3353
|
+
err = js_create_arraybuffer(env, filter, handle);
|
|
3354
|
+
assert(err == 0);
|
|
3355
|
+
|
|
3356
|
+
filter->handle = avfilter_get_by_name(name.c_str());
|
|
3357
|
+
if (filter->handle == nullptr) {
|
|
3358
|
+
err = js_throw_errorf(env, nullptr, "No Filter found for '%s' name", name.c_str());
|
|
3359
|
+
assert(err == 0);
|
|
3360
|
+
|
|
3361
|
+
throw js_pending_exception;
|
|
3362
|
+
}
|
|
3363
|
+
|
|
3364
|
+
return handle;
|
|
3365
|
+
}
|
|
3366
|
+
|
|
3367
|
+
static js_arraybuffer_t
|
|
3368
|
+
bare_ffmpeg_filter_context_init(
|
|
3369
|
+
js_env_t *env,
|
|
3370
|
+
js_receiver_t
|
|
3371
|
+
) {
|
|
3372
|
+
js_arraybuffer_t handle;
|
|
3373
|
+
bare_ffmpeg_filter_context_t *filter_ctx;
|
|
3374
|
+
int err = js_create_arraybuffer(env, filter_ctx, handle);
|
|
3375
|
+
assert(err == 0);
|
|
3376
|
+
|
|
3377
|
+
return handle;
|
|
3378
|
+
}
|
|
3379
|
+
|
|
3380
|
+
static js_arraybuffer_t
|
|
3381
|
+
bare_ffmpeg_filter_graph_init(
|
|
3382
|
+
js_env_t *env,
|
|
3383
|
+
js_receiver_t
|
|
3384
|
+
) {
|
|
3385
|
+
js_arraybuffer_t handle;
|
|
3386
|
+
bare_ffmpeg_filter_graph_t *filter_graph;
|
|
3387
|
+
int err = js_create_arraybuffer(env, filter_graph, handle);
|
|
3388
|
+
assert(err == 0);
|
|
3389
|
+
|
|
3390
|
+
filter_graph->handle = avfilter_graph_alloc();
|
|
3391
|
+
assert(filter_graph->handle != nullptr);
|
|
3392
|
+
|
|
3393
|
+
return handle;
|
|
3394
|
+
}
|
|
3395
|
+
|
|
3396
|
+
static void
|
|
3397
|
+
bare_ffmpeg_filter_graph_destroy(
|
|
3398
|
+
js_env_t *env,
|
|
3399
|
+
js_receiver_t,
|
|
3400
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_graph_t, 1> filter_graph
|
|
3401
|
+
) {
|
|
3402
|
+
avfilter_graph_free(&filter_graph->handle);
|
|
3403
|
+
}
|
|
3404
|
+
|
|
3405
|
+
static void
|
|
3406
|
+
bare_ffmpeg_filter_graph_create_filter(
|
|
3407
|
+
js_env_t *env,
|
|
3408
|
+
js_receiver_t,
|
|
3409
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_graph_t, 1> graph,
|
|
3410
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_context_t, 1> filter_context,
|
|
3411
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_t, 1> filter,
|
|
3412
|
+
std::string name,
|
|
3413
|
+
std::optional<std::string> args
|
|
3414
|
+
) {
|
|
3415
|
+
int err = avfilter_graph_create_filter(
|
|
3416
|
+
&filter_context->handle,
|
|
3417
|
+
filter->handle,
|
|
3418
|
+
name.c_str(),
|
|
3419
|
+
args.has_value() ? args.value().c_str() : nullptr,
|
|
3420
|
+
nullptr,
|
|
3421
|
+
graph->handle
|
|
3422
|
+
);
|
|
3423
|
+
|
|
3424
|
+
if (err < 0) {
|
|
3425
|
+
err = js_throw_error(env, nullptr, av_err2str(err));
|
|
3426
|
+
assert(err == 0);
|
|
3427
|
+
|
|
3428
|
+
throw js_pending_exception;
|
|
3429
|
+
}
|
|
3430
|
+
}
|
|
3431
|
+
|
|
3432
|
+
static void
|
|
3433
|
+
bare_ffmpeg_filter_graph_parse(
|
|
3434
|
+
js_env_t *env,
|
|
3435
|
+
js_receiver_t,
|
|
3436
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_graph_t, 1> graph,
|
|
3437
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> inputs,
|
|
3438
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> outputs,
|
|
3439
|
+
std::string filter_description
|
|
3440
|
+
) {
|
|
3441
|
+
int err = avfilter_graph_parse(graph->handle, filter_description.c_str(), inputs->handle, outputs->handle, nullptr);
|
|
3442
|
+
if (err < 0) {
|
|
3443
|
+
err = js_throw_error(env, nullptr, av_err2str(err));
|
|
3444
|
+
assert(err == 0);
|
|
3445
|
+
|
|
3446
|
+
throw js_pending_exception;
|
|
3447
|
+
}
|
|
3448
|
+
}
|
|
3449
|
+
|
|
3450
|
+
static void
|
|
3451
|
+
bare_ffmpeg_filter_graph_configure(
|
|
3452
|
+
js_env_t *env,
|
|
3453
|
+
js_receiver_t,
|
|
3454
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_graph_t, 1> graph
|
|
3455
|
+
) {
|
|
3456
|
+
int err = avfilter_graph_config(graph->handle, nullptr);
|
|
3457
|
+
if (err < 0) {
|
|
3458
|
+
err = js_throw_error(env, nullptr, av_err2str(err));
|
|
3459
|
+
assert(err == 0);
|
|
3460
|
+
|
|
3461
|
+
throw js_pending_exception;
|
|
3462
|
+
}
|
|
3463
|
+
}
|
|
3464
|
+
|
|
3465
|
+
static int
|
|
3466
|
+
bare_ffmpeg_filter_graph_push_frame(
|
|
3467
|
+
js_env_t *env,
|
|
3468
|
+
js_receiver_t,
|
|
3469
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_context_t, 1> ctx,
|
|
3470
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_frame_t, 1> frame
|
|
3471
|
+
) {
|
|
3472
|
+
return av_buffersrc_add_frame(ctx->handle, frame->handle);
|
|
3473
|
+
}
|
|
3474
|
+
|
|
3475
|
+
static int
|
|
3476
|
+
bare_ffmpeg_filter_graph_pull_frame(
|
|
3477
|
+
js_env_t *env,
|
|
3478
|
+
js_receiver_t,
|
|
3479
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_context_t, 1> ctx,
|
|
3480
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_frame_t, 1> frame
|
|
3481
|
+
) {
|
|
3482
|
+
return av_buffersink_get_frame(ctx->handle, frame->handle);
|
|
3483
|
+
}
|
|
3484
|
+
|
|
3485
|
+
static js_arraybuffer_t
|
|
3486
|
+
bare_ffmpeg_filter_inout_init(
|
|
3487
|
+
js_env_t *env,
|
|
3488
|
+
js_receiver_t
|
|
3489
|
+
) {
|
|
3490
|
+
js_arraybuffer_t handle;
|
|
3491
|
+
bare_ffmpeg_filter_inout_t *filter_inout;
|
|
3492
|
+
int err = js_create_arraybuffer(env, filter_inout, handle);
|
|
3493
|
+
assert(err == 0);
|
|
3494
|
+
|
|
3495
|
+
filter_inout->handle = avfilter_inout_alloc();
|
|
3496
|
+
assert(filter_inout->handle);
|
|
3497
|
+
|
|
3498
|
+
return handle;
|
|
3499
|
+
}
|
|
3500
|
+
|
|
3501
|
+
static void
|
|
3502
|
+
bare_ffmpeg_filter_inout_destroy(
|
|
3503
|
+
js_env_t *env,
|
|
3504
|
+
js_receiver_t,
|
|
3505
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout
|
|
3506
|
+
) {
|
|
3507
|
+
avfilter_inout_free(&filter_inout->handle);
|
|
3508
|
+
}
|
|
3509
|
+
|
|
3510
|
+
static std::optional<std::string>
|
|
3511
|
+
bare_ffmpeg_filter_inout_get_name(
|
|
3512
|
+
js_env_t *env,
|
|
3513
|
+
js_receiver_t,
|
|
3514
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout
|
|
3515
|
+
) {
|
|
3516
|
+
if (!filter_inout->handle->name) return std::nullopt;
|
|
3517
|
+
return filter_inout->handle->name;
|
|
3518
|
+
}
|
|
3519
|
+
|
|
3520
|
+
static void
|
|
3521
|
+
bare_ffmpeg_filter_inout_set_name(
|
|
3522
|
+
js_env_t *env,
|
|
3523
|
+
js_receiver_t,
|
|
3524
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout,
|
|
3525
|
+
std::string name
|
|
3526
|
+
) {
|
|
3527
|
+
if (filter_inout->handle->name) {
|
|
3528
|
+
av_free(filter_inout->handle->name);
|
|
3529
|
+
}
|
|
3530
|
+
filter_inout->handle->name = av_strdup(name.c_str());
|
|
3531
|
+
}
|
|
3532
|
+
|
|
3533
|
+
static void
|
|
3534
|
+
bare_ffmpeg_filter_inout_set_filter_context(
|
|
3535
|
+
js_env_t *env,
|
|
3536
|
+
js_receiver_t,
|
|
3537
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout,
|
|
3538
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_context_t, 1> filter_ctx
|
|
3539
|
+
) {
|
|
3540
|
+
filter_inout->handle->filter_ctx = filter_ctx->handle;
|
|
3541
|
+
}
|
|
3542
|
+
|
|
3543
|
+
static int
|
|
3544
|
+
bare_ffmpeg_filter_inout_get_pad_idx(
|
|
3545
|
+
js_env_t *env,
|
|
3546
|
+
js_receiver_t,
|
|
3547
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout
|
|
3548
|
+
) {
|
|
3549
|
+
return filter_inout->handle->pad_idx;
|
|
3550
|
+
}
|
|
3551
|
+
|
|
3552
|
+
static void
|
|
3553
|
+
bare_ffmpeg_filter_inout_set_pad_idx(
|
|
3554
|
+
js_env_t *env,
|
|
3555
|
+
js_receiver_t,
|
|
3556
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout,
|
|
3557
|
+
int pad_idx
|
|
3558
|
+
) {
|
|
3559
|
+
filter_inout->handle->pad_idx = pad_idx;
|
|
3560
|
+
}
|
|
3561
|
+
|
|
3562
|
+
static void
|
|
3563
|
+
bare_ffmpeg_filter_inout_set_next(
|
|
3564
|
+
js_env_t *env,
|
|
3565
|
+
js_receiver_t,
|
|
3566
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> filter_inout,
|
|
3567
|
+
js_arraybuffer_span_of_t<bare_ffmpeg_filter_inout_t, 1> next
|
|
3568
|
+
) {
|
|
3569
|
+
filter_inout->handle->next = next->handle;
|
|
3570
|
+
}
|
|
3571
|
+
|
|
3572
|
+
static int64_t
|
|
3573
|
+
bare_ffmpeg_rational_rescale_q(
|
|
3574
|
+
int64_t ts,
|
|
3575
|
+
int32_t bq_num,
|
|
3576
|
+
int32_t bq_den,
|
|
3577
|
+
int32_t cq_num,
|
|
3578
|
+
int32_t cq_den
|
|
3579
|
+
) {
|
|
3580
|
+
return av_rescale_q(ts, {bq_num, bq_den}, {cq_num, cq_den});
|
|
3581
|
+
}
|
|
3582
|
+
|
|
2976
3583
|
static js_value_t *
|
|
2977
3584
|
bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
2978
3585
|
uv_once(&bare_ffmpeg__init_guard, bare_ffmpeg__on_init);
|
|
@@ -3020,6 +3627,10 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3020
3627
|
V("findDecoderByID", bare_ffmpeg_find_decoder_by_id)
|
|
3021
3628
|
V("findEncoderByID", bare_ffmpeg_find_encoder_by_id)
|
|
3022
3629
|
V("getCodecNameByID", bare_ffmpeg_get_codec_name_by_id)
|
|
3630
|
+
V("getSampleFormatNameByID", bare_ffmpeg_get_sample_format_name_by_id)
|
|
3631
|
+
V("getSupportedConfig", bare_ffmpeg_codec_get_supported_config)
|
|
3632
|
+
V("getSupportedFrameRates", bare_ffmpeg_codec_get_supported_frame_rates)
|
|
3633
|
+
V("getSupportedChannelLayouts", bare_ffmpeg_codec_get_supported_channel_layouts)
|
|
3023
3634
|
|
|
3024
3635
|
V("initCodecContext", bare_ffmpeg_codec_context_init)
|
|
3025
3636
|
V("destroyCodecContext", bare_ffmpeg_codec_context_destroy)
|
|
@@ -3045,6 +3656,10 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3045
3656
|
V("setCodecContextGOPSize", bare_ffmpeg_codec_context_set_gop_size)
|
|
3046
3657
|
V("getCodecContextFramerate", bare_ffmpeg_codec_context_get_framerate)
|
|
3047
3658
|
V("setCodecContextFramerate", bare_ffmpeg_codec_context_set_framerate)
|
|
3659
|
+
V("getCodecContextExtraData", bare_ffmpeg_codec_context_get_extra_data)
|
|
3660
|
+
V("setCodecContextExtraData", bare_ffmpeg_codec_context_set_extra_data)
|
|
3661
|
+
V("getCodecContextFrameSize", bare_ffmpeg_codec_context_get_frame_size)
|
|
3662
|
+
V("getCodecContextFrameNum", bare_ffmpeg_codec_context_get_frame_num)
|
|
3048
3663
|
|
|
3049
3664
|
V("sendCodecContextPacket", bare_ffmpeg_codec_context_send_packet)
|
|
3050
3665
|
V("receiveCodecContextPacket", bare_ffmpeg_codec_context_receive_packet)
|
|
@@ -3099,6 +3714,8 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3099
3714
|
V("setCodecParametersSampleAspectRatio", bare_ffmpeg_codec_parameters_set_sample_aspect_ratio)
|
|
3100
3715
|
V("getCodecParametersVideoDelay", bare_ffmpeg_codec_parameters_get_video_delay)
|
|
3101
3716
|
V("setCodecParametersVideoDelay", bare_ffmpeg_codec_parameters_set_video_delay)
|
|
3717
|
+
V("getCodecParametersFrameSize", bare_ffmpeg_codec_parameters_get_frame_size)
|
|
3718
|
+
V("setCodecParametersFrameSize", bare_ffmpeg_codec_parameters_set_frame_size)
|
|
3102
3719
|
|
|
3103
3720
|
V("initFrame", bare_ffmpeg_frame_init)
|
|
3104
3721
|
V("destroyFrame", bare_ffmpeg_frame_destroy)
|
|
@@ -3127,7 +3744,7 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3127
3744
|
V("readImage", bare_ffmpeg_image_read)
|
|
3128
3745
|
V("getImageLineSize", bare_ffmpeg_image_get_line_size)
|
|
3129
3746
|
|
|
3130
|
-
V("
|
|
3747
|
+
V("samplesBufferSize", bare_ffmpeg_samples_buffer_size)
|
|
3131
3748
|
V("fillSamples", bare_ffmpeg_samples_fill)
|
|
3132
3749
|
|
|
3133
3750
|
V("initPacket", bare_ffmpeg_packet_init)
|
|
@@ -3138,7 +3755,10 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3138
3755
|
V("setPacketStreamIndex", bare_ffmpeg_packet_set_stream_index)
|
|
3139
3756
|
V("getPacketData", bare_ffmpeg_packet_get_data)
|
|
3140
3757
|
V("setPacketData", bare_ffmpeg_packet_set_data)
|
|
3758
|
+
V("getPacketSideData", bare_ffmpeg_packet_get_side_data)
|
|
3759
|
+
V("setPacketSideData", bare_ffmpeg_packet_set_side_data)
|
|
3141
3760
|
V("isPacketKeyframe", bare_ffmpeg_packet_is_keyframe)
|
|
3761
|
+
V("setPacketIsKeyFrame", bare_ffmpeg_packet_set_is_keyframe)
|
|
3142
3762
|
V("getPacketDTS", bare_ffmpeg_packet_get_dts)
|
|
3143
3763
|
V("setPacketDTS", bare_ffmpeg_packet_set_dts)
|
|
3144
3764
|
V("getPacketPTS", bare_ffmpeg_packet_get_pts)
|
|
@@ -3150,6 +3770,11 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3150
3770
|
V("setPacketDuration", bare_ffmpeg_packet_set_duration)
|
|
3151
3771
|
V("getPacketFlags", bare_ffmpeg_packet_get_flags)
|
|
3152
3772
|
V("setPacketFlags", bare_ffmpeg_packet_set_flags)
|
|
3773
|
+
V("copyPacketProps", bare_ffmpeg_packet_copy_props)
|
|
3774
|
+
|
|
3775
|
+
V("getSideDataType", bare_ffmpeg_side_data_get_type)
|
|
3776
|
+
V("getSideDataName", bare_ffmpeg_side_data_get_name)
|
|
3777
|
+
V("getSideDataBuffer", bare_ffmpeg_side_data_get_data)
|
|
3153
3778
|
|
|
3154
3779
|
V("initScaler", bare_ffmpeg_scaler_init)
|
|
3155
3780
|
V("destroyScaler", bare_ffmpeg_scaler_destroy)
|
|
@@ -3183,6 +3808,28 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3183
3808
|
V("getAudioFifoSpace", bare_ffmpeg_audio_fifo_space)
|
|
3184
3809
|
|
|
3185
3810
|
V("rationalD2Q", bare_ffmpeg_rational_d2q)
|
|
3811
|
+
V("rationalRescaleQ", bare_ffmpeg_rational_rescale_q)
|
|
3812
|
+
|
|
3813
|
+
V("getFilterByName", bare_ffmpeg_filter_get_by_name)
|
|
3814
|
+
|
|
3815
|
+
V("initFilterContext", bare_ffmpeg_filter_context_init)
|
|
3816
|
+
|
|
3817
|
+
V("initFilterGraph", bare_ffmpeg_filter_graph_init)
|
|
3818
|
+
V("destroyFilterGraph", bare_ffmpeg_filter_graph_destroy)
|
|
3819
|
+
V("createFilterGraphFilter", bare_ffmpeg_filter_graph_create_filter)
|
|
3820
|
+
V("parseFilterGraph", bare_ffmpeg_filter_graph_parse)
|
|
3821
|
+
V("configureFilterGraph", bare_ffmpeg_filter_graph_configure)
|
|
3822
|
+
V("pushFilterGraphFrame", bare_ffmpeg_filter_graph_push_frame)
|
|
3823
|
+
V("pullFilterGraphFrame", bare_ffmpeg_filter_graph_pull_frame)
|
|
3824
|
+
|
|
3825
|
+
V("initFilterInout", bare_ffmpeg_filter_inout_init)
|
|
3826
|
+
V("destroyFilterInOut", bare_ffmpeg_filter_inout_destroy)
|
|
3827
|
+
V("getFilterInOutName", bare_ffmpeg_filter_inout_get_name)
|
|
3828
|
+
V("setFilterInOutName", bare_ffmpeg_filter_inout_set_name)
|
|
3829
|
+
V("setFilterInOutFilterContext", bare_ffmpeg_filter_inout_set_filter_context)
|
|
3830
|
+
V("getFilterInOutPadIdx", bare_ffmpeg_filter_inout_get_pad_idx)
|
|
3831
|
+
V("setFilterInOutPadIdx", bare_ffmpeg_filter_inout_set_pad_idx)
|
|
3832
|
+
V("setFilterInOutNext", bare_ffmpeg_filter_inout_set_next)
|
|
3186
3833
|
#undef V
|
|
3187
3834
|
|
|
3188
3835
|
#define V(name) \
|
|
@@ -3417,6 +4064,57 @@ bare_ffmpeg_exports(js_env_t *env, js_value_t *exports) {
|
|
|
3417
4064
|
V(SEEK_CUR)
|
|
3418
4065
|
V(SEEK_SET)
|
|
3419
4066
|
V(SEEK_END)
|
|
4067
|
+
|
|
4068
|
+
V(AV_PKT_DATA_PALETTE)
|
|
4069
|
+
V(AV_PKT_DATA_NEW_EXTRADATA)
|
|
4070
|
+
V(AV_PKT_DATA_PARAM_CHANGE)
|
|
4071
|
+
V(AV_PKT_DATA_H263_MB_INFO)
|
|
4072
|
+
V(AV_PKT_DATA_REPLAYGAIN)
|
|
4073
|
+
V(AV_PKT_DATA_DISPLAYMATRIX)
|
|
4074
|
+
V(AV_PKT_DATA_STEREO3D)
|
|
4075
|
+
V(AV_PKT_DATA_AUDIO_SERVICE_TYPE)
|
|
4076
|
+
V(AV_PKT_DATA_QUALITY_STATS)
|
|
4077
|
+
V(AV_PKT_DATA_FALLBACK_TRACK)
|
|
4078
|
+
V(AV_PKT_DATA_CPB_PROPERTIES)
|
|
4079
|
+
V(AV_PKT_DATA_SKIP_SAMPLES)
|
|
4080
|
+
V(AV_PKT_DATA_JP_DUALMONO)
|
|
4081
|
+
V(AV_PKT_DATA_STRINGS_METADATA)
|
|
4082
|
+
V(AV_PKT_DATA_SUBTITLE_POSITION)
|
|
4083
|
+
V(AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL)
|
|
4084
|
+
V(AV_PKT_DATA_WEBVTT_IDENTIFIER)
|
|
4085
|
+
V(AV_PKT_DATA_WEBVTT_SETTINGS)
|
|
4086
|
+
V(AV_PKT_DATA_METADATA_UPDATE)
|
|
4087
|
+
V(AV_PKT_DATA_MPEGTS_STREAM_ID)
|
|
4088
|
+
V(AV_PKT_DATA_MASTERING_DISPLAY_METADATA)
|
|
4089
|
+
V(AV_PKT_DATA_SPHERICAL)
|
|
4090
|
+
V(AV_PKT_DATA_CONTENT_LIGHT_LEVEL)
|
|
4091
|
+
V(AV_PKT_DATA_A53_CC)
|
|
4092
|
+
V(AV_PKT_DATA_ENCRYPTION_INIT_INFO)
|
|
4093
|
+
V(AV_PKT_DATA_ENCRYPTION_INFO)
|
|
4094
|
+
V(AV_PKT_DATA_AFD)
|
|
4095
|
+
V(AV_PKT_DATA_PRFT)
|
|
4096
|
+
V(AV_PKT_DATA_ICC_PROFILE)
|
|
4097
|
+
V(AV_PKT_DATA_DOVI_CONF)
|
|
4098
|
+
V(AV_PKT_DATA_S12M_TIMECODE)
|
|
4099
|
+
V(AV_PKT_DATA_DYNAMIC_HDR10_PLUS)
|
|
4100
|
+
V(AV_PKT_DATA_IAMF_MIX_GAIN_PARAM)
|
|
4101
|
+
V(AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM)
|
|
4102
|
+
V(AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM)
|
|
4103
|
+
V(AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT)
|
|
4104
|
+
V(AV_PKT_DATA_FRAME_CROPPING)
|
|
4105
|
+
V(AV_PKT_DATA_LCEVC)
|
|
4106
|
+
V(AV_PKT_DATA_3D_REFERENCE_DISPLAYS)
|
|
4107
|
+
V(AV_PKT_DATA_RTCP_SR)
|
|
4108
|
+
V(AV_PKT_DATA_NB)
|
|
4109
|
+
|
|
4110
|
+
V(AV_CODEC_CONFIG_PIX_FORMAT)
|
|
4111
|
+
V(AV_CODEC_CONFIG_FRAME_RATE)
|
|
4112
|
+
V(AV_CODEC_CONFIG_SAMPLE_RATE)
|
|
4113
|
+
V(AV_CODEC_CONFIG_SAMPLE_FORMAT)
|
|
4114
|
+
V(AV_CODEC_CONFIG_CHANNEL_LAYOUT)
|
|
4115
|
+
V(AV_CODEC_CONFIG_COLOR_RANGE)
|
|
4116
|
+
V(AV_CODEC_CONFIG_COLOR_SPACE)
|
|
4117
|
+
|
|
3420
4118
|
#undef V
|
|
3421
4119
|
|
|
3422
4120
|
return exports;
|