pac_common.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Pixart PAC207BCA / PAC73xx common functions
  3. *
  4. * Copyright (C) 2008 Hans de Goede <j.w.r.degoede@hhs.nl>
  5. * Copyright (C) 2005 Thomas Kaiser thomas@kaiser-linux.li
  6. * Copyleft (C) 2005 Michel Xhaard mxhaard@magic.fr
  7. *
  8. * V4L2 by Jean-Francois Moine <http://moinejf.free.fr>
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License as published by
  12. * the Free Software Foundation; either version 2 of the License, or
  13. * (at your option) any later version.
  14. *
  15. * This program is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public License
  21. * along with this program; if not, write to the Free Software
  22. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  23. *
  24. */
  25. /* We calculate the autogain at the end of the transfer of a frame, at this
  26. moment a frame with the old settings is being transmitted, and a frame is
  27. being captured with the old settings. So if we adjust the autogain we must
  28. ignore atleast the 2 next frames for the new settings to come into effect
  29. before doing any other adjustments */
  30. #define PAC_AUTOGAIN_IGNORE_FRAMES 3
  31. static const unsigned char pac_sof_marker[5] =
  32. { 0xff, 0xff, 0x00, 0xff, 0x96 };
  33. static unsigned char *pac_find_sof(struct gspca_dev *gspca_dev,
  34. unsigned char *m, int len)
  35. {
  36. struct sd *sd = (struct sd *) gspca_dev;
  37. int i;
  38. /* Search for the SOF marker (fixed part) in the header */
  39. for (i = 0; i < len; i++) {
  40. if (m[i] == pac_sof_marker[sd->sof_read]) {
  41. sd->sof_read++;
  42. if (sd->sof_read == sizeof(pac_sof_marker)) {
  43. PDEBUG(D_FRAM,
  44. "SOF found, bytes to analyze: %u."
  45. " Frame starts at byte #%u",
  46. len, i + 1);
  47. sd->sof_read = 0;
  48. return m + i + 1;
  49. }
  50. } else {
  51. sd->sof_read = 0;
  52. }
  53. }
  54. return NULL;
  55. }