diff options
author | Wayne Zou <b36644@freescale.com> | 2012-06-21 13:56:32 +0800 |
---|---|---|
committer | Wayne Zou <b36644@freescale.com> | 2012-06-21 14:12:26 +0800 |
commit | b196f669c86d2cc9bb97223d8d9d56cb48c752ba (patch) | |
tree | 6c80b276241d3356362e1647fc93e287ef48f1a2 /drivers | |
parent | a01cec6186bd2324586e2d59325e5dd526553afe (diff) |
ENGR00182045-2 V4L2 output: Fix bug: VDOA interlaced video can't play normally
Add VDOA tiled field format support for V4L2 output driver
Also add some debug information
Signed-off-by: Wayne Zou <b36644@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/mxc/output/mxc_vout.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/media/video/mxc/output/mxc_vout.c b/drivers/media/video/mxc/output/mxc_vout.c index 7832cf484dbf..cdf7eb785a64 100644 --- a/drivers/media/video/mxc/output/mxc_vout.c +++ b/drivers/media/video/mxc/output/mxc_vout.c @@ -34,9 +34,9 @@ #define VALID_HEIGHT_1080P (1080) #define FRAME_HEIGHT_1080P (1088) #define FRAME_WIDTH_1080P (1920) -#define MAX_INTERLACED_WIDTH (1024) #define CHECK_TILED_1080P_DISPLAY(vout) \ - (((vout)->task.input.format == IPU_PIX_FMT_TILED_NV12) && \ + ((((vout)->task.input.format == IPU_PIX_FMT_TILED_NV12) || \ + ((vout)->task.input.format == IPU_PIX_FMT_TILED_NV12F)) &&\ ((vout)->task.input.width == FRAME_WIDTH_1080P) && \ ((vout)->task.input.height == FRAME_HEIGHT_1080P) && \ ((vout)->task.input.crop.w == FRAME_WIDTH_1080P) && \ @@ -47,7 +47,8 @@ ((vout)->task.output.crop.w == FRAME_WIDTH_1080P) && \ ((vout)->task.output.crop.h == VALID_HEIGHT_1080P)) #define CHECK_TILED_1080P_STREAM(vout) \ - (((vout)->task.input.format == IPU_PIX_FMT_TILED_NV12) && \ + ((((vout)->task.input.format == IPU_PIX_FMT_TILED_NV12) || \ + ((vout)->task.input.format == IPU_PIX_FMT_TILED_NV12F)) &&\ ((vout)->task.input.width == FRAME_WIDTH_1080P) && \ ((vout)->task.input.crop.w == FRAME_WIDTH_1080P) && \ ((vout)->task.input.height == FRAME_HEIGHT_1080P) && \ @@ -585,6 +586,8 @@ static void disp_work_func(struct work_struct *work) tiled_interlaced = 1; vout->task.input.deinterlace.enable = 0; } + v4l2_dbg(1, debug, vout->vfd->v4l2_dev, + "tiled queue task\n"); } ret = ipu_queue_task(&vout->task); if ((!vout->tiled_bypass_pp) && tiled_fmt) @@ -1068,6 +1071,8 @@ static int mxc_vout_try_task(struct mxc_vout_output *vout) ) { /* IC bypass */ output->format = IPU_PIX_FMT_NV12; + v4l2_dbg(1, debug, vout->vfd->v4l2_dev, + "tiled bypass pp\n"); vout->tiled_bypass_pp = true; } tiled_fmt = true; @@ -1108,10 +1113,7 @@ static int mxc_vout_try_format(struct mxc_vout_output *vout, struct v4l2_format vout->task.input.format = f->fmt.pix.pixelformat; if (IPU_PIX_FMT_TILED_NV12F == vout->task.input.format) { - if ((vout->task.input.width > MAX_INTERLACED_WIDTH) || - (vout->task.input.deinterlace.motion == HIGH_MOTION)) - return -EINVAL; - v4l2_info(vout->vfd->v4l2_dev, + v4l2_dbg(1, debug, vout->vfd->v4l2_dev, "tiled fmt enable deinterlace.\n"); vout->task.input.deinterlace.enable = true; vout->task.input.deinterlace.field_fmt = |