Skip to content

Commit 8c6ca77

Browse files
committed
Add function to read or set FFmpeg logging level
1 parent bb863dd commit 8c6ca77

File tree

4 files changed

+74
-6
lines changed

4 files changed

+74
-6
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "beamcoder",
3-
"version": "0.6.6",
3+
"version": "0.6.7",
44
"description": "Node.js native bindings to FFmpeg.",
55
"main": "index.js",
66
"types": "index.d.ts",

src/beamcoder.cc

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,59 @@ napi_value licenses(napi_env env, napi_callback_info info) {
252252
return result;
253253
}
254254

255+
napi_value logging(napi_env env, napi_callback_info info) {
256+
napi_status status;
257+
napi_value result;
258+
int logLevel;
259+
char* logLevelStr;
260+
size_t strLen;
261+
262+
napi_value args[1];
263+
size_t argc = 1;
264+
status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
265+
CHECK_STATUS;
266+
267+
if (argc == 0) {
268+
logLevel = av_log_get_level();
269+
status = napi_create_string_utf8(env,
270+
(char*) beam_lookup_name(beam_logging_level->forward, logLevel),
271+
NAPI_AUTO_LENGTH, &result);
272+
CHECK_STATUS;
273+
} else {
274+
if (argc != 1) {
275+
status = napi_throw_error(env, nullptr, "Wrong number of arguments to set log level.");
276+
return nullptr;
277+
}
278+
279+
napi_value params = args[0];
280+
napi_valuetype t;
281+
status = napi_typeof(env, params, &t);
282+
CHECK_STATUS;
283+
if (t != napi_string) {
284+
status = napi_throw_type_error(env, nullptr, "Logging level parameter must be a string.");
285+
return nullptr;
286+
}
287+
288+
status = napi_get_value_string_utf8(env, args[0], nullptr, 0, &strLen);
289+
CHECK_STATUS;
290+
logLevelStr = (char*) malloc(sizeof(char) * (strLen + 1));
291+
CHECK_STATUS;
292+
status = napi_get_value_string_utf8(env, args[0], logLevelStr, strLen + 1, &strLen);
293+
CHECK_STATUS;
294+
295+
logLevel = beam_lookup_enum(beam_logging_level->inverse, logLevelStr);
296+
if (logLevel == BEAM_ENUM_UNKNOWN) {
297+
NAPI_THROW_ERROR("Logging level string unrecognised");
298+
}
299+
av_log_set_level(logLevel);
300+
301+
status = napi_get_undefined(env, &result);
302+
CHECK_STATUS;
303+
}
304+
305+
return result;
306+
}
307+
255308
napi_status fromAVCodec(napi_env env, const AVCodec* codec, napi_value *result) {
256309
napi_status status;
257310
napi_value array, element, subel, value, props, nullval;
@@ -890,11 +943,12 @@ napi_value Init(napi_env env, napi_value exports) {
890943
DECLARE_NAPI_METHOD("versionStrings", versionStrings),
891944
DECLARE_NAPI_METHOD("configurations", configurations),
892945
DECLARE_NAPI_METHOD("licenses", licenses),
946+
DECLARE_NAPI_METHOD("logging", logging),
893947
DECLARE_NAPI_METHOD("governor", governor),
894948
DECLARE_NAPI_METHOD("format", makeFormat),
895949
DECLARE_NAPI_METHOD("decoder", decoder),
896-
DECLARE_NAPI_METHOD("filterer", filterer),
897-
DECLARE_NAPI_METHOD("encoder", encoder), // 10
950+
DECLARE_NAPI_METHOD("filterer", filterer), // 10
951+
DECLARE_NAPI_METHOD("encoder", encoder),
898952
DECLARE_NAPI_METHOD("codecs", codecs),
899953
DECLARE_NAPI_METHOD("decoders", decoders),
900954
DECLARE_NAPI_METHOD("encoders", encoders),
@@ -903,8 +957,8 @@ napi_value Init(napi_env env, napi_value exports) {
903957
DECLARE_NAPI_METHOD("pix_fmts", pix_fmts),
904958
DECLARE_NAPI_METHOD("sample_fmts", sampleFormats),
905959
DECLARE_NAPI_METHOD("protocols", protocols),
906-
DECLARE_NAPI_METHOD("filters", filters),
907-
DECLARE_NAPI_METHOD("bsfs", bsfs), // 20
960+
DECLARE_NAPI_METHOD("filters", filters), // 20
961+
DECLARE_NAPI_METHOD("bsfs", bsfs),
908962
DECLARE_NAPI_METHOD("packet", makePacket),
909963
DECLARE_NAPI_METHOD("frame", makeFrame),
910964
DECLARE_NAPI_METHOD("codecParameters", makeCodecParameters),
@@ -916,7 +970,7 @@ napi_value Init(napi_env env, napi_value exports) {
916970
{ "AV_NOPTS_VALUE", nullptr, nullptr, nullptr, nullptr,
917971
noopts, napi_enumerable, nullptr }
918972
};
919-
status = napi_define_properties(env, exports, 28, desc);
973+
status = napi_define_properties(env, exports, 29, desc);
920974
CHECK_STATUS;
921975

922976
avdevice_register_all();

src/beamcoder_util.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,3 +1129,16 @@ std::unordered_map<int, std::string> beam_frame_side_data_type_fmap = {
11291129
{ AV_FRAME_DATA_S12M_TIMECODE, "s12m_timecode" }
11301130
};
11311131
const beamEnum* beam_frame_side_data_type = new beamEnum(beam_frame_side_data_type_fmap);
1132+
1133+
std::unordered_map<int, std::string> beam_logging_level_fmap = {
1134+
{ AV_LOG_QUIET, "quiet" },
1135+
{ AV_LOG_PANIC, "panic" },
1136+
{ AV_LOG_FATAL, "fatal" },
1137+
{ AV_LOG_ERROR, "error" },
1138+
{ AV_LOG_WARNING, "warning" },
1139+
{ AV_LOG_INFO, "info" },
1140+
{ AV_LOG_VERBOSE, "verbose" },
1141+
{ AV_LOG_DEBUG, "debug" },
1142+
{ AV_LOG_TRACE, "trace" }
1143+
};
1144+
const beamEnum* beam_logging_level = new beamEnum(beam_logging_level_fmap);

src/beamcoder_util.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ extern const beamEnum* beam_avoid_neg_ts;
186186
extern const beamEnum* beam_avfmt_duration2;
187187
extern const beamEnum* beam_packet_side_data_type;
188188
extern const beamEnum* beam_frame_side_data_type;
189+
extern const beamEnum* beam_logging_level;
189190

190191
napi_value makeFrame(napi_env env, napi_callback_info info);
191192

0 commit comments

Comments
 (0)