diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2015-06-28 16:35:46 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-06-28 16:35:46 +0200 |
commit | e964dcdb02a714f30c316025261ab1ffb61224f1 (patch) | |
tree | e44a8cc6c3b3c245137f6c99fb24826d553995c6 | |
parent | 45ab256e544b299c2e00350789bf51877d3c5cc6 (diff) |
avvidenc: Set AVFrame flags for interlacing per frame and not in set_format()
They will get overridden by av_frame_unref() with the defaults.
-rw-r--r-- | ext/libav/gstavvidenc.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c index 185f784..9dc154c 100644 --- a/ext/libav/gstavvidenc.c +++ b/ext/libav/gstavvidenc.c @@ -355,9 +355,6 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder, if (ffmpegenc->interlaced) { ffmpegenc->context->flags |= CODEC_FLAG_INTERLACED_DCT | CODEC_FLAG_INTERLACED_ME; - ffmpegenc->picture->interlaced_frame = TRUE; - /* if this is not the case, a filter element should be used to swap fields */ - ffmpegenc->picture->top_field_first = TRUE; } /* some other defaults */ @@ -608,6 +605,13 @@ gst_ffmpegvidenc_handle_frame (GstVideoEncoder * encoder, int have_data = 0; BufferInfo *buffer_info; + if (ffmpegenc->interlaced) { + ffmpegenc->picture->interlaced_frame = TRUE; + /* if this is not the case, a filter element should be used to swap fields */ + ffmpegenc->picture->top_field_first = + GST_BUFFER_FLAG_IS_SET (frame->input_buffer, GST_VIDEO_BUFFER_FLAG_TFF); + } + if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame)) ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I; @@ -684,10 +688,6 @@ gst_ffmpegvidenc_handle_frame (GstVideoEncoder * encoder, } else GST_WARNING_OBJECT (ffmpegenc, "codec did not provide keyframe info"); - /* Reset frame type */ - if (ffmpegenc->picture->pict_type) - ffmpegenc->picture->pict_type = 0; - return gst_video_encoder_finish_frame (encoder, frame); /* ERRORS */ |