summaryrefslogtreecommitdiff
path: root/ext/x264/gstx264enc.c
diff options
context:
space:
mode:
authorVivia Nikolaidou <vivia@ahiru.eu>2016-11-30 18:11:30 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-11-30 18:54:20 +0200
commitc40b40b36f460bd30d60e8df65436b89875326b1 (patch)
tree9aec07bdbf1dfbae481f0cc7d783d962b0888ed1 /ext/x264/gstx264enc.c
parentdae49907e274e2bd37d7e86aa7110cef8dea8372 (diff)
downloadgstreamer-plugins-ugly-c40b40b36f460bd30d60e8df65436b89875326b1.tar.gz
x264enc: Add information for mixed mode
https://bugzilla.gnome.org/show_bug.cgi?id=775411
Diffstat (limited to 'ext/x264/gstx264enc.c')
-rw-r--r--ext/x264/gstx264enc.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c
index 0c84b41b..f5d8f9f6 100644
--- a/ext/x264/gstx264enc.c
+++ b/ext/x264/gstx264enc.c
@@ -1824,6 +1824,9 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder)
if (GST_VIDEO_INFO_IS_INTERLACED (info)) {
encoder->x264param.b_interlaced = TRUE;
+ if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
+ encoder->x264param.b_pic_struct = TRUE;
+ }
if (GST_VIDEO_INFO_FIELD_ORDER (info) ==
GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST) {
encoder->x264param.b_tff = TRUE;
@@ -2361,6 +2364,24 @@ gst_x264_enc_handle_frame (GstVideoEncoder * video_enc,
pic_in.i_pts = frame->pts;
pic_in.opaque = GINT_TO_POINTER (frame->system_frame_number);
+ if (GST_VIDEO_INFO_INTERLACE_MODE (info) == GST_VIDEO_INTERLACE_MODE_MIXED) {
+ if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_INTERLACED) == 0) {
+ pic_in.i_pic_struct = PIC_STRUCT_PROGRESSIVE;
+ } else if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_RFF) != 0) {
+ if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
+ pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM_TOP;
+ } else {
+ pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP_BOTTOM;
+ }
+ } else {
+ if ((fdata->vframe.flags & GST_VIDEO_FRAME_FLAG_TFF) != 0) {
+ pic_in.i_pic_struct = PIC_STRUCT_TOP_BOTTOM;
+ } else {
+ pic_in.i_pic_struct = PIC_STRUCT_BOTTOM_TOP;
+ }
+ }
+ }
+
ret = gst_x264_enc_encode_frame (encoder, &pic_in, frame, &i_nal, TRUE);
/* input buffer is released later on */