From: ffmpegagent <ffmpegagent@gmail.com> To: ffmpeg-devel@ffmpeg.org Cc: softworkz <softworkz@hotmail.com> Subject: [FFmpeg-devel] [PATCH v6 0/3] avutil/log: Replace addresses in log output with simple ids Date: Thu, 13 Mar 2025 09:30:38 +0000 Message-ID: <pull.59.v6.ffstaging.FFmpeg.1741858241.ffmpegagent@gmail.com> (raw) In-Reply-To: <pull.59.v5.ffstaging.FFmpeg.1741546887.ffmpegagent@gmail.com> ..and individual numbering. 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 Before ====== [hevc @ 0000018e72a89cc0] nal_unit_type: [hevc @ 0000018e72a89cc0] Decoding PPS [hevc @ 0000018e72a89cc0] nal_unit_type: 39(SEI_P.. [hevc @ 0000018e72a89cc0] Decoding SEI [mp4 @ 0000018e72a8e240] All [mp4 @ 0000018e72a8e240] Afte [hevc @ 0000018e742f6b40] Decoded frame with POC .. detected 16 logical cores [Parsed_scale_0 @ 0000018e74382f40] Setting 'w' t.. [Parsed_scale_0 @ 0000018e74382f40] Setting 'h' t.. [Parsed_scale_1 @ 0000018e74382440] Setting 'w' t.. [mjpeg @ 0000018e743210c0] Forcing thread count t.. [mjpeg @ 0000018e743210c0] intra_quant_bias = 96 After ===== [hevc #0] nal_unit_type: [hevc #0] Decoding PPS [hevc #0] nal_unit_type: 39(SEI_P.. [hevc #0] Decoding SEI [mp4 #0] All info found [mp4 #0] After avformat_find_ [hevc #1] Decoded frame with POC 2. [Parsed_scale_0 #0] Setting 'w' t.. [Parsed_scale_0 #0] Setting 'h' t.. [Parsed_scale_1 #1] Setting 'w' t.. [mjpeg #2] Forcing thread count t.. [mjpeg #2] intra_quant_bias = 96 Versions ======== V2 == * Added log flag for optionally restoring the previous behavior (as requested by Gyan) V3 == * Externalize the prefix formatting with a prefix_format callback V4 == * Implement a custom logging callback function for fftools instead of the prefix formatting callback (as suggested by Hendrik Leppkes) V5 == * Remove unused var * Add missing include to fix build error on PPC (thanks, Michael) V6 == * No more changes to avutil involved * Let fftools have its own management of log level and flags (as figured to be most likely what Nicolas George was alluding to) softworkz (3): fftools: Add a local logging callback function fftools/opt_common: add memaddresses log flag doc/fftools-common-opts: document memaddresses log flag doc/fftools-common-opts.texi | 2 + fftools/Makefile | 7 +- fftools/cmdutils.c | 4 +- fftools/ffmpeg.c | 10 +- fftools/ffplay.c | 6 +- fftools/ffprobe.c | 4 +- fftools/fftools_log.c | 503 +++++++++++++++++++++++++++++++++++ fftools/fftools_log.h | 101 +++++++ fftools/opt_common.c | 47 ++-- 9 files changed, 655 insertions(+), 29 deletions(-) create mode 100644 fftools/fftools_log.c create mode 100644 fftools/fftools_log.h base-commit: 1bce40cb73fffd9d1fb6e118d71ac8999cded808 Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-59%2Fsoftworkz%2Fsubmit_logaddresses-v6 Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-59/softworkz/submit_logaddresses-v6 Pull-Request: https://github.com/ffstaging/FFmpeg/pull/59 Range-diff vs v5: 1: 4be966796c < -: ---------- avutil/log: Add AV_LOG_PRINT_MEMADDRESSES logging flag 2: e4f8213c24 < -: ---------- fftools/opt_common: add memaddresses log flag 3: ba20f5b116 ! 1: 8080f15800 fftools: Provide a an fftools-specific logging callback function @@ Metadata Author: softworkz <softworkz@hotmail.com> ## Commit message ## - fftools: Provide a an fftools-specific logging callback function + fftools: Add a local logging callback function - This goes together with a change to logging of context prefixes, which - is printing logical ids instead of memory addresses. - The benefits are: + This gets fftools its own management of log level and flags for and + provides an fftools-specific logging callback. + This makes it easier to implement specific logging behaviors which are + incompatible with direct use of the av libs and cannot be done in + libavutil. - - 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 + Signed-off-by: softworkz <softworkz@hotmail.com> ## fftools/Makefile ## @@ fftools/Makefile: OBJS-ffmpeg += \ @@ fftools/Makefile: OBJS-ffmpeg += \ define DOFFTOOL OBJS-$(1) += fftools/cmdutils.o fftools/opt_common.o fftools/$(1).o $(OBJS-$(1)-yes) + ## fftools/cmdutils.c ## +@@ + #include "libavutil/dict.h" + #include "libavutil/opt.h" + #include "cmdutils.h" ++#include "fftools_log.h" + #include "fopen_utf8.h" + #include "opt_common.h" + #ifdef _WIN32 +@@ fftools/cmdutils.c: int opt_default(void *optctx, const char *opt, const char *arg) + #endif + + if (!strcmp(opt, "debug") || !strcmp(opt, "fdebug")) +- av_log_set_level(AV_LOG_DEBUG); ++ ff_log_set_level(AV_LOG_DEBUG); + + if (!(p = strchr(opt, ':'))) + p = opt + strlen(opt); + ## fftools/ffmpeg.c ## @@ #include "ffmpeg.h" @@ fftools/ffmpeg.c const char program_name[] = "ffmpeg"; const int program_birth_year = 2000; +@@ fftools/ffmpeg.c: static void print_report(int is_last_report, int64_t timer_start, int64_t cur_ti + + if (print_stats || is_last_report) { + const char end = is_last_report ? '\n' : '\r'; +- if (print_stats==1 && AV_LOG_INFO > av_log_get_level()) { ++ if (print_stats==1 && AV_LOG_INFO > ff_log_get_level()) { + fprintf(stderr, "%s %c", buf.str, end); + } else + av_log(NULL, AV_LOG_INFO, "%s %c", buf.str, end); +@@ fftools/ffmpeg.c: static int check_keyboard_interaction(int64_t cur_time) + av_log(NULL, AV_LOG_INFO, "\n\n[q] command received. Exiting.\n\n"); + return AVERROR_EXIT; + } +- if (key == '+') av_log_set_level(av_log_get_level()+10); +- if (key == '-') av_log_set_level(av_log_get_level()-10); ++ if (key == '+') ff_log_set_level(ff_log_get_level()+10); ++ if (key == '-') ff_log_set_level(ff_log_get_level()-10); + if (key == 'c' || key == 'C'){ + char buf[4096], target[64], command[256], arg[256] = {0}; + double time; @@ fftools/ffmpeg.c: int main(int argc, char **argv) + setvbuf(stderr,NULL,_IONBF,0); /* win32 runtime needs this */ - av_log_set_flags(AV_LOG_SKIP_REPEATED); +- av_log_set_flags(AV_LOG_SKIP_REPEATED); ++ ff_log_set_flags(FF_LOG_SKIP_REPEATED); + init_logging(); parse_loglevel(argc, argv, options); #if CONFIG_AVDEVICE - ## fftools/ffmpeg_filter.c ## -@@ - /* -- * ffmpeg filter configuration -+ * Copyright (c) The FFmpeg developers - * - * This file is part of FFmpeg. - * - ## fftools/ffplay.c ## @@ #include "cmdutils.h" @@ fftools/ffplay.c const char program_name[] = "ffplay"; const int program_birth_year = 2003; +@@ fftools/ffplay.c: display: + vqsize / 1024, + sqsize); + +- if (show_status == 1 && AV_LOG_INFO > av_log_get_level()) ++ if (show_status == 1 && AV_LOG_INFO > ff_log_get_level()) + fprintf(stderr, "%s", buf.str); + else + av_log(NULL, AV_LOG_INFO, "%s", buf.str); @@ fftools/ffplay.c: int main(int argc, char **argv) + init_dynload(); - av_log_set_flags(AV_LOG_SKIP_REPEATED); +- av_log_set_flags(AV_LOG_SKIP_REPEATED); ++ ff_log_set_flags(FF_LOG_SKIP_REPEATED); + init_logging(); parse_loglevel(argc, argv, options); @@ fftools/ffprobe.c #include "libavutil/thread.h" @@ fftools/ffprobe.c: int main(int argc, char **argv) + init_dynload(); - av_log_set_flags(AV_LOG_SKIP_REPEATED); +- av_log_set_flags(AV_LOG_SKIP_REPEATED); ++ ff_log_set_flags(FF_LOG_SKIP_REPEATED); + init_logging(); options = real_options; @@ fftools/fftools_log.c (new) + +#include "libavutil/bprint.h" +#include "libavutil/common.h" -+//#include "libavutil/internal.h" +#include "libavutil/log.h" +#include "libavutil/thread.h" +#include "libavutil/time.h" -+//#include "libavutil/time_internal.h" + +#include "fftools_log.h" + + ++static int ff_log_level = AV_LOG_INFO; ++static int ff_log_flags; ++ ++ +#if !HAVE_LOCALTIME_R && !defined(localtime_r) +static inline struct tm *ff_localtime_r(const time_t* clock, struct tm *result) +{ @@ fftools/fftools_log.c (new) +#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 @@ fftools/fftools_log.c (new) + } +} + -+static void log_formatprefix(AVBPrint* buffer, AVClass** avcl, int log_flags) -+{ -+ const int print_mem = log_flags & AV_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], int current_flags) ++ AVBPrint part[5], int *print_prefix, int type[2]) +{ + AVClass* avc = avcl ? *(AVClass **) avcl : NULL; + av_bprint_init(part+0, 0, AV_BPRINT_SIZE_AUTOMATIC); @@ fftools/fftools_log.c (new) + + 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) { -+ log_formatprefix(part, parent, current_flags); ++ av_bprintf(part+0, "[%s @ %p] ", ++ item_name(parent, *parent), parent); + if(type) type[0] = get_category(parent); + } + } -+ log_formatprefix(part, avcl, current_flags); -+ ++ av_bprintf(part+1, "[%s @ %p] ", ++ item_name(avcl, avc), avcl); + if(type) type[1] = get_category(avcl); + } + -+ if (*print_prefix && (level > AV_LOG_QUIET) && (current_flags & (AV_LOG_PRINT_TIME | AV_LOG_PRINT_DATETIME))) -+ format_date_now(&part[4], current_flags & AV_LOG_PRINT_DATETIME); ++ if (*print_prefix && (level > AV_LOG_QUIET) && (ff_log_flags & (FF_LOG_PRINT_TIME | FF_LOG_PRINT_DATETIME))) ++ format_date_now(&part[4], ff_log_flags & FF_LOG_PRINT_DATETIME); + -+ if (*print_prefix && (level > AV_LOG_QUIET) && (current_flags & AV_LOG_PRINT_LEVEL)) ++ if (*print_prefix && (level > AV_LOG_QUIET) && (ff_log_flags & FF_LOG_PRINT_LEVEL)) + av_bprintf(part+2, "[%s] ", get_level_str(level)); + + av_vbprintf(part+3, fmt, vl); @@ fftools/fftools_log.c (new) + static int is_atty; + int type[2]; + unsigned tint = 0; -+ int current_flags = 0; + + if (level >= 0) { + tint = level & 0xff00; + level &= 0xff; + } + -+ if (level > av_log_get_level()) ++ if (level > ff_log_level) + return; + -+ current_flags = av_log_get_flags(); + ff_mutex_lock(&mutex); + -+ format_line(ptr, level, fmt, vl, part, &print_prefix, type, current_flags); ++ format_line(ptr, level, fmt, vl, part, &print_prefix, type); + snprintf(line, sizeof(line), "%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str); + +#if HAVE_ISATTY @@ fftools/fftools_log.c (new) + is_atty = isatty(2) ? 1 : -1; +#endif + -+ if (print_prefix && (current_flags & AV_LOG_SKIP_REPEATED) && !strcmp(line, prev) && ++ if (print_prefix && (ff_log_flags & FF_LOG_SKIP_REPEATED) && !strcmp(line, prev) && + *line && line[strlen(line) - 1] != '\r'){ + count++; + if (is_atty == 1) @@ fftools/fftools_log.c (new) +{ + av_log_set_callback(&fftools_log_callback); +} ++ ++int ff_log_get_level(void) ++{ ++ return ff_log_level; ++} ++ ++void ff_log_set_level(int level) ++{ ++ ff_log_level = level; ++ ++ av_log_set_level(level); ++} ++ ++void ff_log_set_flags(int arg) ++{ ++ ff_log_flags = arg; ++} ++ ++int ff_log_get_flags(void) ++{ ++ return ff_log_flags; ++} ++ ## fftools/fftools_log.h (new) ## @@ @@ fftools/fftools_log.h (new) +void init_logging(void); + + ++/** ++ * Get the current log level ++ * ++ * @see lavu_log_constants ++ * ++ * @return Current log level ++ */ ++int ff_log_get_level(void); ++ ++/** ++ * Set the log level ++ * ++ * @see lavu_log_constants ++ * ++ * @param level Logging level ++ */ ++void ff_log_set_level(int level); ++ ++void ff_log_set_flags(int arg); ++ ++int ff_log_get_flags(void); ++ ++ ++/** ++ * Skip repeated messages, this requires the user app to use av_log() instead of ++ * (f)printf as the 2 would otherwise interfere and lead to ++ * "Last message repeated x times" messages below (f)printf messages with some ++ * bad luck. ++ * Also to receive the last, "last repeated" line if any, the user app must ++ * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end ++ */ ++#define FF_LOG_SKIP_REPEATED 1 ++ ++/** ++ * Include the log severity in messages originating from codecs. ++ * ++ * Results in messages such as: ++ * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts ++ */ ++#define FF_LOG_PRINT_LEVEL 2 ++ ++/** ++ * Include system time in log output. ++ */ ++#define FF_LOG_PRINT_TIME 4 ++ ++/** ++ * Include system date and time in log output. ++ */ ++#define FF_LOG_PRINT_DATETIME 8 ++ ++ +#endif /* FFTOOLS_FFTOOLS_LOG_H */ + + ## fftools/opt_common.c ## +@@ + #include "cmdutils.h" + #include "opt_common.h" + ++#include "fftools_log.h" + #include "libavutil/avassert.h" + #include "libavutil/avstring.h" + #include "libavutil/bprint.h" +@@ fftools/opt_common.c: int init_report(const char *env, FILE **file) + return AVERROR(ENOMEM); + } + +- prog_loglevel = av_log_get_level(); ++ prog_loglevel = ff_log_get_level(); + if (!envlevel) + report_file_level = FFMAX(report_file_level, prog_loglevel); + +@@ fftools/opt_common.c: int opt_loglevel(void *optctx, const char *opt, const char *arg) + }; + const char *token; + char *tail; +- int flags = av_log_get_flags(); +- int level = av_log_get_level(); ++ int flags = ff_log_get_flags(); ++ int level = ff_log_get_level(); + int cmd, i = 0; + + av_assert0(arg); +@@ fftools/opt_common.c: int opt_loglevel(void *optctx, const char *opt, const char *arg) + } + if (av_strstart(token, "repeat", &arg)) { + if (cmd == '-') { +- flags |= AV_LOG_SKIP_REPEATED; ++ flags |= FF_LOG_SKIP_REPEATED; + } else { +- flags &= ~AV_LOG_SKIP_REPEATED; ++ flags &= ~FF_LOG_SKIP_REPEATED; + } + } else if (av_strstart(token, "level", &arg)) { + if (cmd == '-') { +- flags &= ~AV_LOG_PRINT_LEVEL; ++ flags &= ~FF_LOG_PRINT_LEVEL; + } else { +- flags |= AV_LOG_PRINT_LEVEL; ++ flags |= FF_LOG_PRINT_LEVEL; + } + } else if (av_strstart(token, "time", &arg)) { + if (cmd == '-') { +- flags &= ~AV_LOG_PRINT_TIME; ++ flags &= ~FF_LOG_PRINT_TIME; + } else { +- flags |= AV_LOG_PRINT_TIME; ++ flags |= FF_LOG_PRINT_TIME; + } + } else if (av_strstart(token, "datetime", &arg)) { + if (cmd == '-') { +- flags &= ~AV_LOG_PRINT_DATETIME; ++ flags &= ~FF_LOG_PRINT_DATETIME; + } else { +- flags |= AV_LOG_PRINT_DATETIME; ++ flags |= FF_LOG_PRINT_DATETIME; + } + } else { + break; +@@ fftools/opt_common.c: int opt_loglevel(void *optctx, const char *opt, const char *arg) + } else if (*arg == '+') { + arg++; + } else if (!i) { +- flags = av_log_get_flags(); /* level value without prefix, reset flags */ ++ flags = ff_log_get_flags(); /* level value without prefix, reset flags */ + } + + for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++) { +@@ fftools/opt_common.c: int opt_loglevel(void *optctx, const char *opt, const char *arg) + } + + end: +- av_log_set_flags(flags); +- av_log_set_level(level); ++ ff_log_set_flags(flags); ++ ff_log_set_level(level); + return 0; + } + +@@ fftools/opt_common.c: int show_sources(void *optctx, const char *opt, const char *arg) + char *dev = NULL; + AVDictionary *opts = NULL; + int ret = 0; +- int error_level = av_log_get_level(); ++ int error_level = ff_log_get_level(); + +- av_log_set_level(AV_LOG_WARNING); ++ ff_log_set_level(AV_LOG_WARNING); + + if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0) + goto fail; +@@ fftools/opt_common.c: int show_sources(void *optctx, const char *opt, const char *arg) + fail: + av_dict_free(&opts); + av_free(dev); +- av_log_set_level(error_level); ++ ff_log_set_level(error_level); + return ret; + } + +@@ fftools/opt_common.c: int show_sinks(void *optctx, const char *opt, const char *arg) + char *dev = NULL; + AVDictionary *opts = NULL; + int ret = 0; +- int error_level = av_log_get_level(); ++ int error_level = ff_log_get_level(); + +- av_log_set_level(AV_LOG_WARNING); ++ ff_log_set_level(AV_LOG_WARNING); + + if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0) + goto fail; +@@ fftools/opt_common.c: int show_sinks(void *optctx, const char *opt, const char *arg) + fail: + av_dict_free(&opts); + av_free(dev); +- av_log_set_level(error_level); ++ ff_log_set_level(error_level); + return ret; + } + #endif /* CONFIG_AVDEVICE */ -: ---------- > 2: bab6b91549 fftools/opt_common: add memaddresses log flag 4: f689a432df = 3: ea2a970d23 doc/fftools-common-opts: document memaddresses log flag 5: 9429d11516 < -: ---------- Remove commented lines -- 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] " 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 ` ffmpegagent [this message] 2025-03-13 9:30 ` [FFmpeg-devel] [PATCH v6 1/3] fftools: Add a local logging callback function softworkz 2025-03-13 9:30 ` [FFmpeg-devel] [PATCH v6 2/3] fftools/opt_common: add memaddresses log flag softworkz 2025-03-13 9:30 ` [FFmpeg-devel] [PATCH v6 3/3] doc/fftools-common-opts: document " 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=pull.59.v6.ffstaging.FFmpeg.1741858241.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