diff options
author | Trent Piepho <xyzzy@speakeasy.org> | 2009-05-30 17:45:46 -0700 |
---|---|---|
committer | Trent Piepho <xyzzy@speakeasy.org> | 2009-05-30 17:45:46 -0700 |
commit | 9b58b19cf0eba5a8a77bbbd58df57194a5688a80 (patch) | |
tree | 03f7bc9ccf4c281b8ea057b370a408f092657bf7 /linux/drivers/media | |
parent | 51c04c87bb11afe772c5cf797a12c71c602cff8c (diff) | |
download | mediapointer-dvb-s2-9b58b19cf0eba5a8a77bbbd58df57194a5688a80.tar.gz mediapointer-dvb-s2-9b58b19cf0eba5a8a77bbbd58df57194a5688a80.tar.bz2 |
pxa-camera: Use v4l bounding/alignment function
From: Trent Piepho <xyzzy@speakeasy.org>
The v4l function has a better algorithm for aligning image size.
For instance the old code would change 159x243 into 156x240 to meet the
alignment requirements. The new function will use 160x243, which is a lot
closer to what was asked for originally.
Priority: normal
Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
CC: Robert Jarzmik <robert.jarzmik@free.fr>
CC: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Diffstat (limited to 'linux/drivers/media')
-rw-r--r-- | linux/drivers/media/video/pxa_camera.c | 36 |
1 files changed, 7 insertions, 29 deletions
diff --git a/linux/drivers/media/video/pxa_camera.c b/linux/drivers/media/video/pxa_camera.c index 35642c430..2c122ec90 100644 --- a/linux/drivers/media/video/pxa_camera.c +++ b/linux/drivers/media/video/pxa_camera.c @@ -175,13 +175,6 @@ CICR0_EOFM | CICR0_FOM) /* - * YUV422P picture size should be a multiple of 16, so the heuristic aligns - * height, width on 4 byte boundaries to reach the 16 multiple for the size. - */ -#define YUV422P_X_Y_ALIGN 4 -#define YUV422P_SIZE_ALIGN YUV422P_X_Y_ALIGN * YUV422P_X_Y_ALIGN - -/* * Structures */ enum pxa_camera_active_dma { @@ -1410,28 +1403,13 @@ static int pxa_camera_try_fmt(struct soc_camera_device *icd, return -EINVAL; } - /* limit to pxa hardware capabilities */ - if (pix->height < 32) - pix->height = 32; - if (pix->height > 2048) - pix->height = 2048; - if (pix->width < 48) - pix->width = 48; - if (pix->width > 2048) - pix->width = 2048; - pix->width &= ~0x01; - - /* - * YUV422P planar format requires images size to be a 16 bytes - * multiple. If not, zeros will be inserted between Y and U planes, and - * U and V planes, and YUV422P standard would be violated. - */ - if (xlate->host_fmt->fourcc == V4L2_PIX_FMT_YUV422P) { - if (!IS_ALIGNED(pix->width * pix->height, YUV422P_SIZE_ALIGN)) - pix->height = ALIGN(pix->height, YUV422P_X_Y_ALIGN); - if (!IS_ALIGNED(pix->width * pix->height, YUV422P_SIZE_ALIGN)) - pix->width = ALIGN(pix->width, YUV422P_X_Y_ALIGN); - } + /* Limit to pxa hardware capabilities. YUV422P planar format requires + * images size to be a multiple of 16 bytes. If not, zeros will be + * inserted between Y and U planes, and U and V planes, which violates + * the YUV422P standard. */ + v4l2_bound_align_image(&pix->width, 48, 2048, 1, + &pix->height, 32, 2048, 0, + xlate->host_fmt->fourcc == V4L2_PIX_FMT_YUV422P ? 4 : 0); pix->bytesperline = pix->width * DIV_ROUND_UP(xlate->host_fmt->depth, 8); |