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

Showing the changes to libavfilter (2 of 3 files). Show all

Unified · Split

2 files
  1. libavfilter/version.h +1 −1
  2. libavfilter/vf_showinfo.c +12 −2
libavfilter/version.h+1−1
@@ -32,7 +32,7 @@ · 31 unmodified lines
32#include "version_major.h"32#include "version_major.h"
33 33
34#define LIBAVFILTER_VERSION_MINOR 1434#define LIBAVFILTER_VERSION_MINOR 14
35#define LIBAVFILTER_VERSION_MICRO 10135#define LIBAVFILTER_VERSION_MICRO 102
36 36
37 37
38#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \38#define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
libavfilter/vf_showinfo.c+12−2
@@ -22,6 +22,7 @@ · 21 unmodified lines
22 * filter for showing textual video frame information22 * filter for showing textual video frame information
23 */23 */
24 24
25#include <ctype.h>
25#include <inttypes.h>26#include <inttypes.h>
26 27
27#include "libavutil/bswap.h"28#include "libavutil/bswap.h"
@@ -52,6 +53,7 @@ · 24 unmodified lines
52typedef struct ShowInfoContext {53typedef struct ShowInfoContext {
53 const AVClass *class;54 const AVClass *class;
54 int calculate_checksums;55 int calculate_checksums;
56 int udu_sei_as_ascii;
55} ShowInfoContext;57} ShowInfoContext;
56 58
57#define OFFSET(x) offsetof(ShowInfoContext, x)59#define OFFSET(x) offsetof(ShowInfoContext, x)
@@ -59,6 +61,8 @@ typedef struct ShowInfoContext { · 1 unmodified line
59 61
60static const AVOption showinfo_options[] = {62static const AVOption showinfo_options[] = {
61 { "checksum", "calculate checksums", OFFSET(calculate_checksums), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, VF },63 { "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 },
62 { NULL }66 { NULL }
63};67};
64 68
@@ -418,6 +422,7 @@ static void dump_video_enc_params(AVFilterContext *ctx, const AVFrameSideData *s · 353 unmodified lines
418static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)422static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)
419{423{
420 const uint8_t *user_data = sd->data;424 const uint8_t *user_data = sd->data;
425 ShowInfoContext *s = ctx->priv;
421 426
422 if (sd->size < AV_UUID_LEN) {427 if (sd->size < AV_UUID_LEN) {
423 av_log(ctx, AV_LOG_ERROR, "invalid data(%"SIZE_SPECIFIER" < "428 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
428 av_log(ctx, AV_LOG_INFO, "UUID=" AV_PRI_UUID "\n", AV_UUID_ARG(user_data));433 av_log(ctx, AV_LOG_INFO, "UUID=" AV_PRI_UUID "\n", AV_UUID_ARG(user_data));
429 434
430 av_log(ctx, AV_LOG_INFO, "User Data=");435 av_log(ctx, AV_LOG_INFO, "User Data=");
431 for (size_t i = 16; i < sd->size; i++)436 for (size_t i = 16; i < sd->size; i++) {
432 av_log(ctx, AV_LOG_INFO, "%02x", user_data[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 }
433 av_log(ctx, AV_LOG_INFO, "\n");443 av_log(ctx, AV_LOG_INFO, "\n");
434}444}
435 445

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