summaryrefslogtreecommitdiff
path: root/ffmpeg.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-03-29 04:13:27 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-03-29 04:13:27 +0200
commite5c3b51cd1ba5167ac224c41b905928f1bd0eb8d (patch)
treec1af0585bf4e37774aa7968a92bb02c4bd4b3f35 /ffmpeg.c
parent8c2045c9795d4705fcbac068012d90ceb782f61e (diff)
ffmpeg: disable dr1 when frame sizes change.
dr1 seems to work fine with frame size changes but many filters cant handle it yet. Simply disabling it forces the alternative non dr1 code path which has been tested more completely and is known to handle frame size changes in a wider varity of cases. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r--ffmpeg.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 72189f1193..173d8305ac 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2174,10 +2174,13 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int
for(i=0;i<nb_output_streams;i++) {
OutputStream *ost = ost = &output_streams[i];
if(check_output_constraints(ist, ost) && ost->encoding_needed){
+ int changed = ist->st->codec->width != ost->input_video_filter->outputs[0]->w
+ || ist->st->codec->height != ost->input_video_filter->outputs[0]->h
+ || ist->st->codec->pix_fmt != ost->input_video_filter->outputs[0]->format;
if (!frame_sample_aspect->num)
*frame_sample_aspect = ist->st->sample_aspect_ratio;
decoded_frame->pts = ist->pts;
- if (ist->dr1 && decoded_frame->type==FF_BUFFER_TYPE_USER) {
+ if (ist->dr1 && decoded_frame->type==FF_BUFFER_TYPE_USER && !changed) {
FrameBuffer *buf = decoded_frame->opaque;
AVFilterBufferRef *fb = avfilter_get_video_buffer_ref_from_arrays(
decoded_frame->data, decoded_frame->linesize,