diff options
author | Marton Balint <cus@passwd.hu> | 2012-06-08 00:16:49 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2012-06-30 16:19:47 +0200 |
commit | 58f22f70121c2c9f4bf9935d00c7ba7948fbe5c0 (patch) | |
tree | 8c72d5f01957265d7fe3e99df838bb50d31a1703 | |
parent | b12e61ac7f3f1fdf47e5a5083242d2ba4096a1da (diff) | |
download | ffmpeg-58f22f70121c2c9f4bf9935d00c7ba7948fbe5c0.tar.gz |
ffplay: only configure video filters after we got the first frame
Otherwise the codec width, height and pixel format values may not be set.
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r-- | ffplay.c | 33 |
1 files changed, 14 insertions, 19 deletions
@@ -1625,13 +1625,6 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c is->in_video_filter = filt_src; is->out_video_filter = filt_out; - if (codec->codec->capabilities & CODEC_CAP_DR1) { - is->use_dr1 = 1; - codec->get_buffer = codec_get_buffer; - codec->release_buffer = codec_release_buffer; - codec->opaque = &is->buffer_pool; - } - return ret; } @@ -1646,28 +1639,26 @@ static int video_thread(void *arg) int ret; #if CONFIG_AVFILTER + AVCodecContext *codec = is->video_st->codec; AVFilterGraph *graph = avfilter_graph_alloc(); AVFilterContext *filt_out = NULL, *filt_in = NULL; - int last_w = is->video_st->codec->width; - int last_h = is->video_st->codec->height; - enum PixelFormat last_format = is->video_st->codec->pix_fmt; + int last_w = 0; + int last_h = 0; + enum PixelFormat last_format = -2; - if ((ret = configure_video_filters(graph, is, vfilters)) < 0) { - SDL_Event event; - event.type = FF_QUIT_EVENT; - event.user.data1 = is; - SDL_PushEvent(&event); - goto the_end; + if (codec->codec->capabilities & CODEC_CAP_DR1) { + is->use_dr1 = 1; + codec->get_buffer = codec_get_buffer; + codec->release_buffer = codec_release_buffer; + codec->opaque = &is->buffer_pool; } - filt_in = is->in_video_filter; - filt_out = is->out_video_filter; #endif for (;;) { AVPacket pkt; #if CONFIG_AVFILTER AVFilterBufferRef *picref; - AVRational tb = filt_out->inputs[0]->time_base; + AVRational tb; #endif while (is->paused && !is->videoq.abort_request) SDL_Delay(10); @@ -1691,6 +1682,10 @@ static int video_thread(void *arg) avfilter_graph_free(&graph); graph = avfilter_graph_alloc(); if ((ret = configure_video_filters(graph, is, vfilters)) < 0) { + SDL_Event event; + event.type = FF_QUIT_EVENT; + event.user.data1 = is; + SDL_PushEvent(&event); av_free_packet(&pkt); goto the_end; } |