History

avfilter/vf_showinfo: add udu_sei_as_ascii option

Some encoders (e.g., libx264) dump encoder configuration as user data unregistered SEI message. This option try to print it as ascii character when possible.

Zhao Zhili committed 2 years ago

Commit 56ca0f21 parent fb54c893 files · +17 −3Browse files

Unified · Split

3 files
  1. doc/filters.texi +4 −0
  2. libavfilter/version.h +1 −1
  3. libavfilter/vf_showinfo.c +12 −2
doc/filters.texi+4−0
@@ -21796,6 +21796,10 @@ This filter supports the following options: · 21795 unmodified lines
2179621796 @table @option
2179721797 @item checksum
2179821798 Calculate checksums of each plane. By default enabled.
21799+
21800+@item udu_sei_as_ascii
21801+Try to print user data unregistered SEI as ascii character when possible,
21802+in hex format otherwise.
2179921803 @end table
2180021804
2180121805 The shown line contains a sequence of key/value pairs of the form
libavfilter/version.h+1−1
@@ -32,7 +32,7 @@ · 31 unmodified lines
3232 #include "version_major.h"
3333
3434 #define LIBAVFILTER_VERSION_MINOR 14
35−#define LIBAVFILTER_VERSION_MICRO 101
35+#define LIBAVFILTER_VERSION_MICRO 102
3636
3737
3838 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
libavfilter/vf_showinfo.c+12−2
@@ -22,6 +22,7 @@ · 21 unmodified lines
2222 * filter for showing textual video frame information
2323 */
2424
25+#include <ctype.h>
2526 #include <inttypes.h>
2627
2728 #include "libavutil/bswap.h"
@@ -52,6 +53,7 @@ · 24 unmodified lines
5253 typedef struct ShowInfoContext {
5354 const AVClass *class;
5455 int calculate_checksums;
56+ int udu_sei_as_ascii;
5557 } ShowInfoContext;
5658
5759 #define OFFSET(x) offsetof(ShowInfoContext, x)
@@ -59,6 +61,8 @@ typedef struct ShowInfoContext { · 1 unmodified line
5961
6062 static const AVOption showinfo_options[] = {
6163 { "checksum", "calculate checksums", OFFSET(calculate_checksums), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, VF },
64+ { "udu_sei_as_ascii", "try to print user data unregistered SEI as ascii character when possible",
65+ OFFSET(udu_sei_as_ascii), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VF },
6266 { NULL }
6367 };
6468
@@ -418,6 +422,7 @@ static void dump_video_enc_params(AVFilterContext *ctx, const AVFrameSideData *s · 353 unmodified lines
418422 static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)
419423 {
420424 const uint8_t *user_data = sd->data;
425+ ShowInfoContext *s = ctx->priv;
421426
422427 if (sd->size < AV_UUID_LEN) {
423428 av_log(ctx, AV_LOG_ERROR, "invalid data(%"SIZE_SPECIFIER" < "
@@ -428,8 +433,13 @@ static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSi · 4 unmodified lines
428433 av_log(ctx, AV_LOG_INFO, "UUID=" AV_PRI_UUID "\n", AV_UUID_ARG(user_data));
429434
430435 av_log(ctx, AV_LOG_INFO, "User Data=");
431− for (size_t i = 16; i < sd->size; i++)
432− av_log(ctx, AV_LOG_INFO, "%02x", user_data[i]);
436+ for (size_t i = 16; i < sd->size; i++) {
437+ const char *format = "%02x";
438+
439+ if (s->udu_sei_as_ascii)
440+ format = isprint(user_data[i]) ? "%c" : "\\x%02x";
441+ av_log(ctx, AV_LOG_INFO, format, user_data[i]);
442+ }
433443 av_log(ctx, AV_LOG_INFO, "\n");
434444 }
435445

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t