Message ID | tencent_771DC19DB73468DA01F968DE7CFEACA63A0A@qq.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avfilter/vf_showinfo: add udu_sei_as_ascii option | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
> On Dec 13, 2023, at 11:46, Zhao Zhili <quinkblack@foxmail.com> wrote: > > From: Zhao Zhili <zhilizhao@tencent.com> > > 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. > --- > doc/filters.texi | 4 ++++ > libavfilter/version.h | 2 +- > libavfilter/vf_showinfo.c | 14 ++++++++++++-- > 3 files changed, 17 insertions(+), 3 deletions(-) > > diff --git a/doc/filters.texi b/doc/filters.texi > index 6d00ba2c3f..0d4c5a47a0 100644 > --- a/doc/filters.texi > +++ b/doc/filters.texi > @@ -21796,6 +21796,10 @@ This filter supports the following options: > @table @option > @item checksum > Calculate checksums of each plane. By default enabled. > + > +@item udu_sei_as_ascii > +Try to print user data unregistered SEI as ascii character when possible, > +in hex format otherwise. > @end table > > The shown line contains a sequence of key/value pairs of the form > diff --git a/libavfilter/version.h b/libavfilter/version.h > index 7642b670d1..83931e11dd 100644 > --- a/libavfilter/version.h > +++ b/libavfilter/version.h > @@ -32,7 +32,7 @@ > #include "version_major.h" > > #define LIBAVFILTER_VERSION_MINOR 14 > -#define LIBAVFILTER_VERSION_MICRO 100 > +#define LIBAVFILTER_VERSION_MICRO 101 > > > #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ > diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c > index 71869446c6..309de28df9 100644 > --- a/libavfilter/vf_showinfo.c > +++ b/libavfilter/vf_showinfo.c > @@ -22,6 +22,7 @@ > * filter for showing textual video frame information > */ > > +#include <ctype.h> > #include <inttypes.h> > > #include "libavutil/bswap.h" > @@ -52,6 +53,7 @@ > typedef struct ShowInfoContext { > const AVClass *class; > int calculate_checksums; > + int udu_sei_as_ascii; > } ShowInfoContext; > > #define OFFSET(x) offsetof(ShowInfoContext, x) > @@ -59,6 +61,8 @@ typedef struct ShowInfoContext { > > static const AVOption showinfo_options[] = { > { "checksum", "calculate checksums", OFFSET(calculate_checksums), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, VF }, > + { "udu_sei_as_ascii", "try to print user data unregistered SEI as ascii character when possible", > + OFFSET(udu_sei_as_ascii), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VF }, > { NULL } > }; > > @@ -418,6 +422,7 @@ static void dump_video_enc_params(AVFilterContext *ctx, const AVFrameSideData *s > static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd) > { > const uint8_t *user_data = sd->data; > + ShowInfoContext *s = ctx->priv; > > if (sd->size < AV_UUID_LEN) { > av_log(ctx, AV_LOG_ERROR, "invalid data(%"SIZE_SPECIFIER" < " > @@ -428,8 +433,13 @@ static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSi > av_log(ctx, AV_LOG_INFO, "UUID=" AV_PRI_UUID "\n", AV_UUID_ARG(user_data)); > > av_log(ctx, AV_LOG_INFO, "User Data="); > - for (size_t i = 16; i < sd->size; i++) > - av_log(ctx, AV_LOG_INFO, "%02x", user_data[i]); > + for (size_t i = 16; i < sd->size; i++) { > + const char *format = "%02x"; > + > + if (s->udu_sei_as_ascii) > + format = isprint(user_data[i]) ? "%c" : "\\x%02x"; > + av_log(ctx, AV_LOG_INFO, format, user_data[i]); > + } > av_log(ctx, AV_LOG_INFO, "\n"); > } > > -- > 2.25.1 Ping. Any comments on this idea and implementation?
> On Dec 21, 2023, at 11:05, Zhao Zhili <quinkblack@foxmail.com> wrote: > > >> On Dec 13, 2023, at 11:46, Zhao Zhili <quinkblack@foxmail.com> wrote: >> >> From: Zhao Zhili <zhilizhao@tencent.com> >> >> 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. >> --- >> doc/filters.texi | 4 ++++ >> libavfilter/version.h | 2 +- >> libavfilter/vf_showinfo.c | 14 ++++++++++++-- >> 3 files changed, 17 insertions(+), 3 deletions(-) >> > > Ping. Any comments on this idea and implementation? Applied. Hope it doesn’t make trouble during Christmas. > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff --git a/doc/filters.texi b/doc/filters.texi index 6d00ba2c3f..0d4c5a47a0 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -21796,6 +21796,10 @@ This filter supports the following options: @table @option @item checksum Calculate checksums of each plane. By default enabled. + +@item udu_sei_as_ascii +Try to print user data unregistered SEI as ascii character when possible, +in hex format otherwise. @end table The shown line contains a sequence of key/value pairs of the form diff --git a/libavfilter/version.h b/libavfilter/version.h index 7642b670d1..83931e11dd 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -32,7 +32,7 @@ #include "version_major.h" #define LIBAVFILTER_VERSION_MINOR 14 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c index 71869446c6..309de28df9 100644 --- a/libavfilter/vf_showinfo.c +++ b/libavfilter/vf_showinfo.c @@ -22,6 +22,7 @@ * filter for showing textual video frame information */ +#include <ctype.h> #include <inttypes.h> #include "libavutil/bswap.h" @@ -52,6 +53,7 @@ typedef struct ShowInfoContext { const AVClass *class; int calculate_checksums; + int udu_sei_as_ascii; } ShowInfoContext; #define OFFSET(x) offsetof(ShowInfoContext, x) @@ -59,6 +61,8 @@ typedef struct ShowInfoContext { static const AVOption showinfo_options[] = { { "checksum", "calculate checksums", OFFSET(calculate_checksums), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, VF }, + { "udu_sei_as_ascii", "try to print user data unregistered SEI as ascii character when possible", + OFFSET(udu_sei_as_ascii), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VF }, { NULL } }; @@ -418,6 +422,7 @@ static void dump_video_enc_params(AVFilterContext *ctx, const AVFrameSideData *s static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd) { const uint8_t *user_data = sd->data; + ShowInfoContext *s = ctx->priv; if (sd->size < AV_UUID_LEN) { av_log(ctx, AV_LOG_ERROR, "invalid data(%"SIZE_SPECIFIER" < " @@ -428,8 +433,13 @@ static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSi av_log(ctx, AV_LOG_INFO, "UUID=" AV_PRI_UUID "\n", AV_UUID_ARG(user_data)); av_log(ctx, AV_LOG_INFO, "User Data="); - for (size_t i = 16; i < sd->size; i++) - av_log(ctx, AV_LOG_INFO, "%02x", user_data[i]); + for (size_t i = 16; i < sd->size; i++) { + const char *format = "%02x"; + + if (s->udu_sei_as_ascii) + format = isprint(user_data[i]) ? "%c" : "\\x%02x"; + av_log(ctx, AV_LOG_INFO, format, user_data[i]); + } av_log(ctx, AV_LOG_INFO, "\n"); }
From: Zhao Zhili <zhilizhao@tencent.com> 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. --- doc/filters.texi | 4 ++++ libavfilter/version.h | 2 +- libavfilter/vf_showinfo.c | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-)