diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2009-03-13 10:08:20 +0100 |
---|---|---|
committer | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2009-03-13 10:08:20 +0100 |
commit | ada365c021ff668eae8fa17042a39d33a4cdf4e1 (patch) | |
tree | f05e3e54edf9e37b36f2eeebde3ca19b84c0fd43 /linux/drivers/media/video/tw9910.c | |
parent | 7787613f5c5a3a00ebd6aca9893ef2c4ad679bc1 (diff) | |
download | mediapointer-dvb-s2-ada365c021ff668eae8fa17042a39d33a4cdf4e1.tar.gz mediapointer-dvb-s2-ada365c021ff668eae8fa17042a39d33a4cdf4e1.tar.bz2 |
soc-camera: separate S_FMT and S_CROP operations
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
As host and camera drivers become more complex, differences between S_FMT and
S_CROP functionality grow, this patch separates them.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
drivers/media/video/mt9m001.c | 19 +++-
drivers/media/video/mt9m111.c | 56 +++++++---
drivers/media/video/mt9t031.c | 84 ++++++++++------
drivers/media/video/mt9v022.c | 62 +++++++----
drivers/media/video/mx3_camera.c | 157 +++++++++++++++++-----------
drivers/media/video/ov772x.c | 31 +++++-
drivers/media/video/pxa_camera.c | 67 +++++++++---
drivers/media/video/sh_mobile_ceu_camera.c | 17 ++-
drivers/media/video/soc_camera.c | 20 ++--
drivers/media/video/soc_camera_platform.c | 9 ++-
drivers/media/video/tw9910.c | 45 +++++---
include/media/soc_camera.h | 6 +-
12 files changed, 381 insertions(+), 192 deletions(-)
Diffstat (limited to 'linux/drivers/media/video/tw9910.c')
-rw-r--r-- | linux/drivers/media/video/tw9910.c | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/linux/drivers/media/video/tw9910.c b/linux/drivers/media/video/tw9910.c index ed8dca3bf..5c145085a 100644 --- a/linux/drivers/media/video/tw9910.c +++ b/linux/drivers/media/video/tw9910.c @@ -641,25 +641,12 @@ static int tw9910_set_register(struct soc_camera_device *icd, } #endif -static int tw9910_set_fmt(struct soc_camera_device *icd, __u32 pixfmt, - struct v4l2_rect *rect) +static int tw9910_set_crop(struct soc_camera_device *icd, + struct v4l2_rect *rect) { struct tw9910_priv *priv = container_of(icd, struct tw9910_priv, icd); int ret = -EINVAL; u8 val; - int i; - - /* - * check color format - */ - for (i = 0 ; i < ARRAY_SIZE(tw9910_color_fmt) ; i++) { - if (pixfmt == tw9910_color_fmt[i].fourcc) { - ret = 0; - break; - } - } - if (ret < 0) - goto tw9910_set_fmt_error; /* * select suitable norm @@ -746,8 +733,33 @@ tw9910_set_fmt_error: return ret; } +static int tw9910_set_fmt(struct soc_camera_device *icd, + struct v4l2_format *f) +{ + struct v4l2_pix_format *pix = &f->fmt.pix; + struct v4l2_rect rect = { + .left = icd->x_current, + .top = icd->y_current, + .width = pix->width, + .height = pix->height, + }; + int i; + + /* + * check color format + */ + for (i = 0; i < ARRAY_SIZE(tw9910_color_fmt); i++) + if (pix->pixelformat == tw9910_color_fmt[i].fourcc) + break; + + if (i == ARRAY_SIZE(tw9910_color_fmt)) + return -EINVAL; + + return tw9910_set_crop(icd, &rect); +} + static int tw9910_try_fmt(struct soc_camera_device *icd, - struct v4l2_format *f) + struct v4l2_format *f) { struct v4l2_pix_format *pix = &f->fmt.pix; const struct tw9910_scale_ctrl *scale; @@ -835,6 +847,7 @@ static struct soc_camera_ops tw9910_ops = { .release = tw9910_release, .start_capture = tw9910_start_capture, .stop_capture = tw9910_stop_capture, + .set_crop = tw9910_set_crop, .set_fmt = tw9910_set_fmt, .try_fmt = tw9910_try_fmt, .set_bus_param = tw9910_set_bus_param, |