diff options
Diffstat (limited to 'media/libstagefright/codecs/aacenc')
57 files changed, 3729 insertions, 3729 deletions
diff --git a/media/libstagefright/codecs/aacenc/Android.mk b/media/libstagefright/codecs/aacenc/Android.mk index f9cc6a3..8318ba4 100644 --- a/media/libstagefright/codecs/aacenc/Android.mk +++ b/media/libstagefright/codecs/aacenc/Android.mk @@ -59,7 +59,7 @@ LOCAL_MODULE := libstagefright_aacenc LOCAL_ARM_MODE := arm -LOCAL_STATIC_LIBRARIES := +LOCAL_STATIC_LIBRARIES := LOCAL_SHARED_LIBRARIES := diff --git a/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c b/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c index 2ea9449..2f31de4 100644 --- a/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c +++ b/media/libstagefright/codecs/aacenc/SampleCode/AAC_E_SAMPLES.c @@ -29,11 +29,11 @@ #include "cmnMemory.h" #define VO_AAC_E_OUTPUT 1 -#define READ_SIZE (1024*8) +#define READ_SIZE (1024*8) unsigned char outBuf[1024*8]; unsigned char inBuf[READ_SIZE]; -const char* HelpString = +const char* HelpString = "VisualOn AAC encoder Usage:\n" "voAACEncTest -if <inputfile.pcm> -of <outputfile.aac> -sr <samplerate> -ch <channel> -br <bitrate> -adts <adts> \n" "-if input file name \n" @@ -49,7 +49,7 @@ static int parsecmdline(int argc, char **argv,char **input_filename, char **ou { // notice that: // bitRate/nChannels > 8000 - // bitRate/nChannels < 160000 + // bitRate/nChannels < 160000 // bitRate/nChannels < sampleRate*6 param->adtsUsed = 1; param->bitRate = 0; @@ -69,7 +69,7 @@ static int parsecmdline(int argc, char **argv,char **input_filename, char **ou { argv++; argc--; - *input_filename = *argv; + *input_filename = *argv; } else if (!strcmp(*argv, "-of")) { diff --git a/media/libstagefright/codecs/aacenc/basic_op/basic_op.h b/media/libstagefright/codecs/aacenc/basic_op/basic_op.h index 8291684..ef3c31b 100644 --- a/media/libstagefright/codecs/aacenc/basic_op/basic_op.h +++ b/media/libstagefright/codecs/aacenc/basic_op/basic_op.h @@ -91,7 +91,7 @@ __inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2); #else Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2); #endif - + /* Long sub, 2 */ #if (L_SUB_IS_INLINE) __inline Word32 L_sub(Word32 L_var1, Word32 L_var2); @@ -119,7 +119,7 @@ __inline Word16 add (Word16 var1, Word16 var2); #else Word16 add (Word16 var1, Word16 var2); #endif - + /* Short sub, 1 */ #if (SUB_IS_INLINE) __inline Word16 sub(Word16 var1, Word16 var2); @@ -227,48 +227,48 @@ Word32 L_shr_r (Word32 L_var1, Word16 var2); #if ARMV4_INASM __inline Word32 ASM_L_shr(Word32 L_var1, Word16 var2) { - Word32 result; - asm volatile( - "MOV %[result], %[L_var1], ASR %[var2] \n" + Word32 result; + asm volatile( + "MOV %[result], %[L_var1], ASR %[var2] \n" :[result]"=r"(result) :[L_var1]"r"(L_var1), [var2]"r"(var2) - ); - return result; + ); + return result; } - + __inline Word32 ASM_L_shl(Word32 L_var1, Word16 var2) { - Word32 result; - asm volatile( + Word32 result; + asm volatile( "MOV r2, %[L_var1] \n" "MOV r3, #0x7fffffff\n" - "MOV %[result], %[L_var1], ASL %[var2] \n" + "MOV %[result], %[L_var1], ASL %[var2] \n" "TEQ r2, %[result], ASR %[var2]\n" "EORNE %[result],r3,r2,ASR#31\n" :[result]"+r"(result) :[L_var1]"r"(L_var1), [var2]"r"(var2) :"r2", "r3" - ); - return result; + ); + return result; } __inline Word32 ASM_shr(Word32 L_var1, Word16 var2) { - Word32 result; - asm volatile( + Word32 result; + asm volatile( "CMP %[var2], #15\n" "MOVGE %[var2], #15\n" "MOV %[result], %[L_var1], ASR %[var2]\n" :[result]"=r"(result) - :[L_var1]"r"(L_var1), [var2]"r"(var2) - ); - return result; -} + :[L_var1]"r"(L_var1), [var2]"r"(var2) + ); + return result; +} __inline Word32 ASM_shl(Word32 L_var1, Word16 var2) { - Word32 result; - asm volatile( + Word32 result; + asm volatile( "CMP %[var2], #16\n" "MOVGE %[var2], #16\n" "MOV %[result], %[L_var1], ASL %[var2]\n" @@ -280,9 +280,9 @@ __inline Word32 ASM_shl(Word32 L_var1, Word16 var2) :[result]"+r"(result) :[L_var1]"r"(L_var1), [var2]"r"(var2) :"r2", "r3" - ); - return result; -} + ); + return result; +} #endif /*___________________________________________________________________________ @@ -300,17 +300,17 @@ __inline Word16 saturate(Word32 L_var1) "MOV r3, #1\n" "MOV r2,%[L_var1],ASR#15\n" "RSB r3, r3, r3, LSL #15\n" - "TEQ r2,%[L_var1],ASR#31\n" + "TEQ r2,%[L_var1],ASR#31\n" "EORNE %[result],r3,%[L_var1],ASR#31\n" :[result]"+r"(result) :[L_var1]"r"(L_var1) - :"r2", "r3" + :"r2", "r3" ); return result; #else Word16 var_out; - + //var_out = (L_var1 > (Word32)0X00007fffL) ? (MAX_16) : ((L_var1 < (Word32)0xffff8000L) ? (MIN_16) : ((Word16)L_var1)); if (L_var1 > 0X00007fffL) @@ -419,13 +419,13 @@ __inline Word16 shr (Word16 var1, Word16 var2) __inline Word32 L_mult(Word16 var1, Word16 var2) { #if ARMV5TE_L_MULT - Word32 result; - asm volatile( - "SMULBB %[result], %[var1], %[var2] \n" - "QADD %[result], %[result], %[result] \n" + Word32 result; + asm volatile( + "SMULBB %[result], %[var1], %[var2] \n" + "QADD %[result], %[result], %[result] \n" :[result]"+r"(result) :[var1]"r"(var1), [var2]"r"(var2) - ); + ); return result; #else Word32 L_var_out; @@ -449,14 +449,14 @@ __inline Word32 L_mult(Word16 var1, Word16 var2) __inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) { #if ARMV5TE_L_MSU - Word32 result; - asm volatile( - "SMULBB %[result], %[var1], %[var2] \n" + Word32 result; + asm volatile( + "SMULBB %[result], %[var1], %[var2] \n" "QADD %[result], %[result], %[result] \n" "QSUB %[result], %[L_var3], %[result]\n" :[result]"+r"(result) :[L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2) - ); + ); return result; #else Word32 L_var_out; @@ -473,12 +473,12 @@ __inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) __inline Word32 L_sub(Word32 L_var1, Word32 L_var2) { #if ARMV5TE_L_SUB - Word32 result; - asm volatile( + Word32 result; + asm volatile( "QSUB %[result], %[L_var1], %[L_var2]\n" :[result]"+r"(result) :[L_var1]"r"(L_var1), [L_var2]"r"(L_var2) - ); + ); return result; #else Word32 L_var_out; @@ -588,9 +588,9 @@ __inline Word32 L_shr (Word32 L_var1, Word16 var2) __inline Word16 add (Word16 var1, Word16 var2) { #if ARMV5TE_ADD - Word32 result; - asm volatile( - "ADD %[result], %[var1], %[var2] \n" + Word32 result; + asm volatile( + "ADD %[result], %[var1], %[var2] \n" "MOV r3, #0x1\n" "MOV r2, %[result], ASR #15\n" "RSB r3, r3, r3, LSL, #15\n" @@ -599,7 +599,7 @@ __inline Word16 add (Word16 var1, Word16 var2) :[result]"+r"(result) :[var1]"r"(var1), [var2]"r"(var2) :"r2", "r3" - ); + ); return result; #else Word16 var_out; @@ -618,18 +618,18 @@ __inline Word16 add (Word16 var1, Word16 var2) __inline Word16 sub(Word16 var1, Word16 var2) { #if ARMV5TE_SUB - Word32 result; - asm volatile( + Word32 result; + asm volatile( "MOV r3, #1\n" - "SUB %[result], %[var1], %[var2] \n" + "SUB %[result], %[var1], %[var2] \n" "RSB r3,r3,r3,LSL#15\n" - "MOV r2, %[var1], ASR #15 \n" + "MOV r2, %[var1], ASR #15 \n" "TEQ r2, %[var1], ASR #31 \n" "EORNE %[result], r3, %[result], ASR #31 \n" :[result]"+r"(result) :[var1]"r"(var1), [var2]"r"(var2) :"r2", "r3" - ); + ); return result; #else Word16 var_out; @@ -637,7 +637,7 @@ __inline Word16 sub(Word16 var1, Word16 var2) L_diff = (Word32) var1 - var2; var_out = saturate(L_diff); - + return (var_out); #endif } @@ -657,16 +657,16 @@ __inline Word16 div_s (Word16 var1, Word16 var2) { var_out = 0; L_num = (Word32) var1; - + L_denom = (Word32) var2; - + //return (L_num<<15)/var2; for (iteration = 0; iteration < 15; iteration++) { var_out <<= 1; L_num <<= 1; - + if (L_num >= L_denom) { L_num -= L_denom; @@ -683,8 +683,8 @@ __inline Word16 div_s (Word16 var1, Word16 var2) __inline Word16 mult (Word16 var1, Word16 var2) { #if ARMV5TE_MULT - Word32 result; - asm volatile( + Word32 result; + asm volatile( "SMULBB r2, %[var1], %[var2] \n" "MOV r3, #1\n" "MOV %[result], r2, ASR #15\n" @@ -695,7 +695,7 @@ __inline Word16 mult (Word16 var1, Word16 var2) :[result]"+r"(result) :[var1]"r"(var1), [var2]"r"(var2) :"r2", "r3" - ); + ); return result; #else Word16 var_out; @@ -718,8 +718,8 @@ __inline Word16 mult (Word16 var1, Word16 var2) __inline Word16 norm_s (Word16 var1) { #if ARMV5TE_NORM_S - Word16 result; - asm volatile( + Word16 result; + asm volatile( "MOV r2,%[var1] \n" "CMP r2, #0\n" "RSBLT %[var1], %[var1], #0 \n" @@ -727,11 +727,11 @@ __inline Word16 norm_s (Word16 var1) "SUBNE %[result], %[result], #17\n" "MOVEQ %[result], #0\n" "CMP r2, #-1\n" - "MOVEQ %[result], #15\n" + "MOVEQ %[result], #15\n" :[result]"+r"(result) :[var1]"r"(var1) :"r2" - ); + ); return result; #else Word16 var_out; @@ -768,15 +768,15 @@ __inline Word16 norm_s (Word16 var1) __inline Word16 norm_l (Word32 L_var1) { #if ARMV5TE_NORM_L - Word16 result; - asm volatile( + Word16 result; + asm volatile( "CMP %[L_var1], #0\n" "CLZNE %[result], %[L_var1]\n" - "SUBNE %[result], %[result], #1\n" + "SUBNE %[result], %[result], #1\n" "MOVEQ %[result], #0\n" :[result]"+r"(result) :[L_var1]"r"(L_var1) - ); + ); return result; #else //Word16 var_out; @@ -805,84 +805,84 @@ __inline Word16 norm_l (Word32 L_var1) //} //return (var_out); Word16 a16; - Word16 r = 0 ; + Word16 r = 0 ; + - if ( L_var1 < 0 ) { - L_var1 = ~L_var1; + L_var1 = ~L_var1; } if (0 == (L_var1 & 0x7fff8000)) { a16 = extract_l(L_var1); r += 16; - + if (0 == (a16 & 0x7f80)) { r += 8; - + if (0 == (a16 & 0x0078)) { r += 4; - + if (0 == (a16 & 0x0006)) { r += 2; - + if (0 == (a16 & 0x0001)) { r += 1; } } else { - + if (0 == (a16 & 0x0004)) { r += 1; } } } else { - + if (0 == (a16 & 0x0060)) { r += 2; - + if (0 == (a16 & 0x0010)) { r += 1; } } else { - + if (0 == (a16 & 0x0040)) { r += 1; } } } - } - else { - + } + else { + if (0 == (a16 & 0x7800)) { r += 4; - + if (0 == (a16 & 0x0600)) { r += 2; - + if (0 == (a16 & 0x0100)) { r += 1; } } else { - + if (0 == (a16 & 0x0400)) { r += 1; } } } else { - + if (0 == (a16 & 0x6000)) { r += 2; - + if (0 == (a16 & 0x1000)) { r += 1; } } else { - + if (0 == (a16 & 0x4000)) { r += 1; } @@ -892,38 +892,38 @@ __inline Word16 norm_l (Word32 L_var1) } else { a16 = extract_h(L_var1); - + if (0 == (a16 & 0x7f80)) { r += 8; - + if (0 == (a16 & 0x0078)) { r += 4 ; - + if (0 == (a16 & 0x0006)) { r += 2; - + if (0 == (a16 & 0x0001)) { r += 1; } } else { - + if (0 == (a16 & 0x0004)) { r += 1; } } } else { - + if (0 == (a16 & 0x0060)) { r += 2; - + if (0 == (a16 & 0x0010)) { r += 1; } } else { - + if (0 == (a16 & 0x0040)) { r += 1; } @@ -931,35 +931,35 @@ __inline Word16 norm_l (Word32 L_var1) } } else { - + if (0 == (a16 & 0x7800)) { r += 4; - + if (0 == (a16 & 0x0600)) { r += 2; - + if (0 == (a16 & 0x0100)) { r += 1; } } else { - + if (0 == (a16 & 0x0400)) { r += 1; } } } else { - + if (0 == (a16 & 0x6000)) { r += 2; - + if (0 == (a16 & 0x1000)) { r += 1; } } else { - + if (0 == (a16 & 0x4000)) { return 1; } @@ -967,7 +967,7 @@ __inline Word16 norm_l (Word32 L_var1) } } } - + return r ; #endif } @@ -978,17 +978,17 @@ __inline Word16 norm_l (Word32 L_var1) __inline Word16 round16(Word32 L_var1) { #if ARMV5TE_ROUND - Word16 result; - asm volatile( + Word16 result; + asm volatile( "MOV r1,#0x00008000\n" "QADD %[result], %[L_var1], r1\n" - "MOV %[result], %[result], ASR #16 \n" + "MOV %[result], %[result], ASR #16 \n" :[result]"+r"(result) :[L_var1]"r"(L_var1) :"r1" - ); + ); return result; -#else +#else Word16 var_out; Word32 L_rounded; @@ -1004,14 +1004,14 @@ __inline Word16 round16(Word32 L_var1) __inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) { #if ARMV5TE_L_MAC - Word32 result; - asm volatile( + Word32 result; + asm volatile( "SMULBB %[result], %[var1], %[var2]\n" "QADD %[result], %[result], %[result]\n" "QADD %[result], %[result], %[L_var3]\n" :[result]"+r"(result) : [L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2) - ); + ); return result; #else Word32 L_var_out; @@ -1028,12 +1028,12 @@ __inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) __inline Word32 L_add (Word32 L_var1, Word32 L_var2) { #if ARMV5TE_L_ADD - Word32 result; - asm volatile( + Word32 result; + asm volatile( "QADD %[result], %[L_var1], %[L_var2]\n" :[result]"+r"(result) :[L_var1]"r"(L_var1), [L_var2]"r"(L_var2) - ); + ); return result; #else Word32 L_var_out; @@ -1114,7 +1114,7 @@ __inline Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) L_var3 = L_msu (L_var3, var1, var2); var_out = (Word16)((L_var3 + 0x8000L) >> 16); - + return (var_out); } #endif diff --git a/media/libstagefright/codecs/aacenc/basic_op/basicop2.c b/media/libstagefright/codecs/aacenc/basic_op/basicop2.c index 82d3f38..d43bbd9 100644 --- a/media/libstagefright/codecs/aacenc/basic_op/basicop2.c +++ b/media/libstagefright/codecs/aacenc/basic_op/basicop2.c @@ -16,7 +16,7 @@ /******************************************************************************* File: basicop2.c - Content: Basic arithmetic operators. + Content: Basic arithmetic operators. *******************************************************************************/ @@ -462,7 +462,7 @@ Word32 L_mult(Word16 var1, Word16 var2) { L_var_out = MAX_32; } - + return (L_var_out); } #endif diff --git a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c index 0ad82f0..e48af9d 100644 --- a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c +++ b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.c @@ -17,7 +17,7 @@ File: oper_32b.c Content: This file contains operations in double precision. - + *******************************************************************************/ #include "typedef.h" @@ -200,12 +200,12 @@ Word32 Div_32 (Word32 L_num, Word32 denom) } /*! - - \brief calculates the log dualis times 4 of argument + + \brief calculates the log dualis times 4 of argument iLog4(x) = (Word32)(4 * log(value)/log(2.0)) \return ilog4 value - + */ Word16 iLog4(Word32 value) { @@ -225,7 +225,7 @@ Word16 iLog4(Word32 value) iLog4 = (-(iLog4 << 2) - norm_s(tmp16)) - 1; } else { - iLog4 = -128; /* -(INT_BITS*4); */ + iLog4 = -128; /* -(INT_BITS*4); */ } return iLog4; @@ -268,79 +268,79 @@ Word32 rsqrt(Word32 value, /*!< Operand to square root (0.0 ... 1) */ } static const Word32 pow2Table[POW2_TABLE_SIZE] = { -0x7fffffff, 0x7fa765ad, 0x7f4f08ae, 0x7ef6e8da, -0x7e9f0606, 0x7e476009, 0x7deff6b6, 0x7d98c9e6, -0x7d41d96e, 0x7ceb2523, 0x7c94acde, 0x7c3e7073, -0x7be86fb9, 0x7b92aa88, 0x7b3d20b6, 0x7ae7d21a, -0x7a92be8b, 0x7a3de5df, 0x79e947ef, 0x7994e492, -0x7940bb9e, 0x78ecccec, 0x78991854, 0x78459dac, -0x77f25cce, 0x779f5591, 0x774c87cc, 0x76f9f359, -0x76a7980f, 0x765575c8, 0x76038c5b, 0x75b1dba2, -0x75606374, 0x750f23ab, 0x74be1c20, 0x746d4cac, -0x741cb528, 0x73cc556d, 0x737c2d55, 0x732c3cba, -0x72dc8374, 0x728d015d, 0x723db650, 0x71eea226, -0x719fc4b9, 0x71511de4, 0x7102ad80, 0x70b47368, -0x70666f76, 0x7018a185, 0x6fcb096f, 0x6f7da710, -0x6f307a41, 0x6ee382de, 0x6e96c0c3, 0x6e4a33c9, -0x6dfddbcc, 0x6db1b8a8, 0x6d65ca38, 0x6d1a1057, -0x6cce8ae1, 0x6c8339b2, 0x6c381ca6, 0x6bed3398, -0x6ba27e66, 0x6b57fce9, 0x6b0daeff, 0x6ac39485, -0x6a79ad56, 0x6a2ff94f, 0x69e6784d, 0x699d2a2c, -0x69540ec9, 0x690b2601, 0x68c26fb1, 0x6879ebb6, -0x683199ed, 0x67e97a34, 0x67a18c68, 0x6759d065, -0x6712460b, 0x66caed35, 0x6683c5c3, 0x663ccf92, -0x65f60a80, 0x65af766a, 0x6569132f, 0x6522e0ad, -0x64dcdec3, 0x64970d4f, 0x64516c2e, 0x640bfb41, -0x63c6ba64, 0x6381a978, 0x633cc85b, 0x62f816eb, -0x62b39509, 0x626f4292, 0x622b1f66, 0x61e72b65, -0x61a3666d, 0x615fd05f, 0x611c6919, 0x60d9307b, -0x60962665, 0x60534ab7, 0x60109d51, 0x5fce1e12, -0x5f8bccdb, 0x5f49a98c, 0x5f07b405, 0x5ec5ec26, -0x5e8451d0, 0x5e42e4e3, 0x5e01a540, 0x5dc092c7, -0x5d7fad59, 0x5d3ef4d7, 0x5cfe6923, 0x5cbe0a1c, -0x5c7dd7a4, 0x5c3dd19c, 0x5bfdf7e5, 0x5bbe4a61, -0x5b7ec8f2, 0x5b3f7377, 0x5b0049d4, 0x5ac14bea, -0x5a82799a, 0x5a43d2c6, 0x5a055751, 0x59c7071c, -0x5988e209, 0x594ae7fb, 0x590d18d3, 0x58cf7474, -0x5891fac1, 0x5854ab9b, 0x581786e6, 0x57da8c83, -0x579dbc57, 0x57611642, 0x57249a29, 0x56e847ef, -0x56ac1f75, 0x567020a0, 0x56344b52, 0x55f89f70, -0x55bd1cdb, 0x5581c378, 0x55469329, 0x550b8bd4, -0x54d0ad5b, 0x5495f7a1, 0x545b6a8b, 0x542105fd, -0x53e6c9db, 0x53acb607, 0x5372ca68, 0x533906e0, -0x52ff6b55, 0x52c5f7aa, 0x528cabc3, 0x52538786, -0x521a8ad7, 0x51e1b59a, 0x51a907b4, 0x5170810b, -0x51382182, 0x50ffe8fe, 0x50c7d765, 0x508fec9c, -0x50582888, 0x50208b0e, 0x4fe91413, 0x4fb1c37c, -0x4f7a9930, 0x4f439514, 0x4f0cb70c, 0x4ed5ff00, -0x4e9f6cd4, 0x4e69006e, 0x4e32b9b4, 0x4dfc988c, -0x4dc69cdd, 0x4d90c68b, 0x4d5b157e, 0x4d25899c, -0x4cf022ca, 0x4cbae0ef, 0x4c85c3f1, 0x4c50cbb8, -0x4c1bf829, 0x4be7492b, 0x4bb2bea5, 0x4b7e587d, -0x4b4a169c, 0x4b15f8e6, 0x4ae1ff43, 0x4aae299b, -0x4a7a77d5, 0x4a46e9d6, 0x4a137f88, 0x49e038d0, -0x49ad1598, 0x497a15c4, 0x4947393f, 0x49147fee, -0x48e1e9ba, 0x48af768a, 0x487d2646, 0x484af8d6, -0x4818ee22, 0x47e70611, 0x47b5408c, 0x47839d7b, -0x47521cc6, 0x4720be55, 0x46ef8210, 0x46be67e0, -0x468d6fae, 0x465c9961, 0x462be4e2, 0x45fb521a, -0x45cae0f2, 0x459a9152, 0x456a6323, 0x453a564d, -0x450a6abb, 0x44daa054, 0x44aaf702, 0x447b6ead, -0x444c0740, 0x441cc0a3, 0x43ed9ac0, 0x43be9580, -0x438fb0cb, 0x4360ec8d, 0x433248ae, 0x4303c517, -0x42d561b4, 0x42a71e6c, 0x4278fb2b, 0x424af7da, -0x421d1462, 0x41ef50ae, 0x41c1aca8, 0x41942839, -0x4166c34c, 0x41397dcc, 0x410c57a2, 0x40df50b8, -0x40b268fa, 0x4085a051, 0x4058f6a8, 0x402c6be9 +0x7fffffff, 0x7fa765ad, 0x7f4f08ae, 0x7ef6e8da, +0x7e9f0606, 0x7e476009, 0x7deff6b6, 0x7d98c9e6, +0x7d41d96e, 0x7ceb2523, 0x7c94acde, 0x7c3e7073, +0x7be86fb9, 0x7b92aa88, 0x7b3d20b6, 0x7ae7d21a, +0x7a92be8b, 0x7a3de5df, 0x79e947ef, 0x7994e492, +0x7940bb9e, 0x78ecccec, 0x78991854, 0x78459dac, +0x77f25cce, 0x779f5591, 0x774c87cc, 0x76f9f359, +0x76a7980f, 0x765575c8, 0x76038c5b, 0x75b1dba2, +0x75606374, 0x750f23ab, 0x74be1c20, 0x746d4cac, +0x741cb528, 0x73cc556d, 0x737c2d55, 0x732c3cba, +0x72dc8374, 0x728d015d, 0x723db650, 0x71eea226, +0x719fc4b9, 0x71511de4, 0x7102ad80, 0x70b47368, +0x70666f76, 0x7018a185, 0x6fcb096f, 0x6f7da710, +0x6f307a41, 0x6ee382de, 0x6e96c0c3, 0x6e4a33c9, +0x6dfddbcc, 0x6db1b8a8, 0x6d65ca38, 0x6d1a1057, +0x6cce8ae1, 0x6c8339b2, 0x6c381ca6, 0x6bed3398, +0x6ba27e66, 0x6b57fce9, 0x6b0daeff, 0x6ac39485, +0x6a79ad56, 0x6a2ff94f, 0x69e6784d, 0x699d2a2c, +0x69540ec9, 0x690b2601, 0x68c26fb1, 0x6879ebb6, +0x683199ed, 0x67e97a34, 0x67a18c68, 0x6759d065, +0x6712460b, 0x66caed35, 0x6683c5c3, 0x663ccf92, +0x65f60a80, 0x65af766a, 0x6569132f, 0x6522e0ad, +0x64dcdec3, 0x64970d4f, 0x64516c2e, 0x640bfb41, +0x63c6ba64, 0x6381a978, 0x633cc85b, 0x62f816eb, +0x62b39509, 0x626f4292, 0x622b1f66, 0x61e72b65, +0x61a3666d, 0x615fd05f, 0x611c6919, 0x60d9307b, +0x60962665, 0x60534ab7, 0x60109d51, 0x5fce1e12, +0x5f8bccdb, 0x5f49a98c, 0x5f07b405, 0x5ec5ec26, +0x5e8451d0, 0x5e42e4e3, 0x5e01a540, 0x5dc092c7, +0x5d7fad59, 0x5d3ef4d7, 0x5cfe6923, 0x5cbe0a1c, +0x5c7dd7a4, 0x5c3dd19c, 0x5bfdf7e5, 0x5bbe4a61, +0x5b7ec8f2, 0x5b3f7377, 0x5b0049d4, 0x5ac14bea, +0x5a82799a, 0x5a43d2c6, 0x5a055751, 0x59c7071c, +0x5988e209, 0x594ae7fb, 0x590d18d3, 0x58cf7474, +0x5891fac1, 0x5854ab9b, 0x581786e6, 0x57da8c83, +0x579dbc57, 0x57611642, 0x57249a29, 0x56e847ef, +0x56ac1f75, 0x567020a0, 0x56344b52, 0x55f89f70, +0x55bd1cdb, 0x5581c378, 0x55469329, 0x550b8bd4, +0x54d0ad5b, 0x5495f7a1, 0x545b6a8b, 0x542105fd, +0x53e6c9db, 0x53acb607, 0x5372ca68, 0x533906e0, +0x52ff6b55, 0x52c5f7aa, 0x528cabc3, 0x52538786, +0x521a8ad7, 0x51e1b59a, 0x51a907b4, 0x5170810b, +0x51382182, 0x50ffe8fe, 0x50c7d765, 0x508fec9c, +0x50582888, 0x50208b0e, 0x4fe91413, 0x4fb1c37c, +0x4f7a9930, 0x4f439514, 0x4f0cb70c, 0x4ed5ff00, +0x4e9f6cd4, 0x4e69006e, 0x4e32b9b4, 0x4dfc988c, +0x4dc69cdd, 0x4d90c68b, 0x4d5b157e, 0x4d25899c, +0x4cf022ca, 0x4cbae0ef, 0x4c85c3f1, 0x4c50cbb8, +0x4c1bf829, 0x4be7492b, 0x4bb2bea5, 0x4b7e587d, +0x4b4a169c, 0x4b15f8e6, 0x4ae1ff43, 0x4aae299b, +0x4a7a77d5, 0x4a46e9d6, 0x4a137f88, 0x49e038d0, +0x49ad1598, 0x497a15c4, 0x4947393f, 0x49147fee, +0x48e1e9ba, 0x48af768a, 0x487d2646, 0x484af8d6, +0x4818ee22, 0x47e70611, 0x47b5408c, 0x47839d7b, +0x47521cc6, 0x4720be55, 0x46ef8210, 0x46be67e0, +0x468d6fae, 0x465c9961, 0x462be4e2, 0x45fb521a, +0x45cae0f2, 0x459a9152, 0x456a6323, 0x453a564d, +0x450a6abb, 0x44daa054, 0x44aaf702, 0x447b6ead, +0x444c0740, 0x441cc0a3, 0x43ed9ac0, 0x43be9580, +0x438fb0cb, 0x4360ec8d, 0x433248ae, 0x4303c517, +0x42d561b4, 0x42a71e6c, 0x4278fb2b, 0x424af7da, +0x421d1462, 0x41ef50ae, 0x41c1aca8, 0x41942839, +0x4166c34c, 0x41397dcc, 0x410c57a2, 0x40df50b8, +0x40b268fa, 0x4085a051, 0x4058f6a8, 0x402c6be9 }; /*! - - \brief calculates 2 ^ (x/y) for x<=0, y > 0, x <= 32768 * y - + + \brief calculates 2 ^ (x/y) for x<=0, y > 0, x <= 32768 * y + avoids integer division - - \return + + \return */ Word32 pow2_xy(Word32 x, Word32 y) { @@ -355,7 +355,7 @@ Word32 pow2_xy(Word32 x, Word32 y) fPart = tmp2 - iPart*y; iPart = min(iPart,INT_BITS-1); - res = pow2Table[(POW2_TABLE_SIZE*fPart)/y] >> iPart; - + res = pow2Table[(POW2_TABLE_SIZE*fPart)/y] >> iPart; + return(res); }
\ No newline at end of file diff --git a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h index 1d35e5e..9ebd1c2 100644 --- a/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h +++ b/media/libstagefright/codecs/aacenc/basic_op/oper_32b.h @@ -51,21 +51,21 @@ __inline Word32 L_mpy_ls(Word32 L_var2, Word16 var1) swHigh1 = (Word16)(L_var2 >> 16); l_var_out = (long)swLow1 * (long)var1 >> 15; - + l_var_out += swHigh1 * var1 << 1; - + return(l_var_out); } __inline Word32 L_mpy_wx(Word32 L_var2, Word16 var1) { #if ARMV5TE_L_MPY_LS - Word32 result; - asm volatile( - "SMULWB %[result], %[L_var2], %[var1] \n" + Word32 result; + asm volatile( + "SMULWB %[result], %[L_var2], %[var1] \n" :[result]"+r"(result) :[L_var2]"r"(L_var2), [var1]"r"(var1) - ); + ); return result; #else unsigned short swLow1; @@ -75,9 +75,9 @@ __inline Word32 L_mpy_wx(Word32 L_var2, Word16 var1) swLow1 = (unsigned short)(L_var2); swHigh1 = (Word16)(L_var2 >> 16); - l_var_out = (long)swLow1 * (long)var1 >> 16; + l_var_out = (long)swLow1 * (long)var1 >> 16; l_var_out += swHigh1 * var1; - + return(l_var_out); #endif } diff --git a/media/libstagefright/codecs/aacenc/basic_op/typedef.h b/media/libstagefright/codecs/aacenc/basic_op/typedef.h index 1030803..b1f8225 100644 --- a/media/libstagefright/codecs/aacenc/basic_op/typedef.h +++ b/media/libstagefright/codecs/aacenc/basic_op/typedef.h @@ -30,7 +30,7 @@ /* * this is the original code from the ETSI file typedef.h */ - + #if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(_MSC_VER) || defined(__ZTC__) typedef signed char Word8; typedef short Word16; diff --git a/media/libstagefright/codecs/aacenc/basic_op/typedefs.h b/media/libstagefright/codecs/aacenc/basic_op/typedefs.h index c7e774b..c924e2c 100644 --- a/media/libstagefright/codecs/aacenc/basic_op/typedefs.h +++ b/media/libstagefright/codecs/aacenc/basic_op/typedefs.h @@ -55,7 +55,7 @@ #define INT_BITS 32 /* ******************************************************************************** -* DEFINITION OF CONSTANTS +* DEFINITION OF CONSTANTS ******************************************************************************** */ /* @@ -120,12 +120,12 @@ typedef unsigned __int64 UWord64; #define ARMV5TE_L_MULT 1 #define ARMV5TE_L_MAC 1 #define ARMV5TE_L_MSU 1 - - + + #define ARMV5TE_DIV_S 1 #define ARMV5TE_ROUND 1 #define ARMV5TE_MULT 1 - + #define ARMV5TE_NORM_S 1 #define ARMV5TE_NORM_L 1 #define ARMV5TE_L_MPY_LS 1 @@ -149,7 +149,7 @@ typedef unsigned __int64 UWord64; #define ROUND_IS_INLINE 1 //define round as inline function #define L_MAC_IS_INLINE 1 //define L_mac as inline function #define L_ADD_IS_INLINE 1 //define L_add as inline function -#define EXTRACT_H_IS_INLINE 1 //define extract_h as inline function +#define EXTRACT_H_IS_INLINE 1 //define extract_h as inline function #define EXTRACT_L_IS_INLINE 1 //define extract_l as inline function //??? #define MULT_R_IS_INLINE 1 //define mult_r as inline function #define SHR_R_IS_INLINE 1 //define shr_r as inline function diff --git a/media/libstagefright/codecs/aacenc/inc/aac_rom.h b/media/libstagefright/codecs/aacenc/inc/aac_rom.h index 784bb70..8e206b7 100644 --- a/media/libstagefright/codecs/aacenc/inc/aac_rom.h +++ b/media/libstagefright/codecs/aacenc/inc/aac_rom.h @@ -16,7 +16,7 @@ /******************************************************************************* File: aac_rom.h - Content: constant tables + Content: constant tables *******************************************************************************/ diff --git a/media/libstagefright/codecs/aacenc/inc/aacenc_core.h b/media/libstagefright/codecs/aacenc/inc/aacenc_core.h index 41ba756..1acdbbc 100644 --- a/media/libstagefright/codecs/aacenc/inc/aacenc_core.h +++ b/media/libstagefright/codecs/aacenc/inc/aacenc_core.h @@ -47,7 +47,7 @@ typedef struct { typedef struct { - + AACENC_CONFIG config; /* Word16 size: 8 */ ELEMENT_INFO elInfo; /* Word16 size: 4 */ diff --git a/media/libstagefright/codecs/aacenc/inc/adj_thr.h b/media/libstagefright/codecs/aacenc/inc/adj_thr.h index f7cb888..0f4bb5e 100644 --- a/media/libstagefright/codecs/aacenc/inc/adj_thr.h +++ b/media/libstagefright/codecs/aacenc/inc/adj_thr.h @@ -16,7 +16,7 @@ /******************************************************************************* File: adj_thr.h - Content: Threshold compensation function + Content: Threshold compensation function *******************************************************************************/ @@ -44,7 +44,7 @@ void AdjustThresholds(ADJ_THR_STATE *adjThrState, PSY_OUT_ELEMENT *psyOutElement, Word16 *chBitDistribution, Word16 logSfbEnergy[MAX_CHANNELS][MAX_GROUPED_SFB], - Word16 sfbNRelevantLines[MAX_CHANNELS][MAX_GROUPED_SFB], + Word16 sfbNRelevantLines[MAX_CHANNELS][MAX_GROUPED_SFB], QC_OUT_ELEMENT* qcOE, ELEMENT_BITS* elBits, const Word16 nChannels, diff --git a/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h b/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h index 9ac4664..30132d8 100644 --- a/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h +++ b/media/libstagefright/codecs/aacenc/inc/adj_thr_data.h @@ -16,7 +16,7 @@ /******************************************************************************* File: adj_thr_data.h - Content: Threshold compensation parameter + Content: Threshold compensation parameter *******************************************************************************/ diff --git a/media/libstagefright/codecs/aacenc/inc/bitenc.h b/media/libstagefright/codecs/aacenc/inc/bitenc.h index 6ded3c6..6a58aeb 100644 --- a/media/libstagefright/codecs/aacenc/inc/bitenc.h +++ b/media/libstagefright/codecs/aacenc/inc/bitenc.h @@ -26,7 +26,7 @@ #include "qc_data.h" #include "tns.h" #include "channel_map.h" -#include "interface.h" +#include "interface.h" struct BITSTREAMENCODER_INIT { diff --git a/media/libstagefright/codecs/aacenc/inc/interface.h b/media/libstagefright/codecs/aacenc/inc/interface.h index 966ac99..a42e6a9 100644 --- a/media/libstagefright/codecs/aacenc/inc/interface.h +++ b/media/libstagefright/codecs/aacenc/inc/interface.h @@ -55,11 +55,11 @@ typedef struct { Word16 windowShape; Word16 groupingMask; Word16 sfbOffsets[MAX_GROUPED_SFB+1]; - Word16 mdctScale; - Word32 *sfbEnergy; + Word16 mdctScale; + Word32 *sfbEnergy; Word32 *sfbSpreadedEnergy; - Word32 *sfbThreshold; - Word32 *mdctSpectrum; + Word32 *sfbThreshold; + Word32 *mdctSpectrum; Word32 sfbEnSumLR; Word32 sfbEnSumMS; Word32 sfbDist[MAX_GROUPED_SFB]; diff --git a/media/libstagefright/codecs/aacenc/inc/line_pe.h b/media/libstagefright/codecs/aacenc/inc/line_pe.h index 038d5a3..116d5a8 100644 --- a/media/libstagefright/codecs/aacenc/inc/line_pe.h +++ b/media/libstagefright/codecs/aacenc/inc/line_pe.h @@ -24,8 +24,8 @@ #define __LINE_PE_H -#include "psy_const.h" -#include "interface.h" +#include "psy_const.h" +#include "interface.h" typedef struct { @@ -72,4 +72,4 @@ void calcSfbPe(PE_DATA *peData, -#endif +#endif diff --git a/media/libstagefright/codecs/aacenc/inc/psy_const.h b/media/libstagefright/codecs/aacenc/inc/psy_const.h index b05d683..19fb9b2 100644 --- a/media/libstagefright/codecs/aacenc/inc/psy_const.h +++ b/media/libstagefright/codecs/aacenc/inc/psy_const.h @@ -69,7 +69,7 @@ enum #define BLOCK_SWITCHING_OFFSET (1*1024+3*128+64+128) #define BLOCK_SWITCHING_DATA_SIZE FRAME_LEN_LONG - + #define TRANSFORM_OFFSET_LONG 0 #define TRANSFORM_OFFSET_SHORT 448 diff --git a/media/libstagefright/codecs/aacenc/inc/psy_main.h b/media/libstagefright/codecs/aacenc/inc/psy_main.h index 5fcbe13..2ccac60 100644 --- a/media/libstagefright/codecs/aacenc/inc/psy_main.h +++ b/media/libstagefright/codecs/aacenc/inc/psy_main.h @@ -54,9 +54,9 @@ Word16 psyMainInit( PSY_KERNEL *hPsy, Word16 bandwidth); -Word16 psyMain(Word16 nChannels, /*!< total number of channels */ +Word16 psyMain(Word16 nChannels, /*!< total number of channels */ ELEMENT_INFO *elemInfo, - Word16 *timeSignal, /*!< interleaved time signal */ + Word16 *timeSignal, /*!< interleaved time signal */ PSY_DATA psyData[MAX_CHANNELS], TNS_DATA tnsData[MAX_CHANNELS], PSY_CONFIGURATION_LONG* psyConfLong, diff --git a/media/libstagefright/codecs/aacenc/inc/qc_main.h b/media/libstagefright/codecs/aacenc/inc/qc_main.h index 924a06d..8f83973 100644 --- a/media/libstagefright/codecs/aacenc/inc/qc_main.h +++ b/media/libstagefright/codecs/aacenc/inc/qc_main.h @@ -35,7 +35,7 @@ void QCOutDelete(QC_OUT *hQC, VO_MEM_OPERATOR *pMemOP); Word16 QCNew(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP); -Word16 QCInit(QC_STATE *hQC, +Word16 QCInit(QC_STATE *hQC, struct QC_INIT *init); void QCDelete(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP); diff --git a/media/libstagefright/codecs/aacenc/inc/quantize.h b/media/libstagefright/codecs/aacenc/inc/quantize.h index 7dac2bf..1cafef6 100644 --- a/media/libstagefright/codecs/aacenc/inc/quantize.h +++ b/media/libstagefright/codecs/aacenc/inc/quantize.h @@ -28,7 +28,7 @@ #define MAX_QUANT 8191 -void QuantizeSpectrum(Word16 sfbCnt, +void QuantizeSpectrum(Word16 sfbCnt, Word16 maxSfbPerGroup, Word16 sfbPerGroup, Word16 *sfbOffset, Word32 *mdctSpectrum, diff --git a/media/libstagefright/codecs/aacenc/inc/sf_estim.h b/media/libstagefright/codecs/aacenc/inc/sf_estim.h index 11436a2..9039f25 100644 --- a/media/libstagefright/codecs/aacenc/inc/sf_estim.h +++ b/media/libstagefright/codecs/aacenc/inc/sf_estim.h @@ -23,7 +23,7 @@ #ifndef __SF_ESTIM_H__ #define __SF_ESTIM_H__ /* - Scale factor estimation + Scale factor estimation */ #include "psy_const.h" #include "interface.h" diff --git a/media/libstagefright/codecs/aacenc/inc/stat_bits.h b/media/libstagefright/codecs/aacenc/inc/stat_bits.h index fff3d14..9cddc1d 100644 --- a/media/libstagefright/codecs/aacenc/inc/stat_bits.h +++ b/media/libstagefright/codecs/aacenc/inc/stat_bits.h @@ -28,7 +28,7 @@ Word16 countStaticBitdemand(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], PSY_OUT_ELEMENT *psyOutElement, - Word16 nChannels, + Word16 nChannels, Word16 adtsUsed); #endif /* __STAT_BITS_H */ diff --git a/media/libstagefright/codecs/aacenc/inc/tns_param.h b/media/libstagefright/codecs/aacenc/inc/tns_param.h index 78265bb..0aa33c3 100644 --- a/media/libstagefright/codecs/aacenc/inc/tns_param.h +++ b/media/libstagefright/codecs/aacenc/inc/tns_param.h @@ -44,7 +44,7 @@ typedef struct{ }TNS_INFO_TAB; -void GetTnsParam(TNS_CONFIG_TABULATED *tnsConfigTab, +void GetTnsParam(TNS_CONFIG_TABULATED *tnsConfigTab, Word32 bitRate, Word16 channels, Word16 blockType); void GetTnsMaxBands(Word32 samplingRate, Word16 blockType, Word16* tnsMaxSfb); diff --git a/media/libstagefright/codecs/aacenc/inc/transform.h b/media/libstagefright/codecs/aacenc/inc/transform.h index 93d5ffe..fbac7aa 100644 --- a/media/libstagefright/codecs/aacenc/inc/transform.h +++ b/media/libstagefright/codecs/aacenc/inc/transform.h @@ -24,7 +24,7 @@ #define __TRANSFORM_H__ #include "typedef.h" - + void Transform_Real(Word16 *mdctDelayBuffer, Word16 *timeSignal, Word16 chIncrement, /*! channel increment */ diff --git a/media/libstagefright/codecs/aacenc/src/aac_rom.c b/media/libstagefright/codecs/aacenc/src/aac_rom.c index 16b44e0..08792e8 100644 --- a/media/libstagefright/codecs/aacenc/src/aac_rom.c +++ b/media/libstagefright/codecs/aacenc/src/aac_rom.c @@ -24,14 +24,14 @@ #if defined (ARMV5E) && !defined (ARMV7Neon) -/* - * Q30 for 128 and 1024 +/* + * Q30 for 128 and 1024 * * for (i = 0; i < num/4; i++) { * angle = (i + 0.125) * M_PI / num; * x = cos(angle) * (1 << 30); * x = sin(angle) * (1 << 30); - * + * * angle = (num/2 - 1 - i + 0.125) * M_PI / num; * x = cos(angle) * (1 << 30); * x = sin(angle) * (1 << 30); @@ -39,313 +39,313 @@ */ const int cossintab[128 + 1024] = { /* 128 */ - 0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, - 0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, - 0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, - 0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, - 0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, - 0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, - 0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, - 0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, - 0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, - 0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, - 0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, - 0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, - 0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, - 0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, - 0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, - 0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, + 0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, + 0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, + 0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, + 0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, + 0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, + 0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, + 0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, + 0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, + 0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, + 0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, + 0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, + 0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, + 0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, + 0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, + 0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, + 0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, /* 1024 */ - 0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, - 0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, - 0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, - 0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, - 0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, - 0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, - 0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, - 0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, - 0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, - 0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, - 0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, - 0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, - 0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, - 0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, - 0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, - 0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, - 0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, - 0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, - 0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, - 0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, - 0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, - 0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, - 0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, - 0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, - 0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, - 0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, - 0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, - 0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, - 0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, - 0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, - 0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, - 0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, - 0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, - 0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, - 0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, - 0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, - 0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, - 0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, - 0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, - 0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, - 0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, - 0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, - 0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, - 0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, - 0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, - 0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, - 0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, - 0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, - 0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, - 0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, - 0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, - 0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, - 0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, - 0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, - 0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, - 0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, - 0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, - 0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, - 0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, - 0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, - 0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, - 0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, - 0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, - 0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, - 0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, - 0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, - 0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, - 0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, - 0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, - 0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, - 0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, - 0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, - 0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, - 0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, - 0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, - 0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, - 0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, - 0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, - 0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, - 0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, - 0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, - 0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, - 0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, - 0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, - 0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, - 0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, - 0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, - 0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, - 0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, - 0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, - 0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, - 0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, - 0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, - 0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, - 0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, - 0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, - 0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, - 0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, - 0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, - 0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, - 0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, - 0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, - 0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, - 0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, - 0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, - 0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, - 0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, - 0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, - 0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, - 0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, - 0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, - 0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, - 0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, - 0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, - 0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, - 0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, - 0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, - 0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, - 0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, - 0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, - 0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, - 0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, - 0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, - 0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, - 0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, - 0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, - 0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, + 0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, + 0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, + 0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, + 0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, + 0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, + 0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, + 0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, + 0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, + 0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, + 0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, + 0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, + 0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, + 0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, + 0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, + 0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, + 0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, + 0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, + 0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, + 0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, + 0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, + 0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, + 0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, + 0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, + 0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, + 0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, + 0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, + 0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, + 0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, + 0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, + 0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, + 0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, + 0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, + 0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, + 0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, + 0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, + 0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, + 0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, + 0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, + 0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, + 0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, + 0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, + 0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, + 0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, + 0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, + 0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, + 0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, + 0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, + 0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, + 0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, + 0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, + 0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, + 0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, + 0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, + 0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, + 0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, + 0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, + 0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, + 0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, + 0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, + 0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, + 0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, + 0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, + 0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, + 0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, + 0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, + 0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, + 0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, + 0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, + 0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, + 0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, + 0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, + 0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, + 0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, + 0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, + 0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, + 0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, + 0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, + 0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, + 0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, + 0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, + 0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, + 0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, + 0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, + 0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, + 0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, + 0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, + 0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, + 0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, + 0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, + 0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, + 0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, + 0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, + 0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, + 0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, + 0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, + 0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, + 0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, + 0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, + 0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, + 0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, + 0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, + 0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, + 0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, + 0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, + 0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, + 0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, + 0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, + 0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, + 0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, + 0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, + 0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, + 0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, + 0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, + 0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, + 0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, + 0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, + 0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, + 0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, + 0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, + 0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, + 0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, + 0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, + 0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, + 0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, + 0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, + 0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, + 0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, 0x2d83b04f, 0x2cfe6728, 0x2d192ec1, 0x2d692784, 0x2d604bc0, 0x2d22187a, 0x2d3ccb34, 0x2d45adf6 }; const int twidTab512[(8*6 + 32*6 + 128*6)/2] = { - 0x40000000, 0x40000000, 0x40000000, 0x3b20187d, - 0x3ec50c7c, 0x3536238e, 0x2d412d41, 0x3b20187d, - 0x187d3b20, 0x187d3b20, 0x3536238e, 0xf3843ec5, - 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xe7833b20, - 0x238e3536, 0xc13b0c7c, 0xd2bf2d41, 0x187d3b20, - 0xc4e0e783, 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, - - 0x40000000, 0x40000000, 0x40000000, 0x3fb10645, - 0x3fec0323, 0x3f4e0964, 0x3ec50c7c, 0x3fb10645, - 0x3d3e1294, 0x3d3e1294, 0x3f4e0964, 0x39da1b5d, - 0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x38711e2b, - 0x3e140f8c, 0x2f6b2afa, 0x3536238e, 0x3d3e1294, - 0x28993179, 0x31792899, 0x3c42158f, 0x20e736e5, - 0x2d412d41, 0x3b20187d, 0x187d3b20, 0x28993179, - 0x39da1b5d, 0x0f8c3e14, 0x238e3536, 0x38711e2b, - 0x06453fb1, 0x1e2b3871, 0x36e520e7, 0xfcdd3fec, - 0x187d3b20, 0x3536238e, 0xf3843ec5, 0x12943d3e, - 0x3367261f, 0xea713c42, 0x0c7c3ec5, 0x31792899, - 0xe1d53871, 0x06453fb1, 0x2f6b2afa, 0xd9e13367, - 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf9bb3fb1, - 0x2afa2f6b, 0xcc99261f, 0xf3843ec5, 0x28993179, - 0xc78f1e2b, 0xed6c3d3e, 0x261f3367, 0xc3be158f, - 0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe1d53871, - 0x20e736e5, 0xc0140323, 0xdc723536, 0x1e2b3871, - 0xc04ff9bb, 0xd7673179, 0x1b5d39da, 0xc1ecf074, - 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xce872899, - 0x158f3c42, 0xc91bdf19, 0xcaca238e, 0x12943d3e, - 0xce87d767, 0xc78f1e2b, 0x0f8c3e14, 0xd506d095, - 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc2c21294, - 0x09643f4e, 0xe4a3c626, 0xc13b0c7c, 0x06453fb1, - 0xed6cc2c2, 0xc04f0645, 0x03233fec, 0xf69cc0b2, - - 0x40000000, 0x40000000, 0x40000000, 0x3ffb0192, - 0x3ffe00c9, 0x3ff4025b, 0x3fec0323, 0x3ffb0192, - 0x3fd304b5, 0x3fd304b5, 0x3ff4025b, 0x3f9c070d, - 0x3fb10645, 0x3fec0323, 0x3f4e0964, 0x3f8407d5, - 0x3fe103ec, 0x3eeb0bb6, 0x3f4e0964, 0x3fd304b5, - 0x3e710e05, 0x3f0e0af1, 0x3fc3057d, 0x3de2104f, - 0x3ec50c7c, 0x3fb10645, 0x3d3e1294, 0x3e710e05, - 0x3f9c070d, 0x3c8414d1, 0x3e140f8c, 0x3f8407d5, - 0x3bb61708, 0x3dae1111, 0x3f6a089c, 0x3ad21937, - 0x3d3e1294, 0x3f4e0964, 0x39da1b5d, 0x3cc51413, - 0x3f2f0a2a, 0x38cf1d79, 0x3c42158f, 0x3f0e0af1, - 0x37af1f8b, 0x3bb61708, 0x3eeb0bb6, 0x367c2192, - 0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x3a8219ef, - 0x3e9c0d41, 0x33de257d, 0x39da1b5d, 0x3e710e05, - 0x3274275f, 0x392a1cc6, 0x3e440ec9, 0x30f82934, - 0x38711e2b, 0x3e140f8c, 0x2f6b2afa, 0x37af1f8b, - 0x3de2104f, 0x2dce2cb2, 0x36e520e7, 0x3dae1111, - 0x2c212e5a, 0x3612223d, 0x3d7711d3, 0x2a652ff1, - 0x3536238e, 0x3d3e1294, 0x28993179, 0x345324da, - 0x3d021354, 0x26c032ee, 0x3367261f, 0x3cc51413, - 0x24da3453, 0x3274275f, 0x3c8414d1, 0x22e635a5, - 0x31792899, 0x3c42158f, 0x20e736e5, 0x307629cd, - 0x3bfd164c, 0x1edc3811, 0x2f6b2afa, 0x3bb61708, - 0x1cc6392a, 0x2e5a2c21, 0x3b6c17c3, 0x1aa63a2f, - 0x2d412d41, 0x3b20187d, 0x187d3b20, 0x2c212e5a, - 0x3ad21937, 0x164c3bfd, 0x2afa2f6b, 0x3a8219ef, - 0x14133cc5, 0x29cd3076, 0x3a2f1aa6, 0x11d33d77, - 0x28993179, 0x39da1b5d, 0x0f8c3e14, 0x275f3274, - 0x39831c12, 0x0d413e9c, 0x261f3367, 0x392a1cc6, - 0x0af13f0e, 0x24da3453, 0x38cf1d79, 0x089c3f6a, - 0x238e3536, 0x38711e2b, 0x06453fb1, 0x223d3612, - 0x38111edc, 0x03ec3fe1, 0x20e736e5, 0x37af1f8b, - 0x01923ffb, 0x1f8b37af, 0x374b2039, 0xff373ffe, - 0x1e2b3871, 0x36e520e7, 0xfcdd3fec, 0x1cc6392a, - 0x367c2192, 0xfa833fc3, 0x1b5d39da, 0x3612223d, - 0xf82b3f84, 0x19ef3a82, 0x35a522e6, 0xf5d63f2f, - 0x187d3b20, 0x3536238e, 0xf3843ec5, 0x17083bb6, - 0x34c62434, 0xf1373e44, 0x158f3c42, 0x345324da, - 0xeeef3dae, 0x14133cc5, 0x33de257d, 0xecac3d02, - 0x12943d3e, 0x3367261f, 0xea713c42, 0x11113dae, - 0x32ee26c0, 0xe83d3b6c, 0x0f8c3e14, 0x3274275f, - 0xe6113a82, 0x0e053e71, 0x31f727fd, 0xe3ee3983, - 0x0c7c3ec5, 0x31792899, 0xe1d53871, 0x0af13f0e, - 0x30f82934, 0xdfc7374b, 0x09643f4e, 0x307629cd, - 0xddc33612, 0x07d53f84, 0x2ff12a65, 0xdbcc34c6, - 0x06453fb1, 0x2f6b2afa, 0xd9e13367, 0x04b53fd3, - 0x2ee32b8e, 0xd80331f7, 0x03233fec, 0x2e5a2c21, - 0xd6333076, 0x01923ffb, 0x2dce2cb2, 0xd4722ee3, - 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xfe6e3ffb, - 0x2cb22dce, 0xd11d2b8e, 0xfcdd3fec, 0x2c212e5a, - 0xcf8a29cd, 0xfb4b3fd3, 0x2b8e2ee3, 0xce0927fd, - 0xf9bb3fb1, 0x2afa2f6b, 0xcc99261f, 0xf82b3f84, - 0x2a652ff1, 0xcb3a2434, 0xf69c3f4e, 0x29cd3076, - 0xc9ee223d, 0xf50f3f0e, 0x293430f8, 0xc8b52039, - 0xf3843ec5, 0x28993179, 0xc78f1e2b, 0xf1fb3e71, - 0x27fd31f7, 0xc67d1c12, 0xf0743e14, 0x275f3274, - 0xc57e19ef, 0xeeef3dae, 0x26c032ee, 0xc49417c3, - 0xed6c3d3e, 0x261f3367, 0xc3be158f, 0xebed3cc5, - 0x257d33de, 0xc2fe1354, 0xea713c42, 0x24da3453, - 0xc2521111, 0xe8f83bb6, 0x243434c6, 0xc1bc0ec9, - 0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe6113a82, - 0x22e635a5, 0xc0d10a2a, 0xe4a339da, 0x223d3612, - 0xc07c07d5, 0xe33a392a, 0x2192367c, 0xc03d057d, - 0xe1d53871, 0x20e736e5, 0xc0140323, 0xe07537af, - 0x2039374b, 0xc00200c9, 0xdf1936e5, 0x1f8b37af, - 0xc005fe6e, 0xddc33612, 0x1edc3811, 0xc01ffc14, - 0xdc723536, 0x1e2b3871, 0xc04ff9bb, 0xdb263453, - 0x1d7938cf, 0xc096f764, 0xd9e13367, 0x1cc6392a, - 0xc0f2f50f, 0xd8a13274, 0x1c123983, 0xc164f2bf, - 0xd7673179, 0x1b5d39da, 0xc1ecf074, 0xd6333076, - 0x1aa63a2f, 0xc289ee2d, 0xd5062f6b, 0x19ef3a82, - 0xc33bebed, 0xd3df2e5a, 0x19373ad2, 0xc403e9b4, - 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xd1a62c21, - 0x17c33b6c, 0xc5d1e55a, 0xd0952afa, 0x17083bb6, - 0xc6d6e33a, 0xcf8a29cd, 0x164c3bfd, 0xc7efe124, - 0xce872899, 0x158f3c42, 0xc91bdf19, 0xcd8c275f, - 0x14d13c84, 0xca5bdd1a, 0xcc99261f, 0x14133cc5, - 0xcbaddb26, 0xcbad24da, 0x13543d02, 0xcd12d940, - 0xcaca238e, 0x12943d3e, 0xce87d767, 0xc9ee223d, - 0x11d33d77, 0xd00fd59b, 0xc91b20e7, 0x11113dae, - 0xd1a6d3df, 0xc8511f8b, 0x104f3de2, 0xd34ed232, - 0xc78f1e2b, 0x0f8c3e14, 0xd506d095, 0xc6d61cc6, - 0x0ec93e44, 0xd6cccf08, 0xc6261b5d, 0x0e053e71, - 0xd8a1cd8c, 0xc57e19ef, 0x0d413e9c, 0xda83cc22, - 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc44a1708, - 0x0bb63eeb, 0xde6ec984, 0xc3be158f, 0x0af13f0e, - 0xe075c851, 0xc33b1413, 0x0a2a3f2f, 0xe287c731, - 0xc2c21294, 0x09643f4e, 0xe4a3c626, 0xc2521111, - 0x089c3f6a, 0xe6c9c52e, 0xc1ec0f8c, 0x07d53f84, - 0xe8f8c44a, 0xc18f0e05, 0x070d3f9c, 0xeb2fc37c, - 0xc13b0c7c, 0x06453fb1, 0xed6cc2c2, 0xc0f20af1, - 0x057d3fc3, 0xefb1c21e, 0xc0b20964, 0x04b53fd3, - 0xf1fbc18f, 0xc07c07d5, 0x03ec3fe1, 0xf44ac115, - 0xc04f0645, 0x03233fec, 0xf69cc0b2, 0xc02d04b5, - 0x025b3ff4, 0xf8f3c064, 0xc0140323, 0x01923ffb, - 0xfb4bc02d, 0xc0050192, 0x00c93ffe, 0xfda5c00c + 0x40000000, 0x40000000, 0x40000000, 0x3b20187d, + 0x3ec50c7c, 0x3536238e, 0x2d412d41, 0x3b20187d, + 0x187d3b20, 0x187d3b20, 0x3536238e, 0xf3843ec5, + 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xe7833b20, + 0x238e3536, 0xc13b0c7c, 0xd2bf2d41, 0x187d3b20, + 0xc4e0e783, 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, + + 0x40000000, 0x40000000, 0x40000000, 0x3fb10645, + 0x3fec0323, 0x3f4e0964, 0x3ec50c7c, 0x3fb10645, + 0x3d3e1294, 0x3d3e1294, 0x3f4e0964, 0x39da1b5d, + 0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x38711e2b, + 0x3e140f8c, 0x2f6b2afa, 0x3536238e, 0x3d3e1294, + 0x28993179, 0x31792899, 0x3c42158f, 0x20e736e5, + 0x2d412d41, 0x3b20187d, 0x187d3b20, 0x28993179, + 0x39da1b5d, 0x0f8c3e14, 0x238e3536, 0x38711e2b, + 0x06453fb1, 0x1e2b3871, 0x36e520e7, 0xfcdd3fec, + 0x187d3b20, 0x3536238e, 0xf3843ec5, 0x12943d3e, + 0x3367261f, 0xea713c42, 0x0c7c3ec5, 0x31792899, + 0xe1d53871, 0x06453fb1, 0x2f6b2afa, 0xd9e13367, + 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf9bb3fb1, + 0x2afa2f6b, 0xcc99261f, 0xf3843ec5, 0x28993179, + 0xc78f1e2b, 0xed6c3d3e, 0x261f3367, 0xc3be158f, + 0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe1d53871, + 0x20e736e5, 0xc0140323, 0xdc723536, 0x1e2b3871, + 0xc04ff9bb, 0xd7673179, 0x1b5d39da, 0xc1ecf074, + 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xce872899, + 0x158f3c42, 0xc91bdf19, 0xcaca238e, 0x12943d3e, + 0xce87d767, 0xc78f1e2b, 0x0f8c3e14, 0xd506d095, + 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc2c21294, + 0x09643f4e, 0xe4a3c626, 0xc13b0c7c, 0x06453fb1, + 0xed6cc2c2, 0xc04f0645, 0x03233fec, 0xf69cc0b2, + + 0x40000000, 0x40000000, 0x40000000, 0x3ffb0192, + 0x3ffe00c9, 0x3ff4025b, 0x3fec0323, 0x3ffb0192, + 0x3fd304b5, 0x3fd304b5, 0x3ff4025b, 0x3f9c070d, + 0x3fb10645, 0x3fec0323, 0x3f4e0964, 0x3f8407d5, + 0x3fe103ec, 0x3eeb0bb6, 0x3f4e0964, 0x3fd304b5, + 0x3e710e05, 0x3f0e0af1, 0x3fc3057d, 0x3de2104f, + 0x3ec50c7c, 0x3fb10645, 0x3d3e1294, 0x3e710e05, + 0x3f9c070d, 0x3c8414d1, 0x3e140f8c, 0x3f8407d5, + 0x3bb61708, 0x3dae1111, 0x3f6a089c, 0x3ad21937, + 0x3d3e1294, 0x3f4e0964, 0x39da1b5d, 0x3cc51413, + 0x3f2f0a2a, 0x38cf1d79, 0x3c42158f, 0x3f0e0af1, + 0x37af1f8b, 0x3bb61708, 0x3eeb0bb6, 0x367c2192, + 0x3b20187d, 0x3ec50c7c, 0x3536238e, 0x3a8219ef, + 0x3e9c0d41, 0x33de257d, 0x39da1b5d, 0x3e710e05, + 0x3274275f, 0x392a1cc6, 0x3e440ec9, 0x30f82934, + 0x38711e2b, 0x3e140f8c, 0x2f6b2afa, 0x37af1f8b, + 0x3de2104f, 0x2dce2cb2, 0x36e520e7, 0x3dae1111, + 0x2c212e5a, 0x3612223d, 0x3d7711d3, 0x2a652ff1, + 0x3536238e, 0x3d3e1294, 0x28993179, 0x345324da, + 0x3d021354, 0x26c032ee, 0x3367261f, 0x3cc51413, + 0x24da3453, 0x3274275f, 0x3c8414d1, 0x22e635a5, + 0x31792899, 0x3c42158f, 0x20e736e5, 0x307629cd, + 0x3bfd164c, 0x1edc3811, 0x2f6b2afa, 0x3bb61708, + 0x1cc6392a, 0x2e5a2c21, 0x3b6c17c3, 0x1aa63a2f, + 0x2d412d41, 0x3b20187d, 0x187d3b20, 0x2c212e5a, + 0x3ad21937, 0x164c3bfd, 0x2afa2f6b, 0x3a8219ef, + 0x14133cc5, 0x29cd3076, 0x3a2f1aa6, 0x11d33d77, + 0x28993179, 0x39da1b5d, 0x0f8c3e14, 0x275f3274, + 0x39831c12, 0x0d413e9c, 0x261f3367, 0x392a1cc6, + 0x0af13f0e, 0x24da3453, 0x38cf1d79, 0x089c3f6a, + 0x238e3536, 0x38711e2b, 0x06453fb1, 0x223d3612, + 0x38111edc, 0x03ec3fe1, 0x20e736e5, 0x37af1f8b, + 0x01923ffb, 0x1f8b37af, 0x374b2039, 0xff373ffe, + 0x1e2b3871, 0x36e520e7, 0xfcdd3fec, 0x1cc6392a, + 0x367c2192, 0xfa833fc3, 0x1b5d39da, 0x3612223d, + 0xf82b3f84, 0x19ef3a82, 0x35a522e6, 0xf5d63f2f, + 0x187d3b20, 0x3536238e, 0xf3843ec5, 0x17083bb6, + 0x34c62434, 0xf1373e44, 0x158f3c42, 0x345324da, + 0xeeef3dae, 0x14133cc5, 0x33de257d, 0xecac3d02, + 0x12943d3e, 0x3367261f, 0xea713c42, 0x11113dae, + 0x32ee26c0, 0xe83d3b6c, 0x0f8c3e14, 0x3274275f, + 0xe6113a82, 0x0e053e71, 0x31f727fd, 0xe3ee3983, + 0x0c7c3ec5, 0x31792899, 0xe1d53871, 0x0af13f0e, + 0x30f82934, 0xdfc7374b, 0x09643f4e, 0x307629cd, + 0xddc33612, 0x07d53f84, 0x2ff12a65, 0xdbcc34c6, + 0x06453fb1, 0x2f6b2afa, 0xd9e13367, 0x04b53fd3, + 0x2ee32b8e, 0xd80331f7, 0x03233fec, 0x2e5a2c21, + 0xd6333076, 0x01923ffb, 0x2dce2cb2, 0xd4722ee3, + 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xfe6e3ffb, + 0x2cb22dce, 0xd11d2b8e, 0xfcdd3fec, 0x2c212e5a, + 0xcf8a29cd, 0xfb4b3fd3, 0x2b8e2ee3, 0xce0927fd, + 0xf9bb3fb1, 0x2afa2f6b, 0xcc99261f, 0xf82b3f84, + 0x2a652ff1, 0xcb3a2434, 0xf69c3f4e, 0x29cd3076, + 0xc9ee223d, 0xf50f3f0e, 0x293430f8, 0xc8b52039, + 0xf3843ec5, 0x28993179, 0xc78f1e2b, 0xf1fb3e71, + 0x27fd31f7, 0xc67d1c12, 0xf0743e14, 0x275f3274, + 0xc57e19ef, 0xeeef3dae, 0x26c032ee, 0xc49417c3, + 0xed6c3d3e, 0x261f3367, 0xc3be158f, 0xebed3cc5, + 0x257d33de, 0xc2fe1354, 0xea713c42, 0x24da3453, + 0xc2521111, 0xe8f83bb6, 0x243434c6, 0xc1bc0ec9, + 0xe7833b20, 0x238e3536, 0xc13b0c7c, 0xe6113a82, + 0x22e635a5, 0xc0d10a2a, 0xe4a339da, 0x223d3612, + 0xc07c07d5, 0xe33a392a, 0x2192367c, 0xc03d057d, + 0xe1d53871, 0x20e736e5, 0xc0140323, 0xe07537af, + 0x2039374b, 0xc00200c9, 0xdf1936e5, 0x1f8b37af, + 0xc005fe6e, 0xddc33612, 0x1edc3811, 0xc01ffc14, + 0xdc723536, 0x1e2b3871, 0xc04ff9bb, 0xdb263453, + 0x1d7938cf, 0xc096f764, 0xd9e13367, 0x1cc6392a, + 0xc0f2f50f, 0xd8a13274, 0x1c123983, 0xc164f2bf, + 0xd7673179, 0x1b5d39da, 0xc1ecf074, 0xd6333076, + 0x1aa63a2f, 0xc289ee2d, 0xd5062f6b, 0x19ef3a82, + 0xc33bebed, 0xd3df2e5a, 0x19373ad2, 0xc403e9b4, + 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xd1a62c21, + 0x17c33b6c, 0xc5d1e55a, 0xd0952afa, 0x17083bb6, + 0xc6d6e33a, 0xcf8a29cd, 0x164c3bfd, 0xc7efe124, + 0xce872899, 0x158f3c42, 0xc91bdf19, 0xcd8c275f, + 0x14d13c84, 0xca5bdd1a, 0xcc99261f, 0x14133cc5, + 0xcbaddb26, 0xcbad24da, 0x13543d02, 0xcd12d940, + 0xcaca238e, 0x12943d3e, 0xce87d767, 0xc9ee223d, + 0x11d33d77, 0xd00fd59b, 0xc91b20e7, 0x11113dae, + 0xd1a6d3df, 0xc8511f8b, 0x104f3de2, 0xd34ed232, + 0xc78f1e2b, 0x0f8c3e14, 0xd506d095, 0xc6d61cc6, + 0x0ec93e44, 0xd6cccf08, 0xc6261b5d, 0x0e053e71, + 0xd8a1cd8c, 0xc57e19ef, 0x0d413e9c, 0xda83cc22, + 0xc4e0187d, 0x0c7c3ec5, 0xdc72caca, 0xc44a1708, + 0x0bb63eeb, 0xde6ec984, 0xc3be158f, 0x0af13f0e, + 0xe075c851, 0xc33b1413, 0x0a2a3f2f, 0xe287c731, + 0xc2c21294, 0x09643f4e, 0xe4a3c626, 0xc2521111, + 0x089c3f6a, 0xe6c9c52e, 0xc1ec0f8c, 0x07d53f84, + 0xe8f8c44a, 0xc18f0e05, 0x070d3f9c, 0xeb2fc37c, + 0xc13b0c7c, 0x06453fb1, 0xed6cc2c2, 0xc0f20af1, + 0x057d3fc3, 0xefb1c21e, 0xc0b20964, 0x04b53fd3, + 0xf1fbc18f, 0xc07c07d5, 0x03ec3fe1, 0xf44ac115, + 0xc04f0645, 0x03233fec, 0xf69cc0b2, 0xc02d04b5, + 0x025b3ff4, 0xf8f3c064, 0xc0140323, 0x01923ffb, + 0xfb4bc02d, 0xc0050192, 0x00c93ffe, 0xfda5c00c }; const int twidTab64[(4*6 + 16*6)/2] = { - 0x40000000, 0x40000000, 0x40000000, 0x2d412d41, - 0x3b20187d, 0x187d3b20, 0x00004000, 0x2d412d41, - 0xd2bf2d41, 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, - - 0x40000000, 0x40000000, 0x40000000, 0x3ec50c7c, - 0x3fb10645, 0x3d3e1294, 0x3b20187d, 0x3ec50c7c, - 0x3536238e, 0x3536238e, 0x3d3e1294, 0x28993179, - 0x2d412d41, 0x3b20187d, 0x187d3b20, 0x238e3536, - 0x38711e2b, 0x06453fb1, 0x187d3b20, 0x3536238e, - 0xf3843ec5, 0x0c7c3ec5, 0x31792899, 0xe1d53871, - 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf3843ec5, - 0x28993179, 0xc78f1e2b, 0xe7833b20, 0x238e3536, - 0xc13b0c7c, 0xdc723536, 0x1e2b3871, 0xc04ff9bb, - 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xcaca238e, - 0x12943d3e, 0xce87d767, 0xc4e0187d, 0x0c7c3ec5, - 0xdc72caca, 0xc13b0c7c, 0x06453fb1, 0xed6cc2c2 + 0x40000000, 0x40000000, 0x40000000, 0x2d412d41, + 0x3b20187d, 0x187d3b20, 0x00004000, 0x2d412d41, + 0xd2bf2d41, 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, + + 0x40000000, 0x40000000, 0x40000000, 0x3ec50c7c, + 0x3fb10645, 0x3d3e1294, 0x3b20187d, 0x3ec50c7c, + 0x3536238e, 0x3536238e, 0x3d3e1294, 0x28993179, + 0x2d412d41, 0x3b20187d, 0x187d3b20, 0x238e3536, + 0x38711e2b, 0x06453fb1, 0x187d3b20, 0x3536238e, + 0xf3843ec5, 0x0c7c3ec5, 0x31792899, 0xe1d53871, + 0x00004000, 0x2d412d41, 0xd2bf2d41, 0xf3843ec5, + 0x28993179, 0xc78f1e2b, 0xe7833b20, 0x238e3536, + 0xc13b0c7c, 0xdc723536, 0x1e2b3871, 0xc04ff9bb, + 0xd2bf2d41, 0x187d3b20, 0xc4e0e783, 0xcaca238e, + 0x12943d3e, 0xce87d767, 0xc4e0187d, 0x0c7c3ec5, + 0xdc72caca, 0xc13b0c7c, 0x06453fb1, 0xed6cc2c2 }; #elif defined ARMV7Neon -/* - * Q29 for 128 and 1024 +/* + * Q29 for 128 and 1024 * * for (i = 0; i < num/4; i++) { * angle = (i + 0.125) * M_PI / num; * x = cos(angle) * (1 << 29); * x = sin(angle) * (1 << 29); - * + * * angle = (num/2 - 1 - i + 0.125) * M_PI / num; * x = cos(angle) * (1 << 29); * x = sin(angle) * (1 << 29); @@ -353,313 +353,313 @@ const int twidTab64[(4*6 + 16*6)/2] = { */ const int cossintab[128 + 1024] = { /* 128 */ - 0x1ffff621, 0x001921f9, 0x00afea69, 0x1ffe1c68, 0x1ffce09d, 0x00e22a7a, 0x0178dbaa, 0x1ff753bb, - 0x1ff4dc55, 0x01ab101c, 0x024192cf, 0x1feb9d25, 0x1fe7ea85, 0x0273b3e2, 0x0309f0e2, 0x1fdafa75, - 0x1fd60d2e, 0x033bf6dd, 0x03d1d700, 0x1fc56e3b, 0x1fbf470f, 0x0403ba2b, 0x04992653, 0x1faafbcb, - 0x1fa39bac, 0x04cadefe, 0x055fc022, 0x1f8ba738, 0x1f830f4a, 0x059146a1, 0x062585ca, 0x1f677557, - 0x1f5da6ed, 0x0656d27a, 0x06ea58cd, 0x1f3e6bbc, 0x1f33685a, 0x071b6415, 0x07ae1ad2, 0x1f1090bd, - 0x1f045a15, 0x07dedd20, 0x0870ada7, 0x1eddeb6a, 0x1ed0835f, 0x08a11f78, 0x0931f34d, 0x1ea68394, - 0x1e97ec36, 0x09620d27, 0x09f1cdf5, 0x1e6a61c5, 0x1e5a9d55, 0x0a21886e, 0x0ab02009, 0x1e298f44, - 0x1e18a030, 0x0adf73c6, 0x0b6ccc32, 0x1de4160f, 0x1dd1fef4, 0x0b9bb1e5, 0x0c27b555, 0x1d9a00de, - 0x1d86c484, 0x0c5625c3, 0x0ce0bea2, 0x1d4b5b1b, 0x1d36fc7c, 0x0d0eb2a2, 0x0d97cb8f, 0x1cf830e9, - 0x1ce2b328, 0x0dc53c0a, 0x0e4cbfe2, 0x1ca08f1a, 0x1c89f587, 0x0e79a5d7, 0x0eff7fb3, 0x1c448331, - 0x1c2cd149, 0x0f2bd437, 0x0fafef73, 0x1be41b61, 0x1bcb54cb, 0x0fdbabae, 0x105df3ec, 0x1b7f6687, - 0x1b658f15, 0x10891120, 0x11097249, 0x1b16742a, 0x1afb8fd9, 0x1133e9d0, 0x11b25017, 0x1aa9547a, - 0x1a8d676e, 0x11dc1b65, 0x1258734d, 0x1a38184a, 0x1a1b26d3, 0x12818bef, 0x12fbc24b, 0x19c2d111, - 0x19a4dfa4, 0x132421ec, 0x139c23e4, 0x194990e4, 0x192aa420, 0x13c3c44a, 0x14397f5b, 0x18cc6a75, - 0x18ac871f, 0x14605a69, 0x14d3bc6d, 0x184b7112, 0x182a9c14, 0x14f9cc26, 0x156ac352, 0x17c6b89d, + 0x1ffff621, 0x001921f9, 0x00afea69, 0x1ffe1c68, 0x1ffce09d, 0x00e22a7a, 0x0178dbaa, 0x1ff753bb, + 0x1ff4dc55, 0x01ab101c, 0x024192cf, 0x1feb9d25, 0x1fe7ea85, 0x0273b3e2, 0x0309f0e2, 0x1fdafa75, + 0x1fd60d2e, 0x033bf6dd, 0x03d1d700, 0x1fc56e3b, 0x1fbf470f, 0x0403ba2b, 0x04992653, 0x1faafbcb, + 0x1fa39bac, 0x04cadefe, 0x055fc022, 0x1f8ba738, 0x1f830f4a, 0x059146a1, 0x062585ca, 0x1f677557, + 0x1f5da6ed, 0x0656d27a, 0x06ea58cd, 0x1f3e6bbc, 0x1f33685a, 0x071b6415, 0x07ae1ad2, 0x1f1090bd, + 0x1f045a15, 0x07dedd20, 0x0870ada7, 0x1eddeb6a, 0x1ed0835f, 0x08a11f78, 0x0931f34d, 0x1ea68394, + 0x1e97ec36, 0x09620d27, 0x09f1cdf5, 0x1e6a61c5, 0x1e5a9d55, 0x0a21886e, 0x0ab02009, 0x1e298f44, + 0x1e18a030, 0x0adf73c6, 0x0b6ccc32, 0x1de4160f, 0x1dd1fef4, 0x0b9bb1e5, 0x0c27b555, 0x1d9a00de, + 0x1d86c484, 0x0c5625c3, 0x0ce0bea2, 0x1d4b5b1b, 0x1d36fc7c, 0x0d0eb2a2, 0x0d97cb8f, 0x1cf830e9, + 0x1ce2b328, 0x0dc53c0a, 0x0e4cbfe2, 0x1ca08f1a, 0x1c89f587, 0x0e79a5d7, 0x0eff7fb3, 0x1c448331, + 0x1c2cd149, 0x0f2bd437, 0x0fafef73, 0x1be41b61, 0x1bcb54cb, 0x0fdbabae, 0x105df3ec, 0x1b7f6687, + 0x1b658f15, 0x10891120, 0x11097249, 0x1b16742a, 0x1afb8fd9, 0x1133e9d0, 0x11b25017, 0x1aa9547a, + 0x1a8d676e, 0x11dc1b65, 0x1258734d, 0x1a38184a, 0x1a1b26d3, 0x12818bef, 0x12fbc24b, 0x19c2d111, + 0x19a4dfa4, 0x132421ec, 0x139c23e4, 0x194990e4, 0x192aa420, 0x13c3c44a, 0x14397f5b, 0x18cc6a75, + 0x18ac871f, 0x14605a69, 0x14d3bc6d, 0x184b7112, 0x182a9c14, 0x14f9cc26, 0x156ac352, 0x17c6b89d, 0x17a4f708, 0x159001d6, 0x15fe7cbe, 0x173e558e, 0x171bac96, 0x1622e450, 0x168ed1eb, 0x16b25ced, /* 1024 */ - 0x1fffffd9, 0x0003243f, 0x0015fdba, 0x1ffff872, 0x1ffff382, 0x001c4637, 0x002f1fa6, 0x1fffdd4d, - 0x1fffd36f, 0x0035681d, 0x00484175, 0x1fffae6c, 0x1fff9f9e, 0x004e89e3, 0x00616318, 0x1fff6bce, - 0x1fff5811, 0x0067ab77, 0x007a847e, 0x1fff1572, 0x1ffefcc6, 0x0080cccc, 0x0093a599, 0x1ffeab5b, - 0x1ffe8dbf, 0x0099edd2, 0x00acc658, 0x1ffe2d86, 0x1ffe0afc, 0x00b30e78, 0x00c5e6ad, 0x1ffd9bf6, - 0x1ffd747c, 0x00cc2eb0, 0x00df0688, 0x1ffcf6aa, 0x1ffcca41, 0x00e54e6a, 0x00f825da, 0x1ffc3da2, - 0x1ffc0c4b, 0x00fe6d97, 0x01114492, 0x1ffb70e0, 0x1ffb3a9a, 0x01178c27, 0x012a62a2, 0x1ffa9063, - 0x1ffa552e, 0x0130aa0a, 0x01437ffa, 0x1ff99c2c, 0x1ff95c09, 0x0149c731, 0x015c9c8a, 0x1ff8943c, - 0x1ff84f2b, 0x0162e38d, 0x0175b843, 0x1ff77893, 0x1ff72e94, 0x017bff0e, 0x018ed316, 0x1ff64932, - 0x1ff5fa46, 0x019519a5, 0x01a7ecf2, 0x1ff5061b, 0x1ff4b240, 0x01ae3341, 0x01c105c9, 0x1ff3af4c, - 0x1ff35684, 0x01c74bd5, 0x01da1d8c, 0x1ff244c8, 0x1ff1e713, 0x01e0634f, 0x01f33429, 0x1ff0c68f, - 0x1ff063ed, 0x01f979a1, 0x020c4993, 0x1fef34a3, 0x1feecd14, 0x02128ebb, 0x02255db9, 0x1fed8f03, - 0x1fed2287, 0x022ba28f, 0x023e708d, 0x1febd5b2, 0x1feb644a, 0x0244b50b, 0x025781fe, 0x1fea08b0, - 0x1fe9925c, 0x025dc621, 0x027091fd, 0x1fe827fe, 0x1fe7acbe, 0x0276d5c1, 0x0289a07b, 0x1fe6339d, - 0x1fe5b372, 0x028fe3dd, 0x02a2ad69, 0x1fe42b90, 0x1fe3a679, 0x02a8f063, 0x02bbb8b6, 0x1fe20fd6, - 0x1fe185d5, 0x02c1fb46, 0x02d4c253, 0x1fdfe071, 0x1fdf5186, 0x02db0475, 0x02edca32, 0x1fdd9d64, - 0x1fdd098e, 0x02f40be2, 0x0306d042, 0x1fdb46ae, 0x1fdaadee, 0x030d117c, 0x031fd474, 0x1fd8dc51, - 0x1fd83ea8, 0x03261534, 0x0338d6b8, 0x1fd65e4f, 0x1fd5bbbd, 0x033f16fb, 0x0351d700, 0x1fd3ccaa, - 0x1fd32530, 0x035816c1, 0x036ad53c, 0x1fd12763, 0x1fd07b00, 0x03711477, 0x0383d15c, 0x1fce6e7c, - 0x1fcdbd31, 0x038a100e, 0x039ccb51, 0x1fcba1f5, 0x1fcaebc3, 0x03a30975, 0x03b5c30b, 0x1fc8c1d2, - 0x1fc806b9, 0x03bc009f, 0x03ceb87c, 0x1fc5ce14, 0x1fc50e14, 0x03d4f57a, 0x03e7ab93, 0x1fc2c6bd, - 0x1fc201d7, 0x03ede7f9, 0x04009c42, 0x1fbfabcd, 0x1fbee202, 0x0406d80b, 0x04198a78, 0x1fbc7d49, - 0x1fbbae99, 0x041fc5a1, 0x04327628, 0x1fb93b31, 0x1fb8679c, 0x0438b0ac, 0x044b5f40, 0x1fb5e587, - 0x1fb50d0e, 0x0451991d, 0x046445b2, 0x1fb27c4e, 0x1fb19ef1, 0x046a7ee3, 0x047d296f, 0x1faeff87, - 0x1fae1d47, 0x048361f0, 0x04960a67, 0x1fab6f35, 0x1faa8813, 0x049c4235, 0x04aee88b, 0x1fa7cb5a, - 0x1fa6df56, 0x04b51fa1, 0x04c7c3cb, 0x1fa413f8, 0x1fa32313, 0x04cdfa26, 0x04e09c18, 0x1fa04912, - 0x1f9f534c, 0x04e6d1b4, 0x04f97163, 0x1f9c6aa9, 0x1f9b7003, 0x04ffa63c, 0x0512439d, 0x1f9878c1, - 0x1f97793b, 0x051877af, 0x052b12b6, 0x1f94735b, 0x1f936ef6, 0x053145fd, 0x0543de9e, 0x1f905a7a, - 0x1f8f5137, 0x054a1117, 0x055ca748, 0x1f8c2e21, 0x1f8b2000, 0x0562d8ee, 0x05756ca2, 0x1f87ee52, - 0x1f86db55, 0x057b9d73, 0x058e2e9f, 0x1f839b10, 0x1f828336, 0x05945e95, 0x05a6ed2e, 0x1f7f345e, - 0x1f7e17a8, 0x05ad1c47, 0x05bfa840, 0x1f7aba3e, 0x1f7998ad, 0x05c5d678, 0x05d85fc7, 0x1f762cb2, - 0x1f750647, 0x05de8d19, 0x05f113b3, 0x1f718bbf, 0x1f70607a, 0x05f7401c, 0x0609c3f5, 0x1f6cd766, - 0x1f6ba748, 0x060fef71, 0x0622707d, 0x1f680fab, 0x1f66dab5, 0x06289b08, 0x063b193c, 0x1f633490, - 0x1f61fac3, 0x064142d3, 0x0653be23, 0x1f5e4619, 0x1f5d0775, 0x0659e6c2, 0x066c5f24, 0x1f594448, - 0x1f5800ce, 0x067286c6, 0x0684fc2e, 0x1f542f21, 0x1f52e6d2, 0x068b22d0, 0x069d9532, 0x1f4f06a6, - 0x1f4db983, 0x06a3bad0, 0x06b62a22, 0x1f49cadc, 0x1f4878e5, 0x06bc4eb9, 0x06cebaee, 0x1f447bc4, - 0x1f4324fb, 0x06d4de79, 0x06e74786, 0x1f3f1963, 0x1f3dbdc8, 0x06ed6a03, 0x06ffcfdd, 0x1f39a3bc, - 0x1f384350, 0x0705f147, 0x071853e3, 0x1f341ad2, 0x1f32b595, 0x071e7436, 0x0730d388, 0x1f2e7ea9, - 0x1f2d149d, 0x0736f2c0, 0x07494ebd, 0x1f28cf43, 0x1f276069, 0x074f6cd7, 0x0761c574, 0x1f230ca5, - 0x1f2198fd, 0x0767e26c, 0x077a379d, 0x1f1d36d2, 0x1f1bbe5d, 0x07805370, 0x0792a52a, 0x1f174dce, - 0x1f15d08d, 0x0798bfd3, 0x07ab0e0a, 0x1f11519c, 0x1f0fcf91, 0x07b12786, 0x07c37230, 0x1f0b4240, - 0x1f09bb6b, 0x07c98a7a, 0x07dbd18c, 0x1f051fbe, 0x1f03941f, 0x07e1e8a1, 0x07f42c0e, 0x1efeea19, - 0x1efd59b3, 0x07fa41eb, 0x080c81a9, 0x1ef8a155, 0x1ef70c28, 0x0812964a, 0x0824d24d, 0x1ef24577, - 0x1ef0ab84, 0x082ae5ad, 0x083d1dea, 0x1eebd682, 0x1eea37ca, 0x08433007, 0x08556473, 0x1ee5547a, - 0x1ee3b0fe, 0x085b7548, 0x086da5d8, 0x1edebf64, 0x1edd1724, 0x0873b562, 0x0885e209, 0x1ed81742, - 0x1ed66a41, 0x088bf044, 0x089e18f9, 0x1ed15c1a, 0x1ecfaa57, 0x08a425e1, 0x08b64a98, 0x1eca8def, - 0x1ec8d76c, 0x08bc562a, 0x08ce76d8, 0x1ec3acc6, 0x1ec1f184, 0x08d4810f, 0x08e69da8, 0x1ebcb8a3, - 0x1ebaf8a3, 0x08eca681, 0x08febefb, 0x1eb5b18a, 0x1eb3eccd, 0x0904c673, 0x0916dac2, 0x1eae977f, - 0x1eacce07, 0x091ce0d4, 0x092ef0ed, 0x1ea76a87, 0x1ea59c55, 0x0934f596, 0x0947016e, 0x1ea02aa7, - 0x1e9e57bb, 0x094d04aa, 0x095f0c36, 0x1e98d7e2, 0x1e97003e, 0x09650e01, 0x09771136, 0x1e91723e, - 0x1e8f95e3, 0x097d118d, 0x098f1060, 0x1e89f9bf, 0x1e8818ad, 0x09950f3f, 0x09a709a4, 0x1e826e69, - 0x1e8088a2, 0x09ad0707, 0x09befcf4, 0x1e7ad041, 0x1e78e5c7, 0x09c4f8d8, 0x09d6ea40, 0x1e731f4c, - 0x1e71301f, 0x09dce4a1, 0x09eed17b, 0x1e6b5b8f, 0x1e6967b1, 0x09f4ca56, 0x0a06b296, 0x1e63850e, - 0x1e618c80, 0x0a0ca9e6, 0x0a1e8d81, 0x1e5b9bce, 0x1e599e91, 0x0a248343, 0x0a36622e, 0x1e539fd4, - 0x1e519dea, 0x0a3c565e, 0x0a4e308f, 0x1e4b9126, 0x1e498a8e, 0x0a542329, 0x0a65f894, 0x1e436fc7, - 0x1e416485, 0x0a6be995, 0x0a7dba2f, 0x1e3b3bbd, 0x1e392bd1, 0x0a83a993, 0x0a957551, 0x1e32f50e, - 0x1e30e079, 0x0a9b6315, 0x0aad29ec, 0x1e2a9bbd, 0x1e288281, 0x0ab3160c, 0x0ac4d7f1, 0x1e222fd1, - 0x1e2011ee, 0x0acac26a, 0x0adc7f52, 0x1e19b14f, 0x1e178ec7, 0x0ae2681f, 0x0af41fff, 0x1e11203b, - 0x1e0ef910, 0x0afa071d, 0x0b0bb9eb, 0x1e087c9b, 0x1e0650ce, 0x0b119f56, 0x0b234d07, 0x1dffc674, - 0x1dfd9606, 0x0b2930bb, 0x0b3ad943, 0x1df6fdcc, 0x1df4c8bf, 0x0b40bb3e, 0x0b525e92, 0x1dee22a9, - 0x1debe8fd, 0x0b583ecf, 0x0b69dce6, 0x1de5350f, 0x1de2f6c6, 0x0b6fbb62, 0x0b81542f, 0x1ddc3504, - 0x1dd9f220, 0x0b8730e6, 0x0b98c45f, 0x1dd3228e, 0x1dd0db10, 0x0b9e9f4d, 0x0bb02d68, 0x1dc9fdb2, - 0x1dc7b19b, 0x0bb6068a, 0x0bc78f3b, 0x1dc0c676, 0x1dbe75c8, 0x0bcd668e, 0x0bdee9ca, 0x1db77cdf, - 0x1db5279c, 0x0be4bf4a, 0x0bf63d07, 0x1dae20f4, 0x1dabc71d, 0x0bfc10af, 0x0c0d88e2, 0x1da4b2ba, - 0x1da25450, 0x0c135ab0, 0x0c24cd4e, 0x1d9b3237, 0x1d98cf3b, 0x0c2a9d3e, 0x0c3c0a3d, 0x1d919f70, - 0x1d8f37e5, 0x0c41d84b, 0x0c533fa0, 0x1d87fa6d, 0x1d858e53, 0x0c590bc9, 0x0c6a6d68, 0x1d7e4332, - 0x1d7bd28b, 0x0c7037a8, 0x0c819388, 0x1d7479c5, 0x1d720493, 0x0c875bdb, 0x0c98b1f0, 0x1d6a9e2e, - 0x1d682472, 0x0c9e7854, 0x0cafc894, 0x1d60b070, 0x1d5e322c, 0x0cb58d04, 0x0cc6d764, 0x1d56b094, - 0x1d542dc9, 0x0ccc99de, 0x0cddde53, 0x1d4c9e9f, 0x1d4a174f, 0x0ce39ed2, 0x0cf4dd52, 0x1d427a97, - 0x1d3feec3, 0x0cfa9bd2, 0x0d0bd452, 0x1d384483, 0x1d35b42d, 0x0d1190d1, 0x0d22c347, 0x1d2dfc68, - 0x1d2b6791, 0x0d287dc1, 0x0d39aa21, 0x1d23a24e, 0x1d2108f8, 0x0d3f6292, 0x0d5088d3, 0x1d19363a, - 0x1d169867, 0x0d563f38, 0x0d675f4e, 0x1d0eb833, 0x1d0c15e4, 0x0d6d13a3, 0x0d7e2d85, 0x1d04283f, - 0x1d018176, 0x0d83dfc6, 0x0d94f369, 0x1cf98666, 0x1cf6db24, 0x0d9aa393, 0x0dabb0ec, 0x1ceed2ad, - 0x1cec22f4, 0x0db15efc, 0x0dc26600, 0x1ce40d1b, 0x1ce158ed, 0x0dc811f3, 0x0dd91298, 0x1cd935b7, - 0x1cd67d15, 0x0ddebc69, 0x0defb6a5, 0x1cce4c87, 0x1ccb8f74, 0x0df55e51, 0x0e065219, 0x1cc35192, - 0x1cc0900f, 0x0e0bf79c, 0x0e1ce4e6, 0x1cb844df, 0x1cb57eee, 0x0e22883e, 0x0e336eff, 0x1cad2675, - 0x1caa5c17, 0x0e391027, 0x0e49f055, 0x1ca1f65b, 0x1c9f2792, 0x0e4f8f4b, 0x0e6068db, 0x1c96b497, - 0x1c93e165, 0x0e66059a, 0x0e76d883, 0x1c8b6131, 0x1c888997, 0x0e7c7308, 0x0e8d3f3e, 0x1c7ffc2f, - 0x1c7d202f, 0x0e92d787, 0x0ea39d00, 0x1c748599, 0x1c71a535, 0x0ea93308, 0x0eb9f1ba, 0x1c68fd75, - 0x1c6618ae, 0x0ebf857d, 0x0ed03d5e, 0x1c5d63ca, 0x1c5a7aa4, 0x0ed5ceda, 0x0ee67fdf, 0x1c51b8a1, - 0x1c4ecb1c, 0x0eec0f10, 0x0efcb92f, 0x1c45fc00, 0x1c430a1d, 0x0f024612, 0x0f12e941, 0x1c3a2ded, - 0x1c3737b0, 0x0f1873d2, 0x0f291006, 0x1c2e4e72, 0x1c2b53db, 0x0f2e9842, 0x0f3f2d71, 0x1c225d94, - 0x1c1f5ea6, 0x0f44b354, 0x0f554175, 0x1c165b5b, 0x1c135818, 0x0f5ac4fc, 0x0f6b4c03, 0x1c0a47cf, - 0x1c074038, 0x0f70cd2a, 0x0f814d0e, 0x1bfe22f8, 0x1bfb170f, 0x0f86cbd3, 0x0f974489, 0x1bf1ecdb, - 0x1beedca2, 0x0f9cc0e7, 0x0fad3265, 0x1be5a582, 0x1be290fb, 0x0fb2ac5a, 0x0fc31697, 0x1bd94cf4, - 0x1bd63421, 0x0fc88e1e, 0x0fd8f10f, 0x1bcce337, 0x1bc9c61a, 0x0fde6626, 0x0feec1c0, 0x1bc06855, - 0x1bbd46f0, 0x0ff43464, 0x1004889e, 0x1bb3dc55, 0x1bb0b6a9, 0x1009f8cb, 0x101a459a, 0x1ba73f3d, - 0x1ba4154d, 0x101fb34d, 0x102ff8a8, 0x1b9a9117, 0x1b9762e4, 0x103563dc, 0x1045a1b9, 0x1b8dd1ea, - 0x1b8a9f77, 0x104b0a6c, 0x105b40c1, 0x1b8101be, 0x1b7dcb0c, 0x1060a6ef, 0x1070d5b1, 0x1b74209b, - 0x1b70e5ac, 0x10763958, 0x1086607e, 0x1b672e88, 0x1b63ef5f, 0x108bc19a, 0x109be119, 0x1b5a2b8e, - 0x1b56e82c, 0x10a13fa6, 0x10b15775, 0x1b4d17b4, 0x1b49d01c, 0x10b6b371, 0x10c6c385, 0x1b3ff304, - 0x1b3ca737, 0x10cc1cec, 0x10dc253c, 0x1b32bd84, 0x1b2f6d85, 0x10e17c0b, 0x10f17c8d, 0x1b25773d, - 0x1b22230e, 0x10f6d0c0, 0x1106c96a, 0x1b182038, 0x1b14c7da, 0x110c1afe, 0x111c0bc6, 0x1b0ab87c, - 0x1b075bf1, 0x11215ab8, 0x11314395, 0x1afd4012, 0x1af9df5d, 0x11368fe1, 0x114670c8, 0x1aefb702, - 0x1aec5225, 0x114bba6b, 0x115b9354, 0x1ae21d54, 0x1adeb451, 0x1160da4b, 0x1170ab2a, 0x1ad47311, - 0x1ad105e9, 0x1175ef72, 0x1185b83f, 0x1ac6b841, 0x1ac346f8, 0x118af9d4, 0x119aba84, 0x1ab8ecec, - 0x1ab57784, 0x119ff964, 0x11afb1ee, 0x1aab111c, 0x1aa79796, 0x11b4ee14, 0x11c49e6f, 0x1a9d24d9, - 0x1a99a737, 0x11c9d7d9, 0x11d97ff9, 0x1a8f282b, 0x1a8ba670, 0x11deb6a4, 0x11ee5682, 0x1a811b1b, - 0x1a7d9549, 0x11f38a6a, 0x120321fa, 0x1a72fdb2, 0x1a6f73ca, 0x1208531c, 0x1217e256, 0x1a64cff8, - 0x1a6141fd, 0x121d10af, 0x122c9789, 0x1a5691f5, 0x1a52ffeb, 0x1231c316, 0x12414186, 0x1a4843b4, - 0x1a44ad9b, 0x12466a44, 0x1255e041, 0x1a39e53d, 0x1a364b17, 0x125b062b, 0x126a73ac, 0x1a2b7698, - 0x1a27d868, 0x126f96c1, 0x127efbbb, 0x1a1cf7ce, 0x1a195597, 0x12841bf6, 0x12937861, 0x1a0e68e9, - 0x1a0ac2ac, 0x129895c0, 0x12a7e991, 0x19ffc9f1, 0x19fc1fb1, 0x12ad0412, 0x12bc4f40, 0x19f11af0, - 0x19ed6caf, 0x12c166de, 0x12d0a960, 0x19e25bee, 0x19dea9ae, 0x12d5be18, 0x12e4f7e5, 0x19d38cf4, - 0x19cfd6b8, 0x12ea09b4, 0x12f93ac2, 0x19c4ae0c, 0x19c0f3d6, 0x12fe49a6, 0x130d71eb, 0x19b5bf3f, - 0x19b20111, 0x13127de0, 0x13219d53, 0x19a6c096, 0x19a2fe73, 0x1326a656, 0x1335bcef, 0x1997b21b, - 0x1993ec04, 0x133ac2fc, 0x1349d0b0, 0x198893d6, 0x1984c9ce, 0x134ed3c5, 0x135dd88c, 0x197965d0, - 0x197597da, 0x1362d8a6, 0x1371d476, 0x196a2815, 0x19665632, 0x1376d191, 0x1385c461, 0x195adaab, - 0x195704df, 0x138abe7b, 0x1399a841, 0x194b7d9e, 0x1947a3eb, 0x139e9f56, 0x13ad800a, 0x193c10f7, - 0x1938335e, 0x13b27417, 0x13c14bb0, 0x192c94bf, 0x1928b343, 0x13c63cb2, 0x13d50b26, 0x191d08ff, - 0x191923a3, 0x13d9f91b, 0x13e8be60, 0x190d6dc1, 0x19098488, 0x13eda944, 0x13fc6553, 0x18fdc310, - 0x18f9d5fa, 0x14014d23, 0x140ffff1, 0x18ee08f4, 0x18ea1805, 0x1414e4aa, 0x14238e2f, 0x18de3f77, - 0x18da4ab2, 0x14286fce, 0x14371001, 0x18ce66a3, 0x18ca6e0a, 0x143bee83, 0x144a855b, 0x18be7e82, - 0x18ba8217, 0x144f60bd, 0x145dee30, 0x18ae871e, 0x18aa86e3, 0x1462c670, 0x14714a76, 0x189e8080, - 0x189a7c78, 0x14761f8f, 0x14849a1f, 0x188e6ab2, 0x188a62e0, 0x14896c0f, 0x1497dd20, 0x187e45be, - 0x187a3a25, 0x149cabe4, 0x14ab136d, 0x186e11af, 0x186a0250, 0x14afdf03, 0x14be3cfa, 0x185dce8e, - 0x1859bb6c, 0x14c3055e, 0x14d159bc, 0x184d7c65, 0x18496583, 0x14d61eeb, 0x14e469a6, 0x183d1b3e, - 0x1839009e, 0x14e92b9e, 0x14f76cad, 0x182cab24, 0x18288cc8, 0x14fc2b6a, 0x150a62c6, 0x181c2c20, - 0x18180a0c, 0x150f1e45, 0x151d4be3, 0x180b9e3d, 0x18077873, 0x15220422, 0x153027fb, 0x17fb0185, - 0x17f6d807, 0x1534dcf6, 0x1542f700, 0x17ea5602, 0x17e628d3, 0x1547a8b5, 0x1555b8e8, 0x17d99bbe, - 0x17d56ae0, 0x155a6754, 0x15686da7, 0x17c8d2c4, 0x17c49e3b, 0x156d18c7, 0x157b1532, 0x17b7fb1f, - 0x17b3c2ec, 0x157fbd03, 0x158daf7c, 0x17a714d7, 0x17a2d8fe, 0x159253fb, 0x15a03c7a, 0x17961ff9, - 0x1791e07b, 0x15a4dda5, 0x15b2bc22, 0x17851c8e, 0x1780d96f, 0x15b759f5, 0x15c52e67, 0x17740aa1, - 0x176fc3e3, 0x15c9c8e0, 0x15d7933f, 0x1762ea3d, 0x175e9fe2, 0x15dc2a5a, 0x15e9ea9d, 0x1751bb6b, - 0x174d6d77, 0x15ee7e58, 0x15fc3477, 0x17407e37, 0x173c2cac, 0x1600c4cf, 0x160e70c1, 0x172f32ab, - 0x172add8c, 0x1612fdb3, 0x16209f70, 0x171dd8d2, 0x17198021, 0x162528fa, 0x1632c078, 0x170c70b7, - 0x17081477, 0x16374697, 0x1644d3d0, 0x16fafa64, 0x16f69a97, 0x16495680, 0x1656d96a, 0x16e975e4, - 0x16e5128e, 0x165b58aa, 0x1668d13e, 0x16d7e341, 0x16d37c65, 0x166d4d0a, 0x167abb3e, 0x16c64288, + 0x1fffffd9, 0x0003243f, 0x0015fdba, 0x1ffff872, 0x1ffff382, 0x001c4637, 0x002f1fa6, 0x1fffdd4d, + 0x1fffd36f, 0x0035681d, 0x00484175, 0x1fffae6c, 0x1fff9f9e, 0x004e89e3, 0x00616318, 0x1fff6bce, + 0x1fff5811, 0x0067ab77, 0x007a847e, 0x1fff1572, 0x1ffefcc6, 0x0080cccc, 0x0093a599, 0x1ffeab5b, + 0x1ffe8dbf, 0x0099edd2, 0x00acc658, 0x1ffe2d86, 0x1ffe0afc, 0x00b30e78, 0x00c5e6ad, 0x1ffd9bf6, + 0x1ffd747c, 0x00cc2eb0, 0x00df0688, 0x1ffcf6aa, 0x1ffcca41, 0x00e54e6a, 0x00f825da, 0x1ffc3da2, + 0x1ffc0c4b, 0x00fe6d97, 0x01114492, 0x1ffb70e0, 0x1ffb3a9a, 0x01178c27, 0x012a62a2, 0x1ffa9063, + 0x1ffa552e, 0x0130aa0a, 0x01437ffa, 0x1ff99c2c, 0x1ff95c09, 0x0149c731, 0x015c9c8a, 0x1ff8943c, + 0x1ff84f2b, 0x0162e38d, 0x0175b843, 0x1ff77893, 0x1ff72e94, 0x017bff0e, 0x018ed316, 0x1ff64932, + 0x1ff5fa46, 0x019519a5, 0x01a7ecf2, 0x1ff5061b, 0x1ff4b240, 0x01ae3341, 0x01c105c9, 0x1ff3af4c, + 0x1ff35684, 0x01c74bd5, 0x01da1d8c, 0x1ff244c8, 0x1ff1e713, 0x01e0634f, 0x01f33429, 0x1ff0c68f, + 0x1ff063ed, 0x01f979a1, 0x020c4993, 0x1fef34a3, 0x1feecd14, 0x02128ebb, 0x02255db9, 0x1fed8f03, + 0x1fed2287, 0x022ba28f, 0x023e708d, 0x1febd5b2, 0x1feb644a, 0x0244b50b, 0x025781fe, 0x1fea08b0, + 0x1fe9925c, 0x025dc621, 0x027091fd, 0x1fe827fe, 0x1fe7acbe, 0x0276d5c1, 0x0289a07b, 0x1fe6339d, + 0x1fe5b372, 0x028fe3dd, 0x02a2ad69, 0x1fe42b90, 0x1fe3a679, 0x02a8f063, 0x02bbb8b6, 0x1fe20fd6, + 0x1fe185d5, 0x02c1fb46, 0x02d4c253, 0x1fdfe071, 0x1fdf5186, 0x02db0475, 0x02edca32, 0x1fdd9d64, + 0x1fdd098e, 0x02f40be2, 0x0306d042, 0x1fdb46ae, 0x1fdaadee, 0x030d117c, 0x031fd474, 0x1fd8dc51, + 0x1fd83ea8, 0x03261534, 0x0338d6b8, 0x1fd65e4f, 0x1fd5bbbd, 0x033f16fb, 0x0351d700, 0x1fd3ccaa, + 0x1fd32530, 0x035816c1, 0x036ad53c, 0x1fd12763, 0x1fd07b00, 0x03711477, 0x0383d15c, 0x1fce6e7c, + 0x1fcdbd31, 0x038a100e, 0x039ccb51, 0x1fcba1f5, 0x1fcaebc3, 0x03a30975, 0x03b5c30b, 0x1fc8c1d2, + 0x1fc806b9, 0x03bc009f, 0x03ceb87c, 0x1fc5ce14, 0x1fc50e14, 0x03d4f57a, 0x03e7ab93, 0x1fc2c6bd, + 0x1fc201d7, 0x03ede7f9, 0x04009c42, 0x1fbfabcd, 0x1fbee202, 0x0406d80b, 0x04198a78, 0x1fbc7d49, + 0x1fbbae99, 0x041fc5a1, 0x04327628, 0x1fb93b31, 0x1fb8679c, 0x0438b0ac, 0x044b5f40, 0x1fb5e587, + 0x1fb50d0e, 0x0451991d, 0x046445b2, 0x1fb27c4e, 0x1fb19ef1, 0x046a7ee3, 0x047d296f, 0x1faeff87, + 0x1fae1d47, 0x048361f0, 0x04960a67, 0x1fab6f35, 0x1faa8813, 0x049c4235, 0x04aee88b, 0x1fa7cb5a, + 0x1fa6df56, 0x04b51fa1, 0x04c7c3cb, 0x1fa413f8, 0x1fa32313, 0x04cdfa26, 0x04e09c18, 0x1fa04912, + 0x1f9f534c, 0x04e6d1b4, 0x04f97163, 0x1f9c6aa9, 0x1f9b7003, 0x04ffa63c, 0x0512439d, 0x1f9878c1, + 0x1f97793b, 0x051877af, 0x052b12b6, 0x1f94735b, 0x1f936ef6, 0x053145fd, 0x0543de9e, 0x1f905a7a, + 0x1f8f5137, 0x054a1117, 0x055ca748, 0x1f8c2e21, 0x1f8b2000, 0x0562d8ee, 0x05756ca2, 0x1f87ee52, + 0x1f86db55, 0x057b9d73, 0x058e2e9f, 0x1f839b10, 0x1f828336, 0x05945e95, 0x05a6ed2e, 0x1f7f345e, + 0x1f7e17a8, 0x05ad1c47, 0x05bfa840, 0x1f7aba3e, 0x1f7998ad, 0x05c5d678, 0x05d85fc7, 0x1f762cb2, + 0x1f750647, 0x05de8d19, 0x05f113b3, 0x1f718bbf, 0x1f70607a, 0x05f7401c, 0x0609c3f5, 0x1f6cd766, + 0x1f6ba748, 0x060fef71, 0x0622707d, 0x1f680fab, 0x1f66dab5, 0x06289b08, 0x063b193c, 0x1f633490, + 0x1f61fac3, 0x064142d3, 0x0653be23, 0x1f5e4619, 0x1f5d0775, 0x0659e6c2, 0x066c5f24, 0x1f594448, + 0x1f5800ce, 0x067286c6, 0x0684fc2e, 0x1f542f21, 0x1f52e6d2, 0x068b22d0, 0x069d9532, 0x1f4f06a6, + 0x1f4db983, 0x06a3bad0, 0x06b62a22, 0x1f49cadc, 0x1f4878e5, 0x06bc4eb9, 0x06cebaee, 0x1f447bc4, + 0x1f4324fb, 0x06d4de79, 0x06e74786, 0x1f3f1963, 0x1f3dbdc8, 0x06ed6a03, 0x06ffcfdd, 0x1f39a3bc, + 0x1f384350, 0x0705f147, 0x071853e3, 0x1f341ad2, 0x1f32b595, 0x071e7436, 0x0730d388, 0x1f2e7ea9, + 0x1f2d149d, 0x0736f2c0, 0x07494ebd, 0x1f28cf43, 0x1f276069, 0x074f6cd7, 0x0761c574, 0x1f230ca5, + 0x1f2198fd, 0x0767e26c, 0x077a379d, 0x1f1d36d2, 0x1f1bbe5d, 0x07805370, 0x0792a52a, 0x1f174dce, + 0x1f15d08d, 0x0798bfd3, 0x07ab0e0a, 0x1f11519c, 0x1f0fcf91, 0x07b12786, 0x07c37230, 0x1f0b4240, + 0x1f09bb6b, 0x07c98a7a, 0x07dbd18c, 0x1f051fbe, 0x1f03941f, 0x07e1e8a1, 0x07f42c0e, 0x1efeea19, + 0x1efd59b3, 0x07fa41eb, 0x080c81a9, 0x1ef8a155, 0x1ef70c28, 0x0812964a, 0x0824d24d, 0x1ef24577, + 0x1ef0ab84, 0x082ae5ad, 0x083d1dea, 0x1eebd682, 0x1eea37ca, 0x08433007, 0x08556473, 0x1ee5547a, + 0x1ee3b0fe, 0x085b7548, 0x086da5d8, 0x1edebf64, 0x1edd1724, 0x0873b562, 0x0885e209, 0x1ed81742, + 0x1ed66a41, 0x088bf044, 0x089e18f9, 0x1ed15c1a, 0x1ecfaa57, 0x08a425e1, 0x08b64a98, 0x1eca8def, + 0x1ec8d76c, 0x08bc562a, 0x08ce76d8, 0x1ec3acc6, 0x1ec1f184, 0x08d4810f, 0x08e69da8, 0x1ebcb8a3, + 0x1ebaf8a3, 0x08eca681, 0x08febefb, 0x1eb5b18a, 0x1eb3eccd, 0x0904c673, 0x0916dac2, 0x1eae977f, + 0x1eacce07, 0x091ce0d4, 0x092ef0ed, 0x1ea76a87, 0x1ea59c55, 0x0934f596, 0x0947016e, 0x1ea02aa7, + 0x1e9e57bb, 0x094d04aa, 0x095f0c36, 0x1e98d7e2, 0x1e97003e, 0x09650e01, 0x09771136, 0x1e91723e, + 0x1e8f95e3, 0x097d118d, 0x098f1060, 0x1e89f9bf, 0x1e8818ad, 0x09950f3f, 0x09a709a4, 0x1e826e69, + 0x1e8088a2, 0x09ad0707, 0x09befcf4, 0x1e7ad041, 0x1e78e5c7, 0x09c4f8d8, 0x09d6ea40, 0x1e731f4c, + 0x1e71301f, 0x09dce4a1, 0x09eed17b, 0x1e6b5b8f, 0x1e6967b1, 0x09f4ca56, 0x0a06b296, 0x1e63850e, + 0x1e618c80, 0x0a0ca9e6, 0x0a1e8d81, 0x1e5b9bce, 0x1e599e91, 0x0a248343, 0x0a36622e, 0x1e539fd4, + 0x1e519dea, 0x0a3c565e, 0x0a4e308f, 0x1e4b9126, 0x1e498a8e, 0x0a542329, 0x0a65f894, 0x1e436fc7, + 0x1e416485, 0x0a6be995, 0x0a7dba2f, 0x1e3b3bbd, 0x1e392bd1, 0x0a83a993, 0x0a957551, 0x1e32f50e, + 0x1e30e079, 0x0a9b6315, 0x0aad29ec, 0x1e2a9bbd, 0x1e288281, 0x0ab3160c, 0x0ac4d7f1, 0x1e222fd1, + 0x1e2011ee, 0x0acac26a, 0x0adc7f52, 0x1e19b14f, 0x1e178ec7, 0x0ae2681f, 0x0af41fff, 0x1e11203b, + 0x1e0ef910, 0x0afa071d, 0x0b0bb9eb, 0x1e087c9b, 0x1e0650ce, 0x0b119f56, 0x0b234d07, 0x1dffc674, + 0x1dfd9606, 0x0b2930bb, 0x0b3ad943, 0x1df6fdcc, 0x1df4c8bf, 0x0b40bb3e, 0x0b525e92, 0x1dee22a9, + 0x1debe8fd, 0x0b583ecf, 0x0b69dce6, 0x1de5350f, 0x1de2f6c6, 0x0b6fbb62, 0x0b81542f, 0x1ddc3504, + 0x1dd9f220, 0x0b8730e6, 0x0b98c45f, 0x1dd3228e, 0x1dd0db10, 0x0b9e9f4d, 0x0bb02d68, 0x1dc9fdb2, + 0x1dc7b19b, 0x0bb6068a, 0x0bc78f3b, 0x1dc0c676, 0x1dbe75c8, 0x0bcd668e, 0x0bdee9ca, 0x1db77cdf, + 0x1db5279c, 0x0be4bf4a, 0x0bf63d07, 0x1dae20f4, 0x1dabc71d, 0x0bfc10af, 0x0c0d88e2, 0x1da4b2ba, + 0x1da25450, 0x0c135ab0, 0x0c24cd4e, 0x1d9b3237, 0x1d98cf3b, 0x0c2a9d3e, 0x0c3c0a3d, 0x1d919f70, + 0x1d8f37e5, 0x0c41d84b, 0x0c533fa0, 0x1d87fa6d, 0x1d858e53, 0x0c590bc9, 0x0c6a6d68, 0x1d7e4332, + 0x1d7bd28b, 0x0c7037a8, 0x0c819388, 0x1d7479c5, 0x1d720493, 0x0c875bdb, 0x0c98b1f0, 0x1d6a9e2e, + 0x1d682472, 0x0c9e7854, 0x0cafc894, 0x1d60b070, 0x1d5e322c, 0x0cb58d04, 0x0cc6d764, 0x1d56b094, + 0x1d542dc9, 0x0ccc99de, 0x0cddde53, 0x1d4c9e9f, 0x1d4a174f, 0x0ce39ed2, 0x0cf4dd52, 0x1d427a97, + 0x1d3feec3, 0x0cfa9bd2, 0x0d0bd452, 0x1d384483, 0x1d35b42d, 0x0d1190d1, 0x0d22c347, 0x1d2dfc68, + 0x1d2b6791, 0x0d287dc1, 0x0d39aa21, 0x1d23a24e, 0x1d2108f8, 0x0d3f6292, 0x0d5088d3, 0x1d19363a, + 0x1d169867, 0x0d563f38, 0x0d675f4e, 0x1d0eb833, 0x1d0c15e4, 0x0d6d13a3, 0x0d7e2d85, 0x1d04283f, + 0x1d018176, 0x0d83dfc6, 0x0d94f369, 0x1cf98666, 0x1cf6db24, 0x0d9aa393, 0x0dabb0ec, 0x1ceed2ad, + 0x1cec22f4, 0x0db15efc, 0x0dc26600, 0x1ce40d1b, 0x1ce158ed, 0x0dc811f3, 0x0dd91298, 0x1cd935b7, + 0x1cd67d15, 0x0ddebc69, 0x0defb6a5, 0x1cce4c87, 0x1ccb8f74, 0x0df55e51, 0x0e065219, 0x1cc35192, + 0x1cc0900f, 0x0e0bf79c, 0x0e1ce4e6, 0x1cb844df, 0x1cb57eee, 0x0e22883e, 0x0e336eff, 0x1cad2675, + 0x1caa5c17, 0x0e391027, 0x0e49f055, 0x1ca1f65b, 0x1c9f2792, 0x0e4f8f4b, 0x0e6068db, 0x1c96b497, + 0x1c93e165, 0x0e66059a, 0x0e76d883, 0x1c8b6131, 0x1c888997, 0x0e7c7308, 0x0e8d3f3e, 0x1c7ffc2f, + 0x1c7d202f, 0x0e92d787, 0x0ea39d00, 0x1c748599, 0x1c71a535, 0x0ea93308, 0x0eb9f1ba, 0x1c68fd75, + 0x1c6618ae, 0x0ebf857d, 0x0ed03d5e, 0x1c5d63ca, 0x1c5a7aa4, 0x0ed5ceda, 0x0ee67fdf, 0x1c51b8a1, + 0x1c4ecb1c, 0x0eec0f10, 0x0efcb92f, 0x1c45fc00, 0x1c430a1d, 0x0f024612, 0x0f12e941, 0x1c3a2ded, + 0x1c3737b0, 0x0f1873d2, 0x0f291006, 0x1c2e4e72, 0x1c2b53db, 0x0f2e9842, 0x0f3f2d71, 0x1c225d94, + 0x1c1f5ea6, 0x0f44b354, 0x0f554175, 0x1c165b5b, 0x1c135818, 0x0f5ac4fc, 0x0f6b4c03, 0x1c0a47cf, + 0x1c074038, 0x0f70cd2a, 0x0f814d0e, 0x1bfe22f8, 0x1bfb170f, 0x0f86cbd3, 0x0f974489, 0x1bf1ecdb, + 0x1beedca2, 0x0f9cc0e7, 0x0fad3265, 0x1be5a582, 0x1be290fb, 0x0fb2ac5a, 0x0fc31697, 0x1bd94cf4, + 0x1bd63421, 0x0fc88e1e, 0x0fd8f10f, 0x1bcce337, 0x1bc9c61a, 0x0fde6626, 0x0feec1c0, 0x1bc06855, + 0x1bbd46f0, 0x0ff43464, 0x1004889e, 0x1bb3dc55, 0x1bb0b6a9, 0x1009f8cb, 0x101a459a, 0x1ba73f3d, + 0x1ba4154d, 0x101fb34d, 0x102ff8a8, 0x1b9a9117, 0x1b9762e4, 0x103563dc, 0x1045a1b9, 0x1b8dd1ea, + 0x1b8a9f77, 0x104b0a6c, 0x105b40c1, 0x1b8101be, 0x1b7dcb0c, 0x1060a6ef, 0x1070d5b1, 0x1b74209b, + 0x1b70e5ac, 0x10763958, 0x1086607e, 0x1b672e88, 0x1b63ef5f, 0x108bc19a, 0x109be119, 0x1b5a2b8e, + 0x1b56e82c, 0x10a13fa6, 0x10b15775, 0x1b4d17b4, 0x1b49d01c, 0x10b6b371, 0x10c6c385, 0x1b3ff304, + 0x1b3ca737, 0x10cc1cec, 0x10dc253c, 0x1b32bd84, 0x1b2f6d85, 0x10e17c0b, 0x10f17c8d, 0x1b25773d, + 0x1b22230e, 0x10f6d0c0, 0x1106c96a, 0x1b182038, 0x1b14c7da, 0x110c1afe, 0x111c0bc6, 0x1b0ab87c, + 0x1b075bf1, 0x11215ab8, 0x11314395, 0x1afd4012, 0x1af9df5d, 0x11368fe1, 0x114670c8, 0x1aefb702, + 0x1aec5225, 0x114bba6b, 0x115b9354, 0x1ae21d54, 0x1adeb451, 0x1160da4b, 0x1170ab2a, 0x1ad47311, + 0x1ad105e9, 0x1175ef72, 0x1185b83f, 0x1ac6b841, 0x1ac346f8, 0x118af9d4, 0x119aba84, 0x1ab8ecec, + 0x1ab57784, 0x119ff964, 0x11afb1ee, 0x1aab111c, 0x1aa79796, 0x11b4ee14, 0x11c49e6f, 0x1a9d24d9, + 0x1a99a737, 0x11c9d7d9, 0x11d97ff9, 0x1a8f282b, 0x1a8ba670, 0x11deb6a4, 0x11ee5682, 0x1a811b1b, + 0x1a7d9549, 0x11f38a6a, 0x120321fa, 0x1a72fdb2, 0x1a6f73ca, 0x1208531c, 0x1217e256, 0x1a64cff8, + 0x1a6141fd, 0x121d10af, 0x122c9789, 0x1a5691f5, 0x1a52ffeb, 0x1231c316, 0x12414186, 0x1a4843b4, + 0x1a44ad9b, 0x12466a44, 0x1255e041, 0x1a39e53d, 0x1a364b17, 0x125b062b, 0x126a73ac, 0x1a2b7698, + 0x1a27d868, 0x126f96c1, 0x127efbbb, 0x1a1cf7ce, 0x1a195597, 0x12841bf6, 0x12937861, 0x1a0e68e9, + 0x1a0ac2ac, 0x129895c0, 0x12a7e991, 0x19ffc9f1, 0x19fc1fb1, 0x12ad0412, 0x12bc4f40, 0x19f11af0, + 0x19ed6caf, 0x12c166de, 0x12d0a960, 0x19e25bee, 0x19dea9ae, 0x12d5be18, 0x12e4f7e5, 0x19d38cf4, + 0x19cfd6b8, 0x12ea09b4, 0x12f93ac2, 0x19c4ae0c, 0x19c0f3d6, 0x12fe49a6, 0x130d71eb, 0x19b5bf3f, + 0x19b20111, 0x13127de0, 0x13219d53, 0x19a6c096, 0x19a2fe73, 0x1326a656, 0x1335bcef, 0x1997b21b, + 0x1993ec04, 0x133ac2fc, 0x1349d0b0, 0x198893d6, 0x1984c9ce, 0x134ed3c5, 0x135dd88c, 0x197965d0, + 0x197597da, 0x1362d8a6, 0x1371d476, 0x196a2815, 0x19665632, 0x1376d191, 0x1385c461, 0x195adaab, + 0x195704df, 0x138abe7b, 0x1399a841, 0x194b7d9e, 0x1947a3eb, 0x139e9f56, 0x13ad800a, 0x193c10f7, + 0x1938335e, 0x13b27417, 0x13c14bb0, 0x192c94bf, 0x1928b343, 0x13c63cb2, 0x13d50b26, 0x191d08ff, + 0x191923a3, 0x13d9f91b, 0x13e8be60, 0x190d6dc1, 0x19098488, 0x13eda944, 0x13fc6553, 0x18fdc310, + 0x18f9d5fa, 0x14014d23, 0x140ffff1, 0x18ee08f4, 0x18ea1805, 0x1414e4aa, 0x14238e2f, 0x18de3f77, + 0x18da4ab2, 0x14286fce, 0x14371001, 0x18ce66a3, 0x18ca6e0a, 0x143bee83, 0x144a855b, 0x18be7e82, + 0x18ba8217, 0x144f60bd, 0x145dee30, 0x18ae871e, 0x18aa86e3, 0x1462c670, 0x14714a76, 0x189e8080, + 0x189a7c78, 0x14761f8f, 0x14849a1f, 0x188e6ab2, 0x188a62e0, 0x14896c0f, 0x1497dd20, 0x187e45be, + 0x187a3a25, 0x149cabe4, 0x14ab136d, 0x186e11af, 0x186a0250, 0x14afdf03, 0x14be3cfa, 0x185dce8e, + 0x1859bb6c, 0x14c3055e, 0x14d159bc, 0x184d7c65, 0x18496583, 0x14d61eeb, 0x14e469a6, 0x183d1b3e, + 0x1839009e, 0x14e92b9e, 0x14f76cad, 0x182cab24, 0x18288cc8, 0x14fc2b6a, 0x150a62c6, 0x181c2c20, + 0x18180a0c, 0x150f1e45, 0x151d4be3, 0x180b9e3d, 0x18077873, 0x15220422, 0x153027fb, 0x17fb0185, + 0x17f6d807, 0x1534dcf6, 0x1542f700, 0x17ea5602, 0x17e628d3, 0x1547a8b5, 0x1555b8e8, 0x17d99bbe, + 0x17d56ae0, 0x155a6754, 0x15686da7, 0x17c8d2c4, 0x17c49e3b, 0x156d18c7, 0x157b1532, 0x17b7fb1f, + 0x17b3c2ec, 0x157fbd03, 0x158daf7c, 0x17a714d7, 0x17a2d8fe, 0x159253fb, 0x15a03c7a, 0x17961ff9, + 0x1791e07b, 0x15a4dda5, 0x15b2bc22, 0x17851c8e, 0x1780d96f, 0x15b759f5, 0x15c52e67, 0x17740aa1, + 0x176fc3e3, 0x15c9c8e0, 0x15d7933f, 0x1762ea3d, 0x175e9fe2, 0x15dc2a5a, 0x15e9ea9d, 0x1751bb6b, + 0x174d6d77, 0x15ee7e58, 0x15fc3477, 0x17407e37, 0x173c2cac, 0x1600c4cf, 0x160e70c1, 0x172f32ab, + 0x172add8c, 0x1612fdb3, 0x16209f70, 0x171dd8d2, 0x17198021, 0x162528fa, 0x1632c078, 0x170c70b7, + 0x17081477, 0x16374697, 0x1644d3d0, 0x16fafa64, 0x16f69a97, 0x16495680, 0x1656d96a, 0x16e975e4, + 0x16e5128e, 0x165b58aa, 0x1668d13e, 0x16d7e341, 0x16d37c65, 0x166d4d0a, 0x167abb3e, 0x16c64288, 0x16c1d827, 0x167f3394, 0x168c9760, 0x16b493c2, 0x16b025e0, 0x16910c3d, 0x169e659a, 0x16a2d6fb }; const int twidTab512[8*6 + 32*6 + 128*6] = { - 0x20000000, 0x00000000, 0x1d906bcf, 0x0c3ef153, 0x16a09e66, 0x16a09e66, 0x0c3ef153, 0x1d906bcf, - 0x20000000, 0x00000000, 0x1f6297d0, 0x063e2e0f, 0x1d906bcf, 0x0c3ef153, 0x1a9b6629, 0x11c73b3a, - 0x20000000, 0x00000000, 0x1a9b6629, 0x11c73b3a, 0x0c3ef153, 0x1d906bcf, 0xf9c1d1f1, 0x1f6297d0, - 0x00000000, 0x20000000, 0xf3c10ead, 0x1d906bcf, 0xe95f619a, 0x16a09e66, 0xe26f9431, 0x0c3ef153, - 0x16a09e66, 0x16a09e66, 0x11c73b3a, 0x1a9b6629, 0x0c3ef153, 0x1d906bcf, 0x063e2e0f, 0x1f6297d0, - 0xe95f619a, 0x16a09e66, 0xe09d6830, 0x063e2e0f, 0xe26f9431, 0xf3c10ead, 0xee38c4c6, 0xe56499d7, - - 0x20000000, 0x00000000, 0x1fd88da4, 0x0322f4d8, 0x1f6297d0, 0x063e2e0f, 0x1e9f4157, 0x094a0317, - 0x20000000, 0x00000000, 0x1ff621e3, 0x0191f65f, 0x1fd88da4, 0x0322f4d8, 0x1fa7557f, 0x04b2041c, - 0x20000000, 0x00000000, 0x1fa7557f, 0x04b2041c, 0x1e9f4157, 0x094a0317, 0x1ced7af4, 0x0dae8805, - 0x1d906bcf, 0x0c3ef153, 0x1c38b2f2, 0x0f15ae9c, 0x1a9b6629, 0x11c73b3a, 0x18bc806b, 0x144cf325, - 0x1f6297d0, 0x063e2e0f, 0x1f0a7efc, 0x07c67e5f, 0x1e9f4157, 0x094a0317, 0x1e212105, 0x0ac7cd3b, - 0x1a9b6629, 0x11c73b3a, 0x17b5df22, 0x157d6935, 0x144cf325, 0x18bc806b, 0x10738799, 0x1b728345, - 0x16a09e66, 0x16a09e66, 0x144cf325, 0x18bc806b, 0x11c73b3a, 0x1a9b6629, 0x0f15ae9c, 0x1c38b2f2, - 0x1d906bcf, 0x0c3ef153, 0x1ced7af4, 0x0dae8805, 0x1c38b2f2, 0x0f15ae9c, 0x1b728345, 0x10738799, - 0x0c3ef153, 0x1d906bcf, 0x07c67e5f, 0x1f0a7efc, 0x0322f4d8, 0x1fd88da4, 0xfe6e09a1, 0x1ff621e3, - 0x0c3ef153, 0x1d906bcf, 0x094a0317, 0x1e9f4157, 0x063e2e0f, 0x1f6297d0, 0x0322f4d8, 0x1fd88da4, - 0x1a9b6629, 0x11c73b3a, 0x19b3e048, 0x130ff7fd, 0x18bc806b, 0x144cf325, 0x17b5df22, 0x157d6935, - 0xf9c1d1f1, 0x1f6297d0, 0xf53832c5, 0x1e212105, 0xf0ea5164, 0x1c38b2f2, 0xecf00803, 0x19b3e048, - 0x00000000, 0x20000000, 0xfcdd0b28, 0x1fd88da4, 0xf9c1d1f1, 0x1f6297d0, 0xf6b5fce9, 0x1e9f4157, - 0x16a09e66, 0x16a09e66, 0x157d6935, 0x17b5df22, 0x144cf325, 0x18bc806b, 0x130ff7fd, 0x19b3e048, - 0xe95f619a, 0x16a09e66, 0xe64c1fb8, 0x130ff7fd, 0xe3c74d0e, 0x0f15ae9c, 0xe1dedefb, 0x0ac7cd3b, - 0xf3c10ead, 0x1d906bcf, 0xf0ea5164, 0x1c38b2f2, 0xee38c4c6, 0x1a9b6629, 0xebb30cdb, 0x18bc806b, - 0x11c73b3a, 0x1a9b6629, 0x10738799, 0x1b728345, 0x0f15ae9c, 0x1c38b2f2, 0x0dae8805, 0x1ced7af4, - 0xe09d6830, 0x063e2e0f, 0xe009de1d, 0x0191f65f, 0xe027725c, 0xfcdd0b28, 0xe0f58104, 0xf83981a1, - 0xe95f619a, 0x16a09e66, 0xe7437f95, 0x144cf325, 0xe56499d7, 0x11c73b3a, 0xe3c74d0e, 0x0f15ae9c, - 0x0c3ef153, 0x1d906bcf, 0x0ac7cd3b, 0x1e212105, 0x094a0317, 0x1e9f4157, 0x07c67e5f, 0x1f0a7efc, - 0xe26f9431, 0xf3c10ead, 0xe48d7cbb, 0xef8c7867, 0xe7437f95, 0xebb30cdb, 0xea8296cb, 0xe84a20de, - 0xe26f9431, 0x0c3ef153, 0xe160bea9, 0x094a0317, 0xe09d6830, 0x063e2e0f, 0xe027725c, 0x0322f4d8, - 0x063e2e0f, 0x1f6297d0, 0x04b2041c, 0x1fa7557f, 0x0322f4d8, 0x1fd88da4, 0x0191f65f, 0x1ff621e3, - 0xee38c4c6, 0xe56499d7, 0xf25177fb, 0xe312850c, 0xf6b5fce9, 0xe160bea9, 0xfb4dfbe4, 0xe058aa81, - - 0x20000000, 0x00000000, 0x1ffd8861, 0x00c90ab0, 0x1ff621e3, 0x0191f65f, 0x1fe9cdad, 0x025aa412, - 0x20000000, 0x00000000, 0x1fff6217, 0x00648748, 0x1ffd8861, 0x00c90ab0, 0x1ffa72f0, 0x012d8657, - 0x20000000, 0x00000000, 0x1ffa72f0, 0x012d8657, 0x1fe9cdad, 0x025aa412, 0x1fce15fd, 0x0386f0b9, - 0x1fd88da4, 0x0322f4d8, 0x1fc26471, 0x03eac9cb, 0x1fa7557f, 0x04b2041c, 0x1f8764fa, 0x05788511, - 0x1ff621e3, 0x0191f65f, 0x1ff09566, 0x01f656e8, 0x1fe9cdad, 0x025aa412, 0x1fe1cafd, 0x02beda01, - 0x1fa7557f, 0x04b2041c, 0x1f7599a4, 0x05db7678, 0x1f38f3ac, 0x0702e09b, 0x1ef178a4, 0x0827dc07, - 0x1f6297d0, 0x063e2e0f, 0x1f38f3ac, 0x0702e09b, 0x1f0a7efc, 0x07c67e5f, 0x1ed740e7, 0x0888e931, - 0x1fd88da4, 0x0322f4d8, 0x1fce15fd, 0x0386f0b9, 0x1fc26471, 0x03eac9cb, 0x1fb57972, 0x044e7c34, - 0x1e9f4157, 0x094a0317, 0x1e426a4b, 0x0a68f121, 0x1ddb13b7, 0x0b844298, 0x1d696174, 0x0c9b9532, - 0x1e9f4157, 0x094a0317, 0x1e6288ec, 0x0a09ae4a, 0x1e212105, 0x0ac7cd3b, 0x1ddb13b7, 0x0b844298, - 0x1fa7557f, 0x04b2041c, 0x1f97f925, 0x05155dac, 0x1f8764fa, 0x05788511, 0x1f7599a4, 0x05db7678, - 0x1ced7af4, 0x0dae8805, 0x1c678b35, 0x0ebcbbae, 0x1bd7c0ac, 0x0fc5d26e, 0x1b3e4d3f, 0x10c9704d, - 0x1d906bcf, 0x0c3ef153, 0x1d4134d1, 0x0cf7bca2, 0x1ced7af4, 0x0dae8805, 0x1c954b21, 0x0e63374d, - 0x1f6297d0, 0x063e2e0f, 0x1f4e603b, 0x06a0a809, 0x1f38f3ac, 0x0702e09b, 0x1f2252f7, 0x0764d3f9, - 0x1a9b6629, 0x11c73b3a, 0x19ef43ef, 0x12bedb26, 0x193a224a, 0x13affa29, 0x187c4010, 0x149a449c, - 0x1c38b2f2, 0x0f15ae9c, 0x1bd7c0ac, 0x0fc5d26e, 0x1b728345, 0x10738799, 0x1b090a58, 0x111eb354, - 0x1f0a7efc, 0x07c67e5f, 0x1ef178a4, 0x0827dc07, 0x1ed740e7, 0x0888e931, 0x1ebbd8c9, 0x08e9a220, - 0x17b5df22, 0x157d6935, 0x16e74455, 0x16591926, 0x1610b755, 0x172d0838, 0x15328293, 0x17f8ece3, - 0x1a9b6629, 0x11c73b3a, 0x1a29a7a0, 0x126d054d, 0x19b3e048, 0x130ff7fd, 0x193a224a, 0x13affa29, - 0x1e9f4157, 0x094a0317, 0x1e817bab, 0x09aa0861, 0x1e6288ec, 0x0a09ae4a, 0x1e426a4b, 0x0a68f121, - 0x144cf325, 0x18bc806b, 0x136058b1, 0x19777ef5, 0x126d054d, 0x1a29a7a0, 0x11734d64, 0x1ad2bc9e, - 0x18bc806b, 0x144cf325, 0x183b0e0c, 0x14e6cabc, 0x17b5df22, 0x157d6935, 0x172d0838, 0x1610b755, - 0x1e212105, 0x0ac7cd3b, 0x1dfeae62, 0x0b263eef, 0x1ddb13b7, 0x0b844298, 0x1db65262, 0x0be1d499, - 0x10738799, 0x1b728345, 0x0f6e0ca9, 0x1c08c426, 0x0e63374d, 0x1c954b21, 0x0d536416, 0x1d17e774, - 0x16a09e66, 0x16a09e66, 0x1610b755, 0x172d0838, 0x157d6935, 0x17b5df22, 0x14e6cabc, 0x183b0e0c, - 0x1d906bcf, 0x0c3ef153, 0x1d696174, 0x0c9b9532, 0x1d4134d1, 0x0cf7bca2, 0x1d17e774, 0x0d536416, - 0x0c3ef153, 0x1d906bcf, 0x0b263eef, 0x1dfeae62, 0x0a09ae4a, 0x1e6288ec, 0x08e9a220, 0x1ebbd8c9, - 0x144cf325, 0x18bc806b, 0x13affa29, 0x193a224a, 0x130ff7fd, 0x19b3e048, 0x126d054d, 0x1a29a7a0, - 0x1ced7af4, 0x0dae8805, 0x1cc1f0f4, 0x0e0924ec, 0x1c954b21, 0x0e63374d, 0x1c678b35, 0x0ebcbbae, - 0x07c67e5f, 0x1f0a7efc, 0x06a0a809, 0x1f4e603b, 0x05788511, 0x1f8764fa, 0x044e7c34, 0x1fb57972, - 0x11c73b3a, 0x1a9b6629, 0x111eb354, 0x1b090a58, 0x10738799, 0x1b728345, 0x0fc5d26e, 0x1bd7c0ac, - 0x1c38b2f2, 0x0f15ae9c, 0x1c08c426, 0x0f6e0ca9, 0x1bd7c0ac, 0x0fc5d26e, 0x1ba5aa67, 0x101cfc87, - 0x0322f4d8, 0x1fd88da4, 0x01f656e8, 0x1ff09566, 0x00c90ab0, 0x1ffd8861, 0xff9b78b8, 0x1fff6217, - 0x0f15ae9c, 0x1c38b2f2, 0x0e63374d, 0x1c954b21, 0x0dae8805, 0x1ced7af4, 0x0cf7bca2, 0x1d4134d1, - 0x1b728345, 0x10738799, 0x1b3e4d3f, 0x10c9704d, 0x1b090a58, 0x111eb354, 0x1ad2bc9e, 0x11734d64, - 0xfe6e09a1, 0x1ff621e3, 0xfd4125ff, 0x1fe1cafd, 0xfc153635, 0x1fc26471, 0xfaeaa254, 0x1f97f925, - 0x0c3ef153, 0x1d906bcf, 0x0b844298, 0x1ddb13b7, 0x0ac7cd3b, 0x1e212105, 0x0a09ae4a, 0x1e6288ec, - 0x1a9b6629, 0x11c73b3a, 0x1a63091b, 0x121a7999, 0x1a29a7a0, 0x126d054d, 0x19ef43ef, 0x12bedb26, - 0xf9c1d1f1, 0x1f6297d0, 0xf89b2c07, 0x1f2252f7, 0xf77716cf, 0x1ed740e7, 0xf655f79f, 0x1e817bab, - 0x094a0317, 0x1e9f4157, 0x0888e931, 0x1ed740e7, 0x07c67e5f, 0x1f0a7efc, 0x0702e09b, 0x1f38f3ac, - 0x19b3e048, 0x130ff7fd, 0x19777ef5, 0x136058b1, 0x193a224a, 0x13affa29, 0x18fbcca4, 0x13fed953, - 0xf53832c5, 0x1e212105, 0xf41e2b67, 0x1db65262, 0xf308435e, 0x1d4134d1, 0xf1f6db14, 0x1cc1f0f4, - 0x063e2e0f, 0x1f6297d0, 0x05788511, 0x1f8764fa, 0x04b2041c, 0x1fa7557f, 0x03eac9cb, 0x1fc26471, - 0x18bc806b, 0x144cf325, 0x187c4010, 0x149a449c, 0x183b0e0c, 0x14e6cabc, 0x17f8ece3, 0x15328293, - 0xf0ea5164, 0x1c38b2f2, 0xefe30379, 0x1ba5aa67, 0xeee14cac, 0x1b090a58, 0xede58667, 0x1a63091b, - 0x0322f4d8, 0x1fd88da4, 0x025aa412, 0x1fe9cdad, 0x0191f65f, 0x1ff621e3, 0x00c90ab0, 0x1ffd8861, - 0x17b5df22, 0x157d6935, 0x1771e75f, 0x15c77bbe, 0x172d0838, 0x1610b755, 0x16e74455, 0x16591926, - 0xecf00803, 0x19b3e048, 0xec0126ad, 0x18fbcca4, 0xeb193544, 0x183b0e0c, 0xea388442, 0x1771e75f, - 0x00000000, 0x20000000, 0xff36f550, 0x1ffd8861, 0xfe6e09a1, 0x1ff621e3, 0xfda55bee, 0x1fe9cdad, - 0x16a09e66, 0x16a09e66, 0x16591926, 0x16e74455, 0x1610b755, 0x172d0838, 0x15c77bbe, 0x1771e75f, - 0xe95f619a, 0x16a09e66, 0xe88e18a1, 0x15c77bbe, 0xe7c4f1f4, 0x14e6cabc, 0xe704335c, 0x13fed953, - 0xfcdd0b28, 0x1fd88da4, 0xfc153635, 0x1fc26471, 0xfb4dfbe4, 0x1fa7557f, 0xfa877aef, 0x1f8764fa, - 0x157d6935, 0x17b5df22, 0x15328293, 0x17f8ece3, 0x14e6cabc, 0x183b0e0c, 0x149a449c, 0x187c4010, - 0xe64c1fb8, 0x130ff7fd, 0xe59cf6e5, 0x121a7999, 0xe4f6f5a8, 0x111eb354, 0xe45a5599, 0x101cfc87, - 0xf9c1d1f1, 0x1f6297d0, 0xf8fd1f65, 0x1f38f3ac, 0xf83981a1, 0x1f0a7efc, 0xf77716cf, 0x1ed740e7, - 0x144cf325, 0x18bc806b, 0x13fed953, 0x18fbcca4, 0x13affa29, 0x193a224a, 0x136058b1, 0x19777ef5, - 0xe3c74d0e, 0x0f15ae9c, 0xe33e0f0c, 0x0e0924ec, 0xe2becb2f, 0x0cf7bca2, 0xe249ad9e, 0x0be1d499, - 0xf6b5fce9, 0x1e9f4157, 0xf5f651b6, 0x1e6288ec, 0xf53832c5, 0x1e212105, 0xf47bbd68, 0x1ddb13b7, - 0x130ff7fd, 0x19b3e048, 0x12bedb26, 0x19ef43ef, 0x126d054d, 0x1a29a7a0, 0x121a7999, 0x1a63091b, - 0xe1dedefb, 0x0ac7cd3b, 0xe17e8455, 0x09aa0861, 0xe128bf19, 0x0888e931, 0xe0ddad09, 0x0764d3f9, - 0xf3c10ead, 0x1d906bcf, 0xf308435e, 0x1d4134d1, 0xf25177fb, 0x1ced7af4, 0xf19cc8b3, 0x1c954b21, - 0x11c73b3a, 0x1a9b6629, 0x11734d64, 0x1ad2bc9e, 0x111eb354, 0x1b090a58, 0x10c9704d, 0x1b3e4d3f, - 0xe09d6830, 0x063e2e0f, 0xe06806db, 0x05155dac, 0xe03d9b8f, 0x03eac9cb, 0xe01e3503, 0x02beda01, - 0xf0ea5164, 0x1c38b2f2, 0xf03a2d92, 0x1bd7c0ac, 0xef8c7867, 0x1b728345, 0xeee14cac, 0x1b090a58, - 0x10738799, 0x1b728345, 0x101cfc87, 0x1ba5aa67, 0x0fc5d26e, 0x1bd7c0ac, 0x0f6e0ca9, 0x1c08c426, - 0xe009de1d, 0x0191f65f, 0xe0009de9, 0x00648748, 0xe002779f, 0xff36f550, 0xe00f6a9a, 0xfe09a918, - 0xee38c4c6, 0x1a9b6629, 0xed92fab3, 0x1a29a7a0, 0xecf00803, 0x19b3e048, 0xec5005d7, 0x193a224a, - 0x0f15ae9c, 0x1c38b2f2, 0x0ebcbbae, 0x1c678b35, 0x0e63374d, 0x1c954b21, 0x0e0924ec, 0x1cc1f0f4, - 0xe027725c, 0xfcdd0b28, 0xe04a868e, 0xfbb183cc, 0xe0789b06, 0xfa877aef, 0xe0b19fc5, 0xf95f57f7, - 0xebb30cdb, 0x18bc806b, 0xeb193544, 0x183b0e0c, 0xea8296cb, 0x17b5df22, 0xe9ef48ab, 0x172d0838, - 0x0dae8805, 0x1ced7af4, 0x0d536416, 0x1d17e774, 0x0cf7bca2, 0x1d4134d1, 0x0c9b9532, 0x1d696174, - 0xe0f58104, 0xf83981a1, 0xe1442737, 0xf7165de0, 0xe19d7714, 0xf5f651b6, 0xe201519e, 0xf4d9c111, - 0xe95f619a, 0x16a09e66, 0xe8d2f7c8, 0x1610b755, 0xe84a20de, 0x157d6935, 0xe7c4f1f4, 0x14e6cabc, - 0x0c3ef153, 0x1d906bcf, 0x0be1d499, 0x1db65262, 0x0b844298, 0x1ddb13b7, 0x0b263eef, 0x1dfeae62, - 0xe26f9431, 0xf3c10ead, 0xe2e8188c, 0xf2ac9bea, 0xe36ab4df, 0xf19cc8b3, 0xe3f73bda, 0xf091f357, - 0xe7437f95, 0x144cf325, 0xe6c5ddb6, 0x13affa29, 0xe64c1fb8, 0x130ff7fd, 0xe5d65860, 0x126d054d, - 0x0ac7cd3b, 0x1e212105, 0x0a68f121, 0x1e426a4b, 0x0a09ae4a, 0x1e6288ec, 0x09aa0861, 0x1e817bab, - 0xe48d7cbb, 0xef8c7867, 0xe52d4362, 0xee8cb29c, 0xe5d65860, 0xed92fab3, 0xe688810b, 0xec9fa74f, - 0xe56499d7, 0x11c73b3a, 0xe4f6f5a8, 0x111eb354, 0xe48d7cbb, 0x10738799, 0xe4283f54, 0x0fc5d26e, - 0x094a0317, 0x1e9f4157, 0x08e9a220, 0x1ebbd8c9, 0x0888e931, 0x1ed740e7, 0x0827dc07, 0x1ef178a4, - 0xe7437f95, 0xebb30cdb, 0xe807131d, 0xeacd7d6d, 0xe8d2f7c8, 0xe9ef48ab, 0xe9a6e6da, 0xe918bbab, - 0xe3c74d0e, 0x0f15ae9c, 0xe36ab4df, 0x0e63374d, 0xe312850c, 0x0dae8805, 0xe2becb2f, 0x0cf7bca2, - 0x07c67e5f, 0x1f0a7efc, 0x0764d3f9, 0x1f2252f7, 0x0702e09b, 0x1f38f3ac, 0x06a0a809, 0x1f4e603b, - 0xea8296cb, 0xe84a20de, 0xeb65bb64, 0xe783bff0, 0xec5005d7, 0xe6c5ddb6, 0xed4124da, 0xe610bc11, - 0xe26f9431, 0x0c3ef153, 0xe224ec49, 0x0b844298, 0xe1dedefb, 0x0ac7cd3b, 0xe19d7714, 0x0a09ae4a, - 0x063e2e0f, 0x1f6297d0, 0x05db7678, 0x1f7599a4, 0x05788511, 0x1f8764fa, 0x05155dac, 0x1f97f925, - 0xee38c4c6, 0xe56499d7, 0xef368fb3, 0xe4c1b2c1, 0xf03a2d92, 0xe4283f54, 0xf1434452, 0xe39874cb, - 0xe160bea9, 0x094a0317, 0xe128bf19, 0x0888e931, 0xe0f58104, 0x07c67e5f, 0xe0c70c54, 0x0702e09b, - 0x04b2041c, 0x1fa7557f, 0x044e7c34, 0x1fb57972, 0x03eac9cb, 0x1fc26471, 0x0386f0b9, 0x1fce15fd, - 0xf25177fb, 0xe312850c, 0xf3646ace, 0xe2969e8c, 0xf47bbd68, 0xe224ec49, 0xf5970edf, 0xe1bd95b5, - 0xe09d6830, 0x063e2e0f, 0xe0789b06, 0x05788511, 0xe058aa81, 0x04b2041c, 0xe03d9b8f, 0x03eac9cb, - 0x0322f4d8, 0x1fd88da4, 0x02beda01, 0x1fe1cafd, 0x025aa412, 0x1fe9cdad, 0x01f656e8, 0x1ff09566, - 0xf6b5fce9, 0xe160bea9, 0xf7d823f9, 0xe10e875c, 0xf8fd1f65, 0xe0c70c54, 0xfa248988, 0xe08a665c, - 0xe027725c, 0x0322f4d8, 0xe0163253, 0x025aa412, 0xe009de1d, 0x0191f65f, 0xe002779f, 0x00c90ab0, - 0x0191f65f, 0x1ff621e3, 0x012d8657, 0x1ffa72f0, 0x00c90ab0, 0x1ffd8861, 0x00648748, 0x1fff6217, + 0x20000000, 0x00000000, 0x1d906bcf, 0x0c3ef153, 0x16a09e66, 0x16a09e66, 0x0c3ef153, 0x1d906bcf, + 0x20000000, 0x00000000, 0x1f6297d0, 0x063e2e0f, 0x1d906bcf, 0x0c3ef153, 0x1a9b6629, 0x11c73b3a, + 0x20000000, 0x00000000, 0x1a9b6629, 0x11c73b3a, 0x0c3ef153, 0x1d906bcf, 0xf9c1d1f1, 0x1f6297d0, + 0x00000000, 0x20000000, 0xf3c10ead, 0x1d906bcf, 0xe95f619a, 0x16a09e66, 0xe26f9431, 0x0c3ef153, + 0x16a09e66, 0x16a09e66, 0x11c73b3a, 0x1a9b6629, 0x0c3ef153, 0x1d906bcf, 0x063e2e0f, 0x1f6297d0, + 0xe95f619a, 0x16a09e66, 0xe09d6830, 0x063e2e0f, 0xe26f9431, 0xf3c10ead, 0xee38c4c6, 0xe56499d7, + + 0x20000000, 0x00000000, 0x1fd88da4, 0x0322f4d8, 0x1f6297d0, 0x063e2e0f, 0x1e9f4157, 0x094a0317, + 0x20000000, 0x00000000, 0x1ff621e3, 0x0191f65f, 0x1fd88da4, 0x0322f4d8, 0x1fa7557f, 0x04b2041c, + 0x20000000, 0x00000000, 0x1fa7557f, 0x04b2041c, 0x1e9f4157, 0x094a0317, 0x1ced7af4, 0x0dae8805, + 0x1d906bcf, 0x0c3ef153, 0x1c38b2f2, 0x0f15ae9c, 0x1a9b6629, 0x11c73b3a, 0x18bc806b, 0x144cf325, + 0x1f6297d0, 0x063e2e0f, 0x1f0a7efc, 0x07c67e5f, 0x1e9f4157, 0x094a0317, 0x1e212105, 0x0ac7cd3b, + 0x1a9b6629, 0x11c73b3a, 0x17b5df22, 0x157d6935, 0x144cf325, 0x18bc806b, 0x10738799, 0x1b728345, + 0x16a09e66, 0x16a09e66, 0x144cf325, 0x18bc806b, 0x11c73b3a, 0x1a9b6629, 0x0f15ae9c, 0x1c38b2f2, + 0x1d906bcf, 0x0c3ef153, 0x1ced7af4, 0x0dae8805, 0x1c38b2f2, 0x0f15ae9c, 0x1b728345, 0x10738799, + 0x0c3ef153, 0x1d906bcf, 0x07c67e5f, 0x1f0a7efc, 0x0322f4d8, 0x1fd88da4, 0xfe6e09a1, 0x1ff621e3, + 0x0c3ef153, 0x1d906bcf, 0x094a0317, 0x1e9f4157, 0x063e2e0f, 0x1f6297d0, 0x0322f4d8, 0x1fd88da4, + 0x1a9b6629, 0x11c73b3a, 0x19b3e048, 0x130ff7fd, 0x18bc806b, 0x144cf325, 0x17b5df22, 0x157d6935, + 0xf9c1d1f1, 0x1f6297d0, 0xf53832c5, 0x1e212105, 0xf0ea5164, 0x1c38b2f2, 0xecf00803, 0x19b3e048, + 0x00000000, 0x20000000, 0xfcdd0b28, 0x1fd88da4, 0xf9c1d1f1, 0x1f6297d0, 0xf6b5fce9, 0x1e9f4157, + 0x16a09e66, 0x16a09e66, 0x157d6935, 0x17b5df22, 0x144cf325, 0x18bc806b, 0x130ff7fd, 0x19b3e048, + 0xe95f619a, 0x16a09e66, 0xe64c1fb8, 0x130ff7fd, 0xe3c74d0e, 0x0f15ae9c, 0xe1dedefb, 0x0ac7cd3b, + 0xf3c10ead, 0x1d906bcf, 0xf0ea5164, 0x1c38b2f2, 0xee38c4c6, 0x1a9b6629, 0xebb30cdb, 0x18bc806b, + 0x11c73b3a, 0x1a9b6629, 0x10738799, 0x1b728345, 0x0f15ae9c, 0x1c38b2f2, 0x0dae8805, 0x1ced7af4, + 0xe09d6830, 0x063e2e0f, 0xe009de1d, 0x0191f65f, 0xe027725c, 0xfcdd0b28, 0xe0f58104, 0xf83981a1, + 0xe95f619a, 0x16a09e66, 0xe7437f95, 0x144cf325, 0xe56499d7, 0x11c73b3a, 0xe3c74d0e, 0x0f15ae9c, + 0x0c3ef153, 0x1d906bcf, 0x0ac7cd3b, 0x1e212105, 0x094a0317, 0x1e9f4157, 0x07c67e5f, 0x1f0a7efc, + 0xe26f9431, 0xf3c10ead, 0xe48d7cbb, 0xef8c7867, 0xe7437f95, 0xebb30cdb, 0xea8296cb, 0xe84a20de, + 0xe26f9431, 0x0c3ef153, 0xe160bea9, 0x094a0317, 0xe09d6830, 0x063e2e0f, 0xe027725c, 0x0322f4d8, + 0x063e2e0f, 0x1f6297d0, 0x04b2041c, 0x1fa7557f, 0x0322f4d8, 0x1fd88da4, 0x0191f65f, 0x1ff621e3, + 0xee38c4c6, 0xe56499d7, 0xf25177fb, 0xe312850c, 0xf6b5fce9, 0xe160bea9, 0xfb4dfbe4, 0xe058aa81, + + 0x20000000, 0x00000000, 0x1ffd8861, 0x00c90ab0, 0x1ff621e3, 0x0191f65f, 0x1fe9cdad, 0x025aa412, + 0x20000000, 0x00000000, 0x1fff6217, 0x00648748, 0x1ffd8861, 0x00c90ab0, 0x1ffa72f0, 0x012d8657, + 0x20000000, 0x00000000, 0x1ffa72f0, 0x012d8657, 0x1fe9cdad, 0x025aa412, 0x1fce15fd, 0x0386f0b9, + 0x1fd88da4, 0x0322f4d8, 0x1fc26471, 0x03eac9cb, 0x1fa7557f, 0x04b2041c, 0x1f8764fa, 0x05788511, + 0x1ff621e3, 0x0191f65f, 0x1ff09566, 0x01f656e8, 0x1fe9cdad, 0x025aa412, 0x1fe1cafd, 0x02beda01, + 0x1fa7557f, 0x04b2041c, 0x1f7599a4, 0x05db7678, 0x1f38f3ac, 0x0702e09b, 0x1ef178a4, 0x0827dc07, + 0x1f6297d0, 0x063e2e0f, 0x1f38f3ac, 0x0702e09b, 0x1f0a7efc, 0x07c67e5f, 0x1ed740e7, 0x0888e931, + 0x1fd88da4, 0x0322f4d8, 0x1fce15fd, 0x0386f0b9, 0x1fc26471, 0x03eac9cb, 0x1fb57972, 0x044e7c34, + 0x1e9f4157, 0x094a0317, 0x1e426a4b, 0x0a68f121, 0x1ddb13b7, 0x0b844298, 0x1d696174, 0x0c9b9532, + 0x1e9f4157, 0x094a0317, 0x1e6288ec, 0x0a09ae4a, 0x1e212105, 0x0ac7cd3b, 0x1ddb13b7, 0x0b844298, + 0x1fa7557f, 0x04b2041c, 0x1f97f925, 0x05155dac, 0x1f8764fa, 0x05788511, 0x1f7599a4, 0x05db7678, + 0x1ced7af4, 0x0dae8805, 0x1c678b35, 0x0ebcbbae, 0x1bd7c0ac, 0x0fc5d26e, 0x1b3e4d3f, 0x10c9704d, + 0x1d906bcf, 0x0c3ef153, 0x1d4134d1, 0x0cf7bca2, 0x1ced7af4, 0x0dae8805, 0x1c954b21, 0x0e63374d, + 0x1f6297d0, 0x063e2e0f, 0x1f4e603b, 0x06a0a809, 0x1f38f3ac, 0x0702e09b, 0x1f2252f7, 0x0764d3f9, + 0x1a9b6629, 0x11c73b3a, 0x19ef43ef, 0x12bedb26, 0x193a224a, 0x13affa29, 0x187c4010, 0x149a449c, + 0x1c38b2f2, 0x0f15ae9c, 0x1bd7c0ac, 0x0fc5d26e, 0x1b728345, 0x10738799, 0x1b090a58, 0x111eb354, + 0x1f0a7efc, 0x07c67e5f, 0x1ef178a4, 0x0827dc07, 0x1ed740e7, 0x0888e931, 0x1ebbd8c9, 0x08e9a220, + 0x17b5df22, 0x157d6935, 0x16e74455, 0x16591926, 0x1610b755, 0x172d0838, 0x15328293, 0x17f8ece3, + 0x1a9b6629, 0x11c73b3a, 0x1a29a7a0, 0x126d054d, 0x19b3e048, 0x130ff7fd, 0x193a224a, 0x13affa29, + 0x1e9f4157, 0x094a0317, 0x1e817bab, 0x09aa0861, 0x1e6288ec, 0x0a09ae4a, 0x1e426a4b, 0x0a68f121, + 0x144cf325, 0x18bc806b, 0x136058b1, 0x19777ef5, 0x126d054d, 0x1a29a7a0, 0x11734d64, 0x1ad2bc9e, + 0x18bc806b, 0x144cf325, 0x183b0e0c, 0x14e6cabc, 0x17b5df22, 0x157d6935, 0x172d0838, 0x1610b755, + 0x1e212105, 0x0ac7cd3b, 0x1dfeae62, 0x0b263eef, 0x1ddb13b7, 0x0b844298, 0x1db65262, 0x0be1d499, + 0x10738799, 0x1b728345, 0x0f6e0ca9, 0x1c08c426, 0x0e63374d, 0x1c954b21, 0x0d536416, 0x1d17e774, + 0x16a09e66, 0x16a09e66, 0x1610b755, 0x172d0838, 0x157d6935, 0x17b5df22, 0x14e6cabc, 0x183b0e0c, + 0x1d906bcf, 0x0c3ef153, 0x1d696174, 0x0c9b9532, 0x1d4134d1, 0x0cf7bca2, 0x1d17e774, 0x0d536416, + 0x0c3ef153, 0x1d906bcf, 0x0b263eef, 0x1dfeae62, 0x0a09ae4a, 0x1e6288ec, 0x08e9a220, 0x1ebbd8c9, + 0x144cf325, 0x18bc806b, 0x13affa29, 0x193a224a, 0x130ff7fd, 0x19b3e048, 0x126d054d, 0x1a29a7a0, + 0x1ced7af4, 0x0dae8805, 0x1cc1f0f4, 0x0e0924ec, 0x1c954b21, 0x0e63374d, 0x1c678b35, 0x0ebcbbae, + 0x07c67e5f, 0x1f0a7efc, 0x06a0a809, 0x1f4e603b, 0x05788511, 0x1f8764fa, 0x044e7c34, 0x1fb57972, + 0x11c73b3a, 0x1a9b6629, 0x111eb354, 0x1b090a58, 0x10738799, 0x1b728345, 0x0fc5d26e, 0x1bd7c0ac, + 0x1c38b2f2, 0x0f15ae9c, 0x1c08c426, 0x0f6e0ca9, 0x1bd7c0ac, 0x0fc5d26e, 0x1ba5aa67, 0x101cfc87, + 0x0322f4d8, 0x1fd88da4, 0x01f656e8, 0x1ff09566, 0x00c90ab0, 0x1ffd8861, 0xff9b78b8, 0x1fff6217, + 0x0f15ae9c, 0x1c38b2f2, 0x0e63374d, 0x1c954b21, 0x0dae8805, 0x1ced7af4, 0x0cf7bca2, 0x1d4134d1, + 0x1b728345, 0x10738799, 0x1b3e4d3f, 0x10c9704d, 0x1b090a58, 0x111eb354, 0x1ad2bc9e, 0x11734d64, + 0xfe6e09a1, 0x1ff621e3, 0xfd4125ff, 0x1fe1cafd, 0xfc153635, 0x1fc26471, 0xfaeaa254, 0x1f97f925, + 0x0c3ef153, 0x1d906bcf, 0x0b844298, 0x1ddb13b7, 0x0ac7cd3b, 0x1e212105, 0x0a09ae4a, 0x1e6288ec, + 0x1a9b6629, 0x11c73b3a, 0x1a63091b, 0x121a7999, 0x1a29a7a0, 0x126d054d, 0x19ef43ef, 0x12bedb26, + 0xf9c1d1f1, 0x1f6297d0, 0xf89b2c07, 0x1f2252f7, 0xf77716cf, 0x1ed740e7, 0xf655f79f, 0x1e817bab, + 0x094a0317, 0x1e9f4157, 0x0888e931, 0x1ed740e7, 0x07c67e5f, 0x1f0a7efc, 0x0702e09b, 0x1f38f3ac, + 0x19b3e048, 0x130ff7fd, 0x19777ef5, 0x136058b1, 0x193a224a, 0x13affa29, 0x18fbcca4, 0x13fed953, + 0xf53832c5, 0x1e212105, 0xf41e2b67, 0x1db65262, 0xf308435e, 0x1d4134d1, 0xf1f6db14, 0x1cc1f0f4, + 0x063e2e0f, 0x1f6297d0, 0x05788511, 0x1f8764fa, 0x04b2041c, 0x1fa7557f, 0x03eac9cb, 0x1fc26471, + 0x18bc806b, 0x144cf325, 0x187c4010, 0x149a449c, 0x183b0e0c, 0x14e6cabc, 0x17f8ece3, 0x15328293, + 0xf0ea5164, 0x1c38b2f2, 0xefe30379, 0x1ba5aa67, 0xeee14cac, 0x1b090a58, 0xede58667, 0x1a63091b, + 0x0322f4d8, 0x1fd88da4, 0x025aa412, 0x1fe9cdad, 0x0191f65f, 0x1ff621e3, 0x00c90ab0, 0x1ffd8861, + 0x17b5df22, 0x157d6935, 0x1771e75f, 0x15c77bbe, 0x172d0838, 0x1610b755, 0x16e74455, 0x16591926, + 0xecf00803, 0x19b3e048, 0xec0126ad, 0x18fbcca4, 0xeb193544, 0x183b0e0c, 0xea388442, 0x1771e75f, + 0x00000000, 0x20000000, 0xff36f550, 0x1ffd8861, 0xfe6e09a1, 0x1ff621e3, 0xfda55bee, 0x1fe9cdad, + 0x16a09e66, 0x16a09e66, 0x16591926, 0x16e74455, 0x1610b755, 0x172d0838, 0x15c77bbe, 0x1771e75f, + 0xe95f619a, 0x16a09e66, 0xe88e18a1, 0x15c77bbe, 0xe7c4f1f4, 0x14e6cabc, 0xe704335c, 0x13fed953, + 0xfcdd0b28, 0x1fd88da4, 0xfc153635, 0x1fc26471, 0xfb4dfbe4, 0x1fa7557f, 0xfa877aef, 0x1f8764fa, + 0x157d6935, 0x17b5df22, 0x15328293, 0x17f8ece3, 0x14e6cabc, 0x183b0e0c, 0x149a449c, 0x187c4010, + 0xe64c1fb8, 0x130ff7fd, 0xe59cf6e5, 0x121a7999, 0xe4f6f5a8, 0x111eb354, 0xe45a5599, 0x101cfc87, + 0xf9c1d1f1, 0x1f6297d0, 0xf8fd1f65, 0x1f38f3ac, 0xf83981a1, 0x1f0a7efc, 0xf77716cf, 0x1ed740e7, + 0x144cf325, 0x18bc806b, 0x13fed953, 0x18fbcca4, 0x13affa29, 0x193a224a, 0x136058b1, 0x19777ef5, + 0xe3c74d0e, 0x0f15ae9c, 0xe33e0f0c, 0x0e0924ec, 0xe2becb2f, 0x0cf7bca2, 0xe249ad9e, 0x0be1d499, + 0xf6b5fce9, 0x1e9f4157, 0xf5f651b6, 0x1e6288ec, 0xf53832c5, 0x1e212105, 0xf47bbd68, 0x1ddb13b7, + 0x130ff7fd, 0x19b3e048, 0x12bedb26, 0x19ef43ef, 0x126d054d, 0x1a29a7a0, 0x121a7999, 0x1a63091b, + 0xe1dedefb, 0x0ac7cd3b, 0xe17e8455, 0x09aa0861, 0xe128bf19, 0x0888e931, 0xe0ddad09, 0x0764d3f9, + 0xf3c10ead, 0x1d906bcf, 0xf308435e, 0x1d4134d1, 0xf25177fb, 0x1ced7af4, 0xf19cc8b3, 0x1c954b21, + 0x11c73b3a, 0x1a9b6629, 0x11734d64, 0x1ad2bc9e, 0x111eb354, 0x1b090a58, 0x10c9704d, 0x1b3e4d3f, + 0xe09d6830, 0x063e2e0f, 0xe06806db, 0x05155dac, 0xe03d9b8f, 0x03eac9cb, 0xe01e3503, 0x02beda01, + 0xf0ea5164, 0x1c38b2f2, 0xf03a2d92, 0x1bd7c0ac, 0xef8c7867, 0x1b728345, 0xeee14cac, 0x1b090a58, + 0x10738799, 0x1b728345, 0x101cfc87, 0x1ba5aa67, 0x0fc5d26e, 0x1bd7c0ac, 0x0f6e0ca9, 0x1c08c426, + 0xe009de1d, 0x0191f65f, 0xe0009de9, 0x00648748, 0xe002779f, 0xff36f550, 0xe00f6a9a, 0xfe09a918, + 0xee38c4c6, 0x1a9b6629, 0xed92fab3, 0x1a29a7a0, 0xecf00803, 0x19b3e048, 0xec5005d7, 0x193a224a, + 0x0f15ae9c, 0x1c38b2f2, 0x0ebcbbae, 0x1c678b35, 0x0e63374d, 0x1c954b21, 0x0e0924ec, 0x1cc1f0f4, + 0xe027725c, 0xfcdd0b28, 0xe04a868e, 0xfbb183cc, 0xe0789b06, 0xfa877aef, 0xe0b19fc5, 0xf95f57f7, + 0xebb30cdb, 0x18bc806b, 0xeb193544, 0x183b0e0c, 0xea8296cb, 0x17b5df22, 0xe9ef48ab, 0x172d0838, + 0x0dae8805, 0x1ced7af4, 0x0d536416, 0x1d17e774, 0x0cf7bca2, 0x1d4134d1, 0x0c9b9532, 0x1d696174, + 0xe0f58104, 0xf83981a1, 0xe1442737, 0xf7165de0, 0xe19d7714, 0xf5f651b6, 0xe201519e, 0xf4d9c111, + 0xe95f619a, 0x16a09e66, 0xe8d2f7c8, 0x1610b755, 0xe84a20de, 0x157d6935, 0xe7c4f1f4, 0x14e6cabc, + 0x0c3ef153, 0x1d906bcf, 0x0be1d499, 0x1db65262, 0x0b844298, 0x1ddb13b7, 0x0b263eef, 0x1dfeae62, + 0xe26f9431, 0xf3c10ead, 0xe2e8188c, 0xf2ac9bea, 0xe36ab4df, 0xf19cc8b3, 0xe3f73bda, 0xf091f357, + 0xe7437f95, 0x144cf325, 0xe6c5ddb6, 0x13affa29, 0xe64c1fb8, 0x130ff7fd, 0xe5d65860, 0x126d054d, + 0x0ac7cd3b, 0x1e212105, 0x0a68f121, 0x1e426a4b, 0x0a09ae4a, 0x1e6288ec, 0x09aa0861, 0x1e817bab, + 0xe48d7cbb, 0xef8c7867, 0xe52d4362, 0xee8cb29c, 0xe5d65860, 0xed92fab3, 0xe688810b, 0xec9fa74f, + 0xe56499d7, 0x11c73b3a, 0xe4f6f5a8, 0x111eb354, 0xe48d7cbb, 0x10738799, 0xe4283f54, 0x0fc5d26e, + 0x094a0317, 0x1e9f4157, 0x08e9a220, 0x1ebbd8c9, 0x0888e931, 0x1ed740e7, 0x0827dc07, 0x1ef178a4, + 0xe7437f95, 0xebb30cdb, 0xe807131d, 0xeacd7d6d, 0xe8d2f7c8, 0xe9ef48ab, 0xe9a6e6da, 0xe918bbab, + 0xe3c74d0e, 0x0f15ae9c, 0xe36ab4df, 0x0e63374d, 0xe312850c, 0x0dae8805, 0xe2becb2f, 0x0cf7bca2, + 0x07c67e5f, 0x1f0a7efc, 0x0764d3f9, 0x1f2252f7, 0x0702e09b, 0x1f38f3ac, 0x06a0a809, 0x1f4e603b, + 0xea8296cb, 0xe84a20de, 0xeb65bb64, 0xe783bff0, 0xec5005d7, 0xe6c5ddb6, 0xed4124da, 0xe610bc11, + 0xe26f9431, 0x0c3ef153, 0xe224ec49, 0x0b844298, 0xe1dedefb, 0x0ac7cd3b, 0xe19d7714, 0x0a09ae4a, + 0x063e2e0f, 0x1f6297d0, 0x05db7678, 0x1f7599a4, 0x05788511, 0x1f8764fa, 0x05155dac, 0x1f97f925, + 0xee38c4c6, 0xe56499d7, 0xef368fb3, 0xe4c1b2c1, 0xf03a2d92, 0xe4283f54, 0xf1434452, 0xe39874cb, + 0xe160bea9, 0x094a0317, 0xe128bf19, 0x0888e931, 0xe0f58104, 0x07c67e5f, 0xe0c70c54, 0x0702e09b, + 0x04b2041c, 0x1fa7557f, 0x044e7c34, 0x1fb57972, 0x03eac9cb, 0x1fc26471, 0x0386f0b9, 0x1fce15fd, + 0xf25177fb, 0xe312850c, 0xf3646ace, 0xe2969e8c, 0xf47bbd68, 0xe224ec49, 0xf5970edf, 0xe1bd95b5, + 0xe09d6830, 0x063e2e0f, 0xe0789b06, 0x05788511, 0xe058aa81, 0x04b2041c, 0xe03d9b8f, 0x03eac9cb, + 0x0322f4d8, 0x1fd88da4, 0x02beda01, 0x1fe1cafd, 0x025aa412, 0x1fe9cdad, 0x01f656e8, 0x1ff09566, + 0xf6b5fce9, 0xe160bea9, 0xf7d823f9, 0xe10e875c, 0xf8fd1f65, 0xe0c70c54, 0xfa248988, 0xe08a665c, + 0xe027725c, 0x0322f4d8, 0xe0163253, 0x025aa412, 0xe009de1d, 0x0191f65f, 0xe002779f, 0x00c90ab0, + 0x0191f65f, 0x1ff621e3, 0x012d8657, 0x1ffa72f0, 0x00c90ab0, 0x1ffd8861, 0x00648748, 0x1fff6217, 0xfb4dfbe4, 0xe058aa81, 0xfc790f47, 0xe031ea03, 0xfda55bee, 0xe0163253, 0xfed279a9, 0xe0058d10 }; const int twidTab64[4*6 + 16*6] = { - 0x20000000, 0x00000000, 0x16a09e66, 0x16a09e66, 0x00000000, 0x20000000, 0xe95f619a, 0x16a09e66, - 0x20000000, 0x00000000, 0x1d906bcf, 0x0c3ef153, 0x16a09e66, 0x16a09e66, 0x0c3ef153, 0x1d906bcf, - 0x20000000, 0x00000000, 0x0c3ef153, 0x1d906bcf, 0xe95f619a, 0x16a09e66, 0xe26f9431, 0xf3c10ead, - - 0x20000000, 0x00000000, 0x1f6297d0, 0x063e2e0f, 0x1d906bcf, 0x0c3ef153, 0x1a9b6629, 0x11c73b3a, - 0x20000000, 0x00000000, 0x1fd88da4, 0x0322f4d8, 0x1f6297d0, 0x063e2e0f, 0x1e9f4157, 0x094a0317, - 0x20000000, 0x00000000, 0x1e9f4157, 0x094a0317, 0x1a9b6629, 0x11c73b3a, 0x144cf325, 0x18bc806b, - 0x16a09e66, 0x16a09e66, 0x11c73b3a, 0x1a9b6629, 0x0c3ef153, 0x1d906bcf, 0x063e2e0f, 0x1f6297d0, - 0x1d906bcf, 0x0c3ef153, 0x1c38b2f2, 0x0f15ae9c, 0x1a9b6629, 0x11c73b3a, 0x18bc806b, 0x144cf325, - 0x0c3ef153, 0x1d906bcf, 0x0322f4d8, 0x1fd88da4, 0xf9c1d1f1, 0x1f6297d0, 0xf0ea5164, 0x1c38b2f2, - 0x00000000, 0x20000000, 0xf9c1d1f1, 0x1f6297d0, 0xf3c10ead, 0x1d906bcf, 0xee38c4c6, 0x1a9b6629, - 0x16a09e66, 0x16a09e66, 0x144cf325, 0x18bc806b, 0x11c73b3a, 0x1a9b6629, 0x0f15ae9c, 0x1c38b2f2, - 0xe95f619a, 0x16a09e66, 0xe3c74d0e, 0x0f15ae9c, 0xe09d6830, 0x063e2e0f, 0xe027725c, 0xfcdd0b28, - 0xe95f619a, 0x16a09e66, 0xe56499d7, 0x11c73b3a, 0xe26f9431, 0x0c3ef153, 0xe09d6830, 0x063e2e0f, - 0x0c3ef153, 0x1d906bcf, 0x094a0317, 0x1e9f4157, 0x063e2e0f, 0x1f6297d0, 0x0322f4d8, 0x1fd88da4, + 0x20000000, 0x00000000, 0x16a09e66, 0x16a09e66, 0x00000000, 0x20000000, 0xe95f619a, 0x16a09e66, + 0x20000000, 0x00000000, 0x1d906bcf, 0x0c3ef153, 0x16a09e66, 0x16a09e66, 0x0c3ef153, 0x1d906bcf, + 0x20000000, 0x00000000, 0x0c3ef153, 0x1d906bcf, 0xe95f619a, 0x16a09e66, 0xe26f9431, 0xf3c10ead, + + 0x20000000, 0x00000000, 0x1f6297d0, 0x063e2e0f, 0x1d906bcf, 0x0c3ef153, 0x1a9b6629, 0x11c73b3a, + 0x20000000, 0x00000000, 0x1fd88da4, 0x0322f4d8, 0x1f6297d0, 0x063e2e0f, 0x1e9f4157, 0x094a0317, + 0x20000000, 0x00000000, 0x1e9f4157, 0x094a0317, 0x1a9b6629, 0x11c73b3a, 0x144cf325, 0x18bc806b, + 0x16a09e66, 0x16a09e66, 0x11c73b3a, 0x1a9b6629, 0x0c3ef153, 0x1d906bcf, 0x063e2e0f, 0x1f6297d0, + 0x1d906bcf, 0x0c3ef153, 0x1c38b2f2, 0x0f15ae9c, 0x1a9b6629, 0x11c73b3a, 0x18bc806b, 0x144cf325, + 0x0c3ef153, 0x1d906bcf, 0x0322f4d8, 0x1fd88da4, 0xf9c1d1f1, 0x1f6297d0, 0xf0ea5164, 0x1c38b2f2, + 0x00000000, 0x20000000, 0xf9c1d1f1, 0x1f6297d0, 0xf3c10ead, 0x1d906bcf, 0xee38c4c6, 0x1a9b6629, + 0x16a09e66, 0x16a09e66, 0x144cf325, 0x18bc806b, 0x11c73b3a, 0x1a9b6629, 0x0f15ae9c, 0x1c38b2f2, + 0xe95f619a, 0x16a09e66, 0xe3c74d0e, 0x0f15ae9c, 0xe09d6830, 0x063e2e0f, 0xe027725c, 0xfcdd0b28, + 0xe95f619a, 0x16a09e66, 0xe56499d7, 0x11c73b3a, 0xe26f9431, 0x0c3ef153, 0xe09d6830, 0x063e2e0f, + 0x0c3ef153, 0x1d906bcf, 0x094a0317, 0x1e9f4157, 0x063e2e0f, 0x1f6297d0, 0x0322f4d8, 0x1fd88da4, 0xe26f9431, 0xf3c10ead, 0xe7437f95, 0xebb30cdb, 0xee38c4c6, 0xe56499d7, 0xf6b5fce9, 0xe160bea9 }; #else -/* - * Q30 for 128 and 1024 +/* + * Q30 for 128 and 1024 * * for (i = 0; i < num/4; i++) { * angle = (i + 0.125) * M_PI / num; * x = cos(angle) * (1 << 30); * x = sin(angle) * (1 << 30); - * + * * angle = (num/2 - 1 - i + 0.125) * M_PI / num; * x = cos(angle) * (1 << 30); * x = sin(angle) * (1 << 30); @@ -667,379 +667,379 @@ const int twidTab64[4*6 + 16*6] = { */ const int cossintab[128 + 1024] = { /* 128 */ - 0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, - 0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, - 0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, - 0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, - 0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, - 0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, - 0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, - 0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, - 0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, - 0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, - 0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, - 0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, - 0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, - 0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, - 0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, - 0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, + 0x3fffec43, 0x003243f1, 0x015fd4d2, 0x3ffc38d1, 0x3ff9c13a, 0x01c454f5, 0x02f1b755, 0x3feea776, + 0x3fe9b8a9, 0x03562038, 0x0483259d, 0x3fd73a4a, 0x3fcfd50b, 0x04e767c5, 0x0613e1c5, 0x3fb5f4ea, + 0x3fac1a5b, 0x0677edbb, 0x07a3adff, 0x3f8adc77, 0x3f7e8e1e, 0x08077457, 0x09324ca7, 0x3f55f796, + 0x3f473759, 0x0995bdfd, 0x0abf8043, 0x3f174e70, 0x3f061e95, 0x0b228d42, 0x0c4b0b94, 0x3eceeaad, + 0x3ebb4ddb, 0x0cada4f5, 0x0dd4b19a, 0x3e7cd778, 0x3e66d0b4, 0x0e36c82a, 0x0f5c35a3, 0x3e212179, + 0x3e08b42a, 0x0fbdba40, 0x10e15b4e, 0x3dbbd6d4, 0x3da106bd, 0x11423ef0, 0x1263e699, 0x3d4d0728, + 0x3d2fd86c, 0x12c41a4f, 0x13e39be9, 0x3cd4c38b, 0x3cb53aaa, 0x144310dd, 0x15604013, 0x3c531e88, + 0x3c314060, 0x15bee78c, 0x16d99864, 0x3bc82c1f, 0x3ba3fde7, 0x173763c9, 0x184f6aab, 0x3b3401bb, + 0x3b0d8909, 0x18ac4b87, 0x19c17d44, 0x3a96b636, 0x3a6df8f8, 0x1a1d6544, 0x1b2f971e, 0x39f061d2, + 0x39c5664f, 0x1b8a7815, 0x1c997fc4, 0x39411e33, 0x3913eb0e, 0x1cf34baf, 0x1dfeff67, 0x38890663, + 0x3859a292, 0x1e57a86d, 0x1f5fdee6, 0x37c836c2, 0x3796a996, 0x1fb7575c, 0x20bbe7d8, 0x36fecd0e, + 0x36cb1e2a, 0x21122240, 0x2212e492, 0x362ce855, 0x35f71fb1, 0x2267d3a0, 0x2364a02e, 0x3552a8f4, + 0x351acedd, 0x23b836ca, 0x24b0e699, 0x34703095, 0x34364da6, 0x250317df, 0x25f78497, 0x3385a222, + 0x3349bf48, 0x264843d9, 0x273847c8, 0x329321c7, 0x32554840, 0x27878893, 0x2872feb6, 0x3198d4ea, + 0x31590e3e, 0x28c0b4d2, 0x29a778db, 0x3096e223, 0x30553828, 0x29f3984c, 0x2ad586a3, 0x2f8d713a, + 0x2f49ee0f, 0x2b2003ac, 0x2bfcf97c, 0x2e7cab1c, 0x2e37592c, 0x2c45c8a0, 0x2d1da3d5, 0x2d64b9da, /* 1024 */ - 0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, - 0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, - 0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, - 0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, - 0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, - 0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, - 0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, - 0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, - 0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, - 0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, - 0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, - 0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, - 0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, - 0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, - 0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, - 0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, - 0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, - 0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, - 0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, - 0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, - 0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, - 0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, - 0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, - 0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, - 0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, - 0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, - 0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, - 0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, - 0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, - 0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, - 0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, - 0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, - 0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, - 0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, - 0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, - 0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, - 0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, - 0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, - 0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, - 0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, - 0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, - 0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, - 0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, - 0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, - 0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, - 0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, - 0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, - 0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, - 0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, - 0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, - 0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, - 0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, - 0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, - 0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, - 0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, - 0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, - 0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, - 0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, - 0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, - 0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, - 0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, - 0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, - 0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, - 0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, - 0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, - 0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, - 0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, - 0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, - 0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, - 0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, - 0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, - 0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, - 0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, - 0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, - 0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, - 0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, - 0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, - 0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, - 0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, - 0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, - 0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, - 0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, - 0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, - 0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, - 0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, - 0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, - 0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, - 0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, - 0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, - 0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, - 0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, - 0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, - 0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, - 0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, - 0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, - 0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, - 0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, - 0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, - 0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, - 0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, - 0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, - 0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, - 0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, - 0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, - 0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, - 0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, - 0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, - 0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, - 0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, - 0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, - 0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, - 0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, - 0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, - 0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, - 0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, - 0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, - 0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, - 0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, - 0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, - 0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, - 0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, - 0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, - 0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, - 0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, - 0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, - 0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, - 0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, + 0x3fffffb1, 0x0006487f, 0x002bfb74, 0x3ffff0e3, 0x3fffe705, 0x00388c6e, 0x005e3f4c, 0x3fffba9b, + 0x3fffa6de, 0x006ad03b, 0x009082ea, 0x3fff5cd8, 0x3fff3f3c, 0x009d13c5, 0x00c2c62f, 0x3ffed79b, + 0x3ffeb021, 0x00cf56ef, 0x00f508fc, 0x3ffe2ae5, 0x3ffdf98c, 0x01019998, 0x01274b31, 0x3ffd56b5, + 0x3ffd1b7e, 0x0133dba3, 0x01598cb1, 0x3ffc5b0c, 0x3ffc15f7, 0x01661cf0, 0x018bcd5b, 0x3ffb37ec, + 0x3ffae8f9, 0x01985d60, 0x01be0d11, 0x3ff9ed53, 0x3ff99483, 0x01ca9cd4, 0x01f04bb4, 0x3ff87b44, + 0x3ff81896, 0x01fcdb2e, 0x02228924, 0x3ff6e1bf, 0x3ff67534, 0x022f184d, 0x0254c544, 0x3ff520c5, + 0x3ff4aa5d, 0x02615414, 0x0286fff3, 0x3ff33858, 0x3ff2b813, 0x02938e62, 0x02b93914, 0x3ff12878, + 0x3ff09e56, 0x02c5c71a, 0x02eb7086, 0x3feef126, 0x3fee5d28, 0x02f7fe1c, 0x031da62b, 0x3fec9265, + 0x3febf48b, 0x032a3349, 0x034fd9e5, 0x3fea0c35, 0x3fe96480, 0x035c6682, 0x03820b93, 0x3fe75e98, + 0x3fe6ad08, 0x038e97a9, 0x03b43b17, 0x3fe48990, 0x3fe3ce26, 0x03c0c69e, 0x03e66852, 0x3fe18d1f, + 0x3fe0c7da, 0x03f2f342, 0x04189326, 0x3fde6945, 0x3fdd9a27, 0x04251d77, 0x044abb73, 0x3fdb1e06, + 0x3fda450f, 0x0457451d, 0x047ce11a, 0x3fd7ab64, 0x3fd6c894, 0x04896a16, 0x04af03fc, 0x3fd4115f, + 0x3fd324b7, 0x04bb8c42, 0x04e123fa, 0x3fd04ffc, 0x3fcf597c, 0x04edab83, 0x051340f6, 0x3fcc673b, + 0x3fcb66e4, 0x051fc7b9, 0x05455ad1, 0x3fc8571f, 0x3fc74cf3, 0x0551e0c7, 0x0577716b, 0x3fc41fac, + 0x3fc30baa, 0x0583f68c, 0x05a984a6, 0x3fbfc0e3, 0x3fbea30c, 0x05b608eb, 0x05db9463, 0x3fbb3ac7, + 0x3fba131b, 0x05e817c3, 0x060da083, 0x3fb68d5b, 0x3fb55bdc, 0x061a22f7, 0x063fa8e7, 0x3fb1b8a2, + 0x3fb07d50, 0x064c2a67, 0x0671ad71, 0x3facbc9f, 0x3fab777b, 0x067e2df5, 0x06a3ae00, 0x3fa79954, + 0x3fa64a5f, 0x06b02d81, 0x06d5aa77, 0x3fa24ec6, 0x3fa0f600, 0x06e228ee, 0x0707a2b7, 0x3f9cdcf7, + 0x3f9b7a62, 0x0714201b, 0x073996a1, 0x3f9743eb, 0x3f95d787, 0x074612eb, 0x076b8616, 0x3f9183a5, + 0x3f900d72, 0x0778013d, 0x079d70f7, 0x3f8b9c28, 0x3f8a1c29, 0x07a9eaf5, 0x07cf5726, 0x3f858d79, + 0x3f8403ae, 0x07dbcff2, 0x08013883, 0x3f7f579b, 0x3f7dc405, 0x080db016, 0x083314f1, 0x3f78fa92, + 0x3f775d31, 0x083f8b43, 0x0864ec4f, 0x3f727661, 0x3f70cf38, 0x08716159, 0x0896be80, 0x3f6bcb0e, + 0x3f6a1a1c, 0x08a3323a, 0x08c88b65, 0x3f64f89b, 0x3f633de2, 0x08d4fdc6, 0x08fa52de, 0x3f5dff0e, + 0x3f5c3a8f, 0x0906c3e0, 0x092c14ce, 0x3f56de6a, 0x3f551026, 0x09388469, 0x095dd116, 0x3f4f96b4, + 0x3f4dbeac, 0x096a3f42, 0x098f8796, 0x3f4827f0, 0x3f464626, 0x099bf44c, 0x09c13831, 0x3f409223, + 0x3f3ea697, 0x09cda368, 0x09f2e2c7, 0x3f38d552, 0x3f36e006, 0x09ff4c78, 0x0a24873a, 0x3f30f181, + 0x3f2ef276, 0x0a30ef5e, 0x0a56256c, 0x3f28e6b6, 0x3f26ddec, 0x0a628bfa, 0x0a87bd3d, 0x3f20b4f5, + 0x3f1ea26e, 0x0a94222f, 0x0ab94e8f, 0x3f185c43, 0x3f164001, 0x0ac5b1dc, 0x0aead944, 0x3f0fdca5, + 0x3f0db6a9, 0x0af73ae5, 0x0b1c5d3d, 0x3f073621, 0x3f05066d, 0x0b28bd2a, 0x0b4dda5c, 0x3efe68bc, + 0x3efc2f50, 0x0b5a388d, 0x0b7f5081, 0x3ef5747b, 0x3ef3315a, 0x0b8bacf0, 0x0bb0bf8f, 0x3eec5965, + 0x3eea0c8e, 0x0bbd1a33, 0x0be22766, 0x3ee3177e, 0x3ee0c0f4, 0x0bee8038, 0x0c1387e9, 0x3ed9aecc, + 0x3ed74e91, 0x0c1fdee1, 0x0c44e0f9, 0x3ed01f55, 0x3ecdb56a, 0x0c513610, 0x0c763278, 0x3ec66920, + 0x3ec3f585, 0x0c8285a5, 0x0ca77c47, 0x3ebc8c31, 0x3eba0ee9, 0x0cb3cd84, 0x0cd8be47, 0x3eb2888f, + 0x3eb0019c, 0x0ce50d8c, 0x0d09f85b, 0x3ea85e41, 0x3ea5cda3, 0x0d1645a0, 0x0d3b2a64, 0x3e9e0d4c, + 0x3e9b7306, 0x0d4775a1, 0x0d6c5443, 0x3e9395b7, 0x3e90f1ca, 0x0d789d71, 0x0d9d75db, 0x3e88f788, + 0x3e8649f5, 0x0da9bcf2, 0x0dce8f0d, 0x3e7e32c6, 0x3e7b7b90, 0x0ddad406, 0x0dff9fba, 0x3e734778, + 0x3e70869f, 0x0e0be28e, 0x0e30a7c5, 0x3e6835a4, 0x3e656b2b, 0x0e3ce86b, 0x0e61a70f, 0x3e5cfd51, + 0x3e5a2939, 0x0e6de580, 0x0e929d7a, 0x3e519e86, 0x3e4ec0d1, 0x0e9ed9af, 0x0ec38ae8, 0x3e46194a, + 0x3e4331fa, 0x0ecfc4d9, 0x0ef46f3b, 0x3e3a6da4, 0x3e377cbb, 0x0f00a6df, 0x0f254a53, 0x3e2e9b9c, + 0x3e2ba11b, 0x0f317fa5, 0x0f561c15, 0x3e22a338, 0x3e1f9f21, 0x0f624f0c, 0x0f86e460, 0x3e168480, + 0x3e1376d5, 0x0f9314f5, 0x0fb7a317, 0x3e0a3f7b, 0x3e07283f, 0x0fc3d143, 0x0fe8581d, 0x3dfdd432, + 0x3dfab365, 0x0ff483d7, 0x10190352, 0x3df142ab, 0x3dee1851, 0x10252c94, 0x1049a49a, 0x3de48aef, + 0x3de15708, 0x1055cb5b, 0x107a3bd5, 0x3dd7ad05, 0x3dd46f94, 0x1086600e, 0x10aac8e6, 0x3dcaa8f5, + 0x3dc761fc, 0x10b6ea90, 0x10db4baf, 0x3dbd7ec7, 0x3dba2e48, 0x10e76ac3, 0x110bc413, 0x3db02e84, + 0x3dacd481, 0x1117e088, 0x113c31f3, 0x3da2b834, 0x3d9f54af, 0x11484bc2, 0x116c9531, 0x3d951bde, + 0x3d91aed9, 0x1178ac53, 0x119cedaf, 0x3d87598c, 0x3d83e309, 0x11a9021d, 0x11cd3b50, 0x3d797145, + 0x3d75f147, 0x11d94d02, 0x11fd7df6, 0x3d6b6313, 0x3d67d99b, 0x12098ce5, 0x122db583, 0x3d5d2efe, + 0x3d599c0e, 0x1239c1a7, 0x125de1da, 0x3d4ed50f, 0x3d4b38aa, 0x1269eb2b, 0x128e02dc, 0x3d40554e, + 0x3d3caf76, 0x129a0954, 0x12be186c, 0x3d31afc5, 0x3d2e007c, 0x12ca1c03, 0x12ee226c, 0x3d22e47c, + 0x3d1f2bc5, 0x12fa231b, 0x131e20c0, 0x3d13f37e, 0x3d10315a, 0x132a1e7e, 0x134e1348, 0x3d04dcd2, + 0x3d011145, 0x135a0e0e, 0x137df9e7, 0x3cf5a082, 0x3cf1cb8e, 0x1389f1af, 0x13add481, 0x3ce63e98, + 0x3ce2603f, 0x13b9c943, 0x13dda2f7, 0x3cd6b71e, 0x3cd2cf62, 0x13e994ab, 0x140d652c, 0x3cc70a1c, + 0x3cc318ff, 0x141953cb, 0x143d1b02, 0x3cb7379c, 0x3cb33d22, 0x14490685, 0x146cc45c, 0x3ca73fa9, + 0x3ca33bd3, 0x1478acbc, 0x149c611d, 0x3c97224c, 0x3c93151d, 0x14a84652, 0x14cbf127, 0x3c86df8e, + 0x3c82c909, 0x14d7d32a, 0x14fb745e, 0x3c76777b, 0x3c7257a2, 0x15075327, 0x152aeaa3, 0x3c65ea1c, + 0x3c61c0f1, 0x1536c62b, 0x155a53d9, 0x3c55377b, 0x3c510501, 0x15662c18, 0x1589afe3, 0x3c445fa2, + 0x3c4023dd, 0x159584d3, 0x15b8fea4, 0x3c33629d, 0x3c2f1d8e, 0x15c4d03e, 0x15e83fff, 0x3c224075, + 0x3c1df21f, 0x15f40e3a, 0x161773d6, 0x3c10f935, 0x3c0ca19b, 0x16233eac, 0x16469a0d, 0x3bff8ce8, + 0x3bfb2c0c, 0x16526176, 0x1675b286, 0x3bedfb99, 0x3be9917e, 0x1681767c, 0x16a4bd25, 0x3bdc4552, + 0x3bd7d1fa, 0x16b07d9f, 0x16d3b9cc, 0x3bca6a1d, 0x3bc5ed8d, 0x16df76c3, 0x1702a85e, 0x3bb86a08, + 0x3bb3e440, 0x170e61cc, 0x173188be, 0x3ba6451b, 0x3ba1b620, 0x173d3e9b, 0x17605ad0, 0x3b93fb63, + 0x3b8f6337, 0x176c0d15, 0x178f1e76, 0x3b818ceb, 0x3b7ceb90, 0x179acd1c, 0x17bdd394, 0x3b6ef9be, + 0x3b6a4f38, 0x17c97e93, 0x17ec7a0d, 0x3b5c41e8, 0x3b578e39, 0x17f8215e, 0x181b11c4, 0x3b496574, + 0x3b44a8a0, 0x1826b561, 0x18499a9d, 0x3b36646e, 0x3b319e77, 0x18553a7d, 0x1878147a, 0x3b233ee1, + 0x3b1e6fca, 0x1883b097, 0x18a67f3f, 0x3b0ff4d9, 0x3b0b1ca6, 0x18b21791, 0x18d4dad0, 0x3afc8663, + 0x3af7a516, 0x18e06f50, 0x1903270f, 0x3ae8f38b, 0x3ae40926, 0x190eb7b7, 0x193163e1, 0x3ad53c5b, + 0x3ad048e3, 0x193cf0a9, 0x195f9128, 0x3ac160e1, 0x3abc6458, 0x196b1a09, 0x198daec8, 0x3aad6129, + 0x3aa85b92, 0x199933bb, 0x19bbbca6, 0x3a993d3e, 0x3a942e9d, 0x19c73da3, 0x19e9baa3, 0x3a84f52f, + 0x3a7fdd86, 0x19f537a4, 0x1a17a8a5, 0x3a708906, 0x3a6b6859, 0x1a2321a2, 0x1a45868e, 0x3a5bf8d1, + 0x3a56cf23, 0x1a50fb81, 0x1a735442, 0x3a47449c, 0x3a4211f0, 0x1a7ec524, 0x1aa111a6, 0x3a326c74, + 0x3a2d30cd, 0x1aac7e6f, 0x1acebe9d, 0x3a1d7066, 0x3a182bc8, 0x1ada2746, 0x1afc5b0a, 0x3a08507f, + 0x3a0302ed, 0x1b07bf8c, 0x1b29e6d2, 0x39f30ccc, 0x39edb649, 0x1b354727, 0x1b5761d8, 0x39dda55a, + 0x39d845e9, 0x1b62bdf8, 0x1b84cc01, 0x39c81a36, 0x39c2b1da, 0x1b9023e5, 0x1bb22530, 0x39b26b6d, + 0x39acfa2b, 0x1bbd78d2, 0x1bdf6d4a, 0x399c990d, 0x39971ee7, 0x1beabca1, 0x1c0ca432, 0x3986a324, + 0x3981201e, 0x1c17ef39, 0x1c39c9cd, 0x397089bf, 0x396afddc, 0x1c45107c, 0x1c66ddfe, 0x395a4ceb, + 0x3954b82e, 0x1c72204f, 0x1c93e0ab, 0x3943ecb6, 0x393e4f23, 0x1c9f1e96, 0x1cc0d1b6, 0x392d692f, + 0x3927c2c9, 0x1ccc0b35, 0x1cedb106, 0x3916c262, 0x3911132d, 0x1cf8e611, 0x1d1a7e7d, 0x38fff85e, + 0x38fa405e, 0x1d25af0d, 0x1d473a00, 0x38e90b31, 0x38e34a69, 0x1d52660f, 0x1d73e374, 0x38d1fae9, + 0x38cc315d, 0x1d7f0afb, 0x1da07abc, 0x38bac795, 0x38b4f547, 0x1dab9db5, 0x1dccffbf, 0x38a37142, + 0x389d9637, 0x1dd81e21, 0x1df9725f, 0x388bf7ff, 0x3886143b, 0x1e048c24, 0x1e25d282, 0x38745bdb, + 0x386e6f60, 0x1e30e7a4, 0x1e52200c, 0x385c9ce3, 0x3856a7b6, 0x1e5d3084, 0x1e7e5ae2, 0x3844bb28, + 0x383ebd4c, 0x1e8966a8, 0x1eaa82e9, 0x382cb6b7, 0x3826b030, 0x1eb589f7, 0x1ed69805, 0x38148f9f, + 0x380e8071, 0x1ee19a54, 0x1f029a1c, 0x37fc45ef, 0x37f62e1d, 0x1f0d97a5, 0x1f2e8911, 0x37e3d9b7, + 0x37ddb945, 0x1f3981ce, 0x1f5a64cb, 0x37cb4b04, 0x37c521f6, 0x1f6558b5, 0x1f862d2d, 0x37b299e7, + 0x37ac6841, 0x1f911c3d, 0x1fb1e21d, 0x3799c66f, 0x37938c34, 0x1fbccc4d, 0x1fdd8381, 0x3780d0aa, + 0x377a8ddf, 0x1fe868c8, 0x2009113c, 0x3767b8a9, 0x37616d51, 0x2013f196, 0x20348b35, 0x374e7e7b, + 0x37482a9a, 0x203f6699, 0x205ff14f, 0x3735222f, 0x372ec5c9, 0x206ac7b8, 0x208b4372, 0x371ba3d4, + 0x37153eee, 0x209614d9, 0x20b68181, 0x3702037c, 0x36fb9618, 0x20c14ddf, 0x20e1ab63, 0x36e84135, + 0x36e1cb58, 0x20ec72b1, 0x210cc0fc, 0x36ce5d10, 0x36c7debd, 0x21178334, 0x2137c232, 0x36b4571b, + 0x36add058, 0x21427f4d, 0x2162aeea, 0x369a2f69, 0x3693a038, 0x216d66e2, 0x218d870b, 0x367fe608, + 0x36794e6e, 0x219839d8, 0x21b84a79, 0x36657b08, 0x365edb09, 0x21c2f815, 0x21e2f91a, 0x364aee7b, + 0x3644461b, 0x21eda17f, 0x220d92d4, 0x36304070, 0x36298fb4, 0x221835fb, 0x2238178d, 0x361570f8, + 0x360eb7e3, 0x2242b56f, 0x22628729, 0x35fa8023, 0x35f3beba, 0x226d1fc1, 0x228ce191, 0x35df6e03, + 0x35d8a449, 0x229774d7, 0x22b726a8, 0x35c43aa7, 0x35bd68a1, 0x22c1b496, 0x22e15655, 0x35a8e621, + 0x35a20bd3, 0x22ebdee5, 0x230b707e, 0x358d7081, 0x35868def, 0x2315f3a8, 0x23357509, 0x3571d9d9, + 0x356aef08, 0x233ff2c8, 0x235f63dc, 0x35562239, 0x354f2f2c, 0x2369dc29, 0x23893cdd, 0x353a49b2, + 0x35334e6f, 0x2393afb2, 0x23b2fff3, 0x351e5056, 0x35174ce0, 0x23bd6d48, 0x23dcad03, 0x35023636, + 0x34fb2a92, 0x23e714d3, 0x240643f4, 0x34e5fb63, 0x34dee795, 0x2410a639, 0x242fc4ad, 0x34c99fef, + 0x34c283fb, 0x243a215f, 0x24592f13, 0x34ad23eb, 0x34a5ffd5, 0x2463862c, 0x2482830d, 0x34908768, + 0x34895b36, 0x248cd487, 0x24abc082, 0x3473ca79, 0x346c962f, 0x24b60c57, 0x24d4e757, 0x3456ed2f, + 0x344fb0d1, 0x24df2d81, 0x24fdf775, 0x3439ef9c, 0x3432ab2e, 0x250837ed, 0x2526f0c1, 0x341cd1d2, + 0x34158559, 0x25312b81, 0x254fd323, 0x33ff93e2, 0x33f83f62, 0x255a0823, 0x25789e80, 0x33e235df, + 0x33dad95e, 0x2582cdbc, 0x25a152c0, 0x33c4b7db, 0x33bd535c, 0x25ab7c30, 0x25c9efca, 0x33a719e8, + 0x339fad70, 0x25d41369, 0x25f27584, 0x33895c18, 0x3381e7ac, 0x25fc934b, 0x261ae3d6, 0x336b7e7e, + 0x33640223, 0x2624fbbf, 0x26433aa7, 0x334d812d, 0x3345fce6, 0x264d4cac, 0x266b79dd, 0x332f6435, + 0x3327d808, 0x267585f8, 0x2693a161, 0x331127ab, 0x3309939c, 0x269da78b, 0x26bbb119, 0x32f2cba1, + 0x32eb2fb5, 0x26c5b14c, 0x26e3a8ec, 0x32d45029, 0x32ccac64, 0x26eda322, 0x270b88c2, 0x32b5b557, + 0x32ae09be, 0x27157cf5, 0x27335082, 0x3296fb3d, 0x328f47d5, 0x273d3eac, 0x275b0014, 0x327821ee, + 0x327066bc, 0x2764e82f, 0x27829760, 0x3259297d, 0x32516686, 0x278c7965, 0x27aa164c, 0x323a11fe, + 0x32324746, 0x27b3f235, 0x27d17cc1, 0x321adb83, 0x3213090f, 0x27db5288, 0x27f8caa5, 0x31fb8620, + 0x31f3abf5, 0x28029a45, 0x281fffe2, 0x31dc11e8, 0x31d4300b, 0x2829c954, 0x28471c5e, 0x31bc7eee, + 0x31b49564, 0x2850df9d, 0x286e2002, 0x319ccd46, 0x3194dc14, 0x2877dd07, 0x28950ab6, 0x317cfd04, + 0x3175042e, 0x289ec17a, 0x28bbdc61, 0x315d0e3b, 0x31550dc6, 0x28c58cdf, 0x28e294eb, 0x313d00ff, + 0x3134f8f1, 0x28ec3f1e, 0x2909343e, 0x311cd564, 0x3114c5c0, 0x2912d81f, 0x292fba40, 0x30fc8b7d, + 0x30f47449, 0x293957c9, 0x295626da, 0x30dc235e, 0x30d404a0, 0x295fbe06, 0x297c79f5, 0x30bb9d1c, + 0x30b376d8, 0x29860abd, 0x29a2b378, 0x309af8ca, 0x3092cb05, 0x29ac3dd7, 0x29c8d34d, 0x307a367c, + 0x3072013c, 0x29d2573c, 0x29eed95b, 0x30595648, 0x30511991, 0x29f856d5, 0x2a14c58b, 0x30385840, + 0x30301418, 0x2a1e3c8a, 0x2a3a97c7, 0x30173c7a, 0x300ef0e5, 0x2a440844, 0x2a604ff5, 0x2ff6030a, + 0x2fedb00d, 0x2a69b9ec, 0x2a85ee00, 0x2fd4ac04, 0x2fcc51a5, 0x2a8f516b, 0x2aab71d0, 0x2fb3377c, + 0x2faad5c1, 0x2ab4cea9, 0x2ad0db4e, 0x2f91a589, 0x2f893c75, 0x2ada318e, 0x2af62a63, 0x2f6ff63d, + 0x2f6785d7, 0x2aff7a05, 0x2b1b5ef8, 0x2f4e29af, 0x2f45b1fb, 0x2b24a7f6, 0x2b4078f5, 0x2f2c3ff2, + 0x2f23c0f6, 0x2b49bb4a, 0x2b657844, 0x2f0a391d, 0x2f01b2de, 0x2b6eb3ea, 0x2b8a5cce, 0x2ee81543, + 0x2edf87c6, 0x2b9391c0, 0x2baf267d, 0x2ec5d479, 0x2ebd3fc4, 0x2bb854b4, 0x2bd3d53a, 0x2ea376d6, + 0x2e9adaee, 0x2bdcfcb0, 0x2bf868ed, 0x2e80fc6e, 0x2e785958, 0x2c01899e, 0x2c1ce181, 0x2e5e6556, + 0x2e55bb17, 0x2c25fb66, 0x2c413edf, 0x2e3bb1a4, 0x2e330042, 0x2c4a51f3, 0x2c6580f1, 0x2e18e16d, + 0x2e1028ed, 0x2c6e8d2e, 0x2c89a79f, 0x2df5f4c7, 0x2ded352f, 0x2c92ad01, 0x2cadb2d5, 0x2dd2ebc7, + 0x2dca251c, 0x2cb6b155, 0x2cd1a27b, 0x2dafc683, 0x2da6f8ca, 0x2cda9a14, 0x2cf5767c, 0x2d8c8510, 0x2d83b04f, 0x2cfe6728, 0x2d192ec1, 0x2d692784, 0x2d604bc0, 0x2d22187a, 0x2d3ccb34, 0x2d45adf6 }; const int twidTab512[8*6 + 32*6 + 128*6] = { - 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3b20d79e, 0x187de2a6, - 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, - 0x187de2a6, 0x3b20d79e, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, - 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xe7821d5a, 0x3b20d79e, - 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, - 0xc4df2862, 0xe7821d5a, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, - - 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3fb11b47, 0x0645e9af, - 0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, - 0x3d3e82ad, 0x1294062e, 0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, - 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x387165e3, 0x1e2b5d38, - 0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, - 0x2899e64a, 0x317900d6, 0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, - 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2899e64a, 0x317900d6, - 0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, - 0x0645e9af, 0x3fb11b47, 0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, - 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x1294062e, 0x3d3e82ad, - 0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, - 0xe1d4a2c8, 0x387165e3, 0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, - 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf9ba1651, 0x3fb11b47, - 0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, - 0xc78e9a1d, 0x1e2b5d38, 0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, - 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe1d4a2c8, 0x387165e3, - 0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, - 0xc04ee4b9, 0xf9ba1651, 0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, - 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xce86ff2a, 0x2899e64a, - 0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, - 0xce86ff2a, 0xd76619b6, 0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, - 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc2c17d53, 0x1294062e, - 0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, - 0xed6bf9d2, 0xc2c17d53, 0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, - - 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ffb10c1, 0x0192155f, - 0x3ffec42d, 0x00c90e8f, 0x3ff4e5df, 0x025b0cae, 0x3fec43c6, 0x0323ecbe, 0x3ffb10c1, 0x0192155f, - 0x3fd39b5a, 0x04b54824, 0x3fd39b5a, 0x04b54824, 0x3ff4e5df, 0x025b0cae, 0x3f9c2bfa, 0x070de171, - 0x3fb11b47, 0x0645e9af, 0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3f84c8e1, 0x07d59395, - 0x3fe12acb, 0x03ecadcf, 0x3eeb3347, 0x0bb6ecef, 0x3f4eaafe, 0x09640837, 0x3fd39b5a, 0x04b54824, - 0x3e71e758, 0x0e05c135, 0x3f0ec9f4, 0x0af10a22, 0x3fc395f9, 0x057db402, 0x3de2f147, 0x104fb80e, - 0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3e71e758, 0x0e05c135, - 0x3f9c2bfa, 0x070de171, 0x3c84d496, 0x14d1e242, 0x3e14fdf7, 0x0f8cfcbd, 0x3f84c8e1, 0x07d59395, - 0x3bb6276d, 0x17088530, 0x3dae81ce, 0x1111d262, 0x3f6af2e3, 0x089cf867, 0x3ad2c2e7, 0x19372a63, - 0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, 0x3cc511d8, 0x14135c94, - 0x3f2ff249, 0x0a2abb58, 0x38cf1669, 0x1d79775b, 0x3c424209, 0x158f9a75, 0x3f0ec9f4, 0x0af10a22, - 0x37af8158, 0x1f8ba4db, 0x3bb6276d, 0x17088530, 0x3eeb3347, 0x0bb6ecef, 0x367c9a7d, 0x2192e09a, - 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x3a8269a2, 0x19ef7943, - 0x3e9cc076, 0x0d415012, 0x33de87de, 0x257db64b, 0x39daf5e8, 0x1b5d1009, 0x3e71e758, 0x0e05c135, - 0x32744493, 0x275ff452, 0x392a9642, 0x1cc66e99, 0x3e44a5ee, 0x0ec9a7f2, 0x30f8801f, 0x29348937, - 0x387165e3, 0x1e2b5d38, 0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x37af8158, 0x1f8ba4db, - 0x3de2f147, 0x104fb80e, 0x2dce88a9, 0x2cb2324b, 0x36e5068a, 0x20e70f32, 0x3dae81ce, 0x1111d262, - 0x2c216eaa, 0x2e5a106f, 0x361214b0, 0x223d66a8, 0x3d77b191, 0x11d3443f, 0x2a650525, 0x2ff1d9c6, - 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, 0x34534f40, 0x24da0a99, - 0x3d02f756, 0x135410c2, 0x26c0b162, 0x32eefde9, 0x3367c08f, 0x261feff9, 0x3cc511d8, 0x14135c94, - 0x24da0a99, 0x34534f40, 0x32744493, 0x275ff452, 0x3c84d496, 0x14d1e242, 0x22e69ac7, 0x35a5793c, - 0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, 0x30761c17, 0x29cd9577, - 0x3bfd5cc4, 0x164c7ddd, 0x1edc1952, 0x3811884c, 0x2f6bbe44, 0x2afad269, 0x3bb6276d, 0x17088530, - 0x1cc66e99, 0x392a9642, 0x2e5a106f, 0x2c216eaa, 0x3b6ca4c4, 0x17c3a931, 0x1aa6c82b, 0x3a2fcee8, - 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2c216eaa, 0x2e5a106f, - 0x3ad2c2e7, 0x19372a63, 0x164c7ddd, 0x3bfd5cc4, 0x2afad269, 0x2f6bbe44, 0x3a8269a2, 0x19ef7943, - 0x14135c94, 0x3cc511d8, 0x29cd9577, 0x30761c17, 0x3a2fcee8, 0x1aa6c82b, 0x11d3443f, 0x3d77b191, - 0x2899e64a, 0x317900d6, 0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x275ff452, 0x32744493, - 0x3983e1e7, 0x1c1249d8, 0x0d415012, 0x3e9cc076, 0x261feff9, 0x3367c08f, 0x392a9642, 0x1cc66e99, - 0x0af10a22, 0x3f0ec9f4, 0x24da0a99, 0x34534f40, 0x38cf1669, 0x1d79775b, 0x089cf867, 0x3f6af2e3, - 0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x223d66a8, 0x361214b0, - 0x3811884c, 0x1edc1952, 0x03ecadcf, 0x3fe12acb, 0x20e70f32, 0x36e5068a, 0x37af8158, 0x1f8ba4db, - 0x0192155f, 0x3ffb10c1, 0x1f8ba4db, 0x37af8158, 0x374b54ce, 0x2039f90e, 0xff36f171, 0x3ffec42d, - 0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, 0x1cc66e99, 0x392a9642, - 0x367c9a7d, 0x2192e09a, 0xfa824bfe, 0x3fc395f9, 0x1b5d1009, 0x39daf5e8, 0x361214b0, 0x223d66a8, - 0xf82a6c6b, 0x3f84c8e1, 0x19ef7943, 0x3a8269a2, 0x35a5793c, 0x22e69ac7, 0xf5d544a8, 0x3f2ff249, - 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x17088530, 0x3bb6276d, - 0x34c61236, 0x2434f332, 0xf136580e, 0x3e44a5ee, 0x158f9a75, 0x3c424209, 0x34534f40, 0x24da0a99, - 0xeeee2d9e, 0x3dae81ce, 0x14135c94, 0x3cc511d8, 0x33de87de, 0x257db64b, 0xecabef3e, 0x3d02f756, - 0x1294062e, 0x3d3e82ad, 0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x1111d262, 0x3dae81ce, - 0x32eefde9, 0x26c0b162, 0xe83c56cf, 0x3b6ca4c4, 0x0f8cfcbd, 0x3e14fdf7, 0x32744493, 0x275ff452, - 0xe61086bd, 0x3a8269a2, 0x0e05c135, 0x3e71e758, 0x31f79947, 0x27fdb2a6, 0xe3edb628, 0x3983e1e7, - 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, 0x0af10a22, 0x3f0ec9f4, - 0x30f8801f, 0x29348937, 0xdfc606f2, 0x374b54ce, 0x09640837, 0x3f4eaafe, 0x30761c17, 0x29cd9577, - 0xddc29958, 0x361214b0, 0x07d59395, 0x3f84c8e1, 0x2ff1d9c6, 0x2a650525, 0xdbcb0cce, 0x34c61236, - 0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, 0x04b54824, 0x3fd39b5a, - 0x2ee3cebe, 0x2b8ef77c, 0xd8024d5a, 0x31f79947, 0x0323ecbe, 0x3fec43c6, 0x2e5a106f, 0x2c216eaa, - 0xd6326a89, 0x30761c17, 0x0192155f, 0x3ffb10c1, 0x2dce88a9, 0x2cb2324b, 0xd4710884, 0x2ee3cebe, - 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xfe6deaa1, 0x3ffb10c1, - 0x2cb2324b, 0x2dce88a9, 0xd11c3142, 0x2b8ef77c, 0xfcdc1342, 0x3fec43c6, 0x2c216eaa, 0x2e5a106f, - 0xcf89e3e9, 0x29cd9577, 0xfb4ab7dc, 0x3fd39b5a, 0x2b8ef77c, 0x2ee3cebe, 0xce0866b9, 0x27fdb2a6, - 0xf9ba1651, 0x3fb11b47, 0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf82a6c6b, 0x3f84c8e1, - 0x2a650525, 0x2ff1d9c6, 0xcb39edca, 0x2434f332, 0xf69bf7c9, 0x3f4eaafe, 0x29cd9577, 0x30761c17, - 0xc9edeb50, 0x223d66a8, 0xf50ef5de, 0x3f0ec9f4, 0x29348937, 0x30f8801f, 0xc8b4ab32, 0x2039f90e, - 0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xf1fa3ecb, 0x3e71e758, - 0x27fdb2a6, 0x31f79947, 0xc67c1e19, 0x1c1249d8, 0xf0730343, 0x3e14fdf7, 0x275ff452, 0x32744493, - 0xc57d965e, 0x19ef7943, 0xeeee2d9e, 0x3dae81ce, 0x26c0b162, 0x32eefde9, 0xc4935b3c, 0x17c3a931, - 0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, 0xebeca36c, 0x3cc511d8, - 0x257db64b, 0x33de87de, 0xc2fd08aa, 0x135410c2, 0xea70658b, 0x3c424209, 0x24da0a99, 0x34534f40, - 0xc2517e32, 0x1111d262, 0xe8f77ad0, 0x3bb6276d, 0x2434f332, 0x34c61236, 0xc1bb5a12, 0x0ec9a7f2, - 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe61086bd, 0x3a8269a2, - 0x22e69ac7, 0x35a5793c, 0xc0d00db7, 0x0a2abb58, 0xe4a2eff7, 0x39daf5e8, 0x223d66a8, 0x361214b0, - 0xc07b371f, 0x07d59395, 0xe3399167, 0x392a9642, 0x2192e09a, 0x367c9a7d, 0xc03c6a07, 0x057db402, - 0xe1d4a2c8, 0x387165e3, 0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xe0745b25, 0x37af8158, - 0x2039f90e, 0x374b54ce, 0xc0013bd3, 0x00c90e8f, 0xdf18f0ce, 0x36e5068a, 0x1f8ba4db, 0x37af8158, - 0xc004ef3f, 0xfe6deaa1, 0xddc29958, 0x361214b0, 0x1edc1952, 0x3811884c, 0xc01ed535, 0xfc135231, - 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, 0xdb25f567, 0x34534f40, - 0x1d79775b, 0x38cf1669, 0xc0950d1d, 0xf7630799, 0xd9e01007, 0x3367c08f, 0x1cc66e99, 0x392a9642, - 0xc0f1360c, 0xf50ef5de, 0xd8a00bae, 0x32744493, 0x1c1249d8, 0x3983e1e7, 0xc1633f8a, 0xf2beafee, - 0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, 0xd6326a89, 0x30761c17, - 0x1aa6c82b, 0x3a2fcee8, 0xc2884e6f, 0xee2cbbc1, 0xd5052d97, 0x2f6bbe44, 0x19ef7943, 0x3a8269a2, - 0xc33aee28, 0xebeca36c, 0xd3de9156, 0x2e5a106f, 0x19372a63, 0x3ad2c2e7, 0xc402a33c, 0xe9b38223, - 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xd1a5ef91, 0x2c216eaa, - 0x17c3a931, 0x3b6ca4c4, 0xc5d03118, 0xe55937d5, 0xd09441bc, 0x2afad269, 0x17088530, 0x3bb6276d, - 0xc6d569be, 0xe3399167, 0xcf89e3e9, 0x29cd9577, 0x164c7ddd, 0x3bfd5cc4, 0xc7ee77b4, 0xe123e6ae, - 0xce86ff2a, 0x2899e64a, 0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcd8bbb6d, 0x275ff452, - 0x14d1e242, 0x3c84d496, 0xca5a86c4, 0xdd196539, 0xcc983f71, 0x261feff9, 0x14135c94, 0x3cc511d8, - 0xcbacb0c0, 0xdb25f567, 0xcbacb0c0, 0x24da0a99, 0x135410c2, 0x3d02f756, 0xcd110217, 0xd93f4e9e, - 0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc9edeb50, 0x223d66a8, - 0x11d3443f, 0x3d77b191, 0xd00e263a, 0xd59afadb, 0xc91af976, 0x20e70f32, 0x1111d262, 0x3dae81ce, - 0xd1a5ef91, 0xd3de9156, 0xc8507ea8, 0x1f8ba4db, 0x104fb80e, 0x3de2f147, 0xd34dcdb5, 0xd2317757, - 0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, 0xc6d569be, 0x1cc66e99, - 0x0ec9a7f2, 0x3e44a5ee, 0xd6cb76c9, 0xcf077fe1, 0xc6250a18, 0x1b5d1009, 0x0e05c135, 0x3e71e758, - 0xd8a00bae, 0xcd8bbb6d, 0xc57d965e, 0x19ef7943, 0x0d415012, 0x3e9cc076, 0xda8249b5, 0xcc217822, - 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc449d893, 0x17088530, - 0x0bb6ecef, 0x3eeb3347, 0xde6d1f66, 0xc9836583, 0xc3bdbdf7, 0x158f9a75, 0x0af10a22, 0x3f0ec9f4, - 0xe0745b25, 0xc8507ea8, 0xc33aee28, 0x14135c94, 0x0a2abb58, 0x3f2ff249, 0xe28688a5, 0xc730e997, - 0xc2c17d53, 0x1294062e, 0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc2517e32, 0x1111d262, - 0x089cf867, 0x3f6af2e3, 0xe6c8d59d, 0xc52d3d19, 0xc1eb0209, 0x0f8cfcbd, 0x07d59395, 0x3f84c8e1, - 0xe8f77ad0, 0xc449d893, 0xc18e18a8, 0x0e05c135, 0x070de171, 0x3f9c2bfa, 0xeb2e1dbe, 0xc37b2b6a, - 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53, 0xc0f1360c, 0x0af10a22, - 0x057db402, 0x3fc395f9, 0xefb047f2, 0xc21d0eb9, 0xc0b15502, 0x09640837, 0x04b54824, 0x3fd39b5a, - 0xf1fa3ecb, 0xc18e18a8, 0xc07b371f, 0x07d59395, 0x03ecadcf, 0x3fe12acb, 0xf4491311, 0xc114ccb9, - 0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, 0xc02c64a6, 0x04b54824, - 0x025b0cae, 0x3ff4e5df, 0xf8f21e8f, 0xc063d406, 0xc013bc3a, 0x0323ecbe, 0x0192155f, 0x3ffb10c1, + 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3b20d79e, 0x187de2a6, + 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, + 0x187de2a6, 0x3b20d79e, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, + 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xe7821d5a, 0x3b20d79e, + 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, + 0xc4df2862, 0xe7821d5a, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, + + 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3fb11b47, 0x0645e9af, + 0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, + 0x3d3e82ad, 0x1294062e, 0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, + 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x387165e3, 0x1e2b5d38, + 0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, + 0x2899e64a, 0x317900d6, 0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, + 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2899e64a, 0x317900d6, + 0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, + 0x0645e9af, 0x3fb11b47, 0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, + 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x1294062e, 0x3d3e82ad, + 0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, + 0xe1d4a2c8, 0x387165e3, 0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, + 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf9ba1651, 0x3fb11b47, + 0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, + 0xc78e9a1d, 0x1e2b5d38, 0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, + 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe1d4a2c8, 0x387165e3, + 0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, + 0xc04ee4b9, 0xf9ba1651, 0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, + 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xce86ff2a, 0x2899e64a, + 0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, + 0xce86ff2a, 0xd76619b6, 0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, + 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc2c17d53, 0x1294062e, + 0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, + 0xed6bf9d2, 0xc2c17d53, 0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, + + 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ffb10c1, 0x0192155f, + 0x3ffec42d, 0x00c90e8f, 0x3ff4e5df, 0x025b0cae, 0x3fec43c6, 0x0323ecbe, 0x3ffb10c1, 0x0192155f, + 0x3fd39b5a, 0x04b54824, 0x3fd39b5a, 0x04b54824, 0x3ff4e5df, 0x025b0cae, 0x3f9c2bfa, 0x070de171, + 0x3fb11b47, 0x0645e9af, 0x3fec43c6, 0x0323ecbe, 0x3f4eaafe, 0x09640837, 0x3f84c8e1, 0x07d59395, + 0x3fe12acb, 0x03ecadcf, 0x3eeb3347, 0x0bb6ecef, 0x3f4eaafe, 0x09640837, 0x3fd39b5a, 0x04b54824, + 0x3e71e758, 0x0e05c135, 0x3f0ec9f4, 0x0af10a22, 0x3fc395f9, 0x057db402, 0x3de2f147, 0x104fb80e, + 0x3ec52f9f, 0x0c7c5c1e, 0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3e71e758, 0x0e05c135, + 0x3f9c2bfa, 0x070de171, 0x3c84d496, 0x14d1e242, 0x3e14fdf7, 0x0f8cfcbd, 0x3f84c8e1, 0x07d59395, + 0x3bb6276d, 0x17088530, 0x3dae81ce, 0x1111d262, 0x3f6af2e3, 0x089cf867, 0x3ad2c2e7, 0x19372a63, + 0x3d3e82ad, 0x1294062e, 0x3f4eaafe, 0x09640837, 0x39daf5e8, 0x1b5d1009, 0x3cc511d8, 0x14135c94, + 0x3f2ff249, 0x0a2abb58, 0x38cf1669, 0x1d79775b, 0x3c424209, 0x158f9a75, 0x3f0ec9f4, 0x0af10a22, + 0x37af8158, 0x1f8ba4db, 0x3bb6276d, 0x17088530, 0x3eeb3347, 0x0bb6ecef, 0x367c9a7d, 0x2192e09a, + 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, 0x3536cc52, 0x238e7673, 0x3a8269a2, 0x19ef7943, + 0x3e9cc076, 0x0d415012, 0x33de87de, 0x257db64b, 0x39daf5e8, 0x1b5d1009, 0x3e71e758, 0x0e05c135, + 0x32744493, 0x275ff452, 0x392a9642, 0x1cc66e99, 0x3e44a5ee, 0x0ec9a7f2, 0x30f8801f, 0x29348937, + 0x387165e3, 0x1e2b5d38, 0x3e14fdf7, 0x0f8cfcbd, 0x2f6bbe44, 0x2afad269, 0x37af8158, 0x1f8ba4db, + 0x3de2f147, 0x104fb80e, 0x2dce88a9, 0x2cb2324b, 0x36e5068a, 0x20e70f32, 0x3dae81ce, 0x1111d262, + 0x2c216eaa, 0x2e5a106f, 0x361214b0, 0x223d66a8, 0x3d77b191, 0x11d3443f, 0x2a650525, 0x2ff1d9c6, + 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, 0x34534f40, 0x24da0a99, + 0x3d02f756, 0x135410c2, 0x26c0b162, 0x32eefde9, 0x3367c08f, 0x261feff9, 0x3cc511d8, 0x14135c94, + 0x24da0a99, 0x34534f40, 0x32744493, 0x275ff452, 0x3c84d496, 0x14d1e242, 0x22e69ac7, 0x35a5793c, + 0x317900d6, 0x2899e64a, 0x3c424209, 0x158f9a75, 0x20e70f32, 0x36e5068a, 0x30761c17, 0x29cd9577, + 0x3bfd5cc4, 0x164c7ddd, 0x1edc1952, 0x3811884c, 0x2f6bbe44, 0x2afad269, 0x3bb6276d, 0x17088530, + 0x1cc66e99, 0x392a9642, 0x2e5a106f, 0x2c216eaa, 0x3b6ca4c4, 0x17c3a931, 0x1aa6c82b, 0x3a2fcee8, + 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x2c216eaa, 0x2e5a106f, + 0x3ad2c2e7, 0x19372a63, 0x164c7ddd, 0x3bfd5cc4, 0x2afad269, 0x2f6bbe44, 0x3a8269a2, 0x19ef7943, + 0x14135c94, 0x3cc511d8, 0x29cd9577, 0x30761c17, 0x3a2fcee8, 0x1aa6c82b, 0x11d3443f, 0x3d77b191, + 0x2899e64a, 0x317900d6, 0x39daf5e8, 0x1b5d1009, 0x0f8cfcbd, 0x3e14fdf7, 0x275ff452, 0x32744493, + 0x3983e1e7, 0x1c1249d8, 0x0d415012, 0x3e9cc076, 0x261feff9, 0x3367c08f, 0x392a9642, 0x1cc66e99, + 0x0af10a22, 0x3f0ec9f4, 0x24da0a99, 0x34534f40, 0x38cf1669, 0x1d79775b, 0x089cf867, 0x3f6af2e3, + 0x238e7673, 0x3536cc52, 0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x223d66a8, 0x361214b0, + 0x3811884c, 0x1edc1952, 0x03ecadcf, 0x3fe12acb, 0x20e70f32, 0x36e5068a, 0x37af8158, 0x1f8ba4db, + 0x0192155f, 0x3ffb10c1, 0x1f8ba4db, 0x37af8158, 0x374b54ce, 0x2039f90e, 0xff36f171, 0x3ffec42d, + 0x1e2b5d38, 0x387165e3, 0x36e5068a, 0x20e70f32, 0xfcdc1342, 0x3fec43c6, 0x1cc66e99, 0x392a9642, + 0x367c9a7d, 0x2192e09a, 0xfa824bfe, 0x3fc395f9, 0x1b5d1009, 0x39daf5e8, 0x361214b0, 0x223d66a8, + 0xf82a6c6b, 0x3f84c8e1, 0x19ef7943, 0x3a8269a2, 0x35a5793c, 0x22e69ac7, 0xf5d544a8, 0x3f2ff249, + 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, 0xf383a3e2, 0x3ec52f9f, 0x17088530, 0x3bb6276d, + 0x34c61236, 0x2434f332, 0xf136580e, 0x3e44a5ee, 0x158f9a75, 0x3c424209, 0x34534f40, 0x24da0a99, + 0xeeee2d9e, 0x3dae81ce, 0x14135c94, 0x3cc511d8, 0x33de87de, 0x257db64b, 0xecabef3e, 0x3d02f756, + 0x1294062e, 0x3d3e82ad, 0x3367c08f, 0x261feff9, 0xea70658b, 0x3c424209, 0x1111d262, 0x3dae81ce, + 0x32eefde9, 0x26c0b162, 0xe83c56cf, 0x3b6ca4c4, 0x0f8cfcbd, 0x3e14fdf7, 0x32744493, 0x275ff452, + 0xe61086bd, 0x3a8269a2, 0x0e05c135, 0x3e71e758, 0x31f79947, 0x27fdb2a6, 0xe3edb628, 0x3983e1e7, + 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, 0x0af10a22, 0x3f0ec9f4, + 0x30f8801f, 0x29348937, 0xdfc606f2, 0x374b54ce, 0x09640837, 0x3f4eaafe, 0x30761c17, 0x29cd9577, + 0xddc29958, 0x361214b0, 0x07d59395, 0x3f84c8e1, 0x2ff1d9c6, 0x2a650525, 0xdbcb0cce, 0x34c61236, + 0x0645e9af, 0x3fb11b47, 0x2f6bbe44, 0x2afad269, 0xd9e01007, 0x3367c08f, 0x04b54824, 0x3fd39b5a, + 0x2ee3cebe, 0x2b8ef77c, 0xd8024d5a, 0x31f79947, 0x0323ecbe, 0x3fec43c6, 0x2e5a106f, 0x2c216eaa, + 0xd6326a89, 0x30761c17, 0x0192155f, 0x3ffb10c1, 0x2dce88a9, 0x2cb2324b, 0xd4710884, 0x2ee3cebe, + 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xfe6deaa1, 0x3ffb10c1, + 0x2cb2324b, 0x2dce88a9, 0xd11c3142, 0x2b8ef77c, 0xfcdc1342, 0x3fec43c6, 0x2c216eaa, 0x2e5a106f, + 0xcf89e3e9, 0x29cd9577, 0xfb4ab7dc, 0x3fd39b5a, 0x2b8ef77c, 0x2ee3cebe, 0xce0866b9, 0x27fdb2a6, + 0xf9ba1651, 0x3fb11b47, 0x2afad269, 0x2f6bbe44, 0xcc983f71, 0x261feff9, 0xf82a6c6b, 0x3f84c8e1, + 0x2a650525, 0x2ff1d9c6, 0xcb39edca, 0x2434f332, 0xf69bf7c9, 0x3f4eaafe, 0x29cd9577, 0x30761c17, + 0xc9edeb50, 0x223d66a8, 0xf50ef5de, 0x3f0ec9f4, 0x29348937, 0x30f8801f, 0xc8b4ab32, 0x2039f90e, + 0xf383a3e2, 0x3ec52f9f, 0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xf1fa3ecb, 0x3e71e758, + 0x27fdb2a6, 0x31f79947, 0xc67c1e19, 0x1c1249d8, 0xf0730343, 0x3e14fdf7, 0x275ff452, 0x32744493, + 0xc57d965e, 0x19ef7943, 0xeeee2d9e, 0x3dae81ce, 0x26c0b162, 0x32eefde9, 0xc4935b3c, 0x17c3a931, + 0xed6bf9d2, 0x3d3e82ad, 0x261feff9, 0x3367c08f, 0xc3bdbdf7, 0x158f9a75, 0xebeca36c, 0x3cc511d8, + 0x257db64b, 0x33de87de, 0xc2fd08aa, 0x135410c2, 0xea70658b, 0x3c424209, 0x24da0a99, 0x34534f40, + 0xc2517e32, 0x1111d262, 0xe8f77ad0, 0x3bb6276d, 0x2434f332, 0x34c61236, 0xc1bb5a12, 0x0ec9a7f2, + 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, 0xc13ad061, 0x0c7c5c1e, 0xe61086bd, 0x3a8269a2, + 0x22e69ac7, 0x35a5793c, 0xc0d00db7, 0x0a2abb58, 0xe4a2eff7, 0x39daf5e8, 0x223d66a8, 0x361214b0, + 0xc07b371f, 0x07d59395, 0xe3399167, 0x392a9642, 0x2192e09a, 0x367c9a7d, 0xc03c6a07, 0x057db402, + 0xe1d4a2c8, 0x387165e3, 0x20e70f32, 0x36e5068a, 0xc013bc3a, 0x0323ecbe, 0xe0745b25, 0x37af8158, + 0x2039f90e, 0x374b54ce, 0xc0013bd3, 0x00c90e8f, 0xdf18f0ce, 0x36e5068a, 0x1f8ba4db, 0x37af8158, + 0xc004ef3f, 0xfe6deaa1, 0xddc29958, 0x361214b0, 0x1edc1952, 0x3811884c, 0xc01ed535, 0xfc135231, + 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, 0xdb25f567, 0x34534f40, + 0x1d79775b, 0x38cf1669, 0xc0950d1d, 0xf7630799, 0xd9e01007, 0x3367c08f, 0x1cc66e99, 0x392a9642, + 0xc0f1360c, 0xf50ef5de, 0xd8a00bae, 0x32744493, 0x1c1249d8, 0x3983e1e7, 0xc1633f8a, 0xf2beafee, + 0xd76619b6, 0x317900d6, 0x1b5d1009, 0x39daf5e8, 0xc1eb0209, 0xf0730343, 0xd6326a89, 0x30761c17, + 0x1aa6c82b, 0x3a2fcee8, 0xc2884e6f, 0xee2cbbc1, 0xd5052d97, 0x2f6bbe44, 0x19ef7943, 0x3a8269a2, + 0xc33aee28, 0xebeca36c, 0xd3de9156, 0x2e5a106f, 0x19372a63, 0x3ad2c2e7, 0xc402a33c, 0xe9b38223, + 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xd1a5ef91, 0x2c216eaa, + 0x17c3a931, 0x3b6ca4c4, 0xc5d03118, 0xe55937d5, 0xd09441bc, 0x2afad269, 0x17088530, 0x3bb6276d, + 0xc6d569be, 0xe3399167, 0xcf89e3e9, 0x29cd9577, 0x164c7ddd, 0x3bfd5cc4, 0xc7ee77b4, 0xe123e6ae, + 0xce86ff2a, 0x2899e64a, 0x158f9a75, 0x3c424209, 0xc91af976, 0xdf18f0ce, 0xcd8bbb6d, 0x275ff452, + 0x14d1e242, 0x3c84d496, 0xca5a86c4, 0xdd196539, 0xcc983f71, 0x261feff9, 0x14135c94, 0x3cc511d8, + 0xcbacb0c0, 0xdb25f567, 0xcbacb0c0, 0x24da0a99, 0x135410c2, 0x3d02f756, 0xcd110217, 0xd93f4e9e, + 0xcac933ae, 0x238e7673, 0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc9edeb50, 0x223d66a8, + 0x11d3443f, 0x3d77b191, 0xd00e263a, 0xd59afadb, 0xc91af976, 0x20e70f32, 0x1111d262, 0x3dae81ce, + 0xd1a5ef91, 0xd3de9156, 0xc8507ea8, 0x1f8ba4db, 0x104fb80e, 0x3de2f147, 0xd34dcdb5, 0xd2317757, + 0xc78e9a1d, 0x1e2b5d38, 0x0f8cfcbd, 0x3e14fdf7, 0xd5052d97, 0xd09441bc, 0xc6d569be, 0x1cc66e99, + 0x0ec9a7f2, 0x3e44a5ee, 0xd6cb76c9, 0xcf077fe1, 0xc6250a18, 0x1b5d1009, 0x0e05c135, 0x3e71e758, + 0xd8a00bae, 0xcd8bbb6d, 0xc57d965e, 0x19ef7943, 0x0d415012, 0x3e9cc076, 0xda8249b5, 0xcc217822, + 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, 0xdc71898d, 0xcac933ae, 0xc449d893, 0x17088530, + 0x0bb6ecef, 0x3eeb3347, 0xde6d1f66, 0xc9836583, 0xc3bdbdf7, 0x158f9a75, 0x0af10a22, 0x3f0ec9f4, + 0xe0745b25, 0xc8507ea8, 0xc33aee28, 0x14135c94, 0x0a2abb58, 0x3f2ff249, 0xe28688a5, 0xc730e997, + 0xc2c17d53, 0x1294062e, 0x09640837, 0x3f4eaafe, 0xe4a2eff7, 0xc6250a18, 0xc2517e32, 0x1111d262, + 0x089cf867, 0x3f6af2e3, 0xe6c8d59d, 0xc52d3d19, 0xc1eb0209, 0x0f8cfcbd, 0x07d59395, 0x3f84c8e1, + 0xe8f77ad0, 0xc449d893, 0xc18e18a8, 0x0e05c135, 0x070de171, 0x3f9c2bfa, 0xeb2e1dbe, 0xc37b2b6a, + 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53, 0xc0f1360c, 0x0af10a22, + 0x057db402, 0x3fc395f9, 0xefb047f2, 0xc21d0eb9, 0xc0b15502, 0x09640837, 0x04b54824, 0x3fd39b5a, + 0xf1fa3ecb, 0xc18e18a8, 0xc07b371f, 0x07d59395, 0x03ecadcf, 0x3fe12acb, 0xf4491311, 0xc114ccb9, + 0xc04ee4b9, 0x0645e9af, 0x0323ecbe, 0x3fec43c6, 0xf69bf7c9, 0xc0b15502, 0xc02c64a6, 0x04b54824, + 0x025b0cae, 0x3ff4e5df, 0xf8f21e8f, 0xc063d406, 0xc013bc3a, 0x0323ecbe, 0x0192155f, 0x3ffb10c1, 0xfb4ab7dc, 0xc02c64a6, 0xc004ef3f, 0x0192155f, 0x00c90e8f, 0x3ffec42d, 0xfda4f352, 0xc00b1a21 }; const int twidTab64[4*6 + 16*6] = { - 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x2d413ccc, 0x2d413ccc, - 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, - 0xd2bec334, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, - - 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ec52f9f, 0x0c7c5c1e, - 0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, - 0x3536cc52, 0x238e7673, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, - 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x238e7673, 0x3536cc52, - 0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, - 0xf383a3e2, 0x3ec52f9f, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, - 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf383a3e2, 0x3ec52f9f, - 0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, - 0xc13ad061, 0x0c7c5c1e, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, - 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xcac933ae, 0x238e7673, - 0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, - 0xdc71898d, 0xcac933ae, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53 + 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x2d413ccc, 0x2d413ccc, + 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, + 0xd2bec334, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, + + 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00000000, 0x3ec52f9f, 0x0c7c5c1e, + 0x3fb11b47, 0x0645e9af, 0x3d3e82ad, 0x1294062e, 0x3b20d79e, 0x187de2a6, 0x3ec52f9f, 0x0c7c5c1e, + 0x3536cc52, 0x238e7673, 0x3536cc52, 0x238e7673, 0x3d3e82ad, 0x1294062e, 0x2899e64a, 0x317900d6, + 0x2d413ccc, 0x2d413ccc, 0x3b20d79e, 0x187de2a6, 0x187de2a6, 0x3b20d79e, 0x238e7673, 0x3536cc52, + 0x387165e3, 0x1e2b5d38, 0x0645e9af, 0x3fb11b47, 0x187de2a6, 0x3b20d79e, 0x3536cc52, 0x238e7673, + 0xf383a3e2, 0x3ec52f9f, 0x0c7c5c1e, 0x3ec52f9f, 0x317900d6, 0x2899e64a, 0xe1d4a2c8, 0x387165e3, + 0x00000000, 0x40000000, 0x2d413ccc, 0x2d413ccc, 0xd2bec334, 0x2d413ccc, 0xf383a3e2, 0x3ec52f9f, + 0x2899e64a, 0x317900d6, 0xc78e9a1d, 0x1e2b5d38, 0xe7821d5a, 0x3b20d79e, 0x238e7673, 0x3536cc52, + 0xc13ad061, 0x0c7c5c1e, 0xdc71898d, 0x3536cc52, 0x1e2b5d38, 0x387165e3, 0xc04ee4b9, 0xf9ba1651, + 0xd2bec334, 0x2d413ccc, 0x187de2a6, 0x3b20d79e, 0xc4df2862, 0xe7821d5a, 0xcac933ae, 0x238e7673, + 0x1294062e, 0x3d3e82ad, 0xce86ff2a, 0xd76619b6, 0xc4df2862, 0x187de2a6, 0x0c7c5c1e, 0x3ec52f9f, + 0xdc71898d, 0xcac933ae, 0xc13ad061, 0x0c7c5c1e, 0x0645e9af, 0x3fb11b47, 0xed6bf9d2, 0xc2c17d53 }; #endif //ARMV5E -const int ShortWindowSine[FRAME_LEN_SHORT/2] ={ - 0x00c97fff, 0x025b7ffa, 0x03ed7ff1, 0x057f7fe2, 0x07117fce, 0x08a27fb5, 0x0a337f98, 0x0bc47f75, - 0x0d547f4e, 0x0ee47f22, 0x10737ef0, 0x12017eba, 0x138f7e7f, 0x151c7e3f, 0x16a87dfb, 0x18337db1, - 0x19be7d63, 0x1b477d0f, 0x1cd07cb7, 0x1e577c5a, 0x1fdd7bf9, 0x21627b92, 0x22e57b27, 0x24677ab7, - 0x25e87a42, 0x276879c9, 0x28e5794a, 0x2a6278c8, 0x2bdc7840, 0x2d5577b4, 0x2ecc7723, 0x3042768e, - 0x31b575f4, 0x33277556, 0x349774b3, 0x3604740b, 0x3770735f, 0x38d972af, 0x3a4071fa, 0x3ba57141, - 0x3d087083, 0x3e686fc2, 0x3fc66efb, 0x41216e31, 0x427a6d62, 0x43d16c8f, 0x45246bb8, 0x46756add, - 0x47c469fd, 0x490f691a, 0x4a586832, 0x4b9e6747, 0x4ce16657, 0x4e216564, 0x4f5e646c, 0x50986371, +const int ShortWindowSine[FRAME_LEN_SHORT/2] ={ + 0x00c97fff, 0x025b7ffa, 0x03ed7ff1, 0x057f7fe2, 0x07117fce, 0x08a27fb5, 0x0a337f98, 0x0bc47f75, + 0x0d547f4e, 0x0ee47f22, 0x10737ef0, 0x12017eba, 0x138f7e7f, 0x151c7e3f, 0x16a87dfb, 0x18337db1, + 0x19be7d63, 0x1b477d0f, 0x1cd07cb7, 0x1e577c5a, 0x1fdd7bf9, 0x21627b92, 0x22e57b27, 0x24677ab7, + 0x25e87a42, 0x276879c9, 0x28e5794a, 0x2a6278c8, 0x2bdc7840, 0x2d5577b4, 0x2ecc7723, 0x3042768e, + 0x31b575f4, 0x33277556, 0x349774b3, 0x3604740b, 0x3770735f, 0x38d972af, 0x3a4071fa, 0x3ba57141, + 0x3d087083, 0x3e686fc2, 0x3fc66efb, 0x41216e31, 0x427a6d62, 0x43d16c8f, 0x45246bb8, 0x46756add, + 0x47c469fd, 0x490f691a, 0x4a586832, 0x4b9e6747, 0x4ce16657, 0x4e216564, 0x4f5e646c, 0x50986371, 0x51cf6272, 0x5303616f, 0x54336068, 0x55605f5e, 0x568a5e50, 0x57b15d3e, 0x58d45c29, 0x59f45b10 }; -const int LongWindowKBD[FRAME_LEN_LONG/2]={ - 0x000a7fff, 0x000e7fff, 0x00127fff, 0x00157fff, 0x00197fff, 0x001c7fff, 0x00207fff, 0x00237fff, - 0x00267fff, 0x002a7fff, 0x002d7fff, 0x00307fff, 0x00347fff, 0x00387fff, 0x003b7fff, 0x003f7fff, - 0x00437fff, 0x00477fff, 0x004b7fff, 0x004f7fff, 0x00537fff, 0x00577fff, 0x005b7fff, 0x00607fff, - 0x00647fff, 0x00697fff, 0x006d7fff, 0x00727fff, 0x00777fff, 0x007c7fff, 0x00817fff, 0x00867fff, - 0x008b7fff, 0x00917fff, 0x00967fff, 0x009c7fff, 0x00a17fff, 0x00a77fff, 0x00ad7fff, 0x00b37fff, - 0x00b97fff, 0x00bf7fff, 0x00c67fff, 0x00cc7fff, 0x00d37fff, 0x00da7fff, 0x00e07fff, 0x00e77fff, - 0x00ee7fff, 0x00f57fff, 0x00fd7fff, 0x01047fff, 0x010c7fff, 0x01137fff, 0x011b7fff, 0x01237fff, - 0x012b7fff, 0x01337fff, 0x013c7ffe, 0x01447ffe, 0x014d7ffe, 0x01567ffe, 0x015f7ffe, 0x01687ffe, - 0x01717ffe, 0x017a7ffe, 0x01837ffe, 0x018d7ffe, 0x01977ffd, 0x01a17ffd, 0x01ab7ffd, 0x01b57ffd, - 0x01bf7ffd, 0x01ca7ffd, 0x01d47ffd, 0x01df7ffc, 0x01ea7ffc, 0x01f57ffc, 0x02007ffc, 0x020c7ffc, - 0x02177ffc, 0x02237ffb, 0x022f7ffb, 0x023b7ffb, 0x02477ffb, 0x02537ffb, 0x02607ffa, 0x026d7ffa, - 0x027a7ffa, 0x02877ffa, 0x02947ff9, 0x02a17ff9, 0x02af7ff9, 0x02bc7ff9, 0x02ca7ff8, 0x02d87ff8, - 0x02e77ff8, 0x02f57ff7, 0x03047ff7, 0x03127ff7, 0x03217ff6, 0x03317ff6, 0x03407ff5, 0x034f7ff5, - 0x035f7ff5, 0x036f7ff4, 0x037f7ff4, 0x038f7ff3, 0x03a07ff3, 0x03b07ff2, 0x03c17ff2, 0x03d27ff1, - 0x03e37ff1, 0x03f57ff0, 0x04067ff0, 0x04187fef, 0x042a7fef, 0x043c7fee, 0x044f7fed, 0x04617fed, - 0x04747fec, 0x04877feb, 0x049a7feb, 0x04ae7fea, 0x04c17fe9, 0x04d57fe9, 0x04e97fe8, 0x04fd7fe7, - 0x05127fe6, 0x05277fe5, 0x053b7fe5, 0x05507fe4, 0x05667fe3, 0x057b7fe2, 0x05917fe1, 0x05a77fe0, - 0x05bd7fdf, 0x05d37fde, 0x05ea7fdd, 0x06017fdc, 0x06187fdb, 0x062f7fda, 0x06467fd9, 0x065e7fd7, - 0x06767fd6, 0x068e7fd5, 0x06a67fd4, 0x06bf7fd2, 0x06d87fd1, 0x06f17fd0, 0x070a7fce, 0x07237fcd, - 0x073d7fcc, 0x07577fca, 0x07717fc9, 0x078c7fc7, 0x07a67fc5, 0x07c17fc4, 0x07dc7fc2, 0x07f77fc0, - 0x08137fbf, 0x082f7fbd, 0x084b7fbb, 0x08677fb9, 0x08847fb7, 0x08a07fb6, 0x08bd7fb4, 0x08da7fb2, - 0x08f87faf, 0x09167fad, 0x09347fab, 0x09527fa9, 0x09707fa7, 0x098f7fa5, 0x09ae7fa2, 0x09cd7fa0, - 0x09ec7f9d, 0x0a0c7f9b, 0x0a2c7f98, 0x0a4c7f96, 0x0a6c7f93, 0x0a8d7f91, 0x0aae7f8e, 0x0acf7f8b, - 0x0af07f88, 0x0b127f85, 0x0b337f82, 0x0b557f7f, 0x0b787f7c, 0x0b9a7f79, 0x0bbd7f76, 0x0be07f73, - 0x0c047f6f, 0x0c277f6c, 0x0c4b7f69, 0x0c6f7f65, 0x0c937f61, 0x0cb87f5e, 0x0cdd7f5a, 0x0d027f56, - 0x0d277f53, 0x0d4d7f4f, 0x0d737f4b, 0x0d997f47, 0x0dbf7f43, 0x0de67f3e, 0x0e0c7f3a, 0x0e347f36, - 0x0e5b7f31, 0x0e837f2d, 0x0eaa7f28, 0x0ed37f24, 0x0efb7f1f, 0x0f237f1a, 0x0f4c7f15, 0x0f757f10, - 0x0f9f7f0b, 0x0fc87f06, 0x0ff27f01, 0x101c7efb, 0x10477ef6, 0x10717ef0, 0x109c7eeb, 0x10c87ee5, - 0x10f37edf, 0x111f7eda, 0x114a7ed4, 0x11777ece, 0x11a37ec7, 0x11d07ec1, 0x11fd7ebb, 0x122a7eb4, - 0x12577eae, 0x12857ea7, 0x12b37ea0, 0x12e17e9a, 0x130f7e93, 0x133e7e8c, 0x136d7e84, 0x139c7e7d, - 0x13cc7e76, 0x13fb7e6e, 0x142b7e67, 0x145b7e5f, 0x148c7e57, 0x14bc7e4f, 0x14ed7e47, 0x151e7e3f, - 0x15507e37, 0x15817e2e, 0x15b37e26, 0x15e57e1d, 0x16187e14, 0x164a7e0b, 0x167d7e02, 0x16b07df9, - 0x16e47df0, 0x17177de6, 0x174b7ddd, 0x177f7dd3, 0x17b37dc9, 0x17e87dbf, 0x181d7db5, 0x18527dab, - 0x18877da1, 0x18bc7d96, 0x18f27d8c, 0x19287d81, 0x195e7d76, 0x19957d6b, 0x19cb7d60, 0x1a027d54, - 0x1a397d49, 0x1a717d3d, 0x1aa87d31, 0x1ae07d26, 0x1b187d19, 0x1b507d0d, 0x1b897d01, 0x1bc27cf4, - 0x1bfb7ce8, 0x1c347cdb, 0x1c6d7cce, 0x1ca77cc1, 0x1ce17cb3, 0x1d1b7ca6, 0x1d557c98, 0x1d8f7c8a, - 0x1dca7c7c, 0x1e057c6e, 0x1e407c60, 0x1e7b7c51, 0x1eb77c43, 0x1ef37c34, 0x1f2f7c25, 0x1f6b7c16, - 0x1fa77c06, 0x1fe47bf7, 0x20217be7, 0x205e7bd7, 0x209b7bc7, 0x20d87bb7, 0x21167ba6, 0x21547b96, - 0x21927b85, 0x21d07b74, 0x220e7b63, 0x224d7b52, 0x228c7b40, 0x22cb7b2e, 0x230a7b1c, 0x23497b0a, - 0x23897af8, 0x23c87ae6, 0x24087ad3, 0x24487ac0, 0x24897aad, 0x24c97a9a, 0x250a7a86, 0x254b7a73, - 0x258c7a5f, 0x25cd7a4b, 0x260e7a36, 0x26507a22, 0x26917a0d, 0x26d379f8, 0x271579e3, 0x275779ce, - 0x279a79b8, 0x27dc79a3, 0x281f798d, 0x28627977, 0x28a57960, 0x28e8794a, 0x292b7933, 0x296f791c, - 0x29b27905, 0x29f678ed, 0x2a3a78d6, 0x2a7e78be, 0x2ac278a6, 0x2b07788d, 0x2b4b7875, 0x2b90785c, - 0x2bd47843, 0x2c19782a, 0x2c5e7810, 0x2ca477f7, 0x2ce977dd, 0x2d2e77c3, 0x2d7477a8, 0x2dba778e, - 0x2dff7773, 0x2e457758, 0x2e8b773d, 0x2ed27721, 0x2f187706, 0x2f5e76ea, 0x2fa576cd, 0x2fec76b1, - 0x30327694, 0x30797677, 0x30c0765a, 0x3107763d, 0x314e761f, 0x31967601, 0x31dd75e3, 0x322575c5, - 0x326c75a6, 0x32b47588, 0x32fc7569, 0x33447549, 0x338c752a, 0x33d4750a, 0x341c74ea, 0x346474ca, - 0x34ac74a9, 0x34f57488, 0x353d7467, 0x35857446, 0x35ce7424, 0x36177403, 0x365f73e1, 0x36a873be, - 0x36f1739c, 0x373a7379, 0x37837356, 0x37cc7333, 0x3815730f, 0x385e72ec, 0x38a772c8, 0x38f172a3, - 0x393a727f, 0x3983725a, 0x39cd7235, 0x3a167210, 0x3a6071ea, 0x3aa971c4, 0x3af3719e, 0x3b3c7178, - 0x3b867151, 0x3bd0712b, 0x3c197104, 0x3c6370dc, 0x3cad70b5, 0x3cf7708d, 0x3d407065, 0x3d8a703c, - 0x3dd47014, 0x3e1e6feb, 0x3e686fc2, 0x3eb16f98, 0x3efb6f6f, 0x3f456f45, 0x3f8f6f1b, 0x3fd96ef0, - 0x40236ec6, 0x406d6e9b, 0x40b66e70, 0x41006e44, 0x414a6e19, 0x41946ded, 0x41de6dc1, 0x42286d94, - 0x42716d68, 0x42bb6d3b, 0x43056d0d, 0x434f6ce0, 0x43986cb2, 0x43e26c84, 0x442c6c56, 0x44756c28, - 0x44bf6bf9, 0x45086bca, 0x45526b9b, 0x459b6b6b, 0x45e56b3c, 0x462e6b0c, 0x46786adb, 0x46c16aab, - 0x470a6a7a, 0x47536a49, 0x479c6a18, 0x47e569e7, 0x482e69b5, 0x48776983, 0x48c06951, 0x4909691e, - 0x495268ec, 0x499b68b9, 0x49e36885, 0x4a2c6852, 0x4a74681e, 0x4abd67ea, 0x4b0567b6, 0x4b4d6782, - 0x4b95674d, 0x4bde6718, 0x4c2666e3, 0x4c6d66ae, 0x4cb56678, 0x4cfd6642, 0x4d45660c, 0x4d8c65d6, - 0x4dd4659f, 0x4e1b6568, 0x4e626531, 0x4ea964fa, 0x4ef064c3, 0x4f37648b, 0x4f7e6453, 0x4fc5641b, - 0x500b63e2, 0x505263aa, 0x50986371, 0x50df6338, 0x512562fe, 0x516b62c5, 0x51b1628b, 0x51f66251, - 0x523c6217, 0x528161dc, 0x52c761a2, 0x530c6167, 0x5351612c, 0x539660f1, 0x53db60b5, 0x54206079, - 0x5464603d, 0x54a96001, 0x54ed5fc5, 0x55315f88, 0x55755f4b, 0x55b95f0e, 0x55fc5ed1, 0x56405e94, - 0x56835e56, 0x56c75e18, 0x570a5dda, 0x574d5d9c, 0x578f5d5e, 0x57d25d1f, 0x58145ce0, 0x58565ca1, +const int LongWindowKBD[FRAME_LEN_LONG/2]={ + 0x000a7fff, 0x000e7fff, 0x00127fff, 0x00157fff, 0x00197fff, 0x001c7fff, 0x00207fff, 0x00237fff, + 0x00267fff, 0x002a7fff, 0x002d7fff, 0x00307fff, 0x00347fff, 0x00387fff, 0x003b7fff, 0x003f7fff, + 0x00437fff, 0x00477fff, 0x004b7fff, 0x004f7fff, 0x00537fff, 0x00577fff, 0x005b7fff, 0x00607fff, + 0x00647fff, 0x00697fff, 0x006d7fff, 0x00727fff, 0x00777fff, 0x007c7fff, 0x00817fff, 0x00867fff, + 0x008b7fff, 0x00917fff, 0x00967fff, 0x009c7fff, 0x00a17fff, 0x00a77fff, 0x00ad7fff, 0x00b37fff, + 0x00b97fff, 0x00bf7fff, 0x00c67fff, 0x00cc7fff, 0x00d37fff, 0x00da7fff, 0x00e07fff, 0x00e77fff, + 0x00ee7fff, 0x00f57fff, 0x00fd7fff, 0x01047fff, 0x010c7fff, 0x01137fff, 0x011b7fff, 0x01237fff, + 0x012b7fff, 0x01337fff, 0x013c7ffe, 0x01447ffe, 0x014d7ffe, 0x01567ffe, 0x015f7ffe, 0x01687ffe, + 0x01717ffe, 0x017a7ffe, 0x01837ffe, 0x018d7ffe, 0x01977ffd, 0x01a17ffd, 0x01ab7ffd, 0x01b57ffd, + 0x01bf7ffd, 0x01ca7ffd, 0x01d47ffd, 0x01df7ffc, 0x01ea7ffc, 0x01f57ffc, 0x02007ffc, 0x020c7ffc, + 0x02177ffc, 0x02237ffb, 0x022f7ffb, 0x023b7ffb, 0x02477ffb, 0x02537ffb, 0x02607ffa, 0x026d7ffa, + 0x027a7ffa, 0x02877ffa, 0x02947ff9, 0x02a17ff9, 0x02af7ff9, 0x02bc7ff9, 0x02ca7ff8, 0x02d87ff8, + 0x02e77ff8, 0x02f57ff7, 0x03047ff7, 0x03127ff7, 0x03217ff6, 0x03317ff6, 0x03407ff5, 0x034f7ff5, + 0x035f7ff5, 0x036f7ff4, 0x037f7ff4, 0x038f7ff3, 0x03a07ff3, 0x03b07ff2, 0x03c17ff2, 0x03d27ff1, + 0x03e37ff1, 0x03f57ff0, 0x04067ff0, 0x04187fef, 0x042a7fef, 0x043c7fee, 0x044f7fed, 0x04617fed, + 0x04747fec, 0x04877feb, 0x049a7feb, 0x04ae7fea, 0x04c17fe9, 0x04d57fe9, 0x04e97fe8, 0x04fd7fe7, + 0x05127fe6, 0x05277fe5, 0x053b7fe5, 0x05507fe4, 0x05667fe3, 0x057b7fe2, 0x05917fe1, 0x05a77fe0, + 0x05bd7fdf, 0x05d37fde, 0x05ea7fdd, 0x06017fdc, 0x06187fdb, 0x062f7fda, 0x06467fd9, 0x065e7fd7, + 0x06767fd6, 0x068e7fd5, 0x06a67fd4, 0x06bf7fd2, 0x06d87fd1, 0x06f17fd0, 0x070a7fce, 0x07237fcd, + 0x073d7fcc, 0x07577fca, 0x07717fc9, 0x078c7fc7, 0x07a67fc5, 0x07c17fc4, 0x07dc7fc2, 0x07f77fc0, + 0x08137fbf, 0x082f7fbd, 0x084b7fbb, 0x08677fb9, 0x08847fb7, 0x08a07fb6, 0x08bd7fb4, 0x08da7fb2, + 0x08f87faf, 0x09167fad, 0x09347fab, 0x09527fa9, 0x09707fa7, 0x098f7fa5, 0x09ae7fa2, 0x09cd7fa0, + 0x09ec7f9d, 0x0a0c7f9b, 0x0a2c7f98, 0x0a4c7f96, 0x0a6c7f93, 0x0a8d7f91, 0x0aae7f8e, 0x0acf7f8b, + 0x0af07f88, 0x0b127f85, 0x0b337f82, 0x0b557f7f, 0x0b787f7c, 0x0b9a7f79, 0x0bbd7f76, 0x0be07f73, + 0x0c047f6f, 0x0c277f6c, 0x0c4b7f69, 0x0c6f7f65, 0x0c937f61, 0x0cb87f5e, 0x0cdd7f5a, 0x0d027f56, + 0x0d277f53, 0x0d4d7f4f, 0x0d737f4b, 0x0d997f47, 0x0dbf7f43, 0x0de67f3e, 0x0e0c7f3a, 0x0e347f36, + 0x0e5b7f31, 0x0e837f2d, 0x0eaa7f28, 0x0ed37f24, 0x0efb7f1f, 0x0f237f1a, 0x0f4c7f15, 0x0f757f10, + 0x0f9f7f0b, 0x0fc87f06, 0x0ff27f01, 0x101c7efb, 0x10477ef6, 0x10717ef0, 0x109c7eeb, 0x10c87ee5, + 0x10f37edf, 0x111f7eda, 0x114a7ed4, 0x11777ece, 0x11a37ec7, 0x11d07ec1, 0x11fd7ebb, 0x122a7eb4, + 0x12577eae, 0x12857ea7, 0x12b37ea0, 0x12e17e9a, 0x130f7e93, 0x133e7e8c, 0x136d7e84, 0x139c7e7d, + 0x13cc7e76, 0x13fb7e6e, 0x142b7e67, 0x145b7e5f, 0x148c7e57, 0x14bc7e4f, 0x14ed7e47, 0x151e7e3f, + 0x15507e37, 0x15817e2e, 0x15b37e26, 0x15e57e1d, 0x16187e14, 0x164a7e0b, 0x167d7e02, 0x16b07df9, + 0x16e47df0, 0x17177de6, 0x174b7ddd, 0x177f7dd3, 0x17b37dc9, 0x17e87dbf, 0x181d7db5, 0x18527dab, + 0x18877da1, 0x18bc7d96, 0x18f27d8c, 0x19287d81, 0x195e7d76, 0x19957d6b, 0x19cb7d60, 0x1a027d54, + 0x1a397d49, 0x1a717d3d, 0x1aa87d31, 0x1ae07d26, 0x1b187d19, 0x1b507d0d, 0x1b897d01, 0x1bc27cf4, + 0x1bfb7ce8, 0x1c347cdb, 0x1c6d7cce, 0x1ca77cc1, 0x1ce17cb3, 0x1d1b7ca6, 0x1d557c98, 0x1d8f7c8a, + 0x1dca7c7c, 0x1e057c6e, 0x1e407c60, 0x1e7b7c51, 0x1eb77c43, 0x1ef37c34, 0x1f2f7c25, 0x1f6b7c16, + 0x1fa77c06, 0x1fe47bf7, 0x20217be7, 0x205e7bd7, 0x209b7bc7, 0x20d87bb7, 0x21167ba6, 0x21547b96, + 0x21927b85, 0x21d07b74, 0x220e7b63, 0x224d7b52, 0x228c7b40, 0x22cb7b2e, 0x230a7b1c, 0x23497b0a, + 0x23897af8, 0x23c87ae6, 0x24087ad3, 0x24487ac0, 0x24897aad, 0x24c97a9a, 0x250a7a86, 0x254b7a73, + 0x258c7a5f, 0x25cd7a4b, 0x260e7a36, 0x26507a22, 0x26917a0d, 0x26d379f8, 0x271579e3, 0x275779ce, + 0x279a79b8, 0x27dc79a3, 0x281f798d, 0x28627977, 0x28a57960, 0x28e8794a, 0x292b7933, 0x296f791c, + 0x29b27905, 0x29f678ed, 0x2a3a78d6, 0x2a7e78be, 0x2ac278a6, 0x2b07788d, 0x2b4b7875, 0x2b90785c, + 0x2bd47843, 0x2c19782a, 0x2c5e7810, 0x2ca477f7, 0x2ce977dd, 0x2d2e77c3, 0x2d7477a8, 0x2dba778e, + 0x2dff7773, 0x2e457758, 0x2e8b773d, 0x2ed27721, 0x2f187706, 0x2f5e76ea, 0x2fa576cd, 0x2fec76b1, + 0x30327694, 0x30797677, 0x30c0765a, 0x3107763d, 0x314e761f, 0x31967601, 0x31dd75e3, 0x322575c5, + 0x326c75a6, 0x32b47588, 0x32fc7569, 0x33447549, 0x338c752a, 0x33d4750a, 0x341c74ea, 0x346474ca, + 0x34ac74a9, 0x34f57488, 0x353d7467, 0x35857446, 0x35ce7424, 0x36177403, 0x365f73e1, 0x36a873be, + 0x36f1739c, 0x373a7379, 0x37837356, 0x37cc7333, 0x3815730f, 0x385e72ec, 0x38a772c8, 0x38f172a3, + 0x393a727f, 0x3983725a, 0x39cd7235, 0x3a167210, 0x3a6071ea, 0x3aa971c4, 0x3af3719e, 0x3b3c7178, + 0x3b867151, 0x3bd0712b, 0x3c197104, 0x3c6370dc, 0x3cad70b5, 0x3cf7708d, 0x3d407065, 0x3d8a703c, + 0x3dd47014, 0x3e1e6feb, 0x3e686fc2, 0x3eb16f98, 0x3efb6f6f, 0x3f456f45, 0x3f8f6f1b, 0x3fd96ef0, + 0x40236ec6, 0x406d6e9b, 0x40b66e70, 0x41006e44, 0x414a6e19, 0x41946ded, 0x41de6dc1, 0x42286d94, + 0x42716d68, 0x42bb6d3b, 0x43056d0d, 0x434f6ce0, 0x43986cb2, 0x43e26c84, 0x442c6c56, 0x44756c28, + 0x44bf6bf9, 0x45086bca, 0x45526b9b, 0x459b6b6b, 0x45e56b3c, 0x462e6b0c, 0x46786adb, 0x46c16aab, + 0x470a6a7a, 0x47536a49, 0x479c6a18, 0x47e569e7, 0x482e69b5, 0x48776983, 0x48c06951, 0x4909691e, + 0x495268ec, 0x499b68b9, 0x49e36885, 0x4a2c6852, 0x4a74681e, 0x4abd67ea, 0x4b0567b6, 0x4b4d6782, + 0x4b95674d, 0x4bde6718, 0x4c2666e3, 0x4c6d66ae, 0x4cb56678, 0x4cfd6642, 0x4d45660c, 0x4d8c65d6, + 0x4dd4659f, 0x4e1b6568, 0x4e626531, 0x4ea964fa, 0x4ef064c3, 0x4f37648b, 0x4f7e6453, 0x4fc5641b, + 0x500b63e2, 0x505263aa, 0x50986371, 0x50df6338, 0x512562fe, 0x516b62c5, 0x51b1628b, 0x51f66251, + 0x523c6217, 0x528161dc, 0x52c761a2, 0x530c6167, 0x5351612c, 0x539660f1, 0x53db60b5, 0x54206079, + 0x5464603d, 0x54a96001, 0x54ed5fc5, 0x55315f88, 0x55755f4b, 0x55b95f0e, 0x55fc5ed1, 0x56405e94, + 0x56835e56, 0x56c75e18, 0x570a5dda, 0x574d5d9c, 0x578f5d5e, 0x57d25d1f, 0x58145ce0, 0x58565ca1, 0x58995c62, 0x58da5c23, 0x591c5be3, 0x595e5ba4, 0x599f5b64, 0x59e05b24, 0x5a215ae3, 0x5a625aa3 }; @@ -1070,277 +1070,277 @@ const Word32 formfac_sqrttable[96] = { \brief these tables are used for the non linear quantizer and inverse quantizer - + */ const Word32 mTab_3_4[512] = { - 0x4c1bf829, 0x4c3880de, 0x4c550603, 0x4c71879c, - 0x4c8e05aa, 0x4caa8030, 0x4cc6f72f, 0x4ce36aab, - 0x4cffdaa4, 0x4d1c471d, 0x4d38b019, 0x4d55159a, - 0x4d7177a1, 0x4d8dd631, 0x4daa314b, 0x4dc688f3, - 0x4de2dd2a, 0x4dff2df2, 0x4e1b7b4d, 0x4e37c53d, - 0x4e540bc5, 0x4e704ee6, 0x4e8c8ea3, 0x4ea8cafd, - 0x4ec503f7, 0x4ee13992, 0x4efd6bd0, 0x4f199ab4, - 0x4f35c640, 0x4f51ee75, 0x4f6e1356, 0x4f8a34e4, - 0x4fa65321, 0x4fc26e10, 0x4fde85b2, 0x4ffa9a0a, - 0x5016ab18, 0x5032b8e0, 0x504ec362, 0x506acaa1, - 0x5086cea0, 0x50a2cf5e, 0x50becce0, 0x50dac725, - 0x50f6be31, 0x5112b205, 0x512ea2a3, 0x514a900d, - 0x51667a45, 0x5182614c, 0x519e4524, 0x51ba25cf, - 0x51d60350, 0x51f1dda7, 0x520db4d6, 0x522988e0, - 0x524559c6, 0x52612789, 0x527cf22d, 0x5298b9b1, - 0x52b47e19, 0x52d03f65, 0x52ebfd98, 0x5307b8b4, - 0x532370b9, 0x533f25aa, 0x535ad789, 0x53768656, - 0x53923215, 0x53addac6, 0x53c9806b, 0x53e52306, - 0x5400c298, 0x541c5f24, 0x5437f8ab, 0x54538f2e, - 0x546f22af, 0x548ab330, 0x54a640b3, 0x54c1cb38, - 0x54dd52c2, 0x54f8d753, 0x551458eb, 0x552fd78d, - 0x554b5339, 0x5566cbf3, 0x558241bb, 0x559db492, - 0x55b9247b, 0x55d49177, 0x55effb87, 0x560b62ad, - 0x5626c6eb, 0x56422842, 0x565d86b4, 0x5678e242, - 0x56943aee, 0x56af90b9, 0x56cae3a4, 0x56e633b2, - 0x570180e4, 0x571ccb3b, 0x573812b8, 0x5753575e, - 0x576e992e, 0x5789d829, 0x57a51450, 0x57c04da6, - 0x57db842b, 0x57f6b7e1, 0x5811e8c9, 0x582d16e6, - 0x58484238, 0x58636ac0, 0x587e9081, 0x5899b37c, - 0x58b4d3b1, 0x58cff123, 0x58eb0bd3, 0x590623c2, - 0x592138f2, 0x593c4b63, 0x59575b19, 0x59726812, - 0x598d7253, 0x59a879da, 0x59c37eab, 0x59de80c6, - 0x59f9802d, 0x5a147ce0, 0x5a2f76e2, 0x5a4a6e34, - 0x5a6562d6, 0x5a8054cb, 0x5a9b4414, 0x5ab630b2, - 0x5ad11aa6, 0x5aec01f1, 0x5b06e696, 0x5b21c895, - 0x5b3ca7ef, 0x5b5784a6, 0x5b725ebc, 0x5b8d3631, - 0x5ba80b06, 0x5bc2dd3e, 0x5bddacd9, 0x5bf879d8, - 0x5c13443d, 0x5c2e0c09, 0x5c48d13e, 0x5c6393dc, - 0x5c7e53e5, 0x5c99115a, 0x5cb3cc3c, 0x5cce848d, - 0x5ce93a4e, 0x5d03ed80, 0x5d1e9e24, 0x5d394c3b, - 0x5d53f7c7, 0x5d6ea0c9, 0x5d894742, 0x5da3eb33, - 0x5dbe8c9e, 0x5dd92b84, 0x5df3c7e5, 0x5e0e61c3, - 0x5e28f920, 0x5e438dfc, 0x5e5e2059, 0x5e78b037, - 0x5e933d99, 0x5eadc87e, 0x5ec850e9, 0x5ee2d6da, - 0x5efd5a53, 0x5f17db54, 0x5f3259e0, 0x5f4cd5f6, - 0x5f674f99, 0x5f81c6c8, 0x5f9c3b87, 0x5fb6add4, - 0x5fd11db3, 0x5feb8b23, 0x6005f626, 0x60205ebd, - 0x603ac4e9, 0x605528ac, 0x606f8a05, 0x6089e8f7, - 0x60a44583, 0x60be9fa9, 0x60d8f76b, 0x60f34cca, - 0x610d9fc7, 0x6127f062, 0x61423e9e, 0x615c8a7a, - 0x6176d3f9, 0x61911b1b, 0x61ab5fe1, 0x61c5a24d, - 0x61dfe25f, 0x61fa2018, 0x62145b7a, 0x622e9485, - 0x6248cb3b, 0x6262ff9d, 0x627d31ab, 0x62976167, - 0x62b18ed1, 0x62cbb9eb, 0x62e5e2b6, 0x63000933, - 0x631a2d62, 0x63344f45, 0x634e6edd, 0x63688c2b, - 0x6382a730, 0x639cbfec, 0x63b6d661, 0x63d0ea90, - 0x63eafc7a, 0x64050c1f, 0x641f1982, 0x643924a2, - 0x64532d80, 0x646d341f, 0x6487387e, 0x64a13a9e, - 0x64bb3a81, 0x64d53828, 0x64ef3393, 0x65092cc4, - 0x652323bb, 0x653d1879, 0x65570b00, 0x6570fb50, - 0x658ae96b, 0x65a4d550, 0x65bebf01, 0x65d8a680, - 0x65f28bcc, 0x660c6ee8, 0x66264fd3, 0x66402e8f, - 0x665a0b1c, 0x6673e57d, 0x668dbdb0, 0x66a793b8, - 0x66c16795, 0x66db3949, 0x66f508d4, 0x670ed636, - 0x6728a172, 0x67426a87, 0x675c3177, 0x6775f643, - 0x678fb8eb, 0x67a97971, 0x67c337d5, 0x67dcf418, - 0x67f6ae3b, 0x6810663f, 0x682a1c25, 0x6843cfed, - 0x685d8199, 0x68773129, 0x6890de9f, 0x68aa89fa, - 0x68c4333d, 0x68ddda67, 0x68f77f7a, 0x69112277, - 0x692ac35e, 0x69446230, 0x695dfeee, 0x6977999a, - 0x69913232, 0x69aac8ba, 0x69c45d31, 0x69ddef98, - 0x69f77ff0, 0x6a110e3a, 0x6a2a9a77, 0x6a4424a8, - 0x6a5daccc, 0x6a7732e6, 0x6a90b6f6, 0x6aaa38fd, - 0x6ac3b8fb, 0x6add36f2, 0x6af6b2e2, 0x6b102ccd, - 0x6b29a4b2, 0x6b431a92, 0x6b5c8e6f, 0x6b76004a, - 0x6b8f7022, 0x6ba8ddf9, 0x6bc249d0, 0x6bdbb3a7, - 0x6bf51b80, 0x6c0e815a, 0x6c27e537, 0x6c414718, - 0x6c5aa6fd, 0x6c7404e7, 0x6c8d60d7, 0x6ca6bace, - 0x6cc012cc, 0x6cd968d2, 0x6cf2bce1, 0x6d0c0ef9, - 0x6d255f1d, 0x6d3ead4b, 0x6d57f985, 0x6d7143cc, - 0x6d8a8c21, 0x6da3d283, 0x6dbd16f5, 0x6dd65976, - 0x6def9a08, 0x6e08d8ab, 0x6e221560, 0x6e3b5027, - 0x6e548902, 0x6e6dbff1, 0x6e86f4f5, 0x6ea0280e, - 0x6eb9593e, 0x6ed28885, 0x6eebb5e3, 0x6f04e15a, - 0x6f1e0aea, 0x6f373294, 0x6f505859, 0x6f697c39, - 0x6f829e35, 0x6f9bbe4e, 0x6fb4dc85, 0x6fcdf8d9, - 0x6fe7134d, 0x70002be0, 0x70194293, 0x70325767, - 0x704b6a5d, 0x70647b76, 0x707d8ab1, 0x70969811, - 0x70afa394, 0x70c8ad3d, 0x70e1b50c, 0x70fabb01, - 0x7113bf1d, 0x712cc161, 0x7145c1ce, 0x715ec064, - 0x7177bd24, 0x7190b80f, 0x71a9b124, 0x71c2a866, - 0x71db9dd4, 0x71f49170, 0x720d8339, 0x72267331, - 0x723f6159, 0x72584db0, 0x72713838, 0x728a20f1, - 0x72a307db, 0x72bbecf9, 0x72d4d049, 0x72edb1ce, - 0x73069187, 0x731f6f75, 0x73384b98, 0x735125f3, - 0x7369fe84, 0x7382d54d, 0x739baa4e, 0x73b47d89, - 0x73cd4efd, 0x73e61eab, 0x73feec94, 0x7417b8b8, - 0x74308319, 0x74494bb6, 0x74621291, 0x747ad7aa, - 0x74939b02, 0x74ac5c98, 0x74c51c6f, 0x74ddda86, - 0x74f696de, 0x750f5178, 0x75280a54, 0x7540c174, - 0x755976d7, 0x75722a7e, 0x758adc69, 0x75a38c9b, - 0x75bc3b12, 0x75d4e7cf, 0x75ed92d4, 0x76063c21, - 0x761ee3b6, 0x76378994, 0x76502dbc, 0x7668d02e, - 0x768170eb, 0x769a0ff3, 0x76b2ad47, 0x76cb48e7, - 0x76e3e2d5, 0x76fc7b10, 0x7715119a, 0x772da673, - 0x7746399b, 0x775ecb13, 0x77775adc, 0x778fe8f6, - 0x77a87561, 0x77c1001f, 0x77d98930, 0x77f21095, - 0x780a964d, 0x78231a5b, 0x783b9cbd, 0x78541d75, - 0x786c9c84, 0x788519e9, 0x789d95a6, 0x78b60fbb, - 0x78ce8828, 0x78e6feef, 0x78ff740f, 0x7917e78a, - 0x7930595f, 0x7948c990, 0x7961381d, 0x7979a506, - 0x7992104c, 0x79aa79f0, 0x79c2e1f1, 0x79db4852, - 0x79f3ad11, 0x7a0c1031, 0x7a2471b0, 0x7a3cd191, - 0x7a552fd3, 0x7a6d8c76, 0x7a85e77d, 0x7a9e40e6, - 0x7ab698b2, 0x7aceeee3, 0x7ae74378, 0x7aff9673, - 0x7b17e7d2, 0x7b303799, 0x7b4885c5, 0x7b60d259, - 0x7b791d55, 0x7b9166b9, 0x7ba9ae86, 0x7bc1f4bc, - 0x7bda395c, 0x7bf27c66, 0x7c0abddb, 0x7c22fdbb, - 0x7c3b3c07, 0x7c5378c0, 0x7c6bb3e5, 0x7c83ed78, - 0x7c9c2579, 0x7cb45be9, 0x7ccc90c7, 0x7ce4c414, - 0x7cfcf5d2, 0x7d152600, 0x7d2d549f, 0x7d4581b0, - 0x7d5dad32, 0x7d75d727, 0x7d8dff8f, 0x7da6266a, - 0x7dbe4bba, 0x7dd66f7d, 0x7dee91b6, 0x7e06b264, - 0x7e1ed188, 0x7e36ef22, 0x7e4f0b34, 0x7e6725bd, - 0x7e7f3ebd, 0x7e975636, 0x7eaf6c28, 0x7ec78093, - 0x7edf9378, 0x7ef7a4d7, 0x7f0fb4b1, 0x7f27c307, - 0x7f3fcfd8, 0x7f57db25, 0x7f6fe4ef, 0x7f87ed36, + 0x4c1bf829, 0x4c3880de, 0x4c550603, 0x4c71879c, + 0x4c8e05aa, 0x4caa8030, 0x4cc6f72f, 0x4ce36aab, + 0x4cffdaa4, 0x4d1c471d, 0x4d38b019, 0x4d55159a, + 0x4d7177a1, 0x4d8dd631, 0x4daa314b, 0x4dc688f3, + 0x4de2dd2a, 0x4dff2df2, 0x4e1b7b4d, 0x4e37c53d, + 0x4e540bc5, 0x4e704ee6, 0x4e8c8ea3, 0x4ea8cafd, + 0x4ec503f7, 0x4ee13992, 0x4efd6bd0, 0x4f199ab4, + 0x4f35c640, 0x4f51ee75, 0x4f6e1356, 0x4f8a34e4, + 0x4fa65321, 0x4fc26e10, 0x4fde85b2, 0x4ffa9a0a, + 0x5016ab18, 0x5032b8e0, 0x504ec362, 0x506acaa1, + 0x5086cea0, 0x50a2cf5e, 0x50becce0, 0x50dac725, + 0x50f6be31, 0x5112b205, 0x512ea2a3, 0x514a900d, + 0x51667a45, 0x5182614c, 0x519e4524, 0x51ba25cf, + 0x51d60350, 0x51f1dda7, 0x520db4d6, 0x522988e0, + 0x524559c6, 0x52612789, 0x527cf22d, 0x5298b9b1, + 0x52b47e19, 0x52d03f65, 0x52ebfd98, 0x5307b8b4, + 0x532370b9, 0x533f25aa, 0x535ad789, 0x53768656, + 0x53923215, 0x53addac6, 0x53c9806b, 0x53e52306, + 0x5400c298, 0x541c5f24, 0x5437f8ab, 0x54538f2e, + 0x546f22af, 0x548ab330, 0x54a640b3, 0x54c1cb38, + 0x54dd52c2, 0x54f8d753, 0x551458eb, 0x552fd78d, + 0x554b5339, 0x5566cbf3, 0x558241bb, 0x559db492, + 0x55b9247b, 0x55d49177, 0x55effb87, 0x560b62ad, + 0x5626c6eb, 0x56422842, 0x565d86b4, 0x5678e242, + 0x56943aee, 0x56af90b9, 0x56cae3a4, 0x56e633b2, + 0x570180e4, 0x571ccb3b, 0x573812b8, 0x5753575e, + 0x576e992e, 0x5789d829, 0x57a51450, 0x57c04da6, + 0x57db842b, 0x57f6b7e1, 0x5811e8c9, 0x582d16e6, + 0x58484238, 0x58636ac0, 0x587e9081, 0x5899b37c, + 0x58b4d3b1, 0x58cff123, 0x58eb0bd3, 0x590623c2, + 0x592138f2, 0x593c4b63, 0x59575b19, 0x59726812, + 0x598d7253, 0x59a879da, 0x59c37eab, 0x59de80c6, + 0x59f9802d, 0x5a147ce0, 0x5a2f76e2, 0x5a4a6e34, + 0x5a6562d6, 0x5a8054cb, 0x5a9b4414, 0x5ab630b2, + 0x5ad11aa6, 0x5aec01f1, 0x5b06e696, 0x5b21c895, + 0x5b3ca7ef, 0x5b5784a6, 0x5b725ebc, 0x5b8d3631, + 0x5ba80b06, 0x5bc2dd3e, 0x5bddacd9, 0x5bf879d8, + 0x5c13443d, 0x5c2e0c09, 0x5c48d13e, 0x5c6393dc, + 0x5c7e53e5, 0x5c99115a, 0x5cb3cc3c, 0x5cce848d, + 0x5ce93a4e, 0x5d03ed80, 0x5d1e9e24, 0x5d394c3b, + 0x5d53f7c7, 0x5d6ea0c9, 0x5d894742, 0x5da3eb33, + 0x5dbe8c9e, 0x5dd92b84, 0x5df3c7e5, 0x5e0e61c3, + 0x5e28f920, 0x5e438dfc, 0x5e5e2059, 0x5e78b037, + 0x5e933d99, 0x5eadc87e, 0x5ec850e9, 0x5ee2d6da, + 0x5efd5a53, 0x5f17db54, 0x5f3259e0, 0x5f4cd5f6, + 0x5f674f99, 0x5f81c6c8, 0x5f9c3b87, 0x5fb6add4, + 0x5fd11db3, 0x5feb8b23, 0x6005f626, 0x60205ebd, + 0x603ac4e9, 0x605528ac, 0x606f8a05, 0x6089e8f7, + 0x60a44583, 0x60be9fa9, 0x60d8f76b, 0x60f34cca, + 0x610d9fc7, 0x6127f062, 0x61423e9e, 0x615c8a7a, + 0x6176d3f9, 0x61911b1b, 0x61ab5fe1, 0x61c5a24d, + 0x61dfe25f, 0x61fa2018, 0x62145b7a, 0x622e9485, + 0x6248cb3b, 0x6262ff9d, 0x627d31ab, 0x62976167, + 0x62b18ed1, 0x62cbb9eb, 0x62e5e2b6, 0x63000933, + 0x631a2d62, 0x63344f45, 0x634e6edd, 0x63688c2b, + 0x6382a730, 0x639cbfec, 0x63b6d661, 0x63d0ea90, + 0x63eafc7a, 0x64050c1f, 0x641f1982, 0x643924a2, + 0x64532d80, 0x646d341f, 0x6487387e, 0x64a13a9e, + 0x64bb3a81, 0x64d53828, 0x64ef3393, 0x65092cc4, + 0x652323bb, 0x653d1879, 0x65570b00, 0x6570fb50, + 0x658ae96b, 0x65a4d550, 0x65bebf01, 0x65d8a680, + 0x65f28bcc, 0x660c6ee8, 0x66264fd3, 0x66402e8f, + 0x665a0b1c, 0x6673e57d, 0x668dbdb0, 0x66a793b8, + 0x66c16795, 0x66db3949, 0x66f508d4, 0x670ed636, + 0x6728a172, 0x67426a87, 0x675c3177, 0x6775f643, + 0x678fb8eb, 0x67a97971, 0x67c337d5, 0x67dcf418, + 0x67f6ae3b, 0x6810663f, 0x682a1c25, 0x6843cfed, + 0x685d8199, 0x68773129, 0x6890de9f, 0x68aa89fa, + 0x68c4333d, 0x68ddda67, 0x68f77f7a, 0x69112277, + 0x692ac35e, 0x69446230, 0x695dfeee, 0x6977999a, + 0x69913232, 0x69aac8ba, 0x69c45d31, 0x69ddef98, + 0x69f77ff0, 0x6a110e3a, 0x6a2a9a77, 0x6a4424a8, + 0x6a5daccc, 0x6a7732e6, 0x6a90b6f6, 0x6aaa38fd, + 0x6ac3b8fb, 0x6add36f2, 0x6af6b2e2, 0x6b102ccd, + 0x6b29a4b2, 0x6b431a92, 0x6b5c8e6f, 0x6b76004a, + 0x6b8f7022, 0x6ba8ddf9, 0x6bc249d0, 0x6bdbb3a7, + 0x6bf51b80, 0x6c0e815a, 0x6c27e537, 0x6c414718, + 0x6c5aa6fd, 0x6c7404e7, 0x6c8d60d7, 0x6ca6bace, + 0x6cc012cc, 0x6cd968d2, 0x6cf2bce1, 0x6d0c0ef9, + 0x6d255f1d, 0x6d3ead4b, 0x6d57f985, 0x6d7143cc, + 0x6d8a8c21, 0x6da3d283, 0x6dbd16f5, 0x6dd65976, + 0x6def9a08, 0x6e08d8ab, 0x6e221560, 0x6e3b5027, + 0x6e548902, 0x6e6dbff1, 0x6e86f4f5, 0x6ea0280e, + 0x6eb9593e, 0x6ed28885, 0x6eebb5e3, 0x6f04e15a, + 0x6f1e0aea, 0x6f373294, 0x6f505859, 0x6f697c39, + 0x6f829e35, 0x6f9bbe4e, 0x6fb4dc85, 0x6fcdf8d9, + 0x6fe7134d, 0x70002be0, 0x70194293, 0x70325767, + 0x704b6a5d, 0x70647b76, 0x707d8ab1, 0x70969811, + 0x70afa394, 0x70c8ad3d, 0x70e1b50c, 0x70fabb01, + 0x7113bf1d, 0x712cc161, 0x7145c1ce, 0x715ec064, + 0x7177bd24, 0x7190b80f, 0x71a9b124, 0x71c2a866, + 0x71db9dd4, 0x71f49170, 0x720d8339, 0x72267331, + 0x723f6159, 0x72584db0, 0x72713838, 0x728a20f1, + 0x72a307db, 0x72bbecf9, 0x72d4d049, 0x72edb1ce, + 0x73069187, 0x731f6f75, 0x73384b98, 0x735125f3, + 0x7369fe84, 0x7382d54d, 0x739baa4e, 0x73b47d89, + 0x73cd4efd, 0x73e61eab, 0x73feec94, 0x7417b8b8, + 0x74308319, 0x74494bb6, 0x74621291, 0x747ad7aa, + 0x74939b02, 0x74ac5c98, 0x74c51c6f, 0x74ddda86, + 0x74f696de, 0x750f5178, 0x75280a54, 0x7540c174, + 0x755976d7, 0x75722a7e, 0x758adc69, 0x75a38c9b, + 0x75bc3b12, 0x75d4e7cf, 0x75ed92d4, 0x76063c21, + 0x761ee3b6, 0x76378994, 0x76502dbc, 0x7668d02e, + 0x768170eb, 0x769a0ff3, 0x76b2ad47, 0x76cb48e7, + 0x76e3e2d5, 0x76fc7b10, 0x7715119a, 0x772da673, + 0x7746399b, 0x775ecb13, 0x77775adc, 0x778fe8f6, + 0x77a87561, 0x77c1001f, 0x77d98930, 0x77f21095, + 0x780a964d, 0x78231a5b, 0x783b9cbd, 0x78541d75, + 0x786c9c84, 0x788519e9, 0x789d95a6, 0x78b60fbb, + 0x78ce8828, 0x78e6feef, 0x78ff740f, 0x7917e78a, + 0x7930595f, 0x7948c990, 0x7961381d, 0x7979a506, + 0x7992104c, 0x79aa79f0, 0x79c2e1f1, 0x79db4852, + 0x79f3ad11, 0x7a0c1031, 0x7a2471b0, 0x7a3cd191, + 0x7a552fd3, 0x7a6d8c76, 0x7a85e77d, 0x7a9e40e6, + 0x7ab698b2, 0x7aceeee3, 0x7ae74378, 0x7aff9673, + 0x7b17e7d2, 0x7b303799, 0x7b4885c5, 0x7b60d259, + 0x7b791d55, 0x7b9166b9, 0x7ba9ae86, 0x7bc1f4bc, + 0x7bda395c, 0x7bf27c66, 0x7c0abddb, 0x7c22fdbb, + 0x7c3b3c07, 0x7c5378c0, 0x7c6bb3e5, 0x7c83ed78, + 0x7c9c2579, 0x7cb45be9, 0x7ccc90c7, 0x7ce4c414, + 0x7cfcf5d2, 0x7d152600, 0x7d2d549f, 0x7d4581b0, + 0x7d5dad32, 0x7d75d727, 0x7d8dff8f, 0x7da6266a, + 0x7dbe4bba, 0x7dd66f7d, 0x7dee91b6, 0x7e06b264, + 0x7e1ed188, 0x7e36ef22, 0x7e4f0b34, 0x7e6725bd, + 0x7e7f3ebd, 0x7e975636, 0x7eaf6c28, 0x7ec78093, + 0x7edf9378, 0x7ef7a4d7, 0x7f0fb4b1, 0x7f27c307, + 0x7f3fcfd8, 0x7f57db25, 0x7f6fe4ef, 0x7f87ed36, 0x7f9ff3fb, 0x7fb7f93e, 0x7fcffcff, 0x7fe7ff40 }; const Word32 mTab_4_3[512]={ - 0x32cbfd4a, 0x32eddd70, 0x330fc339, 0x3331aea3, - 0x33539fac, 0x33759652, 0x33979294, 0x33b99470, - 0x33db9be4, 0x33fda8ed, 0x341fbb8b, 0x3441d3bb, - 0x3463f17c, 0x348614cc, 0x34a83da8, 0x34ca6c10, - 0x34eca001, 0x350ed979, 0x35311877, 0x35535cfa, - 0x3575a6fe, 0x3597f683, 0x35ba4b87, 0x35dca607, - 0x35ff0603, 0x36216b78, 0x3643d665, 0x366646c7, - 0x3688bc9e, 0x36ab37e8, 0x36cdb8a2, 0x36f03ecb, - 0x3712ca62, 0x37355b64, 0x3757f1d1, 0x377a8da5, - 0x379d2ee0, 0x37bfd580, 0x37e28184, 0x380532e8, - 0x3827e9ad, 0x384aa5d0, 0x386d674f, 0x38902e2a, - 0x38b2fa5d, 0x38d5cbe9, 0x38f8a2ca, 0x391b7eff, - 0x393e6088, 0x39614761, 0x3984338a, 0x39a72501, - 0x39ca1bc4, 0x39ed17d1, 0x3a101928, 0x3a331fc6, - 0x3a562baa, 0x3a793cd2, 0x3a9c533d, 0x3abf6ee9, - 0x3ae28fd5, 0x3b05b5ff, 0x3b28e165, 0x3b4c1206, - 0x3b6f47e0, 0x3b9282f2, 0x3bb5c33a, 0x3bd908b7, - 0x3bfc5368, 0x3c1fa349, 0x3c42f85b, 0x3c66529c, - 0x3c89b209, 0x3cad16a2, 0x3cd08065, 0x3cf3ef51, - 0x3d176364, 0x3d3adc9c, 0x3d5e5af8, 0x3d81de77, - 0x3da56717, 0x3dc8f4d6, 0x3dec87b4, 0x3e101fae, - 0x3e33bcc3, 0x3e575ef2, 0x3e7b063a, 0x3e9eb298, - 0x3ec2640c, 0x3ee61a93, 0x3f09d62d, 0x3f2d96d8, - 0x3f515c93, 0x3f75275b, 0x3f98f731, 0x3fbccc11, - 0x3fe0a5fc, 0x400484ef, 0x402868ea, 0x404c51e9, - 0x40703fee, 0x409432f5, 0x40b82afd, 0x40dc2806, - 0x41002a0d, 0x41243111, 0x41483d12, 0x416c4e0d, - 0x41906401, 0x41b47eed, 0x41d89ecf, 0x41fcc3a7, - 0x4220ed72, 0x42451c30, 0x42694fde, 0x428d887d, - 0x42b1c609, 0x42d60883, 0x42fa4fe8, 0x431e9c37, - 0x4342ed70, 0x43674390, 0x438b9e96, 0x43affe82, - 0x43d46351, 0x43f8cd03, 0x441d3b95, 0x4441af08, - 0x44662758, 0x448aa487, 0x44af2690, 0x44d3ad75, - 0x44f83933, 0x451cc9c8, 0x45415f35, 0x4565f977, - 0x458a988d, 0x45af3c76, 0x45d3e531, 0x45f892bc, - 0x461d4516, 0x4641fc3e, 0x4666b832, 0x468b78f2, - 0x46b03e7c, 0x46d508cf, 0x46f9d7e9, 0x471eabca, - 0x47438470, 0x476861d9, 0x478d4406, 0x47b22af3, - 0x47d716a1, 0x47fc070e, 0x4820fc39, 0x4845f620, - 0x486af4c3, 0x488ff820, 0x48b50035, 0x48da0d03, - 0x48ff1e87, 0x492434c0, 0x49494fad, 0x496e6f4d, - 0x4993939f, 0x49b8bca2, 0x49ddea54, 0x4a031cb4, - 0x4a2853c1, 0x4a4d8f7a, 0x4a72cfde, 0x4a9814eb, - 0x4abd5ea1, 0x4ae2acfd, 0x4b080000, 0x4b2d57a8, - 0x4b52b3f3, 0x4b7814e1, 0x4b9d7a70, 0x4bc2e49f, - 0x4be8536e, 0x4c0dc6db, 0x4c333ee4, 0x4c58bb89, - 0x4c7e3cc9, 0x4ca3c2a2, 0x4cc94d14, 0x4ceedc1c, - 0x4d146fbb, 0x4d3a07ef, 0x4d5fa4b6, 0x4d854611, - 0x4daaebfd, 0x4dd09679, 0x4df64585, 0x4e1bf91f, - 0x4e41b146, 0x4e676dfa, 0x4e8d2f38, 0x4eb2f501, - 0x4ed8bf52, 0x4efe8e2b, 0x4f24618a, 0x4f4a3970, - 0x4f7015d9, 0x4f95f6c6, 0x4fbbdc36, 0x4fe1c626, - 0x5007b497, 0x502da787, 0x50539ef5, 0x50799ae1, - 0x509f9b48, 0x50c5a02a, 0x50eba985, 0x5111b75a, - 0x5137c9a6, 0x515de069, 0x5183fba2, 0x51aa1b4f, - 0x51d03f70, 0x51f66803, 0x521c9508, 0x5242c67d, - 0x5268fc62, 0x528f36b5, 0x52b57575, 0x52dbb8a2, - 0x5302003a, 0x53284c3c, 0x534e9ca8, 0x5374f17c, - 0x539b4ab7, 0x53c1a858, 0x53e80a5f, 0x540e70ca, - 0x5434db98, 0x545b4ac8, 0x5481be5a, 0x54a8364b, - 0x54ceb29c, 0x54f5334c, 0x551bb858, 0x554241c1, - 0x5568cf85, 0x558f61a3, 0x55b5f81b, 0x55dc92eb, - 0x56033212, 0x5629d590, 0x56507d63, 0x5677298a, - 0x569dda05, 0x56c48ed3, 0x56eb47f2, 0x57120562, - 0x5738c721, 0x575f8d2f, 0x5786578a, 0x57ad2633, - 0x57d3f927, 0x57fad066, 0x5821abef, 0x58488bc0, - 0x586f6fda, 0x5896583b, 0x58bd44e2, 0x58e435ce, - 0x590b2aff, 0x59322473, 0x59592229, 0x59802420, - 0x59a72a59, 0x59ce34d0, 0x59f54387, 0x5a1c567b, - 0x5a436dac, 0x5a6a8919, 0x5a91a8c1, 0x5ab8cca3, - 0x5adff4be, 0x5b072111, 0x5b2e519c, 0x5b55865e, - 0x5b7cbf54, 0x5ba3fc80, 0x5bcb3ddf, 0x5bf28371, - 0x5c19cd35, 0x5c411b2a, 0x5c686d4f, 0x5c8fc3a4, - 0x5cb71e27, 0x5cde7cd7, 0x5d05dfb4, 0x5d2d46bd, - 0x5d54b1f0, 0x5d7c214e, 0x5da394d4, 0x5dcb0c83, - 0x5df28859, 0x5e1a0856, 0x5e418c78, 0x5e6914be, - 0x5e90a129, 0x5eb831b7, 0x5edfc667, 0x5f075f38, - 0x5f2efc29, 0x5f569d3a, 0x5f7e426a, 0x5fa5ebb7, - 0x5fcd9921, 0x5ff54aa8, 0x601d004a, 0x6044ba06, - 0x606c77dc, 0x609439ca, 0x60bbffd0, 0x60e3c9ee, - 0x610b9821, 0x61336a6a, 0x615b40c8, 0x61831b39, - 0x61aaf9bd, 0x61d2dc53, 0x61fac2fa, 0x6222adb2, - 0x624a9c79, 0x62728f4f, 0x629a8633, 0x62c28123, - 0x62ea8020, 0x63128329, 0x633a8a3c, 0x63629559, - 0x638aa47f, 0x63b2b7ad, 0x63dacee2, 0x6402ea1e, - 0x642b0960, 0x64532ca6, 0x647b53f1, 0x64a37f3f, - 0x64cbae8f, 0x64f3e1e2, 0x651c1935, 0x65445488, - 0x656c93db, 0x6594d72c, 0x65bd1e7b, 0x65e569c7, - 0x660db90f, 0x66360c53, 0x665e6391, 0x6686bec9, - 0x66af1dfa, 0x66d78123, 0x66ffe844, 0x6728535b, - 0x6750c268, 0x6779356b, 0x67a1ac62, 0x67ca274c, - 0x67f2a629, 0x681b28f9, 0x6843afb9, 0x686c3a6a, - 0x6894c90b, 0x68bd5b9b, 0x68e5f219, 0x690e8c84, - 0x69372add, 0x695fcd21, 0x69887350, 0x69b11d6a, - 0x69d9cb6d, 0x6a027d5a, 0x6a2b332f, 0x6a53eceb, - 0x6a7caa8d, 0x6aa56c16, 0x6ace3184, 0x6af6fad6, - 0x6b1fc80c, 0x6b489925, 0x6b716e20, 0x6b9a46fd, - 0x6bc323bb, 0x6bec0458, 0x6c14e8d5, 0x6c3dd130, - 0x6c66bd69, 0x6c8fad80, 0x6cb8a172, 0x6ce19940, - 0x6d0a94e9, 0x6d33946d, 0x6d5c97ca, 0x6d859eff, - 0x6daeaa0d, 0x6dd7b8f1, 0x6e00cbad, 0x6e29e23e, - 0x6e52fca4, 0x6e7c1adf, 0x6ea53cee, 0x6ece62cf, - 0x6ef78c83, 0x6f20ba09, 0x6f49eb5f, 0x6f732085, - 0x6f9c597b, 0x6fc59640, 0x6feed6d3, 0x70181b33, - 0x70416360, 0x706aaf59, 0x7093ff1d, 0x70bd52ab, - 0x70e6aa04, 0x71100525, 0x7139640f, 0x7162c6c1, - 0x718c2d3a, 0x71b5977a, 0x71df057f, 0x72087749, - 0x7231ecd8, 0x725b662a, 0x7284e33f, 0x72ae6417, - 0x72d7e8b0, 0x7301710a, 0x732afd24, 0x73548cfe, - 0x737e2097, 0x73a7b7ee, 0x73d15303, 0x73faf1d5, - 0x74249462, 0x744e3aac, 0x7477e4b0, 0x74a1926e, - 0x74cb43e6, 0x74f4f917, 0x751eb201, 0x75486ea1, - 0x75722ef9, 0x759bf307, 0x75c5baca, 0x75ef8642, - 0x7619556f, 0x7643284f, 0x766cfee2, 0x7696d928, - 0x76c0b71f, 0x76ea98c7, 0x77147e20, 0x773e6728, - 0x776853df, 0x77924445, 0x77bc3858, 0x77e63019, - 0x78102b85, 0x783a2a9e, 0x78642d62, 0x788e33d1, - 0x78b83de9, 0x78e24bab, 0x790c5d15, 0x79367228, - 0x79608ae1, 0x798aa742, 0x79b4c748, 0x79deeaf4, - 0x7a091245, 0x7a333d3a, 0x7a5d6bd2, 0x7a879e0e, - 0x7ab1d3ec, 0x7adc0d6b, 0x7b064a8c, 0x7b308b4d, - 0x7b5acfae, 0x7b8517ae, 0x7baf634c, 0x7bd9b289, - 0x7c040563, 0x7c2e5bda, 0x7c58b5ec, 0x7c83139b, - 0x7cad74e4, 0x7cd7d9c7, 0x7d024244, 0x7d2cae5a, - 0x7d571e09, 0x7d81914f, 0x7dac082d, 0x7dd682a1, - 0x7e0100ac, 0x7e2b824b, 0x7e560780, 0x7e809048, - 0x7eab1ca5, 0x7ed5ac94, 0x7f004015, 0x7f2ad729, + 0x32cbfd4a, 0x32eddd70, 0x330fc339, 0x3331aea3, + 0x33539fac, 0x33759652, 0x33979294, 0x33b99470, + 0x33db9be4, 0x33fda8ed, 0x341fbb8b, 0x3441d3bb, + 0x3463f17c, 0x348614cc, 0x34a83da8, 0x34ca6c10, + 0x34eca001, 0x350ed979, 0x35311877, 0x35535cfa, + 0x3575a6fe, 0x3597f683, 0x35ba4b87, 0x35dca607, + 0x35ff0603, 0x36216b78, 0x3643d665, 0x366646c7, + 0x3688bc9e, 0x36ab37e8, 0x36cdb8a2, 0x36f03ecb, + 0x3712ca62, 0x37355b64, 0x3757f1d1, 0x377a8da5, + 0x379d2ee0, 0x37bfd580, 0x37e28184, 0x380532e8, + 0x3827e9ad, 0x384aa5d0, 0x386d674f, 0x38902e2a, + 0x38b2fa5d, 0x38d5cbe9, 0x38f8a2ca, 0x391b7eff, + 0x393e6088, 0x39614761, 0x3984338a, 0x39a72501, + 0x39ca1bc4, 0x39ed17d1, 0x3a101928, 0x3a331fc6, + 0x3a562baa, 0x3a793cd2, 0x3a9c533d, 0x3abf6ee9, + 0x3ae28fd5, 0x3b05b5ff, 0x3b28e165, 0x3b4c1206, + 0x3b6f47e0, 0x3b9282f2, 0x3bb5c33a, 0x3bd908b7, + 0x3bfc5368, 0x3c1fa349, 0x3c42f85b, 0x3c66529c, + 0x3c89b209, 0x3cad16a2, 0x3cd08065, 0x3cf3ef51, + 0x3d176364, 0x3d3adc9c, 0x3d5e5af8, 0x3d81de77, + 0x3da56717, 0x3dc8f4d6, 0x3dec87b4, 0x3e101fae, + 0x3e33bcc3, 0x3e575ef2, 0x3e7b063a, 0x3e9eb298, + 0x3ec2640c, 0x3ee61a93, 0x3f09d62d, 0x3f2d96d8, + 0x3f515c93, 0x3f75275b, 0x3f98f731, 0x3fbccc11, + 0x3fe0a5fc, 0x400484ef, 0x402868ea, 0x404c51e9, + 0x40703fee, 0x409432f5, 0x40b82afd, 0x40dc2806, + 0x41002a0d, 0x41243111, 0x41483d12, 0x416c4e0d, + 0x41906401, 0x41b47eed, 0x41d89ecf, 0x41fcc3a7, + 0x4220ed72, 0x42451c30, 0x42694fde, 0x428d887d, + 0x42b1c609, 0x42d60883, 0x42fa4fe8, 0x431e9c37, + 0x4342ed70, 0x43674390, 0x438b9e96, 0x43affe82, + 0x43d46351, 0x43f8cd03, 0x441d3b95, 0x4441af08, + 0x44662758, 0x448aa487, 0x44af2690, 0x44d3ad75, + 0x44f83933, 0x451cc9c8, 0x45415f35, 0x4565f977, + 0x458a988d, 0x45af3c76, 0x45d3e531, 0x45f892bc, + 0x461d4516, 0x4641fc3e, 0x4666b832, 0x468b78f2, + 0x46b03e7c, 0x46d508cf, 0x46f9d7e9, 0x471eabca, + 0x47438470, 0x476861d9, 0x478d4406, 0x47b22af3, + 0x47d716a1, 0x47fc070e, 0x4820fc39, 0x4845f620, + 0x486af4c3, 0x488ff820, 0x48b50035, 0x48da0d03, + 0x48ff1e87, 0x492434c0, 0x49494fad, 0x496e6f4d, + 0x4993939f, 0x49b8bca2, 0x49ddea54, 0x4a031cb4, + 0x4a2853c1, 0x4a4d8f7a, 0x4a72cfde, 0x4a9814eb, + 0x4abd5ea1, 0x4ae2acfd, 0x4b080000, 0x4b2d57a8, + 0x4b52b3f3, 0x4b7814e1, 0x4b9d7a70, 0x4bc2e49f, + 0x4be8536e, 0x4c0dc6db, 0x4c333ee4, 0x4c58bb89, + 0x4c7e3cc9, 0x4ca3c2a2, 0x4cc94d14, 0x4ceedc1c, + 0x4d146fbb, 0x4d3a07ef, 0x4d5fa4b6, 0x4d854611, + 0x4daaebfd, 0x4dd09679, 0x4df64585, 0x4e1bf91f, + 0x4e41b146, 0x4e676dfa, 0x4e8d2f38, 0x4eb2f501, + 0x4ed8bf52, 0x4efe8e2b, 0x4f24618a, 0x4f4a3970, + 0x4f7015d9, 0x4f95f6c6, 0x4fbbdc36, 0x4fe1c626, + 0x5007b497, 0x502da787, 0x50539ef5, 0x50799ae1, + 0x509f9b48, 0x50c5a02a, 0x50eba985, 0x5111b75a, + 0x5137c9a6, 0x515de069, 0x5183fba2, 0x51aa1b4f, + 0x51d03f70, 0x51f66803, 0x521c9508, 0x5242c67d, + 0x5268fc62, 0x528f36b5, 0x52b57575, 0x52dbb8a2, + 0x5302003a, 0x53284c3c, 0x534e9ca8, 0x5374f17c, + 0x539b4ab7, 0x53c1a858, 0x53e80a5f, 0x540e70ca, + 0x5434db98, 0x545b4ac8, 0x5481be5a, 0x54a8364b, + 0x54ceb29c, 0x54f5334c, 0x551bb858, 0x554241c1, + 0x5568cf85, 0x558f61a3, 0x55b5f81b, 0x55dc92eb, + 0x56033212, 0x5629d590, 0x56507d63, 0x5677298a, + 0x569dda05, 0x56c48ed3, 0x56eb47f2, 0x57120562, + 0x5738c721, 0x575f8d2f, 0x5786578a, 0x57ad2633, + 0x57d3f927, 0x57fad066, 0x5821abef, 0x58488bc0, + 0x586f6fda, 0x5896583b, 0x58bd44e2, 0x58e435ce, + 0x590b2aff, 0x59322473, 0x59592229, 0x59802420, + 0x59a72a59, 0x59ce34d0, 0x59f54387, 0x5a1c567b, + 0x5a436dac, 0x5a6a8919, 0x5a91a8c1, 0x5ab8cca3, + 0x5adff4be, 0x5b072111, 0x5b2e519c, 0x5b55865e, + 0x5b7cbf54, 0x5ba3fc80, 0x5bcb3ddf, 0x5bf28371, + 0x5c19cd35, 0x5c411b2a, 0x5c686d4f, 0x5c8fc3a4, + 0x5cb71e27, 0x5cde7cd7, 0x5d05dfb4, 0x5d2d46bd, + 0x5d54b1f0, 0x5d7c214e, 0x5da394d4, 0x5dcb0c83, + 0x5df28859, 0x5e1a0856, 0x5e418c78, 0x5e6914be, + 0x5e90a129, 0x5eb831b7, 0x5edfc667, 0x5f075f38, + 0x5f2efc29, 0x5f569d3a, 0x5f7e426a, 0x5fa5ebb7, + 0x5fcd9921, 0x5ff54aa8, 0x601d004a, 0x6044ba06, + 0x606c77dc, 0x609439ca, 0x60bbffd0, 0x60e3c9ee, + 0x610b9821, 0x61336a6a, 0x615b40c8, 0x61831b39, + 0x61aaf9bd, 0x61d2dc53, 0x61fac2fa, 0x6222adb2, + 0x624a9c79, 0x62728f4f, 0x629a8633, 0x62c28123, + 0x62ea8020, 0x63128329, 0x633a8a3c, 0x63629559, + 0x638aa47f, 0x63b2b7ad, 0x63dacee2, 0x6402ea1e, + 0x642b0960, 0x64532ca6, 0x647b53f1, 0x64a37f3f, + 0x64cbae8f, 0x64f3e1e2, 0x651c1935, 0x65445488, + 0x656c93db, 0x6594d72c, 0x65bd1e7b, 0x65e569c7, + 0x660db90f, 0x66360c53, 0x665e6391, 0x6686bec9, + 0x66af1dfa, 0x66d78123, 0x66ffe844, 0x6728535b, + 0x6750c268, 0x6779356b, 0x67a1ac62, 0x67ca274c, + 0x67f2a629, 0x681b28f9, 0x6843afb9, 0x686c3a6a, + 0x6894c90b, 0x68bd5b9b, 0x68e5f219, 0x690e8c84, + 0x69372add, 0x695fcd21, 0x69887350, 0x69b11d6a, + 0x69d9cb6d, 0x6a027d5a, 0x6a2b332f, 0x6a53eceb, + 0x6a7caa8d, 0x6aa56c16, 0x6ace3184, 0x6af6fad6, + 0x6b1fc80c, 0x6b489925, 0x6b716e20, 0x6b9a46fd, + 0x6bc323bb, 0x6bec0458, 0x6c14e8d5, 0x6c3dd130, + 0x6c66bd69, 0x6c8fad80, 0x6cb8a172, 0x6ce19940, + 0x6d0a94e9, 0x6d33946d, 0x6d5c97ca, 0x6d859eff, + 0x6daeaa0d, 0x6dd7b8f1, 0x6e00cbad, 0x6e29e23e, + 0x6e52fca4, 0x6e7c1adf, 0x6ea53cee, 0x6ece62cf, + 0x6ef78c83, 0x6f20ba09, 0x6f49eb5f, 0x6f732085, + 0x6f9c597b, 0x6fc59640, 0x6feed6d3, 0x70181b33, + 0x70416360, 0x706aaf59, 0x7093ff1d, 0x70bd52ab, + 0x70e6aa04, 0x71100525, 0x7139640f, 0x7162c6c1, + 0x718c2d3a, 0x71b5977a, 0x71df057f, 0x72087749, + 0x7231ecd8, 0x725b662a, 0x7284e33f, 0x72ae6417, + 0x72d7e8b0, 0x7301710a, 0x732afd24, 0x73548cfe, + 0x737e2097, 0x73a7b7ee, 0x73d15303, 0x73faf1d5, + 0x74249462, 0x744e3aac, 0x7477e4b0, 0x74a1926e, + 0x74cb43e6, 0x74f4f917, 0x751eb201, 0x75486ea1, + 0x75722ef9, 0x759bf307, 0x75c5baca, 0x75ef8642, + 0x7619556f, 0x7643284f, 0x766cfee2, 0x7696d928, + 0x76c0b71f, 0x76ea98c7, 0x77147e20, 0x773e6728, + 0x776853df, 0x77924445, 0x77bc3858, 0x77e63019, + 0x78102b85, 0x783a2a9e, 0x78642d62, 0x788e33d1, + 0x78b83de9, 0x78e24bab, 0x790c5d15, 0x79367228, + 0x79608ae1, 0x798aa742, 0x79b4c748, 0x79deeaf4, + 0x7a091245, 0x7a333d3a, 0x7a5d6bd2, 0x7a879e0e, + 0x7ab1d3ec, 0x7adc0d6b, 0x7b064a8c, 0x7b308b4d, + 0x7b5acfae, 0x7b8517ae, 0x7baf634c, 0x7bd9b289, + 0x7c040563, 0x7c2e5bda, 0x7c58b5ec, 0x7c83139b, + 0x7cad74e4, 0x7cd7d9c7, 0x7d024244, 0x7d2cae5a, + 0x7d571e09, 0x7d81914f, 0x7dac082d, 0x7dd682a1, + 0x7e0100ac, 0x7e2b824b, 0x7e560780, 0x7e809048, + 0x7eab1ca5, 0x7ed5ac94, 0x7f004015, 0x7f2ad729, 0x7f5571cd, 0x7f801003, 0x7faab1c8, 0x7fd5571d }; const Word32 invSBF[24] = { - 0x3FFD34FC, 0x2D3F8000, 0x24F18C7E, 0x1FFE9A7E, - 0x1C9DF10C, 0x1A1F851A, 0x182FE994, 0x169FC000, - 0x15542AAA, 0x143C31C2, 0x134B1B6C, 0x127920BE, - 0x11BF2FCC, 0x111A749E, 0x1085FC42, 0x0FFFA7BE, - 0x0F855818, 0x0F14EE56, 0x0EAE6A78, 0x0E4EF886, + 0x3FFD34FC, 0x2D3F8000, 0x24F18C7E, 0x1FFE9A7E, + 0x1C9DF10C, 0x1A1F851A, 0x182FE994, 0x169FC000, + 0x15542AAA, 0x143C31C2, 0x134B1B6C, 0x127920BE, + 0x11BF2FCC, 0x111A749E, 0x1085FC42, 0x0FFFA7BE, + 0x0F855818, 0x0F14EE56, 0x0EAE6A78, 0x0E4EF886, 0x0DF69880, 0x0DA49568, 0x0D578542, 0x0D101D0C }; @@ -1353,40 +1353,40 @@ const Word16 pow2tominusNover16[17] = { }; const Word16 sideInfoTabLong[MAX_SFB_LONG + 1] = { - 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, + 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14 }; const Word16 sideInfoTabShort[MAX_SFB_SHORT + 1] = { - 7, 7, 7, 7, 7, 7, 7, 10, 10, + 7, 7, 7, 7, 7, 7, 7, 10, 10, 10, 10, 10, 10, 10, 13, 13 }; Word32 specExpMantTableComb_enc[4][14] = { - {0x40000000, 0x50a28be6, 0x6597fa95, 0x40000000, - 0x50a28be6, 0x6597fa95, 0x40000000, 0x50a28be6, - 0x6597fa95, 0x40000000, 0x50a28be6, 0x6597fa95, - 0x40000000, 0x50a28be6}, - - {0x4c1bf829, 0x5fe4435e, 0x78d0df9c, 0x4c1bf829, - 0x5fe4435e, 0x78d0df9c, 0x4c1bf829, 0x5fe4435e, - 0x78d0df9c, 0x4c1bf829, 0x5fe4435e, 0x78d0df9c, - 0x4c1bf829, 0x5fe4435e}, - - {0x5a82799a, 0x7208f81d, 0x47d66b0f, 0x5a82799a, - 0x7208f81d, 0x47d66b0f, 0x5a82799a, 0x7208f81d, - 0x47d66b0f, 0x5a82799a, 0x7208f81d, 0x47d66b0f, - 0x5a82799a, 0x7208f81d}, - - {0x6ba27e65, 0x43ce3e4b, 0x556e0424, 0x6ba27e65, - 0x43ce3e4b, 0x556e0424, 0x6ba27e65, 0x43ce3e4b, - 0x556e0424, 0x6ba27e65, 0x43ce3e4b, 0x556e0424, + {0x40000000, 0x50a28be6, 0x6597fa95, 0x40000000, + 0x50a28be6, 0x6597fa95, 0x40000000, 0x50a28be6, + 0x6597fa95, 0x40000000, 0x50a28be6, 0x6597fa95, + 0x40000000, 0x50a28be6}, + + {0x4c1bf829, 0x5fe4435e, 0x78d0df9c, 0x4c1bf829, + 0x5fe4435e, 0x78d0df9c, 0x4c1bf829, 0x5fe4435e, + 0x78d0df9c, 0x4c1bf829, 0x5fe4435e, 0x78d0df9c, + 0x4c1bf829, 0x5fe4435e}, + + {0x5a82799a, 0x7208f81d, 0x47d66b0f, 0x5a82799a, + 0x7208f81d, 0x47d66b0f, 0x5a82799a, 0x7208f81d, + 0x47d66b0f, 0x5a82799a, 0x7208f81d, 0x47d66b0f, + 0x5a82799a, 0x7208f81d}, + + {0x6ba27e65, 0x43ce3e4b, 0x556e0424, 0x6ba27e65, + 0x43ce3e4b, 0x556e0424, 0x6ba27e65, 0x43ce3e4b, + 0x556e0424, 0x6ba27e65, 0x43ce3e4b, 0x556e0424, 0x6ba27e65, 0x43ce3e4b} }; @@ -1417,12 +1417,12 @@ const Word16 quantRecon[4][3] = { }; const int sampRateTab[NUM_SAMPLE_RATES] = { - 96000, 88200, 64000, 48000, 44100, 32000, + 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000 }; -const int rates[8] = { +const int rates[8] = { 160, 240, 320, 400, 480, 560, 640, 0 }; @@ -1507,7 +1507,7 @@ const short sfBandTabLong[325] = { }; /* - these tables are used only for counting and + these tables are used only for counting and are stored in packed format */ const UWord16 huff_ltab1_2[3][3][3][3]= @@ -2260,12 +2260,12 @@ const UWord32 huff_ctabscf[121]= }; const Word32 m_log2_table[INT_BITS] = { - 0x00000000,0x4ae00d00,0x2934f080,0x15c01a3f, - 0x0b31fb80,0x05aeb4e0,0x02dcf2d0,0x016fe50c, + 0x00000000,0x4ae00d00,0x2934f080,0x15c01a3f, + 0x0b31fb80,0x05aeb4e0,0x02dcf2d0,0x016fe50c, 0x00b84e23,0x005c3e10,0x002e24ca,0x001713d6, 0x000b8a47,0x0005c53b,0x0002e2a3,0x00017153, 0x0000b8aa,0x00005c55,0x00002e2b,0x00001715, - 0x00000b8b,0x000005c5,0x000002e3,0x00000171, + 0x00000b8b,0x000005c5,0x000002e3,0x00000171, 0x000000b9,0x0000005c,0x0000002e,0x00000017, 0x0000000c,0x00000006,0x00000003,0x00000001 }; @@ -2344,7 +2344,7 @@ const Word32 tnsCoeff4Borders[16]= }; -const unsigned char bitrevTab[17 + 129] = +const unsigned char bitrevTab[17 + 129] = { /* 64 */ 0x01, 0x08, 0x02, 0x04, 0x03, 0x0c, 0x05, 0x0a, 0x07, 0x0e, 0x0b, 0x0d, 0x00, 0x06, 0x09, 0x0f, diff --git a/media/libstagefright/codecs/aacenc/src/aacenc.c b/media/libstagefright/codecs/aacenc/src/aacenc.c index 975f598..b5e8a9c 100644 --- a/media/libstagefright/codecs/aacenc/src/aacenc.c +++ b/media/libstagefright/codecs/aacenc/src/aacenc.c @@ -48,7 +48,7 @@ VO_U32 VO_API voAACEncInit(VO_HANDLE * phCodec,VO_AUDIO_CODINGTYPE vType, VO_COD interMem = 0; error = 0; - + /* init the memory operator */ if(pUserData == NULL || pUserData->memflag != VO_IMF_USERMEMOPERATOR || pUserData->memData == NULL ) { @@ -113,7 +113,7 @@ VO_U32 VO_API voAACEncInit(VO_HANDLE * phCodec,VO_AUDIO_CODINGTYPE vType, VO_COD { mem_free(pMemOP, hAacEnc, VO_INDEX_ENC_AAC); hAacEnc = NULL; - } + } *phCodec = NULL; return VO_ERR_OUTOF_MEMORY; } @@ -168,9 +168,9 @@ VO_U32 VO_API voAACEncSetInputData(VO_HANDLE hCodec, VO_CODECBUFFER * pInput) { return VO_ERR_INVALID_ARG; } - + hAacEnc = (AAC_ENCODER *)hCodec; - + /* init input pcm buffer and length*/ hAacEnc->inbuf = (short *)pInput->Buffer; hAacEnc->inlen = pInput->Length / sizeof(short); @@ -178,12 +178,12 @@ VO_U32 VO_API voAACEncSetInputData(VO_HANDLE hCodec, VO_CODECBUFFER * pInput) hAacEnc->encbuf = hAacEnc->inbuf; hAacEnc->enclen = hAacEnc->inlen; - + /* rebuild intra pcm buffer and length*/ if(hAacEnc->intlen) { length = min(hAacEnc->config.nChannelsIn*AACENC_BLOCKSIZE - hAacEnc->intlen, hAacEnc->inlen); - hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf + hAacEnc->intlen, + hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf + hAacEnc->intlen, hAacEnc->inbuf, length*sizeof(short)); hAacEnc->encbuf = hAacEnc->intbuf; @@ -192,7 +192,7 @@ VO_U32 VO_API voAACEncSetInputData(VO_HANDLE hCodec, VO_CODECBUFFER * pInput) hAacEnc->inbuf += length; hAacEnc->inlen -= length; } - + return VO_ERR_NONE; } @@ -219,11 +219,11 @@ VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, /* check the input pcm buffer and length*/ if(NULL == hAacEnc->encbuf || hAacEnc->enclen < inbuflen) { - length = hAacEnc->enclen; + length = hAacEnc->enclen; if(hAacEnc->intlen == 0) - { - hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf, - hAacEnc->encbuf, length*sizeof(short)); + { + hAacEnc->voMemop->Copy(VO_INDEX_ENC_AAC, hAacEnc->intbuf, + hAacEnc->encbuf, length*sizeof(short)); hAacEnc->uselength += length*sizeof(short); } else @@ -236,7 +236,7 @@ VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, pOutput->Length = 0; if(pOutInfo) pOutInfo->InputUsed = hAacEnc->uselength; - return VO_ERR_INPUT_BUFFER_SMALL; + return VO_ERR_INPUT_BUFFER_SMALL; } /* check the output aac buffer and length*/ @@ -254,7 +254,7 @@ VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, /* update the input pcm buffer and length*/ if(hAacEnc->intlen) { - length = inbuflen - hAacEnc->intlen; + length = inbuflen - hAacEnc->intlen; hAacEnc->encbuf = hAacEnc->inbuf; hAacEnc->enclen = hAacEnc->inlen; hAacEnc->uselength += length*sizeof(short); @@ -265,7 +265,7 @@ VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, hAacEnc->encbuf = hAacEnc->encbuf + inbuflen; hAacEnc->enclen = hAacEnc->enclen - inbuflen; hAacEnc->uselength += inbuflen*sizeof(short); - } + } /* update the output aac information */ if(pOutInfo) @@ -287,7 +287,7 @@ VO_U32 VO_API voAACEncGetOutputData(VO_HANDLE hCodec, VO_CODECBUFFER * pOutput, VO_U32 VO_API voAACEncUninit(VO_HANDLE hCodec) { AAC_ENCODER* hAacEnc = (AAC_ENCODER*)hCodec; - + if(NULL != hAacEnc) { /* close the aac encoder */ @@ -296,7 +296,7 @@ VO_U32 VO_API voAACEncUninit(VO_HANDLE hCodec) /* free the aac encoder handle*/ mem_free(hAacEnc->voMemop, hAacEnc, VO_INDEX_ENC_AAC); hAacEnc = NULL; - } + } return VO_ERR_NONE; } @@ -319,7 +319,7 @@ VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData) if(NULL == hAacEnc) return VO_ERR_INVALID_ARG; - + switch(uParamID) { case VO_PID_AAC_ENCPARAM: /* init aac encoder parameter*/ @@ -354,11 +354,11 @@ VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData) SampleRateIdx = i; tmp = 441; - if(config.sampleRate%8000 == 0) + if(config.sampleRate%8000 == 0) tmp =480; /* check the bitrate */ if(config.bitRate!=0 && (config.bitRate/config.nChannelsOut < 4000) || - (config.bitRate/config.nChannelsOut > 160000) || + (config.bitRate/config.nChannelsOut > 160000) || (config.bitRate > config.sampleRate*6*config.nChannelsOut)) { config.bitRate = 640*config.sampleRate/tmp*config.nChannelsOut; @@ -385,7 +385,7 @@ VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData) /* init aac encoder core */ ret = AacEncOpen(hAacEnc, config); - if(ret) + if(ret) return VO_ERR_AUDIO_UNSFEATURE; break; case VO_PID_AUDIO_FORMAT: /* init pcm channel and samplerate*/ @@ -426,7 +426,7 @@ VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData) /* update the bitrates */ tmp = 441; - if(config.sampleRate%8000 == 0) + if(config.sampleRate%8000 == 0) tmp =480; config.bitRate = 640*config.sampleRate/tmp*config.nChannelsOut; @@ -449,10 +449,10 @@ VO_U32 VO_API voAACEncSetParam(VO_HANDLE hCodec, VO_S32 uParamID, VO_PTR pData) } config.bandWidth = BandwithCoefTab[i][SampleRateIdx]; - + /* init aac encoder core */ ret = AacEncOpen(hAacEnc, config); - if(ret) + if(ret) return VO_ERR_AUDIO_UNSFEATURE; break; default: @@ -483,7 +483,7 @@ VO_S32 VO_API voGetAACEncAPI(VO_AUDIO_CODECAPI * pDecHandle) { if(pDecHandle == NULL) return VO_ERR_INVALID_ARG; - + pDecHandle->Init = voAACEncInit; pDecHandle->SetInputData = voAACEncSetInputData; pDecHandle->GetOutputData = voAACEncGetOutputData; diff --git a/media/libstagefright/codecs/aacenc/src/aacenc_core.c b/media/libstagefright/codecs/aacenc/src/aacenc_core.c index b69a017..2b3bd48 100644 --- a/media/libstagefright/codecs/aacenc/src/aacenc_core.c +++ b/media/libstagefright/codecs/aacenc/src/aacenc_core.c @@ -43,8 +43,8 @@ void AacInitDefaultConfig(AACENC_CONFIG *config) config->adtsUsed = 1; config->nChannelsIn = 2; config->nChannelsOut = 2; - config->bitRate = 128000; - config->bandWidth = 0; + config->bitRate = 128000; + config->bandWidth = 0; } /******************************************************************************** @@ -63,11 +63,11 @@ Word16 AacEncOpen( AAC_ENCODER* hAacEnc, /* pointer to an encoder Word16 profile = 1; ELEMENT_INFO *elInfo = NULL; - + if (hAacEnc==0) { - error=1; + error=1; } - + if (!error) { hAacEnc->config = config; } @@ -83,7 +83,7 @@ Word16 AacEncOpen( AAC_ENCODER* hAacEnc, /* pointer to an encoder if (!error) { /* use or not tns tool for long and short block */ - Word16 tnsMask=3; + Word16 tnsMask=3; /* init encoder psychoacoustic */ error = psyMainInit(&hAacEnc->psyKernel, @@ -107,10 +107,10 @@ Word16 AacEncOpen( AAC_ENCODER* hAacEnc, /* pointer to an encoder qcInit.elInfo = &hAacEnc->elInfo; qcInit.maxBits = (Word16) (MAXBITS_COEF*elInfo->nChannelsInEl); - qcInit.bitRes = qcInit.maxBits; + qcInit.bitRes = qcInit.maxBits; qcInit.averageBits = (Word16) ((config.bitRate * FRAME_LEN_LONG) / config.sampleRate); - qcInit.padding.paddingRest = config.sampleRate; + qcInit.padding.paddingRest = config.sampleRate; qcInit.meanPe = (Word16) ((10 * FRAME_LEN_LONG * hAacEnc->config.bandWidth) / (config.sampleRate>>1)); @@ -118,17 +118,17 @@ Word16 AacEncOpen( AAC_ENCODER* hAacEnc, /* pointer to an encoder qcInit.maxBitFac = (Word16) ((100 * (MAXBITS_COEF-MINBITS_COEF)* elInfo->nChannelsInEl)/ (qcInit.averageBits?qcInit.averageBits:1)); - qcInit.bitrate = config.bitRate; + qcInit.bitrate = config.bitRate; error = QCInit(&hAacEnc->qcKernel, &qcInit); } /* init bitstream encoder */ if (!error) { - hAacEnc->bseInit.nChannels = elInfo->nChannelsInEl; - hAacEnc->bseInit.bitrate = config.bitRate; - hAacEnc->bseInit.sampleRate = config.sampleRate; - hAacEnc->bseInit.profile = profile; + hAacEnc->bseInit.nChannels = elInfo->nChannelsInEl; + hAacEnc->bseInit.bitrate = config.bitRate; + hAacEnc->bseInit.sampleRate = config.sampleRate; + hAacEnc->bseInit.profile = profile; } return error; @@ -152,14 +152,14 @@ Word16 AacEncEncode(AAC_ENCODER *aacEnc, /*!< an encoder handle */ ELEMENT_INFO *elInfo = &aacEnc->elInfo; Word16 globUsedBits; Word16 ancDataBytes, ancDataBytesLeft; - - ancDataBytes = ancDataBytesLeft = *numAncBytes; + + ancDataBytes = ancDataBytesLeft = *numAncBytes; /* init output aac data buffer and length */ aacEnc->hBitStream = CreateBitBuffer(&aacEnc->bitStream, outBytes, *numOutBytes); /* psychoacoustic process */ - psyMain(aacEnc->config.nChannelsOut, + psyMain(aacEnc->config.nChannelsOut, elInfo, timeSignal, &aacEnc->psyKernel.psyData[elInfo->ChannelIndex[0]], @@ -175,9 +175,9 @@ Word16 AacEncEncode(AAC_ENCODER *aacEnc, /*!< an encoder handle */ AdjustBitrate(&aacEnc->qcKernel, aacEnc->config.bitRate, aacEnc->config.sampleRate); - + /* quantization and coding process */ - QCMain(&aacEnc->qcKernel, + QCMain(&aacEnc->qcKernel, &aacEnc->qcKernel.elementBits, &aacEnc->qcKernel.adjThr.adjThrStateElem, &aacEnc->psyOut.psyOutChannel[elInfo->ChannelIndex[0]], @@ -193,11 +193,11 @@ Word16 AacEncEncode(AAC_ENCODER *aacEnc, /*!< an encoder handle */ &aacEnc->qcOut); /* write bitstream process */ - WriteBitstream(aacEnc->hBitStream, + WriteBitstream(aacEnc->hBitStream, *elInfo, &aacEnc->qcOut, &aacEnc->psyOut, - &globUsedBits, + &globUsedBits, ancBytes, aacEnc->psyKernel.sampleRateIdx); @@ -219,7 +219,7 @@ Word16 AacEncEncode(AAC_ENCODER *aacEnc, /*!< an encoder handle */ **********************************************************************************/ void AacEncClose (AAC_ENCODER* hAacEnc, VO_MEM_OPERATOR *pMemOP) { - if (hAacEnc) { + if (hAacEnc) { QCDelete(&hAacEnc->qcKernel, pMemOP); QCOutDelete(&hAacEnc->qcOut, pMemOP); diff --git a/media/libstagefright/codecs/aacenc/src/adj_thr.c b/media/libstagefright/codecs/aacenc/src/adj_thr.c index 83b43a1..c656f65 100644 --- a/media/libstagefright/codecs/aacenc/src/adj_thr.c +++ b/media/libstagefright/codecs/aacenc/src/adj_thr.c @@ -71,7 +71,7 @@ static void calcThreshExp(Word32 thrExp[MAX_CHANNELS][MAX_GROUPED_SFB], Word32 *pthrExp, *psfbThre; for (ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; - for(sfbGrp = 0; sfbGrp < psyOutChan->sfbCnt; sfbGrp+= psyOutChan->sfbPerGroup) + for(sfbGrp = 0; sfbGrp < psyOutChan->sfbCnt; sfbGrp+= psyOutChan->sfbPerGroup) pthrExp = &(thrExp[ch][sfbGrp]); psfbThre = psyOutChan->sfbThreshold + sfbGrp; for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { @@ -96,21 +96,21 @@ static void adaptMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], Word32 nSfb, avgEn; Word16 log_avgEn = 0; Word32 startRatio_x_avgEn = 0; - + for (ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL* psyOutChan = &psyOutChannel[ch]; /* calc average energy per scalefactor band */ - avgEn = 0; - nSfb = 0; + avgEn = 0; + nSfb = 0; for (sfbOffs=0; sfbOffs<psyOutChan->sfbCnt; sfbOffs+=psyOutChan->sfbPerGroup) { for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { avgEn = L_add(avgEn, psyOutChan->sfbEnergy[sfbOffs+sfb]); nSfb = nSfb + 1; } } - + if (nSfb > 0) { avgEn = avgEn / nSfb; @@ -118,7 +118,7 @@ static void adaptMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], startRatio_x_avgEn = fixmul(msaParam->startRatio, avgEn); } - + /* reduce minSnr requirement by minSnr^minSnrRed dependent on avgEn/sfbEn */ for (sfbOffs=0; sfbOffs<psyOutChan->sfbCnt; sfbOffs+=psyOutChan->sfbPerGroup) { for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { @@ -126,22 +126,22 @@ static void adaptMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], Word16 dbRatio, minSnrRed; Word32 snrRed; Word16 newMinSnr; - + dbRatio = log_avgEn - logSfbEnergy[ch][sfbOffs+sfb]; dbRatio = dbRatio + (dbRatio << 1); minSnrRed = 110 - ((dbRatio + (dbRatio << 1)) >> 2); - minSnrRed = max(minSnrRed, 20); /* 110: (0.375(redOffs)+1)*80, + minSnrRed = max(minSnrRed, 20); /* 110: (0.375(redOffs)+1)*80, 3: 0.00375(redRatioFac)*80 20: 0.25(maxRed) * 80 */ - snrRed = minSnrRed * iLog4((psyOutChan->sfbMinSnr[sfbOffs+sfb] << 16)); - /* + snrRed = minSnrRed * iLog4((psyOutChan->sfbMinSnr[sfbOffs+sfb] << 16)); + /* snrRedI si now scaled by 80 (minSnrRed) and 4 (ffr_iLog4) */ - + newMinSnr = round16(pow2_xy(snrRed,80*4)); - + psyOutChan->sfbMinSnr[sfbOffs+sfb] = min(newMinSnr, minSnrLimit); } } @@ -169,7 +169,7 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], for (ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; - + if (psyOutChan->windowSequence != SHORT_WINDOW) { for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){ psfbSpreadEn = psyOutChan->sfbSpreadedEnergy + sfbGrp; @@ -194,7 +194,7 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], if (ahParam->modifyMinSnr) { for(ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; - + if (psyOutChan->windowSequence != SHORT_WINDOW) threshold = HOLE_THR_LONG; else @@ -204,39 +204,39 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], Word16 *psfbMinSnr = psyOutChan->sfbMinSnr + sfbGrp; for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { Word32 sfbEn, sfbEnm1, sfbEnp1, avgEn; - + if (sfb > 0) sfbEnm1 = psyOutChan->sfbEnergy[sfbGrp+sfb-1]; else sfbEnm1 = psyOutChan->sfbEnergy[sfbGrp]; - + if (sfb < (psyOutChan->maxSfbPerGroup-1)) sfbEnp1 = psyOutChan->sfbEnergy[sfbGrp+sfb+1]; else sfbEnp1 = psyOutChan->sfbEnergy[sfbGrp+sfb]; avgEn = (sfbEnm1 + sfbEnp1) >> 1; - sfbEn = psyOutChan->sfbEnergy[sfbGrp+sfb]; - + sfbEn = psyOutChan->sfbEnergy[sfbGrp+sfb]; + if (sfbEn > avgEn && avgEn > 0) { Word32 tmpMinSnr; shift = norm_l(sfbEn); tmpMinSnr = Div_32(L_mpy_ls(avgEn, minSnrLimit) << shift, sfbEn << shift ); - tmpMinSnr = max(tmpMinSnr, HOLE_THR_LONG); + tmpMinSnr = max(tmpMinSnr, HOLE_THR_LONG); tmpMinSnr = max(tmpMinSnr, threshold); *psfbMinSnr = min(*psfbMinSnr, tmpMinSnr); } /* valley ? */ - + if ((sfbEn < (avgEn >> 1)) && (sfbEn > 0)) { Word32 tmpMinSnr; - Word32 minSnrEn = L_mpy_wx(avgEn, *psfbMinSnr); - + Word32 minSnrEn = L_mpy_wx(avgEn, *psfbMinSnr); + if(minSnrEn < sfbEn) { shift = norm_l(sfbEn); tmpMinSnr = Div_32( minSnrEn << shift, sfbEn<<shift); } else { - tmpMinSnr = MAX_16; + tmpMinSnr = MAX_16; } tmpMinSnr = min(minSnrLimit, tmpMinSnr); @@ -251,7 +251,7 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], /* stereo: adapt the minimum requirements sfbMinSnr of mid and side channels */ - + if (nChannels == 2) { PSY_OUT_CHANNEL *psyOutChanM = &psyOutChannel[0]; PSY_OUT_CHANNEL *psyOutChanS = &psyOutChannel[1]; @@ -260,30 +260,30 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], Word32 sfbEnM = psyOutChanM->sfbEnergy[sfb]; Word32 sfbEnS = psyOutChanS->sfbEnergy[sfb]; Word32 maxSfbEn = max(sfbEnM, sfbEnS); - Word32 maxThr = L_mpy_wx(maxSfbEn, psyOutChanM->sfbMinSnr[sfb]) >> 1; - + Word32 maxThr = L_mpy_wx(maxSfbEn, psyOutChanM->sfbMinSnr[sfb]) >> 1; + if(maxThr >= sfbEnM) { - psyOutChanM->sfbMinSnr[sfb] = MAX_16; + psyOutChanM->sfbMinSnr[sfb] = MAX_16; } else { - shift = norm_l(sfbEnM); - psyOutChanM->sfbMinSnr[sfb] = min(max(psyOutChanM->sfbMinSnr[sfb], + shift = norm_l(sfbEnM); + psyOutChanM->sfbMinSnr[sfb] = min(max(psyOutChanM->sfbMinSnr[sfb], round16(Div_32(maxThr<<shift, sfbEnM << shift))), minSnrLimit); } - + if(maxThr >= sfbEnS) { psyOutChanS->sfbMinSnr[sfb] = MAX_16; } else { shift = norm_l(sfbEnS); - psyOutChanS->sfbMinSnr[sfb] = min(max(psyOutChanS->sfbMinSnr[sfb], + psyOutChanS->sfbMinSnr[sfb] = min(max(psyOutChanS->sfbMinSnr[sfb], round16(Div_32(maxThr << shift, sfbEnS << shift))), minSnrLimit); } - + if (sfbEnM > psyOutChanM->sfbSpreadedEnergy[sfb]) psyOutChanS->sfbSpreadedEnergy[sfb] = L_mpy_ls(sfbEnS, MS_THRSPREAD_COEF); - + if (sfbEnS > psyOutChanS->sfbSpreadedEnergy[sfb]) psyOutChanM->sfbSpreadedEnergy[sfb] = L_mpy_ls(sfbEnM, MS_THRSPREAD_COEF); } @@ -297,7 +297,7 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){ Word16 *pahFlag = ahFlag[ch] + sfbGrp; for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { - + if ((psyOutChan->sfbSpreadedEnergy[sfbGrp+sfb] > psyOutChan->sfbEnergy[sfbGrp+sfb]) || (psyOutChan->sfbEnergy[sfbGrp+sfb] <= psyOutChan->sfbThreshold[sfbGrp+sfb]) || (psyOutChan->sfbMinSnr[sfbGrp+sfb] == MAX_16)) { @@ -308,7 +308,7 @@ static void initAvoidHoleFlag(Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], } } for (sfb=psyOutChan->maxSfbPerGroup; sfb<psyOutChan->sfbPerGroup; sfb++) { - *pahFlag++ = NO_AH; + *pahFlag++ = NO_AH; } } } @@ -331,15 +331,15 @@ static void calcPeNoAH(Word16 *pe, Word16 ch, sfb, sfbGrp; int ipe, iconstPart, inActiveLines; - ipe = 0; - iconstPart = 0; - inActiveLines = 0; + ipe = 0; + iconstPart = 0; + inActiveLines = 0; for(ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; PE_CHANNEL_DATA *peChanData = &peData->peChannelData[ch]; for(sfbGrp = 0;sfbGrp < psyOutChan->sfbCnt;sfbGrp+= psyOutChan->sfbPerGroup){ for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { - + if (ahFlag[ch][sfbGrp+sfb] < AH_ACTIVE) { ipe = ipe + peChanData->sfbPe[sfbGrp+sfb]; iconstPart = iconstPart + peChanData->sfbConstPart[sfbGrp+sfb]; @@ -349,9 +349,9 @@ static void calcPeNoAH(Word16 *pe, } } - *pe = saturate(ipe); - *constPart = saturate(iconstPart); - *nActiveLines = saturate(inActiveLines); + *pe = saturate(ipe); + *constPart = saturate(iconstPart); + *nActiveLines = saturate(inActiveLines); } /******************************************************************************** @@ -367,16 +367,16 @@ static void reduceThresholds(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], const Word32 redVal) { Word32 sfbThrReduced; - Word32 *psfbEn, *psfbThr; + Word32 *psfbEn, *psfbThr; Word16 ch, sfb, sfbGrp; for(ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; for(sfbGrp=0; sfbGrp<psyOutChan->sfbCnt; sfbGrp+=psyOutChan->sfbPerGroup) { - psfbEn = psyOutChan->sfbEnergy + sfbGrp; + psfbEn = psyOutChan->sfbEnergy + sfbGrp; psfbThr = psyOutChan->sfbThreshold + sfbGrp; for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { - + if (*psfbEn > *psfbThr) { /* threshold reduction formula */ Word32 tmp = thrExp[ch][sfbGrp+sfb] + redVal; @@ -384,11 +384,11 @@ static void reduceThresholds(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], sfbThrReduced = fixmul(tmp, tmp); /* avoid holes */ tmp = L_mpy_ls(*psfbEn, psyOutChan->sfbMinSnr[sfbGrp+sfb]); - - if ((sfbThrReduced > tmp) && + + if ((sfbThrReduced > tmp) && (ahFlag[ch][sfbGrp+sfb] != NO_AH)){ sfbThrReduced = max(tmp, *psfbThr); - ahFlag[ch][sfbGrp+sfb] = AH_ACTIVE; + ahFlag[ch][sfbGrp+sfb] = AH_ACTIVE; } *psfbThr = sfbThrReduced; } @@ -426,7 +426,7 @@ static void correctThresh(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], Word32 sfbThrReduced; /* for each sfb calc relative factors for pe changes */ - normFactor = 1; + normFactor = 1; for(ch=0; ch<nChannels; ch++) { psyOutChan = &psyOutChannel[ch]; peChanData = &peData->peChannelData[ch]; @@ -436,22 +436,22 @@ static void correctThresh(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], pahFlag = ahFlag[ch] + sfbGrp; for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { Word32 redThrExp = thrExp[ch][sfbGrp+sfb] + redVal; - + if (((*pahFlag < AH_ACTIVE) || (deltaPe > 0)) && (redThrExp > 0) ) { - + *psfbPeFactors = (*psfbNActiveLines) * (0x7fffffff / redThrExp); normFactor = L_add(normFactor, *psfbPeFactors); } else { - *psfbPeFactors = 0; + *psfbPeFactors = 0; } - psfbPeFactors++; + psfbPeFactors++; pahFlag++; psfbNActiveLines++; } } } - + /* calculate new thresholds */ for(ch=0; ch<nChannels; ch++) { psyOutChan = &psyOutChannel[ch]; @@ -464,7 +464,7 @@ static void correctThresh(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* pe difference for this sfb */ deltaSfbPe = *psfbPeFactors * deltaPe; - /* thr3(n) = thr2(n)*2^deltaSfbPe/b(n) */ + /* thr3(n) = thr2(n)*2^deltaSfbPe/b(n) */ if (*psfbNActiveLines > 0) { /* new threshold */ Word32 thrFactor; @@ -476,7 +476,7 @@ static void correctThresh(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], reduce threshold */ thrFactor = pow2_xy(L_negate(deltaSfbPe), (normFactor* (*psfbNActiveLines))); - + sfbThrReduced = L_mpy_ls(sfbThr, round16(thrFactor)); } else { @@ -484,28 +484,28 @@ static void correctThresh(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], increase threshold */ thrFactor = pow2_xy(deltaSfbPe, (normFactor * (*psfbNActiveLines))); - - + + if(thrFactor > sfbThr) { shift = norm_l(thrFactor); sfbThrReduced = Div_32( sfbThr << shift, thrFactor<<shift ); } else { - sfbThrReduced = MAX_32; + sfbThrReduced = MAX_32; } } - + /* avoid hole */ sfbEn = L_mpy_ls(sfbEn, psyOutChan->sfbMinSnr[sfbGrp+sfb]); - + if ((sfbThrReduced > sfbEn) && (*pahFlag == AH_INACTIVE)) { sfbThrReduced = max(sfbEn, sfbThr); - *pahFlag = AH_ACTIVE; + *pahFlag = AH_ACTIVE; } - psyOutChan->sfbThreshold[sfbGrp+sfb] = sfbThrReduced; + psyOutChan->sfbThreshold[sfbGrp+sfb] = sfbThrReduced; } pahFlag++; psfbNActiveLines++; psfbPeFactors++; @@ -521,8 +521,8 @@ static void correctThresh(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], * description: if the desired pe can not be reached, reduce pe by reducing minSnr * **********************************************************************************/ -static void reduceMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], - PE_DATA *peData, +static void reduceMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], + PE_DATA *peData, Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], const Word16 nChannels, const Word16 desiredPe) @@ -531,9 +531,9 @@ static void reduceMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], Word16 deltaPe; /* start at highest freq down to 0 */ - sfbSubWin = psyOutChannel[0].maxSfbPerGroup; + sfbSubWin = psyOutChannel[0].maxSfbPerGroup; while (peData->pe > desiredPe && sfbSubWin > 0) { - + sfbSubWin = sfbSubWin - 1; /* loop over all subwindows */ for (sfb=sfbSubWin; sfb<psyOutChannel[0].sfbCnt; @@ -541,10 +541,10 @@ static void reduceMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* loop over all channels */ PE_CHANNEL_DATA* peChan = peData->peChannelData; PSY_OUT_CHANNEL* psyOutCh = psyOutChannel; - for (ch=0; ch<nChannels; ch++) { + for (ch=0; ch<nChannels; ch++) { if (ahFlag[ch][sfb] != NO_AH && psyOutCh->sfbMinSnr[sfb] < minSnrLimit) { - psyOutCh->sfbMinSnr[sfb] = minSnrLimit; + psyOutCh->sfbMinSnr[sfb] = minSnrLimit; psyOutCh->sfbThreshold[sfb] = L_mpy_ls(psyOutCh->sfbEnergy[sfb], psyOutCh->sfbMinSnr[sfb]); @@ -552,12 +552,12 @@ static void reduceMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], deltaPe = ((peChan->sfbNLines4[sfb] + (peChan->sfbNLines4[sfb] >> 1)) >> 2) - peChan->sfbPe[sfb]; peData->pe = peData->pe + deltaPe; - peChan->pe = peChan->pe + deltaPe; + peChan->pe = peChan->pe + deltaPe; } peChan += 1; psyOutCh += 1; } /* stop if enough has been saved */ - + if (peData->pe <= desiredPe) break; } @@ -567,13 +567,13 @@ static void reduceMinSnr(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /******************************************************************************** * * function name:allowMoreHoles -* description: if the desired pe can not be reached, some more scalefactor bands +* description: if the desired pe can not be reached, some more scalefactor bands * have to be quantized to zero * **********************************************************************************/ -static void allowMoreHoles(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], +static void allowMoreHoles(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], PSY_OUT_ELEMENT *psyOutElement, - PE_DATA *peData, + PE_DATA *peData, Word16 ahFlag[MAX_CHANNELS][MAX_GROUPED_SFB], const AH_PARAM *ahParam, const Word16 nChannels, @@ -582,46 +582,46 @@ static void allowMoreHoles(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], Word16 ch, sfb; Word16 actPe, shift; - actPe = peData->pe; + actPe = peData->pe; /* for MS allow hole in the channel with less energy */ - + if (nChannels==2 && psyOutChannel[0].windowSequence==psyOutChannel[1].windowSequence) { PSY_OUT_CHANNEL *psyOutChanL = &psyOutChannel[0]; PSY_OUT_CHANNEL *psyOutChanR = &psyOutChannel[1]; for (sfb=0; sfb<psyOutChanL->sfbCnt; sfb++) { Word32 minEn; - + if (psyOutElement->toolsInfo.msMask[sfb]) { /* allow hole in side channel ? */ minEn = L_mpy_ls(psyOutChanL->sfbEnergy[sfb], (minSnrLimit * psyOutChanL->sfbMinSnr[sfb]) >> 16); - + if (ahFlag[1][sfb] != NO_AH && minEn > psyOutChanR->sfbEnergy[sfb]) { - ahFlag[1][sfb] = NO_AH; + ahFlag[1][sfb] = NO_AH; psyOutChanR->sfbThreshold[sfb] = L_add(psyOutChanR->sfbEnergy[sfb], psyOutChanR->sfbEnergy[sfb]); actPe = actPe - peData->peChannelData[1].sfbPe[sfb]; } /* allow hole in mid channel ? */ else { minEn = L_mpy_ls(psyOutChanR->sfbEnergy[sfb], (minSnrLimit * psyOutChanR->sfbMinSnr[sfb]) >> 16); - + if (ahFlag[0][sfb]!= NO_AH && minEn > psyOutChanL->sfbEnergy[sfb]) { - ahFlag[0][sfb] = NO_AH; + ahFlag[0][sfb] = NO_AH; psyOutChanL->sfbThreshold[sfb] = L_add(psyOutChanL->sfbEnergy[sfb], psyOutChanL->sfbEnergy[sfb]); actPe = actPe - peData->peChannelData[0].sfbPe[sfb]; } } - + if (actPe < desiredPe) break; } } } - /* subsequently erase bands */ + /* subsequently erase bands */ if (actPe > desiredPe) { Word16 startSfb[2]; Word32 avgEn, minEn; @@ -634,20 +634,20 @@ static void allowMoreHoles(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* do not go below startSfb */ for (ch=0; ch<nChannels; ch++) { - + if (psyOutChannel[ch].windowSequence != SHORT_WINDOW) startSfb[ch] = ahParam->startSfbL; else startSfb[ch] = ahParam->startSfbS; } - avgEn = 0; - minEn = MAX_32; - ahCnt = 0; + avgEn = 0; + minEn = MAX_32; + ahCnt = 0; for (ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; for (sfb=startSfb[ch]; sfb<psyOutChan->sfbCnt; sfb++) { - + if ((ahFlag[ch][sfb] != NO_AH) && (psyOutChan->sfbEnergy[sfb] > psyOutChan->sfbThreshold[sfb])) { minEn = min(minEn, psyOutChan->sfbEnergy[sfb]); @@ -656,7 +656,7 @@ static void allowMoreHoles(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], } } } - + if(ahCnt) { Word32 iahCnt; shift = norm_l(ahCnt); @@ -674,46 +674,46 @@ static void allowMoreHoles(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* start with lowest energy border at highest sfb */ maxSfb = psyOutChannel[0].sfbCnt - 1; - minSfb = startSfb[0]; - + minSfb = startSfb[0]; + if (nChannels == 2) { maxSfb = max(maxSfb, (psyOutChannel[1].sfbCnt - 1)); minSfb = min(minSfb, startSfb[1]); } - sfb = maxSfb; - enIdx = 0; - done = 0; + sfb = maxSfb; + enIdx = 0; + done = 0; while (!done) { - + for (ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; - + if (sfb>=startSfb[ch] && sfb<psyOutChan->sfbCnt) { /* sfb energy below border ? */ - + if (ahFlag[ch][sfb] != NO_AH && psyOutChan->sfbEnergy[sfb] < en[enIdx]){ /* allow hole */ - ahFlag[ch][sfb] = NO_AH; + ahFlag[ch][sfb] = NO_AH; psyOutChan->sfbThreshold[sfb] = L_add(psyOutChan->sfbEnergy[sfb], psyOutChan->sfbEnergy[sfb]); actPe = actPe - peData->peChannelData[ch].sfbPe[sfb]; } - + if (actPe < desiredPe) { - done = 1; + done = 1; break; } } } sfb = sfb - 1; - + if (sfb < minSfb) { /* restart with next energy border */ - sfb = maxSfb; + sfb = maxSfb; enIdx = enIdx + 1; - + if (enIdx - 4 >= 0) - done = 1; + done = 1; } } } @@ -748,13 +748,13 @@ static void adaptThresholdsToPe(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], initAvoidHoleFlag(peData->ahFlag, psyOutChannel, psyOutElement, nChannels, ahParam); - noRedPe = peData->pe; - constPart = peData->constPart; - nActiveLines = peData->nActiveLines; + noRedPe = peData->pe; + constPart = peData->constPart; + nActiveLines = peData->nActiveLines; /* first guess of reduction value t^0.25 = 2^((a-pen)/4*b) */ avgThrExp = pow2_xy((constPart - noRedPe), (nActiveLines << 2)); - + /* r1 = 2^((a-per)/4*b) - t^0.25 */ redVal = pow2_xy((constPart - desiredPe), (nActiveLines << 2)) - avgThrExp; @@ -763,40 +763,40 @@ static void adaptThresholdsToPe(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* pe after first guess */ calcSfbPe(peData, psyOutChannel, nChannels); - redPe = peData->pe; + redPe = peData->pe; - iter = 0; + iter = 0; do { /* pe for bands where avoid hole is inactive */ calcPeNoAH(&redPeNoAH, &constPartNoAH, &nActiveLinesNoAH, peData, peData->ahFlag, psyOutChannel, nChannels); desiredPeNoAH = desiredPe -(redPe - redPeNoAH); - + if (desiredPeNoAH < 0) { - desiredPeNoAH = 0; + desiredPeNoAH = 0; } /* second guess */ - + if (nActiveLinesNoAH > 0) { - + avgThrExp = pow2_xy((constPartNoAH - redPeNoAH), (nActiveLinesNoAH << 2)); - + redVal = (redVal + pow2_xy((constPartNoAH - desiredPeNoAH), (nActiveLinesNoAH << 2))) - avgThrExp; - + /* reduce thresholds */ reduceThresholds(psyOutChannel, peData->ahFlag, peData->thrExp, nChannels, redVal); } calcSfbPe(peData, psyOutChannel, nChannels); - redPe = peData->pe; + redPe = peData->pe; iter = iter+1; - + } while ((20 * abs_s(redPe - desiredPe) > desiredPe) && (iter < 2)); - + if ((100 * redPe < 115 * desiredPe)) { correctThresh(psyOutChannel, peData->ahFlag, peData, peData->thrExp, redVal, nChannels, desiredPe - redPe); @@ -863,7 +863,7 @@ static Word16 calcBitSpend(Word16 fillLevel, if(clipHigh-clipLow) bitspend = (minBitSpend + ((maxBitSpend - minBitSpend)*(fillLevel - clipLow) / (clipHigh-clipLow))); - + return (bitspend); } @@ -884,19 +884,19 @@ static void adjustPeMinMax(const Word16 currPe, Word16 minFacHi, maxFacHi, minFacLo, maxFacLo; Word16 diff; Word16 minDiff = extract_l(currPe / 6); - minFacHi = 30; - maxFacHi = 100; - minFacLo = 14; - maxFacLo = 7; + minFacHi = 30; + maxFacHi = 100; + minFacLo = 14; + maxFacLo = 7; diff = currPe - *peMax ; - + if (diff > 0) { *peMin = *peMin + ((diff * minFacHi) / 100); *peMax = *peMax + ((diff * maxFacHi) / 100); } else { diff = *peMin - currPe; - + if (diff > 0) { *peMin = *peMin - ((diff * minFacLo) / 100); *peMax = *peMax - ((diff * maxFacLo) / 100); @@ -906,7 +906,7 @@ static void adjustPeMinMax(const Word16 currPe, } } - + if ((*peMax - *peMin) < minDiff) { Word16 partLo, partHi; @@ -969,7 +969,7 @@ static Word16 bitresCalcBitFac( const Word16 bitresBits, (adjThrChan->peMax - adjThrChan->peMin)); else bitresFac = 0x7fff; - + bitresFac = min(bitresFac, (100-30 + extract_l((100 * bitresBits) / avgBits))); @@ -995,23 +995,23 @@ void AdjThrInit(ADJ_THR_STATE *hAdjThr, /* common for all elements: */ /* parameters for bitres control */ - hAdjThr->bresParamLong.clipSaveLow = 20; - hAdjThr->bresParamLong.clipSaveHigh = 95; - hAdjThr->bresParamLong.minBitSave = -5; - hAdjThr->bresParamLong.maxBitSave = 30; - hAdjThr->bresParamLong.clipSpendLow = 20; - hAdjThr->bresParamLong.clipSpendHigh = 95; - hAdjThr->bresParamLong.minBitSpend = -10; - hAdjThr->bresParamLong.maxBitSpend = 40; - - hAdjThr->bresParamShort.clipSaveLow = 20; - hAdjThr->bresParamShort.clipSaveHigh = 75; - hAdjThr->bresParamShort.minBitSave = 0; - hAdjThr->bresParamShort.maxBitSave = 20; - hAdjThr->bresParamShort.clipSpendLow = 20; - hAdjThr->bresParamShort.clipSpendHigh = 75; - hAdjThr->bresParamShort.minBitSpend = -5; - hAdjThr->bresParamShort.maxBitSpend = 50; + hAdjThr->bresParamLong.clipSaveLow = 20; + hAdjThr->bresParamLong.clipSaveHigh = 95; + hAdjThr->bresParamLong.minBitSave = -5; + hAdjThr->bresParamLong.maxBitSave = 30; + hAdjThr->bresParamLong.clipSpendLow = 20; + hAdjThr->bresParamLong.clipSpendHigh = 95; + hAdjThr->bresParamLong.minBitSpend = -10; + hAdjThr->bresParamLong.maxBitSpend = 40; + + hAdjThr->bresParamShort.clipSaveLow = 20; + hAdjThr->bresParamShort.clipSaveHigh = 75; + hAdjThr->bresParamShort.minBitSave = 0; + hAdjThr->bresParamShort.maxBitSave = 20; + hAdjThr->bresParamShort.clipSpendLow = 20; + hAdjThr->bresParamShort.clipSpendHigh = 75; + hAdjThr->bresParamShort.minBitSpend = -5; + hAdjThr->bresParamShort.maxBitSpend = 50; /* specific for each element: */ @@ -1020,7 +1020,7 @@ void AdjThrInit(ADJ_THR_STATE *hAdjThr, atsElem->peMax = extract_l(((120*meanPe) / 100)); /* additional pe offset to correct pe2bits for low bitrates */ - atsElem->peOffset = 0; + atsElem->peOffset = 0; if (chBitrate < 32000) { atsElem->peOffset = max(50, (100 - extract_l((100 * chBitrate) / 32000))); } @@ -1039,24 +1039,24 @@ void AdjThrInit(ADJ_THR_STATE *hAdjThr, /* minSnr adaptation */ /* maximum reduction of minSnr goes down to minSnr^maxRed */ - msaParam->maxRed = 0x20000000; /* *0.25f / + msaParam->maxRed = 0x20000000; /* *0.25f / /* start adaptation of minSnr for avgEn/sfbEn > startRatio */ - msaParam->startRatio = 0x0ccccccd; /* 10 */ + msaParam->startRatio = 0x0ccccccd; /* 10 */ /* maximum minSnr reduction to minSnr^maxRed is reached for avgEn/sfbEn >= maxRatio */ - msaParam->maxRatio = 0x0020c49c; /* 1000 */ + msaParam->maxRatio = 0x0020c49c; /* 1000 */ /* helper variables to interpolate minSnr reduction for avgEn/sfbEn between startRatio and maxRatio */ - msaParam->redRatioFac = 0xfb333333; /* -0.75/20 */ + msaParam->redRatioFac = 0xfb333333; /* -0.75/20 */ + + msaParam->redOffs = 0x30000000; /* msaParam->redRatioFac * 10*log10(msaParam->startRatio) */ - msaParam->redOffs = 0x30000000; /* msaParam->redRatioFac * 10*log10(msaParam->startRatio) */ - /* pe correction */ - atsElem->peLast = 0; - atsElem->dynBitsLast = 0; - atsElem->peCorrectionFactor = 100; /* 1.0 */ + atsElem->peLast = 0; + atsElem->dynBitsLast = 0; + atsElem->peCorrectionFactor = 100; /* 1.0 */ } @@ -1069,20 +1069,20 @@ void AdjThrInit(ADJ_THR_STATE *hAdjThr, *****************************************************************************/ static void calcPeCorrection(Word16 *correctionFac, const Word16 peAct, - const Word16 peLast, - const Word16 bitsLast) + const Word16 peLast, + const Word16 bitsLast) { Word32 peAct100 = 100 * peAct; Word32 peLast100 = 100 * peLast; Word16 peBitsLast = bits2pe(bitsLast); - + if ((bitsLast > 0) && (peAct100 < (150 * peLast)) && (peAct100 > (70 * peLast)) && ((120 * peBitsLast) > peLast100 ) && (( 65 * peBitsLast) < peLast100)) { Word16 newFac = (100 * peLast) / peBitsLast; /* dead zone */ - + if (newFac < 100) { newFac = min(((110 * newFac) / 100), 100); newFac = max(newFac, 85); @@ -1091,13 +1091,13 @@ static void calcPeCorrection(Word16 *correctionFac, newFac = max(((90 * newFac) / 100), 100); newFac = min(newFac, 115); } - + if ((newFac > 100 && *correctionFac < 100) || (newFac < 100 && *correctionFac > 100)) { - *correctionFac = 100; + *correctionFac = 100; } /* faster adaptation towards 1.0, slower in the other direction */ - + if ((*correctionFac < 100 && newFac < *correctionFac) || (*correctionFac > 100 && newFac > *correctionFac)) *correctionFac = (85 * *correctionFac + 15 * newFac) / 100; @@ -1107,7 +1107,7 @@ static void calcPeCorrection(Word16 *correctionFac, *correctionFac = max(*correctionFac, 85); } else { - *correctionFac = 100; + *correctionFac = 100; } } @@ -1123,40 +1123,40 @@ void AdjustThresholds(ADJ_THR_STATE *adjThrState, PSY_OUT_ELEMENT *psyOutElement, Word16 *chBitDistribution, Word16 logSfbEnergy[MAX_CHANNELS][MAX_GROUPED_SFB], - Word16 sfbNRelevantLines[MAX_CHANNELS][MAX_GROUPED_SFB], + Word16 sfbNRelevantLines[MAX_CHANNELS][MAX_GROUPED_SFB], QC_OUT_ELEMENT *qcOE, ELEMENT_BITS *elBits, const Word16 nChannels, const Word16 maxBitFac) { - PE_DATA peData; + PE_DATA peData; Word16 noRedPe, grantedPe, grantedPeCorr; Word16 curWindowSequence; Word16 bitFactor; Word16 avgBits = (elBits->averageBits - (qcOE->staticBitsUsed + qcOE->ancBitsUsed)); - Word16 bitresBits = elBits->bitResLevel; + Word16 bitresBits = elBits->bitResLevel; Word16 maxBitresBits = elBits->maxBits; Word16 sideInfoBits = (qcOE->staticBitsUsed + qcOE->ancBitsUsed); Word16 ch; - + prepareSfbPe(&peData, psyOutChannel, logSfbEnergy, sfbNRelevantLines, nChannels, AdjThrStateElement->peOffset); - + /* pe without reduction */ calcSfbPe(&peData, psyOutChannel, nChannels); - noRedPe = peData.pe; + noRedPe = peData.pe; - curWindowSequence = LONG_WINDOW; - + curWindowSequence = LONG_WINDOW; + if (nChannels == 2) { - + if ((psyOutChannel[0].windowSequence == SHORT_WINDOW) || (psyOutChannel[1].windowSequence == SHORT_WINDOW)) { - curWindowSequence = SHORT_WINDOW; + curWindowSequence = SHORT_WINDOW; } } else { - curWindowSequence = psyOutChannel[0].windowSequence; + curWindowSequence = psyOutChannel[0].windowSequence; } @@ -1170,13 +1170,13 @@ void AdjustThresholds(ADJ_THR_STATE *adjThrState, grantedPe = ((bitFactor * bits2pe(avgBits)) / 100); /* correction of pe value */ - calcPeCorrection(&(AdjThrStateElement->peCorrectionFactor), + calcPeCorrection(&(AdjThrStateElement->peCorrectionFactor), min(grantedPe, noRedPe), - AdjThrStateElement->peLast, + AdjThrStateElement->peLast, AdjThrStateElement->dynBitsLast); grantedPeCorr = (grantedPe * AdjThrStateElement->peCorrectionFactor) / 100; - + if (grantedPeCorr < noRedPe && noRedPe > peData.offset) { /* calc threshold necessary for desired pe */ adaptThresholdsToPe(psyOutChannel, @@ -1192,8 +1192,8 @@ void AdjustThresholds(ADJ_THR_STATE *adjThrState, /* calculate relative distribution */ for (ch=0; ch<nChannels; ch++) { Word16 peOffsDiff = peData.pe - peData.offset; - chBitDistribution[ch] = 200; - + chBitDistribution[ch] = 200; + if (peOffsDiff > 0) { Word32 temp = 1000 - (nChannels * 200); chBitDistribution[ch] = chBitDistribution[ch] + @@ -1202,10 +1202,10 @@ void AdjustThresholds(ADJ_THR_STATE *adjThrState, } /* store pe */ - qcOE->pe = noRedPe; + qcOE->pe = noRedPe; /* update last pe */ - AdjThrStateElement->peLast = grantedPe; + AdjThrStateElement->peLast = grantedPe; } /******************************************************************************** @@ -1217,7 +1217,7 @@ void AdjustThresholds(ADJ_THR_STATE *adjThrState, void AdjThrUpdate(ATS_ELEMENT *AdjThrStateElement, const Word16 dynBitsUsed) { - AdjThrStateElement->dynBitsLast = dynBitsUsed; + AdjThrStateElement->dynBitsLast = dynBitsUsed; } diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s index e0885f1..e705197 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/AutoCorrelation_v5.s @@ -22,34 +22,34 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - .section .text + .section .text .global AutoCorrelation AutoCorrelation: stmdb sp!, {r4 - r11, lr} - sub r13, r13, #20 + sub r13, r13, #20 - mov r5, r0 - mov r7, r1 - mov r9, r3 - mov r2, r2, lsl #16 - mov r0, #0 - mov r4, r2, asr #16 - mov r8, #0 - cmp r4, #0 - ble L136 - - cmp r4, #8 - mov r2, #0 - blt L133 + mov r5, r0 + mov r7, r1 + mov r9, r3 + mov r2, r2, lsl #16 + mov r0, #0 + mov r4, r2, asr #16 + mov r8, #0 + cmp r4, #0 + ble L136 - sub r12, r4, #8 -L132: - ldr r6, [r5, r2] + cmp r4, #8 + mov r2, #0 + blt L133 + + sub r12, r4, #8 +L132: + ldr r6, [r5, r2] add r2, r2, #4 smulbb r3, r6, r6 - ldr r1, [r5, r2] + ldr r1, [r5, r2] smultt r10, r6, r6 mov r3, r3, asr #9 smulbb r6, r1, r1 @@ -72,95 +72,95 @@ L132: add r8, r8, #6 qadd r0, r0, r6 - cmp r8, r12 - blt L132 -L133: - ldrsh r6, [r5, r2] - mul r10, r6, r6 - add r2, r2, #2 - mov r1, r10, asr #9 + cmp r8, r12 + blt L132 +L133: + ldrsh r6, [r5, r2] + mul r10, r6, r6 + add r2, r2, #2 + mov r1, r10, asr #9 qadd r0, r0, r1 -L134: - add r8, r8, #1 - cmp r8, r4 - blt L133 -L135: -L136: - str r0, [r7, #0] - cmp r0, #0 - beq L1320 -L137: - mov r2, r9, lsl #16 - mov r8, #1 - mov r2, r2, asr #16 - cmp r2, #1 - ble L1319 -L138: -L139: - sub r4, r4, #1 - mov r14, #0 - mov r3, #0 - cmp r4, #0 - ble L1317 -L1310: - cmp r4, #6 - addlt r6, r5, r8, lsl #1 - blt L1314 -L1311: - add r6, r5, r8, lsl #1 - sub r12, r4, #6 - str r8, [r13, #8] - str r7, [r13, #4] -L1312: - mov r1, r3, lsl #1 - ldrsh r7, [r6, r1] - ldrsh r10, [r5, r1] - add r8, r1, r6 - add r9, r5, r1 +L134: + add r8, r8, #1 + cmp r8, r4 + blt L133 +L135: +L136: + str r0, [r7, #0] + cmp r0, #0 + beq L1320 +L137: + mov r2, r9, lsl #16 + mov r8, #1 + mov r2, r2, asr #16 + cmp r2, #1 + ble L1319 +L138: +L139: + sub r4, r4, #1 + mov r14, #0 + mov r3, #0 + cmp r4, #0 + ble L1317 +L1310: + cmp r4, #6 + addlt r6, r5, r8, lsl #1 + blt L1314 +L1311: + add r6, r5, r8, lsl #1 + sub r12, r4, #6 + str r8, [r13, #8] + str r7, [r13, #4] +L1312: + mov r1, r3, lsl #1 + ldrsh r7, [r6, r1] + ldrsh r10, [r5, r1] + add r8, r1, r6 + add r9, r5, r1 mul r7, r10, r7 - ldrsh r1, [r8, #2] - ldrsh r10, [r8, #4] - add r7, r14, r7, asr #9 - ldrsh r0, [r9, #2] - ldrsh r11, [r9, #4] - mul r1, r0, r1 - ldrsh r14, [r8, #6] - mul r10, r11, r10 - add r7, r7, r1, asr #9 - ldrsh r8, [r8, #8] + ldrsh r1, [r8, #2] + ldrsh r10, [r8, #4] + add r7, r14, r7, asr #9 + ldrsh r0, [r9, #2] + ldrsh r11, [r9, #4] + mul r1, r0, r1 + ldrsh r14, [r8, #6] + mul r10, r11, r10 + add r7, r7, r1, asr #9 + ldrsh r8, [r8, #8] add r3, r3, #5 - ldrsh r11, [r9, #6] - ldrsh r1, [r9, #8] - mul r14, r11, r14 - add r7, r7, r10, asr #9 - mul r1, r1, r8 - add r14, r7, r14, asr #9 - cmp r3, r12 - add r14, r14, r1, asr #9 - ble L1312 -L1313: - ldr r8, [r13, #8] - ldr r7, [r13, #4] -L1314: -L1315: - mov r12, r3, lsl #1 - ldrsh r9, [r6, r12] - ldrsh r12, [r5, r12] - add r3, r3, #1 - cmp r3, r4 - mul r12, r12, r9 - add r14, r14, r12, asr #9 - blt L1315 -L1316: -L1317: - str r14, [r7, +r8, lsl #2] - add r8, r8, #1 - cmp r8, r2 - blt L139 - + ldrsh r11, [r9, #6] + ldrsh r1, [r9, #8] + mul r14, r11, r14 + add r7, r7, r10, asr #9 + mul r1, r1, r8 + add r14, r7, r14, asr #9 + cmp r3, r12 + add r14, r14, r1, asr #9 + ble L1312 +L1313: + ldr r8, [r13, #8] + ldr r7, [r13, #4] +L1314: +L1315: + mov r12, r3, lsl #1 + ldrsh r9, [r6, r12] + ldrsh r12, [r5, r12] + add r3, r3, #1 + cmp r3, r4 + mul r12, r12, r9 + add r14, r14, r12, asr #9 + blt L1315 +L1316: +L1317: + str r14, [r7, +r8, lsl #2] + add r8, r8, #1 + cmp r8, r2 + blt L139 + L1319: L1320: - add r13, r13, #20 + add r13, r13, #20 ldmia sp!, {r4 - r11, pc} @ENDP @ |AutoCorrelation| diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s index 75b916c..b30e8cb 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/CalcWindowEnergy_v5.s @@ -22,91 +22,91 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .section .text - + .global CalcWindowEnergy CalcWindowEnergy: stmdb sp!, {r4 - r11, lr} - sub r13, r13, #20 + sub r13, r13, #20 - mov r3, r3, lsl #16 + mov r3, r3, lsl #16 ldr r10, [r0, #168] @ states0 = blockSwitchingControl->iirStates[0]; - mov r3, r3, asr #16 + mov r3, r3, asr #16 ldr r11, [r0, #172] @ states1 = blockSwitchingControl->iirStates[1]; mov r2, r2, lsl #16 - ldr r12, hiPassCoeff @ Coeff0 = hiPassCoeff[0]; + ldr r12, hiPassCoeff @ Coeff0 = hiPassCoeff[0]; mov r2, r2, asr #16 ldr r14, hiPassCoeff + 4 @ Coeff1 = hiPassCoeff[1]; - + mov r8, #0 @ w=0 mov r5, #0 @ wOffset = 0; - + BLOCK_BEGIN: - mov r6, #0 @ accuUE = 0; - mov r7, #0 @ accuFE = 0; + mov r6, #0 @ accuUE = 0; + mov r7, #0 @ accuFE = 0; mov r4, #0 @ i=0 - - str r8, [r13, #4] - str r0, [r13, #8] + + str r8, [r13, #4] + str r0, [r13, #8] str r3, [r13, #12] - -ENERGY_BEG: - mov r9, r5, lsl #1 + +ENERGY_BEG: + mov r9, r5, lsl #1 ldrsh r9, [r1, r9] @ tempUnfiltered = timeSignal[tidx]; add r5, r5, r2 @ tidx = tidx + chIncrement; - - smulwb r3, r14, r9 @ accu1 = L_mpy_ls(Coeff1, tempUnfiltered); + + smulwb r3, r14, r9 @ accu1 = L_mpy_ls(Coeff1, tempUnfiltered); smull r0, r8, r12, r11 @ accu2 = fixmul( Coeff0, states1 ); - + mov r3, r3, lsl #1 mov r8, r8, lsl #1 - sub r0, r3, r10 @ accu3 = accu1 - states0; + sub r0, r3, r10 @ accu3 = accu1 - states0; sub r8, r0, r8 @ out = accu3 - accu2; mov r10, r3 @ states0 = accu1; - mov r11, r8 @ states1 = out; - - mul r3, r9, r9 + mov r11, r8 @ states1 = out; + + mul r3, r9, r9 mov r8, r8, asr #16 - + add r4, r4, #1 add r6, r6, r3, asr #7 - mul r9, r8, r8 + mul r9, r8, r8 ldr r3, [r13, #12] add r7, r7, r9, asr #7 - - cmp r4, r3 - blt ENERGY_BEG - + + cmp r4, r3 + blt ENERGY_BEG + ldr r0, [r13, #8] ldr r8, [r13, #4] - + ENERGY_END: add r4, r0, r8, lsl #2 - str r6, [r4, #72] - add r8, r8, #1 - str r7, [r4, #136] + str r6, [r4, #72] + add r8, r8, #1 + str r7, [r4, #136] cmp r8, #8 - blt BLOCK_BEGIN + blt BLOCK_BEGIN BLOCK_END: - str r10, [r0, #168] - str r11, [r0, #172] - mov r0, #1 - - add r13, r13, #20 - ldmia sp!, {r4 - r11, pc} + str r10, [r0, #168] + str r11, [r0, #172] + mov r0, #1 + + add r13, r13, #20 + ldmia sp!, {r4 - r11, pc} hiPassCoeff: .word 0xbec8b439 .word 0x609d4952 - + @ENDP .end diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s index 38fe092..103cc91 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/PrePostMDCT_v5.s @@ -26,46 +26,46 @@ PreMDCT: stmdb sp!, {r4 - r11, lr} - + add r9, r0, r1, lsl #2 sub r3, r9, #8 movs r1, r1, asr #2 beq PreMDCT_END - + PreMDCT_LOOP: ldr r8, [r2], #4 ldr r9, [r2], #4 - + ldrd r4, [r0] ldrd r6, [r3] - + smull r14, r11, r4, r8 @ MULHIGH(tr1, cosa) smull r10, r12, r7, r8 @ MULHIGH(ti1, cosa) - + smull r14, r8, r7, r9 @ MULHIGH(ti1, sina) - smull r7, r10, r4, r9 @ MULHIGH(tr1, sina) - - add r11, r11, r8 @ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ + smull r7, r10, r4, r9 @ MULHIGH(tr1, sina) + + add r11, r11, r8 @ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ sub r7, r12, r10 @ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina) - + ldr r8, [r2], #4 ldr r9, [r2], #4 - + smull r14, r4, r6, r8 @ MULHIGH(tr2, cosa) smull r10, r12, r5, r8 @ MULHIGH(ti2, cosa) - + smull r14, r8, r5, r9 @ MULHIGH(ti2, sina) smull r5, r10, r6, r9 @ MULHIGH(tr2, sina) - + add r8, r8, r4 sub r9, r12, r10 - - mov r6, r11 - strd r6, [r0] + mov r6, r11 + + strd r6, [r0] strd r8, [r3] - + subs r1, r1, #1 sub r3, r3, #8 add r0, r0, #8 @@ -74,52 +74,52 @@ PreMDCT_LOOP: PreMDCT_END: ldmia sp!, {r4 - r11, pc} @ENDP @ |PreMDCT| - + .section .text .global PostMDCT PostMDCT: stmdb sp!, {r4 - r11, lr} - + add r9, r0, r1, lsl #2 sub r3, r9, #8 movs r1, r1, asr #2 beq PostMDCT_END - + PostMDCT_LOOP: - ldr r8, [r2], #4 + ldr r8, [r2], #4 ldr r9, [r2], #4 - + ldrd r4, [r0] ldrd r6, [r3] - + smull r14, r11, r4, r8 @ MULHIGH(tr1, cosa) smull r10, r12, r5, r8 @ MULHIGH(ti1, cosa) - + smull r14, r8, r5, r9 @ MULHIGH(ti1, sina) - smull r5, r10, r4, r9 @ MULHIGH(tr1, sina) - - add r4, r11, r8 @ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ + smull r5, r10, r4, r9 @ MULHIGH(tr1, sina) + + add r4, r11, r8 @ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ sub r11, r10, r12 @ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)@ - + ldr r8, [r2], #4 @ ldr r9, [r2], #4 - + smull r14, r5, r6, r8 @ MULHIGH(tr2, cosa) smull r10, r12, r7, r8 @ MULHIGH(ti2, cosa) - + smull r14, r8, r7, r9 @ MULHIGH(ti2, sina) smull r7, r10, r6, r9 @ MULHIGH(tr2, sina) - + add r6, r8, r5 @ MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2)@ sub r5, r10, r12 @ MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2)@ - - mov r7, r11 + + mov r7, r11 strd r4, [r0] strd r6, [r3] - + subs r1, r1, #1 sub r3, r3, #8 add r0, r0, #8 diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s index b30881a..72cb9a3 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s @@ -26,46 +26,46 @@ Radix4First: stmdb sp!, {r4 - r11, lr} - + movs r10, r1 mov r11, r0 beq Radix4First_END - + Radix4First_LOOP: ldrd r0, [r11] ldrd r2, [r11, #8] ldrd r4, [r11, #16] ldrd r6, [r11, #24] - + add r8, r0, r2 add r9, r1, r3 - + sub r0, r0, r2 sub r1, r1, r3 - + add r2, r4, r6 add r3, r5, r7 - + sub r4, r4, r6 sub r5, r5, r7 - + add r6, r8, r2 add r7, r9, r3 - + sub r8, r8, r2 sub r9, r9, r3 - + add r2, r0, r5 sub r3, r1, r4 - + sub r0, r0, r5 add r1, r1, r4 - + strd r6, [r11] strd r2, [r11, #8] strd r8, [r11, #16] strd r0, [r11, #24] - + subs r10, r10, #1 add r11, r11, #32 bne Radix4First_LOOP @@ -73,180 +73,180 @@ Radix4First_LOOP: Radix4First_END: ldmia sp!, {r4 - r11, pc} @ENDP @ |Radix4First| - + .section .text .global Radix8First Radix8First: stmdb sp!, {r4 - r11, lr} sub sp, sp, #0x24 - + mov r12, r1 mov r14, r0 cmp r12, #0 beq Radix8First_END - + Radix8First_LOOP: - ldrd r0, [r14] + ldrd r0, [r14] ldrd r2, [r14, #8] ldrd r4, [r14, #16] ldrd r6, [r14, #24] - + add r8, r0, r2 @ r0 = buf[0] + buf[2]@ add r9, r1, r3 @ i0 = buf[1] + buf[3]@ - + sub r0, r0, r2 @ r1 = buf[0] - buf[2]@ sub r1, r1, r3 @ i1 = buf[1] - buf[3]@ - + add r2, r4, r6 @ r2 = buf[4] + buf[6]@ add r3, r5, r7 @ i2 = buf[5] + buf[7]@ - + sub r4, r4, r6 @ r3 = buf[4] - buf[6]@ sub r5, r5, r7 @ i3 = buf[5] - buf[7]@ - + add r6, r8, r2 @ r4 = (r0 + r2) >> 1@ add r7, r9, r3 @ i4 = (i0 + i2) >> 1@ - + sub r8, r8, r2 @ r5 = (r0 - r2) >> 1@ sub r9, r9, r3 @ i5 = (i0 - i2) >> 1@ - + sub r2, r0, r5 @ r6 = (r1 - i3) >> 1@ add r3, r1, r4 @ i6 = (i1 + r3) >> 1@ - + add r0, r0, r5 @ r7 = (r1 + i3) >> 1@ sub r1, r1, r4 @ i7 = (i1 - r3) >> 1@ - + mov r6, r6, asr #1 @ mov r7, r7, asr #1 @ - + mov r8, r8, asr #1 mov r9, r9, asr #1 - + mov r2, r2, asr #1 mov r3, r3, asr #1 - + mov r0, r0, asr #1 - mov r1, r1, asr #1 - + mov r1, r1, asr #1 + str r6, [sp] str r7, [sp, #4] - + str r8, [sp, #8] str r9, [sp, #12] - + str r2, [sp, #16] - str r3, [sp, #20] - + str r3, [sp, #20] + str r0, [sp, #24] - str r1, [sp, #28] - - ldrd r2, [r14, #32] + str r1, [sp, #28] + + ldrd r2, [r14, #32] ldrd r4, [r14, #40] ldrd r6, [r14, #48] ldrd r8, [r14, #56] - + add r0, r2, r4 @ r0 = buf[ 8] + buf[10]@ add r1, r3, r5 @ i0 = buf[ 9] + buf[11]@ - + sub r2, r2, r4 @ r1 = buf[ 8] - buf[10]@ sub r3, r3, r5 @ i1 = buf[ 9] - buf[11]@ - + add r4, r6, r8 @ r2 = buf[12] + buf[14]@ add r5, r7, r9 @ i2 = buf[13] + buf[15]@ - + sub r6, r6, r8 @ r3 = buf[12] - buf[14]@ sub r7, r7, r9 @ i3 = buf[13] - buf[15]@ - + add r8, r0, r4 @ t0 = (r0 + r2) add r9, r1, r5 @ t1 = (i0 + i2) - + sub r0, r0, r4 @ t2 = (r0 - r2) sub r1, r1, r5 @ t3 = (i0 - i2) - + mov r8, r8, asr #1 ldr r4, [sp] - + mov r9, r9, asr #1 ldr r5, [sp, #4] - - mov r0, r0, asr #1 + + mov r0, r0, asr #1 mov r1, r1, asr #1 - + add r10, r4, r8 @ buf[ 0] = r4 + t0@ add r11, r5, r9 @ buf[ 1] = i4 + t1@ - + sub r4, r4, r8 @ buf[ 8] = r4 - t0@ sub r5, r5, r9 @ buf[ 9] = i4 - t1@ - + strd r10, [r14] strd r4, [r14, #32] - + ldr r10, [sp, #8] ldr r11, [sp, #12] - + add r4, r10, r1 @ buf[ 4] = r5 + t3@ sub r5, r11, r0 @ buf[ 5] = i5 - t2@ - + sub r10, r10, r1 @ buf[12] = r5 - t3@ add r11, r11, r0 @ buf[13] = i5 + t2@ - + strd r4, [r14, #16] strd r10, [r14, #48] - + sub r0, r2, r7 @ r0 = r1 - i3@ add r1, r3, r6 @ i0 = i1 + r3@ - + ldr r11, DATATab - + add r2, r2, r7 @ r2 = r1 + i3@ sub r3, r3, r6 @ i2 = i1 - r3@ - + sub r4, r0, r1 @ r0 - i0 add r5, r0, r1 @ r0 + i0 - + sub r0, r2, r3 @ r2 - i2 add r1, r2, r3 @ r2 + i2 - - smull r8, r6, r4, r11 - smull r9, r7, r5, r11 - + + smull r8, r6, r4, r11 + smull r9, r7, r5, r11 + ldr r2, [sp, #16] ldr r3, [sp, #20] - - smull r8, r4, r0, r11 - smull r9, r5, r1, r11 - + + smull r8, r4, r0, r11 + smull r9, r5, r1, r11 + ldr r10, [sp, #24] ldr r11, [sp, #28] - + sub r8, r2, r6 sub r9, r3, r7 - + add r2, r2, r6 add r3, r3, r7 - + add r6, r10, r5 sub r7, r11, r4 - + sub r0, r10, r5 add r1, r11, r4 - + strd r6, [r14, #8] strd r8, [r14, #24] strd r0, [r14, #40] strd r2, [r14, #56] - + subs r12, r12, #1 add r14, r14, #64 - + bne Radix8First_LOOP - + Radix8First_END: add sp, sp, #0x24 ldmia sp!, {r4 - r11, pc} - + DATATab: .word 0x5a82799a - + @ENDP @ |Radix8First| .end
\ No newline at end of file diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s index bc069b4..e81c82e 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/Radix4FFT_v5.s @@ -25,145 +25,145 @@ Radix4FFT: stmdb sp!, {r4 - r11, lr} - sub sp, sp, #32 + sub sp, sp, #32 mov r1, r1, asr #2 - cmp r1, #0 - beq Radix4FFT_END - -Radix4FFT_LOOP1: - mov r14, r0 @ xptr = buf@ + cmp r1, #0 + beq Radix4FFT_END + +Radix4FFT_LOOP1: + mov r14, r0 @ xptr = buf@ mov r10, r1 @ i = num@ mov r9, r2, lsl #3 @ step = 2*bgn@ - cmp r10, #0 - str r0, [sp] - str r1, [sp, #4] + cmp r10, #0 + str r0, [sp] + str r1, [sp, #4] str r2, [sp, #8] - str r3, [sp, #12] - beq Radix4FFT_LOOP1_END - -Radix4FFT_LOOP2: + str r3, [sp, #12] + beq Radix4FFT_LOOP1_END + +Radix4FFT_LOOP2: mov r12, r3 @ csptr = twidTab@ mov r11, r2 @ j = bgn - cmp r11, #0 + cmp r11, #0 str r10, [sp, #16] - beq Radix4FFT_LOOP2_END - -Radix4FFT_LOOP3: - str r11, [sp, #20] - + beq Radix4FFT_LOOP2_END + +Radix4FFT_LOOP3: + str r11, [sp, #20] + ldrd r0, [r14, #0] @ r0 = xptr[0]@ r1 = xptr[1]@ add r14, r14, r9 @ xptr += step@ - - ldrd r10, [r14, #0] @ r2 = xptr[0]@ r3 = xptr[1]@ + + ldrd r10, [r14, #0] @ r2 = xptr[0]@ r3 = xptr[1]@ ldr r8, [r12], #4 @ cosxsinx = csptr[0]@ - + smulwt r4, r10, r8 @ L_mpy_wx(cosx, t0) smulwt r3, r11, r8 @ L_mpy_wx(cosx, t1) - + smlawb r2, r11, r8, r4 @ r2 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@ smulwb r5, r10, r8 @ L_mpy_wx(sinx, t0) - + mov r10, r0, asr #2 @ t0 = r0 >> 2@ mov r11, r1, asr #2 @ t1 = r1 >> 2@ - + sub r3, r3, r5 @ r3 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@ add r14, r14, r9 @ xptr += step@ - + sub r0, r10, r2 @ r0 = t0 - r2@ sub r1, r11, r3 @ r1 = t1 - r3@ - + add r2, r10, r2 @ r2 = t0 + r2@ add r3, r11, r3 @ r3 = t1 + r3@ - + str r2, [sp, #24] str r3, [sp, #28] - + ldrd r10, [r14, #0] @ r4 = xptr[0]@ r5 = xptr[1]@ ldr r8, [r12], #4 @ cosxsinx = csptr[1]@ - + smulwt r6, r10, r8 @ L_mpy_wx(cosx, t0) smulwt r5, r11, r8 @ L_mpy_wx(cosx, t1) - + smlawb r4, r11, r8, r6 @ r4 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@ smulwb r7, r10, r8 @ L_mpy_wx(sinx, t0) - + add r14, r14, r9 @ xptr += step@ sub r5, r5, r7 @ r5 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@ - + ldrd r10, [r14] @ r6 = xptr[0]@ r7 = xptr[1]@ ldr r8, [r12], #4 @ cosxsinx = csptr[1]@ - + smulwt r2, r10, r8 @ L_mpy_wx(cosx, t0) smulwt r7, r11, r8 @ L_mpy_wx(cosx, t1) - + smlawb r6, r11, r8, r2 @ r4 = L_mpy_wx(cosx, t0) + L_mpy_wx(sinx, t1)@ smulwb r3, r10, r8 @ L_mpy_wx(sinx, t0) - + mov r10, r4 @ t0 = r4@ - mov r11, r5 @ t1 = r5@ - + mov r11, r5 @ t1 = r5@ + sub r7, r7, r3 @ r5 = L_mpy_wx(cosx, t1) - L_mpy_wx(sinx, t0)@ - - add r4, r10, r6 @ r4 = t0 + r6@ + + add r4, r10, r6 @ r4 = t0 + r6@ sub r5, r7, r11 @ r5 = r7 - t1@ - + sub r6, r10, r6 @ r6 = t0 - r6@ add r7, r7, r11 @ r7 = r7 + t1@ - + ldr r2, [sp, #24] ldr r3, [sp, #28] - + add r10, r0, r5 @ xptr[0] = r0 + r5@ add r11, r1, r6 @ xptr[0] = r1 + r6 - - strd r10, [r14] + + strd r10, [r14] sub r14, r14, r9 @ xptr -= step@ - + sub r10, r2, r4 @ xptr[0] = r2 - r4@ sub r11, r3, r7 @ xptr[1] = r3 - r7@ - - strd r10, [r14] + + strd r10, [r14] sub r14, r14, r9 @ xptr -= step@ - + sub r10, r0, r5 @ xptr[0] = r0 - r5@ sub r11, r1, r6 @ xptr[0] = r1 - r6 - - strd r10, [r14] + + strd r10, [r14] sub r14, r14, r9 @ xptr -= step@ - + add r10, r2, r4 @ xptr[0] = r2 - r4@ add r11, r3, r7 @ xptr[1] = r3 - r7@ - - strd r10, [r14] + + strd r10, [r14] add r14, r14, #8 @ xptr += 2@ - + ldr r11, [sp, #20] subs r11, r11, #1 - bne Radix4FFT_LOOP3 - -Radix4FFT_LOOP2_END: + bne Radix4FFT_LOOP3 + +Radix4FFT_LOOP2_END: ldr r10, [sp, #16] ldr r3, [sp, #12] ldr r2, [sp, #8] - rsb r8, r9, r9, lsl #2 + rsb r8, r9, r9, lsl #2 sub r10, r10, #1 - add r14, r14, r8 - cmp r10, #0 - bhi Radix4FFT_LOOP2 - -Radix4FFT_LOOP1_END: - ldr r0, [sp] + add r14, r14, r8 + cmp r10, #0 + bhi Radix4FFT_LOOP2 + +Radix4FFT_LOOP1_END: + ldr r0, [sp] ldr r1, [sp, #4] add r3, r3, r8, asr #1 - mov r2, r2, lsl #2 - movs r1, r1, asr #2 - bne Radix4FFT_LOOP1 - -Radix4FFT_END: - add sp, sp, #32 + mov r2, r2, lsl #2 + movs r1, r1, asr #2 + bne Radix4FFT_LOOP1 + +Radix4FFT_END: + add sp, sp, #32 ldmia sp!, {r4 - r11, pc} - + @ENDP @ |Radix4FFT| .end
\ No newline at end of file diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s index 3b88810..4789f6d 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/band_nrg_v5.s @@ -26,31 +26,31 @@ .global CalcBandEnergy CalcBandEnergy: - stmdb sp!, {r4 - r11, lr} - - mov r2, r2, lsl #16 + stmdb sp!, {r4 - r11, lr} + + mov r2, r2, lsl #16 ldr r12, [r13, #36] mov r9, #0 - mov r5, r2, asr #16 - mov r4, #0 - cmp r5, #0 - ble L212 + mov r5, r2, asr #16 + mov r4, #0 + cmp r5, #0 + ble L212 L22: - mov r2, r4, lsl #1 - ldrsh r10, [r1, r2] - add r11, r1, r2 - ldrsh r2, [r11, #2] - mov r14, #0 - cmp r10, r2 - bge L28 - + mov r2, r4, lsl #1 + ldrsh r10, [r1, r2] + add r11, r1, r2 + ldrsh r2, [r11, #2] + mov r14, #0 + cmp r10, r2 + bge L28 + L23: - ldr r11, [r0, +r10, lsl #2] - add r10, r10, #1 - ldr r6, [r0, +r10, lsl #2] + ldr r11, [r0, +r10, lsl #2] + add r10, r10, #1 + ldr r6, [r0, +r10, lsl #2] smull r11, r7, r11, r11 - add r10, r10, #1 + add r10, r10, #1 smull r6, r8, r6, r6 ldr r11, [r0, +r10, lsl #2] qadd r14, r14, r7 @@ -59,71 +59,71 @@ L23: ldr r6, [r0, +r10, lsl #2] qadd r14, r14, r8 smull r6, r8, r6, r6 - add r10, r10, #1 + add r10, r10, #1 qadd r14, r14, r7 cmp r10, r2 qadd r14, r14, r8 - blt L23 + blt L23 -L28: +L28: qadd r14, r14, r14 str r14, [r3, +r4, lsl #2] - add r4, r4, #1 + add r4, r4, #1 qadd r9, r9, r14 - cmp r4, r5 + cmp r4, r5 - blt L22 + blt L22 -L212: - str r9, [r12, #0] +L212: + str r9, [r12, #0] ldmia sp!, {r4 - r11, pc} - + @ENDP ; |CalcBandEnergy| - + .global CalcBandEnergyMS CalcBandEnergyMS: stmdb sp!, {r4 - r11, lr} sub r13, r13, #24 - - mov r12, #0 - mov r3, r3, lsl #16 - mov r14, #0 - mov r3, r3, asr #16 - cmp r3, #0 - mov r4, #0 - ble L315 - -L32: + + mov r12, #0 + mov r3, r3, lsl #16 + mov r14, #0 + mov r3, r3, asr #16 + cmp r3, #0 + mov r4, #0 + ble L315 + +L32: mov r5, r4, lsl #1 mov r6, #0 ldrsh r10, [r2, r5] add r5, r2, r5 mov r7, #0 - ldrsh r11, [r5, #2] - cmp r10, r11 - bge L39 + ldrsh r11, [r5, #2] + cmp r10, r11 + bge L39 str r3, [r13, #4] str r4, [r13, #8] str r12, [r13, #12] str r14, [r13, #16] -L33: - ldr r8, [r0, +r10, lsl #2] +L33: + ldr r8, [r0, +r10, lsl #2] ldr r9, [r1, +r10, lsl #2] mov r8, r8, asr #1 add r10, r10, #1 mov r9, r9, asr #1 - ldr r12, [r0, +r10, lsl #2] - add r5, r8, r9 + ldr r12, [r0, +r10, lsl #2] + add r5, r8, r9 ldr r14, [r1, +r10, lsl #2] sub r8, r8, r9 - smull r5, r3, r5, r5 + smull r5, r3, r5, r5 mov r12, r12, asr #1 - smull r8, r4, r8, r8 + smull r8, r4, r8, r8 mov r14, r14, asr #1 qadd r6, r6, r3 @@ -131,27 +131,27 @@ L33: qadd r7, r7, r4 sub r8, r12, r14 - smull r5, r3, r5, r5 + smull r5, r3, r5, r5 add r10, r10, #1 - smull r8, r4, r8, r8 - + smull r8, r4, r8, r8 + qadd r6, r6, r3 qadd r7, r7, r4 - ldr r8, [r0, +r10, lsl #2] + ldr r8, [r0, +r10, lsl #2] ldr r9, [r1, +r10, lsl #2] mov r8, r8, asr #1 add r10, r10, #1 mov r9, r9, asr #1 - ldr r12, [r0, +r10, lsl #2] - add r5, r8, r9 + ldr r12, [r0, +r10, lsl #2] + add r5, r8, r9 ldr r14, [r1, +r10, lsl #2] sub r8, r8, r9 - smull r5, r3, r5, r5 + smull r5, r3, r5, r5 mov r12, r12, asr #1 - smull r8, r4, r8, r8 + smull r8, r4, r8, r8 mov r14, r14, asr #1 qadd r6, r6, r3 @@ -159,37 +159,37 @@ L33: qadd r7, r7, r4 sub r8, r12, r14 - smull r5, r3, r5, r5 + smull r5, r3, r5, r5 add r10, r10, #1 - smull r8, r4, r8, r8 - + smull r8, r4, r8, r8 + qadd r6, r6, r3 qadd r7, r7, r4 cmp r10, r11 - + blt L33 ldr r3, [r13, #4] - ldr r4, [r13, #8] + ldr r4, [r13, #8] ldr r12, [r13, #12] ldr r14, [r13, #16] -L39: +L39: qadd r6, r6, r6 - qadd r7, r7, r7 - + qadd r7, r7, r7 + ldr r8, [r13, #60] ldr r9, [r13, #68] qadd r12, r12, r6 qadd r14, r14, r7 - - str r6, [r8, +r4, lsl #2] - str r7, [r9, +r4, lsl #2] - + + str r6, [r8, +r4, lsl #2] + str r7, [r9, +r4, lsl #2] + add r4, r4, #1 cmp r4, r3 - blt L32 + blt L32 L315: ldr r8, [r13, #64] diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s index a04c105..64d767a 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/PrePostMDCT_v7.s @@ -26,53 +26,53 @@ PreMDCT: stmdb sp!, {r4 - r11, lr} - + add r9, r0, r1, lsl #2 sub r3, r9, #32 movs r1, r1, asr #2 - beq PreMDCT_END - + beq PreMDCT_END + PreMDCT_LOOP: VLD4.I32 {d0, d2, d4, d6}, [r2]! @ cosa = *csptr++@ sina = *csptr++@ VLD4.I32 {d1, d3, d5, d7}, [r2]! @ cosb = *csptr++@ sinb = *csptr++@ VLD2.I32 {d8, d9, d10, d11}, [r0] @ tr1 = *(buf0 + 0)@ ti2 = *(buf0 + 1)@ VLD2.I32 {d13, d15}, [r3]! @ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@ VLD2.I32 {d12, d14}, [r3]! @ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@ - - VREV64.32 Q8, Q7 + + VREV64.32 Q8, Q7 VREV64.32 Q9, Q6 - + VQDMULH.S32 Q10, Q0, Q4 @ MULHIGH(cosa, tr1) VQDMULH.S32 Q11, Q1, Q8 @ MULHIGH(sina, ti1) VQDMULH.S32 Q12, Q0, Q8 @ MULHIGH(cosa, ti1) VQDMULH.S32 Q13, Q1, Q4 @ MULHIGH(sina, tr1) - + VADD.S32 Q0, Q10, Q11 @ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ VSUB.S32 Q1, Q12, Q13 @ *buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1)@ - + VST2.I32 {d0, d1, d2, d3}, [r0]! sub r3, r3, #32 - + VQDMULH.S32 Q10, Q2, Q9 @ MULHIGH(cosb, tr2) VQDMULH.S32 Q11, Q3, Q5 @ MULHIGH(sinb, ti2) VQDMULH.S32 Q12, Q2, Q5 @ MULHIGH(cosb, ti2) VQDMULH.S32 Q13, Q3, Q9 @ MULHIGH(sinb, tr2) - + VADD.S32 Q0, Q10, Q11 @ MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@ VSUB.S32 Q1, Q12, Q13 @ MULHIGH(cosa, ti2) - MULHIGH(sina, tr2)@ - + VREV64.32 Q3, Q1 VREV64.32 Q2, Q0 - - VST2.I32 {d5, d7}, [r3]! - VST2.I32 {d4, d6}, [r3]! - + + VST2.I32 {d5, d7}, [r3]! + VST2.I32 {d4, d6}, [r3]! + subs r1, r1, #4 - sub r3, r3, #64 + sub r3, r3, #64 bne PreMDCT_LOOP - + PreMDCT_END: ldmia sp!, {r4 - r11, pc} @ENDP @ |PreMDCT| @@ -82,50 +82,50 @@ PreMDCT_END: PostMDCT: stmdb sp!, {r4 - r11, lr} - + add r9, r0, r1, lsl #2 sub r3, r9, #32 movs r1, r1, asr #2 beq PostMDCT_END - + PostMDCT_LOOP: VLD4.I32 {d0, d2, d4, d6}, [r2]! @ cosa = *csptr++@ sina = *csptr++@ VLD4.I32 {d1, d3, d5, d7}, [r2]! @ cosb = *csptr++@ sinb = *csptr++@ VLD2.I32 {d8, d9, d10, d11}, [r0] @ tr1 = *(zbuf1 + 0)@ ti1 = *(zbuf1 + 1)@ VLD2.I32 {d13, d15}, [r3]! @ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@ - VLD2.I32 {d12, d14}, [r3]! @ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@ + VLD2.I32 {d12, d14}, [r3]! @ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@ + + VREV64.32 Q8, Q6 + VREV64.32 Q9, Q7 - VREV64.32 Q8, Q6 - VREV64.32 Q9, Q7 - VQDMULH.S32 Q10, Q0, Q4 @ MULHIGH(cosa, tr1) VQDMULH.S32 Q11, Q1, Q5 @ MULHIGH(sina, ti1) VQDMULH.S32 Q12, Q0, Q5 @ MULHIGH(cosa, ti1) VQDMULH.S32 Q13, Q1, Q4 @ MULHIGH(sina, tr1) - + VADD.S32 Q0, Q10, Q11 @ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ VSUB.S32 Q5, Q13, Q12 @ *buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1)@ - + VQDMULH.S32 Q10, Q2, Q8 @ MULHIGH(cosb, tr2) VQDMULH.S32 Q11, Q3, Q9 @ MULHIGH(sinb, ti2) VQDMULH.S32 Q12, Q2, Q9 @ MULHIGH(cosb, ti2) VQDMULH.S32 Q13, Q3, Q8 @ MULHIGH(sinb, tr2) - + VADD.S32 Q4, Q10, Q11 @ *buf1-- = MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@ - VSUB.S32 Q1, Q13, Q12 @ *buf0++ = MULHIGH(sina, tr2) - MULHIGH(cosa, ti2)@ - + VSUB.S32 Q1, Q13, Q12 @ *buf0++ = MULHIGH(sina, tr2) - MULHIGH(cosa, ti2)@ + VREV64.32 Q2, Q4 - VREV64.32 Q3, Q5 - - sub r3, r3, #32 + VREV64.32 Q3, Q5 + + sub r3, r3, #32 VST2.I32 {d0, d1, d2, d3}, [r0]! - - VST2.I32 {d5, d7}, [r3]! - VST2.I32 {d4, d6}, [r3]! - + + VST2.I32 {d5, d7}, [r3]! + VST2.I32 {d4, d6}, [r3]! + subs r1, r1, #4 - sub r3, r3, #64 + sub r3, r3, #64 bne PostMDCT_LOOP PostMDCT_END: diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s index defd45d..7fc5520 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/R4R8First_v7.s @@ -29,86 +29,86 @@ Radix8First: ldr r3, SQRT1_2 cmp r1, #0 - - VDUP.I32 Q15, r3 + + VDUP.I32 Q15, r3 beq Radix8First_END - + Radix8First_LOOP: VLD1.I32 {d0, d1, d2, d3}, [r0]! VLD1.I32 {d8, d9, d10, d11}, [r0]! - + VADD.S32 d4, d0, d1 @ r0 = buf[0] + buf[2]@i0 = buf[1] + buf[3]@ - VSUB.S32 d5, d0, d1 @ r1 = buf[0] - buf[2]@i1 = buf[1] - buf[3]@ - VSUB.S32 d7, d2, d3 @ r2 = buf[4] - buf[6]@i2 = buf[5] - buf[7]@ + VSUB.S32 d5, d0, d1 @ r1 = buf[0] - buf[2]@i1 = buf[1] - buf[3]@ + VSUB.S32 d7, d2, d3 @ r2 = buf[4] - buf[6]@i2 = buf[5] - buf[7]@ VADD.S32 d6, d2, d3 @ r3 = buf[4] + buf[6]@i3 = buf[5] + buf[7]@ - VREV64.I32 d7, d7 - + VREV64.I32 d7, d7 + VADD.S32 Q0, Q2, Q3 @ r4 = (r0 + r2)@i4 = (i0 + i2)@i6 = (i1 + r3)@r7 = (r1 + i3) VSUB.S32 Q1, Q2, Q3 @ r5 = (r0 - r2)@i5 = (i0 - i2)@r6 = (r1 - i3)@i7 = (i1 - r3)@ - VREV64.I32 d3, d3 + VREV64.I32 d3, d3 VADD.S32 d4, d8, d9 @ r0 = buf[ 8] + buf[10]@i0 = buf[ 9] + buf[11]@ - VSUB.S32 d7, d10, d11 @ r1 = buf[12] - buf[14]@i1 = buf[13] - buf[15]@ + VSUB.S32 d7, d10, d11 @ r1 = buf[12] - buf[14]@i1 = buf[13] - buf[15]@ VADD.S32 d6, d10, d11 @ r2 = buf[12] + buf[14]@i2 = buf[13] + buf[15]@ - VREV64.I32 d7, d7 + VREV64.I32 d7, d7 VSUB.S32 d5, d8, d9 @ r3 = buf[ 8] - buf[10]@i3 = buf[ 9] - buf[11]@ - - VTRN.32 d1, d3 - + + VTRN.32 d1, d3 + VADD.S32 Q4, Q2, Q3 @ t0 = (r0 + r2) >> 1@t1 = (i0 + i2) >> 1@i0 = i1 + r3@r2 = r1 + i3@ VSUB.S32 Q5, Q2, Q3 @ t2 = (r0 - r2) >> 1@t3 = (i0 - i2) >> 1@r0 = r1 - i3@i2 = i1 - r3@ - + VREV64.I32 d3, d3 - - VSHR.S32 d8, d8, #1 + + VSHR.S32 d8, d8, #1 VSHR.S32 Q0, Q0, #1 VREV64.I32 d10, d10 VTRN.32 d11, d9 VSHR.S32 Q1, Q1, #1 VSHR.S32 d10, d10, #1 VREV64.I32 d9, d9 - + sub r0, r0, #0x40 - + VADD.S32 d12, d0, d8 - VSUB.S32 d16, d0, d8 + VSUB.S32 d16, d0, d8 VADD.S32 d14, d2, d10 VSUB.S32 d18, d2, d10 - + VSUB.S32 d4, d11, d9 VADD.S32 d5, d11, d9 - + VREV64.I32 d18, d18 - + VQDMULH.S32 Q3, Q2, Q15 VTRN.32 d14, d18 VTRN.32 d6, d7 - VREV64.I32 d18, d18 - + VREV64.I32 d18, d18 + VSUB.S32 d15, d3, d6 VREV64.I32 d7, d7 VADD.S32 d19, d3, d6 VADD.S32 d13, d1, d7 VSUB.S32 d17, d1, d7 - + VREV64.I32 d17, d17 VTRN.32 d13, d17 VREV64.I32 d17, d17 - - subs r1, r1, #1 - + + subs r1, r1, #1 + VST1.I32 {d12, d13, d14, d15}, [r0]! - VST1.I32 {d16, d17, d18, d19}, [r0]! + VST1.I32 {d16, d17, d18, d19}, [r0]! bne Radix8First_LOOP - + Radix8First_END: - ldmia sp!, {r4 - r11, pc} + ldmia sp!, {r4 - r11, pc} SQRT1_2: .word 0x2d413ccd - + @ENDP @ |Radix8First| - + .section .text .global Radix4First @@ -117,28 +117,28 @@ Radix4First: cmp r1, #0 beq Radix4First_END - + Radix4First_LOOP: - VLD1.I32 {d0, d1, d2, d3}, [r0] - - VADD.S32 d4, d0, d1 @ r0 = buf[0] + buf[2]@ r1 = buf[1] + buf[3]@ + VLD1.I32 {d0, d1, d2, d3}, [r0] + + VADD.S32 d4, d0, d1 @ r0 = buf[0] + buf[2]@ r1 = buf[1] + buf[3]@ VSUB.S32 d5, d0, d1 @ r2 = buf[0] - buf[2]@ r3 = buf[1] - buf[3]@ VSUB.S32 d7, d2, d3 @ r4 = buf[4] + buf[6]@ r5 = buf[5] + buf[7]@ VADD.S32 d6, d2, d3 @ r6 = buf[4] - buf[6]@ r7 = buf[5] - buf[7]@ - - VREV64.I32 d7, d7 @ - + + VREV64.I32 d7, d7 @ + VADD.S32 Q4, Q2, Q3 VSUB.S32 Q5, Q2, Q3 - + VREV64.I32 d11, d11 VTRN.32 d9, d11 - subs r1, r1, #1 + subs r1, r1, #1 VREV64.I32 d11, d11 VST1.I32 {d8, d9, d10, d11}, [r0]! bne Radix4First_LOOP - + Radix4First_END: ldmia sp!, {r4 - r11, pc} diff --git a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s index 84a4a80..b8655ae 100644 --- a/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s +++ b/media/libstagefright/codecs/aacenc/src/asm/ARMV7/Radix4FFT_v7.s @@ -28,116 +28,116 @@ Radix4FFT: stmdb sp!, {r4 - r11, lr} mov r1, r1, asr #2 - cmp r1, #0 - beq Radix4FFT_END - -Radix4FFT_LOOP1: - mov r5, r2, lsl #1 - mov r8, r0 - mov r7, r1 - mov r5, r5, lsl #2 - cmp r1, #0 - rsbeq r12, r5, r5, lsl #2 - beq Radix4FFT_LOOP1_END - - rsb r12, r5, r5, lsl #2 - -Radix4FFT_LOOP2: - mov r6, r3 - mov r4, r2 - cmp r2, #0 - beq Radix4FFT_LOOP2_END - -Radix4FFT_LOOP3: + cmp r1, #0 + beq Radix4FFT_END + +Radix4FFT_LOOP1: + mov r5, r2, lsl #1 + mov r8, r0 + mov r7, r1 + mov r5, r5, lsl #2 + cmp r1, #0 + rsbeq r12, r5, r5, lsl #2 + beq Radix4FFT_LOOP1_END + + rsb r12, r5, r5, lsl #2 + +Radix4FFT_LOOP2: + mov r6, r3 + mov r4, r2 + cmp r2, #0 + beq Radix4FFT_LOOP2_END + +Radix4FFT_LOOP3: @r0 = xptr[0]@ @r1 = xptr[1]@ - VLD2.I32 {D0, D1, D2, D3}, [r8] + VLD2.I32 {D0, D1, D2, D3}, [r8] VLD2.I32 {D28, D29, D30, D31}, [r6]! @ cosx = csptr[0]@ sinx = csptr[1]@ - - add r8, r8, r5 @ xptr += step@ + + add r8, r8, r5 @ xptr += step@ VLD2.I32 {D4, D5, D6,D7}, [r8] @ r2 = xptr[0]@ r3 = xptr[1]@ - + VQDMULH.S32 Q10, Q2, Q14 @ MULHIGH(cosx, t0) VQDMULH.S32 Q11, Q3, Q15 @ MULHIGH(sinx, t1) VQDMULH.S32 Q12, Q3, Q14 @ MULHIGH(cosx, t1) VQDMULH.S32 Q13, Q2, Q15 @ MULHIGH(sinx, t0) - + VADD.S32 Q2, Q10, Q11 @ MULHIGH(cosx, t0) + MULHIGH(sinx, t1) VSUB.S32 Q3, Q12, Q13 @ MULHIGH(cosx, t1) - MULHIGH(sinx, t0) - + add r8, r8, r5 @ xptr += step@ VSHR.S32 Q10, Q0, #2 @ t0 = r0 >> 2@ VSHR.S32 Q11, Q1, #2 @ t1 = r1 >> 2@ - + VSUB.S32 Q0, Q10, Q2 @ r0 = t0 - r2@ VSUB.S32 Q1, Q11, Q3 @ r1 = t1 - r3@ VADD.S32 Q2, Q10, Q2 @ r2 = t0 + r2@ VADD.S32 Q3, Q11, Q3 @ r3 = t1 + r3@ - - VLD2.I32 {D8, D9, D10, D11}, [r8] - VLD2.I32 {D28, D29, D30, D31}, [r6]! + + VLD2.I32 {D8, D9, D10, D11}, [r8] + VLD2.I32 {D28, D29, D30, D31}, [r6]! add r8, r8, r5 VQDMULH.S32 Q10, Q4, Q14 @ MULHIGH(cosx, t0) VQDMULH.S32 Q11, Q5, Q15 @ MULHIGH(sinx, t1) VQDMULH.S32 Q12, Q5, Q14 @ MULHIGH(cosx, t1) VQDMULH.S32 Q13, Q4, Q15 @ MULHIGH(sinx, t0) - + VADD.S32 Q8, Q10, Q11 @ MULHIGH(cosx, t0) + MULHIGH(sinx, t1) - VSUB.S32 Q9, Q12, Q13 @ MULHIGH(cosx, t1) - MULHIGH(sinx, t0) - - VLD2.I32 {D12, D13, D14, D15}, [r8] + VSUB.S32 Q9, Q12, Q13 @ MULHIGH(cosx, t1) - MULHIGH(sinx, t0) + + VLD2.I32 {D12, D13, D14, D15}, [r8] VLD2.I32 {D28, D29, D30, D31}, [r6]! - + VQDMULH.S32 Q10, Q6, Q14 @ MULHIGH(cosx, t0) VQDMULH.S32 Q11, Q7, Q15 @ MULHIGH(sinx, t1) VQDMULH.S32 Q12, Q7, Q14 @ MULHIGH(cosx, t1) VQDMULH.S32 Q13, Q6, Q15 @ MULHIGH(sinx, t0) - + VADD.S32 Q6, Q10, Q11 @ MULHIGH(cosx, t0) + MULHIGH(sinx, t1) - VSUB.S32 Q7, Q12, Q13 @ MULHIGH(cosx, t1) - MULHIGH(sinx, t0) - + VSUB.S32 Q7, Q12, Q13 @ MULHIGH(cosx, t1) - MULHIGH(sinx, t0) + VADD.S32 Q4, Q8, Q6 @ r4 = t0 + r6@ VSUB.S32 Q5, Q7, Q9 @ r5 = r7 - t1@ VSUB.S32 Q6, Q8, Q6 @ r6 = t0 - r6@ VADD.S32 Q7, Q7, Q9 @ r7 = r7 + t1@ - + VADD.S32 Q8, Q0, Q5 @ xptr[0] = r0 + r5@ VADD.S32 Q9, Q1, Q6 @ xptr[1] = r1 + r6@ VST2.I32 {D16, D17, D18, D19}, [r8] - + VSUB.S32 Q10, Q2, Q4 @ xptr[0] = r2 - r4@ sub r8, r8, r5 @ xptr -= step@ VSUB.S32 Q11, Q3, Q7 @ xptr[1] = r3 - r7@ VST2.I32 {D20, D21, D22, D23}, [r8] - + VSUB.S32 Q8, Q0, Q5 @ xptr[0] = r0 - r5@ sub r8, r8, r5 @ xptr -= step@ VSUB.S32 Q9, Q1, Q6 @ xptr[1] = r1 - r6@ VST2.I32 {D16, D17, D18, D19}, [r8] - + VADD.S32 Q10, Q2, Q4 @ xptr[0] = r2 + r4@ sub r8, r8, r5 @ xptr -= step@ VADD.S32 Q11, Q3, Q7 @ xptr[1] = r3 + r7@ VST2.I32 {D20, D21, D22, D23}, [r8]! - - subs r4, r4, #4 - bne Radix4FFT_LOOP3 - -Radix4FFT_LOOP2_END: - add r8, r8, r12 - sub r7, r7, #1 + + subs r4, r4, #4 + bne Radix4FFT_LOOP3 + +Radix4FFT_LOOP2_END: + add r8, r8, r12 + sub r7, r7, #1 cmp r7, #0 - bhi Radix4FFT_LOOP2 - -Radix4FFT_LOOP1_END: - add r3, r12, r3 - mov r2, r2, lsl #2 - movs r1, r1, asr #2 - bne Radix4FFT_LOOP1 - -Radix4FFT_END: + bhi Radix4FFT_LOOP2 + +Radix4FFT_LOOP1_END: + add r3, r12, r3 + mov r2, r2, lsl #2 + movs r1, r1, asr #2 + bne Radix4FFT_LOOP1 + +Radix4FFT_END: ldmia sp!, {r4 - r11, pc} - + @ENDP @ |Radix4FFT| .end
\ No newline at end of file diff --git a/media/libstagefright/codecs/aacenc/src/band_nrg.c b/media/libstagefright/codecs/aacenc/src/band_nrg.c index 89c39b6..7501af1 100644 --- a/media/libstagefright/codecs/aacenc/src/band_nrg.c +++ b/media/libstagefright/codecs/aacenc/src/band_nrg.c @@ -37,18 +37,18 @@ void CalcBandEnergy(const Word32 *mdctSpectrum, Word32 *bandEnergySum) { Word32 i, j; - Word32 accuSum = 0; + Word32 accuSum = 0; for (i=0; i<numBands; i++) { - Word32 accu = 0; + Word32 accu = 0; for (j=bandOffset[i]; j<bandOffset[i+1]; j++) accu = L_add(accu, MULHIGH(mdctSpectrum[j], mdctSpectrum[j])); accu = L_add(accu, accu); accuSum = L_add(accuSum, accu); - bandEnergy[i] = accu; + bandEnergy[i] = accu; } - *bandEnergySum = accuSum; + *bandEnergySum = accuSum; } /******************************************************************************** @@ -68,15 +68,15 @@ void CalcBandEnergyMS(const Word32 *mdctSpectrumLeft, { Word32 i, j; - Word32 accuMidSum = 0; - Word32 accuSideSum = 0; - + Word32 accuMidSum = 0; + Word32 accuSideSum = 0; + for(i=0; i<numBands; i++) { Word32 accuMid = 0; - Word32 accuSide = 0; + Word32 accuSide = 0; for (j=bandOffset[i]; j<bandOffset[i+1]; j++) { - Word32 specm, specs; + Word32 specm, specs; Word32 l, r; l = mdctSpectrumLeft[j] >> 1; @@ -86,17 +86,17 @@ void CalcBandEnergyMS(const Word32 *mdctSpectrumLeft, accuMid = L_add(accuMid, MULHIGH(specm, specm)); accuSide = L_add(accuSide, MULHIGH(specs, specs)); } - + accuMid = L_add(accuMid, accuMid); accuSide = L_add(accuSide, accuSide); - bandEnergyMid[i] = accuMid; + bandEnergyMid[i] = accuMid; accuMidSum = L_add(accuMidSum, accuMid); - bandEnergySide[i] = accuSide; + bandEnergySide[i] = accuSide; accuSideSum = L_add(accuSideSum, accuSide); - + } - *bandEnergyMidSum = accuMidSum; - *bandEnergySideSum = accuSideSum; + *bandEnergyMidSum = accuMidSum; + *bandEnergySideSum = accuSideSum; } #endif
\ No newline at end of file diff --git a/media/libstagefright/codecs/aacenc/src/bit_cnt.c b/media/libstagefright/codecs/aacenc/src/bit_cnt.c index 8853efc..9fe511c 100644 --- a/media/libstagefright/codecs/aacenc/src/bit_cnt.c +++ b/media/libstagefright/codecs/aacenc/src/bit_cnt.c @@ -26,14 +26,14 @@ #define HI_LTAB(a) (a>>8) #define LO_LTAB(a) (a & 0xff) -#define EXPAND(a) ((((Word32)(a&0xff00)) << 8)|(Word32)(a&0xff)) +#define EXPAND(a) ((((Word32)(a&0xff00)) << 8)|(Word32)(a&0xff)) /***************************************************************************** * * function name: count1_2_3_4_5_6_7_8_9_10_11 -* description: counts tables 1-11 -* returns: +* description: counts tables 1-11 +* returns: * input: quantized spectrum * output: bitCount for tables 1-11 * @@ -46,51 +46,51 @@ static void count1_2_3_4_5_6_7_8_9_10_11(const Word16 *values, Word32 t0,t1,t2,t3,i; Word32 bc1_2,bc3_4,bc5_6,bc7_8,bc9_10; Word16 bc11,sc; - - bc1_2=0; - bc3_4=0; - bc5_6=0; - bc7_8=0; - bc9_10=0; - bc11=0; - sc=0; + + bc1_2=0; + bc3_4=0; + bc5_6=0; + bc7_8=0; + bc9_10=0; + bc11=0; + sc=0; for(i=0;i<width;i+=4){ - - t0= values[i+0]; - t1= values[i+1]; - t2= values[i+2]; - t3= values[i+3]; - + + t0= values[i+0]; + t1= values[i+1]; + t2= values[i+2]; + t3= values[i+3]; + /* 1,2 */ - bc1_2 = bc1_2 + EXPAND(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]); + bc1_2 = bc1_2 + EXPAND(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]); /* 5,6 */ - bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t0+4][t1+4]); - bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t2+4][t3+4]); + bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t0+4][t1+4]); + bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t2+4][t3+4]); t0=ABS(t0); t1=ABS(t1); t2=ABS(t2); t3=ABS(t3); - - bc3_4 = bc3_4 + EXPAND(huff_ltab3_4[t0][t1][t2][t3]); - - bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); - bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t2][t3]); - - bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); - bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t2][t3]); - + + bc3_4 = bc3_4 + EXPAND(huff_ltab3_4[t0][t1][t2][t3]); + + bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); + bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t2][t3]); + + bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); + bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t2][t3]); + bc11 = bc11 + huff_ltab11[t0][t1]; bc11 = bc11 + huff_ltab11[t2][t3]; - - + + sc = sc + (t0>0) + (t1>0) + (t2>0) + (t3>0); } - + bitCount[1]=extract_h(bc1_2); bitCount[2]=extract_l(bc1_2); bitCount[3]=extract_h(bc3_4) + sc; @@ -108,8 +108,8 @@ static void count1_2_3_4_5_6_7_8_9_10_11(const Word16 *values, /***************************************************************************** * * function name: count3_4_5_6_7_8_9_10_11 -* description: counts tables 3-11 -* returns: +* description: counts tables 3-11 +* returns: * input: quantized spectrum * output: bitCount for tables 3-11 * @@ -122,26 +122,26 @@ static void count3_4_5_6_7_8_9_10_11(const Word16 *values, Word32 t0,t1,t2,t3, i; Word32 bc3_4,bc5_6,bc7_8,bc9_10; Word16 bc11,sc; - - bc3_4=0; - bc5_6=0; - bc7_8=0; - bc9_10=0; - bc11=0; - sc=0; + + bc3_4=0; + bc5_6=0; + bc7_8=0; + bc9_10=0; + bc11=0; + sc=0; for(i=0;i<width;i+=4){ - t0= values[i+0]; - t1= values[i+1]; - t2= values[i+2]; - t3= values[i+3]; - + t0= values[i+0]; + t1= values[i+1]; + t2= values[i+2]; + t3= values[i+3]; + /* 5,6 */ - bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t0+4][t1+4]); - bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t2+4][t3+4]); + bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t0+4][t1+4]); + bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t2+4][t3+4]); t0=ABS(t0); t1=ABS(t1); @@ -149,23 +149,23 @@ static void count3_4_5_6_7_8_9_10_11(const Word16 *values, t3=ABS(t3); - bc3_4 = bc3_4 + EXPAND(huff_ltab3_4[t0][t1][t2][t3]); - - bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); - bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t2][t3]); - - bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); - bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t2][t3]); - + bc3_4 = bc3_4 + EXPAND(huff_ltab3_4[t0][t1][t2][t3]); + + bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); + bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t2][t3]); + + bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); + bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t2][t3]); + bc11 = bc11 + huff_ltab11[t0][t1]; bc11 = bc11 + huff_ltab11[t2][t3]; - - sc = sc + (t0>0) + (t1>0) + (t2>0) + (t3>0); + + sc = sc + (t0>0) + (t1>0) + (t2>0) + (t3>0); } - - bitCount[1]=INVALID_BITCOUNT; - bitCount[2]=INVALID_BITCOUNT; + + bitCount[1]=INVALID_BITCOUNT; + bitCount[2]=INVALID_BITCOUNT; bitCount[3]=extract_h(bc3_4) + sc; bitCount[4]=extract_l(bc3_4) + sc; bitCount[5]=extract_h(bc5_6); @@ -175,7 +175,7 @@ static void count3_4_5_6_7_8_9_10_11(const Word16 *values, bitCount[9]=extract_h(bc9_10) + sc; bitCount[10]=extract_l(bc9_10) + sc; bitCount[11]=bc11 + sc; - + } @@ -183,8 +183,8 @@ static void count3_4_5_6_7_8_9_10_11(const Word16 *values, /***************************************************************************** * * function name: count5_6_7_8_9_10_11 -* description: counts tables 5-11 -* returns: +* description: counts tables 5-11 +* returns: * input: quantized spectrum * output: bitCount for tables 5-11 * @@ -198,33 +198,33 @@ static void count5_6_7_8_9_10_11(const Word16 *values, Word32 bc5_6,bc7_8,bc9_10; Word16 bc11,sc; - bc5_6=0; - bc7_8=0; - bc9_10=0; - bc11=0; - sc=0; + bc5_6=0; + bc7_8=0; + bc9_10=0; + bc11=0; + sc=0; for(i=0;i<width;i+=2){ - t0 = values[i+0]; - t1 = values[i+1]; + t0 = values[i+0]; + t1 = values[i+1]; - bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t0+4][t1+4]); + bc5_6 = bc5_6 + EXPAND(huff_ltab5_6[t0+4][t1+4]); t0=ABS(t0); t1=ABS(t1); - - bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); - bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); + + bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); + bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); bc11 = bc11 + huff_ltab11[t0][t1]; - - + + sc = sc + (t0>0) + (t1>0); } - bitCount[1]=INVALID_BITCOUNT; - bitCount[2]=INVALID_BITCOUNT; - bitCount[3]=INVALID_BITCOUNT; - bitCount[4]=INVALID_BITCOUNT; + bitCount[1]=INVALID_BITCOUNT; + bitCount[2]=INVALID_BITCOUNT; + bitCount[3]=INVALID_BITCOUNT; + bitCount[4]=INVALID_BITCOUNT; bitCount[5]=extract_h(bc5_6); bitCount[6]=extract_l(bc5_6); bitCount[7]=extract_h(bc7_8) + sc; @@ -232,15 +232,15 @@ static void count5_6_7_8_9_10_11(const Word16 *values, bitCount[9]=extract_h(bc9_10) + sc; bitCount[10]=extract_l(bc9_10) + sc; bitCount[11]=bc11 + sc; - + } /***************************************************************************** * * function name: count7_8_9_10_11 -* description: counts tables 7-11 -* returns: +* description: counts tables 7-11 +* returns: * input: quantized spectrum * output: bitCount for tables 7-11 * @@ -253,43 +253,43 @@ static void count7_8_9_10_11(const Word16 *values, Word32 t0,t1, i; Word32 bc7_8,bc9_10; Word16 bc11,sc; - - bc7_8=0; - bc9_10=0; - bc11=0; - sc=0; + + bc7_8=0; + bc9_10=0; + bc11=0; + sc=0; for(i=0;i<width;i+=2){ t0=ABS(values[i+0]); t1=ABS(values[i+1]); - bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); - bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); + bc7_8 = bc7_8 + EXPAND(huff_ltab7_8[t0][t1]); + bc9_10 = bc9_10 + EXPAND(huff_ltab9_10[t0][t1]); bc11 = bc11 + huff_ltab11[t0][t1]; - - + + sc = sc + (t0>0) + (t1>0); } - bitCount[1]=INVALID_BITCOUNT; - bitCount[2]=INVALID_BITCOUNT; - bitCount[3]=INVALID_BITCOUNT; - bitCount[4]=INVALID_BITCOUNT; - bitCount[5]=INVALID_BITCOUNT; - bitCount[6]=INVALID_BITCOUNT; + bitCount[1]=INVALID_BITCOUNT; + bitCount[2]=INVALID_BITCOUNT; + bitCount[3]=INVALID_BITCOUNT; + bitCount[4]=INVALID_BITCOUNT; + bitCount[5]=INVALID_BITCOUNT; + bitCount[6]=INVALID_BITCOUNT; bitCount[7]=extract_h(bc7_8) + sc; bitCount[8]=extract_l(bc7_8) + sc; bitCount[9]=extract_h(bc9_10) + sc; bitCount[10]=extract_l(bc9_10) + sc; bitCount[11]=bc11 + sc; - + } /***************************************************************************** * * function name: count9_10_11 -* description: counts tables 9-11 -* returns: +* description: counts tables 9-11 +* returns: * input: quantized spectrum * output: bitCount for tables 9-11 * @@ -299,45 +299,45 @@ static void count9_10_11(const Word16 *values, Word16 *bitCount) { - Word32 t0,t1,i; + Word32 t0,t1,i; Word32 bc9_10; Word16 bc11,sc; - bc9_10=0; - bc11=0; - sc=0; + bc9_10=0; + bc11=0; + sc=0; for(i=0;i<width;i+=2){ t0=ABS(values[i+0]); t1=ABS(values[i+1]); - - bc9_10 += EXPAND(huff_ltab9_10[t0][t1]); + + bc9_10 += EXPAND(huff_ltab9_10[t0][t1]); bc11 = bc11 + huff_ltab11[t0][t1]; - + sc = sc + (t0>0) + (t1>0); } - bitCount[1]=INVALID_BITCOUNT; - bitCount[2]=INVALID_BITCOUNT; - bitCount[3]=INVALID_BITCOUNT; - bitCount[4]=INVALID_BITCOUNT; - bitCount[5]=INVALID_BITCOUNT; - bitCount[6]=INVALID_BITCOUNT; - bitCount[7]=INVALID_BITCOUNT; - bitCount[8]=INVALID_BITCOUNT; + bitCount[1]=INVALID_BITCOUNT; + bitCount[2]=INVALID_BITCOUNT; + bitCount[3]=INVALID_BITCOUNT; + bitCount[4]=INVALID_BITCOUNT; + bitCount[5]=INVALID_BITCOUNT; + bitCount[6]=INVALID_BITCOUNT; + bitCount[7]=INVALID_BITCOUNT; + bitCount[8]=INVALID_BITCOUNT; bitCount[9]=extract_h(bc9_10) + sc; bitCount[10]=extract_l(bc9_10) + sc; bitCount[11]=bc11 + sc; - + } - + /***************************************************************************** * * function name: count11 -* description: counts table 11 -* returns: +* description: counts table 11 +* returns: * input: quantized spectrum * output: bitCount for table 11 * @@ -347,37 +347,37 @@ static void count9_10_11(const Word16 *values, Word16 *bitCount) { Word32 t0,t1,i; - Word16 bc11,sc; + Word16 bc11,sc; - bc11=0; - sc=0; + bc11=0; + sc=0; for(i=0;i<width;i+=2){ t0=ABS(values[i+0]); t1=ABS(values[i+1]); bc11 = bc11 + huff_ltab11[t0][t1]; - + sc = sc + (t0>0) + (t1>0); } - bitCount[1]=INVALID_BITCOUNT; - bitCount[2]=INVALID_BITCOUNT; - bitCount[3]=INVALID_BITCOUNT; - bitCount[4]=INVALID_BITCOUNT; - bitCount[5]=INVALID_BITCOUNT; - bitCount[6]=INVALID_BITCOUNT; - bitCount[7]=INVALID_BITCOUNT; - bitCount[8]=INVALID_BITCOUNT; - bitCount[9]=INVALID_BITCOUNT; - bitCount[10]=INVALID_BITCOUNT; + bitCount[1]=INVALID_BITCOUNT; + bitCount[2]=INVALID_BITCOUNT; + bitCount[3]=INVALID_BITCOUNT; + bitCount[4]=INVALID_BITCOUNT; + bitCount[5]=INVALID_BITCOUNT; + bitCount[6]=INVALID_BITCOUNT; + bitCount[7]=INVALID_BITCOUNT; + bitCount[8]=INVALID_BITCOUNT; + bitCount[9]=INVALID_BITCOUNT; + bitCount[10]=INVALID_BITCOUNT; bitCount[11]=bc11 + sc; } /***************************************************************************** * * function name: countEsc -* description: counts table 11 (with Esc) -* returns: +* description: counts table 11 (with Esc) +* returns: * input: quantized spectrum * output: bitCount for tables 11 (with Esc) * @@ -388,31 +388,31 @@ static void countEsc(const Word16 *values, Word16 *bitCount) { Word32 t0,t1,t00,t01,i; - Word16 bc11,ec,sc; + Word16 bc11,ec,sc; - bc11=0; - sc=0; - ec=0; + bc11=0; + sc=0; + ec=0; for(i=0;i<width;i+=2){ t0=ABS(values[i+0]); t1=ABS(values[i+1]); - - + + sc = sc + (t0>0) + (t1>0); t00 = min(t0,16); t01 = min(t1,16); bc11 = bc11 + huff_ltab11[t00][t01]; - - + + if(t0 >= 16){ ec = ec + 5; while(sub(t0=(t0 >> 1), 16) >= 0) { ec = ec + 2; } } - - + + if(t1 >= 16){ ec = ec + 5; while(sub(t1=(t1 >> 1), 16) >= 0) { @@ -420,16 +420,16 @@ static void countEsc(const Word16 *values, } } } - bitCount[1]=INVALID_BITCOUNT; - bitCount[2]=INVALID_BITCOUNT; - bitCount[3]=INVALID_BITCOUNT; - bitCount[4]=INVALID_BITCOUNT; - bitCount[5]=INVALID_BITCOUNT; - bitCount[6]=INVALID_BITCOUNT; - bitCount[7]=INVALID_BITCOUNT; - bitCount[8]=INVALID_BITCOUNT; - bitCount[9]=INVALID_BITCOUNT; - bitCount[10]=INVALID_BITCOUNT; + bitCount[1]=INVALID_BITCOUNT; + bitCount[2]=INVALID_BITCOUNT; + bitCount[3]=INVALID_BITCOUNT; + bitCount[4]=INVALID_BITCOUNT; + bitCount[5]=INVALID_BITCOUNT; + bitCount[6]=INVALID_BITCOUNT; + bitCount[7]=INVALID_BITCOUNT; + bitCount[8]=INVALID_BITCOUNT; + bitCount[9]=INVALID_BITCOUNT; + bitCount[10]=INVALID_BITCOUNT; bitCount[11]=bc11 + sc + ec; } @@ -463,7 +463,7 @@ static COUNT_FUNCTION countFuncTable[CODE_BOOK_ESC_LAV+1] = /***************************************************************************** * * function name: bitCount -* description: count bits +* description: count bits * *****************************************************************************/ Word16 bitCount(const Word16 *values, @@ -474,7 +474,7 @@ Word16 bitCount(const Word16 *values, /* check if we can use codebook 0 */ - + if(maxVal == 0) bitCount[0] = 0; else @@ -489,7 +489,7 @@ Word16 bitCount(const Word16 *values, /***************************************************************************** * * function name: codeValues -* description: write huffum bits +* description: write huffum bits * *****************************************************************************/ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF hBitstream) @@ -499,85 +499,85 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF UWord16 codeWord, codeLength; Word16 sign, signLength; - + switch (codeBook) { case CODE_BOOK_ZERO_NO: break; case CODE_BOOK_1_NO: for(i=0; i<width; i+=4) { - t0 = values[i+0]; - t1 = values[i+1]; - t2 = values[i+2]; - t3 = values[i+3]; - codeWord = huff_ctab1[t0+1][t1+1][t2+1][t3+1]; - codeLength = HI_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]); - WriteBits(hBitstream, codeWord, codeLength); + t0 = values[i+0]; + t1 = values[i+1]; + t2 = values[i+2]; + t3 = values[i+3]; + codeWord = huff_ctab1[t0+1][t1+1][t2+1][t3+1]; + codeLength = HI_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]); + WriteBits(hBitstream, codeWord, codeLength); } break; case CODE_BOOK_2_NO: for(i=0; i<width; i+=4) { - t0 = values[i+0]; - t1 = values[i+1]; - t2 = values[i+2]; - t3 = values[i+3]; - codeWord = huff_ctab2[t0+1][t1+1][t2+1][t3+1]; - codeLength = LO_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]); + t0 = values[i+0]; + t1 = values[i+1]; + t2 = values[i+2]; + t3 = values[i+3]; + codeWord = huff_ctab2[t0+1][t1+1][t2+1][t3+1]; + codeLength = LO_LTAB(huff_ltab1_2[t0+1][t1+1][t2+1][t3+1]); WriteBits(hBitstream,codeWord,codeLength); } break; case CODE_BOOK_3_NO: for(i=0; i<width; i+=4) { - sign=0; - signLength=0; - t0 = values[i+0]; - + sign=0; + signLength=0; + t0 = values[i+0]; + if(t0 != 0){ signLength = signLength + 1; - sign = sign << 1; - + sign = sign << 1; + if(t0 < 0){ - sign|=1; + sign|=1; t0=-t0; } } - t1 = values[i+1]; - + t1 = values[i+1]; + if(t1 != 0){ signLength = signLength + 1; - sign = sign << 1; - + sign = sign << 1; + if(t1 < 0){ - sign|=1; + sign|=1; t1=-t1; } } - t2 = values[i+2]; - + t2 = values[i+2]; + if(t2 != 0){ signLength = signLength + 1; - sign = sign << 1; - + sign = sign << 1; + if(t2 < 0){ - sign|=1; + sign|=1; t2=-t2; } } - t3 = values[i+3]; + t3 = values[i+3]; if(t3 != 0){ signLength = signLength + 1; - sign = sign << 1; - + sign = sign << 1; + if(t3 < 0){ - sign|=1; + sign|=1; t3=-t3; } } - codeWord = huff_ctab3[t0][t1][t2][t3]; - codeLength = HI_LTAB(huff_ltab3_4[t0][t1][t2][t3]); + codeWord = huff_ctab3[t0][t1][t2][t3]; + codeLength = HI_LTAB(huff_ltab3_4[t0][t1][t2][t3]); WriteBits(hBitstream,codeWord,codeLength); WriteBits(hBitstream,sign,signLength); } @@ -585,107 +585,107 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF case CODE_BOOK_4_NO: for(i=0; i<width; i+=4) { - sign=0; - signLength=0; - t0 = values[i+0]; - - if(t0 != 0){ + sign=0; + signLength=0; + t0 = values[i+0]; + + if(t0 != 0){ signLength = signLength + 1; - sign = sign << 1; - if(t0 < 0){ - sign|=1; - t0=-t0; + sign = sign << 1; + if(t0 < 0){ + sign|=1; + t0=-t0; } - } - t1 = values[i+1]; - - if(t1 != 0){ + } + t1 = values[i+1]; + + if(t1 != 0){ signLength = signLength + 1; - sign = sign << 1; - - if(t1 < 0){ - sign|=1; - t1=-t1; - } - } - t2 = values[i+2]; - - if(t2 != 0){ + sign = sign << 1; + + if(t1 < 0){ + sign|=1; + t1=-t1; + } + } + t2 = values[i+2]; + + if(t2 != 0){ signLength = signLength + 1; - sign = sign << 1; - - if(t2 < 0){ - sign|=1; - t2=-t2; - } - } - t3 = values[i+3]; - - if(t3 != 0){ + sign = sign << 1; + + if(t2 < 0){ + sign|=1; + t2=-t2; + } + } + t3 = values[i+3]; + + if(t3 != 0){ signLength = signLength + 1; - sign = sign << 1; - - if(t3 < 0){ - sign|=1; - t3=-t3; - } - } - codeWord = huff_ctab4[t0][t1][t2][t3]; - codeLength = LO_LTAB(huff_ltab3_4[t0][t1][t2][t3]); - WriteBits(hBitstream,codeWord,codeLength); - WriteBits(hBitstream,sign,signLength); - } - break; - - case CODE_BOOK_5_NO: - for(i=0; i<width; i+=2) { - t0 = values[i+0]; - t1 = values[i+1]; - codeWord = huff_ctab5[t0+4][t1+4]; - codeLength = HI_LTAB(huff_ltab5_6[t0+4][t1+4]); + sign = sign << 1; + + if(t3 < 0){ + sign|=1; + t3=-t3; + } + } + codeWord = huff_ctab4[t0][t1][t2][t3]; + codeLength = LO_LTAB(huff_ltab3_4[t0][t1][t2][t3]); + WriteBits(hBitstream,codeWord,codeLength); + WriteBits(hBitstream,sign,signLength); + } + break; + + case CODE_BOOK_5_NO: + for(i=0; i<width; i+=2) { + t0 = values[i+0]; + t1 = values[i+1]; + codeWord = huff_ctab5[t0+4][t1+4]; + codeLength = HI_LTAB(huff_ltab5_6[t0+4][t1+4]); WriteBits(hBitstream,codeWord,codeLength); } break; case CODE_BOOK_6_NO: for(i=0; i<width; i+=2) { - t0 = values[i+0]; - t1 = values[i+1]; - codeWord = huff_ctab6[t0+4][t1+4]; - codeLength = LO_LTAB(huff_ltab5_6[t0+4][t1+4]); + t0 = values[i+0]; + t1 = values[i+1]; + codeWord = huff_ctab6[t0+4][t1+4]; + codeLength = LO_LTAB(huff_ltab5_6[t0+4][t1+4]); WriteBits(hBitstream,codeWord,codeLength); } break; case CODE_BOOK_7_NO: for(i=0; i<width; i+=2){ - sign=0; - signLength=0; - t0 = values[i+0]; - + sign=0; + signLength=0; + t0 = values[i+0]; + if(t0 != 0){ signLength = signLength + 1; - sign = sign << 1; - + sign = sign << 1; + if(t0 < 0){ - sign|=1; + sign|=1; t0=-t0; } } - t1 = values[i+1]; - + t1 = values[i+1]; + if(t1 != 0){ signLength = signLength + 1; - sign = sign << 1; - + sign = sign << 1; + if(t1 < 0){ - sign|=1; + sign|=1; t1=-t1; } } - codeWord = huff_ctab7[t0][t1]; - codeLength = HI_LTAB(huff_ltab7_8[t0][t1]); + codeWord = huff_ctab7[t0][t1]; + codeLength = HI_LTAB(huff_ltab7_8[t0][t1]); WriteBits(hBitstream,codeWord,codeLength); WriteBits(hBitstream,sign,signLength); } @@ -693,33 +693,33 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF case CODE_BOOK_8_NO: for(i=0; i<width; i+=2) { - sign=0; - signLength=0; - t0 = values[i+0]; - - if(t0 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t0 < 0){ - sign|=1; - t0=-t0; - } - } - - t1 = values[i+1]; - - if(t1 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t1 < 0){ - sign|=1; - t1=-t1; - } - } - codeWord = huff_ctab8[t0][t1]; - codeLength = LO_LTAB(huff_ltab7_8[t0][t1]); + sign=0; + signLength=0; + t0 = values[i+0]; + + if(t0 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t0 < 0){ + sign|=1; + t0=-t0; + } + } + + t1 = values[i+1]; + + if(t1 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t1 < 0){ + sign|=1; + t1=-t1; + } + } + codeWord = huff_ctab8[t0][t1]; + codeLength = LO_LTAB(huff_ltab7_8[t0][t1]); WriteBits(hBitstream,codeWord,codeLength); WriteBits(hBitstream,sign,signLength); } @@ -727,33 +727,33 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF case CODE_BOOK_9_NO: for(i=0; i<width; i+=2) { - sign=0; - signLength=0; - t0 = values[i+0]; - - if(t0 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t0 < 0){ - sign|=1; - t0=-t0; - } - } - - t1 = values[i+1]; - - if(t1 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t1 < 0){ - sign|=1; - t1=-t1; - } - } - codeWord = huff_ctab9[t0][t1]; - codeLength = HI_LTAB(huff_ltab9_10[t0][t1]); + sign=0; + signLength=0; + t0 = values[i+0]; + + if(t0 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t0 < 0){ + sign|=1; + t0=-t0; + } + } + + t1 = values[i+1]; + + if(t1 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t1 < 0){ + sign|=1; + t1=-t1; + } + } + codeWord = huff_ctab9[t0][t1]; + codeLength = HI_LTAB(huff_ltab9_10[t0][t1]); WriteBits(hBitstream,codeWord,codeLength); WriteBits(hBitstream,sign,signLength); } @@ -761,33 +761,33 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF case CODE_BOOK_10_NO: for(i=0; i<width; i+=2) { - sign=0; - signLength=0; - t0 = values[i+0]; - - if(t0 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t0 < 0){ - sign|=1; - t0=-t0; - } - } - - t1 = values[i+1]; - - if(t1 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t1 < 0){ - sign|=1; - t1=-t1; - } - } - codeWord = huff_ctab10[t0][t1]; - codeLength = LO_LTAB(huff_ltab9_10[t0][t1]); + sign=0; + signLength=0; + t0 = values[i+0]; + + if(t0 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t0 < 0){ + sign|=1; + t0=-t0; + } + } + + t1 = values[i+1]; + + if(t1 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t1 < 0){ + sign|=1; + t1=-t1; + } + } + codeWord = huff_ctab10[t0][t1]; + codeLength = LO_LTAB(huff_ltab9_10[t0][t1]); WriteBits(hBitstream,codeWord,codeLength); WriteBits(hBitstream,sign,signLength); } @@ -795,45 +795,45 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF case CODE_BOOK_ESC_NO: for(i=0; i<width; i+=2) { - sign=0; - signLength=0; - t0 = values[i+0]; - - if(t0 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t0 < 0){ - sign|=1; - t0=-t0; - } - } - - t1 = values[i+1]; - - if(t1 != 0){ - signLength = signLength + 1; - sign = sign << 1; - - if(t1 < 0){ - sign|=1; - t1=-t1; - } - } + sign=0; + signLength=0; + t0 = values[i+0]; + + if(t0 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t0 < 0){ + sign|=1; + t0=-t0; + } + } + + t1 = values[i+1]; + + if(t1 != 0){ + signLength = signLength + 1; + sign = sign << 1; + + if(t1 < 0){ + sign|=1; + t1=-t1; + } + } t00 = min(t0,16); t01 = min(t1,16); - codeWord = huff_ctab11[t00][t01]; - codeLength = huff_ltab11[t00][t01]; + codeWord = huff_ctab11[t00][t01]; + codeLength = huff_ltab11[t00][t01]; WriteBits(hBitstream,codeWord,codeLength); WriteBits(hBitstream,sign,signLength); - + if(t0 >= 16){ Word16 n, p; - n=0; - p=t0; + n=0; + p=t0; while(sub(p=(p >> 1), 16) >= 0){ - + WriteBits(hBitstream,1,1); n = n + 1; } @@ -841,13 +841,13 @@ Word16 codeValues(Word16 *values, Word16 width, Word16 codeBook, HANDLE_BIT_BUF n = n + 4; WriteBits(hBitstream,(t0 - (1 << n)),n); } - + if(t1 >= 16){ Word16 n, p; - n=0; - p=t1; + n=0; + p=t1; while(sub(p=(p >> 1), 16) >= 0){ - + WriteBits(hBitstream,1,1); n = n + 1; } @@ -871,15 +871,15 @@ Word16 bitCountScalefactorDelta(Word16 delta) Word16 codeScalefactorDelta(Word16 delta, HANDLE_BIT_BUF hBitstream) { - Word32 codeWord; + Word32 codeWord; Word16 codeLength; - - + + if(delta > CODE_BOOK_SCF_LAV || delta < -CODE_BOOK_SCF_LAV) return(1); - - codeWord = huff_ctabscf[delta + CODE_BOOK_SCF_LAV]; - codeLength = huff_ltabscf[delta + CODE_BOOK_SCF_LAV]; + + codeWord = huff_ctabscf[delta + CODE_BOOK_SCF_LAV]; + codeLength = huff_ltabscf[delta + CODE_BOOK_SCF_LAV]; WriteBits(hBitstream,codeWord,codeLength); return(0); } diff --git a/media/libstagefright/codecs/aacenc/src/bitbuffer.c b/media/libstagefright/codecs/aacenc/src/bitbuffer.c index ef13c13..5615ac3 100644 --- a/media/libstagefright/codecs/aacenc/src/bitbuffer.c +++ b/media/libstagefright/codecs/aacenc/src/bitbuffer.c @@ -32,15 +32,15 @@ static void updateBitBufWordPtr(HANDLE_BIT_BUF hBitBuf, UWord8 **pBitBufWord, Word16 cnt) { - *pBitBufWord += cnt; + *pBitBufWord += cnt; + - if(*pBitBufWord > hBitBuf->pBitBufEnd) { - *pBitBufWord -= (hBitBuf->pBitBufEnd - hBitBuf->pBitBufBase + 1); + *pBitBufWord -= (hBitBuf->pBitBufEnd - hBitBuf->pBitBufBase + 1); } - + if(*pBitBufWord < hBitBuf->pBitBufBase) { - *pBitBufWord += (hBitBuf->pBitBufEnd - hBitBuf->pBitBufBase + 1); + *pBitBufWord += (hBitBuf->pBitBufEnd - hBitBuf->pBitBufBase + 1); } } @@ -57,18 +57,18 @@ HANDLE_BIT_BUF CreateBitBuffer(HANDLE_BIT_BUF hBitBuf, { assert(bitBufSize*8 <= 32768); - hBitBuf->pBitBufBase = pBitBufBase; - hBitBuf->pBitBufEnd = pBitBufBase + bitBufSize - 1; + hBitBuf->pBitBufBase = pBitBufBase; + hBitBuf->pBitBufEnd = pBitBufBase + bitBufSize - 1; - hBitBuf->pWriteNext = pBitBufBase; + hBitBuf->pWriteNext = pBitBufBase; hBitBuf->cache = 0; - - hBitBuf->wBitPos = 0; - hBitBuf->cntBits = 0; - - hBitBuf->size = (bitBufSize << 3); - hBitBuf->isValid = 1; + + hBitBuf->wBitPos = 0; + hBitBuf->cntBits = 0; + + hBitBuf->size = (bitBufSize << 3); + hBitBuf->isValid = 1; return hBitBuf; } @@ -82,8 +82,8 @@ HANDLE_BIT_BUF CreateBitBuffer(HANDLE_BIT_BUF hBitBuf, void DeleteBitBuffer(HANDLE_BIT_BUF *hBitBuf) { if(*hBitBuf) - (*hBitBuf)->isValid = 0; - *hBitBuf = NULL; + (*hBitBuf)->isValid = 0; + *hBitBuf = NULL; } /***************************************************************************** @@ -96,15 +96,15 @@ void ResetBitBuf(HANDLE_BIT_BUF hBitBuf, UWord8 *pBitBufBase, Word16 bitBufSize) { - hBitBuf->pBitBufBase = pBitBufBase; - hBitBuf->pBitBufEnd = pBitBufBase + bitBufSize - 1; + hBitBuf->pBitBufBase = pBitBufBase; + hBitBuf->pBitBufEnd = pBitBufBase + bitBufSize - 1; + - - hBitBuf->pWriteNext = pBitBufBase; + hBitBuf->pWriteNext = pBitBufBase; + + hBitBuf->wBitPos = 0; + hBitBuf->cntBits = 0; - hBitBuf->wBitPos = 0; - hBitBuf->cntBits = 0; - hBitBuf->cache = 0; } @@ -117,7 +117,7 @@ void ResetBitBuf(HANDLE_BIT_BUF hBitBuf, void CopyBitBuf(HANDLE_BIT_BUF hBitBufSrc, HANDLE_BIT_BUF hBitBufDst) { - *hBitBufDst = *hBitBufSrc; + *hBitBufDst = *hBitBufSrc; } /***************************************************************************** @@ -148,25 +148,25 @@ Word16 WriteBits(HANDLE_BIT_BUF hBitBuf, if(noBitsToWrite == 0) return noBitsToWrite; - hBitBuf->cntBits += noBitsToWrite; + hBitBuf->cntBits += noBitsToWrite; wBitPos = hBitBuf->wBitPos; wBitPos += noBitsToWrite; - writeValue <<= 32 - wBitPos; + writeValue <<= 32 - wBitPos; writeValue |= hBitBuf->cache; - - while (wBitPos >= 8) + + while (wBitPos >= 8) { UWord8 tmp; tmp = (UWord8)((writeValue >> 24) & 0xFF); - - *hBitBuf->pWriteNext++ = tmp; + + *hBitBuf->pWriteNext++ = tmp; writeValue <<= 8; wBitPos -= 8; } - + hBitBuf->wBitPos = wBitPos; hBitBuf->cache = writeValue; - + return noBitsToWrite; } diff --git a/media/libstagefright/codecs/aacenc/src/bitenc.c b/media/libstagefright/codecs/aacenc/src/bitenc.c index ea34407..fcc12dd 100644 --- a/media/libstagefright/codecs/aacenc/src/bitenc.c +++ b/media/libstagefright/codecs/aacenc/src/bitenc.c @@ -46,7 +46,7 @@ static Word32 encodeSpectralData(Word16 *sfbOffset, Word16 i,sfb; Word16 dbgVal; SECTION_INFO* psectioninfo; - dbgVal = GetBitsAvail(hBitStream); + dbgVal = GetBitsAvail(hBitStream); for(i=0; i<sectionData->noOfSections; i++) { psectioninfo = &(sectionData->sectionInfo[i]); @@ -100,7 +100,7 @@ static void encodeIcsInfo(Word16 blockType, WriteBits(hBitStream,blockType,2); WriteBits(hBitStream,windowShape,1); - + switch(blockType){ case LONG_WINDOW: case START_WINDOW: @@ -137,30 +137,30 @@ static Word32 encodeSectionData(SECTION_DATA *sectionData, Word16 sectLen; Word16 i; Word16 dbgVal=GetBitsAvail(hBitStream); - - + + switch(sectionData->blockType) { case LONG_WINDOW: case START_WINDOW: case STOP_WINDOW: - sectEscapeVal = SECT_ESC_VAL_LONG; - sectLenBits = SECT_BITS_LONG; + sectEscapeVal = SECT_ESC_VAL_LONG; + sectLenBits = SECT_BITS_LONG; break; case SHORT_WINDOW: - sectEscapeVal = SECT_ESC_VAL_SHORT; - sectLenBits = SECT_BITS_SHORT; + sectEscapeVal = SECT_ESC_VAL_SHORT; + sectLenBits = SECT_BITS_SHORT; break; } for(i=0;i<sectionData->noOfSections;i++) { WriteBits(hBitStream,sectionData->sectionInfo[i].codeBook,4); - sectLen = sectionData->sectionInfo[i].sfbCnt; + sectLen = sectionData->sectionInfo[i].sfbCnt; while(sectLen >= sectEscapeVal) { - + WriteBits(hBitStream,sectEscapeVal,sectLenBits); sectLen = sectLen - sectEscapeVal; } @@ -183,24 +183,24 @@ static Word32 encodeScaleFactorData(UWord16 *maxValueInSfb, { Word16 i,j,lastValScf,deltaScf; Word16 dbgVal = GetBitsAvail(hBitStream); - SECTION_INFO* psectioninfo; + SECTION_INFO* psectioninfo; - lastValScf=scalefac[sectionData->firstScf]; + lastValScf=scalefac[sectionData->firstScf]; for(i=0;i<sectionData->noOfSections;i++){ - psectioninfo = &(sectionData->sectionInfo[i]); + psectioninfo = &(sectionData->sectionInfo[i]); if (psectioninfo->codeBook != CODE_BOOK_ZERO_NO){ for (j=psectioninfo->sfbStart; j<psectioninfo->sfbStart+psectioninfo->sfbCnt; j++){ - + if(maxValueInSfb[j] == 0) { - deltaScf = 0; + deltaScf = 0; } else { deltaScf = lastValScf - scalefac[j]; - lastValScf = scalefac[j]; + lastValScf = scalefac[j]; } - + if(codeScalefactorDelta(deltaScf,hBitStream)){ return(1); } @@ -227,7 +227,7 @@ static void encodeMSInfo(Word16 sfbCnt, { Word16 sfb, sfbOff; - + switch(msDigest) { case MS_NONE: @@ -242,7 +242,7 @@ static void encodeMSInfo(Word16 sfbCnt, WriteBits(hBitStream,SI_MS_MASK_SOME,2); for(sfbOff = 0; sfbOff < sfbCnt; sfbOff+=grpSfb) { for(sfb=0; sfb<maxSfb; sfb++) { - + if(jsFlags[sfbOff+sfb] & MS_ON) { WriteBits(hBitStream,1,1); } @@ -272,7 +272,7 @@ static void encodeTnsData(TNS_INFO tnsInfo, Word16 coefBits; Flag isShort; - + if (blockType==2) { isShort = 1; numOfWindows = TRANS_FAC; @@ -282,52 +282,52 @@ static void encodeTnsData(TNS_INFO tnsInfo, numOfWindows = 1; } - tnsPresent=0; + tnsPresent=0; for (i=0; i<numOfWindows; i++) { - + if (tnsInfo.tnsActive[i]) { - tnsPresent=1; + tnsPresent=1; } } - + if (tnsPresent==0) { WriteBits(hBitStream,0,1); } else{ /* there is data to be written*/ WriteBits(hBitStream,1,1); /*data_present */ for (i=0; i<numOfWindows; i++) { - + WriteBits(hBitStream,tnsInfo.tnsActive[i],(isShort?1:2)); - + if (tnsInfo.tnsActive[i]) { - + WriteBits(hBitStream,((tnsInfo.coefRes[i] - 4)==0?1:0),1); - + WriteBits(hBitStream,tnsInfo.length[i],(isShort?4:6)); - + WriteBits(hBitStream,tnsInfo.order[i],(isShort?3:5)); - + if (tnsInfo.order[i]){ WriteBits(hBitStream, FILTER_DIRECTION, 1); - + if(tnsInfo.coefRes[i] == 4) { - coefBits = 3; + coefBits = 3; for(k=0; k<tnsInfo.order[i]; k++) { - + if (tnsInfo.coef[i*TNS_MAX_ORDER_SHORT+k] > 3 || tnsInfo.coef[i*TNS_MAX_ORDER_SHORT+k] < -4) { - coefBits = 4; + coefBits = 4; break; } } } else { - coefBits = 2; + coefBits = 2; for(k=0; k<tnsInfo.order[i]; k++) { - + if (tnsInfo.coef[i*TNS_MAX_ORDER_SHORT+k] > 1 || tnsInfo.coef[i*TNS_MAX_ORDER_SHORT+k] < -2) { - coefBits = 3; + coefBits = 3; break; } } @@ -335,7 +335,7 @@ static void encodeTnsData(TNS_INFO tnsInfo, WriteBits(hBitStream, tnsInfo.coefRes[i] - coefBits, 1); /*coef_compres*/ for (k=0; k<tnsInfo.order[i]; k++ ) { static const Word16 rmask[] = {0,1,3,7,15}; - + WriteBits(hBitStream,tnsInfo.coef[i*TNS_MAX_ORDER_SHORT+k] & rmask[coefBits],coefBits); } } @@ -397,7 +397,7 @@ writeIndividualChannelStream(Flag commonWindow, encodeGlobalGain(globalGain, logNorm,scf[sectionData->firstScf], hBitStream); - + if(!commonWindow) { encodeIcsInfo(sectionData->blockType, windowShape, groupingMask, sectionData, hBitStream); } @@ -536,7 +536,7 @@ static void writeFillElement( const UWord8 *ancBytes, Write fill Element(s): amount of a fill element can be 7+X*8 Bits, X element of [0..270] */ - + while(totFillBits >= (3+4)) { cnt = min(((totFillBits - (3+4)) >> 3), ((1<<4)-1)); @@ -545,7 +545,7 @@ static void writeFillElement( const UWord8 *ancBytes, totFillBits = totFillBits - (3+4); - + if ((cnt == (1<<4)-1)) { esc_count = min( ((totFillBits >> 3) - ((1<<4)-1)), (1<<8)-1); @@ -555,7 +555,7 @@ static void writeFillElement( const UWord8 *ancBytes, } for(i=0;i<cnt;i++) { - + if(ancBytes) WriteBits(hBitStream, *ancBytes++,8); else @@ -576,7 +576,7 @@ Word16 WriteBitstream (HANDLE_BIT_BUF hBitStream, ELEMENT_INFO elInfo, QC_OUT *qcOut, PSY_OUT *psyOut, - Word16 *globUsedBits, + Word16 *globUsedBits, const UWord8 *ancBytes, Word16 sampindex ) /* returns error code */ @@ -586,7 +586,7 @@ Word16 WriteBitstream (HANDLE_BIT_BUF hBitStream, Word16 frameBits=0; /* struct bitbuffer bsWriteCopy; */ - bitMarkUp = GetBitsAvail(hBitStream); + bitMarkUp = GetBitsAvail(hBitStream); if(qcOut->qcElement.adtsUsed) /* write adts header*/ { WriteBits(hBitStream, 0xFFF, 12); /* 12 bit Syncword */ @@ -601,23 +601,23 @@ Word16 WriteBitstream (HANDLE_BIT_BUF hBitStream, 6 channels or less, else a channel configuration should be written */ WriteBits(hBitStream, 0, 1); /* original/copy */ - WriteBits(hBitStream, 0, 1); /* home */ - + WriteBits(hBitStream, 0, 1); /* home */ + /* Variable ADTS header */ WriteBits(hBitStream, 0, 1); /* copyr. id. bit */ WriteBits(hBitStream, 0, 1); /* copyr. id. start */ WriteBits(hBitStream, *globUsedBits >> 3, 13); WriteBits(hBitStream, 0x7FF, 11); /* buffer fullness (0x7FF for VBR) */ - WriteBits(hBitStream, 0, 2); /* raw data blocks (0+1=1) */ + WriteBits(hBitStream, 0, 2); /* raw data blocks (0+1=1) */ } - *globUsedBits=0; + *globUsedBits=0; { Word16 *sfbOffset[2]; TNS_INFO tnsInfo[2]; - elementUsedBits = 0; + elementUsedBits = 0; switch (elInfo.elType) { @@ -636,7 +636,7 @@ Word16 WriteBitstream (HANDLE_BIT_BUF hBitStream, { Word16 msDigest; Word16 *msFlags = psyOut->psyOutElement.toolsInfo.msMask; - msDigest = psyOut->psyOutElement.toolsInfo.msDigest; + msDigest = psyOut->psyOutElement.toolsInfo.msDigest; sfbOffset[0] = psyOut->psyOutChannel[elInfo.ChannelIndex[0]].sfbOffsets; sfbOffset[1] = @@ -668,20 +668,20 @@ Word16 WriteBitstream (HANDLE_BIT_BUF hBitStream, } writeFillElement(NULL, - qcOut->totFillBits, + qcOut->totFillBits, hBitStream); WriteBits(hBitStream,ID_END,3); /* byte alignement */ - WriteBits(hBitStream,0, (8 - (hBitStream->cntBits & 7)) & 7); - + WriteBits(hBitStream,0, (8 - (hBitStream->cntBits & 7)) & 7); + *globUsedBits = *globUsedBits- bitMarkUp; - bitMarkUp = GetBitsAvail(hBitStream); + bitMarkUp = GetBitsAvail(hBitStream); *globUsedBits = *globUsedBits + bitMarkUp; frameBits = frameBits + *globUsedBits; - + if (frameBits != (qcOut->totStaticBitsUsed+qcOut->totDynBitsUsed + qcOut->totAncBitsUsed + qcOut->totFillBits + qcOut->alignBits)) { return(-1); diff --git a/media/libstagefright/codecs/aacenc/src/block_switch.c b/media/libstagefright/codecs/aacenc/src/block_switch.c index d54e32f..47fd15e 100644 --- a/media/libstagefright/codecs/aacenc/src/block_switch.c +++ b/media/libstagefright/codecs/aacenc/src/block_switch.c @@ -52,7 +52,7 @@ CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, IIR high pass coeffs */ Word32 hiPassCoeff[BLOCK_SWITCHING_IIR_LEN] = { - 0xbec8b439, 0x609d4952 /* -0.5095f, 0.7548f */ + 0xbec8b439, 0x609d4952 /* -0.5095f, 0.7548f */ }; static const Word32 accWindowNrgFac = 0x26666666; /* factor for accumulating filtered window energies 0.3 */ @@ -76,8 +76,8 @@ Word16 InitBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, const Word32 bitRate, const Word16 nChannels) { /* select attackRatio */ - - if ((sub(nChannels,1)==0 && L_sub(bitRate, 24000) > 0) || + + if ((sub(nChannels,1)==0 && L_sub(bitRate, 24000) > 0) || (sub(nChannels,1)>0 && bitRate > (nChannels * 16000))) { blockSwitchingControl->invAttackRatio = invAttackRatioHighBr; } @@ -116,7 +116,7 @@ Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, /* Reset grouping info */ for (i=0; i<TRANS_FAC; i++) { - blockSwitchingControl->groupLen[i] = 0; + blockSwitchingControl->groupLen[i] = 0; } @@ -125,21 +125,21 @@ Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, &blockSwitchingControl->attackIndex, BLOCK_SWITCH_WINDOWS); - blockSwitchingControl->attackIndex = blockSwitchingControl->lastAttackIndex; + blockSwitchingControl->attackIndex = blockSwitchingControl->lastAttackIndex; /* Set grouping info */ - blockSwitchingControl->noOfGroups = MAX_NO_OF_GROUPS; + blockSwitchingControl->noOfGroups = MAX_NO_OF_GROUPS; for (i=0; i<MAX_NO_OF_GROUPS; i++) { - blockSwitchingControl->groupLen[i] = suggestedGroupingTable[blockSwitchingControl->attackIndex][i]; + blockSwitchingControl->groupLen[i] = suggestedGroupingTable[blockSwitchingControl->attackIndex][i]; } - + /* if the samplerate is less than 16000, it should be all the short block, avoid pre&post echo */ if(sampleRate >= 16000) { /* Save current window energy as last window energy */ for (w=0; w<BLOCK_SWITCH_WINDOWS; w++) { - blockSwitchingControl->windowNrg[0][w] = blockSwitchingControl->windowNrg[1][w]; - blockSwitchingControl->windowNrgF[0][w] = blockSwitchingControl->windowNrgF[1][w]; + blockSwitchingControl->windowNrg[0][w] = blockSwitchingControl->windowNrg[1][w]; + blockSwitchingControl->windowNrgF[0][w] = blockSwitchingControl->windowNrgF[1][w]; } @@ -147,10 +147,10 @@ Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, CalcWindowEnergy(blockSwitchingControl, timeSignal, chIncrement, BLOCK_SWITCH_WINDOW_LEN); /* reset attack */ - blockSwitchingControl->attack = FALSE; + blockSwitchingControl->attack = FALSE; - enMax = 0; - enM1 = blockSwitchingControl->windowNrgF[0][BLOCK_SWITCH_WINDOWS-1]; + enMax = 0; + enM1 = blockSwitchingControl->windowNrgF[0][BLOCK_SWITCH_WINDOWS-1]; for (w=0; w<BLOCK_SWITCH_WINDOWS; w++) { Word32 enM1_Tmp, accWindowNrg_Tmp, windowNrgF_Tmp; @@ -172,15 +172,15 @@ Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, /* if the energy with the ratio is bigger than the average, and the attack and short block */ if ((fixmul(windowNrgF_Tmp, blockSwitchingControl->invAttackRatio) >> windowNrgF_Shf) > blockSwitchingControl->accWindowNrg ) { - blockSwitchingControl->attack = TRUE; - blockSwitchingControl->lastAttackIndex = w; + blockSwitchingControl->attack = TRUE; + blockSwitchingControl->lastAttackIndex = w; } - enM1 = blockSwitchingControl->windowNrgF[1][w]; + enM1 = blockSwitchingControl->windowNrgF[1][w]; enMax = max(enMax, enM1); } if (enMax < minAttackNrg) { - blockSwitchingControl->attack = FALSE; + blockSwitchingControl->attack = FALSE; } } else @@ -188,22 +188,22 @@ Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, blockSwitchingControl->attack = TRUE; } - /* Check if attack spreads over frame border */ + /* Check if attack spreads over frame border */ if ((!blockSwitchingControl->attack) && (blockSwitchingControl->lastattack)) { - + if (blockSwitchingControl->attackIndex == TRANS_FAC-1) { - blockSwitchingControl->attack = TRUE; + blockSwitchingControl->attack = TRUE; } - blockSwitchingControl->lastattack = FALSE; + blockSwitchingControl->lastattack = FALSE; } else { - blockSwitchingControl->lastattack = blockSwitchingControl->attack; + blockSwitchingControl->lastattack = blockSwitchingControl->attack; } - blockSwitchingControl->windowSequence = blockSwitchingControl->nextwindowSequence; + blockSwitchingControl->windowSequence = blockSwitchingControl->nextwindowSequence; + - if (blockSwitchingControl->attack) { blockSwitchingControl->nextwindowSequence = SHORT_WINDOW; } @@ -211,27 +211,27 @@ Word16 BlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, blockSwitchingControl->nextwindowSequence = LONG_WINDOW; } - /* update short block group */ + /* update short block group */ if (blockSwitchingControl->nextwindowSequence == SHORT_WINDOW) { - + if (blockSwitchingControl->windowSequence== LONG_WINDOW) { - blockSwitchingControl->windowSequence = START_WINDOW; + blockSwitchingControl->windowSequence = START_WINDOW; } - + if (blockSwitchingControl->windowSequence == STOP_WINDOW) { - blockSwitchingControl->windowSequence = SHORT_WINDOW; - blockSwitchingControl->noOfGroups = 3; - blockSwitchingControl->groupLen[0] = 3; - blockSwitchingControl->groupLen[1] = 3; - blockSwitchingControl->groupLen[2] = 2; + blockSwitchingControl->windowSequence = SHORT_WINDOW; + blockSwitchingControl->noOfGroups = 3; + blockSwitchingControl->groupLen[0] = 3; + blockSwitchingControl->groupLen[1] = 3; + blockSwitchingControl->groupLen[2] = 2; } } - /* update block type */ + /* update block type */ if (blockSwitchingControl->nextwindowSequence == LONG_WINDOW) { - + if (blockSwitchingControl->windowSequence == SHORT_WINDOW) { - blockSwitchingControl->nextwindowSequence = STOP_WINDOW; + blockSwitchingControl->nextwindowSequence = STOP_WINDOW; } } @@ -252,17 +252,17 @@ static Word32 SrchMaxWithIndex(const Word32 in[], Word16 *index, Word16 n) Word32 i, idx; /* Search maximum value in array and return index and value */ - max = 0; - idx = 0; + max = 0; + idx = 0; for (i = 0; i < n; i++) { - + if (in[i+1] > max) { - max = in[i+1]; - idx = i; + max = in[i+1]; + idx = i; } } - *index = idx; + *index = idx; return(max); } @@ -292,11 +292,11 @@ Word32 CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, states1 = blockSwitchingControl->iirStates[1]; Coeff0 = hiPassCoeff[0]; Coeff1 = hiPassCoeff[1]; - tidx = 0; + tidx = 0; for (w=0; w < BLOCK_SWITCH_WINDOWS; w++) { - accuUE = 0; - accuFE = 0; + accuUE = 0; + accuFE = 0; for(i=0; i<windowLen; i++) { Word32 accu1, accu2, accu3; @@ -309,16 +309,16 @@ Word32 CalcWindowEnergy(BLOCK_SWITCHING_CONTROL *blockSwitchingControl, accu3 = accu1 - states0; out = accu3 - accu2; - states0 = accu1; - states1 = out; + states0 = accu1; + states1 = out; - tempFiltered = extract_h(out); + tempFiltered = extract_h(out); accuUE += (tempUnfiltered * tempUnfiltered) >> ENERGY_SHIFT; accuFE += (tempFiltered * tempFiltered) >> ENERGY_SHIFT; } - blockSwitchingControl->windowNrg[1][w] = accuUE; - blockSwitchingControl->windowNrgF[1][w] = accuFE; + blockSwitchingControl->windowNrg[1][w] = accuUE; + blockSwitchingControl->windowNrgF[1][w] = accuFE; } @@ -346,8 +346,8 @@ static Word16 IIRFilter(const Word16 in, const Word32 coeff[], Word32 states[]) accu2 = fixmul( coeff[0], states[1] ); out = accu3 - accu2; - states[0] = accu1; - states[1] = out; + states[0] = accu1; + states[1] = out; return round16(out); } @@ -374,54 +374,54 @@ Word16 SyncBlockSwitching(BLOCK_SWITCHING_CONTROL *blockSwitchingControlLeft, const Word16 nChannels) { Word16 i; - Word16 patchType = LONG_WINDOW; + Word16 patchType = LONG_WINDOW; + - if (nChannels == 1) { /* Mono */ if (blockSwitchingControlLeft->windowSequence != SHORT_WINDOW) { - blockSwitchingControlLeft->noOfGroups = 1; - blockSwitchingControlLeft->groupLen[0] = 1; + blockSwitchingControlLeft->noOfGroups = 1; + blockSwitchingControlLeft->groupLen[0] = 1; for (i=1; i<TRANS_FAC; i++) { - blockSwitchingControlLeft->groupLen[i] = 0; + blockSwitchingControlLeft->groupLen[i] = 0; } } } else { /* Stereo common Window */ - patchType = synchronizedBlockTypeTable[patchType][blockSwitchingControlLeft->windowSequence]; - patchType = synchronizedBlockTypeTable[patchType][blockSwitchingControlRight->windowSequence]; + patchType = synchronizedBlockTypeTable[patchType][blockSwitchingControlLeft->windowSequence]; + patchType = synchronizedBlockTypeTable[patchType][blockSwitchingControlRight->windowSequence]; /* Set synchronized Blocktype */ - blockSwitchingControlLeft->windowSequence = patchType; - blockSwitchingControlRight->windowSequence = patchType; + blockSwitchingControlLeft->windowSequence = patchType; + blockSwitchingControlRight->windowSequence = patchType; - /* Synchronize grouping info */ + /* Synchronize grouping info */ if(patchType != SHORT_WINDOW) { /* Long Blocks */ /* Set grouping info */ - blockSwitchingControlLeft->noOfGroups = 1; - blockSwitchingControlRight->noOfGroups = 1; - blockSwitchingControlLeft->groupLen[0] = 1; - blockSwitchingControlRight->groupLen[0] = 1; + blockSwitchingControlLeft->noOfGroups = 1; + blockSwitchingControlRight->noOfGroups = 1; + blockSwitchingControlLeft->groupLen[0] = 1; + blockSwitchingControlRight->groupLen[0] = 1; for (i=1; i<TRANS_FAC; i++) { - blockSwitchingControlLeft->groupLen[i] = 0; - blockSwitchingControlRight->groupLen[i] = 0; + blockSwitchingControlLeft->groupLen[i] = 0; + blockSwitchingControlRight->groupLen[i] = 0; } } else { - + if (blockSwitchingControlLeft->maxWindowNrg > blockSwitchingControlRight->maxWindowNrg) { /* Left Channel wins */ - blockSwitchingControlRight->noOfGroups = blockSwitchingControlLeft->noOfGroups; + blockSwitchingControlRight->noOfGroups = blockSwitchingControlLeft->noOfGroups; for (i=0; i<TRANS_FAC; i++) { - blockSwitchingControlRight->groupLen[i] = blockSwitchingControlLeft->groupLen[i]; + blockSwitchingControlRight->groupLen[i] = blockSwitchingControlLeft->groupLen[i]; } } else { /* Right Channel wins */ - blockSwitchingControlLeft->noOfGroups = blockSwitchingControlRight->noOfGroups; + blockSwitchingControlLeft->noOfGroups = blockSwitchingControlRight->noOfGroups; for (i=0; i<TRANS_FAC; i++) { - blockSwitchingControlLeft->groupLen[i] = blockSwitchingControlRight->groupLen[i]; + blockSwitchingControlLeft->groupLen[i] = blockSwitchingControlRight->groupLen[i]; } } } diff --git a/media/libstagefright/codecs/aacenc/src/channel_map.c b/media/libstagefright/codecs/aacenc/src/channel_map.c index 2d41f8c..f6552ed 100644 --- a/media/libstagefright/codecs/aacenc/src/channel_map.c +++ b/media/libstagefright/codecs/aacenc/src/channel_map.c @@ -29,32 +29,32 @@ static const Word16 maxChannelBits = MAXBITS_COEF; static Word16 initElement(ELEMENT_INFO* elInfo, ELEMENT_TYPE elType) { - Word16 error=0; + Word16 error=0; - elInfo->elType=elType; + elInfo->elType=elType; switch(elInfo->elType) { case ID_SCE: - elInfo->nChannelsInEl=1; + elInfo->nChannelsInEl=1; - elInfo->ChannelIndex[0]=0; + elInfo->ChannelIndex[0]=0; - elInfo->instanceTag=0; + elInfo->instanceTag=0; break; case ID_CPE: - elInfo->nChannelsInEl=2; + elInfo->nChannelsInEl=2; - elInfo->ChannelIndex[0]=0; - elInfo->ChannelIndex[1]=1; + elInfo->ChannelIndex[0]=0; + elInfo->ChannelIndex[1]=1; - elInfo->instanceTag=0; + elInfo->instanceTag=0; break; default: - error=1; + error=1; } return error; @@ -64,11 +64,11 @@ static Word16 initElement(ELEMENT_INFO* elInfo, ELEMENT_TYPE elType) Word16 InitElementInfo (Word16 nChannels, ELEMENT_INFO* elInfo) { Word16 error; - error = 0; + error = 0; switch(nChannels) { - case 1: + case 1: initElement(elInfo, ID_SCE); break; @@ -77,7 +77,7 @@ Word16 InitElementInfo (Word16 nChannels, ELEMENT_INFO* elInfo) break; default: - error=4; + error=4; } return error; @@ -91,18 +91,18 @@ Word16 InitElementBits(ELEMENT_BITS *elementBits, Word16 staticBitsTot) { Word16 error; - error = 0; + error = 0; switch(elInfo.nChannelsInEl) { case 1: - elementBits->chBitrate = bitrateTot; + elementBits->chBitrate = bitrateTot; elementBits->averageBits = averageBitsTot - staticBitsTot; - elementBits->maxBits = maxChannelBits; + elementBits->maxBits = maxChannelBits; elementBits->maxBitResBits = maxChannelBits - averageBitsTot; - elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7); - elementBits->bitResLevel = elementBits->maxBitResBits; - elementBits->relativeBits = 0x4000; /* 1.0f/2 */ + elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7); + elementBits->bitResLevel = elementBits->maxBitResBits; + elementBits->relativeBits = 0x4000; /* 1.0f/2 */ break; case 2: @@ -111,13 +111,13 @@ Word16 InitElementBits(ELEMENT_BITS *elementBits, elementBits->maxBits = maxChannelBits << 1; elementBits->maxBitResBits = (maxChannelBits << 1) - averageBitsTot; - elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7); - elementBits->bitResLevel = elementBits->maxBitResBits; - elementBits->relativeBits = 0x4000; /* 1.0f/2 */ + elementBits->maxBitResBits = elementBits->maxBitResBits - (elementBits->maxBitResBits & 7); + elementBits->bitResLevel = elementBits->maxBitResBits; + elementBits->relativeBits = 0x4000; /* 1.0f/2 */ break; default: - error = 1; + error = 1; } return error; } diff --git a/media/libstagefright/codecs/aacenc/src/dyn_bits.c b/media/libstagefright/codecs/aacenc/src/dyn_bits.c index f3b3e02..3d2efdc 100644 --- a/media/libstagefright/codecs/aacenc/src/dyn_bits.c +++ b/media/libstagefright/codecs/aacenc/src/dyn_bits.c @@ -45,12 +45,12 @@ buildBitLookUp(const Word16 *quantSpectrum, for (i=0; i<maxSfb; i++) { Word16 sfbWidth, maxVal; - sectionInfo[i].sfbCnt = 1; - sectionInfo[i].sfbStart = i; - sectionInfo[i].sectionBits = INVALID_BITCOUNT; - sectionInfo[i].codeBook = -1; - sfbWidth = sfbOffset[i + 1] - sfbOffset[i]; - maxVal = sfbMax[i]; + sectionInfo[i].sfbCnt = 1; + sectionInfo[i].sfbStart = i; + sectionInfo[i].sectionBits = INVALID_BITCOUNT; + sectionInfo[i].codeBook = -1; + sfbWidth = sfbOffset[i + 1] - sfbOffset[i]; + maxVal = sfbMax[i]; bitCount(quantSpectrum + sfbOffset[i], sfbWidth, maxVal, bitLookUp[i]); } } @@ -66,13 +66,13 @@ static Word16 findBestBook(const Word16 *bc, Word16 *book) { Word32 minBits, j; - minBits = INVALID_BITCOUNT; + minBits = INVALID_BITCOUNT; for (j=0; j<=CODE_BOOK_ESC_NDX; j++) { - + if (bc[j] < minBits) { - minBits = bc[j]; - *book = j; + minBits = bc[j]; + *book = j; } } return extract_l(minBits); @@ -82,12 +82,12 @@ static Word16 findMinMergeBits(const Word16 *bc1, const Word16 *bc2) { Word32 minBits, j, sum; - minBits = INVALID_BITCOUNT; + minBits = INVALID_BITCOUNT; for (j=0; j<=CODE_BOOK_ESC_NDX; j++) { sum = bc1[j] + bc2[j]; if (sum < minBits) { - minBits = sum; + minBits = sum; } } return extract_l(minBits); @@ -109,13 +109,13 @@ findMaxMerge(const Word16 mergeGainLookUp[MAX_SFB_LONG], const Word16 maxSfb, Word16 *maxNdx) { Word32 i, maxMergeGain; - maxMergeGain = 0; + maxMergeGain = 0; for (i=0; i+sectionInfo[i].sfbCnt < maxSfb; i += sectionInfo[i].sfbCnt) { - + if (mergeGainLookUp[i] > maxMergeGain) { - maxMergeGain = mergeGainLookUp[i]; - *maxNdx = i; + maxMergeGain = mergeGainLookUp[i]; + *maxNdx = i; } } return extract_l(maxMergeGain); @@ -159,7 +159,7 @@ gmStage0(SECTION_INFO * sectionInfo, for (i=0; i<maxSfb; i++) { /* Side-Info bits will be calculated in Stage 1! */ - + if (sectionInfo[i].sectionBits == INVALID_BITCOUNT) { sectionInfo[i].sectionBits = findBestBook(bitLookUp[i], &(sectionInfo[i].codeBook)); } @@ -180,13 +180,13 @@ gmStage1(SECTION_INFO * sectionInfo, SECTION_INFO * sectionInfo_s; SECTION_INFO * sectionInfo_e; Word32 mergeStart, mergeEnd; - mergeStart = 0; + mergeStart = 0; do { sectionInfo_s = sectionInfo + mergeStart; for (mergeEnd=mergeStart+1; mergeEnd<maxSfb; mergeEnd++) { - sectionInfo_e = sectionInfo + mergeEnd; + sectionInfo_e = sectionInfo + mergeEnd; if (sectionInfo_s->codeBook != sectionInfo_e->codeBook) break; sectionInfo_s->sfbCnt += 1; @@ -196,11 +196,11 @@ gmStage1(SECTION_INFO * sectionInfo, } sectionInfo_s->sectionBits += sideInfoTab[sectionInfo_s->sfbCnt]; - sectionInfo[mergeEnd - 1].sfbStart = sectionInfo_s->sfbStart; /* speed up prev search */ + sectionInfo[mergeEnd - 1].sfbStart = sectionInfo_s->sfbStart; /* speed up prev search */ + + mergeStart = mergeEnd; - mergeStart = mergeEnd; - } while (mergeStart - maxSfb < 0); } @@ -230,7 +230,7 @@ gmStage2(SECTION_INFO *sectionInfo, maxMergeGain = findMaxMerge(mergeGainLookUp, sectionInfo, maxSfb, &maxNdx); - + if (maxMergeGain <= 0) break; @@ -244,7 +244,7 @@ gmStage2(SECTION_INFO *sectionInfo, mergeBitLookUp(bitLookUp[maxNdx], bitLookUp[maxNdxNext]); - + if (maxNdx != 0) { maxNdxLast = sectionInfo[maxNdx - 1].sfbStart; mergeGainLookUp[maxNdxLast] = CalcMergeGain(sectionInfo, @@ -255,9 +255,9 @@ gmStage2(SECTION_INFO *sectionInfo, } maxNdxNext = maxNdx + sectionInfo[maxNdx].sfbCnt; - sectionInfo[maxNdxNext - 1].sfbStart = sectionInfo[maxNdx].sfbStart; + sectionInfo[maxNdxNext - 1].sfbStart = sectionInfo[maxNdx].sfbStart; + - if (maxNdxNext - maxSfb < 0) { mergeGainLookUp[maxNdx] = CalcMergeGain(sectionInfo, bitLookUp, @@ -286,7 +286,7 @@ noiselessCounter(SECTION_DATA *sectionData, /* use appropriate side info table - */ + */ switch (blockType) { case LONG_WINDOW: @@ -300,11 +300,11 @@ noiselessCounter(SECTION_DATA *sectionData, } - sectionData->noOfSections = 0; - sectionData->huffmanBits = 0; - sectionData->sideInfoBits = 0; + sectionData->noOfSections = 0; + sectionData->huffmanBits = 0; + sectionData->sideInfoBits = 0; + - if (sectionData->maxSfbPerGroup == 0) return; @@ -353,7 +353,7 @@ noiselessCounter(SECTION_DATA *sectionData, sectionData->huffmanBits = (sectionData->huffmanBits + (sectionInfo[i].sectionBits - sideInfoTab[sectionInfo[i].sfbCnt])); sectionData->sideInfoBits = (sectionData->sideInfoBits + sideInfoTab[sectionInfo[i].sfbCnt]); - sectionData->sectionInfo[sectionData->noOfSections] = sectionInfo[i]; + sectionData->sectionInfo[sectionData->noOfSections] = sectionInfo[i]; sectionData->noOfSections = sectionData->noOfSections + 1; } } @@ -386,25 +386,25 @@ static void scfCount(const Word16 *scalefacGain, Word32 lastValScf = 0; Word32 deltaScf = 0; Flag found = 0; - Word32 scfSkipCounter = 0; - + Word32 scfSkipCounter = 0; + + + sectionData->scalefacBits = 0; - sectionData->scalefacBits = 0; - if (scalefacGain == NULL) { return; } - lastValScf = 0; - sectionData->firstScf = 0; - + lastValScf = 0; + sectionData->firstScf = 0; + psectionInfo = sectionData->sectionInfo; for (i=0; i<sectionData->noOfSections; i++) { - + if (psectionInfo->codeBook != CODE_BOOK_ZERO_NO) { - sectionData->firstScf = psectionInfo->sfbStart; - lastValScf = scalefacGain[sectionData->firstScf]; + sectionData->firstScf = psectionInfo->sfbStart; + lastValScf = scalefacGain[sectionData->firstScf]; break; } psectionInfo += 1; @@ -412,38 +412,38 @@ static void scfCount(const Word16 *scalefacGain, psectionInfo = sectionData->sectionInfo; for (i=0; i<sectionData->noOfSections; i++, psectionInfo += 1) { - + if (psectionInfo->codeBook != CODE_BOOK_ZERO_NO && psectionInfo->codeBook != CODE_BOOK_PNS_NO) { for (j = psectionInfo->sfbStart; j < (psectionInfo->sfbStart + psectionInfo->sfbCnt); j++) { /* check if we can repeat the last value to save bits */ - + if (maxValueInSfb[j] == 0) { - found = 0; - + found = 0; + if (scfSkipCounter == 0) { /* end of section */ - + if (j - ((psectionInfo->sfbStart + psectionInfo->sfbCnt) - 1) == 0) { - found = 0; + found = 0; } else { for (k = j + 1; k < psectionInfo->sfbStart + psectionInfo->sfbCnt; k++) { - + if (maxValueInSfb[k] != 0) { int tmp = L_abs(scalefacGain[k] - lastValScf); - found = 1; - + found = 1; + if ( tmp < CODE_BOOK_SCF_LAV) { /* save bits */ - deltaScf = 0; + deltaScf = 0; } else { /* do not save bits */ deltaScf = lastValScf - scalefacGain[j]; - lastValScf = scalefacGain[j]; - scfSkipCounter = 0; + lastValScf = scalefacGain[j]; + scfSkipCounter = 0; } break; } @@ -451,26 +451,26 @@ static void scfCount(const Word16 *scalefacGain, scfSkipCounter = scfSkipCounter + 1; } } - + psectionInfom = psectionInfo + 1; /* search for the next maxValueInSfb[] != 0 in all other sections */ for (m = i + 1; (m < sectionData->noOfSections) && (found == 0); m++) { - + if ((psectionInfom->codeBook != CODE_BOOK_ZERO_NO) && (psectionInfom->codeBook != CODE_BOOK_PNS_NO)) { for (n = psectionInfom->sfbStart; n < (psectionInfom->sfbStart + psectionInfom->sfbCnt); n++) { - + if (maxValueInSfb[n] != 0) { - found = 1; - + found = 1; + if ( (abs_s(scalefacGain[n] - lastValScf) < CODE_BOOK_SCF_LAV)) { - deltaScf = 0; + deltaScf = 0; } else { deltaScf = (lastValScf - scalefacGain[j]); - lastValScf = scalefacGain[j]; - scfSkipCounter = 0; + lastValScf = scalefacGain[j]; + scfSkipCounter = 0; } break; } @@ -481,20 +481,20 @@ static void scfCount(const Word16 *scalefacGain, psectionInfom += 1; } - + if (found == 0) { - deltaScf = 0; - scfSkipCounter = 0; + deltaScf = 0; + scfSkipCounter = 0; } } else { - deltaScf = 0; + deltaScf = 0; scfSkipCounter = scfSkipCounter - 1; } } else { deltaScf = lastValScf - scalefacGain[j]; - lastValScf = scalefacGain[j]; + lastValScf = scalefacGain[j]; } sectionData->scalefacBits += bitCountScalefactorDelta(deltaScf); } @@ -517,14 +517,14 @@ dynBitCount(const Word16 *quantSpectrum, const Word16 *sfbOffset, SECTION_DATA *sectionData) { - sectionData->blockType = blockType; - sectionData->sfbCnt = sfbCnt; - sectionData->sfbPerGroup = sfbPerGroup; + sectionData->blockType = blockType; + sectionData->sfbCnt = sfbCnt; + sectionData->sfbPerGroup = sfbPerGroup; if(sfbPerGroup) - sectionData->noOfGroups = sfbCnt/sfbPerGroup; + sectionData->noOfGroups = sfbCnt/sfbPerGroup; else sectionData->noOfGroups = 0x7fff; - sectionData->maxSfbPerGroup = maxSfbPerGroup; + sectionData->maxSfbPerGroup = maxSfbPerGroup; noiselessCounter(sectionData, sectionData->mergeGainLookUp, @@ -539,7 +539,7 @@ dynBitCount(const Word16 *quantSpectrum, sectionData); - return (sectionData->huffmanBits + sectionData->sideInfoBits + + return (sectionData->huffmanBits + sectionData->sideInfoBits + sectionData->scalefacBits); } diff --git a/media/libstagefright/codecs/aacenc/src/grp_data.c b/media/libstagefright/codecs/aacenc/src/grp_data.c index fb88654..7861e1c 100644 --- a/media/libstagefright/codecs/aacenc/src/grp_data.c +++ b/media/libstagefright/codecs/aacenc/src/grp_data.c @@ -57,29 +57,29 @@ groupShortData(Word32 *mdctSpectrum, /* for short: regroup and */ /* cumulate energies und thresholds group-wise . */ - + /* calculate sfbCnt */ - highestSfb = 0; + highestSfb = 0; for (wnd=0; wnd<TRANS_FAC; wnd++) { for (sfb=sfbCnt - 1; sfb>=highestSfb; sfb--) { for (line=(sfbOffset[sfb + 1] - 1); line>=sfbOffset[sfb]; line--) { - - if (mdctSpectrum[wnd*FRAME_LEN_SHORT+line] != 0) break; + + if (mdctSpectrum[wnd*FRAME_LEN_SHORT+line] != 0) break; } - + if (line >= sfbOffset[sfb]) break; } highestSfb = max(highestSfb, sfb); } - + if (highestSfb < 0) { - highestSfb = 0; + highestSfb = 0; } *maxSfbPerGroup = highestSfb + 1; /* calculate sfbOffset */ - i = 0; - offset = 0; + i = 0; + offset = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { groupedSfbOffset[i] = offset + sfbOffset[sfb] * groupLen[grp]; @@ -87,15 +87,15 @@ groupShortData(Word32 *mdctSpectrum, } offset += groupLen[grp] * FRAME_LEN_SHORT; } - groupedSfbOffset[i] = FRAME_LEN_LONG; + groupedSfbOffset[i] = FRAME_LEN_LONG; i += 1; /* calculate minSnr */ - i = 0; - offset = 0; + i = 0; + offset = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { - groupedSfbMinSnr[i] = sfbMinSnr[sfb]; + groupedSfbMinSnr[i] = sfbMinSnr[sfb]; i += 1; } offset += groupLen[grp] * FRAME_LEN_SHORT; @@ -103,74 +103,74 @@ groupShortData(Word32 *mdctSpectrum, /* sum up sfbThresholds */ - wnd = 0; - i = 0; + wnd = 0; + i = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { - Word32 thresh = sfbThreshold->sfbShort[wnd][sfb]; + Word32 thresh = sfbThreshold->sfbShort[wnd][sfb]; for (j=1; j<groupLen[grp]; j++) { thresh = L_add(thresh, sfbThreshold->sfbShort[wnd+j][sfb]); } - sfbThreshold->sfbLong[i] = thresh; + sfbThreshold->sfbLong[i] = thresh; i += 1; } wnd += groupLen[grp]; } /* sum up sfbEnergies left/right */ - wnd = 0; - i = 0; + wnd = 0; + i = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { - Word32 energy = sfbEnergy->sfbShort[wnd][sfb]; + Word32 energy = sfbEnergy->sfbShort[wnd][sfb]; for (j=1; j<groupLen[grp]; j++) { energy = L_add(energy, sfbEnergy->sfbShort[wnd+j][sfb]); } - sfbEnergy->sfbLong[i] = energy; + sfbEnergy->sfbLong[i] = energy; i += 1; } wnd += groupLen[grp]; } /* sum up sfbEnergies mid/side */ - wnd = 0; - i = 0; + wnd = 0; + i = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { - Word32 energy = sfbEnergyMS->sfbShort[wnd][sfb]; + Word32 energy = sfbEnergyMS->sfbShort[wnd][sfb]; for (j=1; j<groupLen[grp]; j++) { energy = L_add(energy, sfbEnergyMS->sfbShort[wnd+j][sfb]); } - sfbEnergyMS->sfbLong[i] = energy; + sfbEnergyMS->sfbLong[i] = energy; i += 1; } wnd += groupLen[grp]; } /* sum up sfbSpreadedEnergies */ - wnd = 0; - i = 0; + wnd = 0; + i = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { - Word32 energy = sfbSpreadedEnergy->sfbShort[wnd][sfb]; + Word32 energy = sfbSpreadedEnergy->sfbShort[wnd][sfb]; for (j=1; j<groupLen[grp]; j++) { energy = L_add(energy, sfbSpreadedEnergy->sfbShort[wnd+j][sfb]); } - sfbSpreadedEnergy->sfbLong[i] = energy; + sfbSpreadedEnergy->sfbLong[i] = energy; i += 1; } wnd += groupLen[grp]; } /* re-group spectrum */ - wnd = 0; - i = 0; + wnd = 0; + i = 0; for (grp = 0; grp < noOfGroups; grp++) { for (sfb = 0; sfb < sfbCnt; sfb++) { for (j = 0; j < groupLen[grp]; j++) { Word16 lineOffset = FRAME_LEN_SHORT * (wnd + j); for (line = lineOffset + sfbOffset[sfb]; line < lineOffset + sfbOffset[sfb+1]; line++) { - tmpSpectrum[i] = mdctSpectrum[line]; + tmpSpectrum[i] = mdctSpectrum[line]; i = i + 1; } } @@ -179,10 +179,10 @@ groupShortData(Word32 *mdctSpectrum, } for(i=0;i<FRAME_LEN_LONG;i+=4) { - mdctSpectrum[i] = tmpSpectrum[i]; - mdctSpectrum[i+1] = tmpSpectrum[i+1]; - mdctSpectrum[i+2] = tmpSpectrum[i+2]; - mdctSpectrum[i+3] = tmpSpectrum[i+3]; + mdctSpectrum[i] = tmpSpectrum[i]; + mdctSpectrum[i+1] = tmpSpectrum[i+1]; + mdctSpectrum[i+2] = tmpSpectrum[i+2]; + mdctSpectrum[i+3] = tmpSpectrum[i+3]; } } diff --git a/media/libstagefright/codecs/aacenc/src/interface.c b/media/libstagefright/codecs/aacenc/src/interface.c index 34fee00..f2472d8 100644 --- a/media/libstagefright/codecs/aacenc/src/interface.c +++ b/media/libstagefright/codecs/aacenc/src/interface.c @@ -49,56 +49,56 @@ void BuildInterface(Word32 *groupedMdctSpectrum, PSY_OUT_CHANNEL *psyOutCh) { Word32 j; - Word32 grp; + Word32 grp; Word32 mask; Word16 *tmpV; /* copy values to psyOut */ - psyOutCh->maxSfbPerGroup = maxSfbPerGroup; - psyOutCh->sfbCnt = groupedSfbCnt; + psyOutCh->maxSfbPerGroup = maxSfbPerGroup; + psyOutCh->sfbCnt = groupedSfbCnt; if(noOfGroups) psyOutCh->sfbPerGroup = groupedSfbCnt/ noOfGroups; else psyOutCh->sfbPerGroup = 0x7fff; - psyOutCh->windowSequence = windowSequence; - psyOutCh->windowShape = windowShape; - psyOutCh->mdctScale = mdctScale; + psyOutCh->windowSequence = windowSequence; + psyOutCh->windowShape = windowShape; + psyOutCh->mdctScale = mdctScale; psyOutCh->mdctSpectrum = groupedMdctSpectrum; psyOutCh->sfbEnergy = groupedSfbEnergy->sfbLong; psyOutCh->sfbThreshold = groupedSfbThreshold->sfbLong; psyOutCh->sfbSpreadedEnergy = groupedSfbSpreadedEnergy->sfbLong; - + tmpV = psyOutCh->sfbOffsets; for(j=0; j<groupedSfbCnt + 1; j++) { *tmpV++ = groupedSfbOffset[j]; } - + tmpV = psyOutCh->sfbMinSnr; for(j=0;j<groupedSfbCnt; j++) { *tmpV++ = groupedSfbMinSnr[j]; } - + /* generate grouping mask */ - mask = 0; + mask = 0; for (grp = 0; grp < noOfGroups; grp++) { mask = mask << 1; for (j=1; j<groupLen[grp]; j++) { mask = mask << 1; - mask |= 1; + mask |= 1; } } - psyOutCh->groupingMask = mask; - + psyOutCh->groupingMask = mask; + if (windowSequence != SHORT_WINDOW) { - psyOutCh->sfbEnSumLR = sfbEnergySumLR.sfbLong; - psyOutCh->sfbEnSumMS = sfbEnergySumMS.sfbLong; + psyOutCh->sfbEnSumLR = sfbEnergySumLR.sfbLong; + psyOutCh->sfbEnSumMS = sfbEnergySumMS.sfbLong; } else { Word32 i; Word32 accuSumMS=0; - Word32 accuSumLR=0; + Word32 accuSumLR=0; Word32 *pSumMS = sfbEnergySumMS.sfbShort; Word32 *pSumLR = sfbEnergySumLR.sfbShort; @@ -106,7 +106,7 @@ void BuildInterface(Word32 *groupedMdctSpectrum, accuSumLR = L_add(accuSumLR, *pSumLR); pSumLR++; accuSumMS = L_add(accuSumMS, *pSumMS); pSumMS++; } - psyOutCh->sfbEnSumMS = accuSumMS; - psyOutCh->sfbEnSumLR = accuSumLR; + psyOutCh->sfbEnSumMS = accuSumMS; + psyOutCh->sfbEnSumLR = accuSumLR; } } diff --git a/media/libstagefright/codecs/aacenc/src/line_pe.c b/media/libstagefright/codecs/aacenc/src/line_pe.c index 5e93cd0..480dc28 100644 --- a/media/libstagefright/codecs/aacenc/src/line_pe.c +++ b/media/libstagefright/codecs/aacenc/src/line_pe.c @@ -45,20 +45,20 @@ void prepareSfbPe(PE_DATA *peData, const Word16 peOffset) { Word32 sfbGrp, sfb; - Word32 ch; + Word32 ch; for(ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; PE_CHANNEL_DATA *peChanData=&peData->peChannelData[ch]; for(sfbGrp=0;sfbGrp<psyOutChan->sfbCnt; sfbGrp+=psyOutChan->sfbPerGroup){ for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { - peChanData->sfbNLines4[sfbGrp+sfb] = sfbNRelevantLines[ch][sfbGrp+sfb]; - sfbNRelevantLines[ch][sfbGrp+sfb] = sfbNRelevantLines[ch][sfbGrp+sfb] >> 2; - peChanData->sfbLdEnergy[sfbGrp+sfb] = logSfbEnergy[ch][sfbGrp+sfb]; + peChanData->sfbNLines4[sfbGrp+sfb] = sfbNRelevantLines[ch][sfbGrp+sfb]; + sfbNRelevantLines[ch][sfbGrp+sfb] = sfbNRelevantLines[ch][sfbGrp+sfb] >> 2; + peChanData->sfbLdEnergy[sfbGrp+sfb] = logSfbEnergy[ch][sfbGrp+sfb]; } } } - peData->offset = peOffset; + peData->offset = peOffset; } @@ -78,23 +78,23 @@ void calcSfbPe(PE_DATA *peData, Word32 ldThr, ldRatio; Word32 pe, constPart, nActiveLines; - peData->pe = peData->offset; - peData->constPart = 0; - peData->nActiveLines = 0; + peData->pe = peData->offset; + peData->constPart = 0; + peData->nActiveLines = 0; for(ch=0; ch<nChannels; ch++) { PSY_OUT_CHANNEL *psyOutChan = &psyOutChannel[ch]; PE_CHANNEL_DATA *peChanData = &peData->peChannelData[ch]; const Word32 *sfbEnergy = psyOutChan->sfbEnergy; const Word32 *sfbThreshold = psyOutChan->sfbThreshold; - pe = 0; - constPart = 0; - nActiveLines = 0; + pe = 0; + constPart = 0; + nActiveLines = 0; for(sfbGrp=0; sfbGrp<psyOutChan->sfbCnt; sfbGrp+=psyOutChan->sfbPerGroup) { for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { - Word32 nrg = sfbEnergy[sfbGrp+sfb]; - Word32 thres = sfbThreshold[sfbGrp+sfb]; + Word32 nrg = sfbEnergy[sfbGrp+sfb]; + Word32 thres = sfbThreshold[sfbGrp+sfb]; Word32 sfbLDEn = peChanData->sfbLdEnergy[sfbGrp+sfb]; if (nrg > thres) { @@ -102,8 +102,8 @@ void calcSfbPe(PE_DATA *peData, ldRatio = sfbLDEn - ldThr; - nLines4 = peChanData->sfbNLines4[sfbGrp+sfb]; - + nLines4 = peChanData->sfbNLines4[sfbGrp+sfb]; + /* sfbPe = nl*log2(en/thr)*/ if (ldRatio >= C1_I) { peChanData->sfbPe[sfbGrp+sfb] = (nLines4*ldRatio + 8) >> 4; @@ -120,26 +120,26 @@ void calcSfbPe(PE_DATA *peData, peChanData->sfbNActiveLines[sfbGrp+sfb] = nLines4 >> 2; } else { - peChanData->sfbPe[sfbGrp+sfb] = 0; - peChanData->sfbConstPart[sfbGrp+sfb] = 0; - peChanData->sfbNActiveLines[sfbGrp+sfb] = 0; + peChanData->sfbPe[sfbGrp+sfb] = 0; + peChanData->sfbConstPart[sfbGrp+sfb] = 0; + peChanData->sfbNActiveLines[sfbGrp+sfb] = 0; } pe = pe + peChanData->sfbPe[sfbGrp+sfb]; constPart = constPart + peChanData->sfbConstPart[sfbGrp+sfb]; nActiveLines = nActiveLines + peChanData->sfbNActiveLines[sfbGrp+sfb]; } } - - peChanData->pe = saturate(pe); - peChanData->constPart = saturate(constPart); - peChanData->nActiveLines = saturate(nActiveLines); - + peChanData->pe = saturate(pe); + peChanData->constPart = saturate(constPart); + peChanData->nActiveLines = saturate(nActiveLines); + + pe += peData->pe; - peData->pe = saturate(pe); + peData->pe = saturate(pe); constPart += peData->constPart; - peData->constPart = saturate(constPart); + peData->constPart = saturate(constPart); nActiveLines += peData->nActiveLines; peData->nActiveLines = saturate(nActiveLines); - } + } } diff --git a/media/libstagefright/codecs/aacenc/src/memalign.c b/media/libstagefright/codecs/aacenc/src/memalign.c index 44dd4ba..bb266dc 100644 --- a/media/libstagefright/codecs/aacenc/src/memalign.c +++ b/media/libstagefright/codecs/aacenc/src/memalign.c @@ -32,7 +32,7 @@ /***************************************************************************** * * function name: mem_malloc -* description: malloc the alignments memory +* description: malloc the alignments memory * returns: the point of the memory * **********************************************************************************/ diff --git a/media/libstagefright/codecs/aacenc/src/ms_stereo.c b/media/libstagefright/codecs/aacenc/src/ms_stereo.c index 44d45cc..2e34f14 100644 --- a/media/libstagefright/codecs/aacenc/src/ms_stereo.c +++ b/media/libstagefright/codecs/aacenc/src/ms_stereo.c @@ -30,7 +30,7 @@ * * function name: MsStereoProcessing * description: detect use ms stereo or not -* if ((min(thrLn, thrRn)*min(thrLn, thrRn))/(enMn*enSn)) +* if ((min(thrLn, thrRn)*min(thrLn, thrRn))/(enMn*enSn)) * >= ((thrLn *thrRn)/(enLn*enRn)) then ms stereo * **********************************************************************************/ @@ -51,7 +51,7 @@ void MsStereoProcessing(Word32 *sfbEnergyLeft, const Word16 maxSfbPerGroup, const Word16 *sfbOffset) { Word32 temp; - Word32 sfb,sfboffs, j; + Word32 sfb,sfboffs, j; Word32 msMaskTrueSomewhere = 0; Word32 msMaskFalseSomewhere = 0; @@ -64,12 +64,12 @@ void MsStereoProcessing(Word32 *sfbEnergyLeft, Word32 thrL, thrR, nrgL, nrgR; Word32 idx, shift; - idx = sfb + sfboffs; + idx = sfb + sfboffs; - thrL = sfbThresholdLeft[idx]; - thrR = sfbThresholdRight[idx]; - nrgL = sfbEnergyLeft[idx]; - nrgR = sfbEnergyRight[idx]; + thrL = sfbThresholdLeft[idx]; + thrR = sfbThresholdRight[idx]; + nrgL = sfbEnergyLeft[idx]; + nrgR = sfbEnergyRight[idx]; minThreshold = min(thrL, thrR); @@ -82,8 +82,8 @@ void MsStereoProcessing(Word32 *sfbEnergyLeft, pnlr = fixmul(nrgL, nrgR); - nrgL = sfbEnergyMid[idx]; - nrgR = sfbEnergySide[idx]; + nrgL = sfbEnergyMid[idx]; + nrgR = sfbEnergySide[idx]; nrgL = max(nrgL,minThreshold) + 1; shift = norm_l(nrgL); @@ -97,42 +97,42 @@ void MsStereoProcessing(Word32 *sfbEnergyLeft, temp = (pnlr + 1) / ((pnms >> 8) + 1); - temp = pnms - pnlr; + temp = pnms - pnlr; if( temp > 0 ){ - msMask[idx] = 1; - msMaskTrueSomewhere = 1; + msMask[idx] = 1; + msMaskTrueSomewhere = 1; for (j=sfbOffset[idx]; j<sfbOffset[idx+1]; j++) { Word32 left, right; left = (mdctSpectrumLeft[j] >> 1); right = (mdctSpectrumRight[j] >> 1); - mdctSpectrumLeft[j] = left + right; - mdctSpectrumRight[j] = left - right; + mdctSpectrumLeft[j] = left + right; + mdctSpectrumRight[j] = left - right; } - - sfbThresholdLeft[idx] = minThreshold; - sfbThresholdRight[idx] = minThreshold; - sfbEnergyLeft[idx] = sfbEnergyMid[idx]; - sfbEnergyRight[idx] = sfbEnergySide[idx]; - - sfbSpreadedEnRight[idx] = min(sfbSpreadedEnLeft[idx],sfbSpreadedEnRight[idx]) >> 1; - sfbSpreadedEnLeft[idx] = sfbSpreadedEnRight[idx]; - + + sfbThresholdLeft[idx] = minThreshold; + sfbThresholdRight[idx] = minThreshold; + sfbEnergyLeft[idx] = sfbEnergyMid[idx]; + sfbEnergyRight[idx] = sfbEnergySide[idx]; + + sfbSpreadedEnRight[idx] = min(sfbSpreadedEnLeft[idx],sfbSpreadedEnRight[idx]) >> 1; + sfbSpreadedEnLeft[idx] = sfbSpreadedEnRight[idx]; + } else { - msMask[idx] = 0; - msMaskFalseSomewhere = 1; + msMask[idx] = 0; + msMaskFalseSomewhere = 1; } - } - if ( msMaskTrueSomewhere ) { + } + if ( msMaskTrueSomewhere ) { if(msMaskFalseSomewhere ) { - *msDigest = SI_MS_MASK_SOME; + *msDigest = SI_MS_MASK_SOME; } else { - *msDigest = SI_MS_MASK_ALL; + *msDigest = SI_MS_MASK_ALL; } } else { - *msDigest = SI_MS_MASK_NONE; + *msDigest = SI_MS_MASK_NONE; } } diff --git a/media/libstagefright/codecs/aacenc/src/pre_echo_control.c b/media/libstagefright/codecs/aacenc/src/pre_echo_control.c index 1e818a2..1406e11 100644 --- a/media/libstagefright/codecs/aacenc/src/pre_echo_control.c +++ b/media/libstagefright/codecs/aacenc/src/pre_echo_control.c @@ -29,7 +29,7 @@ /***************************************************************************** * -* function name:InitPreEchoControl +* function name:InitPreEchoControl * description: init pre echo control parameter * *****************************************************************************/ @@ -40,13 +40,13 @@ void InitPreEchoControl(Word32 *pbThresholdNm1, Word16 pb; for(pb=0; pb<numPb; pb++) { - pbThresholdNm1[pb] = pbThresholdQuiet[pb]; + pbThresholdNm1[pb] = pbThresholdQuiet[pb]; } } /***************************************************************************** * -* function name:PreEchoControl +* function name:PreEchoControl * description: update shreshold to avoid pre echo * thr(n) = max(rpmin*thrq(n), min(thrq(n), rpelev*thrq1(n))) * @@ -68,22 +68,22 @@ void PreEchoControl(Word32 *pbThresholdNm1, (void)maxAllowedIncreaseFactor; scaling = ((mdctScale - mdctScalenm1) << 1); - + if ( scaling > 0 ) { for(i = 0; i < numPb; i++) { tmpThreshold1 = pbThresholdNm1[i] >> (scaling-1); tmpThreshold2 = L_mpy_ls(pbThreshold[i], minRemainingThresholdFactor); /* copy thresholds to internal memory */ - pbThresholdNm1[i] = pbThreshold[i]; + pbThresholdNm1[i] = pbThreshold[i]; + - if(pbThreshold[i] > tmpThreshold1) { - pbThreshold[i] = tmpThreshold1; + pbThreshold[i] = tmpThreshold1; } - + if(tmpThreshold2 > pbThreshold[i]) { - pbThreshold[i] = tmpThreshold2; + pbThreshold[i] = tmpThreshold2; } } @@ -96,15 +96,15 @@ void PreEchoControl(Word32 *pbThresholdNm1, tmpThreshold2 = L_mpy_ls(pbThreshold[i], minRemainingThresholdFactor); /* copy thresholds to internal memory */ - pbThresholdNm1[i] = pbThreshold[i]; + pbThresholdNm1[i] = pbThreshold[i]; + - if(((pbThreshold[i] >> scaling) > tmpThreshold1)) { pbThreshold[i] = tmpThreshold1 << scaling; } - + if(tmpThreshold2 > pbThreshold[i]) { - pbThreshold[i] = tmpThreshold2; + pbThreshold[i] = tmpThreshold2; } } diff --git a/media/libstagefright/codecs/aacenc/src/psy_configuration.c b/media/libstagefright/codecs/aacenc/src/psy_configuration.c index 8e599b0..02d92ab 100644 --- a/media/libstagefright/codecs/aacenc/src/psy_configuration.c +++ b/media/libstagefright/codecs/aacenc/src/psy_configuration.c @@ -88,17 +88,17 @@ Word32 GetSRIndex(Word32 sampleRate) * * function name: atan_1000 * description: calculates 1000*atan(x/1000) -* based on atan approx for x > 0 +* based on atan approx for x > 0 * atan(x) = x/((float)1.0f+(float)0.280872f*x*x) if x < 1 * = pi/2 - x/((float)0.280872f +x*x) if x >= 1 * return: 1000*atan(x/1000) * **********************************************************************************/ -static Word16 atan_1000(Word32 val) +static Word16 atan_1000(Word32 val) { Word32 y; - + if(L_sub(val, 1000) < 0) { y = extract_l(((1000 * val) / (1000 + ((val * val) / ATAN_COEF1)))); } @@ -126,9 +126,9 @@ static Word16 BarcLineValue(Word16 noOfLines, Word16 fftLine, Word32 samplingFre /* center frequency of fft line */ center_freq = (fftLine * samplingFreq) / (noOfLines << 1); temp = atan_1000((center_freq << 2) / (3*10)); - bvalFFTLine = + bvalFFTLine = (26600 * atan_1000((center_freq*76) / 100) + 7*temp*temp) / (2*1000*1000 / BARC_SCALE); - + return saturate(bvalFFTLine); } @@ -148,17 +148,17 @@ static void initThrQuiet(Word16 numPb, for(i=0; i<numPb; i++) { Word16 bv1, bv2; - + if (i>0) bv1 = (pbBarcVal[i] + pbBarcVal[i-1]) >> 1; else bv1 = pbBarcVal[i] >> 1; - + if (i < (numPb - 1)) bv2 = (pbBarcVal[i] + pbBarcVal[i+1]) >> 1; else { - bv2 = pbBarcVal[i]; + bv2 = pbBarcVal[i]; } bv1 = min((bv1 / BARC_SCALE), max_bark); @@ -166,9 +166,9 @@ static void initThrQuiet(Word16 numPb, barcThrQuiet = min(BARC_THR_QUIET[bv1], BARC_THR_QUIET[bv2]); - + /* - we calculate + we calculate pow(10.0f,(float)(barcThrQuiet - ABS_LEV)*0.1)*(float)ABS_LOW*(pbOffset[i+1] - pbOffset[i]); */ @@ -196,47 +196,47 @@ static void initSpreading(Word16 numPb, Word16 i; Word16 maskLowSprEn, maskHighSprEn; - + if (sub(blockType, SHORT_WINDOW) != 0) { - maskLowSprEn = maskLowSprEnLong; - + maskLowSprEn = maskLowSprEnLong; + if (bitrate > 22000) maskHighSprEn = maskHighSprEnLong; else maskHighSprEn = maskHighSprEnLongLowBr; } else { - maskLowSprEn = maskLowSprEnShort; - maskHighSprEn = maskHighSprEnShort; + maskLowSprEn = maskLowSprEnShort; + maskHighSprEn = maskHighSprEnShort; } for(i=0; i<numPb; i++) { - + if (i > 0) { Word32 dbVal; Word16 dbark = pbBarcValue[i] - pbBarcValue[i-1]; /* - we calulate pow(10.0f, -0.1*dbVal/BARC_SCALE) + we calulate pow(10.0f, -0.1*dbVal/BARC_SCALE) */ dbVal = (maskHigh * dbark); pbMaskHiFactor[i] = round16(pow2_xy(L_negate(dbVal), (Word32)LOG2_1000)); /* 0.301 log10(2) */ - + dbVal = (maskLow * dbark); - pbMaskLoFactor[i-1] = round16(pow2_xy(L_negate(dbVal),(Word32)LOG2_1000)); - - + pbMaskLoFactor[i-1] = round16(pow2_xy(L_negate(dbVal),(Word32)LOG2_1000)); + + dbVal = (maskHighSprEn * dbark); - pbMaskHiFactorSprEn[i] = round16(pow2_xy(L_negate(dbVal),(Word32)LOG2_1000)); + pbMaskHiFactorSprEn[i] = round16(pow2_xy(L_negate(dbVal),(Word32)LOG2_1000)); dbVal = (maskLowSprEn * dbark); pbMaskLoFactorSprEn[i-1] = round16(pow2_xy(L_negate(dbVal),(Word32)LOG2_1000)); } else { - pbMaskHiFactor[i] = 0; - pbMaskLoFactor[numPb-1] = 0; + pbMaskHiFactor[i] = 0; + pbMaskLoFactor[numPb-1] = 0; - pbMaskHiFactorSprEn[i] = 0; - pbMaskLoFactorSprEn[numPb-1] = 0; + pbMaskHiFactorSprEn[i] = 0; + pbMaskLoFactorSprEn[numPb-1] = 0; } } @@ -258,12 +258,12 @@ static void initBarcValues(Word16 numPb, Word16 i; Word16 pbBval0, pbBval1; - pbBval0 = 0; + pbBval0 = 0; for(i=0; i<numPb; i++){ pbBval1 = BarcLineValue(numLines, pbOffset[i+1], samplingFrequency); pbBval[i] = (pbBval0 + pbBval1) >> 1; - pbBval0 = pbBval1; + pbBval0 = pbBval1; } } @@ -295,38 +295,38 @@ static void initMinSnr(const Word32 bitrate, pePerWindow = bits2pe(extract_l((bitrate * numLines) / samplerate)); - pbVal0 = 0; + pbVal0 = 0; for (sfb=0; sfb<sfbActive; sfb++) { pbVal1 = (pbBarcVal[sfb] << 1) - pbVal0; barcWidth = pbVal1 - pbVal0; - pbVal0 = pbVal1; + pbVal0 = pbVal1; /* allow at least 2.4% of pe for each active barc */ pePart = ((pePerWindow * 24) * (max_bark * barcWidth)) / (pbBarcVal[sfbActive-1] * (sfbOffset[sfb+1] - sfbOffset[sfb])); - - - pePart = min(pePart, 8400); + + + pePart = min(pePart, 8400); pePart = max(pePart, 1400); /* minSnr(n) = 1/(2^sfbPemin(n)/w(n) - 1.5)*/ /* we add an offset of 2^16 to the pow functions */ /* 0xc000 = 1.5*(1 << 15)*/ - + snr = pow2_xy((pePart - 16*1000),1000) - 0x0000c000; - + if(snr > 0x00008000) { shift = norm_l(snr); - snr = Div_32(0x00008000 << shift, snr << shift); + snr = Div_32(0x00008000 << shift, snr << shift); } else { snr = 0x7fffffff; } - + /* upper limit is -1 dB */ snr = min(snr, c_maxsnr); /* lower limit is -25 dB */ @@ -354,7 +354,7 @@ Word16 InitPsyConfigurationLong(Word32 bitrate, /* init sfb table */ - samplerateindex = GetSRIndex(samplerate); + samplerateindex = GetSRIndex(samplerate); psyConf->sfbCnt = sfBandTotalLong[samplerateindex]; psyConf->sfbOffset = sfBandTabLong + sfBandTabLongOffset[samplerateindex]; psyConf->sampRateIdx = samplerateindex; @@ -391,19 +391,19 @@ Word16 InitPsyConfigurationLong(Word32 bitrate, /* init ratio */ - psyConf->ratio = c_ratio; + psyConf->ratio = c_ratio; - psyConf->maxAllowedIncreaseFactor = 2; - psyConf->minRemainingThresholdFactor = c_minRemainingThresholdFactor; /* 0.01 *(1 << 15)*/ + psyConf->maxAllowedIncreaseFactor = 2; + psyConf->minRemainingThresholdFactor = c_minRemainingThresholdFactor; /* 0.01 *(1 << 15)*/ - psyConf->clipEnergy = c_maxClipEnergyLong; + psyConf->clipEnergy = c_maxClipEnergyLong; psyConf->lowpassLine = extract_l((bandwidth<<1) * FRAME_LEN_LONG / samplerate); for (sfb = 0; sfb < psyConf->sfbCnt; sfb++) { if (sub(psyConf->sfbOffset[sfb], psyConf->lowpassLine) >= 0) break; } - psyConf->sfbActive = sfb; + psyConf->sfbActive = sfb; /* calculate minSnr @@ -429,7 +429,7 @@ Word16 InitPsyConfigurationLong(Word32 bitrate, Word16 InitPsyConfigurationShort(Word32 bitrate, Word32 samplerate, Word16 bandwidth, - PSY_CONFIGURATION_SHORT *psyConf) + PSY_CONFIGURATION_SHORT *psyConf) { Word32 samplerateindex; Word16 sfbBarcVal[MAX_SFB_SHORT]; @@ -437,7 +437,7 @@ Word16 InitPsyConfigurationShort(Word32 bitrate, /* init sfb table */ - samplerateindex = GetSRIndex(samplerate); + samplerateindex = GetSRIndex(samplerate); psyConf->sfbCnt = sfBandTotalShort[samplerateindex]; psyConf->sfbOffset = sfBandTabShort + sfBandTabShortOffset[samplerateindex]; psyConf->sampRateIdx = samplerateindex; @@ -473,21 +473,21 @@ Word16 InitPsyConfigurationShort(Word32 bitrate, /* init ratio */ - psyConf->ratio = c_ratio; + psyConf->ratio = c_ratio; - psyConf->maxAllowedIncreaseFactor = 2; - psyConf->minRemainingThresholdFactor = c_minRemainingThresholdFactor; + psyConf->maxAllowedIncreaseFactor = 2; + psyConf->minRemainingThresholdFactor = c_minRemainingThresholdFactor; - psyConf->clipEnergy = c_maxClipEnergyShort; + psyConf->clipEnergy = c_maxClipEnergyShort; psyConf->lowpassLine = extract_l(((bandwidth << 1) * FRAME_LEN_SHORT) / samplerate); - + for (sfb = 0; sfb < psyConf->sfbCnt; sfb++) { - + if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLine) break; } - psyConf->sfbActive = sfb; + psyConf->sfbActive = sfb; /* calculate minSnr diff --git a/media/libstagefright/codecs/aacenc/src/psy_main.c b/media/libstagefright/codecs/aacenc/src/psy_main.c index 3d0a355..085acb8 100644 --- a/media/libstagefright/codecs/aacenc/src/psy_main.c +++ b/media/libstagefright/codecs/aacenc/src/psy_main.c @@ -81,7 +81,7 @@ Word16 PsyNew(PSY_KERNEL *hPsy, Word32 nChan, VO_MEM_OPERATOR *pMemOP) Word32 *mdctSpectrum; Word32 *scratchTNS; Word16 *mdctDelayBuffer; - + mdctSpectrum = (Word32 *)mem_malloc(pMemOP, nChan * FRAME_LEN_LONG * sizeof(Word32), 32, VO_INDEX_ENC_AAC); if(NULL == mdctSpectrum) return 1; @@ -99,7 +99,7 @@ Word16 PsyNew(PSY_KERNEL *hPsy, Word32 nChan, VO_MEM_OPERATOR *pMemOP) } for (i=0; i<nChan; i++){ - hPsy->psyData[i].mdctDelayBuffer = mdctDelayBuffer + i*BLOCK_SWITCHING_OFFSET; + hPsy->psyData[i].mdctDelayBuffer = mdctDelayBuffer + i*BLOCK_SWITCHING_OFFSET; hPsy->psyData[i].mdctSpectrum = mdctSpectrum + i*FRAME_LEN_LONG; } @@ -124,12 +124,12 @@ Word16 PsyDelete(PSY_KERNEL *hPsy, VO_MEM_OPERATOR *pMemOP) { if(hPsy->psyData[0].mdctDelayBuffer) mem_free(pMemOP, hPsy->psyData[0].mdctDelayBuffer, VO_INDEX_ENC_AAC); - + if(hPsy->psyData[0].mdctSpectrum) mem_free(pMemOP, hPsy->psyData[0].mdctSpectrum, VO_INDEX_ENC_AAC); for (nch=0; nch<MAX_CHANNELS; nch++){ - hPsy->psyData[nch].mdctDelayBuffer = NULL; + hPsy->psyData[nch].mdctDelayBuffer = NULL; hPsy->psyData[nch].mdctSpectrum = NULL; } @@ -216,14 +216,14 @@ Word16 psyMainInit(PSY_KERNEL *hPsy, if (!err) for(ch=0;ch < channels;ch++){ - + InitBlockSwitching(&hPsy->psyData[ch].blockSwitchingControl, bitRate, channels); InitPreEchoControl(hPsy->psyData[ch].sfbThresholdnm1, hPsy->psyConfLong.sfbCnt, hPsy->psyConfLong.sfbThresholdQuiet); - hPsy->psyData[ch].mdctScalenm1 = 0; + hPsy->psyData[ch].mdctScalenm1 = 0; } return(err); @@ -241,7 +241,7 @@ Word16 psyMainInit(PSY_KERNEL *hPsy, Word16 psyMain(Word16 nChannels, ELEMENT_INFO *elemInfo, - Word16 *timeSignal, + Word16 *timeSignal, PSY_DATA psyData[MAX_CHANNELS], TNS_DATA tnsData[MAX_CHANNELS], PSY_CONFIGURATION_LONG *hPsyConfLong, @@ -260,8 +260,8 @@ Word16 psyMain(Word16 nChannels, Word16 channels; Word16 maxScale; - channels = elemInfo->nChannelsInEl; - maxScale = 0; + channels = elemInfo->nChannelsInEl; + maxScale = 0; /* block switching */ for(ch = 0; ch < channels; ch++) { @@ -291,7 +291,7 @@ Word16 psyMain(Word16 nChannels, /* common scaling for all channels */ for (ch=0; ch<channels; ch++) { Word16 scaleDiff = maxScale - mdctScalingArray[ch]; - + if (scaleDiff > 0) { Word32 *Spectrum = psyData[ch].mdctSpectrum; for(line=0; line<FRAME_LEN_LONG; line++) { @@ -299,11 +299,11 @@ Word16 psyMain(Word16 nChannels, Spectrum++; } } - psyData[ch].mdctScale = maxScale; + psyData[ch].mdctScale = maxScale; } for (ch=0; ch<channels; ch++) { - + if(psyData[ch].blockSwitchingControl.windowSequence != SHORT_WINDOW) { /* update long block parameter */ advancePsychLong(&psyData[ch], @@ -317,7 +317,7 @@ Word16 psyMain(Word16 nChannels, /* determine maxSfb */ for (sfb=hPsyConfLong->sfbCnt-1; sfb>=0; sfb--) { for (line=hPsyConfLong->sfbOffset[sfb+1] - 1; line>=hPsyConfLong->sfbOffset[sfb]; line--) { - + if (psyData[ch].mdctSpectrum[line] != 0) break; } if (line >= hPsyConfLong->sfbOffset[sfb]) break; @@ -326,7 +326,7 @@ Word16 psyMain(Word16 nChannels, /* Calc bandwise energies for mid and side channel Do it only if 2 channels exist */ - + if (ch == 1) advancePsychLongMS(psyData, hPsyConfLong); } @@ -341,7 +341,7 @@ Word16 psyMain(Word16 nChannels, /* Calc bandwise energies for mid and side channel Do it only if 2 channels exist */ - + if (ch == 1) advancePsychShortMS (psyData, hPsyConfShort); } @@ -349,7 +349,7 @@ Word16 psyMain(Word16 nChannels, /* group short data */ for(ch=0; ch<channels; ch++) { - + if (psyData[ch].blockSwitchingControl.windowSequence == SHORT_WINDOW) { groupShortData(psyData[ch].mdctSpectrum, pScratchTns, @@ -374,10 +374,10 @@ Word16 psyMain(Word16 nChannels, stereo Processing */ if (channels == 2) { - psyOutElement->toolsInfo.msDigest = MS_NONE; + psyOutElement->toolsInfo.msDigest = MS_NONE; maxSfbPerGroup[0] = maxSfbPerGroup[1] = max(maxSfbPerGroup[0], maxSfbPerGroup[1]); - + if (psyData[0].blockSwitchingControl.windowSequence != SHORT_WINDOW) MsStereoProcessing(psyData[0].sfbEnergy.sfbLong, psyData[1].sfbEnergy.sfbLong, @@ -420,7 +420,7 @@ Word16 psyMain(Word16 nChannels, build output */ for(ch=0;ch<channels;ch++) { - + if (psyData[ch].blockSwitchingControl.windowSequence != SHORT_WINDOW) BuildInterface(psyData[ch].mdctSpectrum, psyData[ch].mdctScale, @@ -483,7 +483,7 @@ static Word16 advancePsychLong(PSY_DATA* psyData, /* low pass */ data0 = psyData->mdctSpectrum + hPsyConfLong->lowpassLine; for(i=hPsyConfLong->lowpassLine; i<FRAME_LEN_LONG; i++) { - *data0++ = 0; + *data0++ = 0; } /* Calc sfb-bandwise mdct-energies for left and right channel */ @@ -505,7 +505,7 @@ static Word16 advancePsychLong(PSY_DATA* psyData, psyData->blockSwitchingControl.windowSequence, psyData->sfbEnergy.sfbLong); - /* TnsSync */ + /* TnsSync */ if (ch == 1) { TnsSync(tnsData, tnsData2, @@ -514,7 +514,7 @@ static Word16 advancePsychLong(PSY_DATA* psyData, psyData->blockSwitchingControl.windowSequence); } - /* Tns Encoder */ + /* Tns Encoder */ TnsEncode(&psyOutChannel->tnsInfo, tnsData, hPsyConfLong->sfbCnt, @@ -532,15 +532,15 @@ static Word16 advancePsychLong(PSY_DATA* psyData, *data1++ = min(tdata, clipEnergy); } - /* Calc sfb-bandwise mdct-energies for left and right channel again */ + /* Calc sfb-bandwise mdct-energies for left and right channel again */ if (tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive!=0) { - Word16 tnsStartBand = hPsyConfLong->tnsConf.tnsStartBand; + Word16 tnsStartBand = hPsyConfLong->tnsConf.tnsStartBand; CalcBandEnergy( psyData->mdctSpectrum, hPsyConfLong->sfbOffset+tnsStartBand, hPsyConfLong->sfbActive - tnsStartBand, psyData->sfbEnergy.sfbLong+tnsStartBand, &psyData->sfbEnergySum.sfbLong); - + data0 = psyData->sfbEnergy.sfbLong; tdata = psyData->sfbEnergySum.sfbLong; for (i=0; i<tnsStartBand; i++) @@ -565,13 +565,13 @@ static Word16 advancePsychLong(PSY_DATA* psyData, data0++; data1++; } - /* preecho control */ + /* preecho control */ if (psyData->blockSwitchingControl.windowSequence == STOP_WINDOW) { data0 = psyData->sfbThresholdnm1; for (i=hPsyConfLong->sfbCnt; i; i--) { - *data0++ = MAX_32; + *data0++ = MAX_32; } - psyData->mdctScalenm1 = 0; + psyData->mdctScalenm1 = 0; } PreEchoControl( psyData->sfbThresholdnm1, @@ -581,15 +581,15 @@ static Word16 advancePsychLong(PSY_DATA* psyData, psyData->sfbThreshold.sfbLong, psyData->mdctScale, psyData->mdctScalenm1); - psyData->mdctScalenm1 = psyData->mdctScale; + psyData->mdctScalenm1 = psyData->mdctScale; + - if (psyData->blockSwitchingControl.windowSequence== START_WINDOW) { data0 = psyData->sfbThresholdnm1; for (i=hPsyConfLong->sfbCnt; i; i--) { - *data0++ = MAX_32; + *data0++ = MAX_32; } - psyData->mdctScalenm1 = 0; + psyData->mdctScalenm1 = 0; } /* apply tns mult table on cb thresholds */ @@ -603,13 +603,13 @@ static Word16 advancePsychLong(PSY_DATA* psyData, data0 = psyData->sfbSpreadedEnergy.sfbLong; data1 = psyData->sfbEnergy.sfbLong; for (i=hPsyConfLong->sfbCnt; i; i--) { - //psyData->sfbSpreadedEnergy.sfbLong[i] = psyData->sfbEnergy.sfbLong[i]; + //psyData->sfbSpreadedEnergy.sfbLong[i] = psyData->sfbEnergy.sfbLong[i]; *data0++ = *data1++; } /* spreading energy */ SpreadingMax(hPsyConfLong->sfbCnt, - hPsyConfLong->sfbMaskLowFactorSprEn, + hPsyConfLong->sfbMaskLowFactorSprEn, hPsyConfLong->sfbMaskHighFactorSprEn, psyData->sfbSpreadedEnergy.sfbLong); @@ -619,7 +619,7 @@ static Word16 advancePsychLong(PSY_DATA* psyData, /***************************************************************************** * * function name: advancePsychLongMS -* description: update mdct-energies for left add or minus right channel +* description: update mdct-energies for left add or minus right channel * for long block * *****************************************************************************/ @@ -657,7 +657,7 @@ static Word16 advancePsychShort(PSY_DATA* psyData, Word32 w; Word32 normEnergyShift = (psyData->mdctScale + 1) << 1; /* in reference code, mdct spectrum must be multipied with 2, so +1 */ Word32 clipEnergy = hPsyConfShort->clipEnergy >> normEnergyShift; - Word32 wOffset = 0; + Word32 wOffset = 0; Word32 *data0, *data1; for(w = 0; w < TRANS_FAC; w++) { @@ -666,7 +666,7 @@ static Word16 advancePsychShort(PSY_DATA* psyData, /* low pass */ data0 = psyData->mdctSpectrum + wOffset + hPsyConfShort->lowpassLine; for(i=hPsyConfShort->lowpassLine; i<FRAME_LEN_SHORT; i++){ - *data0++ = 0; + *data0++ = 0; } /* Calc sfb-bandwise mdct-energies for left and right channel */ @@ -713,9 +713,9 @@ static Word16 advancePsychShort(PSY_DATA* psyData, *data0++ = min(tdata, clipEnergy); } - /* Calc sfb-bandwise mdct-energies for left and right channel again */ + /* Calc sfb-bandwise mdct-energies for left and right channel again */ if (tnsData->dataRaw.tnsShort.subBlockInfo[w].tnsActive != 0) { - Word16 tnsStartBand = hPsyConfShort->tnsConf.tnsStartBand; + Word16 tnsStartBand = hPsyConfShort->tnsConf.tnsStartBand; CalcBandEnergy( psyData->mdctSpectrum+wOffset, hPsyConfShort->sfbOffset+tnsStartBand, (hPsyConfShort->sfbActive - tnsStartBand), @@ -748,7 +748,7 @@ static Word16 advancePsychShort(PSY_DATA* psyData, } - /* preecho */ + /* preecho */ PreEchoControl( psyData->sfbThresholdnm1, hPsyConfShort->sfbCnt, hPsyConfShort->maxAllowedIncreaseFactor, @@ -770,14 +770,14 @@ static Word16 advancePsychShort(PSY_DATA* psyData, *data0++ = *data1++; } SpreadingMax(hPsyConfShort->sfbCnt, - hPsyConfShort->sfbMaskLowFactorSprEn, + hPsyConfShort->sfbMaskLowFactorSprEn, hPsyConfShort->sfbMaskHighFactorSprEn, psyData->sfbSpreadedEnergy.sfbShort[w]); wOffset += FRAME_LEN_SHORT; } /* for TRANS_FAC */ - psyData->mdctScalenm1 = psyData->mdctScale; + psyData->mdctScalenm1 = psyData->mdctScale; return 0; } @@ -785,7 +785,7 @@ static Word16 advancePsychShort(PSY_DATA* psyData, /***************************************************************************** * * function name: advancePsychShortMS -* description: update mdct-energies for left add or minus right channel +* description: update mdct-energies for left add or minus right channel * for short block * *****************************************************************************/ @@ -793,7 +793,7 @@ static Word16 advancePsychShortMS (PSY_DATA psyData[MAX_CHANNELS], const PSY_CONFIGURATION_SHORT *hPsyConfShort) { Word32 w, wOffset; - wOffset = 0; + wOffset = 0; for(w=0; w<TRANS_FAC; w++) { CalcBandEnergyMS(psyData[0].mdctSpectrum+wOffset, psyData[1].mdctSpectrum+wOffset, diff --git a/media/libstagefright/codecs/aacenc/src/qc_main.c b/media/libstagefright/codecs/aacenc/src/qc_main.c index e8c39e4..df6d46e 100644 --- a/media/libstagefright/codecs/aacenc/src/qc_main.c +++ b/media/libstagefright/codecs/aacenc/src/qc_main.c @@ -68,12 +68,12 @@ static Word16 calcFrameLen(Word32 bitRate, result = (FRAME_LEN_LONG >> 3) * bitRate; quot = result / sampleRate; - + if (mode == FRAME_LEN_BYTES_MODULO) { result -= quot * sampleRate; } else { /* FRAME_LEN_BYTES_INT */ - result = quot; + result = quot; } return result; @@ -83,7 +83,7 @@ static Word16 calcFrameLen(Word32 bitRate, * * function name:framePadding * description: Calculates if padding is needed for actual frame -* returns: paddingOn or not +* returns: paddingOn or not * *****************************************************************************/ static Word16 framePadding(Word32 bitRate, @@ -93,16 +93,16 @@ static Word16 framePadding(Word32 bitRate, Word16 paddingOn; Word16 difference; - paddingOn = 0; + paddingOn = 0; difference = calcFrameLen( bitRate, sampleRate, FRAME_LEN_BYTES_MODULO ); *paddingRest = *paddingRest - difference; - + if (*paddingRest <= 0 ) { - paddingOn = 1; + paddingOn = 1; *paddingRest = *paddingRest + sampleRate; } @@ -123,12 +123,12 @@ Word16 QCOutNew(QC_OUT *hQC, Word16 nChannels, VO_MEM_OPERATOR *pMemOP) Word32 i; Word16 *quantSpec; Word16 *scf; - UWord16 *maxValueInSfb; - + UWord16 *maxValueInSfb; + quantSpec = (Word16 *)mem_malloc(pMemOP, nChannels * FRAME_LEN_LONG * sizeof(Word16), 32, VO_INDEX_ENC_AAC); if(NULL == quantSpec) return 1; - scf = (Word16 *)mem_malloc(pMemOP, nChannels * MAX_GROUPED_SFB * sizeof(Word16), 32, VO_INDEX_ENC_AAC); + scf = (Word16 *)mem_malloc(pMemOP, nChannels * MAX_GROUPED_SFB * sizeof(Word16), 32, VO_INDEX_ENC_AAC); if(NULL == scf) { return 1; @@ -141,12 +141,12 @@ Word16 QCOutNew(QC_OUT *hQC, Word16 nChannels, VO_MEM_OPERATOR *pMemOP) for (i=0; i<nChannels; i++) { hQC->qcChannel[i].quantSpec = quantSpec + i*FRAME_LEN_LONG; - + hQC->qcChannel[i].maxValueInSfb = maxValueInSfb + i*MAX_GROUPED_SFB; - + hQC->qcChannel[i].scf = scf + i*MAX_GROUPED_SFB; } - + return 0; } @@ -165,21 +165,21 @@ void QCOutDelete(QC_OUT* hQC, VO_MEM_OPERATOR *pMemOP) { if(hQC->qcChannel[0].quantSpec); mem_free(pMemOP, hQC->qcChannel[0].quantSpec, VO_INDEX_ENC_AAC); - + if(hQC->qcChannel[0].maxValueInSfb) mem_free(pMemOP, hQC->qcChannel[0].maxValueInSfb, VO_INDEX_ENC_AAC); - + if(hQC->qcChannel[0].scf) mem_free(pMemOP, hQC->qcChannel[0].scf, VO_INDEX_ENC_AAC); for (i=0; i<MAX_CHANNELS; i++) { hQC->qcChannel[i].quantSpec = NULL; - + hQC->qcChannel[i].maxValueInSfb = NULL; - + hQC->qcChannel[i].scf = NULL; } - } + } } /********************************************************************************* @@ -204,8 +204,8 @@ Word16 QCNew(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP) **********************************************************************************/ void QCDelete(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP) { - - /* + + /* nothing to do */ hQC=NULL; @@ -221,15 +221,15 @@ void QCDelete(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP) Word16 QCInit(QC_STATE *hQC, struct QC_INIT *init) { - hQC->nChannels = init->elInfo->nChannelsInEl; - hQC->maxBitsTot = init->maxBits; + hQC->nChannels = init->elInfo->nChannelsInEl; + hQC->maxBitsTot = init->maxBits; hQC->bitResTot = sub(init->bitRes, init->averageBits); - hQC->averageBitsTot = init->averageBits; - hQC->maxBitFac = init->maxBitFac; + hQC->averageBitsTot = init->averageBits; + hQC->maxBitFac = init->maxBitFac; - hQC->padding.paddingRest = init->padding.paddingRest; + hQC->padding.paddingRest = init->padding.paddingRest; - hQC->globStatBits = 3; /* for ID_END */ + hQC->globStatBits = 3; /* for ID_END */ /* channel elements init */ InitElementBits(&hQC->elementBits, @@ -248,13 +248,13 @@ Word16 QCInit(QC_STATE *hQC, /********************************************************************************* -* +* * function name: QCMain * description: quantization and coding the spectrum * returns: 0 if success * **********************************************************************************/ -Word16 QCMain(QC_STATE* hQC, +Word16 QCMain(QC_STATE* hQC, ELEMENT_BITS* elBits, ATS_ELEMENT* adjThrStateElement, PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* may be modified in-place */ @@ -262,34 +262,34 @@ Word16 QCMain(QC_STATE* hQC, QC_OUT_CHANNEL qcOutChannel[MAX_CHANNELS], /* out */ QC_OUT_ELEMENT* qcOutElement, Word16 nChannels, - Word16 ancillaryDataBytes) + Word16 ancillaryDataBytes) { Word16 maxChDynBits[MAX_CHANNELS]; - Word16 chBitDistribution[MAX_CHANNELS]; + Word16 chBitDistribution[MAX_CHANNELS]; Word32 ch; - + if (elBits->bitResLevel < 0) { return -1; } - + if (elBits->bitResLevel > elBits->maxBitResBits) { return -1; } qcOutElement->staticBitsUsed = countStaticBitdemand(psyOutChannel, psyOutElement, - nChannels, + nChannels, qcOutElement->adtsUsed); - + if (ancillaryDataBytes) { qcOutElement->ancBitsUsed = 7 + (ancillaryDataBytes << 3); - + if (ancillaryDataBytes >= 15) qcOutElement->ancBitsUsed = qcOutElement->ancBitsUsed + 8; } else { - qcOutElement->ancBitsUsed = 0; + qcOutElement->ancBitsUsed = 0; } CalcFormFactor(hQC->logSfbFormFactor, hQC->sfbNRelevantLines, hQC->logSfbEnergy, psyOutChannel, nChannels); @@ -301,7 +301,7 @@ Word16 QCMain(QC_STATE* hQC, psyOutElement, chBitDistribution, hQC->logSfbEnergy, - hQC->sfbNRelevantLines, + hQC->sfbNRelevantLines, qcOutElement, elBits, nChannels, @@ -323,14 +323,14 @@ Word16 QCMain(QC_STATE* hQC, maxChDynBits[ch] = extract_l(chBitDistribution[ch] * maxDynBits / 1000); } - qcOutElement->dynBitsUsed = 0; + qcOutElement->dynBitsUsed = 0; for (ch = 0; ch < nChannels; ch++) { Word32 chDynBits; Flag constraintsFulfilled; Word32 iter; - iter = 0; + iter = 0; do { - constraintsFulfilled = 1; + constraintsFulfilled = 1; QuantizeSpectrum(psyOutChannel[ch].sfbCnt, psyOutChannel[ch].maxSfbPerGroup, @@ -340,14 +340,14 @@ Word16 QCMain(QC_STATE* hQC, qcOutChannel[ch].globalGain, qcOutChannel[ch].scf, qcOutChannel[ch].quantSpec); - + if (calcMaxValueInSfb(psyOutChannel[ch].sfbCnt, psyOutChannel[ch].maxSfbPerGroup, psyOutChannel[ch].sfbPerGroup, psyOutChannel[ch].sfbOffsets, qcOutChannel[ch].quantSpec, qcOutChannel[ch].maxValueInSfb) > MAX_QUANT) { - constraintsFulfilled = 0; + constraintsFulfilled = 0; } chDynBits = dynBitCount(qcOutChannel[ch].quantSpec, @@ -359,24 +359,24 @@ Word16 QCMain(QC_STATE* hQC, psyOutChannel[ch].sfbPerGroup, psyOutChannel[ch].sfbOffsets, &qcOutChannel[ch].sectionData); - + if (chDynBits >= maxChDynBits[ch]) { - constraintsFulfilled = 0; + constraintsFulfilled = 0; } - + if (!constraintsFulfilled) { qcOutChannel[ch].globalGain = qcOutChannel[ch].globalGain + 1; } iter = iter + 1; - + } while(!constraintsFulfilled); qcOutElement->dynBitsUsed = qcOutElement->dynBitsUsed + chDynBits; - qcOutChannel[ch].mdctScale = psyOutChannel[ch].mdctScale; - qcOutChannel[ch].groupingMask = psyOutChannel[ch].groupingMask; - qcOutChannel[ch].windowShape = psyOutChannel[ch].windowShape; + qcOutChannel[ch].mdctScale = psyOutChannel[ch].mdctScale; + qcOutChannel[ch].groupingMask = psyOutChannel[ch].groupingMask; + qcOutChannel[ch].windowShape = psyOutChannel[ch].windowShape; } /* save dynBitsUsed for correction of bits2pe relation */ @@ -411,13 +411,13 @@ static Word16 calcMaxValueInSfb(Word16 sfbCnt, Word16 sfbOffs, sfb; Word16 maxValueAll; - maxValueAll = 0; + maxValueAll = 0; for(sfbOffs=0;sfbOffs<sfbCnt;sfbOffs+=sfbPerGroup) { for (sfb = 0; sfb < maxSfbPerGroup; sfb++) { Word16 line; Word16 maxThisSfb; - maxThisSfb = 0; + maxThisSfb = 0; for (line = sfbOffset[sfbOffs+sfb]; line < sfbOffset[sfbOffs+sfb+1]; line++) { Word16 absVal; @@ -425,7 +425,7 @@ static Word16 calcMaxValueInSfb(Word16 sfbCnt, maxThisSfb = max(maxThisSfb, absVal); } - maxValue[sfbOffs+sfb] = maxThisSfb; + maxValue[sfbOffs+sfb] = maxThisSfb; maxValueAll = max(maxValueAll, maxThisSfb); } } @@ -441,15 +441,15 @@ static Word16 calcMaxValueInSfb(Word16 sfbCnt, **********************************************************************************/ void updateBitres(QC_STATE* qcKernel, QC_OUT* qcOut) - + { ELEMENT_BITS *elBits; - - qcKernel->bitResTot = 0; + + qcKernel->bitResTot = 0; elBits = &qcKernel->elementBits; - + if (elBits->averageBits > 0) { /* constant bitrate */ Word16 bitsUsed; @@ -460,8 +460,8 @@ void updateBitres(QC_STATE* qcKernel, } else { /* variable bitrate */ - elBits->bitResLevel = elBits->maxBits; - qcKernel->bitResTot = qcKernel->maxBitsTot; + elBits->bitResLevel = elBits->maxBits; + qcKernel->bitResTot = qcKernel->maxBitsTot; } } @@ -476,55 +476,55 @@ Word16 FinalizeBitConsumption(QC_STATE *qcKernel, { Word32 nFullFillElem; Word32 totFillBits; - Word16 diffBits; + Word16 diffBits; Word16 bitsUsed; - totFillBits = 0; + totFillBits = 0; - qcOut->totStaticBitsUsed = qcKernel->globStatBits; + qcOut->totStaticBitsUsed = qcKernel->globStatBits; qcOut->totStaticBitsUsed += qcOut->qcElement.staticBitsUsed; qcOut->totDynBitsUsed = qcOut->qcElement.dynBitsUsed; qcOut->totAncBitsUsed = qcOut->qcElement.ancBitsUsed; qcOut->totFillBits = qcOut->qcElement.fillBits; - + if (qcOut->qcElement.fillBits) { totFillBits += qcOut->qcElement.fillBits; } nFullFillElem = (max((qcOut->totFillBits - 1), 0) / maxFillElemBits) * maxFillElemBits; - + qcOut->totFillBits = qcOut->totFillBits - nFullFillElem; /* check fill elements */ - + if (qcOut->totFillBits > 0) { /* minimum Fillelement contains 7 (TAG + byte cnt) bits */ qcOut->totFillBits = max(7, qcOut->totFillBits); /* fill element size equals n*8 + 7 */ - qcOut->totFillBits = qcOut->totFillBits + ((8 - ((qcOut->totFillBits - 7) & 0x0007)) & 0x0007); + qcOut->totFillBits = qcOut->totFillBits + ((8 - ((qcOut->totFillBits - 7) & 0x0007)) & 0x0007); } qcOut->totFillBits = qcOut->totFillBits + nFullFillElem; /* now distribute extra fillbits and alignbits over channel elements */ qcOut->alignBits = 7 - ((qcOut->totDynBitsUsed + qcOut->totStaticBitsUsed + - qcOut->totAncBitsUsed + qcOut->totFillBits - 1) & 0x0007); + qcOut->totAncBitsUsed + qcOut->totFillBits - 1) & 0x0007); + - if ( (qcOut->alignBits + qcOut->totFillBits - totFillBits == 8) && (qcOut->totFillBits > 8)) qcOut->totFillBits = qcOut->totFillBits - 8; - + diffBits = qcOut->alignBits + qcOut->totFillBits - totFillBits; - + if(diffBits>=0) { qcOut->qcElement.fillBits += diffBits; } bitsUsed = qcOut->totDynBitsUsed + qcOut->totStaticBitsUsed + qcOut->totAncBitsUsed; bitsUsed = bitsUsed + qcOut->totFillBits + qcOut->alignBits; - + if (bitsUsed > qcKernel->maxBitsTot) { return -1; } @@ -564,9 +564,9 @@ Word16 AdjustBitrate(QC_STATE *hQC, codeBitsLast = hQC->averageBitsTot - hQC->globStatBits; codeBits = frameLen - hQC->globStatBits; - /* calculate bits for every channel element */ + /* calculate bits for every channel element */ if (codeBits != codeBitsLast) { - Word16 totalBits = 0; + Word16 totalBits = 0; hQC->elementBits.averageBits = (hQC->elementBits.relativeBits * codeBits) >> 16; /* relativeBits was scaled down by 2 */ totalBits += hQC->elementBits.averageBits; @@ -574,7 +574,7 @@ Word16 AdjustBitrate(QC_STATE *hQC, hQC->elementBits.averageBits = hQC->elementBits.averageBits + (codeBits - totalBits); } - hQC->averageBitsTot = frameLen; + hQC->averageBitsTot = frameLen; return 0; } diff --git a/media/libstagefright/codecs/aacenc/src/quantize.c b/media/libstagefright/codecs/aacenc/src/quantize.c index 973554e..54add2f 100644 --- a/media/libstagefright/codecs/aacenc/src/quantize.c +++ b/media/libstagefright/codecs/aacenc/src/quantize.c @@ -34,32 +34,32 @@ static const Word32 XROUND = 0x33e425af; /* final rounding constant (-0.0946f+ 0 /***************************************************************************** * -* function name:pow34 -* description: calculate $x^{\frac{3}{4}}, for 0.5 < x < 1.0$. +* function name:pow34 +* description: calculate $x^{\frac{3}{4}}, for 0.5 < x < 1.0$. * *****************************************************************************/ __inline Word32 pow34(Word32 x) { /* index table using MANT_DIGITS bits, but mask out the sign bit and the MSB - which is always one */ + which is always one */ return mTab_3_4[(x >> (INT_BITS-2-MANT_DIGITS)) & (MANT_SIZE-1)]; } /***************************************************************************** * -* function name:quantizeSingleLine -* description: quantizes spectrum -* quaSpectrum = mdctSpectrum^3/4*2^(-(3/16)*gain) +* function name:quantizeSingleLine +* description: quantizes spectrum +* quaSpectrum = mdctSpectrum^3/4*2^(-(3/16)*gain) * *****************************************************************************/ static Word16 quantizeSingleLine(const Word16 gain, const Word32 absSpectrum) { Word32 e, minusFinalExp, finalShift; Word32 x; - Word16 qua = 0; + Word16 qua = 0; + - if (absSpectrum) { e = norm_l(absSpectrum); x = pow34(absSpectrum << e); @@ -71,7 +71,7 @@ static Word16 quantizeSingleLine(const Word16 gain, const Word32 absSpectrum) /* separate the exponent into a shift, and a multiply */ finalShift = minusFinalExp >> 4; - + if (finalShift < INT_BITS) { x = L_mpy_wx(x, pow2tominusNover16[minusFinalExp & 15]); @@ -84,7 +84,7 @@ static Word16 quantizeSingleLine(const Word16 gain, const Word32 absSpectrum) x >>= finalShift; else x <<= (-finalShift); - + qua = saturate(x); } } @@ -94,10 +94,10 @@ static Word16 quantizeSingleLine(const Word16 gain, const Word32 absSpectrum) /***************************************************************************** * -* function name:quantizeLines -* description: quantizes spectrum lines -* quaSpectrum = mdctSpectrum^3/4*2^(-(3/16)*gain) -* input: global gain, number of lines to process, spectral data +* function name:quantizeLines +* description: quantizes spectrum lines +* quaSpectrum = mdctSpectrum^3/4*2^(-(3/16)*gain) +* input: global gain, number of lines to process, spectral data * output: quantized spectrum * *****************************************************************************/ @@ -116,15 +116,15 @@ static void quantizeLines(const Word16 gain, pquat = quantBorders[m]; g += 16; - + if(g >= 0) { for (line=0; line<noOfLines; line++) { Word32 qua; - qua = 0; - + qua = 0; + mdctSpeL = mdctSpectrum[line]; - + if (mdctSpeL) { Word32 sa; Word32 saShft; @@ -134,27 +134,27 @@ static void quantizeLines(const Word16 gain, saShft = sa >> g; if (saShft > pquat[0]) { - + if (saShft < pquat[1]) { - + qua = mdctSpeL>0 ? 1 : -1; } else { - + if (saShft < pquat[2]) { - + qua = mdctSpeL>0 ? 2 : -2; } else { - + if (saShft < pquat[3]) { - + qua = mdctSpeL>0 ? 3 : -3; } else { qua = quantizeSingleLine(gain, sa); /* adjust the sign. Since 0 < qua < 1, this cannot overflow. */ - + if (mdctSpeL < 0) qua = -qua; } @@ -162,17 +162,17 @@ static void quantizeLines(const Word16 gain, } } } - quaSpectrum[line] = qua ; + quaSpectrum[line] = qua ; } } else { for (line=0; line<noOfLines; line++) { Word32 qua; - qua = 0; - + qua = 0; + mdctSpeL = mdctSpectrum[line]; - + if (mdctSpeL) { Word32 sa; Word32 saShft; @@ -181,27 +181,27 @@ static void quantizeLines(const Word16 gain, saShft = sa << g; if (saShft > pquat[0]) { - + if (saShft < pquat[1]) { - + qua = mdctSpeL>0 ? 1 : -1; } else { - + if (saShft < pquat[2]) { - + qua = mdctSpeL>0 ? 2 : -2; } else { - + if (saShft < pquat[3]) { - + qua = mdctSpeL>0 ? 3 : -3; } else { qua = quantizeSingleLine(gain, sa); /* adjust the sign. Since 0 < qua < 1, this cannot overflow. */ - + if (mdctSpeL < 0) qua = -qua; } @@ -209,8 +209,8 @@ static void quantizeLines(const Word16 gain, } } } - quaSpectrum[line] = qua ; - } + quaSpectrum[line] = qua ; + } } } @@ -218,10 +218,10 @@ static void quantizeLines(const Word16 gain, /***************************************************************************** * -* function name:iquantizeLines +* function name:iquantizeLines * description: iquantizes spectrum lines without sign -* mdctSpectrum = iquaSpectrum^4/3 *2^(0.25*gain) -* input: global gain, number of lines to process,quantized spectrum +* mdctSpectrum = iquaSpectrum^4/3 *2^(0.25*gain) +* input: global gain, number of lines to process,quantized spectrum * output: spectral data * *****************************************************************************/ @@ -234,11 +234,11 @@ static void iquantizeLines(const Word16 gain, Word32 iquantizershift; Word32 line; - iquantizermod = gain & 3; + iquantizermod = gain & 3; iquantizershift = gain >> 2; for (line=0; line<noOfLines; line++) { - + if( quantSpectrum[line] != 0 ) { Word32 accu; Word32 ex; @@ -252,19 +252,19 @@ static void iquantizeLines(const Word16 gain, accu = accu << ex; specExp = INT_BITS-1 - ex; - tabIndex = (accu >> (INT_BITS-2-MANT_DIGITS)) & (~MANT_SIZE); + tabIndex = (accu >> (INT_BITS-2-MANT_DIGITS)) & (~MANT_SIZE); /* calculate "mantissa" ^4/3 */ - s = mTab_4_3[tabIndex]; + s = mTab_4_3[tabIndex]; /* get approperiate exponent multiplier for specExp^3/4 combined with scfMod */ - t = specExpMantTableComb_enc[iquantizermod][specExp]; + t = specExpMantTableComb_enc[iquantizermod][specExp]; /* multiply "mantissa" ^4/3 with exponent multiplier */ accu = MULHIGH(s, t); /* get approperiate exponent shifter */ - specExp = specExpTableComb_enc[iquantizermod][specExp]; + specExp = specExpTableComb_enc[iquantizermod][specExp]; specExp += iquantizershift + 1; if(specExp >= 0) @@ -273,7 +273,7 @@ static void iquantizeLines(const Word16 gain, mdctSpectrum[line] = accu >> (-specExp); } else { - mdctSpectrum[line] = 0; + mdctSpectrum[line] = 0; } } } @@ -301,7 +301,7 @@ void QuantizeSpectrum(Word16 sfbCnt, for(sfbOffs=0;sfbOffs<sfbCnt;sfbOffs+=sfbPerGroup) { Word32 sfbNext ; for (sfb = 0; sfb < maxSfbPerGroup; sfb = sfbNext) { - Word16 scalefactor = scalefactors[sfbOffs+sfb]; + Word16 scalefactor = scalefactors[sfbOffs+sfb]; /* coalesce sfbs with the same scalefactor */ for (sfbNext = sfb+1; sfbNext < maxSfbPerGroup && scalefactor == scalefactors[sfbOffs+sfbNext]; @@ -318,7 +318,7 @@ void QuantizeSpectrum(Word16 sfbCnt, /***************************************************************************** * -* function name:calcSfbDist +* function name:calcSfbDist * description: quantizes and requantizes lines to calculate distortion * input: number of lines to be quantized, ... * output: distortion @@ -338,14 +338,14 @@ Word32 calcSfbDist(const Word32 *spec, pquat = quantBorders[m]; repquat = quantRecon[m]; - - dist = 0; + + dist = 0; g += 16; if(g2 < 0 && g >= 0) - { + { g2 = -g2; - for(line=0; line<sfbWidth; line++) { - if (spec[line]) { + for(line=0; line<sfbWidth; line++) { + if (spec[line]) { Word32 diff; Word32 distSingle; Word32 sa; @@ -359,19 +359,19 @@ Word32 calcSfbDist(const Word32 *spec, distSingle = (saShft * saShft) >> g2; } else { - + if (saShft < pquat[1]) { diff = saShft - repquat[0]; distSingle = (diff * diff) >> g2; } else { - + if (saShft < pquat[2]) { diff = saShft - repquat[1]; distSingle = (diff * diff) >> g2; } else { - + if (saShft < pquat[3]) { diff = saShft - repquat[2]; distSingle = (diff * diff) >> g2; @@ -387,15 +387,15 @@ Word32 calcSfbDist(const Word32 *spec, } } } - + dist = L_add(dist, distSingle); } } } else { - for(line=0; line<sfbWidth; line++) { - if (spec[line]) { + for(line=0; line<sfbWidth; line++) { + if (spec[line]) { Word32 diff; Word32 distSingle; Word32 sa; @@ -408,19 +408,19 @@ Word32 calcSfbDist(const Word32 *spec, distSingle = L_shl((saShft * saShft), g2); } else { - + if (saShft < pquat[1]) { diff = saShft - repquat[0]; distSingle = L_shl((diff * diff), g2); } else { - + if (saShft < pquat[2]) { diff = saShft - repquat[1]; distSingle = L_shl((diff * diff), g2); } else { - + if (saShft < pquat[3]) { diff = saShft - repquat[2]; distSingle = L_shl((diff * diff), g2); @@ -438,7 +438,7 @@ Word32 calcSfbDist(const Word32 *spec, } dist = L_add(dist, distSingle); } - } + } } return dist; diff --git a/media/libstagefright/codecs/aacenc/src/sf_estim.c b/media/libstagefright/codecs/aacenc/src/sf_estim.c index ffe2e83..fe40137 100644 --- a/media/libstagefright/codecs/aacenc/src/sf_estim.c +++ b/media/libstagefright/codecs/aacenc/src/sf_estim.c @@ -30,17 +30,17 @@ static const Word16 MAX_SCF_DELTA = 60; /*! -constants reference in comments +constants reference in comments C0 = 6.75f; - C1 = -69.33295f; -16/3*log(MAX_QUANT+0.5-logCon)/log(2) + C1 = -69.33295f; -16/3*log(MAX_QUANT+0.5-logCon)/log(2) C2 = 4.0f; C3 = 2.66666666f; - - PE_C1 = 3.0f; log(8.0)/log(2) - PE_C2 = 1.3219281f; log(2.5)/log(2) - PE_C3 = 0.5593573f; 1-C2/C1 - + + PE_C1 = 3.0f; log(8.0)/log(2) + PE_C2 = 1.3219281f; log(2.5)/log(2) + PE_C3 = 0.5593573f; 1-C2/C1 + */ #define FF_SQRT_BITS 7 @@ -55,15 +55,15 @@ constants reference in comments /********************************************************************************* * * function name: formfac_sqrt -* description: calculates sqrt(x)/256 +* description: calculates sqrt(x)/256 * **********************************************************************************/ __inline Word32 formfac_sqrt(Word32 x) { Word32 y; Word32 preshift, postshift; - - + + if (x==0) return 0; preshift = norm_l(x) - (INT_BITS-1-FF_SQRT_BITS); postshift = preshift >> 1; @@ -74,12 +74,12 @@ __inline Word32 formfac_sqrt(Word32 x) else y = x >> (-preshift); y = formfac_sqrttable[y-32]; - + if(postshift >= 0) y = y >> postshift; else y = y << (-postshift); - + return y; } @@ -100,19 +100,19 @@ CalcFormFactorChannel(Word16 *logSfbFormFactor, Word32 sfbw, sfbw1; Word32 i, j; Word32 sfbOffs, sfb, shift; - + sfbw = sfbw1 = 0; for (sfbOffs=0; sfbOffs<psyOutChan->sfbCnt; sfbOffs+=psyOutChan->sfbPerGroup){ for (sfb=0; sfb<psyOutChan->maxSfbPerGroup; sfb++) { - i = sfbOffs+sfb; - + i = sfbOffs+sfb; + if (psyOutChan->sfbEnergy[i] > psyOutChan->sfbThreshold[i]) { Word32 accu, avgFormFactor,iSfbWidth; Word32 *mdctSpec; sfbw = psyOutChan->sfbOffsets[i+1] - psyOutChan->sfbOffsets[i]; iSfbWidth = invSBF[(sfbw >> 2) - 1]; mdctSpec = psyOutChan->mdctSpectrum + psyOutChan->sfbOffsets[i]; - accu = 0; + accu = 0; /* calc sum of sqrt(spec) */ for (j=sfbw; j; j--) { accu += formfac_sqrt(L_abs(*mdctSpec)); mdctSpec++; @@ -129,7 +129,7 @@ CalcFormFactorChannel(Word16 *logSfbFormFactor, } else { /* set number of lines to zero */ - sfbNRelevantLines[i] = 0; + sfbNRelevantLines[i] = 0; } } } @@ -141,68 +141,68 @@ CalcFormFactorChannel(Word16 *logSfbFormFactor, * description: find better scalefactor with analysis by synthesis * **********************************************************************************/ -static Word16 improveScf(Word32 *spec, - Word16 sfbWidth, - Word32 thresh, +static Word16 improveScf(Word32 *spec, + Word16 sfbWidth, + Word32 thresh, Word16 scf, Word16 minScf, - Word32 *dist, + Word32 *dist, Word16 *minScfCalculated) { Word32 cnt; Word32 sfbDist; Word32 scfBest; Word32 thresh125 = L_add(thresh, (thresh >> 2)); - - scfBest = scf; - + + scfBest = scf; + /* calc real distortion */ sfbDist = calcSfbDist(spec, sfbWidth, scf); - *minScfCalculated = scf; + *minScfCalculated = scf; if(!sfbDist) return scfBest; - + if (sfbDist > thresh125) { Word32 scfEstimated; Word32 sfbDistBest; - scfEstimated = scf; - sfbDistBest = sfbDist; - - cnt = 0; + scfEstimated = scf; + sfbDistBest = sfbDist; + + cnt = 0; while (sfbDist > thresh125 && (cnt < 3)) { - + scf = scf + 1; sfbDist = calcSfbDist(spec, sfbWidth, scf); - + if (sfbDist < sfbDistBest) { - scfBest = scf; - sfbDistBest = sfbDist; + scfBest = scf; + sfbDistBest = sfbDist; } cnt = cnt + 1; } - cnt = 0; - scf = scfEstimated; - sfbDist = sfbDistBest; + cnt = 0; + scf = scfEstimated; + sfbDist = sfbDistBest; while ((sfbDist > thresh125) && (cnt < 1) && (scf > minScf)) { - + scf = scf - 1; sfbDist = calcSfbDist(spec, sfbWidth, scf); - + if (sfbDist < sfbDistBest) { - scfBest = scf; - sfbDistBest = sfbDist; + scfBest = scf; + sfbDistBest = sfbDist; } - *minScfCalculated = scf; + *minScfCalculated = scf; cnt = cnt + 1; } - *dist = sfbDistBest; + *dist = sfbDistBest; } else { - Word32 sfbDistBest; + Word32 sfbDistBest; Word32 sfbDistAllowed; Word32 thresh08 = fixmul(COEF08_31, thresh); - sfbDistBest = sfbDist; - + sfbDistBest = sfbDist; + if (sfbDist < thresh08) sfbDistAllowed = sfbDist; else @@ -210,16 +210,16 @@ static Word16 improveScf(Word32 *spec, for (cnt=0; cnt<3; cnt++) { scf = scf + 1; sfbDist = calcSfbDist(spec, sfbWidth, scf); - + if (fixmul(COEF08_31,sfbDist) < sfbDistAllowed) { *minScfCalculated = scfBest + 1; - scfBest = scf; - sfbDistBest = sfbDist; + scfBest = scf; + sfbDistBest = sfbDist; } } - *dist = sfbDistBest; + *dist = sfbDistBest; } - + /* return best scalefactor */ return scfBest; } @@ -233,10 +233,10 @@ static Word16 improveScf(Word32 *spec, static Word16 countSingleScfBits(Word16 scf, Word16 scfLeft, Word16 scfRight) { Word16 scfBits; - + scfBits = bitCountScalefactorDelta(scfLeft - scf) + bitCountScalefactorDelta(scf - scfRight); - + return scfBits; } @@ -245,7 +245,7 @@ static Word16 countSingleScfBits(Word16 scf, Word16 scfLeft, Word16 scfRight) * function name: calcSingleSpecPe * description: ldRatio = log2(en(n)) - 0,375*scfGain(n) * nbits = 0.7*nLines*ldRation for ldRation >= c1 -* nbits = 0.7*nLines*(c2 + c3*ldRatio) for ldRation < c1 +* nbits = 0.7*nLines*(c2 + c3*ldRatio) for ldRation < c1 * **********************************************************************************/ static Word16 calcSingleSpecPe(Word16 scf, Word16 sfbConstPePart, Word16 nLines) @@ -253,18 +253,18 @@ static Word16 calcSingleSpecPe(Word16 scf, Word16 sfbConstPePart, Word16 nLines) Word32 specPe; Word32 ldRatio; Word32 scf3; - + ldRatio = sfbConstPePart << 3; /* (sfbConstPePart -0.375*scf)*8 */ scf3 = scf + scf + scf; ldRatio = ldRatio - scf3; - + if (ldRatio < PE_C1_8) { - /* 21 : 2*8*PE_C2, 2*PE_C3 ~ 1*/ + /* 21 : 2*8*PE_C2, 2*PE_C3 ~ 1*/ ldRatio = (ldRatio + PE_C2_16) >> 1; } specPe = nLines * ldRatio; specPe = (specPe * PE_SCALE) >> 14; - + return saturate(specPe); } @@ -275,53 +275,53 @@ static Word16 calcSingleSpecPe(Word16 scf, Word16 sfbConstPePart, Word16 nLines) * description: count different scf bits used * **********************************************************************************/ -static Word16 countScfBitsDiff(Word16 *scfOld, Word16 *scfNew, +static Word16 countScfBitsDiff(Word16 *scfOld, Word16 *scfNew, Word16 sfbCnt, Word16 startSfb, Word16 stopSfb) { Word32 scfBitsDiff; Word32 sfb, sfbLast; Word32 sfbPrev, sfbNext; - - scfBitsDiff = 0; - sfb = 0; - + + scfBitsDiff = 0; + sfb = 0; + /* search for first relevant sfb */ - sfbLast = startSfb; + sfbLast = startSfb; while (sfbLast < stopSfb && scfOld[sfbLast] == VOAAC_SHRT_MIN) { - + sfbLast = sfbLast + 1; } /* search for previous relevant sfb and count diff */ sfbPrev = startSfb - 1; while ((sfbPrev>=0) && scfOld[sfbPrev] == VOAAC_SHRT_MIN) { - + sfbPrev = sfbPrev - 1; } - + if (sfbPrev>=0) { scfBitsDiff += bitCountScalefactorDelta(scfNew[sfbPrev] - scfNew[sfbLast]) - bitCountScalefactorDelta(scfOld[sfbPrev] - scfOld[sfbLast]); } /* now loop through all sfbs and count diffs of relevant sfbs */ for (sfb=sfbLast+1; sfb<stopSfb; sfb++) { - + if (scfOld[sfb] != VOAAC_SHRT_MIN) { scfBitsDiff += bitCountScalefactorDelta(scfNew[sfbLast] - scfNew[sfb]) - bitCountScalefactorDelta(scfOld[sfbLast] - scfOld[sfb]); - sfbLast = sfb; + sfbLast = sfb; } } /* search for next relevant sfb and count diff */ - sfbNext = stopSfb; + sfbNext = stopSfb; while (sfbNext < sfbCnt && scfOld[sfbNext] == VOAAC_SHRT_MIN) { - + sfbNext = sfbNext + 1; } - + if (sfbNext < sfbCnt) scfBitsDiff += bitCountScalefactorDelta(scfNew[sfbLast] - scfNew[sfbNext]) - bitCountScalefactorDelta(scfOld[sfbLast] - scfOld[sfbNext]); - + return saturate(scfBitsDiff); } @@ -331,52 +331,52 @@ static Word16 calcSpecPeDiff(Word16 *scfOld, Word16 *logSfbEnergy, Word16 *logSfbFormFactor, Word16 *sfbNRelevantLines, - Word16 startSfb, + Word16 startSfb, Word16 stopSfb) { Word32 specPeDiff; Word32 sfb; - - specPeDiff = 0; - + + specPeDiff = 0; + /* loop through all sfbs and count pe difference */ for (sfb=startSfb; sfb<stopSfb; sfb++) { - - + + if (scfOld[sfb] != VOAAC_SHRT_MIN) { Word32 ldRatioOld, ldRatioNew; Word32 scf3; - - + + if (sfbConstPePart[sfb] == MIN_16) { sfbConstPePart[sfb] = ((logSfbEnergy[sfb] - logSfbFormFactor[sfb]) + 11-8*4+3) >> 2; } - - + + ldRatioOld = sfbConstPePart[sfb] << 3; scf3 = scfOld[sfb] + scfOld[sfb] + scfOld[sfb]; ldRatioOld = ldRatioOld - scf3; ldRatioNew = sfbConstPePart[sfb] << 3; scf3 = scfNew[sfb] + scfNew[sfb] + scfNew[sfb]; ldRatioNew = ldRatioNew - scf3; - + if (ldRatioOld < PE_C1_8) { /* 21 : 2*8*PE_C2, 2*PE_C3 ~ 1*/ ldRatioOld = (ldRatioOld + PE_C2_16) >> 1; } - + if (ldRatioNew < PE_C1_8) { /* 21 : 2*8*PE_C2, 2*PE_C3 ~ 1*/ ldRatioNew = (ldRatioNew + PE_C2_16) >> 1; } - + specPeDiff += sfbNRelevantLines[sfb] * (ldRatioNew - ldRatioOld); } } - + specPeDiff = (specPeDiff * PE_SCALE) >> 14; - + return saturate(specPeDiff); } @@ -390,9 +390,9 @@ static Word16 calcSpecPeDiff(Word16 *scfOld, * **********************************************************************************/ static void assimilateSingleScf(PSY_OUT_CHANNEL *psyOutChan, - Word16 *scf, + Word16 *scf, Word16 *minScf, - Word32 *sfbDist, + Word32 *sfbDist, Word16 *sfbConstPePart, Word16 *logSfbEnergy, Word16 *logSfbFormFactor, @@ -411,94 +411,94 @@ static void assimilateSingleScf(PSY_OUT_CHANNEL *psyOutChan, Word16 *prevScfNext = psyOutChan->prevScfNext; Word16 *deltaPeLast = psyOutChan->deltaPeLast; Flag updateMinScfCalculated; - - success = 0; - deltaPe = 0; - + + success = 0; + deltaPe = 0; + for(j=0;j<psyOutChan->sfbCnt;j++){ - prevScfLast[j] = MAX_16; - prevScfNext[j] = MAX_16; - deltaPeLast[j] = MAX_16; + prevScfLast[j] = MAX_16; + prevScfNext[j] = MAX_16; + deltaPeLast[j] = MAX_16; } - - sfbLast = -1; - sfbAct = -1; - sfbNext = -1; + + sfbLast = -1; + sfbAct = -1; + sfbNext = -1; scfLast = 0; scfNext = 0; - scfMin = MAX_16; + scfMin = MAX_16; do { /* search for new relevant sfb */ sfbNext = sfbNext + 1; while (sfbNext < psyOutChan->sfbCnt && scf[sfbNext] == MIN_16) { - + sfbNext = sfbNext + 1; } - + if ((sfbLast>=0) && (sfbAct>=0) && sfbNext < psyOutChan->sfbCnt) { /* relevant scfs to the left and to the right */ - scfAct = scf[sfbAct]; + scfAct = scf[sfbAct]; scfLast = scf + sfbLast; scfNext = scf + sfbNext; scfMin = min(*scfLast, *scfNext); } else { - + if (sfbLast == -1 && (sfbAct>=0) && sfbNext < psyOutChan->sfbCnt) { /* first relevant scf */ - scfAct = scf[sfbAct]; + scfAct = scf[sfbAct]; scfLast = &scfAct; scfNext = scf + sfbNext; - scfMin = *scfNext; + scfMin = *scfNext; } else { - + if ((sfbLast>=0) && (sfbAct>=0) && sfbNext == psyOutChan->sfbCnt) { /* last relevant scf */ - scfAct = scf[sfbAct]; + scfAct = scf[sfbAct]; scfLast = scf + sfbLast; scfNext = &scfAct; - scfMin = *scfLast; + scfMin = *scfLast; } } } - + if (sfbAct>=0) scfMin = max(scfMin, minScf[sfbAct]); - - if ((sfbAct >= 0) && - (sfbLast>=0 || sfbNext < psyOutChan->sfbCnt) && - scfAct > scfMin && - (*scfLast != prevScfLast[sfbAct] || - *scfNext != prevScfNext[sfbAct] || + + if ((sfbAct >= 0) && + (sfbLast>=0 || sfbNext < psyOutChan->sfbCnt) && + scfAct > scfMin && + (*scfLast != prevScfLast[sfbAct] || + *scfNext != prevScfNext[sfbAct] || deltaPe < deltaPeLast[sfbAct])) { - success = 0; - - /* estimate required bits for actual scf */ + success = 0; + + /* estimate required bits for actual scf */ if (sfbConstPePart[sfbAct] == MIN_16) { sfbConstPePart[sfbAct] = logSfbEnergy[sfbAct] - logSfbFormFactor[sfbAct] + 11-8*4; /* 4*log2(6.75) - 32 */ - + if (sfbConstPePart[sfbAct] < 0) sfbConstPePart[sfbAct] = sfbConstPePart[sfbAct] + 3; sfbConstPePart[sfbAct] = sfbConstPePart[sfbAct] >> 2; } - + sfbPeOld = calcSingleSpecPe(scfAct, sfbConstPePart[sfbAct], sfbNRelevantLines[sfbAct]) + countSingleScfBits(scfAct, *scfLast, *scfNext); - deltaPeNew = deltaPe; - updateMinScfCalculated = 1; + deltaPeNew = deltaPe; + updateMinScfCalculated = 1; do { scfAct = scfAct - 1; /* check only if the same check was not done before */ - + if (scfAct < minScfCalculated[sfbAct]) { sfbPeNew = calcSingleSpecPe(scfAct, sfbConstPePart[sfbAct], sfbNRelevantLines[sfbAct]) + countSingleScfBits(scfAct, *scfLast, *scfNext); - /* use new scf if no increase in pe and + /* use new scf if no increase in pe and quantization error is smaller */ deltaPeTmp = deltaPe + sfbPeNew - sfbPeOld; - + if (deltaPeTmp < 10) { sfbDistNew = calcSfbDist(psyOutChan->mdctSpectrum+ psyOutChan->sfbOffsets[sfbAct], @@ -506,46 +506,46 @@ static void assimilateSingleScf(PSY_OUT_CHANNEL *psyOutChan, scfAct); if (sfbDistNew < sfbDist[sfbAct]) { /* success, replace scf by new one */ - scf[sfbAct] = scfAct; - sfbDist[sfbAct] = sfbDistNew; - deltaPeNew = deltaPeTmp; - success = 1; + scf[sfbAct] = scfAct; + sfbDist[sfbAct] = sfbDistNew; + deltaPeNew = deltaPeTmp; + success = 1; } /* mark as already checked */ - + if (updateMinScfCalculated) { - minScfCalculated[sfbAct] = scfAct; + minScfCalculated[sfbAct] = scfAct; } } else { - updateMinScfCalculated = 0; + updateMinScfCalculated = 0; } } - + } while (scfAct > scfMin); - deltaPe = deltaPeNew; + deltaPe = deltaPeNew; /* save parameters to avoid multiple computations of the same sfb */ - prevScfLast[sfbAct] = *scfLast; - prevScfNext[sfbAct] = *scfNext; - deltaPeLast[sfbAct] = deltaPe; + prevScfLast[sfbAct] = *scfLast; + prevScfNext[sfbAct] = *scfNext; + deltaPeLast[sfbAct] = deltaPe; } - + if (success && restartOnSuccess) { /* start again at first sfb */ - sfbLast = -1; - sfbAct = -1; - sfbNext = -1; + sfbLast = -1; + sfbAct = -1; + sfbNext = -1; scfLast = 0; scfNext = 0; - scfMin = MAX_16; - success = 0; + scfMin = MAX_16; + success = 0; } else { /* shift sfbs for next band */ - sfbLast = sfbAct; - sfbAct = sfbNext; + sfbLast = sfbAct; + sfbAct = sfbNext; } - + } while (sfbNext < psyOutChan->sfbCnt); } @@ -557,9 +557,9 @@ static void assimilateSingleScf(PSY_OUT_CHANNEL *psyOutChan, * **********************************************************************************/ static void assimilateMultipleScf(PSY_OUT_CHANNEL *psyOutChan, - Word16 *scf, + Word16 *scf, Word16 *minScf, - Word32 *sfbDist, + Word32 *sfbDist, Word16 *sfbConstPePart, Word16 *logSfbEnergy, Word16 *logSfbFormFactor, @@ -574,95 +574,95 @@ static void assimilateMultipleScf(PSY_OUT_CHANNEL *psyOutChan, Word32 *sfbDistNew = psyOutChan->sfbDistNew; Word16 *scfTmp = psyOutChan->prevScfLast; - deltaPe = 0; - sfbCnt = psyOutChan->sfbCnt; - + deltaPe = 0; + sfbCnt = psyOutChan->sfbCnt; + /* calc min and max scalfactors */ - scfMin = MAX_16; - scfMax = MIN_16; + scfMin = MAX_16; + scfMax = MIN_16; for (sfb=0; sfb<sfbCnt; sfb++) { - + if (scf[sfb] != MIN_16) { scfMin = min(scfMin, scf[sfb]); scfMax = max(scfMax, scf[sfb]); } } - + if (scfMax != MIN_16) { - - scfAct = scfMax; - + + scfAct = scfMax; + do { scfAct = scfAct - 1; for (sfb=0; sfb<sfbCnt; sfb++) { - scfTmp[sfb] = scf[sfb]; + scfTmp[sfb] = scf[sfb]; } - stopSfb = 0; + stopSfb = 0; do { - sfb = stopSfb; - + sfb = stopSfb; + while (sfb < sfbCnt && (scf[sfb] == MIN_16 || scf[sfb] <= scfAct)) { sfb = sfb + 1; } - startSfb = sfb; + startSfb = sfb; sfb = sfb + 1; - + while (sfb < sfbCnt && (scf[sfb] == MIN_16 || scf[sfb] > scfAct)) { sfb = sfb + 1; } - stopSfb = sfb; - - possibleRegionFound = 0; - + stopSfb = sfb; + + possibleRegionFound = 0; + if (startSfb < sfbCnt) { - possibleRegionFound = 1; + possibleRegionFound = 1; for (sfb=startSfb; sfb<stopSfb; sfb++) { - + if (scf[sfb]!=MIN_16) { - + if (scfAct < minScf[sfb]) { - possibleRegionFound = 0; + possibleRegionFound = 0; break; } } } } - - + + if (possibleRegionFound) { /* region found */ - + /* replace scfs in region by scfAct */ for (sfb=startSfb; sfb<stopSfb; sfb++) { - + if (scfTmp[sfb]!=MIN_16) - scfTmp[sfb] = scfAct; + scfTmp[sfb] = scfAct; } - + /* estimate change in bit demand for new scfs */ deltaScfBits = countScfBitsDiff(scf,scfTmp,sfbCnt,startSfb,stopSfb); deltaSpecPe = calcSpecPeDiff(scf, scfTmp, sfbConstPePart, - logSfbEnergy, logSfbFormFactor, sfbNRelevantLines, + logSfbEnergy, logSfbFormFactor, sfbNRelevantLines, startSfb, stopSfb); deltaPeNew = deltaPe + deltaScfBits + deltaSpecPe; - - + + if (deltaPeNew < 10) { Word32 distOldSum, distNewSum; - + /* quantize and calc sum of new distortion */ - distOldSum = 0; - distNewSum = 0; + distOldSum = 0; + distNewSum = 0; for (sfb=startSfb; sfb<stopSfb; sfb++) { - + if (scfTmp[sfb] != MIN_16) { distOldSum = L_add(distOldSum, sfbDist[sfb]); - + sfbDistNew[sfb] = calcSfbDist(psyOutChan->mdctSpectrum + - psyOutChan->sfbOffsets[sfb], + psyOutChan->sfbOffsets[sfb], (psyOutChan->sfbOffsets[sfb+1] - psyOutChan->sfbOffsets[sfb]), scfAct); - - + + if (sfbDistNew[sfb] > psyOutChan->sfbThreshold[sfb]) { distNewSum = distOldSum << 1; break; @@ -670,20 +670,20 @@ static void assimilateMultipleScf(PSY_OUT_CHANNEL *psyOutChan, distNewSum = L_add(distNewSum, sfbDistNew[sfb]); } } - + if (distNewSum < distOldSum) { - deltaPe = deltaPeNew; + deltaPe = deltaPeNew; for (sfb=startSfb; sfb<stopSfb; sfb++) { - + if (scf[sfb]!=MIN_16) { - scf[sfb] = scfAct; - sfbDist[sfb] = sfbDistNew[sfb]; + scf[sfb] = scfAct; + sfbDist[sfb] = sfbDistNew[sfb]; } } } } - } - } while (stopSfb <= sfbCnt); + } + } while (stopSfb <= sfbCnt); } while (scfAct > scfMin); } } @@ -710,125 +710,125 @@ EstimateScaleFactorsChannel(PSY_OUT_CHANNEL *psyOutChan, Word32 *sfbDist = psyOutChan->sfbDist; Word16 *minSfMaxQuant = psyOutChan->minSfMaxQuant; Word16 *minScfCalculated = psyOutChan->minScfCalculated; - - + + for (i=0; i<psyOutChan->sfbCnt; i++) { Word32 sbfwith, sbfStart; Word32 *mdctSpec; - thresh = psyOutChan->sfbThreshold[i]; - energy = psyOutChan->sfbEnergy[i]; - + thresh = psyOutChan->sfbThreshold[i]; + energy = psyOutChan->sfbEnergy[i]; + sbfStart = psyOutChan->sfbOffsets[i]; sbfwith = psyOutChan->sfbOffsets[i+1] - sbfStart; mdctSpec = psyOutChan->mdctSpectrum+sbfStart; - - maxSpec = 0; + + maxSpec = 0; /* maximum of spectrum */ for (j=sbfwith; j; j-- ) { Word32 absSpec = L_abs(*mdctSpec); mdctSpec++; - maxSpec |= absSpec; + maxSpec |= absSpec; } - + /* scfs without energy or with thresh>energy are marked with MIN_16 */ - scf[i] = MIN_16; - minSfMaxQuant[i] = MIN_16; - + scf[i] = MIN_16; + minSfMaxQuant[i] = MIN_16; + if ((maxSpec > 0) && (energy > thresh)) { - - energyPart = logSfbFormFactor[i]; - thresholdPart = iLog4(thresh); + + energyPart = logSfbFormFactor[i]; + thresholdPart = iLog4(thresh); /* -20 = 4*log2(6.75) - 32 */ scfInt = ((thresholdPart - energyPart - 20) * SCALE_ESTIMATE_COEF) >> 15; - + minSfMaxQuant[i] = iLog4(maxSpec) - 68; /* 68 -16/3*log(MAX_QUANT+0.5-logCon)/log(2) + 1 */ - - + + if (minSfMaxQuant[i] > scfInt) { - scfInt = minSfMaxQuant[i]; + scfInt = minSfMaxQuant[i]; } - + /* find better scalefactor with analysis by synthesis */ scfInt = improveScf(psyOutChan->mdctSpectrum+sbfStart, sbfwith, - thresh, scfInt, minSfMaxQuant[i], + thresh, scfInt, minSfMaxQuant[i], &sfbDist[i], &minScfCalculated[i]); - - scf[i] = scfInt; + + scf[i] = scfInt; } } - - + + /* scalefactor differece reduction */ { Word16 sfbConstPePart[MAX_GROUPED_SFB]; for(i=0;i<psyOutChan->sfbCnt;i++) { - sfbConstPePart[i] = MIN_16; + sfbConstPePart[i] = MIN_16; } - - assimilateSingleScf(psyOutChan, scf, + + assimilateSingleScf(psyOutChan, scf, minSfMaxQuant, sfbDist, sfbConstPePart, logSfbEnergy, logSfbFormFactor, sfbNRelevantLines, minScfCalculated, 1); - - assimilateMultipleScf(psyOutChan, scf, + + assimilateMultipleScf(psyOutChan, scf, minSfMaxQuant, sfbDist, sfbConstPePart, logSfbEnergy, logSfbFormFactor, sfbNRelevantLines); } /* get max scalefac for global gain */ - maxScf = MIN_16; - minScf = MAX_16; + maxScf = MIN_16; + minScf = MAX_16; for (i=0; i<psyOutChan->sfbCnt; i++) { - + if (maxScf < scf[i]) { - maxScf = scf[i]; + maxScf = scf[i]; } - + if ((scf[i] != MIN_16) && (minScf > scf[i])) { - minScf = scf[i]; + minScf = scf[i]; } } /* limit scf delta */ maxAllowedScf = minScf + MAX_SCF_DELTA; for(i=0; i<psyOutChan->sfbCnt; i++) { - + if ((scf[i] != MIN_16) && (maxAllowedScf < scf[i])) { - scf[i] = maxAllowedScf; + scf[i] = maxAllowedScf; } } /* new maxScf if any scf has been limited */ - + if (maxAllowedScf < maxScf) { - maxScf = maxAllowedScf; + maxScf = maxAllowedScf; } - + /* calc loop scalefactors */ - + if (maxScf > MIN_16) { - *globalGain = maxScf; - lastSf = 0; - + *globalGain = maxScf; + lastSf = 0; + for(i=0; i<psyOutChan->sfbCnt; i++) { - + if (scf[i] == MIN_16) { - scf[i] = lastSf; + scf[i] = lastSf; /* set band explicitely to zero */ for (j=psyOutChan->sfbOffsets[i]; j<psyOutChan->sfbOffsets[i+1]; j++) { - psyOutChan->mdctSpectrum[j] = 0; + psyOutChan->mdctSpectrum[j] = 0; } } else { scf[i] = maxScf - scf[i]; - lastSf = scf[i]; + lastSf = scf[i]; } } } else{ - *globalGain = 0; + *globalGain = 0; /* set spectrum explicitely to zero */ for(i=0; i<psyOutChan->sfbCnt; i++) { - scf[i] = 0; + scf[i] = 0; for (j=psyOutChan->sfbOffsets[i]; j<psyOutChan->sfbOffsets[i+1]; j++) { - psyOutChan->mdctSpectrum[j] = 0; + psyOutChan->mdctSpectrum[j] = 0; } } } @@ -848,7 +848,7 @@ CalcFormFactor(Word16 logSfbFormFactor[MAX_CHANNELS][MAX_GROUPED_SFB], const Word16 nChannels) { Word16 j; - + for (j=0; j<nChannels; j++) { CalcFormFactorChannel(logSfbFormFactor[j], sfbNRelevantLines[j], logSfbEnergy[j], &psyOutChannel[j]); } @@ -869,7 +869,7 @@ EstimateScaleFactors(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], const Word16 nChannels) { Word16 j; - + for (j=0; j<nChannels; j++) { EstimateScaleFactorsChannel(&psyOutChannel[j], qcOutChannel[j].scf, diff --git a/media/libstagefright/codecs/aacenc/src/stat_bits.c b/media/libstagefright/codecs/aacenc/src/stat_bits.c index baa289c..c2bd8bd 100644 --- a/media/libstagefright/codecs/aacenc/src/stat_bits.c +++ b/media/libstagefright/codecs/aacenc/src/stat_bits.c @@ -52,9 +52,9 @@ static Word16 countMsMaskBits(Word16 sfbCnt, struct TOOLSINFO *toolsInfo) { Word16 msBits, sfbOff, sfb; - msBits = 0; + msBits = 0; + - switch(toolsInfo->msDigest) { case MS_NONE: case MS_ALL: @@ -85,34 +85,34 @@ static Word16 tnsCount(TNS_INFO *tnsInfo, Word16 blockType) Word32 coefBits; Word16 *ptcoef; - count = 0; - + count = 0; + if (blockType == 2) numOfWindows = 8; else numOfWindows = 1; - tnsPresent = 0; + tnsPresent = 0; for (i=0; i<numOfWindows; i++) { - + if (tnsInfo->tnsActive[i]!=0) { - tnsPresent = 1; + tnsPresent = 1; } } - + if (tnsPresent) { /* there is data to be written*/ /*count += 1; */ for (i=0; i<numOfWindows; i++) { - + if (blockType == 2) count += 1; else count += 2; - + if (tnsInfo->tnsActive[i]) { count += 1; - + if (blockType == 2) { count += 4; count += 3; @@ -121,29 +121,29 @@ static Word16 tnsCount(TNS_INFO *tnsInfo, Word16 blockType) count += 6; count += 5; } - + if (tnsInfo->order[i]) { count += 1; /*direction*/ - count += 1; /*coef_compression */ - + count += 1; /*coef_compression */ + if (tnsInfo->coefRes[i] == 4) { ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT; - coefBits = 3; + coefBits = 3; for(k=0; k<tnsInfo->order[i]; k++) { - + if ((ptcoef[k] > 3) || (ptcoef[k] < -4)) { - coefBits = 4; + coefBits = 4; break; } } } else { - coefBits = 2; + coefBits = 2; ptcoef = tnsInfo->coef + i*TNS_MAX_ORDER_SHORT; for(k=0; k<tnsInfo->order[i]; k++) { - + if ((ptcoef[k] > 1) || (ptcoef[k] < -2)) { - coefBits = 3; + coefBits = 3; break; } } @@ -155,14 +155,14 @@ static Word16 tnsCount(TNS_INFO *tnsInfo, Word16 blockType) } } } - + return count; } /********************************************************************************** * * function name: countTnsBits -* description: count tns bit demand +* description: count tns bit demand * **********************************************************************************/ static Word16 countTnsBits(TNS_INFO *tnsInfo,Word16 blockType) @@ -173,29 +173,29 @@ static Word16 countTnsBits(TNS_INFO *tnsInfo,Word16 blockType) /********************************************************************************* * * function name: countStaticBitdemand -* description: count static bit demand include tns +* description: count static bit demand include tns * **********************************************************************************/ Word16 countStaticBitdemand(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], PSY_OUT_ELEMENT *psyOutElement, - Word16 channels, + Word16 channels, Word16 adtsUsed) { Word32 statBits; Word32 ch; - - statBits = 0; + + statBits = 0; /* if adts used, add 56 bits */ if(adtsUsed) statBits += 56; - + switch (channels) { case 1: statBits += SI_ID_BITS+SI_SCE_BITS+SI_ICS_BITS; statBits += countTnsBits(&(psyOutChannel[0].tnsInfo), psyOutChannel[0].windowSequence); - + switch(psyOutChannel[0].windowSequence){ case LONG_WINDOW: case START_WINDOW: @@ -215,7 +215,7 @@ Word16 countStaticBitdemand(PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], psyOutChannel[0].sfbPerGroup, psyOutChannel[0].maxSfbPerGroup, &psyOutElement->toolsInfo); - + switch (psyOutChannel[0].windowSequence) { case LONG_WINDOW: case START_WINDOW: diff --git a/media/libstagefright/codecs/aacenc/src/tns.c b/media/libstagefright/codecs/aacenc/src/tns.c index 473e0a0..455a864 100644 --- a/media/libstagefright/codecs/aacenc/src/tns.c +++ b/media/libstagefright/codecs/aacenc/src/tns.c @@ -100,20 +100,20 @@ static Word16 FreqToBandWithRounding(Word32 freq, /*!< frequen /* assert(freq >= 0); */ shift = norm_l(fs); lineNumber = (extract_l(fixmul((bandStartOffset[numOfBands] << 2),Div_32(freq << shift,fs << shift))) + 1) >> 1; - + /* freq > fs/2 */ - temp = lineNumber - bandStartOffset[numOfBands] ; + temp = lineNumber - bandStartOffset[numOfBands] ; if (temp >= 0) return numOfBands; /* find band the line number lies in */ for (band=0; band<numOfBands; band++) { - temp = bandStartOffset[band + 1] - lineNumber; + temp = bandStartOffset[band + 1] - lineNumber; if (temp > 0) break; } temp = (lineNumber - bandStartOffset[band]); - temp = (temp - (bandStartOffset[band + 1] - lineNumber)); + temp = (temp - (bandStartOffset[band + 1] - lineNumber)); if ( temp > 0 ) { band = band + 1; @@ -139,25 +139,25 @@ Word16 InitTnsConfigurationLong(Word32 bitRate, /*!< bitrate */ { Word32 bitratePerChannel; - tC->maxOrder = TNS_MAX_ORDER; + tC->maxOrder = TNS_MAX_ORDER; tC->tnsStartFreq = 1275; - tC->coefRes = 4; - + tC->coefRes = 4; + /* to avoid integer division */ - if ( sub(channels,2) == 0 ) { - bitratePerChannel = bitRate >> 1; + if ( sub(channels,2) == 0 ) { + bitratePerChannel = bitRate >> 1; } else { - bitratePerChannel = bitRate; + bitratePerChannel = bitRate; } tC->tnsMaxSfb = tnsMaxBandsLongMainLow[pC->sampRateIdx]; - tC->tnsActive = active; + tC->tnsActive = active; /* now calc band and line borders */ tC->tnsStopBand = min(pC->sfbCnt, tC->tnsMaxSfb); - tC->tnsStopLine = pC->sfbOffset[tC->tnsStopBand]; + tC->tnsStopLine = pC->sfbOffset[tC->tnsStopBand]; tC->tnsStartBand = FreqToBandWithRounding(tC->tnsStartFreq, sampleRate, pC->sfbCnt, (const Word16*)pC->sfbOffset); @@ -173,18 +173,18 @@ Word16 InitTnsConfigurationLong(Word32 bitRate, /*!< bitrate */ (const Word16*)pC->sfbOffset); - tC->tnsStartLine = pC->sfbOffset[tC->tnsStartBand]; + tC->tnsStartLine = pC->sfbOffset[tC->tnsStartBand]; tC->lpcStopBand = tnsMaxBandsLongMainLow[pC->sampRateIdx]; tC->lpcStopBand = min(tC->lpcStopBand, pC->sfbActive); - tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand]; - + tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand]; + tC->lpcStartBand = tnsMinBandNumberLong[pC->sampRateIdx]; - tC->lpcStartLine = pC->sfbOffset[tC->lpcStartBand]; + tC->lpcStartLine = pC->sfbOffset[tC->lpcStartBand]; - tC->threshold = TNS_GAIN_THRESH; + tC->threshold = TNS_GAIN_THRESH; return(0); @@ -207,23 +207,23 @@ Word16 InitTnsConfigurationShort(Word32 bitRate, /*!< bitrate */ Word32 bitratePerChannel; tC->maxOrder = TNS_MAX_ORDER_SHORT; tC->tnsStartFreq = 2750; - tC->coefRes = 3; - + tC->coefRes = 3; + /* to avoid integer division */ if ( sub(channels,2) == 0 ) { - bitratePerChannel = L_shr(bitRate,1); + bitratePerChannel = L_shr(bitRate,1); } else { - bitratePerChannel = bitRate; + bitratePerChannel = bitRate; } tC->tnsMaxSfb = tnsMaxBandsShortMainLow[pC->sampRateIdx]; - tC->tnsActive = active; + tC->tnsActive = active; /* now calc band and line borders */ tC->tnsStopBand = min(pC->sfbCnt, tC->tnsMaxSfb); - tC->tnsStopLine = pC->sfbOffset[tC->tnsStopBand]; + tC->tnsStopLine = pC->sfbOffset[tC->tnsStopBand]; tC->tnsStartBand=FreqToBandWithRounding(tC->tnsStartFreq, sampleRate, pC->sfbCnt, (const Word16*)pC->sfbOffset); @@ -239,19 +239,19 @@ Word16 InitTnsConfigurationShort(Word32 bitRate, /*!< bitrate */ (const Word16*)pC->sfbOffset); - tC->tnsStartLine = pC->sfbOffset[tC->tnsStartBand]; + tC->tnsStartLine = pC->sfbOffset[tC->tnsStartBand]; tC->lpcStopBand = tnsMaxBandsShortMainLow[pC->sampRateIdx]; tC->lpcStopBand = min(tC->lpcStopBand, pC->sfbActive); - tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand]; + tC->lpcStopLine = pC->sfbOffset[tC->lpcStopBand]; tC->lpcStartBand = tnsMinBandNumberShort[pC->sampRateIdx]; - tC->lpcStartLine = pC->sfbOffset[tC->lpcStartBand]; + tC->lpcStartLine = pC->sfbOffset[tC->lpcStartBand]; - tC->threshold = TNS_GAIN_THRESH; + tC->threshold = TNS_GAIN_THRESH; return(0); } @@ -259,7 +259,7 @@ Word16 InitTnsConfigurationShort(Word32 bitRate, /*!< bitrate */ /** * * function name: TnsDetect -* description: Calculate TNS filter and decide on TNS usage +* description: Calculate TNS filter and decide on TNS usage * returns: 0 if success * */ @@ -278,7 +278,7 @@ Word32 TnsDetect(TNS_DATA* tnsData, /*!< tns data structure (modified) */ Word32* pWork32 = &pScratchTns[subBlockNumber >> 8]; Word16* pWeightedSpectrum = (Word16 *)&pScratchTns[subBlockNumber >> 8]; - + if (tC.tnsActive) { CalcWeightedSpectrum(spectrum, pWeightedSpectrum, @@ -290,7 +290,7 @@ Word32 TnsDetect(TNS_DATA* tnsData, /*!< tns data structure (modified) */ tC.lpcStopBand, pWork32); - temp = blockType - SHORT_WINDOW; + temp = blockType - SHORT_WINDOW; if ( temp != 0 ) { predictionGain = CalcTnsFilter( &pWeightedSpectrum[tC.lpcStartLine], tC.acfWindow, @@ -299,15 +299,15 @@ Word32 TnsDetect(TNS_DATA* tnsData, /*!< tns data structure (modified) */ tnsData->dataRaw.tnsLong.subBlockInfo.parcor); - temp = predictionGain - tC.threshold; + temp = predictionGain - tC.threshold; if ( temp > 0 ) { - tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive = 1; + tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive = 1; } else { - tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive = 0; + tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive = 0; } - tnsData->dataRaw.tnsLong.subBlockInfo.predictionGain = predictionGain; + tnsData->dataRaw.tnsLong.subBlockInfo.predictionGain = predictionGain; } else{ @@ -317,28 +317,28 @@ Word32 TnsDetect(TNS_DATA* tnsData, /*!< tns data structure (modified) */ tC.maxOrder, tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].parcor); - temp = predictionGain - tC.threshold; + temp = predictionGain - tC.threshold; if ( temp > 0 ) { - tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].tnsActive = 1; + tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].tnsActive = 1; } else { - tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].tnsActive = 0; + tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].tnsActive = 0; } - tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].predictionGain = predictionGain; + tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].predictionGain = predictionGain; } } else{ - temp = blockType - SHORT_WINDOW; + temp = blockType - SHORT_WINDOW; if ( temp != 0 ) { - tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive = 0; - tnsData->dataRaw.tnsLong.subBlockInfo.predictionGain = 0; + tnsData->dataRaw.tnsLong.subBlockInfo.tnsActive = 0; + tnsData->dataRaw.tnsLong.subBlockInfo.predictionGain = 0; } else { - tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].tnsActive = 0; - tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].predictionGain = 0; + tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].tnsActive = 0; + tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber].predictionGain = 0; } } @@ -362,21 +362,21 @@ void TnsSync(TNS_DATA *tnsDataDest, const TNS_SUBBLOCK_INFO *sbInfoSrc; Word32 i, temp; - temp = blockType - SHORT_WINDOW; + temp = blockType - SHORT_WINDOW; if ( temp != 0 ) { - sbInfoDest = &tnsDataDest->dataRaw.tnsLong.subBlockInfo; - sbInfoSrc = &tnsDataSrc->dataRaw.tnsLong.subBlockInfo; + sbInfoDest = &tnsDataDest->dataRaw.tnsLong.subBlockInfo; + sbInfoSrc = &tnsDataSrc->dataRaw.tnsLong.subBlockInfo; } else { - sbInfoDest = &tnsDataDest->dataRaw.tnsShort.subBlockInfo[subBlockNumber]; - sbInfoSrc = &tnsDataSrc->dataRaw.tnsShort.subBlockInfo[subBlockNumber]; + sbInfoDest = &tnsDataDest->dataRaw.tnsShort.subBlockInfo[subBlockNumber]; + sbInfoSrc = &tnsDataSrc->dataRaw.tnsShort.subBlockInfo[subBlockNumber]; } if (100*abs_s(sbInfoDest->predictionGain - sbInfoSrc->predictionGain) < (3 * sbInfoDest->predictionGain)) { - sbInfoDest->tnsActive = sbInfoSrc->tnsActive; + sbInfoDest->tnsActive = sbInfoSrc->tnsActive; for ( i=0; i< tC.maxOrder; i++) { - sbInfoDest->parcor[i] = sbInfoSrc->parcor[i]; + sbInfoDest->parcor[i] = sbInfoSrc->parcor[i]; } } } @@ -402,11 +402,11 @@ Word16 TnsEncode(TNS_INFO* tnsInfo, /*!< tns info structure (modified) */ Word32 temp; TNS_SUBBLOCK_INFO *psubBlockInfo; - temp_s = blockType - SHORT_WINDOW; - if ( temp_s != 0) { + temp_s = blockType - SHORT_WINDOW; + if ( temp_s != 0) { psubBlockInfo = &tnsData->dataRaw.tnsLong.subBlockInfo; if (psubBlockInfo->tnsActive == 0) { - tnsInfo->tnsActive[subBlockNumber] = 0; + tnsInfo->tnsActive[subBlockNumber] = 0; return(0); } else { @@ -422,22 +422,22 @@ Word16 TnsEncode(TNS_INFO* tnsInfo, /*!< tns info structure (modified) */ tC.coefRes); for (i=tC.maxOrder - 1; i>=0; i--) { - temp = psubBlockInfo->parcor[i] - TNS_PARCOR_THRESH; + temp = psubBlockInfo->parcor[i] - TNS_PARCOR_THRESH; if ( temp > 0 ) break; - temp = psubBlockInfo->parcor[i] + TNS_PARCOR_THRESH; + temp = psubBlockInfo->parcor[i] + TNS_PARCOR_THRESH; if ( temp < 0 ) break; } - tnsInfo->order[subBlockNumber] = i + 1; + tnsInfo->order[subBlockNumber] = i + 1; - tnsInfo->tnsActive[subBlockNumber] = 1; + tnsInfo->tnsActive[subBlockNumber] = 1; for (i=subBlockNumber+1; i<TRANS_FAC; i++) { - tnsInfo->tnsActive[i] = 0; + tnsInfo->tnsActive[i] = 0; } - tnsInfo->coefRes[subBlockNumber] = tC.coefRes; - tnsInfo->length[subBlockNumber] = numOfSfb - tC.tnsStartBand; + tnsInfo->coefRes[subBlockNumber] = tC.coefRes; + tnsInfo->length[subBlockNumber] = numOfSfb - tC.tnsStartBand; AnalysisFilterLattice(&(spectrum[tC.tnsStartLine]), @@ -448,10 +448,10 @@ Word16 TnsEncode(TNS_INFO* tnsInfo, /*!< tns info structure (modified) */ } } /* if (blockType!=SHORT_WINDOW) */ - else /*short block*/ { + else /*short block*/ { psubBlockInfo = &tnsData->dataRaw.tnsShort.subBlockInfo[subBlockNumber]; if (psubBlockInfo->tnsActive == 0) { - tnsInfo->tnsActive[subBlockNumber] = 0; + tnsInfo->tnsActive[subBlockNumber] = 0; return(0); } else { @@ -466,19 +466,19 @@ Word16 TnsEncode(TNS_INFO* tnsInfo, /*!< tns info structure (modified) */ tC.maxOrder, tC.coefRes); for (i=(tC.maxOrder - 1); i>=0; i--) { - temp = psubBlockInfo->parcor[i] - TNS_PARCOR_THRESH; + temp = psubBlockInfo->parcor[i] - TNS_PARCOR_THRESH; if ( temp > 0 ) break; - temp = psubBlockInfo->parcor[i] + TNS_PARCOR_THRESH; + temp = psubBlockInfo->parcor[i] + TNS_PARCOR_THRESH; if ( temp < 0 ) break; } - tnsInfo->order[subBlockNumber] = i + 1; + tnsInfo->order[subBlockNumber] = i + 1; - tnsInfo->tnsActive[subBlockNumber] = 1; - tnsInfo->coefRes[subBlockNumber] = tC.coefRes; - tnsInfo->length[subBlockNumber] = numOfSfb - tC.tnsStartBand; + tnsInfo->tnsActive[subBlockNumber] = 1; + tnsInfo->coefRes[subBlockNumber] = tC.coefRes; + tnsInfo->length[subBlockNumber] = numOfSfb - tC.tnsStartBand; AnalysisFilterLattice(&(spectrum[tC.tnsStartLine]), (tC.tnsStopLine - tC.tnsStartLine), @@ -507,14 +507,14 @@ static Word32 m_pow2_cordic(Word32 x, Word16 scale) { Word32 k; - Word32 accu_y = 0x40000000; + Word32 accu_y = 0x40000000; accu_y = L_shr(accu_y,scale); for(k=1; k<INT_BITS; k++) { - const Word32 z = m_log2_table[k]; + const Word32 z = m_log2_table[k]; while(L_sub(x,z) >= 0) { - + x = L_sub(x, z); accu_y = L_add(accu_y, (accu_y >> k)); } @@ -548,43 +548,43 @@ static void CalcWeightedSpectrum(const Word32 spectrum[], /*!< input sp Word32 maxWS; Word32 tnsSfbMean[MAX_SFB]; /* length [lpcStopBand-lpcStartBand] should be sufficient here */ - maxWS = 0; - + maxWS = 0; + /* calc 1.0*2^-INT_BITS/2/sqrt(en) */ for( sfb = lpcStartBand; sfb < lpcStopBand; sfb++) { - tmp2 = sfbEnergy[sfb] - 2; + tmp2 = sfbEnergy[sfb] - 2; if( tmp2 > 0) { tmp = rsqrt(sfbEnergy[sfb], INT_BITS); - if(tmp > INT_BITS_SCAL) + if(tmp > INT_BITS_SCAL) { shift = norm_l(tmp); - tmp = Div_32( INT_BITS_SCAL << shift, tmp << shift ); + tmp = Div_32( INT_BITS_SCAL << shift, tmp << shift ); } else { - tmp = 0x7fffffff; + tmp = 0x7fffffff; } } else { - tmp = 0x7fffffff; - } - tnsSfbMean[sfb] = tmp; + tmp = 0x7fffffff; + } + tnsSfbMean[sfb] = tmp; } /* spread normalized values from sfbs to lines */ - sfb = lpcStartBand; - tmp = tnsSfbMean[sfb]; + sfb = lpcStartBand; + tmp = tnsSfbMean[sfb]; for ( i=lpcStartLine; i<lpcStopLine; i++){ - tmp_s = sfbOffset[sfb + 1] - i; + tmp_s = sfbOffset[sfb + 1] - i; if ( tmp_s == 0 ) { sfb = sfb + 1; - tmp2_s = sfb + 1 - lpcStopBand; + tmp2_s = sfb + 1 - lpcStopBand; if (tmp2_s <= 0) { - tmp = tnsSfbMean[sfb]; + tmp = tnsSfbMean[sfb]; } } - pWork32[i] = tmp; + pWork32[i] = tmp; } /*filter down*/ for (i=(lpcStopLine - 2); i>=lpcStartLine; i--){ @@ -597,8 +597,8 @@ static void CalcWeightedSpectrum(const Word32 spectrum[], /*!< input sp /* weight and normalize */ for (i=lpcStartLine; i<lpcStopLine; i++){ - pWork32[i] = MULHIGH(pWork32[i], spectrum[i]); - maxWS |= L_abs(pWork32[i]); + pWork32[i] = MULHIGH(pWork32[i], spectrum[i]); + maxWS |= L_abs(pWork32[i]); } maxShift = norm_l(maxWS); @@ -646,7 +646,7 @@ static Word16 CalcTnsFilter(const Word16 *signal, assert(tnsOrder <= TNS_MAX_ORDER); /* remove asserts later? (btg) */ for(i=0;i<tnsOrder;i++) { - parcor[i] = 0; + parcor[i] = 0; } AutoCorrelation(signal, parcorWorkBuffer, numOfLines, tnsOrderPlus1); @@ -678,15 +678,15 @@ void AutoCorrelation(const Word16 input[], Word32 accu; Word32 scf; - scf = 10 - 1; + scf = 10 - 1; isamples = samples; /* calc first corrCoef: R[0] = sum { t[i] * t[i] } ; i = 0..N-1 */ - accu = 0; + accu = 0; for(j=0; j<isamples; j++) { accu = L_add(accu, ((input[j] * input[j]) >> scf)); } - corr[0] = accu; + corr[0] = accu; /* early termination if all corr coeffs are likely going to be zero */ if(corr[0] == 0) return ; @@ -694,13 +694,13 @@ void AutoCorrelation(const Word16 input[], /* calc all other corrCoef: R[j] = sum { t[i] * t[i+j] } ; i = 0..(N-j-1), j=1..p */ for(i=1; i<corrCoeff; i++) { isamples = isamples - 1; - accu = 0; + accu = 0; for(j=0; j<isamples; j++) { accu = L_add(accu, ((input[j] * input[j+i]) >> scf)); } - corr[i] = accu; + corr[i] = accu; } -} +} #endif /***************************************************************************** @@ -720,20 +720,20 @@ static Word16 AutoToParcor(Word32 workBuffer[], Word32 reflCoeff[], Word16 numOf Word32 predictionGain = 0; Word32 num, denom; Word32 temp, workBuffer0; - - num = workBuffer[0]; - temp = workBuffer[numOfCoeff]; + + num = workBuffer[0]; + temp = workBuffer[numOfCoeff]; for(i=0; i<numOfCoeff-1; i++) { - workBuffer[i + numOfCoeff] = workBuffer[i + 1]; + workBuffer[i + numOfCoeff] = workBuffer[i + 1]; } - workBuffer[i + numOfCoeff] = temp; - + workBuffer[i + numOfCoeff] = temp; + for(i=0; i<numOfCoeff; i++) { Word32 refc; - + if (workBuffer[0] < L_abs(workBuffer[i + numOfCoeff])) { return 0 ; } @@ -742,21 +742,21 @@ static Word16 AutoToParcor(Word32 workBuffer[], Word32 reflCoeff[], Word16 numOf /* calculate refc = -workBuffer[numOfCoeff+i] / workBuffer[0]; -1 <= refc < 1 */ refc = L_negate(fixmul(workBuffer[numOfCoeff + i], workBuffer0)); - reflCoeff[i] = refc; + reflCoeff[i] = refc; - pWorkBuffer = &(workBuffer[numOfCoeff]); + pWorkBuffer = &(workBuffer[numOfCoeff]); for(j=i; j<numOfCoeff; j++) { Word32 accu1, accu2; accu1 = L_add(pWorkBuffer[j], fixmul(refc, workBuffer[j - i])); accu2 = L_add(workBuffer[j - i], fixmul(refc, pWorkBuffer[j])); - pWorkBuffer[j] = accu1; - workBuffer[j - i] = accu2; + pWorkBuffer[j] = accu1; + workBuffer[j - i] = accu2; } } denom = MULHIGH(workBuffer[0], NORM_COEF); - + if (denom != 0) { Word32 temp; shift = norm_l(denom); @@ -774,11 +774,11 @@ static Word16 Search3(Word32 parcor) Word32 index = 0; Word32 i; Word32 temp; - + for (i=0;i<8;i++) { - temp = L_sub( parcor, tnsCoeff3Borders[i]); + temp = L_sub( parcor, tnsCoeff3Borders[i]); if (temp > 0) - index=i; + index=i; } return extract_l(index - 4); } @@ -788,12 +788,12 @@ static Word16 Search4(Word32 parcor) Word32 index = 0; Word32 i; Word32 temp; - + for (i=0;i<16;i++) { - temp = L_sub(parcor, tnsCoeff4Borders[i]); + temp = L_sub(parcor, tnsCoeff4Borders[i]); if (temp > 0) - index=i; + index=i; } return extract_l(index - 8); } @@ -814,12 +814,12 @@ static void Parcor2Index(const Word32 parcor[], /*!< parcor coefficients */ Word32 temp; for(i=0; i<order; i++) { - temp = bitsPerCoeff - 3; + temp = bitsPerCoeff - 3; if (temp == 0) { - index[i] = Search3(parcor[i]); - } + index[i] = Search3(parcor[i]); + } else { - index[i] = Search4(parcor[i]); + index[i] = Search4(parcor[i]); } } } @@ -839,12 +839,12 @@ static void Index2Parcor(const Word16 index[], /*!< quantized values */ Word32 temp; for (i=0; i<order; i++) { - temp = bitsPerCoeff - 4; + temp = bitsPerCoeff - 4; if ( temp == 0 ) { - parcor[i] = tnsCoeff4[index[i] + 8]; + parcor[i] = tnsCoeff4[index[i] + 8]; } else { - parcor[i] = tnsCoeff3[index[i] + 4]; + parcor[i] = tnsCoeff3[index[i] + 4]; } } } @@ -865,20 +865,20 @@ static Word32 FIRLattice(Word16 order, /*!< filter order */ Word32 accu,tmp,tmpSave; x = x >> 1; - tmpSave = x; + tmpSave = x; for (i=0; i<(order - 1); i++) { tmp = L_add(fixmul(coef_par[i], x), state_par[i]); x = L_add(fixmul(coef_par[i], state_par[i]), x); - state_par[i] = tmpSave; - tmpSave = tmp; + state_par[i] = tmpSave; + tmpSave = tmp; } /* last stage: only need half operations */ accu = fixmul(state_par[order - 1], coef_par[(order - 1)]); - state_par[(order - 1)] = tmpSave; + state_par[(order - 1)] = tmpSave; x = L_add(accu, x); x = L_add(x, x); @@ -903,11 +903,11 @@ static void AnalysisFilterLattice(const Word32 signal[], /*!< input spectrum * Word32 j; for ( j=0; j<TNS_MAX_ORDER; j++ ) { - state_par[j] = 0; + state_par[j] = 0; } for(j=0; j<numOfLines; j++) { - output[j] = FIRLattice(order,signal[j],state_par,parCoeff); + output[j] = FIRLattice(order,signal[j],state_par,parCoeff); } } @@ -922,11 +922,11 @@ void ApplyTnsMultTableToRatios(Word16 startCb, TNS_SUBBLOCK_INFO subInfo, /*!< TNS subblock info */ Word32 *thresholds) /*!< thresholds (modified) */ { - Word32 i; + Word32 i; if (subInfo.tnsActive) { for(i=startCb; i<stopCb; i++) { /* thresholds[i] * 0.25 */ - thresholds[i] = (thresholds[i] >> 2); + thresholds[i] = (thresholds[i] >> 2); } } } diff --git a/media/libstagefright/codecs/aacenc/src/transform.c b/media/libstagefright/codecs/aacenc/src/transform.c index 4d11f78..a154a2f 100644 --- a/media/libstagefright/codecs/aacenc/src/transform.c +++ b/media/libstagefright/codecs/aacenc/src/transform.c @@ -31,7 +31,7 @@ #define swap2(p0,p1) \ t = p0; t1 = *(&(p0)+1); \ p0 = p1; *(&(p0)+1) = *(&(p1)+1); \ - p1 = t; *(&(p1)+1) = t1 + p1 = t; *(&(p1)+1) = t1 /********************************************************************************* * @@ -47,18 +47,18 @@ static void Shuffle(int *buf, int num, const unsigned char* bitTab) part0 = buf; part1 = buf + num; - + while ((i = *bitTab++) != 0) { j = *bitTab++; - swap2(part0[4*i+0], part0[4*j+0]); - swap2(part0[4*i+2], part1[4*j+0]); - swap2(part1[4*i+0], part0[4*j+2]); - swap2(part1[4*i+2], part1[4*j+2]); + swap2(part0[4*i+0], part0[4*j+0]); + swap2(part0[4*i+2], part1[4*j+0]); + swap2(part1[4*i+0], part0[4*j+2]); + swap2(part1[4*i+2], part1[4*j+2]); } do { - swap2(part0[4*i+2], part1[4*i+0]); + swap2(part0[4*i+2], part1[4*i+0]); } while ((i = *bitTab++) != 0); } @@ -74,8 +74,8 @@ static void Radix4First(int *buf, int num) { int r0, r1, r2, r3; int r4, r5, r6, r7; - - for (; num != 0; num--) + + for (; num != 0; num--) { r0 = buf[0] + buf[2]; r1 = buf[1] + buf[3]; @@ -113,7 +113,7 @@ static void Radix8First(int *buf, int num) int i4, i5, i6, i7; int t0, t1, t2, t3; - for ( ; num != 0; num--) + for ( ; num != 0; num--) { r0 = buf[0] + buf[2]; i0 = buf[1] + buf[3]; @@ -194,23 +194,23 @@ static void Radix4FFT(int *buf, int num, int bgn, int *twidTab) int i, j, step; int *xptr, *csptr; - for (num >>= 2; num != 0; num >>= 2) + for (num >>= 2; num != 0; num >>= 2) { step = 2*bgn; xptr = buf; - for (i = num; i != 0; i--) + for (i = num; i != 0; i--) { csptr = twidTab; - for (j = bgn; j != 0; j--) + for (j = bgn; j != 0; j--) { r0 = xptr[0]; r1 = xptr[1]; xptr += step; - + t0 = xptr[0]; - t1 = xptr[1]; + t1 = xptr[1]; cosx = csptr[0]; sinx = csptr[1]; r2 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1); /* cos*br + sin*bi */ @@ -223,7 +223,7 @@ static void Radix4FFT(int *buf, int num, int bgn, int *twidTab) r1 = t1 - r3; r2 = t0 + r2; r3 = t1 + r3; - + t0 = xptr[0]; t1 = xptr[1]; cosx = csptr[2]; @@ -231,7 +231,7 @@ static void Radix4FFT(int *buf, int num, int bgn, int *twidTab) r4 = MULHIGH(cosx, t0) + MULHIGH(sinx, t1); /* cos*cr + sin*ci */ r5 = MULHIGH(cosx, t1) - MULHIGH(sinx, t0); /* cos*ci - sin*cr */ xptr += step; - + t0 = xptr[0]; t1 = xptr[1]; cosx = csptr[4]; @@ -282,25 +282,25 @@ static void PreMDCT(int *buf0, int num, const int *csptr) int tr1, ti1, tr2, ti2; int cosa, sina, cosb, sinb; int *buf1; - + buf1 = buf0 + num - 1; for(i = num >> 2; i != 0; i--) { - cosa = *csptr++; - sina = *csptr++; - cosb = *csptr++; - sinb = *csptr++; + cosa = *csptr++; + sina = *csptr++; + cosb = *csptr++; + sinb = *csptr++; tr1 = *(buf0 + 0); ti2 = *(buf0 + 1); tr2 = *(buf1 - 1); ti1 = *(buf1 + 0); - + *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1); - *buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1); - - *buf1-- = MULHIGH(cosb, ti2) - MULHIGH(sinb, tr2); + *buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1); + + *buf1-- = MULHIGH(cosb, ti2) - MULHIGH(sinb, tr2); *buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2); } } @@ -319,12 +319,12 @@ static void PostMDCT(int *buf0, int num, const int *csptr) int *buf1; buf1 = buf0 + num - 1; - + for(i = num >> 2; i != 0; i--) { - cosa = *csptr++; - sina = *csptr++; - cosb = *csptr++; + cosa = *csptr++; + sina = *csptr++; + cosb = *csptr++; sinb = *csptr++; tr1 = *(buf0 + 0); @@ -333,10 +333,10 @@ static void PostMDCT(int *buf0, int num, const int *csptr) tr2 = *(buf1 - 1); *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1); - *buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1); - + *buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1); + *buf0++ = MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2); - *buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2); + *buf1-- = MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2); } } #endif @@ -353,17 +353,17 @@ void Mdct_Long(int *buf) PreMDCT(buf, 1024, cossintab + 128); Shuffle(buf, 512, bitrevTab + 17); - Radix8First(buf, 512 >> 3); + Radix8First(buf, 512 >> 3); Radix4FFT(buf, 512 >> 3, 8, (int *)twidTab512); - PostMDCT(buf, 1024, cossintab + 128); + PostMDCT(buf, 1024, cossintab + 128); } /********************************************************************************** * * function name: Mdct_Short -* description: the short block mdct +* description: the short block mdct * **********************************************************************************/ void Mdct_Short(int *buf) @@ -371,10 +371,10 @@ void Mdct_Short(int *buf) PreMDCT(buf, 128, cossintab); Shuffle(buf, 64, bitrevTab); - Radix4First(buf, 64 >> 2); - Radix4FFT(buf, 64 >> 2, 4, (int *)twidTab64); + Radix4First(buf, 64 >> 2); + Radix4FFT(buf, 64 >> 2, 4, (int *)twidTab64); - PostMDCT(buf, 128, cossintab); + PostMDCT(buf, 128, cossintab); } @@ -382,7 +382,7 @@ void Mdct_Short(int *buf) * * function name: shiftMdctDelayBuffer * description: the mdct delay buffer has a size of 1600, -* so the calculation of LONG,STOP must be spilt in two +* so the calculation of LONG,STOP must be spilt in two * passes with 1024 samples and a mid shift, * the SHORT transforms can be completed in the delay buffer, * and afterwards a shift @@ -409,7 +409,7 @@ static void shiftMdctDelayBuffer(Word16 *mdctDelayBuffer, /*! start of mdct dela dsBuf = timeSignal; for(i=0; i<FRAME_LEN_LONG; i+=8) - { + { *srBuf++ = *dsBuf; dsBuf += chIncrement; *srBuf++ = *dsBuf; dsBuf += chIncrement; *srBuf++ = *dsBuf; dsBuf += chIncrement; @@ -470,10 +470,10 @@ void Transform_Real(Word16 *mdctDelayBuffer, Word32 delayBufferSf,timeSignalSf,minSf; Word32 headRoom=0; - + switch(blockType){ - - + + case LONG_WINDOW: /* we access BLOCK_SWITCHING_OFFSET (1600 ) delay buffer samples + 448 new timeSignal samples @@ -483,15 +483,15 @@ void Transform_Real(Word16 *mdctDelayBuffer, timeSignalSf = getScalefactorOfShortVectorStride(timeSignal,2*FRAME_LEN_LONG-BLOCK_SWITCHING_OFFSET,chIncrement); minSf = min(delayBufferSf,timeSignalSf); minSf = min(minSf,14); - + dctIn0 = mdctDelayBuffer; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1; outData0 = realOut + FRAME_LEN_LONG/2; - + /* add windows and pre add for mdct to last buffer*/ winPtr = (int *)LongWindowKBD; for(i=0;i<FRAME_LEN_LONG/2;i++){ - timeSignalSample = (*dctIn0++) << minSf; + timeSignalSample = (*dctIn0++) << minSf; ws1 = timeSignalSample * (*winPtr >> 16); timeSignalSample = (*dctIn1--) << minSf; ws2 = timeSignalSample * (*winPtr & 0xffff); @@ -499,30 +499,30 @@ void Transform_Real(Word16 *mdctDelayBuffer, /* shift 2 to avoid overflow next */ *outData0++ = (ws1 >> 2) - (ws2 >> 2); } - + shiftMdctDelayBuffer(mdctDelayBuffer,timeSignal,chIncrement); - + /* add windows and pre add for mdct to new buffer*/ dctIn0 = mdctDelayBuffer; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1; - outData0 = realOut + FRAME_LEN_LONG/2 - 1; + outData0 = realOut + FRAME_LEN_LONG/2 - 1; winPtr = (int *)LongWindowKBD; - for(i=0;i<FRAME_LEN_LONG/2;i++){ + for(i=0;i<FRAME_LEN_LONG/2;i++){ timeSignalSample = (*dctIn0++) << minSf; ws1 = timeSignalSample * (*winPtr & 0xffff); timeSignalSample = (*dctIn1--) << minSf; ws2 = timeSignalSample * (*winPtr >> 16); winPtr++; /* shift 2 to avoid overflow next */ - *outData0-- = -((ws1 >> 2) + (ws2 >> 2)); + *outData0-- = -((ws1 >> 2) + (ws2 >> 2)); } Mdct_Long(realOut); /* update scale factor */ minSf = 14 - minSf; - *mdctScale=minSf; + *mdctScale=minSf; break; - + case START_WINDOW: /* we access BLOCK_SWITCHING_OFFSET (1600 ) delay buffer samples + no timeSignal samples @@ -533,7 +533,7 @@ void Transform_Real(Word16 *mdctDelayBuffer, dctIn0 = mdctDelayBuffer; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1; - outData0 = realOut + FRAME_LEN_LONG/2; + outData0 = realOut + FRAME_LEN_LONG/2; winPtr = (int *)LongWindowKBD; /* add windows and pre add for mdct to last buffer*/ @@ -545,18 +545,18 @@ void Transform_Real(Word16 *mdctDelayBuffer, winPtr ++; *outData0++ = (ws1 >> 2) - (ws2 >> 2); /* shift 2 to avoid overflow next */ } - + shiftMdctDelayBuffer(mdctDelayBuffer,timeSignal,chIncrement); - - outData0 = realOut + FRAME_LEN_LONG/2 - 1; + + outData0 = realOut + FRAME_LEN_LONG/2 - 1; for(i=0;i<LS_TRANS;i++){ - *outData0-- = -mdctDelayBuffer[i] << (15 - 2 + minSf); + *outData0-- = -mdctDelayBuffer[i] << (15 - 2 + minSf); } - + /* add windows and pre add for mdct to new buffer*/ dctIn0 = mdctDelayBuffer + LS_TRANS; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1 - LS_TRANS; - outData0 = realOut + FRAME_LEN_LONG/2 - 1 -LS_TRANS; + outData0 = realOut + FRAME_LEN_LONG/2 - 1 -LS_TRANS; winPtr = (int *)ShortWindowSine; for(i=0;i<FRAME_LEN_SHORT/2;i++){ timeSignalSample= (*dctIn0++) << minSf; @@ -572,7 +572,7 @@ void Transform_Real(Word16 *mdctDelayBuffer, minSf = 14 - minSf; *mdctScale= minSf; break; - + case STOP_WINDOW: /* we access BLOCK_SWITCHING_OFFSET-LS_TRANS (1600-448 ) delay buffer samples + 448 new timeSignal samples @@ -580,19 +580,19 @@ void Transform_Real(Word16 *mdctDelayBuffer, */ delayBufferSf = getScalefactorOfShortVectorStride(mdctDelayBuffer+LS_TRANS,BLOCK_SWITCHING_OFFSET-LS_TRANS,1); timeSignalSf = getScalefactorOfShortVectorStride(timeSignal,2*FRAME_LEN_LONG-BLOCK_SWITCHING_OFFSET,chIncrement); - minSf = min(delayBufferSf,timeSignalSf); + minSf = min(delayBufferSf,timeSignalSf); minSf = min(minSf,13); - + outData0 = realOut + FRAME_LEN_LONG/2; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1; for(i=0;i<LS_TRANS;i++){ - *outData0++ = -(*dctIn1--) << (15 - 2 + minSf); + *outData0++ = -(*dctIn1--) << (15 - 2 + minSf); } - + /* add windows and pre add for mdct to last buffer*/ dctIn0 = mdctDelayBuffer + LS_TRANS; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1 - LS_TRANS; - outData0 = realOut + FRAME_LEN_LONG/2 + LS_TRANS; + outData0 = realOut + FRAME_LEN_LONG/2 + LS_TRANS; winPtr = (int *)ShortWindowSine; for(i=0;i<FRAME_LEN_SHORT/2;i++){ timeSignalSample = (*dctIn0++) << minSf; @@ -602,13 +602,13 @@ void Transform_Real(Word16 *mdctDelayBuffer, winPtr++; *outData0++ = (ws1 >> 2) - (ws2 >> 2); /* shift 2 to avoid overflow next */ } - + shiftMdctDelayBuffer(mdctDelayBuffer,timeSignal,chIncrement); - + /* add windows and pre add for mdct to new buffer*/ dctIn0 = mdctDelayBuffer; dctIn1 = mdctDelayBuffer + FRAME_LEN_LONG - 1; - outData0 = realOut + FRAME_LEN_LONG/2 - 1; + outData0 = realOut + FRAME_LEN_LONG/2 - 1; winPtr = (int *)LongWindowKBD; for(i=0;i<FRAME_LEN_LONG/2;i++){ timeSignalSample= (*dctIn0++) << minSf; @@ -618,26 +618,26 @@ void Transform_Real(Word16 *mdctDelayBuffer, *outData0-- = -((ws1 >> 2) + (ws2 >> 2)); /* shift 2 to avoid overflow next */ winPtr++; } - + Mdct_Long(realOut); minSf = 14 - minSf; *mdctScale= minSf; /* update scale factor */ break; - + case SHORT_WINDOW: /* we access BLOCK_SWITCHING_OFFSET (1600 ) delay buffer samples + no new timeSignal samples and get the biggest scale factor for next calculate more precise - */ + */ minSf = getScalefactorOfShortVectorStride(mdctDelayBuffer+TRANSFORM_OFFSET_SHORT,9*FRAME_LEN_SHORT,1); minSf = min(minSf,10); - - + + for(w=0;w<TRANS_FAC;w++){ dctIn0 = mdctDelayBuffer+w*FRAME_LEN_SHORT+TRANSFORM_OFFSET_SHORT; dctIn1 = mdctDelayBuffer+w*FRAME_LEN_SHORT+TRANSFORM_OFFSET_SHORT + FRAME_LEN_SHORT-1; - outData0 = realOut + FRAME_LEN_SHORT/2; - outData1 = realOut + FRAME_LEN_SHORT/2 - 1; + outData0 = realOut + FRAME_LEN_SHORT/2; + outData1 = realOut + FRAME_LEN_SHORT/2 - 1; winPtr = (int *)ShortWindowSine; for(i=0;i<FRAME_LEN_SHORT/2;i++){ @@ -646,7 +646,7 @@ void Transform_Real(Word16 *mdctDelayBuffer, timeSignalSample= *dctIn1 << minSf; ws2 = timeSignalSample * (*winPtr & 0xffff); *outData0++ = (ws1 >> 2) - (ws2 >> 2); /* shift 2 to avoid overflow next */ - + timeSignalSample= *(dctIn0 + FRAME_LEN_SHORT) << minSf; ws1 = timeSignalSample * (*winPtr & 0xffff); timeSignalSample= *(dctIn1 + FRAME_LEN_SHORT) << minSf; @@ -661,10 +661,10 @@ void Transform_Real(Word16 *mdctDelayBuffer, Mdct_Short(realOut); realOut += FRAME_LEN_SHORT; } - + minSf = 11 - minSf; *mdctScale = minSf; /* update scale factor */ - + shiftMdctDelayBuffer(mdctDelayBuffer,timeSignal,chIncrement); break; } |