[media] gspca: sn9c2028: Add gain and autogain controls Genius Videocam Live v2
Autogain algorithm is very simple, if average luminance is low - increase gain, if it's high - decrease gain. Gain granularity is low enough for this algo to stabilize quickly. Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
48c291eda7
commit
d8fd9f5625
@@ -21,8 +21,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
static const unsigned char sn9c2028_sof_marker[5] =
|
||||
{ 0xff, 0xff, 0x00, 0xc4, 0xc4 };
|
||||
static const unsigned char sn9c2028_sof_marker[] = {
|
||||
0xff, 0xff, 0x00, 0xc4, 0xc4, 0x96,
|
||||
0x00,
|
||||
0x00, /* seq */
|
||||
0x00,
|
||||
0x00,
|
||||
0x00, /* avg luminance lower 8 bit */
|
||||
0x00, /* avg luminance higher 8 bit */
|
||||
};
|
||||
|
||||
static unsigned char *sn9c2028_find_sof(struct gspca_dev *gspca_dev,
|
||||
unsigned char *m, int len)
|
||||
@@ -32,8 +39,13 @@ static unsigned char *sn9c2028_find_sof(struct gspca_dev *gspca_dev,
|
||||
|
||||
/* Search for the SOF marker (fixed part) in the header */
|
||||
for (i = 0; i < len; i++) {
|
||||
if (m[i] == sn9c2028_sof_marker[sd->sof_read]) {
|
||||
if ((m[i] == sn9c2028_sof_marker[sd->sof_read]) ||
|
||||
(sd->sof_read > 5)) {
|
||||
sd->sof_read++;
|
||||
if (sd->sof_read == 11)
|
||||
sd->avg_lum_l = m[i];
|
||||
if (sd->sof_read == 12)
|
||||
sd->avg_lum = (m[i] << 8) + sd->avg_lum_l;
|
||||
if (sd->sof_read == sizeof(sn9c2028_sof_marker)) {
|
||||
PDEBUG(D_FRAM,
|
||||
"SOF found, bytes to analyze: %u."
|
||||
|
Reference in New Issue
Block a user