ENGR00116028 CROP for TVE 720P

Crop support for outgoing picture to TVE in 720P format

    Signed-off-by: Mark.Gutman@freescale.com>
This commit is contained in:
mark gutman
2009-11-22 16:30:55 +02:00
committed by Matt Sealey
parent 05c22fb06c
commit 654bf8e2a2
2 changed files with 49 additions and 30 deletions

View File

@@ -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,

View File

@@ -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: