[FFmpeg-devel] [PATCH] ffplay: Dont autoexeit by default on single images

Marton Balint cus at passwd.hu
Sun Sep 7 22:36:34 CEST 2014


On Sun, 7 Sep 2014, Michael Niedermayer wrote:

> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
> ffplay.c |    7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/ffplay.c b/ffplay.c
> index 06bccce..64ec058 100644
> --- a/ffplay.c
> +++ b/ffplay.c
> @@ -185,6 +185,7 @@ typedef struct VideoState {
>     int realtime;
>     int audio_finished;
>     int video_finished;
> +    int video_frames;
>
>     Clock audclk;
>     Clock vidclk;
> @@ -311,7 +312,7 @@ static int fast = 0;
> static int genpts = 0;
> static int lowres = 0;
> static int decoder_reorder_pts = -1;
> -static int autoexit = 1;
> +static int autoexit = -1;
> static int exit_on_keydown;
> static int exit_on_mousedown;
> static int loop = 1;
> @@ -1701,6 +1702,8 @@ static int get_video_frame(VideoState *is, AVFrame *frame, AVPacket *pkt, int *s
>         int ret = 1;
>         double dpts = NAN;
>
> +        is->video_frames ++;
> +
>         if (decoder_reorder_pts == -1) {
>             frame->pts = av_frame_get_best_effort_timestamp(frame);
>         } else if (decoder_reorder_pts) {
> @@ -2995,7 +2998,7 @@ static int read_thread(void *arg)
>             (!is->video_st || (is->video_finished == is->videoq.serial && pictq_nb_remaining(is) == 0))) {
>             if (loop != 1 && (!loop || --loop)) {
>                 stream_seek(is, start_time != AV_NOPTS_VALUE ? start_time : 0, 0, 0);
> -            } else if (autoexit) {
> +            } else if (autoexit == 1 || (autoexit == -1 && is->video_frames != 1)) {
>                 ret = AVERROR_EOF;
>                 goto fail;
>             }
> -- 
> 1.7.9.5

You should reset video_frames in get_video_frame on flush packet.

Other thing came to mind is that unless I am mistaken audio streams with 
an attachment picture will also keep ffplay running with this patch even 
after the end of the audio. Probably that is not what the user would 
expect, so maybe you should add an additional check to only keep 
ffplay running if there is no audio stream.

Regards,
Marton


More information about the ffmpeg-devel mailing list