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

📄 ov518_decomp.c

📁 支持linux2.6和linux2.4的ov511摄像头驱动源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* OV518 Decompression Support * * Copyright (c) 2002-2006 Mark McClelland <mark@ovcam.org> * http://ovcam.org/ov511/ * * Fast integer iDCT by Yuri van Oers <yvanoers AT xs4all.nl> * Original OV511 decompression code Copyright 1998-2000 OmniVision Technologies * * 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. NO WARRANTY OF ANY KIND is expressed or implied. */#define __NO_VERSION__#include <linux/config.h>#include <linux/version.h>#include "ov511.h"/****************************************************************************** * Compile-time Options ******************************************************************************//* Defining APPROXIMATE_MUL_BY_SHIFT increases performance by approximation * the multiplications by shifts. I think there's no change in the * calculated picture, but I'm not sure, so the choice is still in here. */#undef APPROXIMATE_MUL_BY_SHIFT/* Allows printing the dynamic quantization tables (only if debug >= 5) */#define PRINT_QT/****************************************************************************** * Globals ******************************************************************************/extern int ov518_color;/* Static quantization. This uses a fixed quantization table versus the one * that is normally embedded in the data. Define this if you see very bad * contrast or "blockiness" in the decompressed output. */static int staticquant = 0;/****************************************************************************** * Local Data Types ******************************************************************************//* Make sure this remains naturally aligned and 2^n bytes in size */struct tree_node {	short left;		/* Index of left child node */	short right;		/* Index of right child node */	signed char depth;	/* Depth (starting at 1) if leaf, else -1 */	signed char coeffbits;	/* Size of coefficient data, or zero if none */	signed char skip;	/* Number of zero coefficients. Unused w/ DC */	char padding;		/* Pad out to 8 bytes */};struct comp_info {	int bytes;		/* Number of processed input bytes */	int bits;		/* Number of unprocessed input bits */	int rawLen;		/* Total number of bytes in input buffer */	unsigned char *qt;	/* Current quantization table */};/****************************************************************************** * Constant Data Definitions ******************************************************************************//* Zig-Zag Table */static const unsigned char ZigZag518[] = {	0x00, 0x02, 0x03, 0x09,	0x01, 0x04, 0x08, 0x0a,	0x05, 0x07, 0x0b, 0x11,	0x06, 0x0c, 0x10, 0x12,	0x0d, 0x0f, 0x13, 0x19,	0x0e, 0x14, 0x18, 0x1a,	0x15, 0x17, 0x1b, 0x1e,	0x16, 0x1c, 0x1d, 0x1f};/* Huffman trees */static const struct tree_node treeYAC[] = {	{  1,   4, -1,  0, -1}, {  2,   3, -1,  0, -1},	{ -1,  -1,  2,  1,  0}, { -1,  -1,  2,  2,  0},	{  5,   9, -1,  0, -1}, {  6,   7, -1,  0, -1},	{ -1,  -1,  3,  3,  0}, {323,   8, -1,  0, -1},	{ -1,  -1,  4,  4,  0}, { 10,  13, -1,  0, -1},	{ 38,  11, -1,  0, -1}, { 12,  39, -1,  0, -1},	{ -1,  -1,  5,  5,  0}, { 59,  14, -1,  0, -1},	{ 15,  18, -1,  0, -1}, { 16, 113, -1,  0, -1},	{ 17,  40, -1,  0, -1}, { -1,  -1,  7,  6,  0},	{ 19,  22, -1,  0, -1}, { 20,  41, -1,  0, -1},	{ 21,  61, -1,  0, -1}, { -1,  -1,  8,  7,  0},	{ 23,  27, -1,  0, -1}, {169,  24, -1,  0, -1},	{208,  25, -1,  0, -1}, { 26,  62, -1,  0, -1},	{ -1,  -1, 10,  8,  0}, { 44,  28, -1,  0, -1},	{ 63,  29, -1,  0, -1}, { 30, 191, -1,  0, -1},	{ 31, 119, -1,  0, -1}, { 32,  82, -1,  0, -1},	{ 33,  55, -1,  0, -1}, { 34,  48, -1,  0, -1},	{171,  35, -1,  0, -1}, { 36,  37, -1,  0, -1},	{ -1,  -1, 16,  9,  0}, { -1,  -1, 16, 10,  0},	{ -1,  -1,  4,  1,  1}, { -1,  -1,  5,  2,  1},	{ -1,  -1,  7,  3,  1}, {151,  42, -1,  0, -1},	{ 43,  79, -1,  0, -1}, { -1,  -1,  9,  4,  1},	{ 96,  45, -1,  0, -1}, {246,  46, -1,  0, -1},	{ 47, 115, -1,  0, -1}, { -1,  -1, 11,  5,  1},	{ 49,  52, -1,  0, -1}, { 50,  51, -1,  0, -1},	{ -1,  -1, 16,  6,  1}, { -1,  -1, 16,  7,  1},	{ 53,  54, -1,  0, -1}, { -1,  -1, 16,  8,  1},	{ -1,  -1, 16,  9,  1}, { 56,  71, -1,  0, -1},	{ 57,  68, -1,  0, -1}, { 58,  67, -1,  0, -1},	{ -1,  -1, 16, 10,  1}, { 60,  77, -1,  0, -1},	{ -1,  -1,  5,  1,  2}, { -1,  -1,  8,  2,  2},	{ -1,  -1, 10,  3,  2}, {265,  64, -1,  0, -1},	{ 65, 134, -1,  0, -1}, { 66,  80, -1,  0, -1},	{ -1,  -1, 12,  4,  2}, { -1,  -1, 16,  5,  2},	{ 69,  70, -1,  0, -1}, { -1,  -1, 16,  6,  2},	{ -1,  -1, 16,  7,  2}, { 72,  75, -1,  0, -1},	{ 73,  74, -1,  0, -1}, { -1,  -1, 16,  8,  2},	{ -1,  -1, 16,  9,  2}, { 76,  81, -1,  0, -1},	{ -1,  -1, 16, 10,  2}, { 78,  95, -1,  0, -1},	{ -1,  -1,  6,  1,  3}, { -1,  -1,  9,  2,  3},	{ -1,  -1, 12,  3,  3}, { -1,  -1, 16,  4,  3},	{ 83, 101, -1,  0, -1}, { 84,  91, -1,  0, -1},	{ 85,  88, -1,  0, -1}, { 86,  87, -1,  0, -1},	{ -1,  -1, 16,  5,  3}, { -1,  -1, 16,  6,  3},	{ 89,  90, -1,  0, -1}, { -1,  -1, 16,  7,  3},	{ -1,  -1, 16,  8,  3}, { 92,  98, -1,  0, -1},	{ 93,  94, -1,  0, -1}, { -1,  -1, 16,  9,  3},	{ -1,  -1, 16, 10,  3}, { -1,  -1,  6,  1,  4},	{ 97, 225, -1,  0, -1}, { -1,  -1, 10,  2,  4},	{ 99, 100, -1,  0, -1}, { -1,  -1, 16,  3,  4},	{ -1,  -1, 16,  4,  4}, {102, 109, -1,  0, -1},	{103, 106, -1,  0, -1}, {104, 105, -1,  0, -1},	{ -1,  -1, 16,  5,  4}, { -1,  -1, 16,  6,  4},	{107, 108, -1,  0, -1}, { -1,  -1, 16,  7,  4},	{ -1,  -1, 16,  8,  4}, {110, 116, -1,  0, -1},	{111, 112, -1,  0, -1}, { -1,  -1, 16,  9,  4},	{ -1,  -1, 16, 10,  4}, {114, 133, -1,  0, -1},	{ -1,  -1,  7,  1,  5}, { -1,  -1, 11,  2,  5},	{117, 118, -1,  0, -1}, { -1,  -1, 16,  3,  5},	{ -1,  -1, 16,  4,  5}, {120, 156, -1,  0, -1},	{121, 139, -1,  0, -1}, {122, 129, -1,  0, -1},	{123, 126, -1,  0, -1}, {124, 125, -1,  0, -1},	{ -1,  -1, 16,  5,  5}, { -1,  -1, 16,  6,  5},	{127, 128, -1,  0, -1}, { -1,  -1, 16,  7,  5},	{ -1,  -1, 16,  8,  5}, {130, 136, -1,  0, -1},	{131, 132, -1,  0, -1}, { -1,  -1, 16,  9,  5},	{ -1,  -1, 16, 10,  5}, { -1,  -1,  7,  1,  6},	{135, 152, -1,  0, -1}, { -1,  -1, 12,  2,  6},	{137, 138, -1,  0, -1}, { -1,  -1, 16,  3,  6},	{ -1,  -1, 16,  4,  6}, {140, 147, -1,  0, -1},	{141, 144, -1,  0, -1}, {142, 143, -1,  0, -1},	{ -1,  -1, 16,  5,  6}, { -1,  -1, 16,  6,  6},	{145, 146, -1,  0, -1}, { -1,  -1, 16,  7,  6},	{ -1,  -1, 16,  8,  6}, {148, 153, -1,  0, -1},	{149, 150, -1,  0, -1}, { -1,  -1, 16,  9,  6},	{ -1,  -1, 16, 10,  6}, { -1,  -1,  8,  1,  7},	{ -1,  -1, 12,  2,  7}, {154, 155, -1,  0, -1},	{ -1,  -1, 16,  3,  7}, { -1,  -1, 16,  4,  7},	{157, 175, -1,  0, -1}, {158, 165, -1,  0, -1},	{159, 162, -1,  0, -1}, {160, 161, -1,  0, -1},	{ -1,  -1, 16,  5,  7}, { -1,  -1, 16,  6,  7},	{163, 164, -1,  0, -1}, { -1,  -1, 16,  7,  7},	{ -1,  -1, 16,  8,  7}, {166, 172, -1,  0, -1},	{167, 168, -1,  0, -1}, { -1,  -1, 16,  9,  7},	{ -1,  -1, 16, 10,  7}, {170, 187, -1,  0, -1},	{ -1,  -1,  9,  1,  8}, { -1,  -1, 15,  2,  8},	{173, 174, -1,  0, -1}, { -1,  -1, 16,  3,  8},	{ -1,  -1, 16,  4,  8}, {176, 183, -1,  0, -1},	{177, 180, -1,  0, -1}, {178, 179, -1,  0, -1},	{ -1,  -1, 16,  5,  8}, { -1,  -1, 16,  6,  8},	{181, 182, -1,  0, -1}, { -1,  -1, 16,  7,  8},	{ -1,  -1, 16,  8,  8}, {184, 188, -1,  0, -1},	{185, 186, -1,  0, -1}, { -1,  -1, 16,  9,  8},	{ -1,  -1, 16, 10,  8}, { -1,  -1,  9,  1,  9},	{189, 190, -1,  0, -1}, { -1,  -1, 16,  2,  9},	{ -1,  -1, 16,  3,  9}, {192, 258, -1,  0, -1},	{193, 226, -1,  0, -1}, {194, 210, -1,  0, -1},	{195, 202, -1,  0, -1}, {196, 199, -1,  0, -1},	{197, 198, -1,  0, -1}, { -1,  -1, 16,  4,  9},	{ -1,  -1, 16,  5,  9}, {200, 201, -1,  0, -1},	{ -1,  -1, 16,  6,  9}, { -1,  -1, 16,  7,  9},	{203, 206, -1,  0, -1}, {204, 205, -1,  0, -1},	{ -1,  -1, 16,  8,  9}, { -1,  -1, 16,  9,  9},	{207, 209, -1,  0, -1}, { -1,  -1, 16, 10,  9},	{ -1,  -1,  9,  1, 10}, { -1,  -1, 16,  2, 10},	{211, 218, -1,  0, -1}, {212, 215, -1,  0, -1},	{213, 214, -1,  0, -1}, { -1,  -1, 16,  3, 10},	{ -1,  -1, 16,  4, 10}, {216, 217, -1,  0, -1},	{ -1,  -1, 16,  5, 10}, { -1,  -1, 16,  6, 10},	{219, 222, -1,  0, -1}, {220, 221, -1,  0, -1},	{ -1,  -1, 16,  7, 10}, { -1,  -1, 16,  8, 10},	{223, 224, -1,  0, -1}, { -1,  -1, 16,  9, 10},	{ -1,  -1, 16, 10, 10}, { -1,  -1, 10,  1, 11},	{227, 242, -1,  0, -1}, {228, 235, -1,  0, -1},	{229, 232, -1,  0, -1}, {230, 231, -1,  0, -1},	{ -1,  -1, 16,  2, 11}, { -1,  -1, 16,  3, 11},	{233, 234, -1,  0, -1}, { -1,  -1, 16,  4, 11},	{ -1,  -1, 16,  5, 11}, {236, 239, -1,  0, -1},	{237, 238, -1,  0, -1}, { -1,  -1, 16,  6, 11},	{ -1,  -1, 16,  7, 11}, {240, 241, -1,  0, -1},	{ -1,  -1, 16,  8, 11}, { -1,  -1, 16,  9, 11},	{243, 251, -1,  0, -1}, {244, 248, -1,  0, -1},	{245, 247, -1,  0, -1}, { -1,  -1, 16, 10, 11},	{ -1,  -1, 10,  1, 12}, { -1,  -1, 16,  2, 12},	{249, 250, -1,  0, -1}, { -1,  -1, 16,  3, 12},	{ -1,  -1, 16,  4, 12}, {252, 255, -1,  0, -1},	{253, 254, -1,  0, -1}, { -1,  -1, 16,  5, 12},	{ -1,  -1, 16,  6, 12}, {256, 257, -1,  0, -1},	{ -1,  -1, 16,  7, 12}, { -1,  -1, 16,  8, 12},	{259, 292, -1,  0, -1}, {260, 277, -1,  0, -1},	{261, 270, -1,  0, -1}, {262, 267, -1,  0, -1},	{263, 264, -1,  0, -1}, { -1,  -1, 16,  9, 12},	{ -1,  -1, 16, 10, 12}, {266, 322, -1,  0, -1},	{ -1,  -1, 11,  1, 13}, {268, 269, -1,  0, -1},	{ -1,  -1, 16,  2, 13}, { -1,  -1, 16,  3, 13},	{271, 274, -1,  0, -1}, {272, 273, -1,  0, -1},	{ -1,  -1, 16,  4, 13}, { -1,  -1, 16,  5, 13},	{275, 276, -1,  0, -1}, { -1,  -1, 16,  6, 13},	{ -1,  -1, 16,  7, 13}, {278, 285, -1,  0, -1},	{279, 282, -1,  0, -1}, {280, 281, -1,  0, -1},	{ -1,  -1, 16,  8, 13}, { -1,  -1, 16,  9, 13},	{283, 284, -1,  0, -1}, { -1,  -1, 16, 10, 13},	{ -1,  -1, 16,  1, 14}, {286, 289, -1,  0, -1},	{287, 288, -1,  0, -1}, { -1,  -1, 16,  2, 14},	{ -1,  -1, 16,  3, 14}, {290, 291, -1,  0, -1},	{ -1,  -1, 16,  4, 14}, { -1,  -1, 16,  5, 14},	{293, 308, -1,  0, -1}, {294, 301, -1,  0, -1},	{295, 298, -1,  0, -1}, {296, 297, -1,  0, -1},	{ -1,  -1, 16,  6, 14}, { -1,  -1, 16,  7, 14},	{299, 300, -1,  0, -1}, { -1,  -1, 16,  8, 14},	{ -1,  -1, 16,  9, 14}, {302, 305, -1,  0, -1},	{303, 304, -1,  0, -1}, { -1,  -1, 16, 10, 14},	{ -1,  -1, 16,  1, 15}, {306, 307, -1,  0, -1},	{ -1,  -1, 16,  2, 15}, { -1,  -1, 16,  3, 15},	{309, 316, -1,  0, -1}, {310, 313, -1,  0, -1},	{311, 312, -1,  0, -1}, { -1,  -1, 16,  4, 15},	{ -1,  -1, 16,  5, 15}, {314, 315, -1,  0, -1},	{ -1,  -1, 16,  6, 15}, { -1,  -1, 16,  7, 15},	{317, 320, -1,  0, -1}, {318, 319, -1,  0, -1},	{ -1,  -1, 16,  8, 15}, { -1,  -1, 16,  9, 15},	{321,  -1, -1,  0, -1}, { -1,  -1, 16, 10, 15},	{ -1,  -1, 11,  0, 16}, { -1,  -1,  4,  0, -1},};static const struct tree_node treeUVAC[] = {	{  1,   3, -1,  0, -1}, {323,   2, -1,  0, -1},	{ -1,  -1,  2,  1,  0}, {  4,   8, -1,  0, -1},	{  5,   6, -1,  0, -1}, { -1,  -1,  3,  2,  0},	{  7,  37, -1,  0, -1}, { -1,  -1,  4,  3,  0},	{  9,  13, -1,  0, -1}, { 10,  60, -1,  0, -1},	{ 11,  12, -1,  0, -1}, { -1,  -1,  5,  4,  0},	{ -1,  -1,  5,  5,  0}, { 14,  17, -1,  0, -1},	{ 15,  97, -1,  0, -1}, { 16,  38, -1,  0, -1},	{ -1,  -1,  6,  6,  0}, { 18,  21, -1,  0, -1},	{ 19,  39, -1,  0, -1}, { 20, 135, -1,  0, -1},	{ -1,  -1,  7,  7,  0}, { 22,  26, -1,  0, -1},	{ 82,  23, -1,  0, -1}, { 24,  99, -1,  0, -1},	{ 25,  42, -1,  0, -1}, { -1,  -1,  9,  8,  0},	{ 27,  31, -1,  0, -1}, {211,  28, -1,  0, -1},	{248,  29, -1,  0, -1}, { 30,  63, -1,  0, -1},	{ -1,  -1, 10,  9,  0}, { 43,  32, -1,  0, -1},	{ 33,  48, -1,  0, -1}, {153,  34, -1,  0, -1},	{ 35,  64, -1,  0, -1}, { 36,  47, -1,  0, -1},	{ -1,  -1, 12, 10,  0}, { -1,  -1,  4,  1,  1},	{ -1,  -1,  6,  2,  1}, {152,  40, -1,  0, -1},	{ 41,  62, -1,  0, -1}, { -1,  -1,  8,  3,  1},	{ -1,  -1,  9,  4,  1}, { 84,  44, -1,  0, -1},	{322,  45, -1,  0, -1}, { 46, 136, -1,  0, -1},	{ -1,  -1, 11,  5,  1}, { -1,  -1, 12,  6,  1},	{ 49, 189, -1,  0, -1}, { 50, 119, -1,  0, -1},	{ 51,  76, -1,  0, -1}, { 66,  52, -1,  0, -1},	{ 53,  69, -1,  0, -1}, { 54,  57, -1,  0, -1},	{ 55,  56, -1,  0, -1}, { -1,  -1, 16,  7,  1},	{ -1,  -1, 16,  8,  1}, { 58,  59, -1,  0, -1},	{ -1,  -1, 16,  9,  1}, { -1,  -1, 16, 10,  1},	{ 61,  81, -1,  0, -1}, { -1,  -1,  5,  1,  2},	{ -1,  -1,  8,  2,  2}, { -1,  -1, 10,  3,  2},	{ 65,  86, -1,  0, -1}, { -1,  -1, 12,  4,  2},	{286,  67, -1,  0, -1}, { 68, 304, -1,  0, -1},	{ -1,  -1, 15,  5,  2}, { 70,  73, -1,  0, -1},	{ 71,  72, -1,  0, -1}, { -1,  -1, 16,  6,  2},	{ -1,  -1, 16,  7,  2}, { 74,  75, -1,  0, -1},	{ -1,  -1, 16,  8,  2}, { -1,  -1, 16,  9,  2},	{ 77, 102, -1,  0, -1}, { 78,  91, -1,  0, -1},	{ 79,  88, -1,  0, -1}, { 80,  87, -1,  0, -1},	{ -1,  -1, 16, 10,  2}, { -1,  -1,  5,  1,  3},	{ 83, 171, -1,  0, -1}, { -1,  -1,  8,  2,  3},	{ 85, 117, -1,  0, -1}, { -1,  -1, 10,  3,  3},	{ -1,  -1, 12,  4,  3}, { -1,  -1, 16,  5,  3},	{ 89,  90, -1,  0, -1}, { -1,  -1, 16,  6,  3},	{ -1,  -1, 16,  7,  3}, { 92,  95, -1,  0, -1},	{ 93,  94, -1,  0, -1}, { -1,  -1, 16,  8,  3},	{ -1,  -1, 16,  9,  3}, { 96, 101, -1,  0, -1},	{ -1,  -1, 16, 10,  3}, { 98, 116, -1,  0, -1},	{ -1,  -1,  6,  1,  4}, {100, 188, -1,  0, -1},	{ -1,  -1,  9,  2,  4}, { -1,  -1, 16,  3,  4},	{103, 110, -1,  0, -1}, {104, 107, -1,  0, -1},	{105, 106, -1,  0, -1}, { -1,  -1, 16,  4,  4},	{ -1,  -1, 16,  5,  4}, {108, 109, -1,  0, -1},	{ -1,  -1, 16,  6,  4}, { -1,  -1, 16,  7,  4},	{111, 114, -1,  0, -1}, {112, 113, -1,  0, -1},	{ -1,  -1, 16,  8,  4}, { -1,  -1, 16,  9,  4},	{115, 118, -1,  0, -1}, { -1,  -1, 16, 10,  4},	{ -1,  -1,  6,  1,  5}, { -1,  -1, 10,  2,  5},	{ -1,  -1, 16,  3,  5}, {120, 156, -1,  0, -1},	{121, 138, -1,  0, -1}, {122, 129, -1,  0, -1},	{123, 126, -1,  0, -1}, {124, 125, -1,  0, -1},	{ -1,  -1, 16,  4,  5}, { -1,  -1, 16,  5,  5},	{127, 128, -1,  0, -1}, { -1,  -1, 16,  6,  5},	{ -1,  -1, 16,  7,  5}, {130, 133, -1,  0, -1},	{131, 132, -1,  0, -1}, { -1,  -1, 16,  8,  5},	{ -1,  -1, 16,  9,  5}, {134, 137, -1,  0, -1},	{ -1,  -1, 16, 10,  5}, { -1,  -1,  7,  1,  6},	{ -1,  -1, 11,  2,  6}, { -1,  -1, 16,  3,  6},	{139, 146, -1,  0, -1}, {140, 143, -1,  0, -1},	{141, 142, -1,  0, -1}, { -1,  -1, 16,  4,  6},	{ -1,  -1, 16,  5,  6}, {144, 145, -1,  0, -1},	{ -1,  -1, 16,  6,  6}, { -1,  -1, 16,  7,  6},	{147, 150, -1,  0, -1}, {148, 149, -1,  0, -1},	{ -1,  -1, 16,  8,  6}, { -1,  -1, 16,  9,  6},	{151, 155, -1,  0, -1}, { -1,  -1, 16, 10,  6},	{ -1,  -1,  7,  1,  7}, {154, 267, -1,  0, -1},	{ -1,  -1, 11,  2,  7}, { -1,  -1, 16,  3,  7},	{157, 173, -1,  0, -1}, {158, 165, -1,  0, -1},	{159, 162, -1,  0, -1}, {160, 161, -1,  0, -1},	{ -1,  -1, 16,  4,  7}, { -1,  -1, 16,  5,  7},	{163, 164, -1,  0, -1}, { -1,  -1, 16,  6,  7},	{ -1,  -1, 16,  7,  7}, {166, 169, -1,  0, -1},	{167, 168, -1,  0, -1}, { -1,  -1, 16,  8,  7},	{ -1,  -1, 16,  9,  7}, {170, 172, -1,  0, -1},	{ -1,  -1, 16, 10,  7}, { -1,  -1,  8,  1,  8},	{ -1,  -1, 16,  2,  8}, {174, 181, -1,  0, -1},	{175, 178, -1,  0, -1}, {176, 177, -1,  0, -1},	{ -1,  -1, 16,  3,  8}, { -1,  -1, 16,  4,  8},	{179, 180, -1,  0, -1}, { -1,  -1, 16,  5,  8},	{ -1,  -1, 16,  6,  8}, {182, 185, -1,  0, -1},	{183, 184, -1,  0, -1}, { -1,  -1, 16,  7,  8},	{ -1,  -1, 16,  8,  8}, {186, 187, -1,  0, -1},	{ -1,  -1, 16,  9,  8}, { -1,  -1, 16, 10,  8},	{ -1,  -1,  9,  1,  9}, {190, 257, -1,  0, -1},	{191, 224, -1,  0, -1}, {192, 207, -1,  0, -1},	{193, 200, -1,  0, -1}, {194, 197, -1,  0, -1},	{195, 196, -1,  0, -1}, { -1,  -1, 16,  2,  9},	{ -1,  -1, 16,  3,  9}, {198, 199, -1,  0, -1},	{ -1,  -1, 16,  4,  9}, { -1,  -1, 16,  5,  9},	{201, 204, -1,  0, -1}, {202, 203, -1,  0, -1},	{ -1,  -1, 16,  6,  9}, { -1,  -1, 16,  7,  9},	{205, 206, -1,  0, -1}, { -1,  -1, 16,  8,  9},	{ -1,  -1, 16,  9,  9}, {208, 217, -1,  0, -1},	{209, 214, -1,  0, -1}, {210, 213, -1,  0, -1},	{ -1,  -1, 16, 10,  9}, {212, 230, -1,  0, -1},	{ -1,  -1,  9,  1, 10}, { -1,  -1, 16,  2, 10},	{215, 216, -1,  0, -1}, { -1,  -1, 16,  3, 10},	{ -1,  -1, 16,  4, 10}, {218, 221, -1,  0, -1},	{219, 220, -1,  0, -1}, { -1,  -1, 16,  5, 10},	{ -1,  -1, 16,  6, 10}, {222, 223, -1,  0, -1},	{ -1,  -1, 16,  7, 10}, { -1,  -1, 16,  8, 10},	{225, 241, -1,  0, -1}, {226, 234, -1,  0, -1},	{227, 231, -1,  0, -1}, {228, 229, -1,  0, -1},	{ -1,  -1, 16,  9, 10}, { -1,  -1, 16, 10, 10},	{ -1,  -1,  9,  1, 11}, {232, 233, -1,  0, -1},	{ -1,  -1, 16,  2, 11}, { -1,  -1, 16,  3, 11},	{235, 238, -1,  0, -1}, {236, 237, -1,  0, -1},	{ -1,  -1, 16,  4, 11}, { -1,  -1, 16,  5, 11},	{239, 240, -1,  0, -1}, { -1,  -1, 16,  6, 11},	{ -1,  -1, 16,  7, 11}, {242, 250, -1,  0, -1},	{243, 246, -1,  0, -1}, {244, 245, -1,  0, -1},	{ -1,  -1, 16,  8, 11}, { -1,  -1, 16,  9, 11},	{247, 249, -1,  0, -1}, { -1,  -1, 16, 10, 11},	{ -1,  -1,  9,  1, 12}, { -1,  -1, 16,  2, 12},	{251, 254, -1,  0, -1}, {252, 253, -1,  0, -1},	{ -1,  -1, 16,  3, 12}, { -1,  -1, 16,  4, 12},	{255, 256, -1,  0, -1}, { -1,  -1, 16,  5, 12},	{ -1,  -1, 16,  6, 12}, {258, 291, -1,  0, -1},	{259, 275, -1,  0, -1}, {260, 268, -1,  0, -1},	{261, 264, -1,  0, -1}, {262, 263, -1,  0, -1},	{ -1,  -1, 16,  7, 12}, { -1,  -1, 16,  8, 12},	{265, 266, -1,  0, -1}, { -1,  -1, 16,  9, 12},	{ -1,  -1, 16, 10, 12}, { -1,  -1, 11,  1, 13},	{269, 272, -1,  0, -1}, {270, 271, -1,  0, -1},	{ -1,  -1, 16,  2, 13}, { -1,  -1, 16,  3, 13},	{273, 274, -1,  0, -1}, { -1,  -1, 16,  4, 13},	{ -1,  -1, 16,  5, 13}, {276, 283, -1,  0, -1},	{277, 280, -1,  0, -1}, {278, 279, -1,  0, -1},	{ -1,  -1, 16,  6, 13}, { -1,  -1, 16,  7, 13},	{281, 282, -1,  0, -1}, { -1,  -1, 16,  8, 13},	{ -1,  -1, 16,  9, 13}, {284, 288, -1,  0, -1},	{285, 287, -1,  0, -1}, { -1,  -1, 16, 10, 13},	{ -1,  -1, 14,  1, 14}, { -1,  -1, 16,  2, 14},	{289, 290, -1,  0, -1}, { -1,  -1, 16,  3, 14},	{ -1,  -1, 16,  4, 14}, {292, 308, -1,  0, -1},	{293, 300, -1,  0, -1}, {294, 297, -1,  0, -1},	{295, 296, -1,  0, -1}, { -1,  -1, 16,  5, 14},	{ -1,  -1, 16,  6, 14}, {298, 299, -1,  0, -1},	{ -1,  -1, 16,  7, 14}, { -1,  -1, 16,  8, 14},	{301, 305, -1,  0, -1}, {302, 303, -1,  0, -1},	{ -1,  -1, 16,  9, 14}, { -1,  -1, 16, 10, 14},	{ -1,  -1, 15,  1, 15}, {306, 307, -1,  0, -1},	{ -1,  -1, 16,  2, 15}, { -1,  -1, 16,  3, 15},	{309, 316, -1,  0, -1}, {310, 313, -1,  0, -1},	{311, 312, -1,  0, -1}, { -1,  -1, 16,  4, 15},	{ -1,  -1, 16,  5, 15}, {314, 315, -1,  0, -1},	{ -1,  -1, 16,  6, 15}, { -1,  -1, 16,  7, 15},	{317, 320, -1,  0, -1}, {318, 319, -1,  0, -1},	{ -1,  -1, 16,  8, 15}, { -1,  -1, 16,  9, 15},	{321,  -1, -1,  0, -1}, { -1,  -1, 16, 10, 15},	{ -1,  -1, 10,  0, 16}, { -1,  -1,  2,  0, -1},};static const struct tree_node treeYDC[] = {	{  1,   6, -1,  0}, {  2,   3, -1,  0},	{ -1,  -1,  2,  0}, {  4,   5, -1,  0},	{ -1,  -1,  3,  1}, { -1,  -1,  3,  2},	{  7,  10, -1,  0}, {  8,   9, -1,  0},	{ -1,  -1,  3,  3}, { -1,  -1,  3,  4},	{ 11,  12, -1,  0}, { -1,  -1,  3,  5},	{ 13,  14, -1,  0}, { -1,  -1,  4,  6},	{ 15,  16, -1,  0}, { -1,  -1,  5,  7},	{ 17,  18, -1,  0}, { -1,  -1,  6,  8},	{ 19,  20, -1,  0}, { -1,  -1,  7,  9},	{ 21,  22, -1,  0}, { -1,  -1,  8, 10},	{ 23,  -1, -1,  0}, { -1,  -1,  9, 11},};static const struct tree_node treeUVDC[] = {	{  1,   4, -1,  0}, {  2,   3, -1,  0},	{ -1,  -1,  2,  0}, { -1,  -1,  2,  1},	{  5,   6, -1,  0}, { -1,  -1,  2,  2},	{  7,   8, -1,  0}, { -1,  -1,  3,  3},	{  9,  10, -1,  0}, { -1,  -1,  4,  4},	{ 11,  12, -1,  0}, { -1,  -1,  5,  5},	{ 13,  14, -1,  0}, { -1,  -1,  6,  6},	{ 15,  16, -1,  0}, { -1,  -1,  7,  7},	{ 17,  18, -1,  0}, { -1,  -1,  8,  8},	{ 19,  20, -1,  0}, { -1,  -1,  9,  9},	{ 21,  22, -1,  0}, { -1,  -1, 10, 10},	{ 23,  -1, -1,  0}, { -1,  -1, 11, 11},};/****************************************************************************** * Debugging ******************************************************************************/#ifdef PRINT_QT#define PRN_QT_ROW(a, i) PDEBUG(5, "%02x %02x %02x %02x %02x %02x %02x %02x", \	(a)[(i)], (a)[(i)+1], (a)[(i)+2], (a)[(i)+3], (a)[(i)+4], (a)[(i)+5], \	(a)[(i)+6], (a)[(i)+7])static inline voidprint_qt(unsigned char *qt){	PDEBUG(5, "Y Quantization table:");	PRN_QT_ROW(qt, 0);	PRN_QT_ROW(qt, 8);	PRN_QT_ROW(qt, 16);	PRN_QT_ROW(qt, 24);	PDEBUG(5, "UV Quantization table:");	PRN_QT_ROW(qt, 32);	PRN_QT_ROW(qt, 40);	PRN_QT_ROW(qt, 48);	PRN_QT_ROW(qt, 56);}#elsestatic inline void print_qt(unsigned char *qt) {  }#endif	/* PRINT_QT *//****************************************************************************** * Huffman Decoder ******************************************************************************//* Note: There is no penalty for passing the tree as an argument, since dummy * args are passed anyway (to maintain 16-byte stack alignment), and since the * address is loaded into a register either way. *//* If no node is found, coeffbits and skip will not be modified *//* Return: Depth of node found, or -1 if invalid input code */static int getNodeAC(unsigned int in, signed char *coeffbits, signed char *skip,	  const struct tree_node *tree){	int node = 0;	int i = 0;	int depth;	do {		if ((in & 0x80000000) == 0)			node = tree[node].left;		else			node = tree[node].right;		if (node == -1)			break;

⌨️ 快捷键说明

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