Merge "media: dvb: mpq: Add Support to use Deinterlacer"
diff --git a/drivers/media/dvb/mpq/video/mpq_dvb_video.c b/drivers/media/dvb/mpq/video/mpq_dvb_video.c
index 22d37e9..229a81a 100644
--- a/drivers/media/dvb/mpq/video/mpq_dvb_video.c
+++ b/drivers/media/dvb/mpq/video/mpq_dvb_video.c
@@ -53,6 +53,7 @@
"dvb-vid-3",
};
+static enum scan_format map_scan_type(enum vdec_interlaced_format type);
static int mpq_int_vid_dec_decode_frame(struct video_client_ctx *client_ctx,
struct video_data_buffer *input_frame);
static int mpq_int_vid_dec_get_buffer_req(struct video_client_ctx *client_ctx,
@@ -2120,6 +2121,8 @@
vdec_msg_info.msgdata.output_frame.time_stamp;
ev->u.buffer.offset =
vdec_msg_info.msgdata.output_frame.offset;
+ ev->u.buffer.interlaced_format = map_scan_type(vdec_msg_info.\
+ msgdata.output_frame.interlaced_format);
break;
case VDEC_MSG_RESP_START_DONE:
DBG("VIDEO_EVENT_DECODER_PLAYING\n");
@@ -2161,6 +2164,8 @@
vdec_msg_info.msgdata.output_frame.time_stamp;
ev->u.buffer.offset =
vdec_msg_info.msgdata.output_frame.offset;
+ ev->u.buffer.interlaced_format = map_scan_type(vdec_msg_info.\
+ msgdata.output_frame.interlaced_format);
break;
case VDEC_MSG_RESP_FLUSH_INPUT_DONE:
DBG("VIDEO_EVENT_INPUT_FLUSH_DONE\n");
@@ -2176,6 +2181,17 @@
return 0;
}
+static enum scan_format map_scan_type(enum vdec_interlaced_format type)
+{
+ if (type == VDEC_InterlaceFrameProgressive)
+ return INTERLACE_FRAME_PROGRESSIVE;
+ if (type == VDEC_InterlaceInterleaveFrameTopFieldFirst)
+ return INTERLACE_INTERLEAVE_FRAME_TOP_FIELD_FIRST;
+ if (type == VDEC_InterlaceInterleaveFrameBottomFieldFirst)
+ return INTERLACE_INTERLEAVE_FRAME_BOTTOM_FIELD_FIRST;
+ return INTERLACE_FRAME_PROGRESSIVE;
+}
+
static int mpq_dvb_video_play(struct mpq_dvb_video_inst *dev_inst)
{
return mpq_int_vid_dec_start_stop(dev_inst->client_ctx, true);
diff --git a/include/linux/dvb/video.h b/include/linux/dvb/video.h
index 2a2a53d..6c42099 100644
--- a/include/linux/dvb/video.h
+++ b/include/linux/dvb/video.h
@@ -151,6 +151,12 @@
struct video_buffer_prop output_buf_prop; /* Output Buffer Prop */
};
+enum scan_format {
+ INTERLACE_FRAME_PROGRESSIVE,
+ INTERLACE_INTERLEAVE_FRAME_TOP_FIELD_FIRST,
+ INTERLACE_INTERLEAVE_FRAME_BOTTOM_FIELD_FIRST
+};
+
/* Video Data Buffer Structure for Input and Output */
struct video_data_buffer {
void __user *bufferaddr; /* Pointer to Buffer */
@@ -161,6 +167,7 @@
void *client_data;
void *ip_buffer_tag;
__u64 pts;
+ enum scan_format interlaced_format;
};
struct video_h264_mv {