/*
* libmad - MPEG audio decoder library
* Copyright (C) 2000-2004 Underbit Technologies, Inc.
*
* 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
*
* $Id: huffman.c,v 1.10 2004/01/23 09:41:32 rob Exp $
*/
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
# include "global.h"
# include "huffman.h"
/*
* These are the Huffman code words for Layer III.
* The data for these tables are derived from Table B.7 of ISO/IEC 11172-3.
*
* These tables support decoding up to 4 Huffman code bits at a time.
*/
# if defined(__GNUC__) || \
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
# define PTR(offs, bits) { .ptr = { 0, bits, offs } }
# define V(v, w, x, y, hlen) { .value = { 1, hlen, v, w, x, y } }
# else
# define PTR(offs, bits) { { 0, bits, offs } }
# if defined(WORDS_BIGENDIAN)
# define V(v, w, x, y, hlen) { { 1, hlen, (v << 11) | (w << 10) | \
(x << 9) | (y << 8) } }
# else
# define V(v, w, x, y, hlen) { { 1, hlen, (v << 0) | (w << 1) | \
(x << 2) | (y << 3) } }
# endif
# endif
static
union huffquad const hufftabA[] = {
/* 0000 */ PTR(16, 2),
/* 0001 */ PTR(20, 2),
/* 0010 */ PTR(24, 1),
/* 0011 */ PTR(26, 1),
/* 0100 */ V(0, 0, 1, 0, 4),
/* 0101 */ V(0, 0, 0, 1, 4),
/* 0110 */ V(0, 1, 0, 0, 4),
/* 0111 */ V(1, 0, 0, 0, 4),
/* 1000 */ V(0, 0, 0, 0, 1),
/* 1001 */ V(0, 0, 0, 0, 1),
/* 1010 */ V(0, 0, 0, 0, 1),
/* 1011 */ V(0, 0, 0, 0, 1),
/* 1100 */ V(0, 0, 0, 0, 1),
/* 1101 */ V(0, 0, 0, 0, 1),
/* 1110 */ V(0, 0, 0, 0, 1),
/* 1111 */ V(0, 0, 0, 0, 1),
/* 0000 ... */
/* 00 */ V(1, 0, 1, 1, 2), /* 16 */
/* 01 */ V(1, 1, 1, 1, 2),
/* 10 */ V(1, 1, 0, 1, 2),
/* 11 */ V(1, 1, 1, 0, 2),
/* 0001 ... */
/* 00 */ V(0, 1, 1, 1, 2), /* 20 */
/* 01 */ V(0, 1, 0, 1, 2),
/* 10 */ V(1, 0, 0, 1, 1),
/* 11 */ V(1, 0, 0, 1, 1),
/* 0010 ... */
/* 0 */ V(0, 1, 1, 0, 1), /* 24 */
/* 1 */ V(0, 0, 1, 1, 1),
/* 0011 ... */
/* 0 */ V(1, 0, 1, 0, 1), /* 26 */
/* 1 */ V(1, 1, 0, 0, 1)
};
static
union huffquad const hufftabB[] = {
/* 0000 */ V(1, 1, 1, 1, 4),
/* 0001 */ V(1, 1, 1, 0, 4),
/* 0010 */ V(1, 1, 0, 1, 4),
/* 0011 */ V(1, 1, 0, 0, 4),
/* 0100 */ V(1, 0, 1, 1, 4),
/* 0101 */ V(1, 0, 1, 0, 4),
/* 0110 */ V(1, 0, 0, 1, 4),
/* 0111 */ V(1, 0, 0, 0, 4),
/* 1000 */ V(0, 1, 1, 1, 4),
/* 1001 */ V(0, 1, 1, 0, 4),
/* 1010 */ V(0, 1, 0, 1, 4),
/* 1011 */ V(0, 1, 0, 0, 4),
/* 1100 */ V(0, 0, 1, 1, 4),
/* 1101 */ V(0, 0, 1, 0, 4),
/* 1110 */ V(0, 0, 0, 1, 4),
/* 1111 */ V(0, 0, 0, 0, 4)
};
# undef V
# undef PTR
# if defined(__GNUC__) || \
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
# define PTR(offs, bits) { .ptr = { 0, bits, offs } }
# define V(x, y, hlen) { .value = { 1, hlen, x, y } }
# else
# define PTR(offs, bits) { { 0, bits, offs } }
# if defined(WORDS_BIGENDIAN)
# define V(x, y, hlen) { { 1, hlen, (x << 8) | (y << 4) } }
# else
# define V(x, y, hlen) { { 1, hlen, (x << 0) | (y << 4) } }
# endif
# endif
static
union huffpair const hufftab0[] = {
/* */ V(0, 0, 0)
};
static
union huffpair const hufftab1[] = {
/* 000 */ V(1, 1, 3),
/* 001 */ V(0, 1, 3),
/* 010 */ V(1, 0, 2),
/* 011 */ V(1, 0, 2),
/* 100 */ V(0, 0, 1),
/* 101 */ V(0, 0, 1),
/* 110 */ V(0, 0, 1),
/* 111 */ V(0, 0, 1)
};
static
union huffpair const hufftab2[] = {
/* 000 */ PTR(8, 3),
/* 001 */ V(1, 1, 3),
/* 010 */ V(0, 1, 3),
/* 011 */ V(1, 0, 3),
/* 100 */ V(0, 0, 1),
/* 101 */ V(0, 0, 1),
/* 110 */ V(0, 0, 1),
/* 111 */ V(0, 0, 1),
/* 000 ... */
/* 000 */ V(2, 2, 3), /* 8 */
/* 001 */ V(0, 2, 3),
/* 010 */ V(1, 2, 2),
/* 011 */ V(1, 2, 2),
/* 100 */ V(2, 1, 2),
/* 101 */ V(2, 1, 2),
/* 110 */ V(2, 0, 2),
/* 111 */ V(2, 0, 2)
};
static
union huffpair const hufftab3[] = {
/* 000 */ PTR(8, 3),
/* 001 */ V(1, 0, 3),
/* 010 */ V(1, 1, 2),
/* 011 */ V(1, 1, 2),
/* 100 */ V(0, 1, 2),
/* 101 */ V(0, 1, 2),
/* 110 */ V(0, 0, 2),
/* 111 */ V(0, 0, 2),
/* 000 ... */
/* 000 */ V(2, 2, 3), /* 8 */
/* 001 */ V(0, 2, 3),
/* 010 */ V(1, 2, 2),
/* 011 */ V(1, 2, 2),
/* 100 */ V(2, 1, 2),
/* 101 */ V(2, 1, 2),
/* 110 */ V(2, 0, 2),
/* 111 */ V(2, 0, 2)
};
static
union huffpair const hufftab5[] = {
/* 000 */ PTR(8, 4),
/* 001 */ V(1, 1, 3),
/* 010 */ V(0, 1, 3),
/* 011 */ V(1, 0, 3),
/* 100 */ V(0, 0, 1),
/* 101 */ V(0, 0, 1),
/* 110 */ V(0, 0, 1),
/* 111 */ V(0, 0, 1),
/* 000 ... */
/* 0000 */ PTR(24, 1), /* 8 */
/* 0001 */ V(3, 2, 4),
/* 0010 */ V(3, 1, 3),
/* 0011 */ V(3, 1, 3),
/* 0100 */ V(1, 3, 4),
/* 0101 */ V(0, 3, 4),
/* 0110 */ V(3, 0, 4),
/* 0111 */ V(2, 2, 4),
/* 1000 */ V(1, 2, 3),
/* 1001 */ V(1, 2, 3),
/* 1010 */ V(2, 1, 3),
/* 1011 */ V(2, 1, 3),
/* 1100 */ V(0, 2, 3),
/* 1101 */ V(0, 2, 3),
/* 1110 */ V(2, 0, 3),
/* 1111 */ V(2, 0, 3),
/* 000 0000 ... */
/* 0 */ V(3, 3, 1), /* 24 */
/* 1 */ V(2, 3, 1)
};
static
union huffpair const hufftab6[] = {
/* 0000 */ PTR(16, 3),
/* 0001 */ PTR(24, 1),
/* 0010 */ PTR(26, 1),
/* 0011 */ V(1, 2, 4),
/* 0100 */ V(2, 1, 4),
/* 0101 */ V(2, 0, 4),
/* 0110 */ V(0, 1, 3),
/* 0111 */ V(0, 1, 3),
/* 1000 */ V(1, 1, 2),
/* 1001 */ V(1, 1, 2),
/* 1010 */ V(1, 1, 2),
/* 1011 */ V(1, 1, 2),
/* 1100 */ V(1, 0, 3),
/* 1101 */ V(1, 0, 3),
/* 1110 */ V(0, 0, 3),
/* 1111 */ V(0, 0, 3),
/* 0000 ... */
/* 000 */ V(3, 3, 3), /* 16 */
/* 001 */ V(0, 3, 3),
/* 010 */ V(2, 3, 2),
/* 011 */ V(2, 3, 2),
/* 100 */ V(3, 2, 2),
/* 101 */ V(3, 2, 2),
/* 110 */ V(3, 0, 2),
/* 111 */ V(3, 0, 2),
/* 0001 ... */
/* 0 */ V(1, 3, 1), /* 24 */
/* 1 */ V(3, 1, 1),
/* 0010 ... */
/* 0 */ V(2, 2, 1), /* 26 */
/* 1 */ V(0, 2, 1)
};
static
union huffpair const hufftab7[] = {
/* 0000 */ PTR(16, 4),
/* 0001 */ PTR(32, 4),
/* 0010 */ PTR(48, 2),
/* 0011 */ V(1, 1, 4),
/* 0100 */ V(0, 1, 3),
/* 0101 */ V(0, 1, 3),
/* 0110 */ V(1, 0, 3),
/* 0111 */ V(1, 0, 3),
/* 1000 */ V(0, 0, 1),
/* 1001 */ V(0, 0, 1),
/* 1010 */ V(0, 0, 1),
/* 1011 */ V(0, 0, 1),
/* 1100 */ V(0, 0, 1),
/* 1101 */ V(0, 0, 1),
/* 1110 */ V(0, 0, 1),
/* 1111 */ V(0, 0, 1),
/* 0000 ... */
/* 0000 */ PTR(52, 2), /* 16 */
/* 0001 */ PTR(56, 1),
/* 0010 */ PTR(58, 1),
/* 0011 */ V(1, 5, 4),
/* 0100 */ V(5, 1, 4),
/* 0101 */ PTR(60, 1),
/* 0110 */ V(5, 0, 4),
/* 0111 */ PTR(62, 1),
/* 1000 */ V(2, 4, 4),
/* 1001 */ V(4, 2, 4),
/* 1010 */ V(1, 4, 3),
/* 1011 */ V(1, 4, 3),
/* 1100 */ V(4, 1, 3),
/* 1101 */ V(4, 1, 3),
/* 1110 */ V(4, 0, 3),
/* 1111 */ V(4, 0, 3),
/* 0001 ... */
/* 0000 */ V(0, 4, 4), /* 32 */
/* 0001 */ V(2, 3, 4),
/* 0010 */ V(3, 2, 4),
/* 0011 */ V(0, 3, 4),
/* 0100 */ V(1, 3, 3),
/* 0101 */ V(1, 3, 3),
/* 0110 */ V(3, 1, 3),
/* 0111 */ V(3, 1, 3),
/* 1000 */ V(3, 0, 3),
/* 1001 */ V(3, 0, 3),
/* 1010 */ V(2, 2, 3),
/* 1011 */ V(2, 2, 3),
/* 1100 */ V(1, 2, 2),
/* 1101 */ V(1, 2, 2),
/* 1110 */ V(1, 2, 2),
/* 1111 */ V(1, 2, 2),
/* 0010 ... */
/* 00 */ V(2, 1, 1), /* 48 */
/* 01 */ V(
android音频解码Libmad库
5星 · 超过95%的资源 需积分: 47 14 浏览量
2013-05-31
11:05:43
上传
评论 1
收藏 427KB RAR 举报
oFanRenYiGe
- 粉丝: 1
- 资源: 1
最新资源
- KMP算法(Knuth-Morris-Pratt算法
- KMP算法(Knuth-Morris-Pratt算法
- shufflenet模型-python语言pytorch框架训练识别张嘴闭嘴-不含数据集图片-含逐行注释和说明文档.zip
- resnet模型-基于人工智能的卷积网络训练识别面部表情识别-不含数据集图片-含逐行注释和说明文档
- resnet模型-python语言pytorch框架训练识别香蕉品质-不含数据集图片-含逐行注释和说明文档.zip
- KMP算法(Knuth-Morris-Pratt算法
- mobilenet模型-python训练识别塑料制品分类-不含数据集图片-含逐行注释和说明文档.zip
- KMP算法(Knuth-Morris-Pratt算法
- mobilenet模型-CNN图像分类识别葡萄品级果-不含数据集图片-含逐行注释和说明文档.zip
- KMP算法(Knuth-Morris-Pratt算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页