Commit 0e4a9099 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

V4L/DVB (12617): gspca_pac207: enable higher framerates / lower exposure settings

Now that we've figured out the higher compression settings (supported in
libv4l-0.6.0 and later, so after this patch the driver should be used with
libv4l-0.6.0 or higher only!), we can enable higher framerates. Which
means lower exposure times, which is important for the use of the pac207
in full daylight.

This patch also tweakes the brightness default and the per color gain
balances to use the values which are adviced by Pixart in the pac207
application note.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent c529e556
...@@ -35,25 +35,17 @@ MODULE_LICENSE("GPL"); ...@@ -35,25 +35,17 @@ MODULE_LICENSE("GPL");
#define PAC207_BRIGHTNESS_MIN 0 #define PAC207_BRIGHTNESS_MIN 0
#define PAC207_BRIGHTNESS_MAX 255 #define PAC207_BRIGHTNESS_MAX 255
#define PAC207_BRIGHTNESS_DEFAULT 4 /* power on default: 4 */ #define PAC207_BRIGHTNESS_DEFAULT 46
/* An exposure value of 4 also works (3 does not) but then we need to lower #define PAC207_EXPOSURE_MIN 3
the compression balance setting when in 352x288 mode, otherwise the usb
bandwidth is not enough and packets get dropped resulting in corrupt
frames. The problem with this is that when the compression balance gets
lowered below 0x80, the pac207 starts using a different compression
algorithm for some lines, these lines get prefixed with a 0x2dd2 prefix
and currently we do not know how to decompress these lines, so for now
we use a minimum exposure value of 5 */
#define PAC207_EXPOSURE_MIN 5
#define PAC207_EXPOSURE_MAX 26 #define PAC207_EXPOSURE_MAX 26
#define PAC207_EXPOSURE_DEFAULT 5 /* power on default: 3 ?? */ #define PAC207_EXPOSURE_DEFAULT 5 /* power on default: 3 */
#define PAC207_EXPOSURE_KNEE 11 /* 4 = 30 fps, 11 = 8, 15 = 6 */ #define PAC207_EXPOSURE_KNEE 8 /* 4 = 30 fps, 11 = 8, 15 = 6 */
#define PAC207_GAIN_MIN 0 #define PAC207_GAIN_MIN 0
#define PAC207_GAIN_MAX 31 #define PAC207_GAIN_MAX 31
#define PAC207_GAIN_DEFAULT 9 /* power on default: 9 */ #define PAC207_GAIN_DEFAULT 9 /* power on default: 9 */
#define PAC207_GAIN_KNEE 20 #define PAC207_GAIN_KNEE 31
#define PAC207_AUTOGAIN_DEADZONE 30 #define PAC207_AUTOGAIN_DEADZONE 30
...@@ -166,8 +158,8 @@ static const struct v4l2_pix_format sif_mode[] = { ...@@ -166,8 +158,8 @@ static const struct v4l2_pix_format sif_mode[] = {
}; };
static const __u8 pac207_sensor_init[][8] = { static const __u8 pac207_sensor_init[][8] = {
{0x10, 0x12, 0x0d, 0x12, 0x0c, 0x01, 0x29, 0xf0}, {0x10, 0x12, 0x0d, 0x12, 0x0c, 0x01, 0x29, 0x84},
{0x00, 0x64, 0x64, 0x64, 0x04, 0x10, 0xf0, 0x30}, {0x49, 0x64, 0x64, 0x64, 0x04, 0x10, 0xf0, 0x30},
{0x00, 0x00, 0x00, 0x70, 0xa0, 0xf8, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x70, 0xa0, 0xf8, 0x00, 0x00},
{0x32, 0x00, 0x96, 0x00, 0xA2, 0x02, 0xaf, 0x00}, {0x32, 0x00, 0x96, 0x00, 0xA2, 0x02, 0xaf, 0x00},
}; };
...@@ -290,7 +282,7 @@ static int sd_start(struct gspca_dev *gspca_dev) ...@@ -290,7 +282,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
if (gspca_dev->width == 176) if (gspca_dev->width == 176)
pac207_write_reg(gspca_dev, 0x4a, 0xff); pac207_write_reg(gspca_dev, 0x4a, 0xff);
else else
pac207_write_reg(gspca_dev, 0x4a, 0x88); pac207_write_reg(gspca_dev, 0x4a, 0x30);
pac207_write_reg(gspca_dev, 0x4b, 0x00); /* Sram test value */ pac207_write_reg(gspca_dev, 0x4b, 0x00); /* Sram test value */
pac207_write_reg(gspca_dev, 0x08, sd->brightness); pac207_write_reg(gspca_dev, 0x08, sd->brightness);
...@@ -339,7 +331,7 @@ static void pac207_do_auto_gain(struct gspca_dev *gspca_dev) ...@@ -339,7 +331,7 @@ static void pac207_do_auto_gain(struct gspca_dev *gspca_dev)
if (sd->autogain_ignore_frames > 0) if (sd->autogain_ignore_frames > 0)
sd->autogain_ignore_frames--; sd->autogain_ignore_frames--;
else if (gspca_auto_gain_n_exposure(gspca_dev, avg_lum, else if (gspca_auto_gain_n_exposure(gspca_dev, avg_lum,
100 + sd->brightness / 2, PAC207_AUTOGAIN_DEADZONE, 100, PAC207_AUTOGAIN_DEADZONE,
PAC207_GAIN_KNEE, PAC207_EXPOSURE_KNEE)) PAC207_GAIN_KNEE, PAC207_EXPOSURE_KNEE))
sd->autogain_ignore_frames = PAC_AUTOGAIN_IGNORE_FRAMES; sd->autogain_ignore_frames = PAC_AUTOGAIN_IGNORE_FRAMES;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment