0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 static const unsigned char sn9c2028_sof_marker[] = {
0011 0xff, 0xff, 0x00, 0xc4, 0xc4, 0x96,
0012 0x00,
0013 0x00,
0014 0x00,
0015 0x00,
0016 0x00,
0017 0x00,
0018 };
0019
0020 static unsigned char *sn9c2028_find_sof(struct gspca_dev *gspca_dev,
0021 unsigned char *m, int len)
0022 {
0023 struct sd *sd = (struct sd *) gspca_dev;
0024 int i;
0025
0026
0027 for (i = 0; i < len; i++) {
0028 if ((m[i] == sn9c2028_sof_marker[sd->sof_read]) ||
0029 (sd->sof_read > 5)) {
0030 sd->sof_read++;
0031 if (sd->sof_read == 11)
0032 sd->avg_lum_l = m[i];
0033 if (sd->sof_read == 12)
0034 sd->avg_lum = (m[i] << 8) + sd->avg_lum_l;
0035 if (sd->sof_read == sizeof(sn9c2028_sof_marker)) {
0036 gspca_dbg(gspca_dev, D_FRAM,
0037 "SOF found, bytes to analyze: %u - Frame starts at byte #%u\n",
0038 len, i + 1);
0039 sd->sof_read = 0;
0040 return m + i + 1;
0041 }
0042 } else {
0043 sd->sof_read = 0;
0044 }
0045 }
0046
0047 return NULL;
0048 }