Isn't SXGA resolution defined as being 1280x1024? On Sun, Jan 25, 2009 at 8:54 AM, GWater <[email protected]> wrote: > I think our last missing major feature is now SXGA. My progress is this: > > 1. The attached patch enabled me to make mplayer _request_ SXGA. Some I2C > messages are SOI968 specific (enabling SXGA in the sensor). > > 2. The attached image is the output I get from mplayer. As you can see the > NOKIA brand on my mobile is visible but most of the image is missing. > > Ideas? > > GWater > > From 5bc49a6497c1bb05613dcc92762fb5ae9d89e236 Mon Sep 17 00:00:00 2001 > From: Josua Grawitter <[email protected]> > Date: Sun, 25 Jan 2009 14:54:07 +0100 > Subject: [PATCH] SXGA testing > > Signed-off-by: Josua Grawitter <[email protected]> > --- > sn9c20x-bridge.c | 10 ++++++++-- > sn9c20x-dev.c | 6 ++++++ > sn9c20x-v4l2.c | 4 ++++ > sn9c20x.h | 2 +- > 4 files changed, 19 insertions(+), 3 deletions(-) > > diff --git a/sn9c20x-bridge.c b/sn9c20x-bridge.c > index fc89ece..1c21ebe 100644 > --- a/sn9c20x-bridge.c > +++ b/sn9c20x-bridge.c > @@ -665,7 +665,7 @@ int sn9c20x_get_closest_resolution(struct usb_sn9c20x > *dev, > > for (i = SN9C20X_N_MODES - 1; i >= 0; i--) { > if (*width >= sn9c20x_modes[i].width > - && *height >= sn9c20x_modes[i].height) > + || *height >= sn9c20x_modes[i].height) > break; > } > > @@ -691,7 +691,7 @@ int sn9c20x_set_resolution(struct usb_sn9c20x *dev, > int width, int height) > { > int ret; > - __u8 scale; > + __u8 scale, buf; > __u8 window[6]; > __u8 clrwindow[5]; > struct sn9c20x_video_mode *mode; > @@ -719,6 +719,12 @@ int sn9c20x_set_resolution(struct usb_sn9c20x *dev, > window[4] = mode->window[2] >> 4; > window[5] = mode->window[3] >> 3; > > + if (mode->width == 1280) { > + sn9c20x_read_i2c_data(dev, 1, 0x12, &buf); > + buf &= ~0x40; > + sn9c20x_write_i2c_data(dev, 1, 0x12, &buf); > + } > + > usb_sn9c20x_control_write(dev, 0x10fb, clrwindow, 5); > usb_sn9c20x_control_write(dev, 0x1180, window, 6); > usb_sn9c20x_control_write(dev, SN9C20X_SCALE, &scale, 1); > diff --git a/sn9c20x-dev.c b/sn9c20x-dev.c > index 2287d4f..737fa64 100644 > --- a/sn9c20x-dev.c > +++ b/sn9c20x-dev.c > @@ -76,6 +76,12 @@ struct sn9c20x_video_mode sn9c20x_modes[SN9C20X_N_MODES] > = { > .scale = SN9C20X_NO_SCALE, > .window = {0, 0, 640, 480} > }, > + { > + .width = 1280, > + .height = 960, > + .scale = SN9C20X_NO_SCALE, > + .window = {0, 0, 1280, 960} > + }, > }; > > struct sn9c20x_video_format sn9c20x_fmts[SN9C20X_N_FMTS] = { > diff --git a/sn9c20x-v4l2.c b/sn9c20x-v4l2.c > index cecd2bf..8ab1966 100644 > --- a/sn9c20x-v4l2.c > +++ b/sn9c20x-v4l2.c > @@ -985,6 +985,8 @@ int sn9c20x_vidioc_try_fmt_cap(struct file *file, void > *priv, > if (index >= SN9C20X_N_FMTS) > return -EINVAL; > > + UDIA_INFO("Requested resolution %dx%d\n", fmt->fmt.pix.width, > fmt->fmt.pix.height); > + > sn9c20x_get_closest_resolution(dev, &fmt->fmt.pix.width, > &fmt->fmt.pix.height); > > @@ -1039,6 +1041,8 @@ int sn9c20x_vidioc_s_fmt_cap(struct file *file, void > *priv, > > dev = video_get_drvdata(priv); > > + UDIA_INFO("Requested resolution %dx%d\n", fmt->fmt.pix.width, > fmt->fmt.pix.height); > + > UDIA_DEBUG("SET FMT %d : %d\n", fmt->type, fmt->fmt.pix.pixelformat); > > if (v4l_get_privileges(file) < 0) > diff --git a/sn9c20x.h b/sn9c20x.h > index d0cd202..dfcc978 100644 > --- a/sn9c20x.h > +++ b/sn9c20x.h > @@ -304,7 +304,7 @@ extern struct sn9c20x_i2c_regs ov7670_init[]; > extern struct sn9c20x_i2c_regs hv7131r_init[]; > > #define SN9C20X_N_FMTS 3 > -#define SN9C20X_N_MODES 6 > +#define SN9C20X_N_MODES 7 > > extern struct sn9c20x_video_format sn9c20x_fmts[SN9C20X_N_FMTS]; > extern struct sn9c20x_video_mode sn9c20x_modes[SN9C20X_N_MODES]; > -- > 1.6.0.6 > > >
--~--~---------~--~----~------------~-------~--~----~ Lets make microdia webcams plug'n play, (currently plug'n pray) To post to this group, send email to [email protected] Visit us online https://groups.google.com/group/microdia -~----------~----~----~----~------~----~------~--~---
