From: "softworkz ." <softworkz-at-hotmail.com@ffmpeg.org> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements Date: Tue, 15 Apr 2025 03:19:54 +0000 Message-ID: <DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM> (raw) In-Reply-To: <GV1P250MB073708D33D46AB881810F1728FB22@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM> > -----Original Message----- > From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of > Andreas Rheinhardt > Sent: Dienstag, 15. April 2025 03:06 > To: ffmpeg-devel@ffmpeg.org > Subject: Re: [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality > improvements > > softworkz: > > From: softworkz <softworkz@hotmail.com> > > > > Signed-off-by: softworkz <softworkz@hotmail.com> > > --- > > fftools/textformat/avtextformat.c | 121 +++++++++++++++++++-------- > --- > > fftools/textformat/avtextformat.h | 6 +- > > fftools/textformat/tf_default.c | 8 +- > > fftools/textformat/tf_ini.c | 2 +- > > fftools/textformat/tf_json.c | 8 +- > > fftools/textformat/tf_xml.c | 3 - > > fftools/textformat/tw_avio.c | 9 ++- > > 7 files changed, 101 insertions(+), 56 deletions(-) > > > > diff --git a/fftools/textformat/avtextformat.c > b/fftools/textformat/avtextformat.c > > index 1ce51d11e2..406025d19d 100644 > > --- a/fftools/textformat/avtextformat.c > > +++ b/fftools/textformat/avtextformat.c > > @@ -93,9 +93,8 @@ static const AVClass textcontext_class = { > > > > static void bprint_bytes(AVBPrint *bp, const uint8_t *ubuf, size_t > ubuf_size) > > { > > - int i; > > av_bprintf(bp, "0X"); > > - for (i = 0; i < ubuf_size; i++) > > + for (unsigned i = 0; i < ubuf_size; i++) > > Why not size_t? Because it creates more warnings about narrowing conversions. > > av_bprintf(bp, "%02X", ubuf[i]); > > } > > > > @@ -110,8 +109,6 @@ int avtext_context_close(AVTextFormatContext > **ptctx) > > > > av_hash_freep(&tctx->hash); > > > > - av_hash_freep(&tctx->hash); > > - > > if (tctx->formatter->uninit) > > tctx->formatter->uninit(tctx); > > for (i = 0; i < SECTION_MAX_NB_LEVELS; i++) > > @@ -141,12 +138,18 @@ int avtext_context_open(AVTextFormatContext > **ptctx, > > AVTextFormatContext *tctx; > > int i, ret = 0; > > > > - if (!(tctx = av_mallocz(sizeof(AVTextFormatContext)))) { > > + if (!ptctx || !formatter) > > + return AVERROR(EINVAL); > > Can this happen? see below > > + > > + if (!formatter->priv_size && formatter->priv_class) > > + return AVERROR(EINVAL); > > Stuff like this should never happen and should not be checked (or > actually: the proper place to check stuff like this is in test tools > like lavc/tests/avcodec.c, but I don't think it is worth it for > fftools). I probably overdid it a bit with checks, but the goal for this API is still to become public at some point (like in avutil), so I tried to move towards that direction already. > > + > > + if (!((tctx = av_mallocz(sizeof(AVTextFormatContext))))) { > > ret = AVERROR(ENOMEM); > > goto fail; > > } > > > > - if (!(tctx->priv = av_mallocz(formatter->priv_size))) { > > + if (formatter->priv_size && !((tctx->priv = > av_mallocz(formatter->priv_size)))) { > > ret = AVERROR(ENOMEM); > > goto fail; > > } > > @@ -215,15 +218,15 @@ int avtext_context_open(AVTextFormatContext > **ptctx, > > > > /* validate replace string */ > > { > > - const uint8_t *p = tctx->string_validation_replacement; > > - const uint8_t *endp = p + strlen(p); > > + const uint8_t *p = (uint8_t *)tctx- > >string_validation_replacement; > > + const uint8_t *endp = p + strlen((const char *)p); > > while (*p) { > > const uint8_t *p0 = p; > > int32_t code; > > ret = av_utf8_decode(&code, &p, endp, tctx- > >string_validation_utf8_flags); > > if (ret < 0) { > > AVBPrint bp; > > - av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC); > > + av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); > > This adds a memleak on data where it makes a difference. Why? The string_validation_replacement string should be short enough to fit into the stack-allocated memory, no? > > bprint_bytes(&bp, p0, p - p0), > > av_log(tctx, AV_LOG_ERROR, > > "Invalid UTF8 sequence %s found in > string validation replace '%s'\n", > > @@ -259,6 +262,9 @@ static const char unit_bit_per_second_str[] = > "bit/s"; > > > > void avtext_print_section_header(AVTextFormatContext *tctx, const > void *data, int section_id) > > { > > + if (!tctx || section_id < 0 || section_id >= tctx->nb_sections) > > + return; > > Can this happen? For a public API - many things can happen... > > tctx->level++; > > av_assert0(tctx->level < SECTION_MAX_NB_LEVELS); > > > > @@ -272,6 +278,9 @@ void > avtext_print_section_header(AVTextFormatContext *tctx, const void > *data, in > > > > void avtext_print_section_footer(AVTextFormatContext *tctx) > > { > > + if (!tctx || tctx->level < 0 || tctx->level >= > SECTION_MAX_NB_LEVELS) > > + return; > > Can this happen? Yes - when somewhere in FFmpeg some output is changed without thinking about that there's a nesting limit of SECTION_MAX_NB_LEVELS. Even when only 2 or 3 section types are defined, the level can go beyond that value. > > > + > > int section_id = tctx->section[tctx->level]->id; > > int parent_section_id = tctx->level > > ? tctx->section[tctx->level - 1]->id > > @@ -289,7 +298,12 @@ void > avtext_print_section_footer(AVTextFormatContext *tctx) > > > > void avtext_print_integer(AVTextFormatContext *tctx, const char > *key, int64_t val) > > { > > - const struct AVTextFormatSection *section = tctx->section[tctx- > >level]; > > + const AVTextFormatSection *section; > > + > > + if (!tctx || !key || tctx->level < 0 || tctx->level >= > SECTION_MAX_NB_LEVELS) > > + return; > > Can this happen? see above > > > + > > + section = tctx->section[tctx->level]; > > > > if (section->show_all_entries || av_dict_get(section- > >entries_to_show, key, NULL, 0)) { > > tctx->formatter->print_integer(tctx, key, val); > > @@ -299,24 +313,28 @@ void avtext_print_integer(AVTextFormatContext > *tctx, const char *key, int64_t va > > > > static inline int validate_string(AVTextFormatContext *tctx, char > **dstp, const char *src) > > { > > - const uint8_t *p, *endp; > > + const uint8_t *p, *endp, *srcp = (const uint8_t *)src; > > AVBPrint dstbuf; > > + AVBPrint bp; > > int invalid_chars_nb = 0, ret = 0; > > > > + if (!tctx || !dstp || !src) > > + return AVERROR(EINVAL); > > + > > Can this happen? > > > + *dstp = NULL; > > av_bprint_init(&dstbuf, 0, AV_BPRINT_SIZE_UNLIMITED); > > + av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); > > > > - endp = src + strlen(src); > > - for (p = src; *p;) { > > - uint32_t code; > > + endp = srcp + strlen(src); > > + for (p = srcp; *p;) { > > + int32_t code; > > int invalid = 0; > > const uint8_t *p0 = p; > > > > if (av_utf8_decode(&code, &p, endp, tctx- > >string_validation_utf8_flags) < 0) { > > - AVBPrint bp; > > - av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC); > > - bprint_bytes(&bp, p0, p-p0); > > - av_log(tctx, AV_LOG_DEBUG, > > - "Invalid UTF-8 sequence %s found in string > '%s'\n", bp.str, src); > > + av_bprint_clear(&bp); > > + bprint_bytes(&bp, p0, p - p0); > > + av_log(tctx, AV_LOG_DEBUG, "Invalid UTF-8 sequence %s > found in string '%s'\n", bp.str, src); > > invalid = 1; > > } > > > > @@ -336,7 +354,7 @@ static inline int > validate_string(AVTextFormatContext *tctx, char **dstp, const > > } > > > > if (!invalid || tctx->string_validation == > AV_TEXTFORMAT_STRING_VALIDATION_IGNORE) > > - av_bprint_append_data(&dstbuf, p0, p-p0); > > + av_bprint_append_data(&dstbuf, (const char *)p0, p - > p0); > > } > > > > if (invalid_chars_nb && tctx->string_validation == > AV_TEXTFORMAT_STRING_VALIDATION_REPLACE) > > @@ -346,6 +364,7 @@ static inline int > validate_string(AVTextFormatContext *tctx, char **dstp, const > > > > end: > > av_bprint_finalize(&dstbuf, dstp); > > + av_bprint_finalize(&bp, NULL); > > return ret; > > } > > > > @@ -358,17 +377,18 @@ struct unit_value { > > const char *unit; > > }; > > > > -static char *value_string(AVTextFormatContext *tctx, char *buf, int > buf_size, struct unit_value uv) > > +static char *value_string(const AVTextFormatContext *tctx, char > *buf, int buf_size, struct unit_value uv) > > { > > double vald; > > - int64_t vali; > > + int64_t vali = 0; > > int show_float = 0; > > > > if (uv.unit == unit_second_str) { > > vald = uv.val.d; > > show_float = 1; > > } else { > > - vald = vali = uv.val.i; > > + vald = (double)uv.val.i; > > + vali = uv.val.i; > > } > > > > if (uv.unit == unit_second_str && tctx- > >use_value_sexagesimal_format) { > > @@ -387,17 +407,17 @@ static char *value_string(AVTextFormatContext > *tctx, char *buf, int buf_size, st > > int64_t index; > > > > if (uv.unit == unit_byte_str && tctx- > >use_byte_value_binary_prefix) { > > - index = (int64_t) (log2(vald)) / 10; > > - index = av_clip(index, 0, > FF_ARRAY_ELEMS(si_prefixes) - 1); > > + index = (int64_t)(log2(vald) / 10); > > + index = av_clip64(index, 0, > FF_ARRAY_ELEMS(si_prefixes) - 1); > > vald /= si_prefixes[index].bin_val; > > prefix_string = si_prefixes[index].bin_str; > > } else { > > - index = (int64_t) (log10(vald)) / 3; > > - index = av_clip(index, 0, > FF_ARRAY_ELEMS(si_prefixes) - 1); > > + index = (int64_t)(log10(vald) / 3); > > + index = av_clip64(index, 0, > FF_ARRAY_ELEMS(si_prefixes) - 1); > > vald /= si_prefixes[index].dec_val; > > prefix_string = si_prefixes[index].dec_str; > > } > > - vali = vald; > > + vali = (int64_t)vald; > > } > > > > if (show_float || (tctx->use_value_prefix && vald != > (int64_t)vald)) > > @@ -425,9 +445,14 @@ void avtext_print_unit_int(AVTextFormatContext > *tctx, const char *key, int value > > > > int avtext_print_string(AVTextFormatContext *tctx, const char *key, > const char *val, int flags) > > { > > - const struct AVTextFormatSection *section = tctx->section[tctx- > >level]; > > + const AVTextFormatSection *section; > > int ret = 0; > > > > + if (!tctx || !key || !val || tctx->level < 0 || tctx->level >= > SECTION_MAX_NB_LEVELS) > > + return AVERROR(EINVAL); > > Can this happen? > > > + > > + section = tctx->section[tctx->level]; > > + > > if (tctx->show_optional_fields == SHOW_OPTIONAL_FIELDS_NEVER || > > (tctx->show_optional_fields == SHOW_OPTIONAL_FIELDS_AUTO > > && (flags & AV_TEXTFORMAT_PRINT_STRING_OPTIONAL) > > @@ -462,7 +487,7 @@ int avtext_print_string(AVTextFormatContext > *tctx, const char *key, const char * > > void avtext_print_rational(AVTextFormatContext *tctx, const char > *key, AVRational q, char sep) > > { > > AVBPrint buf; > > - av_bprint_init(&buf, 0, AV_BPRINT_SIZE_AUTOMATIC); > > + av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); > > This is strictly worse than what was here before: With UNLIMITED you > would have a memleak in case the internal buffer wouldn't suffice. > (But anyway, this should use snprintf. I just sent a patch for this.) To be honest, I don't see much value in AV_BPRINT_SIZE_AUTOMATIC. When I would need to check the return values of all bprint operations, all the convenience would go over board instantly. Using AV_BPRINT_SIZE_AUTOMATIC without return value checking is error-prone and can cause errors which might be hard to identify. On the other side, identifying places in code where AV_BPRINT_SIZE_UNLIMITED is used and finalize is needed is a lot easier and doesn't even need a specific case and/or debugging to find out. In the worst case, I'd still prefer a memory leak over incorrect behavior (or well - always depends on the case). By that I don't mean errors that are reported and causing failure but those things that are failing silently and are hard to notice or trace back when noticing. Surely others may see it differently. > > > av_bprintf(&buf, "%d%c%d", q.num, sep, q.den); > > avtext_print_string(tctx, key, buf.str, 0); > > } > > @@ -470,12 +495,11 @@ void avtext_print_rational(AVTextFormatContext > *tctx, const char *key, AVRationa > > void avtext_print_time(AVTextFormatContext *tctx, const char *key, > > int64_t ts, const AVRational *time_base, int > is_duration) > > { > > - char buf[128]; > > - > > if ((!is_duration && ts == AV_NOPTS_VALUE) || (is_duration && > ts == 0)) { > > avtext_print_string(tctx, key, "N/A", > AV_TEXTFORMAT_PRINT_STRING_OPTIONAL); > > } else { > > - double d = ts * av_q2d(*time_base); > > + char buf[128]; > > + double d = av_q2d(*time_base) * (double)ts; > > We actually try to avoid explicit casts where possible. I'll answer that separately. > > struct unit_value uv; > > uv.val.d = d; > > uv.unit = unit_second_str; > > @@ -496,7 +520,8 @@ void avtext_print_data(AVTextFormatContext > *tctx, const char *name, > > const uint8_t *data, int size) > > { > > AVBPrint bp; > > - int offset = 0, l, i; > > + unsigned offset = 0; > > + int l, i; > > > > av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); > > av_bprintf(&bp, "\n"); > > @@ -523,25 +548,29 @@ void avtext_print_data(AVTextFormatContext > *tctx, const char *name, > > void avtext_print_data_hash(AVTextFormatContext *tctx, const char > *name, > > const uint8_t *data, int size) > > { > > - char *p, buf[AV_HASH_MAX_SIZE * 2 + 64] = { 0 }; > > + char buf[AV_HASH_MAX_SIZE * 2 + 64] = { 0 }; > > + int len; > > > > if (!tctx->hash) > > return; > > > > av_hash_init(tctx->hash); > > av_hash_update(tctx->hash, data, size); > > - snprintf(buf, sizeof(buf), "%s:", av_hash_get_name(tctx- > >hash)); > > - p = buf + strlen(buf); > > - av_hash_final_hex(tctx->hash, p, buf + sizeof(buf) - p); > > + len = snprintf(buf, sizeof(buf), "%s:", av_hash_get_name(tctx- > >hash)); > > + av_hash_final_hex(tctx->hash, (uint8_t *)&buf[len], > (int)sizeof(buf) - len); > > Is it guaranteed that the output of snprintf() is not truncated? MAX_HASH_NAME_SIZE is 11 and AV_HASH_MAX_SIZE 64, make 192 - 11 > 0 > > > avtext_print_string(tctx, name, buf, 0); > > } > > > > void avtext_print_integers(AVTextFormatContext *tctx, const char > *name, > > - uint8_t *data, int size, const > char *format, > > - int columns, int bytes, int > offset_add) > > + uint8_t *data, int size, const char > *format, > > + int columns, int bytes, int offset_add) > > { > > AVBPrint bp; > > - int offset = 0, l, i; > > + unsigned offset = 0; > > + int l, i; > > + > > + if (!name || !data || !format || columns <= 0 || bytes <= 0) > > + return; > > Can this happen? Sure, as a public API. Of course, one can spend time, trying to determine which conditions are realistically possible or not. But that introduces potential of human error, so - unless it's a really hot path, one check to many is better than one too less. > > > > > av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); > > av_bprintf(&bp, "\n"); > > @@ -607,12 +636,18 @@ int > avtextwriter_context_open(AVTextWriterContext **pwctx, const > AVTextWriter *w > > AVTextWriterContext *wctx; > > int ret = 0; > > > > - if (!(wctx = av_mallocz(sizeof(AVTextWriterContext)))) { > > + if (!pwctx || !writer) > > + return AVERROR(EINVAL); > > + > > + if (!writer->priv_size && writer->priv_class) > > Stuff like this should never happen and should therefore not be > checked. OK. > > > + return AVERROR(EINVAL); > > + > > + if (!((wctx = av_mallocz(sizeof(AVTextWriterContext))))) { > > ret = AVERROR(ENOMEM); > > goto fail; > > } > > > > - if (!(wctx->priv = av_mallocz(writer->priv_size))) { > > + if (writer->priv_size && !((wctx->priv = av_mallocz(writer- > >priv_size)))) { > > ret = AVERROR(ENOMEM); > > goto fail; > > } > > diff --git a/fftools/textformat/avtextformat.h > b/fftools/textformat/avtextformat.h > > index 03564d14a7..e519094f4f 100644 > > --- a/fftools/textformat/avtextformat.h > > +++ b/fftools/textformat/avtextformat.h > > @@ -21,9 +21,7 @@ > > #ifndef FFTOOLS_TEXTFORMAT_AVTEXTFORMAT_H > > #define FFTOOLS_TEXTFORMAT_AVTEXTFORMAT_H > > > > -#include <stddef.h> > > #include <stdint.h> > > -#include "libavutil/attributes.h" > > #include "libavutil/dict.h" > > #include "libavformat/avio.h" > > #include "libavutil/bprint.h" > > @@ -103,7 +101,7 @@ struct AVTextFormatContext { > > unsigned int > nb_item_type[SECTION_MAX_NB_LEVELS][SECTION_MAX_NB_SECTIONS]; > > > > /** section per each level */ > > - const struct AVTextFormatSection > *section[SECTION_MAX_NB_LEVELS]; > > + const AVTextFormatSection *section[SECTION_MAX_NB_LEVELS]; > > AVBPrint section_pbuf[SECTION_MAX_NB_LEVELS]; ///< generic > print buffer dedicated to each section, > > /// used by > various formatters > > > > @@ -124,7 +122,7 @@ struct AVTextFormatContext { > > #define AV_TEXTFORMAT_PRINT_STRING_VALIDATE 2 > > > > int avtext_context_open(AVTextFormatContext **ptctx, const > AVTextFormatter *formatter, AVTextWriterContext *writer_context, const > char *args, > > - const struct AVTextFormatSection *sections, > int nb_sections, > > + const AVTextFormatSection *sections, int > nb_sections, > > int show_value_unit, > > int use_value_prefix, > > int use_byte_value_binary_prefix, > > diff --git a/fftools/textformat/tf_default.c > b/fftools/textformat/tf_default.c > > index 14ef9fe8f9..3b05d25f36 100644 > > --- a/fftools/textformat/tf_default.c > > +++ b/fftools/textformat/tf_default.c > > @@ -70,9 +70,10 @@ DEFINE_FORMATTER_CLASS(default); > > /* lame uppercasing routine, assumes the string is lower case ASCII > */ > > static inline char *upcase_string(char *dst, size_t dst_size, const > char *src) > > { > > - int i; > > + unsigned i; > > + > > Why not size_t? see above. > > > for (i = 0; src[i] && i < dst_size - 1; i++) > > - dst[i] = av_toupper(src[i]); > > + dst[i] = (char)av_toupper(src[i]); > > dst[i] = 0; > > return dst; > > } > > @@ -108,6 +109,9 @@ static void > default_print_section_footer(AVTextFormatContext *wctx) > > const struct AVTextFormatSection *section = wctx->section[wctx- > >level]; > > char buf[32]; > > > > + if (!section) > > + return; > > Can this happen? No, but here it should actually call the function in tf_internal and with that it can happen. This must have gotten lost from rebasing. > > + > > if (def->noprint_wrappers || def->nested_section[wctx->level]) > > return; > > > > diff --git a/fftools/textformat/tf_ini.c > b/fftools/textformat/tf_ini.c > > index 9e1aa60e09..ec471fd480 100644 > > --- a/fftools/textformat/tf_ini.c > > +++ b/fftools/textformat/tf_ini.c > > @@ -92,7 +92,7 @@ static char *ini_escape_str(AVBPrint *dst, const > char *src) > > /* fallthrough */ > > default: > > if ((unsigned char)c < 32) > > - av_bprintf(dst, "\\x00%02x", c & 0xff); > > + av_bprintf(dst, "\\x00%02x", (unsigned char)c); > > else > > av_bprint_chars(dst, c, 1); > > break; > > diff --git a/fftools/textformat/tf_json.c > b/fftools/textformat/tf_json.c > > index 24838b35ec..f286838d3c 100644 > > --- a/fftools/textformat/tf_json.c > > +++ b/fftools/textformat/tf_json.c > > @@ -82,13 +82,18 @@ static const char *json_escape_str(AVBPrint > *dst, const char *src, void *log_ctx > > static const char json_subst[] = { '"', '\\', 'b', 'f', > 'n', 'r', 't', 0 }; > > const char *p; > > > > + if (!src) { > > + av_log(log_ctx, AV_LOG_ERROR, "json_escape_str: NULL source > string\n"); > > + return NULL; > > + } > > Can this even happen? > > > + > > for (p = src; *p; p++) { > > char *s = strchr(json_escape, *p); > > if (s) { > > av_bprint_chars(dst, '\\', 1); > > av_bprint_chars(dst, json_subst[s - json_escape], 1); > > } else if ((unsigned char)*p < 32) { > > - av_bprintf(dst, "\\u00%02x", *p & 0xff); > > + av_bprintf(dst, "\\u00%02x", (unsigned char)*p); > > } else { > > av_bprint_chars(dst, *p, 1); > > } > > @@ -107,6 +112,7 @@ static void > json_print_section_header(AVTextFormatContext *wctx, const void *dat > > wctx->section[wctx->level-1] : NULL; > > > > if (wctx->level && wctx->nb_item[wctx->level-1]) > > + if (wctx->level && wctx->nb_item[wctx->level - 1]) > > writer_put_str(wctx, ",\n"); > > > > if (section->flags & AV_TEXTFORMAT_SECTION_FLAG_IS_WRAPPER) { > > diff --git a/fftools/textformat/tf_xml.c > b/fftools/textformat/tf_xml.c > > index 76271dbaa6..eceeda81e5 100644 > > --- a/fftools/textformat/tf_xml.c > > +++ b/fftools/textformat/tf_xml.c > > @@ -18,10 +18,7 @@ > > * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA > 02110-1301 USA > > */ > > > > -#include <limits.h> > > -#include <stdarg.h> > > #include <stdint.h> > > -#include <stdio.h> > > #include <string.h> > > > > #include "avtextformat.h" > > diff --git a/fftools/textformat/tw_avio.c > b/fftools/textformat/tw_avio.c > > index d335d35a56..3c7492aa06 100644 > > --- a/fftools/textformat/tw_avio.c > > +++ b/fftools/textformat/tw_avio.c > > @@ -63,7 +63,7 @@ static void io_w8(AVTextWriterContext *wctx, int > b) > > static void io_put_str(AVTextWriterContext *wctx, const char *str) > > { > > IOWriterContext *ctx = wctx->priv; > > - avio_write(ctx->avio_context, str, strlen(str)); > > + avio_write(ctx->avio_context, (const unsigned char *)str, > (int)strlen(str)); > > } > > > > static void io_printf(AVTextWriterContext *wctx, const char *fmt, > ...) > > @@ -89,10 +89,12 @@ const AVTextWriter avtextwriter_avio = { > > > > int avtextwriter_create_file(AVTextWriterContext **pwctx, const > char *output_filename, int close_on_uninit) > > { > > + if (!pwctx || !output_filename || !output_filename[0]) > > + return AVERROR(EINVAL); > > Can this happen? When public - yes. Generally, I wonder: don't you find it risky to make decisions about function implementations that are based on knowledge about the calling code? ("can this happen?") I mean, the calling code doesn't know about the assumptions you were making and on which behavior the implementation might be relying on. For this patchset - most importantly for everything in graphprint.c, I had worked with the deliberate intention for checking everything that can be checked. The motivation here is the fact that graph-printing is always run (when configured), even when the FFmpeg run has failed or errored, because those are often the most interesting cases for viewing the graph or getting the data. But in case of errors and abortion, we cannot make any assumptions anymore and the answer to "can this happen?" might be more often "yes" than usual. I hope you don't mind to postpone the removal of checks a little bit. It doesn't feel right to me now, to go over and just blindly remove all of them. I would rather like to discuss a strategy/pattern in this regard about which checks should be made at which places and where not, also in the light of possibly being promoted to a public API. Finally, I'd also like to hear Stefanos opinion - it's mostly his code that we're moving around here 😊 Thanks sw _______________________________________________ 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".
next prev parent reply other threads:[~2025-04-15 3:20 UTC|newest] Thread overview: 240+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-04-14 12:46 [FFmpeg-devel] [PATCH 0/9] Execution Graph Printing ffmpegagent 2025-04-14 12:46 ` [FFmpeg-devel] [PATCH 1/9] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-21 16:52 ` Stefano Sabatini 2025-04-21 17:12 ` softworkz . 2025-04-14 12:46 ` [FFmpeg-devel] [PATCH 2/9] fftools/textformat: Quality improvements softworkz 2025-04-15 1:05 ` Andreas Rheinhardt 2025-04-15 3:19 ` softworkz . [this message] 2025-04-16 4:50 ` Andreas Rheinhardt 2025-04-16 6:27 ` softworkz . 2025-04-16 9:52 ` softworkz . 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 3/9] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 4/9] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 5/9] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 6/9] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 7/9] fftools/resources: Add resource manager files softworkz 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 8/9] fftools/graphprint: Add execution graph printing softworkz 2025-04-14 12:47 ` [FFmpeg-devel] [PATCH 9/9] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 00/10] Execution Graph Printing ffmpegagent 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 01/10] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 02/10] fftools/textformat: Quality improvements softworkz 2025-04-16 10:49 ` Andreas Rheinhardt 2025-04-16 11:33 ` softworkz . 2025-04-18 2:48 ` softworkz . 2025-04-18 5:41 ` softworkz . 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 03/10] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 04/10] fftools/tf_internal: Use ac_default_item_name softworkz 2025-04-16 10:50 ` Andreas Rheinhardt 2025-04-16 11:11 ` softworkz . 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 05/10] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 06/10] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 07/10] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 08/10] fftools/resources: Add resource manager files softworkz 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 09/10] fftools/graphprint: Add execution graph printing softworkz 2025-04-17 18:41 ` Michael Niedermayer 2025-04-18 2:45 ` softworkz . 2025-04-16 10:12 ` [FFmpeg-devel] [PATCH v2 10/10] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-16 10:21 ` [FFmpeg-devel] [PATCH v2 00/10] Execution Graph Printing softworkz . 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 00/11] " ffmpegagent 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 01/11] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 02/11] fftools/textformat: Quality improvements softworkz 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 03/11] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 04/11] fftools/tf_internal: Use ac_default_item_name softworkz 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 05/11] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-18 2:56 ` [FFmpeg-devel] [PATCH v3 06/11] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-18 2:57 ` [FFmpeg-devel] [PATCH v3 07/11] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-18 2:57 ` [FFmpeg-devel] [PATCH v3 08/11] fftools/resources: Add resource manager files softworkz 2025-04-18 2:57 ` [FFmpeg-devel] [PATCH v3 09/11] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-04-18 2:57 ` [FFmpeg-devel] [PATCH v3 10/11] fftools/graphprint: Add execution graph printing softworkz 2025-04-18 2:57 ` [FFmpeg-devel] [PATCH v3 11/11] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-20 10:11 ` Michael Niedermayer 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 00/11] Execution Graph Printing ffmpegagent 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 01/11] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 02/11] fftools/textformat: Quality improvements softworkz 2025-04-21 17:16 ` Stefano Sabatini 2025-04-21 17:21 ` Nicolas George 2025-04-21 17:40 ` softworkz . 2025-04-21 17:29 ` softworkz . 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 03/11] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-21 17:28 ` Stefano Sabatini 2025-04-21 17:31 ` softworkz . 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 04/11] fftools/tf_internal: Use ac_default_item_name softworkz 2025-04-21 17:31 ` Stefano Sabatini 2025-04-22 21:10 ` softworkz . 2025-04-23 22:36 ` softworkz . 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 05/11] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-23 22:56 ` Stefano Sabatini 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 06/11] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 07/11] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 08/11] fftools/resources: Add resource manager files softworkz 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 09/11] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 10/11] fftools/graphprint: Add execution graph printing softworkz 2025-04-20 22:59 ` [FFmpeg-devel] [PATCH v4 11/11] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 00/14] Execution Graph Printing ffmpegagent 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 01/14] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-23 22:08 ` Stefano Sabatini 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 02/14] fftools/textformat: Apply quality improvements softworkz 2025-04-23 22:34 ` Stefano Sabatini 2025-04-23 22:53 ` softworkz . 2025-04-23 22:56 ` Nicolas George 2025-04-23 23:04 ` softworkz . 2025-04-23 23:16 ` softworkz . 2025-04-23 23:54 ` softworkz . 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 03/14] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-04-23 22:45 ` Stefano Sabatini 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 04/14] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-04-23 22:48 ` Stefano Sabatini 2025-04-23 22:55 ` softworkz . 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 05/14] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-23 22:49 ` Stefano Sabatini 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 06/14] fftools/textformat: AVTextWriter change writer_printf signature softworkz 2025-04-23 23:07 ` Stefano Sabatini 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 07/14] fftools/tf_internal: Use av_default_item_name softworkz 2025-04-23 22:57 ` Stefano Sabatini 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 08/14] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 09/14] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 10/14] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 11/14] fftools/resources: Add resource manager files softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 12/14] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 13/14] fftools/graphprint: Add execution graph printing softworkz 2025-04-22 21:55 ` [FFmpeg-devel] [PATCH v5 14/14] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-24 1:12 ` [FFmpeg-devel] [PATCH v6 00/13] Execution Graph Printing ffmpegagent 2025-04-24 1:12 ` [FFmpeg-devel] [PATCH v6 01/13] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 02/13] fftools/textformat: Apply quality improvements softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 03/13] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 04/13] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 05/13] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 06/13] fftools/tf_internal: Use av_default_item_name softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 07/13] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 08/13] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 09/13] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 10/13] fftools/resources: Add resource manager files softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 11/13] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 12/13] fftools/graphprint: Add execution graph printing softworkz 2025-04-25 22:26 ` Michael Niedermayer 2025-04-25 23:17 ` softworkz . 2025-04-24 1:13 ` [FFmpeg-devel] [PATCH v6 13/13] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-25 23:30 ` [FFmpeg-devel] [PATCH v7 00/13] Execution Graph Printing ffmpegagent 2025-04-25 23:30 ` [FFmpeg-devel] [PATCH v7 01/13] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-27 10:47 ` Stefano Sabatini 2025-04-25 23:30 ` [FFmpeg-devel] [PATCH v7 02/13] fftools/textformat: Apply quality improvements softworkz 2025-04-28 19:56 ` Stefano Sabatini 2025-04-28 20:05 ` softworkz . 2025-04-28 20:24 ` Stefano Sabatini 2025-04-28 20:40 ` softworkz . 2025-04-28 21:47 ` Stefano Sabatini 2025-04-28 22:49 ` softworkz . 2025-04-25 23:30 ` [FFmpeg-devel] [PATCH v7 03/13] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-04-25 23:30 ` [FFmpeg-devel] [PATCH v7 04/13] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 05/13] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 06/13] fftools/tf_internal: Use av_default_item_name softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 07/13] fftools/textformat: Add function avtext_print_integer_flags() softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 08/13] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 09/13] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 10/13] fftools/resources: Add resource manager files softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 11/13] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 12/13] fftools/graphprint: Add execution graph printing softworkz 2025-04-25 23:31 ` [FFmpeg-devel] [PATCH v7 13/13] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 00/15] Execution Graph Printing ffmpegagent 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 01/15] fftools/textformat: Formatting and whitespace changes softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 02/15] fftools/textformat: Apply quality improvements softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 03/15] fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 04/15] fftools/textformat: Rename name param to key for API consistency softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 05/15] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 06/15] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 07/15] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 08/15] fftools/tf_internal: Use av_default_item_name softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 09/15] fftools/textformat: Add flags param to function avtext_print_integer() softworkz 2025-04-29 0:59 ` [FFmpeg-devel] [PATCH v8 10/15] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-04-29 1:00 ` [FFmpeg-devel] [PATCH v8 11/15] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-04-29 1:00 ` [FFmpeg-devel] [PATCH v8 12/15] fftools/resources: Add resource manager files softworkz 2025-04-29 1:00 ` [FFmpeg-devel] [PATCH v8 13/15] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-04-29 20:25 ` Michael Niedermayer 2025-04-29 1:00 ` [FFmpeg-devel] [PATCH v8 14/15] fftools/graphprint: Add execution graph printing softworkz 2025-04-29 19:35 ` Michael Niedermayer 2025-04-29 20:33 ` softworkz . 2025-05-02 0:11 ` Michael Niedermayer 2025-05-02 0:48 ` softworkz . 2025-05-03 5:08 ` softworkz . 2025-04-29 1:00 ` [FFmpeg-devel] [PATCH v8 15/15] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 00/15] Execution Graph Printing ffmpegagent 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 01/15] fftools/textformat: Formatting and whitespace changes softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 02/15] fftools/textformat: Apply quality improvements softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 03/15] fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 04/15] fftools/textformat: Rename name param to key for API consistency softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 05/15] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 06/15] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 07/15] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 08/15] fftools/tf_internal: Use av_default_item_name softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 09/15] fftools/textformat: Add flags param to function avtext_print_integer() softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 10/15] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 11/15] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 12/15] fftools/resources: Add resource manager files with build-time compression softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 13/15] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 14/15] fftools/graphprint: Add execution graph printing softworkz 2025-05-03 23:57 ` Michael Niedermayer 2025-05-04 2:55 ` softworkz . 2025-05-03 8:22 ` [FFmpeg-devel] [PATCH v9 15/15] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 00/15] Execution Graph Printing ffmpegagent 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 01/15] fftools/textformat: Formatting and whitespace changes softworkz 2025-05-07 23:44 ` Stefano Sabatini 2025-05-07 23:59 ` softworkz . 2025-05-08 0:14 ` Stefano Sabatini 2025-05-08 0:20 ` softworkz . 2025-05-07 23:47 ` Stefano Sabatini 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 02/15] fftools/textformat: Apply quality improvements softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 03/15] fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter softworkz 2025-05-07 23:49 ` Stefano Sabatini 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 04/15] fftools/textformat: Rename name param to key for API consistency softworkz 2025-05-07 23:50 ` Stefano Sabatini 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 05/15] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-05-07 23:58 ` Stefano Sabatini 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 06/15] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-05-08 0:05 ` Stefano Sabatini 2025-05-08 0:25 ` softworkz . 2025-05-08 21:38 ` Stefano Sabatini 2025-05-09 11:31 ` softworkz . 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 07/15] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 08/15] fftools/tf_internal: Use av_default_item_name softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 09/15] fftools/textformat: Add flags param to function avtext_print_integer() softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 10/15] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 11/15] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 12/15] fftools/resources: Add resource manager files with build-time compression softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 13/15] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 14/15] fftools/graphprint: Add execution graph printing softworkz 2025-05-04 2:57 ` [FFmpeg-devel] [PATCH v10 15/15] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 00/15] Execution Graph Printing ffmpegagent 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 01/15] fftools/textformat: Formatting and whitespace changes softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 02/15] fftools/textformat: Apply quality improvements softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 03/15] fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 04/15] fftools/textformat: Rename name param to key for API consistency softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 05/15] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 06/15] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 07/15] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 08/15] fftools/tf_internal: Use av_default_item_name softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 09/15] fftools/textformat: Add flags param to function avtext_print_integer() softworkz 2025-05-04 22:34 ` [FFmpeg-devel] [PATCH v11 10/15] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-05-04 22:35 ` [FFmpeg-devel] [PATCH v11 11/15] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-05-04 22:35 ` [FFmpeg-devel] [PATCH v11 12/15] fftools/resources: Add resource manager files with build-time compression softworkz 2025-05-04 22:35 ` [FFmpeg-devel] [PATCH v11 13/15] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-05-04 22:35 ` [FFmpeg-devel] [PATCH v11 14/15] fftools/graphprint: Add execution graph printing softworkz 2025-05-04 22:35 ` [FFmpeg-devel] [PATCH v11 15/15] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-05-07 2:06 ` [FFmpeg-devel] [PATCH v11 00/15] Execution Graph Printing softworkz . 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 " ffmpegagent 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 01/15] fftools/textformat: Apply formatting and whitespace changes softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 02/15] fftools/textformat: Apply quality improvements softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 03/15] fftools/textformat: Remove unused print_rational() pointer from AVTextFormatter softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 04/15] fftools/textformat: Rename name param to key for API consistency softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 05/15] fftools/avtextformat: Re-use BPrint in loop softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 06/15] fftools/textformat: Introduce AVTextFormatOptions for avtext_context_open() softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 07/15] fftools/textformat: Introduce common header and deduplicate code softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 08/15] fftools/tf_internal: Use av_default_item_name softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 09/15] fftools/textformat: Add flags param to function avtext_print_integer() softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 10/15] fftools/ffmpeg_filter: Move some declaration to new header file softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 11/15] avfilter/avfilter: Add avfilter_link_get_hw_frames_ctx() softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 12/15] fftools/resources: Add resource manager files with build-time compression softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 13/15] fftools/ffmpeg_mux: Make ms_from_ost() inline softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 14/15] fftools/graphprint: Add execution graph printing softworkz 2025-05-08 1:36 ` [FFmpeg-devel] [PATCH v12 15/15] fftools/graphprint: Now, make it a Killer-Feature! softworkz 2025-05-13 14:03 ` [FFmpeg-devel] [PATCH v12 00/15] Execution Graph Printing softworkz . 2025-05-15 21:46 ` softworkz .
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=DM8P223MB03659AF3483E00EC43597670BAB22@DM8P223MB0365.NAMP223.PROD.OUTLOOK.COM \ --to=softworkz-at-hotmail.com@ffmpeg.org \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git