Lynne via ffmpeg-devel: > Its not feasible to add an AVClass in the main context, as > it would waste space, as the main context is recursive, and > every bit of assembly would need to be changed. > > While its true that on paper av_log has access to the main > context, that functionality is not used as no options are > available for setting. No options will be exposed either, > and it makes no sense. > > mpv has recently started warning if a NULL AVClass is used > as an FFmpeg bug. While I don't fully agree nor disagree with > this, this is a simple patch which fixes the issue.
Really? https://github.com/mpv-player/mpv/commit/54d0763b92f3d8239aa2258f2193eebdc74a91ef is 13 years old and the check would only warn if a logcontext with NULL AVClass* is used. > --- > libavutil/tx.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/libavutil/tx.c b/libavutil/tx.c > index 0aae4c7cf7..136d10c374 100644 > --- a/libavutil/tx.c > +++ b/libavutil/tx.c > @@ -30,6 +30,12 @@ > ((x) == AV_TX_DOUBLE_ ## type) || \ > ((x) == AV_TX_INT32_ ## type)) > > +static const AVClass tx_class = { > + .class_name = "tx", > + .item_name = av_default_item_name, > + .version = LIBAVUTIL_VERSION_INT, > +}; > + > /* Calculates the modular multiplicative inverse */ > static av_always_inline int mulinv(int n, int m) > { > @@ -645,7 +651,7 @@ static void print_cd_info(const FFTXCodelet *cd, int > prio, int len, int print_pr > if (print_prio) > av_bprintf(&bp, ", prio: %i", prio); > > - av_log(NULL, log_level, "%s\n", bp.str); > + av_log((void *)&tx_class, log_level, "%s\n", bp.str); > } > > static void print_tx_structure(AVTXContext *s, int depth) > @@ -653,7 +659,7 @@ static void print_tx_structure(AVTXContext *s, int depth) > const FFTXCodelet *cd = s->cd_self; > > for (int i = 0; i <= depth; i++) > - av_log(NULL, AV_LOG_DEBUG, " "); > + av_log((void *)&tx_class, AV_LOG_DEBUG, " "); > > print_cd_info(cd, cd->prio, s->len, 0, AV_LOG_DEBUG); > > @@ -818,10 +824,10 @@ av_cold int ff_tx_init_subtx(AVTXContext *s, enum > AVTXType type, > AV_QSORT(cd_matches, nb_cd_matches, TXCodeletMatch, cmp_matches); > > #if !CONFIG_SMALL > - av_log(NULL, AV_LOG_TRACE, "%s\n", bp.str); > + av_log((void *)&tx_class, AV_LOG_TRACE, "%s\n", bp.str); > > for (int i = 0; i < nb_cd_matches; i++) { > - av_log(NULL, AV_LOG_TRACE, " %i: ", i + 1); > + av_log((void *)&tx_class, AV_LOG_TRACE, " %i: ", i + 1); > print_cd_info(cd_matches[i].cd, cd_matches[i].prio, 0, 1, > AV_LOG_TRACE); > } > #endif > @@ -931,7 +937,7 @@ av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, > enum AVTXType type, > *tx = tmp.fn[0]; > > #if !CONFIG_SMALL > - av_log(NULL, AV_LOG_DEBUG, "Transform tree:\n"); > + av_log((void *)&tx_class, AV_LOG_DEBUG, "Transform tree:\n"); > print_tx_structure(*ctx, 0); > #endif > Did you ever test this? av_log() expects a pointer to an AVClass-enabled struct, not a pointer to an AVClass. This will crash (it will interpret AVClass.class_name as pointer to an AVClass) when the log is active (when loglevel is high enough). - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".