diff --git a/doc/APIchanges b/doc/APIchanges index 91710bb27d6ff..244fff4e1cdd8 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -1,5 +1,8 @@ The last version increases of all libraries were on 2025-03-28 +2025-03-xx - xxxxxxxxxx - lavu 60.4.100 - log.h + Add flag AV_LOG_PRINT_MEMADDRESS + API changes, most recent first: 2025-05-21 - xxxxxxxxxx - lavu 60.3.100 - avassert.h diff --git a/doc/fftools-common-opts.texi b/doc/fftools-common-opts.texi index f6d452c40eb3d..5d66af6b02090 100644 --- a/doc/fftools-common-opts.texi +++ b/doc/fftools-common-opts.texi @@ -230,6 +230,8 @@ log to file. Indicates that log lines should be prefixed with time information. @item datetime Indicates that log lines should be prefixed with date and time information. +@item mem +Indicates that context prefixes should be printed with memory address. @end table Flags can also be used alone by adding a '+'/'-' prefix to set/reset a single flag without affecting other @var{flags} or changing @var{loglevel}. When diff --git a/fftools/opt_common.c b/fftools/opt_common.c index c2f6b9de2a75d..e4afef77073e6 100644 --- a/fftools/opt_common.c +++ b/fftools/opt_common.c @@ -1301,6 +1301,12 @@ int opt_loglevel(void *optctx, const char *opt, const char *arg) } else { flags |= AV_LOG_PRINT_DATETIME; } + } else if (av_strstart(token, "mem", &arg)) { + if (cmd == '-') { + flags &= ~AV_LOG_PRINT_MEMADDRESS; + } else { + flags |= AV_LOG_PRINT_MEMADDRESS; + } } else { break; } @@ -1332,6 +1338,7 @@ int opt_loglevel(void *optctx, const char *opt, const char *arg) av_log(NULL, AV_LOG_FATAL, "\"level\"\n"); av_log(NULL, AV_LOG_FATAL, "\"time\"\n"); av_log(NULL, AV_LOG_FATAL, "\"datetime\"\n"); + av_log(NULL, AV_LOG_FATAL, "\"mem\"\n"); return AVERROR(EINVAL); } diff --git a/libavutil/log.c b/libavutil/log.c index 2b721aea5a261..d09db1ebf6747 100644 --- a/libavutil/log.c +++ b/libavutil/log.c @@ -328,16 +328,18 @@ static void format_line(void *avcl, int level, const char *fmt, va_list vl, if(type) type[0] = type[1] = AV_CLASS_CATEGORY_NA + 16; if (*print_prefix && avc) { + const char *p_fmt = flags & AV_LOG_PRINT_MEMADDRESS ? "[%s @ %p] " : "[%s] "; + if (avc->parent_log_context_offset) { AVClass** parent = *(AVClass ***) (((uint8_t *) avcl) + avc->parent_log_context_offset); if (parent && *parent) { - av_bprintf(part+0, "[%s @ %p] ", + av_bprintf(part+0, p_fmt, item_name(parent, *parent), parent); if(type) type[0] = get_category(parent); } } - av_bprintf(part+1, "[%s @ %p] ", + av_bprintf(part+1, p_fmt, item_name(avcl, avc), avcl); if(type) type[1] = get_category(avcl); } diff --git a/libavutil/log.h b/libavutil/log.h index ac5b08b632cd7..79e44d97d9e89 100644 --- a/libavutil/log.h +++ b/libavutil/log.h @@ -417,6 +417,11 @@ int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, */ #define AV_LOG_PRINT_DATETIME 8 +/** + * Print memory addresses of context instances. + */ +#define AV_LOG_PRINT_MEMADDRESS 16 + void av_log_set_flags(int arg); int av_log_get_flags(void); diff --git a/libavutil/version.h b/libavutil/version.h index 2979f802332a7..6e82f039c5c56 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 60 -#define LIBAVUTIL_VERSION_MINOR 3 +#define LIBAVUTIL_VERSION_MINOR 4 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \