This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 0099a5fbdd46bd22c0c305471ca299e2cd112840 Author: Nicolas Gaullier <[email protected]> AuthorDate: Mon May 4 18:32:10 2026 +0200 Commit: Jun Zhao <[email protected]> CommitDate: Mon May 25 00:55:19 2026 +0000 fftools/textformat: stop using char * as identifiers Add an enum instead. As a result, fix honor -byte_binary_prefix. In value_string(), add support for float values (beyond seconds), and allow unit to be null or empty. Also remove unused variable unit_second_str in ffprobe. Signed-off-by: Nicolas Gaullier <[email protected]> --- fftools/ffprobe.c | 10 +++++----- fftools/graph/graphprint.c | 2 +- fftools/textformat/avtextformat.c | 23 ++++++++++++----------- fftools/textformat/avtextformat.h | 9 ++++++++- 4 files changed, 26 insertions(+), 18 deletions(-) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index b231d6ba71..00ddf8966c 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -344,7 +344,6 @@ static const char *print_input_filename; static const AVInputFormat *iformat = NULL; static const char *output_filename = NULL; -static const char unit_second_str[] = "s" ; static const char unit_hertz_str[] = "Hz" ; static const char unit_byte_str[] = "byte" ; static const char unit_bit_per_second_str[] = "bit/s"; @@ -455,7 +454,8 @@ static void log_callback(void *ptr, int level, const char *fmt, va_list vl) #define print_ts(k, v) avtext_print_ts(tfc, k, v, 0) #define print_duration_time(k, v, tb) avtext_print_time(tfc, k, v, tb, 1) #define print_duration_ts(k, v) avtext_print_ts(tfc, k, v, 1) -#define print_val(k, v, u) avtext_print_unit_integer(tfc, k, v, u) +#define print_val(k, v, u) avtext_print_unit_integer(tfc, k, v, AV_TEXTFORMAT_VALUE_FMT_INT, u) +#define print_int_fmt(k, v, f, u) avtext_print_unit_integer(tfc, k, v, f, u) static void print_integers(AVTextFormatContext *tfc, const char *key, const void *data, int size, const char *format, @@ -1342,7 +1342,7 @@ static void show_packet(AVTextFormatContext *tfc, InputFile *ifile, AVPacket *pk print_time("dts_time", pkt->dts, &st->time_base); print_duration_ts("duration", pkt->duration); print_duration_time("duration_time", pkt->duration, &st->time_base); - print_val("size", pkt->size, unit_byte_str); + print_int_fmt("size", pkt->size, AV_TEXTFORMAT_VALUE_FMT_BYTE, unit_byte_str); if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos); else print_str_opt("pos", "N/A"); print_fmt("flags", "%c%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_', @@ -1505,7 +1505,7 @@ static void show_frame(AVTextFormatContext *tfc, AVFrame *frame, AVStream *strea print_duration_time("duration_time", frame->duration, &stream->time_base); if (fd && fd->pkt_pos != -1) print_fmt ("pkt_pos", "%"PRId64, fd->pkt_pos); else print_str_opt("pkt_pos", "N/A"); - if (fd && fd->pkt_size != -1) print_val ("pkt_size", fd->pkt_size, unit_byte_str); + if (fd && fd->pkt_size != -1) print_int_fmt("pkt_size", fd->pkt_size, AV_TEXTFORMAT_VALUE_FMT_BYTE, unit_byte_str); else print_str_opt("pkt_size", "N/A"); switch (stream->codecpar->codec_type) { @@ -2448,7 +2448,7 @@ static int show_format(AVTextFormatContext *tfc, InputFile *ifile) } print_time("start_time", fmt_ctx->start_time, &AV_TIME_BASE_Q); print_time("duration", fmt_ctx->duration, &AV_TIME_BASE_Q); - if (size >= 0) print_val ("size", size, unit_byte_str); + if (size >= 0) print_int_fmt("size", size, AV_TEXTFORMAT_VALUE_FMT_BYTE, unit_byte_str); else print_str_opt("size", "N/A"); if (fmt_ctx->bit_rate > 0) print_val ("bit_rate", fmt_ctx->bit_rate, unit_bit_per_second_str); else print_str_opt("bit_rate", "N/A"); diff --git a/fftools/graph/graphprint.c b/fftools/graph/graphprint.c index c2621bc38b..9ffeca3f11 100644 --- a/fftools/graph/graphprint.c +++ b/fftools/graph/graphprint.c @@ -141,7 +141,7 @@ typedef struct GraphPrintContext { #define print_q(k, v, s) avtext_print_rational(tfc, k, v, s) #define print_str(k, v) avtext_print_string(tfc, k, v, 0) #define print_str_opt(k, v) avtext_print_string(tfc, k, v, gpc->opt_flags) -#define print_val(k, v, u) avtext_print_unit_integer(tfc, k, v, u) +#define print_val(k, v, u) avtext_print_unit_integer(tfc, k, v, AV_TEXTFORMAT_VALUE_FMT_INT, u) #define print_fmt(k, f, ...) do { \ av_bprint_clear(&gpc->pbuf); \ diff --git a/fftools/textformat/avtextformat.c b/fftools/textformat/avtextformat.c index 47ef6e518f..db0cc83921 100644 --- a/fftools/textformat/avtextformat.c +++ b/fftools/textformat/avtextformat.c @@ -238,12 +238,7 @@ fail: return ret; } -/* Temporary definitions during refactoring */ static const char unit_second_str[] = "s"; -static const char unit_hertz_str[] = "Hz"; -static const char unit_byte_str[] = "byte"; -static const char unit_bit_per_second_str[] = "bit/s"; - void avtext_print_section_header(AVTextFormatContext *tctx, const void *data, int section_id) { @@ -367,6 +362,7 @@ struct unit_value { int64_t i; } val; + AVTextFormatValueFormat fmt; const char *unit; }; @@ -376,7 +372,7 @@ static char *value_string(const AVTextFormatContext *tctx, char *buf, int buf_si int64_t vali = 0; int show_float = 0; - if (uv.unit == unit_second_str) { + if (uv.fmt >= AV_TEXTFORMAT_VALUE_FMT_DOUBLE) { vald = uv.val.d; show_float = 1; } else { @@ -384,7 +380,7 @@ static char *value_string(const AVTextFormatContext *tctx, char *buf, int buf_si vali = uv.val.i; } - if (uv.unit == unit_second_str && tctx->opts.use_value_sexagesimal_format) { + if (uv.fmt == AV_TEXTFORMAT_VALUE_FMT_SECOND && tctx->opts.use_value_sexagesimal_format) { double secs; int hours, mins; secs = vald; @@ -399,7 +395,7 @@ static char *value_string(const AVTextFormatContext *tctx, char *buf, int buf_si if (tctx->opts.use_value_prefix && vald > 1) { int64_t index; - if (uv.unit == unit_byte_str && tctx->opts.use_byte_value_binary_prefix) { + if (uv.fmt == AV_TEXTFORMAT_VALUE_FMT_BYTE && tctx->opts.use_byte_value_binary_prefix) { index = (int64_t)(log2(vald) / 10); index = av_clip64(index, 0, FF_ARRAY_ELEMS(si_prefixes) - 1); vald /= si_prefixes[index].bin_val; @@ -418,19 +414,23 @@ static char *value_string(const AVTextFormatContext *tctx, char *buf, int buf_si else snprintf(buf, buf_size, "%"PRId64, vali); - av_strlcatf(buf, buf_size, "%s%s%s", *prefix_string || tctx->opts.show_value_unit ? " " : "", - prefix_string, tctx->opts.show_value_unit ? uv.unit : ""); + av_strlcatf(buf, buf_size, "%s%s%s", *prefix_string || tctx->opts.show_value_unit && uv.unit && *uv.unit ? " " : "", + prefix_string, tctx->opts.show_value_unit && uv.unit ? uv.unit : ""); } return buf; } -void avtext_print_unit_integer(AVTextFormatContext *tctx, const char *key, int64_t val, const char *unit) +void avtext_print_unit_integer(AVTextFormatContext *tctx, const char *key, int64_t val, AVTextFormatValueFormat fmt, const char *unit) { char val_str[128]; struct unit_value uv; + + av_assert0(fmt < AV_TEXTFORMAT_VALUE_FMT_DOUBLE); + uv.val.i = val; + uv.fmt = fmt; uv.unit = unit; avtext_print_string(tctx, key, value_string(tctx, val_str, sizeof(val_str), uv), 0); } @@ -495,6 +495,7 @@ void avtext_print_time(AVTextFormatContext *tctx, const char *key, double d = av_q2d(*time_base) * ts; struct unit_value uv; uv.val.d = d; + uv.fmt = AV_TEXTFORMAT_VALUE_FMT_SECOND; uv.unit = unit_second_str; value_string(tctx, buf, sizeof(buf), uv); avtext_print_string(tctx, key, buf, 0); diff --git a/fftools/textformat/avtextformat.h b/fftools/textformat/avtextformat.h index edb292d42c..36f53556ea 100644 --- a/fftools/textformat/avtextformat.h +++ b/fftools/textformat/avtextformat.h @@ -161,6 +161,13 @@ struct AVTextFormatContext { unsigned int string_validation_utf8_flags; }; +typedef enum { + AV_TEXTFORMAT_VALUE_FMT_INT, + AV_TEXTFORMAT_VALUE_FMT_BYTE, + AV_TEXTFORMAT_VALUE_FMT_DOUBLE = 0x100, + AV_TEXTFORMAT_VALUE_FMT_SECOND, +} AVTextFormatValueFormat; + #define AV_TEXTFORMAT_PRINT_STRING_OPTIONAL 1 #define AV_TEXTFORMAT_PRINT_STRING_VALIDATE 2 @@ -178,7 +185,7 @@ void avtext_print_integer(AVTextFormatContext *tctx, const char *key, int64_t va int avtext_print_string(AVTextFormatContext *tctx, const char *key, const char *val, int flags); -void avtext_print_unit_integer(AVTextFormatContext *tctx, const char *key, int64_t val, const char *unit); +void avtext_print_unit_integer(AVTextFormatContext *tctx, const char *key, int64_t val, AVTextFormatValueFormat fmt, const char *unit); void avtext_print_rational(AVTextFormatContext *tctx, const char *key, AVRational q, char sep); _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
