diff mbox series

[FFmpeg-devel,v2] ffplay: always show stats at all log levels if requested by user

Message ID 20200403162601.848-1-ffmpeg@gyani.pro
State Accepted
Headers show
Series [FFmpeg-devel,v2] ffplay: always show stats at all log levels if requested by user | expand

Checks

Context Check Description
andriy/ffmpeg-patchwork success Make fate finished

Commit Message

Gyan Doshi April 3, 2020, 4:26 p.m. UTC
Since 3b491c5a500, stats would be hidden if loglevel was lower than
info, even if -stats was set.

Fixes #6962
---
 doc/ffplay.texi  |  5 +++--
 fftools/ffplay.c | 36 ++++++++++++++++++++++++------------
 2 files changed, 27 insertions(+), 14 deletions(-)

Comments

Marton Balint April 4, 2020, 9:19 a.m. UTC | #1
On Fri, 3 Apr 2020, Gyan Doshi wrote:

> Since 3b491c5a500, stats would be hidden if loglevel was lower than
> info, even if -stats was set.
>
> Fixes #6962
> ---
> doc/ffplay.texi  |  5 +++--
> fftools/ffplay.c | 36 ++++++++++++++++++++++++------------
> 2 files changed, 27 insertions(+), 14 deletions(-)
>
> diff --git a/doc/ffplay.texi b/doc/ffplay.texi
> index a487c0de8d..f3761bb12e 100644
> --- a/doc/ffplay.texi
> +++ b/doc/ffplay.texi
> @@ -133,8 +133,9 @@ This option has been deprecated in favor of private options, try -pixel_format.
> @item -stats
> Print several playback statistics, in particular show the stream
> duration, the codec parameters, the current position in the stream and
> -the audio/video synchronisation drift. It is on by default, to
> -explicitly disable it you need to specify @code{-nostats}.
> +the audio/video synchronisation drift. It is shown by default, unless the
> +log level is lower than @code{info}. Its display can be forced by manually
> +specifying this option. To disable it, you need to specify @code{-nostats}.
> 
> @item -fast
> Non-spec-compliant optimizations.
> diff --git a/fftools/ffplay.c b/fftools/ffplay.c
> index 2ed4b22d3e..416ebbf7df 100644
> --- a/fftools/ffplay.c
> +++ b/fftools/ffplay.c
> @@ -40,6 +40,7 @@
> #include "libavutil/samplefmt.h"
> #include "libavutil/avassert.h"
> #include "libavutil/time.h"
> +#include "libavutil/bprint.h"
> #include "libavformat/avformat.h"
> #include "libavdevice/avdevice.h"
> #include "libswscale/swscale.h"
> @@ -326,7 +327,7 @@ static int display_disable;
> static int borderless;
> static int alwaysontop;
> static int startup_volume = 100;
> -static int show_status = 1;
> +static int show_status = -1;
> static int av_sync_type = AV_SYNC_AUDIO_MASTER;
> static int64_t start_time = AV_NOPTS_VALUE;
> static int64_t duration = AV_NOPTS_VALUE;
> @@ -1692,6 +1693,7 @@ display:
>     }
>     is->force_refresh = 0;
>     if (show_status) {
> +        AVBPrint buf;
>         static int64_t last_time;
>         int64_t cur_time;
>         int aqsize, vqsize, sqsize;
> @@ -1715,18 +1717,28 @@ display:
>                 av_diff = get_master_clock(is) - get_clock(&is->vidclk);
>             else if (is->audio_st)
>                 av_diff = get_master_clock(is) - get_clock(&is->audclk);
> -            av_log(NULL, AV_LOG_INFO,
> -                   "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64"/%"PRId64"   \r",
> -                   get_master_clock(is),
> -                   (is->audio_st && is->video_st) ? "A-V" : (is->video_st ? "M-V" : (is->audio_st ? "M-A" : "   ")),
> -                   av_diff,
> -                   is->frame_drops_early + is->frame_drops_late,
> -                   aqsize / 1024,
> -                   vqsize / 1024,
> -                   sqsize,
> -                   is->video_st ? is->viddec.avctx->pts_correction_num_faulty_dts : 0,
> -                   is->video_st ? is->viddec.avctx->pts_correction_num_faulty_pts : 0);
> +
> +            av_bprint_init(&buf, 0, AV_BPRINT_SIZE_AUTOMATIC);
> +            av_bprintf(&buf,
> +                      "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64"/%"PRId64"   \r",
> +                      get_master_clock(is),
> +                      (is->audio_st && is->video_st) ? "A-V" : (is->video_st ? "M-V" : (is->audio_st ? "M-A" : "   ")),
> +                      av_diff,
> +                      is->frame_drops_early + is->frame_drops_late,
> +                      aqsize / 1024,
> +                      vqsize / 1024,
> +                      sqsize,
> +                      is->video_st ? is->viddec.avctx->pts_correction_num_faulty_dts : 0,
> +                      is->video_st ? is->viddec.avctx->pts_correction_num_faulty_pts : 0);
> +
> +            if (show_status == 1 && AV_LOG_INFO > av_log_get_level())
> +                fprintf(stderr, "%s", buf.str);
> +            else
> +                av_log(NULL, AV_LOG_INFO, "%s", buf.str);
> +
>             fflush(stdout);
> +            av_bprint_finalize(&buf, NULL);
> +
>             last_time = cur_time;
>         }
>     }

LGTM, thanks.

Marton
Gyan Doshi April 4, 2020, 9:48 a.m. UTC | #2
On 04-04-2020 02:49 pm, Marton Balint wrote:
>
>
> On Fri, 3 Apr 2020, Gyan Doshi wrote:
>
>> Since 3b491c5a500, stats would be hidden if loglevel was lower than
>> info, even if -stats was set.
>>
>> Fixes #6962
>> ---
>> doc/ffplay.texi  |  5 +++--
>> fftools/ffplay.c | 36 ++++++++++++++++++++++++------------
>> 2 files changed, 27 insertions(+), 14 deletions(-)
>>
>> diff --git a/doc/ffplay.texi b/doc/ffplay.texi
>> index a487c0de8d..f3761bb12e 100644
>> --- a/doc/ffplay.texi
>> +++ b/doc/ffplay.texi
>> @@ -133,8 +133,9 @@ This option has been deprecated in favor of 
>> private options, try -pixel_format.
>> @item -stats
>> Print several playback statistics, in particular show the stream
>> duration, the codec parameters, the current position in the stream and
>> -the audio/video synchronisation drift. It is on by default, to
>> -explicitly disable it you need to specify @code{-nostats}.
>> +the audio/video synchronisation drift. It is shown by default, 
>> unless the
>> +log level is lower than @code{info}. Its display can be forced by 
>> manually
>> +specifying this option. To disable it, you need to specify 
>> @code{-nostats}.
>>
>> @item -fast
>> Non-spec-compliant optimizations.
>> diff --git a/fftools/ffplay.c b/fftools/ffplay.c
>> index 2ed4b22d3e..416ebbf7df 100644
>> --- a/fftools/ffplay.c
>> +++ b/fftools/ffplay.c
>> @@ -40,6 +40,7 @@
>> #include "libavutil/samplefmt.h"
>> #include "libavutil/avassert.h"
>> #include "libavutil/time.h"
>> +#include "libavutil/bprint.h"
>> #include "libavformat/avformat.h"
>> #include "libavdevice/avdevice.h"
>> #include "libswscale/swscale.h"
>> @@ -326,7 +327,7 @@ static int display_disable;
>> static int borderless;
>> static int alwaysontop;
>> static int startup_volume = 100;
>> -static int show_status = 1;
>> +static int show_status = -1;
>> static int av_sync_type = AV_SYNC_AUDIO_MASTER;
>> static int64_t start_time = AV_NOPTS_VALUE;
>> static int64_t duration = AV_NOPTS_VALUE;
>> @@ -1692,6 +1693,7 @@ display:
>>     }
>>     is->force_refresh = 0;
>>     if (show_status) {
>> +        AVBPrint buf;
>>         static int64_t last_time;
>>         int64_t cur_time;
>>         int aqsize, vqsize, sqsize;
>> @@ -1715,18 +1717,28 @@ display:
>>                 av_diff = get_master_clock(is) - get_clock(&is->vidclk);
>>             else if (is->audio_st)
>>                 av_diff = get_master_clock(is) - get_clock(&is->audclk);
>> -            av_log(NULL, AV_LOG_INFO,
>> -                   "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB 
>> f=%"PRId64"/%"PRId64"   \r",
>> -                   get_master_clock(is),
>> -                   (is->audio_st && is->video_st) ? "A-V" : 
>> (is->video_st ? "M-V" : (is->audio_st ? "M-A" : "   ")),
>> -                   av_diff,
>> -                   is->frame_drops_early + is->frame_drops_late,
>> -                   aqsize / 1024,
>> -                   vqsize / 1024,
>> -                   sqsize,
>> -                   is->video_st ? 
>> is->viddec.avctx->pts_correction_num_faulty_dts : 0,
>> -                   is->video_st ? 
>> is->viddec.avctx->pts_correction_num_faulty_pts : 0);
>> +
>> +            av_bprint_init(&buf, 0, AV_BPRINT_SIZE_AUTOMATIC);
>> +            av_bprintf(&buf,
>> +                      "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB 
>> sq=%5dB f=%"PRId64"/%"PRId64"   \r",
>> +                      get_master_clock(is),
>> +                      (is->audio_st && is->video_st) ? "A-V" : 
>> (is->video_st ? "M-V" : (is->audio_st ? "M-A" : "   ")),
>> +                      av_diff,
>> +                      is->frame_drops_early + is->frame_drops_late,
>> +                      aqsize / 1024,
>> +                      vqsize / 1024,
>> +                      sqsize,
>> +                      is->video_st ? 
>> is->viddec.avctx->pts_correction_num_faulty_dts : 0,
>> +                      is->video_st ? 
>> is->viddec.avctx->pts_correction_num_faulty_pts : 0);
>> +
>> +            if (show_status == 1 && AV_LOG_INFO > av_log_get_level())
>> +                fprintf(stderr, "%s", buf.str);
>> +            else
>> +                av_log(NULL, AV_LOG_INFO, "%s", buf.str);
>> +
>>             fflush(stdout);
>> +            av_bprint_finalize(&buf, NULL);
>> +
>>             last_time = cur_time;
>>         }
>>     }
>
> LGTM, thanks.

Thanks. Pushed as 2d6a89872ea2e20a3464be825d683d6f91d67c62

Gyan
diff mbox series

Patch

diff --git a/doc/ffplay.texi b/doc/ffplay.texi
index a487c0de8d..f3761bb12e 100644
--- a/doc/ffplay.texi
+++ b/doc/ffplay.texi
@@ -133,8 +133,9 @@  This option has been deprecated in favor of private options, try -pixel_format.
 @item -stats
 Print several playback statistics, in particular show the stream
 duration, the codec parameters, the current position in the stream and
-the audio/video synchronisation drift. It is on by default, to
-explicitly disable it you need to specify @code{-nostats}.
+the audio/video synchronisation drift. It is shown by default, unless the
+log level is lower than @code{info}. Its display can be forced by manually
+specifying this option. To disable it, you need to specify @code{-nostats}.
 
 @item -fast
 Non-spec-compliant optimizations.
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 2ed4b22d3e..416ebbf7df 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -40,6 +40,7 @@ 
 #include "libavutil/samplefmt.h"
 #include "libavutil/avassert.h"
 #include "libavutil/time.h"
+#include "libavutil/bprint.h"
 #include "libavformat/avformat.h"
 #include "libavdevice/avdevice.h"
 #include "libswscale/swscale.h"
@@ -326,7 +327,7 @@  static int display_disable;
 static int borderless;
 static int alwaysontop;
 static int startup_volume = 100;
-static int show_status = 1;
+static int show_status = -1;
 static int av_sync_type = AV_SYNC_AUDIO_MASTER;
 static int64_t start_time = AV_NOPTS_VALUE;
 static int64_t duration = AV_NOPTS_VALUE;
@@ -1692,6 +1693,7 @@  display:
     }
     is->force_refresh = 0;
     if (show_status) {
+        AVBPrint buf;
         static int64_t last_time;
         int64_t cur_time;
         int aqsize, vqsize, sqsize;
@@ -1715,18 +1717,28 @@  display:
                 av_diff = get_master_clock(is) - get_clock(&is->vidclk);
             else if (is->audio_st)
                 av_diff = get_master_clock(is) - get_clock(&is->audclk);
-            av_log(NULL, AV_LOG_INFO,
-                   "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64"/%"PRId64"   \r",
-                   get_master_clock(is),
-                   (is->audio_st && is->video_st) ? "A-V" : (is->video_st ? "M-V" : (is->audio_st ? "M-A" : "   ")),
-                   av_diff,
-                   is->frame_drops_early + is->frame_drops_late,
-                   aqsize / 1024,
-                   vqsize / 1024,
-                   sqsize,
-                   is->video_st ? is->viddec.avctx->pts_correction_num_faulty_dts : 0,
-                   is->video_st ? is->viddec.avctx->pts_correction_num_faulty_pts : 0);
+
+            av_bprint_init(&buf, 0, AV_BPRINT_SIZE_AUTOMATIC);
+            av_bprintf(&buf,
+                      "%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64"/%"PRId64"   \r",
+                      get_master_clock(is),
+                      (is->audio_st && is->video_st) ? "A-V" : (is->video_st ? "M-V" : (is->audio_st ? "M-A" : "   ")),
+                      av_diff,
+                      is->frame_drops_early + is->frame_drops_late,
+                      aqsize / 1024,
+                      vqsize / 1024,
+                      sqsize,
+                      is->video_st ? is->viddec.avctx->pts_correction_num_faulty_dts : 0,
+                      is->video_st ? is->viddec.avctx->pts_correction_num_faulty_pts : 0);
+
+            if (show_status == 1 && AV_LOG_INFO > av_log_get_level())
+                fprintf(stderr, "%s", buf.str);
+            else
+                av_log(NULL, AV_LOG_INFO, "%s", buf.str);
+
             fflush(stdout);
+            av_bprint_finalize(&buf, NULL);
+
             last_time = cur_time;
         }
     }