root/drivers/media/usb/pwc/pwc-misc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. pwc_get_size
  2. pwc_construct

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /* Linux driver for Philips webcam
   3    Various miscellaneous functions and tables.
   4    (C) 1999-2003 Nemosoft Unv.
   5    (C) 2004-2006 Luc Saillard (luc@saillard.org)
   6 
   7    NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx
   8    driver and thus may have bugs that are not present in the original version.
   9    Please send bug reports and support requests to <luc@saillard.org>.
  10    The decompression routines have been implemented by reverse-engineering the
  11    Nemosoft binary pwcx module. Caveat emptor.
  12 
  13 */
  14 
  15 
  16 #include "pwc.h"
  17 
  18 const int pwc_image_sizes[PSZ_MAX][2] =
  19 {
  20         { 128,  96 }, /* sqcif */
  21         { 160, 120 }, /* qsif */
  22         { 176, 144 }, /* qcif */
  23         { 320, 240 }, /* sif */
  24         { 352, 288 }, /* cif */
  25         { 640, 480 }, /* vga */
  26 };
  27 
  28 /* x,y -> PSZ_ */
  29 int pwc_get_size(struct pwc_device *pdev, int width, int height)
  30 {
  31         int i;
  32 
  33         /* Find the largest size supported by the camera that fits into the
  34            requested size. */
  35         for (i = PSZ_MAX - 1; i >= 0; i--) {
  36                 if (!(pdev->image_mask & (1 << i)))
  37                         continue;
  38 
  39                 if (pwc_image_sizes[i][0] <= width &&
  40                     pwc_image_sizes[i][1] <= height)
  41                         return i;
  42         }
  43 
  44         /* No mode found, return the smallest mode we have */
  45         for (i = 0; i < PSZ_MAX; i++) {
  46                 if (pdev->image_mask & (1 << i))
  47                         return i;
  48         }
  49 
  50         /* Never reached there always is at least one supported mode */
  51         return 0;
  52 }
  53 
  54 /* initialize variables depending on type and decompressor */
  55 void pwc_construct(struct pwc_device *pdev)
  56 {
  57         if (DEVICE_USE_CODEC1(pdev->type)) {
  58 
  59                 pdev->image_mask = 1 << PSZ_SQCIF | 1 << PSZ_QCIF | 1 << PSZ_CIF;
  60                 pdev->vcinterface = 2;
  61                 pdev->vendpoint = 4;
  62                 pdev->frame_header_size = 0;
  63                 pdev->frame_trailer_size = 0;
  64 
  65         } else if (DEVICE_USE_CODEC3(pdev->type)) {
  66 
  67                 pdev->image_mask = 1 << PSZ_QSIF | 1 << PSZ_SIF | 1 << PSZ_VGA;
  68                 pdev->vcinterface = 3;
  69                 pdev->vendpoint = 5;
  70                 pdev->frame_header_size = TOUCAM_HEADER_SIZE;
  71                 pdev->frame_trailer_size = TOUCAM_TRAILER_SIZE;
  72 
  73         } else /* if (DEVICE_USE_CODEC2(pdev->type)) */ {
  74 
  75                 pdev->image_mask = 1 << PSZ_SQCIF | 1 << PSZ_QSIF | 1 << PSZ_QCIF | 1 << PSZ_SIF | 1 << PSZ_CIF | 1 << PSZ_VGA;
  76                 pdev->vcinterface = 3;
  77                 pdev->vendpoint = 4;
  78                 pdev->frame_header_size = 0;
  79                 pdev->frame_trailer_size = 0;
  80         }
  81 }

/* [<][>][^][v][top][bottom][index][help] */