summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authormark gutman <r58412@freescale.com>2009-11-22 16:30:55 +0200
committerJustin Waters <justin.waters@timesys.com>2010-03-25 14:01:15 -0400
commit614ff3fa950a2e49048b28615b9cad5b94833148 (patch)
treee2eec1606352b71daf20f866bb93dc0d0fa3c416 /drivers
parent97945a3ae7c980255da373847936f3ede10aaecd (diff)
ENGR00116028 CROP for TVE 720P
Crop support for outgoing picture to TVE in 720P format Signed-off-by: Mark.Gutman@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/video/mxc/output/mxc_v4l2_output.c4
-rw-r--r--drivers/mxc/ipu3/ipu_param_mem.h75
2 files changed, 49 insertions, 30 deletions
diff --git a/drivers/media/video/mxc/output/mxc_v4l2_output.c b/drivers/media/video/mxc/output/mxc_v4l2_output.c
index 653b596b92a1..346348e285c1 100644
--- a/drivers/media/video/mxc/output/mxc_v4l2_output.c
+++ b/drivers/media/video/mxc/output/mxc_v4l2_output.c
@@ -455,7 +455,7 @@ static void mxc_v4l2out_timer_handler(unsigned long arg)
vout->v2f.fmt.pix.pixelformat,
vout->v2f.fmt.pix.width,
vout->v2f.fmt.pix.height,
- vout->v2f.fmt.pix.width,
+ vout->bytesperline,
vout->offset.u_offset,
vout->offset.v_offset,
0,
@@ -531,7 +531,7 @@ static irqreturn_t mxc_v4l2out_pp_in_irq_handler(int irq, void *dev_id)
vout->v2f.fmt.pix.pixelformat,
vout->v2f.fmt.pix.width,
vout->v2f.fmt.pix.height,
- vout->v2f.fmt.pix.width,
+ vout->bytesperline,
vout->offset.u_offset,
vout->offset.v_offset,
0,
diff --git a/drivers/mxc/ipu3/ipu_param_mem.h b/drivers/mxc/ipu3/ipu_param_mem.h
index dd30cb38c207..9a56fd818d7b 100644
--- a/drivers/mxc/ipu3/ipu_param_mem.h
+++ b/drivers/mxc/ipu3/ipu_param_mem.h
@@ -424,49 +424,68 @@ static inline void _ipu_ch_offset_update(int ch,
if (uv_stride < stride / 2)
uv_stride = stride / 2;
- u_fix = u + (uv_stride * vertical_offset / 2) + horizontal_offset / 4;
- v_fix = v + (uv_stride * vertical_offset / 2) + horizontal_offset / 4;
- u_offset = (u == 0) ? stride * (height - vertical_offset - 1) +
- (stride - horizontal_offset) +
- (uv_stride * vertical_offset / 2) +
- horizontal_offset / 2 : u_fix;
- v_offset = (v == 0) ? u_offset + (uv_stride * height / 2) : v_fix;
+ u_offset = stride * (height - vertical_offset - 1) +
+ (stride - horizontal_offset) +
+ (uv_stride * vertical_offset / 2) +
+ horizontal_offset / 2;
+ v_offset = u_offset + (uv_stride * height / 2);
+ u_fix = u ? (u + (uv_stride * vertical_offset) +
+ (horizontal_offset / 2) -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ u_offset;
+ v_fix = v ? (v + (uv_stride * vertical_offset / 2) +
+ (horizontal_offset / 2) -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ v_offset;
break;
case IPU_PIX_FMT_YVU422P:
if (uv_stride < stride / 2)
uv_stride = stride / 2;
- u_fix = u + (uv_stride * vertical_offset) + horizontal_offset / 2;
- v_fix = v + (uv_stride * vertical_offset) + horizontal_offset / 2;
-
- v_offset = (v == 0) ? stride * (height - vertical_offset - 1) +
- (stride - horizontal_offset) +
- (uv_stride * vertical_offset) +
- horizontal_offset / 2 : v_fix;
- u_offset = (u == 0) ? v_offset + uv_stride * height : u_fix;
+ v_offset = stride * (height - vertical_offset - 1) +
+ (stride - horizontal_offset) +
+ (uv_stride * vertical_offset) +
+ horizontal_offset / 2;
+ u_offset = v_offset + uv_stride * height;
+ u_fix = u ? (u + (uv_stride * vertical_offset) +
+ horizontal_offset / 2 -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ u_offset;
+ v_fix = v ? (v + (uv_stride * vertical_offset) +
+ horizontal_offset / 2 -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ v_offset;
break;
case IPU_PIX_FMT_YUV422P:
if (uv_stride < stride / 2)
uv_stride = stride / 2;
- u_fix = u + (uv_stride * vertical_offset) + horizontal_offset / 2;
- v_fix = v + (uv_stride * vertical_offset) + horizontal_offset / 2;
-
- u_offset = (u == 0) ? stride * (height - vertical_offset - 1) +
- (stride - horizontal_offset) +
- (uv_stride * vertical_offset) +
- horizontal_offset / 2 : u_fix;
- v_offset = (v == 0) ? u_offset + uv_stride * height : v_fix;
+ u_offset = stride * (height - vertical_offset - 1) +
+ (stride - horizontal_offset) +
+ (uv_stride * vertical_offset) +
+ horizontal_offset / 2;
+ v_offset = u_offset + uv_stride * height;
+ u_fix = u ? (u + (uv_stride * vertical_offset) +
+ horizontal_offset / 2 -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ u_offset;
+ v_fix = v ? (v + (uv_stride * vertical_offset) +
+ horizontal_offset / 2 -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ v_offset;
break;
case IPU_PIX_FMT_NV12:
uv_stride = stride;
- u_fix = u + (uv_stride * vertical_offset) + horizontal_offset;
- u_offset = (u == 0) ? stride * (height - vertical_offset - 1) +
- (stride - horizontal_offset) +
- (uv_stride * vertical_offset) +
- horizontal_offset : u_fix;
+ u_offset = stride * (height - vertical_offset - 1) +
+ (stride - horizontal_offset) +
+ (uv_stride * vertical_offset) +
+ horizontal_offset;
+ u_fix = u ? (u + (uv_stride * vertical_offset) +
+ horizontal_offset -
+ (stride * vertical_offset) - (horizontal_offset)) :
+ u_offset;
break;
default: