提交 124cc9c0 编写于 作者: H Hans de Goede 提交者: Mauro Carvalho Chehab

V4L/DVB (12074): gspca_ov519: Add 320x240 and 160x120 support for cif sensor cams

gspca_ov519: Add 320x240 and 160x120 support for cif sensor cams
Signed-off-by: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 7d971373
...@@ -241,11 +241,21 @@ static const struct v4l2_pix_format ov519_vga_mode[] = { ...@@ -241,11 +241,21 @@ static const struct v4l2_pix_format ov519_vga_mode[] = {
.priv = 0}, .priv = 0},
}; };
static const struct v4l2_pix_format ov519_sif_mode[] = { static const struct v4l2_pix_format ov519_sif_mode[] = {
{160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
.bytesperline = 160,
.sizeimage = 160 * 120 * 3 / 8 + 590,
.colorspace = V4L2_COLORSPACE_JPEG,
.priv = 3},
{176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
.bytesperline = 176, .bytesperline = 176,
.sizeimage = 176 * 144 * 3 / 8 + 590, .sizeimage = 176 * 144 * 3 / 8 + 590,
.colorspace = V4L2_COLORSPACE_JPEG, .colorspace = V4L2_COLORSPACE_JPEG,
.priv = 1}, .priv = 1},
{320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
.bytesperline = 320,
.sizeimage = 320 * 240 * 3 / 8 + 590,
.colorspace = V4L2_COLORSPACE_JPEG,
.priv = 2},
{352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
.bytesperline = 352, .bytesperline = 352,
.sizeimage = 352 * 288 * 3 / 8 + 590, .sizeimage = 352 * 288 * 3 / 8 + 590,
...@@ -266,11 +276,21 @@ static const struct v4l2_pix_format ov518_vga_mode[] = { ...@@ -266,11 +276,21 @@ static const struct v4l2_pix_format ov518_vga_mode[] = {
.priv = 0}, .priv = 0},
}; };
static const struct v4l2_pix_format ov518_sif_mode[] = { static const struct v4l2_pix_format ov518_sif_mode[] = {
{160, 120, V4L2_PIX_FMT_OV518, V4L2_FIELD_NONE,
.bytesperline = 160,
.sizeimage = 40000,
.colorspace = V4L2_COLORSPACE_JPEG,
.priv = 3},
{176, 144, V4L2_PIX_FMT_OV518, V4L2_FIELD_NONE, {176, 144, V4L2_PIX_FMT_OV518, V4L2_FIELD_NONE,
.bytesperline = 176, .bytesperline = 176,
.sizeimage = 40000, .sizeimage = 40000,
.colorspace = V4L2_COLORSPACE_JPEG, .colorspace = V4L2_COLORSPACE_JPEG,
.priv = 1}, .priv = 1},
{320, 240, V4L2_PIX_FMT_OV518, V4L2_FIELD_NONE,
.bytesperline = 320,
.sizeimage = 320 * 240 * 3 / 8 + 590,
.colorspace = V4L2_COLORSPACE_JPEG,
.priv = 2},
{352, 288, V4L2_PIX_FMT_OV518, V4L2_FIELD_NONE, {352, 288, V4L2_PIX_FMT_OV518, V4L2_FIELD_NONE,
.bytesperline = 352, .bytesperline = 352,
.sizeimage = 352 * 288 * 3 / 8 + 590, .sizeimage = 352 * 288 * 3 / 8 + 590,
...@@ -2039,7 +2059,7 @@ static int mode_init_ov_sensor_regs(struct sd *sd) ...@@ -2039,7 +2059,7 @@ static int mode_init_ov_sensor_regs(struct sd *sd)
int qvga; int qvga;
gspca_dev = &sd->gspca_dev; gspca_dev = &sd->gspca_dev;
qvga = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; qvga = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv & 1;
/******** Mode (VGA/QVGA) and sensor specific regs ********/ /******** Mode (VGA/QVGA) and sensor specific regs ********/
switch (sd->sensor) { switch (sd->sensor) {
...@@ -2168,13 +2188,14 @@ static void sethvflip(struct sd *sd) ...@@ -2168,13 +2188,14 @@ static void sethvflip(struct sd *sd)
static int set_ov_sensor_window(struct sd *sd) static int set_ov_sensor_window(struct sd *sd)
{ {
struct gspca_dev *gspca_dev; struct gspca_dev *gspca_dev;
int qvga; int qvga, crop;
int hwsbase, hwebase, vwsbase, vwebase, hwscale, vwscale; int hwsbase, hwebase, vwsbase, vwebase, hwscale, vwscale;
int ret, hstart, hstop, vstop, vstart; int ret, hstart, hstop, vstop, vstart;
__u8 v; __u8 v;
gspca_dev = &sd->gspca_dev; gspca_dev = &sd->gspca_dev;
qvga = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; qvga = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv & 1;
crop = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv & 2;
/* The different sensor ICs handle setting up of window differently. /* The different sensor ICs handle setting up of window differently.
* IF YOU SET IT WRONG, YOU WILL GET ALL ZERO ISOC DATA FROM OV51x!! */ * IF YOU SET IT WRONG, YOU WILL GET ALL ZERO ISOC DATA FROM OV51x!! */
...@@ -2201,6 +2222,12 @@ static int set_ov_sensor_window(struct sd *sd) ...@@ -2201,6 +2222,12 @@ static int set_ov_sensor_window(struct sd *sd)
if (sd->sensor == SEN_OV66308AF && qvga) if (sd->sensor == SEN_OV66308AF && qvga)
/* HDG: this fixes U and V getting swapped */ /* HDG: this fixes U and V getting swapped */
hwsbase++; hwsbase++;
if (crop) {
hwsbase += 8;
hwebase += 8;
vwsbase += 11;
vwebase += 11;
}
break; break;
case SEN_OV7620: case SEN_OV7620:
hwsbase = 0x2f; /* From 7620.SET (spec is wrong) */ hwsbase = 0x2f; /* From 7620.SET (spec is wrong) */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册