1*1a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 20c0d06caSMauro Carvalho Chehab /* Linux driver for Philips webcam 30c0d06caSMauro Carvalho Chehab (C) 2004-2006 Luc Saillard (luc@saillard.org) 40c0d06caSMauro Carvalho Chehab 50c0d06caSMauro Carvalho Chehab NOTE: this version of pwc is an unofficial (modified) release of pwc & pcwx 60c0d06caSMauro Carvalho Chehab driver and thus may have bugs that are not present in the original version. 70c0d06caSMauro Carvalho Chehab Please send bug reports and support requests to <luc@saillard.org>. 80c0d06caSMauro Carvalho Chehab The decompression routines have been implemented by reverse-engineering the 90c0d06caSMauro Carvalho Chehab Nemosoft binary pwcx module. Caveat emptor. 100c0d06caSMauro Carvalho Chehab 110c0d06caSMauro Carvalho Chehab */ 120c0d06caSMauro Carvalho Chehab 130c0d06caSMauro Carvalho Chehab #ifndef PWC_DEC23_H 140c0d06caSMauro Carvalho Chehab #define PWC_DEC23_H 150c0d06caSMauro Carvalho Chehab 160c0d06caSMauro Carvalho Chehab struct pwc_device; 170c0d06caSMauro Carvalho Chehab 180c0d06caSMauro Carvalho Chehab struct pwc_dec23_private 190c0d06caSMauro Carvalho Chehab { 200c0d06caSMauro Carvalho Chehab struct mutex lock; 210c0d06caSMauro Carvalho Chehab 220c0d06caSMauro Carvalho Chehab unsigned char last_cmd, last_cmd_valid; 230c0d06caSMauro Carvalho Chehab 240c0d06caSMauro Carvalho Chehab unsigned int scalebits; 250c0d06caSMauro Carvalho Chehab unsigned int nbitsmask, nbits; /* Number of bits of a color in the compressed stream */ 260c0d06caSMauro Carvalho Chehab 270c0d06caSMauro Carvalho Chehab unsigned int reservoir; 280c0d06caSMauro Carvalho Chehab unsigned int nbits_in_reservoir; 290c0d06caSMauro Carvalho Chehab 300c0d06caSMauro Carvalho Chehab const unsigned char *stream; 310c0d06caSMauro Carvalho Chehab int temp_colors[16]; 320c0d06caSMauro Carvalho Chehab 330c0d06caSMauro Carvalho Chehab unsigned char table_0004_pass1[16][1024]; 340c0d06caSMauro Carvalho Chehab unsigned char table_0004_pass2[16][1024]; 350c0d06caSMauro Carvalho Chehab unsigned char table_8004_pass1[16][256]; 360c0d06caSMauro Carvalho Chehab unsigned char table_8004_pass2[16][256]; 370c0d06caSMauro Carvalho Chehab unsigned int table_subblock[256][12]; 380c0d06caSMauro Carvalho Chehab 390c0d06caSMauro Carvalho Chehab unsigned char table_bitpowermask[8][256]; 400c0d06caSMauro Carvalho Chehab unsigned int table_d800[256]; 410c0d06caSMauro Carvalho Chehab unsigned int table_dc00[256]; 420c0d06caSMauro Carvalho Chehab 430c0d06caSMauro Carvalho Chehab }; 440c0d06caSMauro Carvalho Chehab 450c0d06caSMauro Carvalho Chehab void pwc_dec23_init(struct pwc_device *pdev, const unsigned char *cmd); 460c0d06caSMauro Carvalho Chehab void pwc_dec23_decompress(struct pwc_device *pdev, 470c0d06caSMauro Carvalho Chehab const void *src, 480c0d06caSMauro Carvalho Chehab void *dst); 490c0d06caSMauro Carvalho Chehab #endif 50