From: softworkz <ffmpegagent@gmail.com> To: ffmpeg-devel@ffmpeg.org Cc: softworkz <softworkz@hotmail.com> Subject: [FFmpeg-devel] [PATCH v6 2/3] fftools/opt_common: add memaddresses log flag Date: Thu, 13 Mar 2025 09:30:40 +0000 Message-ID: <bab6b9154905ab8561399ec23302e8b339c547d2.1741858241.git.ffmpegagent@gmail.com> (raw) In-Reply-To: <pull.59.v6.ffstaging.FFmpeg.1741858241.ffmpegagent@gmail.com> From: softworkz <softworkz@hotmail.com> This commit adds the memaddresses log flag. When specifying this flag at the command line, context prefixes will be printed with memory addresses like in earlier ffmpeg versions. Memory addresses are no longer printed by default. The benefits are: - Smaller log file sizes - The disambiguation is much easier to recognize and to follow - It eventually allows comparing and viewing log file diffs without almost every line being different due to those addresses Example with memaddresses flag: [hevc @ 0000018e72a89cc0] ..... without (new behavior): [hevc #0] ..... Signed-off-by: softworkz <softworkz@hotmail.com> --- fftools/cmdutils.c | 1 + fftools/fftools_log.c | 67 +++++++++++++++++++++++++++++++++++++++---- fftools/fftools_log.h | 5 ++++ fftools/opt_common.c | 6 ++++ 4 files changed, 73 insertions(+), 6 deletions(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index 0bf453508d..fb05f3fd2f 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -46,6 +46,7 @@ #include "libavutil/dict.h" #include "libavutil/opt.h" #include "cmdutils.h" + #include "fftools_log.h" #include "fopen_utf8.h" #include "opt_common.h" diff --git a/fftools/fftools_log.c b/fftools/fftools_log.c index f8f098fef9..b83c8abcaa 100644 --- a/fftools/fftools_log.c +++ b/fftools/fftools_log.c @@ -59,6 +59,53 @@ static inline struct tm *ff_localtime_r(const time_t* clock, struct tm *result) #define localtime_r ff_localtime_r #endif +#define MAX_CLASS_IDS 1000 +static struct class_ids { + void *avcl; + uint64_t class_hash; + unsigned id; +} class_ids[MAX_CLASS_IDS]; + +static uint64_t fnv_hash(const char *str) +{ + // FNV-1a 64-bit hash algorithm + uint64_t hash = 0xcbf29ce484222325ULL; + while (*str) { + hash ^= (unsigned char)*str++; + hash *= 0x100000001b3ULL; + } + return hash; +} + +static unsigned get_class_id(void* avcl) +{ + AVClass* avc = avcl ? *(AVClass **) avcl : NULL; + unsigned i, nb_ids = 0; + uint64_t class_hash; + + for (i = 0; i < MAX_CLASS_IDS && class_ids[i].avcl; i++) { + if (class_ids[i].avcl == avcl) + return class_ids[i].id; + } + + class_hash = fnv_hash(avc->class_name); + + for (i = 0; i < MAX_CLASS_IDS; i++) { + if (class_ids[i].class_hash == class_hash) + nb_ids++; + + if (!class_ids[i].avcl) { + class_ids[i].avcl = avcl; + class_ids[i].class_hash = class_hash; + class_ids[i].id = nb_ids; + return class_ids[i].id; + } + } + + // exceeded MAX_CLASS_IDS entries in class_ids[] + return 0; +} + static AVMutex mutex = AV_MUTEX_INITIALIZER; #define LINE_SZ 1024 @@ -316,6 +363,15 @@ static void format_date_now(AVBPrint* bp_time, int include_date) } } +static void log_formatprefix(AVBPrint* buffer, AVClass** avcl) +{ + const int print_mem = ff_log_flags & FF_LOG_PRINT_MEMADDRESSES; + if (print_mem) + av_bprintf(buffer+0, "[%s @ %p] ", item_name(avcl, *avcl), avcl); + else + av_bprintf(buffer+0, "[%s #%u] ", item_name(avcl, *avcl), get_class_id(avcl)); +} + static void format_line(void *avcl, int level, const char *fmt, va_list vl, AVBPrint part[5], int *print_prefix, int type[2]) { @@ -328,17 +384,16 @@ 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) { + if (avc->parent_log_context_offset) { - AVClass** parent = *(AVClass ***) (((uint8_t *) avcl) + - 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] ", - item_name(parent, *parent), parent); + log_formatprefix(part, parent); if(type) type[0] = get_category(parent); } } - av_bprintf(part+1, "[%s @ %p] ", - item_name(avcl, avc), avcl); + log_formatprefix(part, avcl); + if(type) type[1] = get_category(avcl); } diff --git a/fftools/fftools_log.h b/fftools/fftools_log.h index 4dba15ff7f..6333e4d3c1 100644 --- a/fftools/fftools_log.h +++ b/fftools/fftools_log.h @@ -92,5 +92,10 @@ int ff_log_get_flags(void); */ #define FF_LOG_PRINT_DATETIME 8 +/** + * Print memory addresses instead of logical ids in the AVClass prefix. + */ +#define FF_LOG_PRINT_MEMADDRESSES 16 + #endif /* FFTOOLS_FFTOOLS_LOG_H */ diff --git a/fftools/opt_common.c b/fftools/opt_common.c index 702f62a6fe..53b6fb2257 100644 --- a/fftools/opt_common.c +++ b/fftools/opt_common.c @@ -1305,6 +1305,12 @@ int opt_loglevel(void *optctx, const char *opt, const char *arg) } else { flags |= FF_LOG_PRINT_DATETIME; } + } else if (av_strstart(token, "memaddresses", &arg)) { + if (cmd == '-') { + flags &= ~FF_LOG_PRINT_MEMADDRESSES; + } else { + flags |= FF_LOG_PRINT_MEMADDRESSES; + } } else { break; } -- ffmpeg-codebot _______________________________________________ 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-03-13 9:31 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-03-05 15:38 [FFmpeg-devel] [PATCH] avutil/log: Replace addresses in log output with simple ids softworkz 2025-03-05 15:40 ` Nicolas George 2025-03-05 15:45 ` Soft Works 2025-03-05 15:48 ` Soft Works 2025-03-06 10:08 ` Nicolas George 2025-03-06 17:02 ` Soft Works 2025-03-06 17:38 ` Marvin Scholz 2025-03-06 17:44 ` Soft Works 2025-03-06 17:49 ` Marvin Scholz 2025-03-06 18:16 ` Soft Works 2025-03-06 18:58 ` Marvin Scholz 2025-03-06 19:27 ` Soft Works 2025-03-06 20:01 ` Marvin Scholz 2025-03-06 20:48 ` Soft Works 2025-03-06 20:56 ` Soft Works 2025-03-05 15:42 ` Soft Works 2025-03-05 16:23 ` Gyan Doshi 2025-03-05 16:30 ` Soft Works 2025-03-05 17:14 ` Gyan Doshi 2025-03-05 18:19 ` [FFmpeg-devel] [PATCH v2 0/3] " ffmpegagent 2025-03-05 18:19 ` [FFmpeg-devel] [PATCH v2 1/3] " softworkz 2025-03-05 18:19 ` [FFmpeg-devel] [PATCH v2 2/3] fftools/opt_common: add memaddresses log flag softworkz 2025-03-05 18:19 ` [FFmpeg-devel] [PATCH v2 3/3] doc/fftools-common-opts: document " softworkz 2025-03-06 10:04 ` [FFmpeg-devel] [PATCH v2 0/3] avutil/log: Replace addresses in log output with simple ids Nicolas George 2025-03-06 16:38 ` Soft Works 2025-03-06 16:43 ` Nicolas George 2025-03-06 17:05 ` Soft Works 2025-03-06 17:38 ` Soft Works 2025-03-06 20:59 ` [FFmpeg-devel] [PATCH v3 0/4] " ffmpegagent 2025-03-06 20:59 ` [FFmpeg-devel] [PATCH v3 1/4] avutil/log: Add callback for context prefix formatting softworkz 2025-03-07 9:44 ` Nicolas George 2025-03-07 17:23 ` Soft Works 2025-03-07 17:30 ` Hendrik Leppkes 2025-03-07 18:02 ` Soft Works 2025-03-06 20:59 ` [FFmpeg-devel] [PATCH v3 2/4] fftools/opt_common: add memaddresses log flag softworkz 2025-03-06 20:59 ` [FFmpeg-devel] [PATCH v3 3/4] fftools: Provide a log formatting callback for context prefixes softworkz 2025-03-06 20:59 ` [FFmpeg-devel] [PATCH v3 4/4] doc/fftools-common-opts: document memaddresses log flag softworkz 2025-03-08 23:02 ` [FFmpeg-devel] [PATCH v4 0/4] avutil/log: Replace addresses in log output with simple ids ffmpegagent 2025-03-08 23:02 ` [FFmpeg-devel] [PATCH v4 1/4] avutil/log: Add AV_LOG_PRINT_MEMADDRESSES logging flag softworkz 2025-03-08 23:02 ` [FFmpeg-devel] [PATCH v4 2/4] fftools/opt_common: add memaddresses log flag softworkz 2025-03-08 23:02 ` [FFmpeg-devel] [PATCH v4 3/4] fftools: Provide a an fftools-specific logging callback function softworkz 2025-03-09 17:52 ` Michael Niedermayer 2025-03-09 18:59 ` Soft Works 2025-03-08 23:02 ` [FFmpeg-devel] [PATCH v4 4/4] doc/fftools-common-opts: document memaddresses log flag softworkz 2025-03-09 19:01 ` [FFmpeg-devel] [PATCH v5 0/5] avutil/log: Replace addresses in log output with simple ids ffmpegagent 2025-03-09 19:01 ` [FFmpeg-devel] [PATCH v5 1/5] avutil/log: Add AV_LOG_PRINT_MEMADDRESSES logging flag softworkz 2025-03-09 19:05 ` Nicolas George 2025-03-09 19:11 ` Soft Works 2025-03-09 19:01 ` [FFmpeg-devel] [PATCH v5 2/5] fftools/opt_common: add memaddresses log flag softworkz 2025-03-09 19:01 ` [FFmpeg-devel] [PATCH v5 3/5] fftools: Provide a an fftools-specific logging callback function softworkz 2025-03-09 19:01 ` [FFmpeg-devel] [PATCH v5 4/5] doc/fftools-common-opts: document memaddresses log flag softworkz 2025-03-09 19:01 ` [FFmpeg-devel] [PATCH v5 5/5] Remove commented lines softworkz 2025-03-13 9:30 ` [FFmpeg-devel] [PATCH v6 0/3] avutil/log: Replace addresses in log output with simple ids ffmpegagent 2025-03-13 9:30 ` [FFmpeg-devel] [PATCH v6 1/3] fftools: Add a local logging callback function softworkz 2025-03-13 9:30 ` softworkz [this message] 2025-03-13 9:30 ` [FFmpeg-devel] [PATCH v6 3/3] doc/fftools-common-opts: document memaddresses log flag 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=bab6b9154905ab8561399ec23302e8b339c547d2.1741858241.git.ffmpegagent@gmail.com \ --to=ffmpegagent@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ --cc=softworkz@hotmail.com \ /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