From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 79A6D43EA2 for ; Fri, 17 Feb 2023 00:16:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 369AE68BE3B; Fri, 17 Feb 2023 02:16:23 +0200 (EET) Received: from mail-yw1-f179.google.com (mail-yw1-f179.google.com [209.85.128.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C672968BD00 for ; Fri, 17 Feb 2023 02:16:16 +0200 (EET) Received: by mail-yw1-f179.google.com with SMTP id 00721157ae682-501c3a414acso49217637b3.7 for ; Thu, 16 Feb 2023 16:16:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=6l4HCP+Q9aYqgoU50o3QZiUbjcsfVgoEZldOU+wI2IQ=; b=l7u4gMfsGqVCZei4IG6WdyJa+Ts//Yz3tLodTqW4ZvTmxw4+75VOlPuv/zvE+01gxL 7HOPqstGf52IgrzVf3QkRte/BOnSEmWxUCbOA06QJoziRMMlzw6vqXuGBXjA8mNgJVxu ENHe1AdFkM/mQFR9JQK+5t5dEmbNIsP0UKaIk6Dk0gYPWGaK1GFduBH/sXxGNxrxXwGf +yXpJtbb2OFVWm6LB49zgDmqrO/o6UbN/G78p4KoU9IvhDlFCfliPrTqP36jWuS51c0l iGj8OvkGyvi0JE5l4jrFid8GWdLt2iyXtBcXVaQWw0ij0+1t1eFL/09eLjMMaviwxW5s Gi0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6l4HCP+Q9aYqgoU50o3QZiUbjcsfVgoEZldOU+wI2IQ=; b=251uvUdxrNbYwtetoAFoZ2c/YDkNhkQvP0b8vIxEsGf2XVoE4CBqnj+z4XdB+axJ07 fKUM3aVGL6bxnQr8iyK/b8APPiy3fFOG4aHuB3EDvkneVlxQoyFxqSJr0C+LHaRvLjbb pTlyh3lAJKGrNX47mLf4ZMzoAedubIko9+D+ccpKG71vXxgjf0Pyazc8u0UakQzzDuX0 5KFGUQLsp25lIJZXU+CTL/R8wf6jBwyIOh7puCY11iyO6U/uAT/GdwmA99r5Jm7pVxZc MjVhhVNkhAupiSuL5mDbRMPUBhHI1PBS6q/u+hkz5Mr0mOAk4A8iYB8PeOR/6tY/u35x 5CyQ== X-Gm-Message-State: AO0yUKUWmOGX1/Uj3hfu2em0Sv4ZMQzkQNRi5Q+sexjGfsFs/1KsHJCv DEh0EzyufEJbTkDzmYoBMaSmzYDIiD1SSOCxLPLN0EBQ9G8= X-Google-Smtp-Source: AK7set9aM6syutk4drrphn4vbFrMSWlaM9b2OB3nkr7lZPkVuv4E2qnO0o0mVGKSHrhYCNV7kYYSbN5m/dZJrELf8hU= X-Received: by 2002:a81:ac59:0:b0:52e:ec03:9b2f with SMTP id z25-20020a81ac59000000b0052eec039b2fmr14742ywj.8.1676592974929; Thu, 16 Feb 2023 16:16:14 -0800 (PST) MIME-Version: 1.0 References: <9135ef14-f767-095d-5ea6-40c9df9e0695@noa-archive.com> In-Reply-To: From: Prakash Date: Thu, 16 Feb 2023 16:16:04 -0800 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000b4560d05f4da38af" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH] libavutil/log: Support for logging timestamps in the log X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --000000000000b4560d05f4da38af Content-Type: text/plain; charset="UTF-8" Moved the timestamp to the front (before loglevel but after the prefix if present, so the timestamp has the same color as log line based on log level). Updated the patch and attached again. >From 04857a7bf0d4cf24a479e795a55a61ab2e2f618e Mon Sep 17 00:00:00 2001 From: Prakash Duggaraju Date: Thu, 16 Feb 2023 16:06:29 -0800 Subject: [PATCH] libavutil/log: Support for logging timestamps in the log. Add 'time' flag to the -loglevel option to turn on timestamp logging. Useful for troubleshooting where time is spent from the log files. Signed-off-by: Prakash Duggaraju --- doc/fftools-common-opts.texi | 4 ++++ fftools/opt_common.c | 6 ++++++ libavutil/log.c | 41 +++++++++++++++++++++++++----------- libavutil/log.h | 8 +++++++ 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/doc/fftools-common-opts.texi b/doc/fftools-common-opts.texi index d9145704d6..a3cf9eb57d 100644 --- a/doc/fftools-common-opts.texi +++ b/doc/fftools-common-opts.texi @@ -201,6 +201,10 @@ and the "Last message repeated n times" line will be omitted. Indicates that log output should add a @code{[level]} prefix to each message line. This can be used as an alternative to log coloring, e.g. when dumping the log to file. +@item time +Indicates that log output should add a @code{[time]} prefix to each message +line. The time is the relative time in microseconds precision. This can be +useful for troubleshooting where time is spent from the logs. @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 8a06df82df..a081ad6b08 100644 --- a/fftools/opt_common.c +++ b/fftools/opt_common.c @@ -1269,6 +1269,12 @@ int opt_loglevel(void *optctx, const char *opt, const char *arg) } else { flags |= AV_LOG_PRINT_LEVEL; } + } else if (av_strstart(token, "time", &arg)) { + if (cmd == '-') { + flags &= ~AV_LOG_PRINT_TIME; + } else { + flags |= AV_LOG_PRINT_TIME; + } } else { break; } diff --git a/libavutil/log.c b/libavutil/log.c index 5948e50467..7b892ddd1e 100644 --- a/libavutil/log.c +++ b/libavutil/log.c @@ -42,6 +42,7 @@ #include "internal.h" #include "log.h" #include "thread.h" +#include "time.h" static AVMutex mutex = AV_MUTEX_INITIALIZER; @@ -292,13 +293,14 @@ static const char *get_level_str(int level) } static void format_line(void *avcl, int level, const char *fmt, va_list vl, - AVBPrint part[4], int *print_prefix, int type[2]) + 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); av_bprint_init(part+1, 0, AV_BPRINT_SIZE_AUTOMATIC); av_bprint_init(part+2, 0, AV_BPRINT_SIZE_AUTOMATIC); - av_bprint_init(part+3, 0, 65536); + av_bprint_init(part+3, 0, AV_BPRINT_SIZE_AUTOMATIC); + av_bprint_init(part+4, 0, 65536); if(type) type[0] = type[1] = AV_CLASS_CATEGORY_NA + 16; if (*print_prefix && avc) { @@ -316,13 +318,26 @@ static void format_line(void *avcl, int level, const char *fmt, va_list vl, if(type) type[1] = get_category(avcl); } + if (*print_prefix && (level > AV_LOG_QUIET) && (flags & AV_LOG_PRINT_TIME)) { + int secs, mins; + int64_t hours; + int64_t time = av_gettime_relative(); + float millis = (time % 100000) / 1000.0f; + time /= 1000000; + secs = time % 60; + time /= 60; + mins = time % 60; + hours = time / 60; + av_bprintf(part+2, "[%ldh:%02dm:%02ds:%07.03fms] ", hours, mins, secs, millis); + } + if (*print_prefix && (level > AV_LOG_QUIET) && (flags & AV_LOG_PRINT_LEVEL)) - av_bprintf(part+2, "[%s] ", get_level_str(level)); + av_bprintf(part+3, "[%s] ", get_level_str(level)); - av_vbprintf(part+3, fmt, vl); + av_vbprintf(part+4, fmt, vl); - if(*part[0].str || *part[1].str || *part[2].str || *part[3].str) { - char lastc = part[3].len && part[3].len <= part[3].size ? part[3].str[part[3].len - 1] : 0; + if(*part[0].str || *part[1].str || *part[2].str || *part[3].str || *part[4].str) { + char lastc = part[4].len && part[4].len <= part[4].size ? part[4].str[part[4].len - 1] : 0; *print_prefix = lastc == '\n' || lastc == '\r'; } } @@ -336,12 +351,12 @@ void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, char *line, int line_size, int *print_prefix) { - AVBPrint part[4]; + AVBPrint part[5]; int ret; format_line(ptr, level, fmt, vl, part, print_prefix, NULL); - ret = snprintf(line, line_size, "%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str); - av_bprint_finalize(part+3, NULL); + ret = snprintf(line, line_size, "%s%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str, part[4].str); + av_bprint_finalize(part+4, NULL); return ret; } @@ -350,7 +365,7 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) static int print_prefix = 1; static int count; static char prev[LINE_SZ]; - AVBPrint part[4]; + AVBPrint part[5]; char line[LINE_SZ]; static int is_atty; int type[2]; @@ -366,7 +381,7 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) ff_mutex_lock(&mutex); 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); + snprintf(line, sizeof(line), "%s%s%s%s%s", part[0].str, part[1].str, part[2].str, part[3].str, part[4].str); #if HAVE_ISATTY if (!is_atty) @@ -393,13 +408,15 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) colored_fputs(av_clip(level >> 3, 0, NB_LEVELS - 1), tint >> 8, part[2].str); sanitize(part[3].str); colored_fputs(av_clip(level >> 3, 0, NB_LEVELS - 1), tint >> 8, part[3].str); + sanitize(part[4].str); + colored_fputs(av_clip(level >> 3, 0, NB_LEVELS - 1), tint >> 8, part[4].str); #if CONFIG_VALGRIND_BACKTRACE if (level <= BACKTRACE_LOGLEVEL) VALGRIND_PRINTF_BACKTRACE("%s", ""); #endif end: - av_bprint_finalize(part+3, NULL); + av_bprint_finalize(part+4, NULL); ff_mutex_unlock(&mutex); } diff --git a/libavutil/log.h b/libavutil/log.h index ab7ceabe22..2e2d83f6d0 100644 --- a/libavutil/log.h +++ b/libavutil/log.h @@ -377,6 +377,14 @@ int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl, */ #define AV_LOG_PRINT_LEVEL 2 +/** + * Include the system time with each log message. + * Useful for troubleshooting where the time was spent. + * Results in messages such as: + * [rawvideo @ 0xDEADBEEF] [01h:03m:05s:3.112ms] [error] encode did not produce valid pts + */ +#define AV_LOG_PRINT_TIME 4 + void av_log_set_flags(int arg); int av_log_get_flags(void); -- 2.34.1 On Thu, Jan 19, 2023 at 12:24 AM Tobias Rapp wrote: > On 19/01/2023 00:20, Prakash wrote: > > > The problem with int milliseconds is you lose the microseconds precision. > > Sometimes there are multiple log lines within the same millisecond. > > If you want to do performance profiling like comparing between assembler > and C versions of a routine in my opinion there are better ways to do > that than using log timestamps. But I also have nothing against adding > more positions after the decimal point, if you prefer that. > > The usecase I see for log timestamps is more to find out whether a > warning message appeared at the begin, middle, or end of the transcoding > process. > > > I can > > definitely move the timestamp as the first field of the log line. Let me > > fix the patch file. > > > > -Prakash. > > > Regards, Tobias > > _______________________________________________ > 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". > --000000000000b4560d05f4da38af Content-Type: text/plain; charset="US-ASCII"; name="0001-libavutil-log-Support-for-logging-timestamps-in-the-lo.txt" Content-Disposition: attachment; filename="0001-libavutil-log-Support-for-logging-timestamps-in-the-lo.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_le7rw3460 RnJvbSAwNDg1N2E3YmYwZDRjZjI0YTQ3OWU3OTVhNTVhNjFhYjJlMmY2MThlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQcmFrYXNoIER1Z2dhcmFqdSA8ZHVnZ2FyYWp1QGdtYWlsLmNv bT4KRGF0ZTogVGh1LCAxNiBGZWIgMjAyMyAxNjowNjoyOSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hd IGxpYmF2dXRpbC9sb2c6IFN1cHBvcnQgZm9yIGxvZ2dpbmcgdGltZXN0YW1wcyBpbiB0aGUgbG9n LiBBZGQKICd0aW1lJyBmbGFnIHRvIHRoZSAtbG9nbGV2ZWwgb3B0aW9uIHRvIHR1cm4gb24gdGlt ZXN0YW1wIGxvZ2dpbmcuIFVzZWZ1bCBmb3IKIHRyb3VibGVzaG9vdGluZyB3aGVyZSB0aW1lIGlz IHNwZW50IGZyb20gdGhlIGxvZyBmaWxlcy4KClNpZ25lZC1vZmYtYnk6IFByYWthc2ggRHVnZ2Fy YWp1IDxkdWdnYXJhanVAZ21haWwuY29tPgotLS0KIGRvYy9mZnRvb2xzLWNvbW1vbi1vcHRzLnRl eGkgfCAgNCArKysrCiBmZnRvb2xzL29wdF9jb21tb24uYyAgICAgICAgIHwgIDYgKysrKysrCiBs aWJhdnV0aWwvbG9nLmMgICAgICAgICAgICAgIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tCiBsaWJhdnV0aWwvbG9nLmggICAgICAgICAgICAgIHwgIDggKysrKysrKwog NCBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kb2MvZmZ0b29scy1jb21tb24tb3B0cy50ZXhpIGIvZG9jL2ZmdG9vbHMtY29tbW9u LW9wdHMudGV4aQppbmRleCBkOTE0NTcwNGQ2Li5hM2NmOWViNTdkIDEwMDY0NAotLS0gYS9kb2Mv ZmZ0b29scy1jb21tb24tb3B0cy50ZXhpCisrKyBiL2RvYy9mZnRvb2xzLWNvbW1vbi1vcHRzLnRl eGkKQEAgLTIwMSw2ICsyMDEsMTAgQEAgYW5kIHRoZSAiTGFzdCBtZXNzYWdlIHJlcGVhdGVkIG4g dGltZXMiIGxpbmUgd2lsbCBiZSBvbWl0dGVkLgogSW5kaWNhdGVzIHRoYXQgbG9nIG91dHB1dCBz aG91bGQgYWRkIGEgQGNvZGV7W2xldmVsXX0gcHJlZml4IHRvIGVhY2ggbWVzc2FnZQogbGluZS4g VGhpcyBjYW4gYmUgdXNlZCBhcyBhbiBhbHRlcm5hdGl2ZSB0byBsb2cgY29sb3JpbmcsIGUuZy4g d2hlbiBkdW1waW5nIHRoZQogbG9nIHRvIGZpbGUuCitAaXRlbSB0aW1lCitJbmRpY2F0ZXMgdGhh dCBsb2cgb3V0cHV0IHNob3VsZCBhZGQgYSBAY29kZXtbdGltZV19IHByZWZpeCB0byBlYWNoIG1l c3NhZ2UKK2xpbmUuIFRoZSB0aW1lIGlzIHRoZSByZWxhdGl2ZSB0aW1lIGluIG1pY3Jvc2Vjb25k cyBwcmVjaXNpb24uIFRoaXMgY2FuIGJlCit1c2VmdWwgZm9yIHRyb3VibGVzaG9vdGluZyB3aGVy ZSB0aW1lIGlzIHNwZW50IGZyb20gdGhlIGxvZ3MuCiBAZW5kIHRhYmxlCiBGbGFncyBjYW4gYWxz byBiZSB1c2VkIGFsb25lIGJ5IGFkZGluZyBhICcrJy8nLScgcHJlZml4IHRvIHNldC9yZXNldCBh IHNpbmdsZQogZmxhZyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBAdmFye2ZsYWdzfSBvciBjaGFu Z2luZyBAdmFye2xvZ2xldmVsfS4gV2hlbgpkaWZmIC0tZ2l0IGEvZmZ0b29scy9vcHRfY29tbW9u LmMgYi9mZnRvb2xzL29wdF9jb21tb24uYwppbmRleCA4YTA2ZGY4MmRmLi5hMDgxYWQ2YjA4IDEw MDY0NAotLS0gYS9mZnRvb2xzL29wdF9jb21tb24uYworKysgYi9mZnRvb2xzL29wdF9jb21tb24u YwpAQCAtMTI2OSw2ICsxMjY5LDEyIEBAIGludCBvcHRfbG9nbGV2ZWwodm9pZCAqb3B0Y3R4LCBj b25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKmFyZykKICAgICAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICAgICAgZmxhZ3MgfD0gQVZfTE9HX1BSSU5UX0xFVkVMOwogICAgICAgICAgICAg fQorICAgICAgICB9IGVsc2UgaWYgKGF2X3N0cnN0YXJ0KHRva2VuLCAidGltZSIsICZhcmcpKSB7 CisgICAgICAgICAgICBpZiAoY21kID09ICctJykgeworICAgICAgICAgICAgICAgIGZsYWdzICY9 IH5BVl9MT0dfUFJJTlRfVElNRTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgZmxhZ3MgfD0gQVZfTE9HX1BSSU5UX1RJTUU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbGliYXZ1 dGlsL2xvZy5jIGIvbGliYXZ1dGlsL2xvZy5jCmluZGV4IDU5NDhlNTA0NjcuLjdiODkyZGRkMWUg MTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9sb2cuYworKysgYi9saWJhdnV0aWwvbG9nLmMKQEAgLTQy LDYgKzQyLDcgQEAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgImxvZy5oIgogI2lu Y2x1ZGUgInRocmVhZC5oIgorI2luY2x1ZGUgInRpbWUuaCIKIAogc3RhdGljIEFWTXV0ZXggbXV0 ZXggPSBBVl9NVVRFWF9JTklUSUFMSVpFUjsKIApAQCAtMjkyLDEzICsyOTMsMTQgQEAgc3RhdGlj IGNvbnN0IGNoYXIgKmdldF9sZXZlbF9zdHIoaW50IGxldmVsKQogfQogCiBzdGF0aWMgdm9pZCBm b3JtYXRfbGluZSh2b2lkICphdmNsLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlz dCB2bCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEFWQlByaW50IHBhcnRbNF0sIGludCAqcHJp bnRfcHJlZml4LCBpbnQgdHlwZVsyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIEFWQlByaW50 IHBhcnRbNV0sIGludCAqcHJpbnRfcHJlZml4LCBpbnQgdHlwZVsyXSkKIHsKICAgICBBVkNsYXNz KiBhdmMgPSBhdmNsID8gKihBVkNsYXNzICoqKSBhdmNsIDogTlVMTDsKICAgICBhdl9icHJpbnRf aW5pdChwYXJ0KzAsIDAsIEFWX0JQUklOVF9TSVpFX0FVVE9NQVRJQyk7CiAgICAgYXZfYnByaW50 X2luaXQocGFydCsxLCAwLCBBVl9CUFJJTlRfU0laRV9BVVRPTUFUSUMpOwogICAgIGF2X2Jwcmlu dF9pbml0KHBhcnQrMiwgMCwgQVZfQlBSSU5UX1NJWkVfQVVUT01BVElDKTsKLSAgICBhdl9icHJp bnRfaW5pdChwYXJ0KzMsIDAsIDY1NTM2KTsKKyAgICBhdl9icHJpbnRfaW5pdChwYXJ0KzMsIDAs IEFWX0JQUklOVF9TSVpFX0FVVE9NQVRJQyk7CisgICAgYXZfYnByaW50X2luaXQocGFydCs0LCAw LCA2NTUzNik7CiAKICAgICBpZih0eXBlKSB0eXBlWzBdID0gdHlwZVsxXSA9IEFWX0NMQVNTX0NB VEVHT1JZX05BICsgMTY7CiAgICAgaWYgKCpwcmludF9wcmVmaXggJiYgYXZjKSB7CkBAIC0zMTYs MTMgKzMxOCwyNiBAQCBzdGF0aWMgdm9pZCBmb3JtYXRfbGluZSh2b2lkICphdmNsLCBpbnQgbGV2 ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCwKICAgICAgICAgaWYodHlwZSkgdHlwZVsx XSA9IGdldF9jYXRlZ29yeShhdmNsKTsKICAgICB9CiAKKyAgICBpZiAoKnByaW50X3ByZWZpeCAm JiAobGV2ZWwgPiBBVl9MT0dfUVVJRVQpICYmIChmbGFncyAmIEFWX0xPR19QUklOVF9USU1FKSkg eworICAgICAgICBpbnQgc2VjcywgbWluczsKKyAgICAgICAgaW50NjRfdCBob3VyczsKKyAgICAg ICAgaW50NjRfdCB0aW1lID0gYXZfZ2V0dGltZV9yZWxhdGl2ZSgpOworICAgICAgICBmbG9hdCBt aWxsaXMgPSAodGltZSAlIDEwMDAwMCkgLyAxMDAwLjBmOworICAgICAgICB0aW1lICAvPSAxMDAw MDAwOworICAgICAgICBzZWNzID0gdGltZSAlIDYwOworICAgICAgICB0aW1lIC89IDYwOworICAg ICAgICBtaW5zID0gdGltZSAlIDYwOworICAgICAgICBob3VycyA9IHRpbWUgLyA2MDsKKyAgICAg ICAgYXZfYnByaW50ZihwYXJ0KzIsICJbJWxkaDolMDJkbTolMDJkczolMDcuMDNmbXNdICIsIGhv dXJzLCBtaW5zLCBzZWNzLCBtaWxsaXMpOworICAgIH0KKwogICAgIGlmICgqcHJpbnRfcHJlZml4 ICYmIChsZXZlbCA+IEFWX0xPR19RVUlFVCkgJiYgKGZsYWdzICYgQVZfTE9HX1BSSU5UX0xFVkVM KSkKLSAgICAgICAgYXZfYnByaW50ZihwYXJ0KzIsICJbJXNdICIsIGdldF9sZXZlbF9zdHIobGV2 ZWwpKTsKKyAgICAgICAgYXZfYnByaW50ZihwYXJ0KzMsICJbJXNdICIsIGdldF9sZXZlbF9zdHIo bGV2ZWwpKTsKIAotICAgIGF2X3ZicHJpbnRmKHBhcnQrMywgZm10LCB2bCk7CisgICAgYXZfdmJw cmludGYocGFydCs0LCBmbXQsIHZsKTsKIAotICAgIGlmKCpwYXJ0WzBdLnN0ciB8fCAqcGFydFsx XS5zdHIgfHwgKnBhcnRbMl0uc3RyIHx8ICpwYXJ0WzNdLnN0cikgewotICAgICAgICBjaGFyIGxh c3RjID0gcGFydFszXS5sZW4gJiYgcGFydFszXS5sZW4gPD0gcGFydFszXS5zaXplID8gcGFydFsz XS5zdHJbcGFydFszXS5sZW4gLSAxXSA6IDA7CisgICAgaWYoKnBhcnRbMF0uc3RyIHx8ICpwYXJ0 WzFdLnN0ciB8fCAqcGFydFsyXS5zdHIgfHwgKnBhcnRbM10uc3RyIHx8ICpwYXJ0WzRdLnN0cikg eworICAgICAgICBjaGFyIGxhc3RjID0gcGFydFs0XS5sZW4gJiYgcGFydFs0XS5sZW4gPD0gcGFy dFs0XS5zaXplID8gcGFydFs0XS5zdHJbcGFydFs0XS5sZW4gLSAxXSA6IDA7CiAgICAgICAgICpw cmludF9wcmVmaXggPSBsYXN0YyA9PSAnXG4nIHx8IGxhc3RjID09ICdccic7CiAgICAgfQogfQpA QCAtMzM2LDEyICszNTEsMTIgQEAgdm9pZCBhdl9sb2dfZm9ybWF0X2xpbmUodm9pZCAqcHRyLCBp bnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCwKIGludCBhdl9sb2dfZm9ybWF0 X2xpbmUyKHZvaWQgKnB0ciwgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3Qgdmws CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lLCBpbnQgbGluZV9zaXplLCBpbnQg KnByaW50X3ByZWZpeCkKIHsKLSAgICBBVkJQcmludCBwYXJ0WzRdOworICAgIEFWQlByaW50IHBh cnRbNV07CiAgICAgaW50IHJldDsKIAogICAgIGZvcm1hdF9saW5lKHB0ciwgbGV2ZWwsIGZtdCwg dmwsIHBhcnQsIHByaW50X3ByZWZpeCwgTlVMTCk7Ci0gICAgcmV0ID0gc25wcmludGYobGluZSwg bGluZV9zaXplLCAiJXMlcyVzJXMiLCBwYXJ0WzBdLnN0ciwgcGFydFsxXS5zdHIsIHBhcnRbMl0u c3RyLCBwYXJ0WzNdLnN0cik7Ci0gICAgYXZfYnByaW50X2ZpbmFsaXplKHBhcnQrMywgTlVMTCk7 CisgICAgcmV0ID0gc25wcmludGYobGluZSwgbGluZV9zaXplLCAiJXMlcyVzJXMlcyIsIHBhcnRb MF0uc3RyLCBwYXJ0WzFdLnN0ciwgcGFydFsyXS5zdHIsIHBhcnRbM10uc3RyLCBwYXJ0WzRdLnN0 cik7CisgICAgYXZfYnByaW50X2ZpbmFsaXplKHBhcnQrNCwgTlVMTCk7CiAgICAgcmV0dXJuIHJl dDsKIH0KIApAQCAtMzUwLDcgKzM2NSw3IEBAIHZvaWQgYXZfbG9nX2RlZmF1bHRfY2FsbGJhY2so dm9pZCogcHRyLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCB2bCkKICAgICBz dGF0aWMgaW50IHByaW50X3ByZWZpeCA9IDE7CiAgICAgc3RhdGljIGludCBjb3VudDsKICAgICBz dGF0aWMgY2hhciBwcmV2W0xJTkVfU1pdOwotICAgIEFWQlByaW50IHBhcnRbNF07CisgICAgQVZC UHJpbnQgcGFydFs1XTsKICAgICBjaGFyIGxpbmVbTElORV9TWl07CiAgICAgc3RhdGljIGludCBp c19hdHR5OwogICAgIGludCB0eXBlWzJdOwpAQCAtMzY2LDcgKzM4MSw3IEBAIHZvaWQgYXZfbG9n X2RlZmF1bHRfY2FsbGJhY2sodm9pZCogcHRyLCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIqIGZtdCwg dmFfbGlzdCB2bCkKICAgICBmZl9tdXRleF9sb2NrKCZtdXRleCk7CiAKICAgICBmb3JtYXRfbGlu ZShwdHIsIGxldmVsLCBmbXQsIHZsLCBwYXJ0LCAmcHJpbnRfcHJlZml4LCB0eXBlKTsKLSAgICBz bnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICIlcyVzJXMlcyIsIHBhcnRbMF0uc3RyLCBwYXJ0 WzFdLnN0ciwgcGFydFsyXS5zdHIsIHBhcnRbM10uc3RyKTsKKyAgICBzbnByaW50ZihsaW5lLCBz aXplb2YobGluZSksICIlcyVzJXMlcyVzIiwgcGFydFswXS5zdHIsIHBhcnRbMV0uc3RyLCBwYXJ0 WzJdLnN0ciwgcGFydFszXS5zdHIsIHBhcnRbNF0uc3RyKTsKIAogI2lmIEhBVkVfSVNBVFRZCiAg ICAgaWYgKCFpc19hdHR5KQpAQCAtMzkzLDEzICs0MDgsMTUgQEAgdm9pZCBhdl9sb2dfZGVmYXVs dF9jYWxsYmFjayh2b2lkKiBwdHIsIGludCBsZXZlbCwgY29uc3QgY2hhciogZm10LCB2YV9saXN0 IHZsKQogICAgIGNvbG9yZWRfZnB1dHMoYXZfY2xpcChsZXZlbCA+PiAzLCAwLCBOQl9MRVZFTFMg LSAxKSwgdGludCA+PiA4LCBwYXJ0WzJdLnN0cik7CiAgICAgc2FuaXRpemUocGFydFszXS5zdHIp OwogICAgIGNvbG9yZWRfZnB1dHMoYXZfY2xpcChsZXZlbCA+PiAzLCAwLCBOQl9MRVZFTFMgLSAx KSwgdGludCA+PiA4LCBwYXJ0WzNdLnN0cik7CisgICAgc2FuaXRpemUocGFydFs0XS5zdHIpOwor ICAgIGNvbG9yZWRfZnB1dHMoYXZfY2xpcChsZXZlbCA+PiAzLCAwLCBOQl9MRVZFTFMgLSAxKSwg dGludCA+PiA4LCBwYXJ0WzRdLnN0cik7CiAKICNpZiBDT05GSUdfVkFMR1JJTkRfQkFDS1RSQUNF CiAgICAgaWYgKGxldmVsIDw9IEJBQ0tUUkFDRV9MT0dMRVZFTCkKICAgICAgICAgVkFMR1JJTkRf UFJJTlRGX0JBQ0tUUkFDRSgiJXMiLCAiIik7CiAjZW5kaWYKIGVuZDoKLSAgICBhdl9icHJpbnRf ZmluYWxpemUocGFydCszLCBOVUxMKTsKKyAgICBhdl9icHJpbnRfZmluYWxpemUocGFydCs0LCBO VUxMKTsKICAgICBmZl9tdXRleF91bmxvY2soJm11dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvbGli YXZ1dGlsL2xvZy5oIGIvbGliYXZ1dGlsL2xvZy5oCmluZGV4IGFiN2NlYWJlMjIuLjJlMmQ4M2Y2 ZDAgMTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9sb2cuaAorKysgYi9saWJhdnV0aWwvbG9nLmgKQEAg LTM3Nyw2ICszNzcsMTQgQEAgaW50IGF2X2xvZ19mb3JtYXRfbGluZTIodm9pZCAqcHRyLCBpbnQg bGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCwKICAqLwogI2RlZmluZSBBVl9MT0df UFJJTlRfTEVWRUwgMgogCisvKioKKyAqIEluY2x1ZGUgdGhlIHN5c3RlbSB0aW1lIHdpdGggZWFj aCBsb2cgbWVzc2FnZS4KKyAqIFVzZWZ1bCBmb3IgdHJvdWJsZXNob290aW5nIHdoZXJlIHRoZSB0 aW1lIHdhcyBzcGVudC4KKyAqIFJlc3VsdHMgaW4gbWVzc2FnZXMgc3VjaCBhczoKKyAqIFtyYXd2 aWRlbyBAIDB4REVBREJFRUZdIFswMWg6MDNtOjA1czozLjExMm1zXSBbZXJyb3JdIGVuY29kZSBk aWQgbm90IHByb2R1Y2UgdmFsaWQgcHRzCisgKi8KKyNkZWZpbmUgQVZfTE9HX1BSSU5UX1RJTUUg NAorCiB2b2lkIGF2X2xvZ19zZXRfZmxhZ3MoaW50IGFyZyk7CiBpbnQgYXZfbG9nX2dldF9mbGFn cyh2b2lkKTsKIAotLSAKMi4zNC4xCgo= --000000000000b4560d05f4da38af Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --000000000000b4560d05f4da38af--