diff options
Diffstat (limited to 'media/libstagefright/codecs/aacdec/decode_huff_cw_binary.cpp')
-rw-r--r-- | media/libstagefright/codecs/aacdec/decode_huff_cw_binary.cpp | 708 |
1 files changed, 0 insertions, 708 deletions
diff --git a/media/libstagefright/codecs/aacdec/decode_huff_cw_binary.cpp b/media/libstagefright/codecs/aacdec/decode_huff_cw_binary.cpp deleted file mode 100644 index 0d1561b..0000000 --- a/media/libstagefright/codecs/aacdec/decode_huff_cw_binary.cpp +++ /dev/null @@ -1,708 +0,0 @@ -/* ------------------------------------------------------------------ - * Copyright (C) 1998-2009 PacketVideo - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the License for the specific language governing permissions - * and limitations under the License. - * ------------------------------------------------------------------- - */ -/* - - Pathname: ./src/decode_huff_cw_binary.c - Funtions: - decode_huff_cw_tab1 - decode_huff_cw_tab2 - decode_huff_cw_tab3 - decode_huff_cw_tab4 - decode_huff_cw_tab5 - decode_huff_cw_tab6 - decode_huff_cw_tab7 - decode_huff_cw_tab8 - decode_huff_cw_tab9 - decode_huff_cw_tab10 - decode_huff_cw_tab11 - decode_huff_cw_scl - - ------------------------------------------------------------------------------- - REVISION HISTORY - - Description: Updated per review comments - (1) make cw sgined and change "if(cw&0x80000000)" to if(cw<0) - (2) - - Description: Create specific functions for different huffman tables. - - - Description: Added ( Int16) castings to eliminate several compiler warnings - - - Description: Modified huffman tables to allocate int32 variables instead of - int16, which lead to data missaligned for some compiler. - Eliminated casting and unused variables - - - Who: Date: - Description: - ------------------------------------------------------------------------------- - INPUT AND OUTPUT DEFINITIONS - - Inputs: - BITS *pInputStream = pointer to input bit stream - - Local Stores/Buffers/Pointers Needed: - - - Global Stores/Buffers/Pointers Needed: - - - Outputs: - idx = bit field extracted from a leaf entry of packed Huffman Tables - - Pointers and Buffers Modified: - - Local Stores Modified: - - Global Stores Modified: - - ------------------------------------------------------------------------------- - FUNCTION DESCRIPTION - - These functions are used to decode huffman codewords from the input - bitstream using combined binary search and look-up table approach. - - First the codewords are grouped and the input symbol is determined - which group it belongs. Then within that group, a look-up table is - used to determine which codeword the symbol is. - The table is created by ordering the codeword in the table according to their - normalized shifted binary value, i.e., all the codewords are left - shifted to meet the maximum codelength. Example, max codelength is - 10, the codeword with lenth 3 will left shift by 7. - The binary values of after the shift are sorted. - Then the sorted table is divided into several partition. - At the VLC decoding period, input is read in at max codelenght. - The partition is decided using if-else logic. - Inside each partition, a look-up table is used to map the input value - to a correct symbol. Table entries can appear to be repeated according - to the humming distance between adjacent codewords. - ------------------------------------------------------------------------------- - REQUIREMENTS - - ------------------------------------------------------------------------------- - REFERENCES - - (1) MPEG-2 NBC Audio Decoder - "This software module was originally developed by AT&T, Dolby - Laboratories, Fraunhofer Gesellschaft IIS in the course of development - of the MPEG-2 NBC/MPEG-4 Audio standard ISO/IEC 13818-7, 14496-1,2 and - 3. This software module is an implementation of a part of one or more - MPEG-2 NBC/MPEG-4 Audio tools as specified by the MPEG-2 NBC/MPEG-4 - Audio standard. ISO/IEC gives users of the MPEG-2 NBC/MPEG-4 Audio - standards free license to this software module or modifications thereof - for use in hardware or software products claiming conformance to the - MPEG-2 NBC/MPEG-4 Audio standards. Those intending to use this software - module in hardware or software products are advised that this use may - infringe existing patents. The original developer of this software - module and his/her company, the subsequent editors and their companies, - and ISO/IEC have no liability for use of this software module or - modifications thereof in an implementation. Copyright is not released - for non MPEG-2 NBC/MPEG-4 Audio conforming products.The original - developer retains full right to use the code for his/her own purpose, - assign or donate the code to a third party and to inhibit third party - from using the code for non MPEG-2 NBC/MPEG-4 Audio conforming products. - This copyright notice must be included in all copies or derivative - works." - Copyright(c)1996. - - (2) Introduction to Algorithms, - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. - The MIT press, 1990 - - (3) "Selecting an Optimal Huffman Decoder for AAC", - Vladimir Z. Mesarovic, et al. - AES 111th Convention, September 21-24, 2001, New York, USA - ------------------------------------------------------------------------------- - PSEUDO-CODE - - ------------------------------------------------------------------------------- - RESOURCES USED - When the code is written for a specific target processor the - the resources used should be documented below. - - STACK USAGE: - - DATA MEMORY USED: x words - - PROGRAM MEMORY USED: x words - - CLOCK CYCLES: - - ------------------------------------------------------------------------------- -*/ - - -/*---------------------------------------------------------------------------- -; INCLUDES -----------------------------------------------------------------------------*/ -#include "pv_audio_type_defs.h" -#include "huffman.h" - - -/*---------------------------------------------------------------------------- -; MACROS -; Define module specific macros here -----------------------------------------------------------------------------*/ - - -/*---------------------------------------------------------------------------- -; DEFINES -; Include all pre-processor statements here. Include conditional -; compile variables also. -----------------------------------------------------------------------------*/ -#define MAX_CW_LEN (19) -#define MASK_IDX (0x1FF) -#define MASK_RIGHT (0xFE00) - -#define UPPER16 (16) -#define MASK_LOW16 (0xFFFF) -/*---------------------------------------------------------------------------- -; LOCAL FUNCTION DEFINITIONS -; Function Prototype declaration -----------------------------------------------------------------------------*/ - - -/*---------------------------------------------------------------------------- -; LOCAL STORE/BUFFER/POINTER DEFINITIONS -; Variable declaration - defined here and used outside this module -----------------------------------------------------------------------------*/ - - -/*---------------------------------------------------------------------------- -; EXTERNAL FUNCTION REFERENCES -; Declare functions defined elsewhere and referenced in this module -----------------------------------------------------------------------------*/ - - -/*---------------------------------------------------------------------------- -; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES -; Declare variables used in this module but defined elsewhere -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -; FUNCTION CODE -----------------------------------------------------------------------------*/ - -Int decode_huff_cw_tab1( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 11, - pInputStream); - if ((cw >> 10) == 0) - { - pInputStream->usedBits -= (11 - 1); - return 40; /* idx is 40 */ - } - else if ((cw >> 6) <= 23) - { - tab = (cw >> 6) - 16; - } - else if ((cw >> 4) <= 119) - { - tab = (cw >> 4) - 96 + 8; - } - else if ((cw >> 2) <= 503) - { - tab = (cw >> 2) - 480 + 32; - } - else - { - tab = cw - 2016 + 56; - } - - tab = *(huff_tab1 + tab); - - pInputStream->usedBits -= (11 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_cw_tab2( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get9_n_lessbits( - 9, - pInputStream); - if ((cw >> 6) == 0) - { - pInputStream->usedBits -= (9 - 3); /* used 3 bits */ - return 40; /* idx is 40 */ - } - else if ((cw >> 3) <= 49) - { - tab = (cw >> 3) - 8; - } - else if ((cw >> 2) <= 114) - { - tab = (cw >> 2) - 100 + 42; - } - else if ((cw >> 1) <= 248) - { - tab = (cw >> 1) - 230 + 57; - } - else - { - tab = cw - 498 + 76; - } - - tab = *(huff_tab2 + tab); - - pInputStream->usedBits -= (9 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_cw_tab3( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 16, - pInputStream); - if ((cw >> 15) == 0) - { - pInputStream->usedBits -= (16 - 1); /* used 1 bits */ - return 0; /* idx is 0 */ - } - else if ((cw >> 10) <= 57) - { - tab = (cw >> 10) - 32; - } - else if ((cw >> 7) <= 500) - { - tab = (cw >> 7) - 464 + 26; - } - else if ((cw >> 6) <= 1016) - { - tab = (cw >> 6) - 1002 + 63; - } - else if ((cw >> 4) <= 4092) - { - tab = (cw >> 4) - 4068 + 78; - } - else - { - tab = cw - 65488 + 103; - } - - tab = *(huff_tab3 + tab); - - pInputStream->usedBits -= (16 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_cw_tab4( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 12, - pInputStream); - - if ((cw >> 7) <= 25) - { - tab = (cw >> 7); - } - else if ((cw >> 4) <= 246) - { - tab = (cw >> 4) - 208 + 26; - } - else if ((cw >> 2) <= 1017) - { - tab = (cw >> 2) - 988 + 65; - } - else - { - tab = cw - 4072 + 95; - } - - tab = *(huff_tab4 + tab); - - pInputStream->usedBits -= (12 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - - -Int decode_huff_cw_tab5( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 13, - pInputStream); - - if ((cw >> 12) == 0) - { - pInputStream->usedBits -= (13 - 1); /* used 1 bits */ - return 40; /* idx is 40 */ - } - else if ((cw >> 8) <= 27) - { - tab = (cw >> 8) - 16; - } - else if ((cw >> 5) <= 243) - { - tab = (cw >> 5) - 224 + 12; - } - else if ((cw >> 3) <= 1011) - { - tab = (cw >> 3) - 976 + 32; - } - else if ((cw >> 2) <= 2041) - { - tab = (cw >> 2) - 2024 + 68; - } - else - { - tab = cw - 8168 + 86; - } - - tab = *(huff_tab5 + tab); - - pInputStream->usedBits -= (13 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - - -Int decode_huff_cw_tab6( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 11, - pInputStream); - - if ((cw >> 7) <= 8) - { - tab = (cw >> 7); - } - else if ((cw >> 4) <= 116) - { - tab = (cw >> 4) - 72 + 9; - } - else if ((cw >> 2) <= 506) - { - tab = (cw >> 2) - 468 + 54; - } - else - { - tab = cw - 2028 + 93; - } - - tab = *(huff_tab6 + tab); - - pInputStream->usedBits -= (11 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - - -Int decode_huff_cw_tab7( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 12, - pInputStream); - - if ((cw >> 11) == 0) - { - pInputStream->usedBits -= (12 - 1); /* used 1 bits */ - return 0; /* idx is 0 */ - } - else if ((cw >> 6) <= 55) - { - tab = (cw >> 6) - 32; - } - else if ((cw >> 4) <= 243) - { - tab = (cw >> 4) - 224 + 24; - } - else if ((cw >> 2) <= 1018) - { - tab = (cw >> 2) - 976 + 44; - } - else - { - tab = cw - 4076 + 87; - } - - tab = *(huff_tab7 + tab); - - pInputStream->usedBits -= (12 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - - -Int decode_huff_cw_tab8( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 10, - pInputStream); - - if ((cw >> 5) <= 20) - { - tab = (cw >> 5); - } - else if ((cw >> 3) <= 117) - { - tab = (cw >> 3) - 84 + 21; - } - else if ((cw >> 2) <= 250) - { - tab = (cw >> 2) - 236 + 55; - } - else - { - tab = cw - 1004 + 70; - } - - tab = *(huff_tab8 + tab); - - pInputStream->usedBits -= (10 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_cw_tab9( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 15, - pInputStream); - - if ((cw >> 11) <= 12) - { - tab = (cw >> 11); - } - else if ((cw >> 8) <= 114) - { - tab = (cw >> 8) - 104 + 13; - } - else if ((cw >> 6) <= 486) - { - tab = (cw >> 6) - 460 + 24; - } - else if ((cw >> 5) <= 993) - { - tab = (cw >> 5) - 974 + 51; - } - else if ((cw >> 4) <= 2018) - { - tab = (cw >> 4) - 1988 + 71; - } - else if ((cw >> 3) <= 4075) - { - tab = (cw >> 3) - 4038 + 102; - } - else if ((cw >> 2) <= 8183) - { - tab = (cw >> 2) - 8152 + 140; - } - else - { - tab = cw - 32736 + 172; - } - - tab = *(huff_tab9 + tab); - - pInputStream->usedBits -= (15 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_cw_tab10( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 12, - pInputStream); - - if ((cw >> 6) <= 41) - { - tab = (cw >> 6); - } - else if ((cw >> 5) <= 100) - { - tab = (cw >> 5) - 84 + 42; - } - else if ((cw >> 4) <= 226) - { - tab = (cw >> 4) - 202 + 59; - } - else if ((cw >> 3) <= 484) - { - tab = (cw >> 3) - 454 + 84; - } - else if ((cw >> 2) <= 1010) - { - tab = (cw >> 2) - 970 + 115; - } - else if ((cw >> 1) <= 2043) - { - tab = (cw >> 1) - 2022 + 156; - } - else - { - tab = cw - 4088 + 178; - } - - tab = *(huff_tab10 + tab); - - pInputStream->usedBits -= (12 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_cw_tab11( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = get17_n_lessbits( - 12, - pInputStream); - - if ((cw >> 6) <= 26) - { - tab = (cw >> 6); - } - else if ((cw >> 5) <= 69) - { - tab = (cw >> 5) - 54 + 27; - } - else if ((cw >> 4) <= 198) - { - tab = (cw >> 4) - 140 + 43; - } - else if ((cw >> 3) <= 452) - { - tab = (cw >> 3) - 398 + 102; - } - else if ((cw >> 2) <= 1000) - { - tab = (cw >> 2) - 906 + 157; - } - else if ((cw >> 1) <= 2044) - { - tab = (cw >> 1) - 2002 + 252; - } - else - { - tab = cw - 4090 + 295; - } - - tab = *(huff_tab11 + tab); - - pInputStream->usedBits -= (12 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - - -Int decode_huff_scl( - BITS *pInputStream) -{ - Int32 tab; - Int32 cw; - - cw = getbits( - 19, - pInputStream); - - if ((cw >> 18) == 0) - { - pInputStream->usedBits -= (19 - 1); /* used 1 bits */ - return 60; /* idx is 60 */ - } - else if ((cw >> 13) <= 59) - { - tab = (cw >> 13) - 32; - } - else if ((cw >> 10) <= 505) - { - tab = (cw >> 10) - 480 + 28; - } - else if ((cw >> 7) <= 4089) - { - tab = (cw >> 7) - 4048 + 54; - } - else if ((cw >> 5) <= 16377) - { - tab = (cw >> 5) - 16360 + 96; - } - else if ((cw >> 3) <= 65526) - { - tab = (cw >> 3) - 65512 + 114; - } - else if ((cw >> 1) <= 262120) - { - tab = (cw >> 1) - 262108 + 129; - } - else - { - tab = cw - 524242 + 142; - } - - tab = *(huff_tab_scl + tab); - - pInputStream->usedBits -= (19 - (tab & MASK_LOW16)); - return ((Int)(tab >> UPPER16)); -} - |