cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pwc-misc.c (2246B)


      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
     18const 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_ */
     29int 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 */
     55void 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}