⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spcadecoder.c

📁 凌阳SPCA5XX解码芯片USB驱动源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/****************************************************************************#	 	spcadecoder: Generic decoder for various input stream yyuv  ## yuyv yuvy jpeg411 jpeg422 bayer rggb with gamma correct                   ## and various output palette rgb16 rgb24 rgb32 yuv420p                      ## various output size with crop feature                                     ## 		Copyright (C) 2003 2004 2005 Michel Xhaard                  ## 		mxhaard@magic.fr                                            ## 		Sonix Decompressor by B.S. (C) 2004                         ## This program is free software; you can redistribute it and/or modify      ## it under the terms of the GNU General Public License as published by      ## the Free Software Foundation; either version 2 of the License, or         ## (at your option) any later version.                                       ##                                                                           ## This program is distributed in the hope that it will be useful,           ## but WITHOUT ANY WARRANTY; without even the implied warranty of            ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             ## GNU General Public License for more details.                              ##                                                                           ## You should have received a copy of the GNU General Public License         ## along with this program; if not, write to the Free Software               ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA ##                                                                           #****************************************************************************/#ifndef __KERNEL__#include <stdio.h>#include <stdlib.h>#include <string.h>#else /* __KERNEL__ */#include <linux/string.h>#endif /* __KERNEL__ */#include "spcadecoder.h"#include "jpeg_header.h"#include "spcagamma.h"#define ISHIFT 11#define IFIX(a) ((long)((a) * (1 << ISHIFT) + .5))#define IMULT(a, b) (((a) * (b)) >> ISHIFT)#define ITOINT(a) ((a) >> ISHIFT)/* special markers */#define M_BADHUFF	-1struct in {	unsigned char *p;	unsigned int bits;	int omitescape;	int left;	int marker;};/*********************************/struct dec_hufftbl;struct enc_hufftbl;union hufftblp {	struct dec_hufftbl *dhuff;	struct enc_hufftbl *ehuff;};struct scan {	int dc;			/* old dc value */	union hufftblp hudc;	union hufftblp huac;	int next;		/* when to switch to next scan */	int cid;		/* component id */	int hv;			/* horiz/vert, copied from comp */	int tq;			/* quant tbl, copied from comp */};/*********************************/#define DECBITS 10		/* seems to be the optimum */struct dec_hufftbl {	int maxcode[17];	int valptr[16];	unsigned char vals[256];	unsigned int llvals[1 << DECBITS];};/*********************************//*********************************//*********************************/struct comp {	int cid;	int hv;	int tq;};struct jpginfo {	int nc;			/* number of components */	int ns;			/* number of scans */	int dri;		/* restart interval */	int nm;			/* mcus til next marker */	int rm;			/* next restart marker */};/* Sonix decompressor struct B.S.(2004) */typedef struct {	int is_abs;	int len;	int val;} code_table_t;static code_table_t table[256];#define MAXCOMP 4#define ERR_NO_SOI 1#define ERR_NOT_8BIT 2#define ERR_HEIGHT_MISMATCH 3#define ERR_WIDTH_MISMATCH 4#define ERR_BAD_WIDTH_OR_HEIGHT 5#define ERR_TOO_MANY_COMPPS 6#define ERR_ILLEGAL_HV 7#define ERR_QUANT_TABLE_SELECTOR 8#define ERR_NOT_YCBCR_221111 9#define ERR_UNKNOWN_CID_IN_SCAN 10#define ERR_NOT_SEQUENTIAL_DCT 11#define ERR_WRONG_MARKER 12#define ERR_NO_EOI 13#define ERR_BAD_TABLES 14#define ERR_DEPTH_MISMATCH 15#define ERR_CORRUPTFRAME 16#define JPEGHEADER_LENGTH 589const unsigned char JPEGHeaderz[JPEGHEADER_LENGTH] ={ 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x08, 0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, 0x07, 0x07, 0x09, 0x09, 0x08, 0x0a, 0x0c, 0x14, 0x0a, 0x0c, 0x0b, 0x0b, 0x0c, 0x19, 0x12, 0x13, 0x0f, 0x14, 0x1d, 0x1a, 0x1f, 0x1e, 0x1d, 0x1a, 0x1c, 0x1c, 0x20, 0x24, 0x2e, 0x27, 0x20, 0x22, 0x2c, 0x23, 0x1c, 0x1c, 0x28, 0x37, 0x29, 0x2c, 0x30, 0x31, 0x34, 0x34, 0x34, 0x1f, 0x27, 0x39, 0x3d, 0x38, 0x32, 0x3c, 0x2e, 0x33, 0x34, 0x32, 0x01, 0x09, 0x09, 0x09, 0x0c, 0x0b, 0x0c, 0x18, 0x0a, 0x0a, 0x18, 0x32, 0x21, 0x1c, 0x21, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0xff, 0xc4, 0x01, 0xa2, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x01, 0xe0, 0x02, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00 };const unsigned char JPEGHeader[JPEGHEADER_LENGTH] ={ 0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x06, 0x04, 0x05, 0x06, 0x05, 0x04, 0x06, 0x06, 0x05, 0x06, 0x07, 0x07, 0x06, 0x08, 0x0a, 0x10, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x14, 0x0e, 0x0f, 0x0c, 0x10, 0x17, 0x14, 0x18, 0x18, 0x17, 0x14, 0x16, 0x16, 0x1a, 0x1d, 0x25, 0x1f, 0x1a, 0x1b, 0x23, 0x1c, 0x16, 0x16, 0x20, 0x2c, 0x20, 0x23, 0x26, 0x27, 0x29, 0x2a, 0x29, 0x19, 0x1f, 0x2d, 0x30, 0x2d, 0x28, 0x30, 0x25, 0x28, 0x29, 0x28, 0x01, 0x07, 0x07, 0x07, 0x0a, 0x08, 0x0a, 0x13, 0x0a, 0x0a, 0x13, 0x28, 0x1a, 0x16, 0x1a, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xff, 0xc4, 0x01, 0xa2, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08, 0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0, 0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34, 0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xff, 0xc0, 0x00, 0x11, 0x08, 0x01, 0xe0, 0x02, 0x80, 0x03, 0x01, 0x21, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xff, 0xda, 0x00, 0x0c, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00 };int spca50x_outpicture ( struct spca50x_frame *myframe );static int jpeg_decode411(struct spca50x_frame *myframe, int force_rgb);static int jpeg_decode422(struct spca50x_frame *myframe, int force_rgb);static int yuv_decode(struct spca50x_frame *myframe, int force_rgb);static int bayer_decode(struct spca50x_frame *myframe, int force_rgb);static int make_jpeg ( struct spca50x_frame *myframe );static int make_jpeg_conexant (struct spca50x_frame *myframe);#define CLIP(color) (unsigned char)(((color)>0xFF)?0xff:(((color)<0)?0:(color)))/****************************************************************//**************      Sonix  huffman decoder      ****************//****************************************************************/void init_sonix_decoder(void){	int i;	int is_abs, val, len;	for (i = 0; i < 256; i++) {		is_abs = 0;		val = 0;		len = 0;		if ((i & 0x80) == 0) {			/* code 0 */			val = 0;			len = 1;		}		else if ((i & 0xE0) == 0x80) {			/* code 100 */			val = +4;			len = 3;		}		else if ((i & 0xE0) == 0xA0) {			/* code 101 */			val = -4;			len = 3;		}		else if ((i & 0xF0) == 0xD0) {			/* code 1101 */			val = +11;			len = 4;		}		else if ((i & 0xF0) == 0xF0) {			/* code 1111 */			val = -11;			len = 4;		}		else if ((i & 0xF8) == 0xC8) {			/* code 11001 */			val = +20;			len = 5;		}		else if ((i & 0xFC) == 0xC0) {			/* code 110000 */			val = -20;			len = 6;		}		else if ((i & 0xFC) == 0xC4) {			/* code 110001xx: unknown */			val = 0;			len = 8;		}		else if ((i & 0xF0) == 0xE0) {			/* code 1110xxxx */			is_abs = 1;			val = (i & 0x0F) << 4;			len = 8;		}		table[i].is_abs = is_abs;		table[i].val = val;		table[i].len = len;	}}static void sonix_decompress(int width, int height, unsigned char *inp, unsigned char *outp){	int row, col;	int val;	int bitpos;	unsigned char code;	unsigned char *addr;	bitpos = 0;	for (row = 0; row < height; row++) {		col = 0;		/* first two pixels in first two rows are stored as raw 8-bit */		if (row < 2) {			addr = inp + (bitpos >> 3);			code = (addr[0] << (bitpos & 7)) | (addr[1] >> (8 - (bitpos & 7)));			bitpos += 8;			*outp++ = code;			addr = inp + (bitpos >> 3);			code = (addr[0] << (bitpos & 7)) | (addr[1] >> (8 - (bitpos & 7)));			bitpos += 8;			*outp++ = code;			col += 2;		}		while (col < width) {			/* get bitcode from bitstream */			addr = inp + (bitpos >> 3);			code = (addr[0] << (bitpos & 7)) | (addr[1] >> (8 - (bitpos & 7)));			/* update bit position */			bitpos += table[code].len;			/* calculate pixel value */			val = table[code].val;			if (!table[code].is_abs) {				/* value is relative to top and left pixel */				if (col < 2) {					/* left column: relative to top pixel */					val += outp[-2*width];				}				else if (row < 2) {					/* top row: relative to left pixel */					val += outp[-2];				}				else {					/* main area: average of left pixel and top pixel */					val += (outp[-2] + outp[-2*width]) / 2;									}			}			/* store pixel */			*outp++ = CLIP(val);			col++;		}	}}static void tv8532_preprocess(struct spca50x_frame *myframe){/* we should received a whole frame with header and EOL markerin myframe->data and return a GBRG pattern in frame->tmpbuffer sequence 2bytes header the Alternate pixels bayer GB 4 bytes Alternate pixels bayer RG 4 bytes EOL */ int width = myframe->hdrwidth; int height =myframe->hdrheight; int src = 0; unsigned char *dst = myframe->tmpbuffer; unsigned char *data = myframe->data; int i; int seq1,seq2;  /* precompute where is the good bayer line */ if((((data[src+3]+ data[src+width+7]) >>1 )+(data[src+4]>>2)+(data[src+width+6]>>1)) >=     (((data[src+2]+data[src+width+6]) >>1)+(data[src+3]>>2)+(data[src+width+5]>>1))){ 	seq1 = 3; 	seq2 = 4; } else { 	seq1 = 2; 	seq2 = 5; } for(i=0; i < height/2; i++){ 	src += seq1;	memcpy(dst,&myframe->data[src],width);	src += (width + 3);	dst += width;	memcpy(dst,&myframe->data[src],width);	src += (width + seq2);	dst += width;	 }}/****************************************************************//**************       huffman decoder             ***************//****************************************************************/static int fillbits (struct in *, int, unsigned int);static int dec_rec2 (struct in *, struct dec_hufftbl *, int *, int, int);static struct comp comps[MAXCOMP] = {	{0x01, 0x22, 0x00},	{0x02, 0x11, 0x01},	{0x03, 0x11, 0x01},	{0x00, 0x00, 0x00}};static struct scan dscans[MAXCOMP];static unsigned char quant[4][64];static struct dec_hufftbl dhuff[4];#define dec_huffdc (dhuff + 0)#define dec_huffac (dhuff + 2)#define M_RST0	0xd0static struct in in;int dquant[3][64];static struct jpginfo info;static intfillbits (struct in *in, int le, unsigned int bi){	int b;	int m;	if (in->marker) {		if (le <= 16)			in->bits = bi << 16, le += 16;		return le;	}	while (le <= 24) {		b = *in->p++;		if(in->omitescape){			if (b == 0xff && (m = *in->p++) != 0) {				in->marker = m;				if (le <= 16)					bi = bi << 16, le += 16;				break;			}		}		bi = bi << 8 | b;		le += 8;	}	in->bits = bi;		/* tmp... 2 return values needed */	return le;}#define LEBI_GET(in)	(le = in->left, bi = in->bits)#define LEBI_PUT(in)	(in->left = le, in->bits = bi)#define GETBITS(in, n) (					\  (le < (n) ? le = fillbits(in, le, bi), bi = in->bits : 0),	\  (le -= (n)),							\  bi >> le & ((1 << (n)) - 1)					\)#define UNGETBITS(in, n) (	\  le += (n)			\)static void dec_initscans(void){	int i;	info.ns = 3; // HARDCODED  here	info.nm = info.dri + 1; // macroblock count	info.rm = M_RST0;	for (i = 0; i < info.ns; i++)		dscans[i].dc = 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -