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 |
Context | Check | Description |
---|---|---|
andriy/ffmpeg-patchwork | success | Make fate finished |
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
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 --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; } }