mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-05 18:22:23 +00:00
avvidenc: Set AVFrame flags for interlacing per frame and not in set_format()
They will get overridden by av_frame_unref() with the defaults.
This commit is contained in:
parent
45ab256e54
commit
e964dcdb02
1 changed files with 7 additions and 7 deletions
|
@ -355,9 +355,6 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
|
||||||
if (ffmpegenc->interlaced) {
|
if (ffmpegenc->interlaced) {
|
||||||
ffmpegenc->context->flags |=
|
ffmpegenc->context->flags |=
|
||||||
CODEC_FLAG_INTERLACED_DCT | CODEC_FLAG_INTERLACED_ME;
|
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 */
|
/* some other defaults */
|
||||||
|
@ -608,6 +605,13 @@ gst_ffmpegvidenc_handle_frame (GstVideoEncoder * encoder,
|
||||||
int have_data = 0;
|
int have_data = 0;
|
||||||
BufferInfo *buffer_info;
|
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))
|
if (GST_VIDEO_CODEC_FRAME_IS_FORCE_KEYFRAME (frame))
|
||||||
ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I;
|
ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I;
|
||||||
|
|
||||||
|
@ -684,10 +688,6 @@ gst_ffmpegvidenc_handle_frame (GstVideoEncoder * encoder,
|
||||||
} else
|
} else
|
||||||
GST_WARNING_OBJECT (ffmpegenc, "codec did not provide keyframe info");
|
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);
|
return gst_video_encoder_finish_frame (encoder, frame);
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
|
|
Loading…
Reference in a new issue