diff --git a/sflphone-common/libs/pjproject/aconfigure b/sflphone-common/libs/pjproject/aconfigure index e5b8e4aec50cfe5594027fef1b4e412fb26dc834..fbcf29c80a8ab4dad98f75dd209c455890b80496 100755 --- a/sflphone-common/libs/pjproject/aconfigure +++ b/sflphone-common/libs/pjproject/aconfigure @@ -5368,8 +5368,11 @@ if test "${enable_g7221_codec+set}" = set; then : $as_echo "Checking if G.722.1 codec is disabled...yes" >&6; } fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722.1 codec is disabled...no" >&5 -$as_echo "Checking if G.722.1 codec is disabled...no" >&6; } + ac_no_g7221_codec=1 + $as_echo "#define PJMEDIA_HAS_G7221_CODEC 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Checking if G.722.1 codec is disabled...yes" >&5 +$as_echo "Checking if G.722.1 codec is disabled...yes" >&6; } fi diff --git a/sflphone-common/libs/pjproject/aconfigure.ac b/sflphone-common/libs/pjproject/aconfigure.ac index 92eaa9dcb2d13cf0791e3cb1f753fa7c1c7c0ece..e903d90fb1af75c21dcf42f8494596b783b73d07 100644 --- a/sflphone-common/libs/pjproject/aconfigure.ac +++ b/sflphone-common/libs/pjproject/aconfigure.ac @@ -544,7 +544,9 @@ AC_ARG_ENABLE(g7221-codec, AC_DEFINE(PJMEDIA_HAS_G7221_CODEC,0) AC_MSG_RESULT([Checking if G.722.1 codec is disabled...yes]) fi], - AC_MSG_RESULT([Checking if G.722.1 codec is disabled...no])) + [ac_no_g7221_codec=1] + AC_DEFINE(PJMEDIA_HAS_G7221_CODEC,0) + AC_MSG_RESULT([Checking if G.722.1 codec is disabled...yes])) dnl # Include Speex codec AC_SUBST(ac_no_speex_codec) diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c deleted file mode 100644 index 028d06fe96ccc6de55fdc05ca9780a1121f4139e..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.c +++ /dev/null @@ -1,1835 +0,0 @@ -#include "config.h" - -#if !PJMEDIA_LIBG7221_FUNCS_INLINED || \ - (PJMEDIA_LIBG7221_FUNCS_INLINED && defined(__BASIC_OP_H__)) - -/*___________________________________________________________________________ - | | - | Basic arithmetic operators. | - |___________________________________________________________________________| -*/ - -/*___________________________________________________________________________ - | | - | Include-Files | - |___________________________________________________________________________| -*/ - -//#include <stdio.h> -//#include <stdlib.h> -#include "typedef.h" -#include "basic_op.h" -#include <pj/assert.h> - -#if (WMOPS) -#include "count.h" -extern BASIC_OP multiCounter[MAXCOUNTERS]; -extern int currCounter; - -#endif - -/*___________________________________________________________________________ - | | - | Constants and Globals | - |___________________________________________________________________________| -*/ -#if INCLUDE_UNSAFE -Flag g7221_Overflow = 0; -Flag g7221_Carry = 0; -#endif - -/*___________________________________________________________________________ - | | - | Functions | - |___________________________________________________________________________| -*/ -/*___________________________________________________________________________ - | | - | Function Name : shr | - | | - | Purpose : | - | | - | Arithmetically shift the 16 bit input var1 right var2 positions with | - | sign extension. If var2 is negative, arithmetically shift var1 left by | - | -var2 with sign extension. Saturate the result in case of underflows or | - | overflows. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) shr (Word16 var1, Word16 var2) -{ - if (var2 < 0) - { - if (var2 < -16) - var2 = -16; - return shl_nocheck(var1, (Word16) -var2); - } - else - { - return shr_nocheck(var1, var2); - } -} -/* ------------------------- End of shr() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : shl | - | | - | Purpose : | - | | - | Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill| - | the var2 LSB of the result. If var2 is negative, arithmetically shift | - | var1 right by -var2 with sign extension. Saturate the result in case of | - | underflows or overflows. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) shl (Word16 var1, Word16 var2) -{ - if (var2 < 0) - { - return shr_nocheck(var1, (Word16) -var2); - } - else - { - return shl_nocheck(var1, var2); - } -} -/* ------------------------- End of shl() ------------------------- */ - - - -/*___________________________________________________________________________ - | | - | Function Name : mult | - | | - | Purpose : | - | | - | Performs the multiplication of var1 by var2 and gives a 16 bit result | - | which is scaled i.e.: | - | mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and | - | mult(-32768,-32768) = 32767. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) mult (Word16 var1, Word16 var2) -{ - Word16 var_out; - Word32 L_product; - - L_product = (Word32) var1 *(Word32) var2; - - L_product = (L_product & (Word32) 0xffff8000L) >> 15; - - if (L_product & (Word32) 0x00010000L) - L_product = L_product | (Word32) 0xffff0000L; - - var_out = saturate (L_product); -#if (WMOPS) - multiCounter[currCounter].mult++; -#endif - return (var_out); -} -/* ------------------------- End of mult() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_msu | - | | - | Purpose : | - | | - | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | - | bit result to L_var3 with saturation, return a 32 bit result: | - | L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)). | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var3 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_msu (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word32 L_var_out; - Word32 L_product; - - L_product = L_mult (var1, var2); -#if (WMOPS) - multiCounter[currCounter].L_mult--; -#endif - L_var_out = L_sub (L_var3, L_product); -#if (WMOPS) - multiCounter[currCounter].L_sub--; - multiCounter[currCounter].L_msu++; -#endif - return (L_var_out); -} -/* ------------------------- End of L_msu() ------------------------- */ - -#if INCLUDE_UNSAFE -/*___________________________________________________________________________ - | | - | Function Name : L_macNs | - | | - | Purpose : | - | | - | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | - | result to L_var3 without saturation, return a 32 bit result. Generate | - | carry and overflow values : | - | L_macNs(L_var3,var1,var2) = L_add_c(L_var3,L_mult(var1,var2)). | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var3 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - | | - | Caution : | - | | - | In some cases the Carry flag has to be cleared or set before using | - | operators which take into account its value. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_macNs (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word32 L_var_out; - - L_var_out = L_mult (var1, var2); -#if (WMOPS) - multiCounter[currCounter].L_mult--; -#endif - L_var_out = L_add_c (L_var3, L_var_out); -#if (WMOPS) - multiCounter[currCounter].L_add_c--; - multiCounter[currCounter].L_macNs++; -#endif - return (L_var_out); -} -#endif -/* ------------------------- End of L_macNs() ------------------------- */ - -#if INCLUDE_UNSAFE -/*___________________________________________________________________________ - | | - | Function Name : L_msuNs | - | | - | Purpose : | - | | - | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | - | bit result from L_var3 without saturation, return a 32 bit result. Ge- | - | nerate carry and overflow values : | - | L_msuNs(L_var3,var1,var2) = L_sub_c(L_var3,L_mult(var1,var2)). | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var3 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - | | - | Caution : | - | | - | In some cases the Carry flag has to be cleared or set before using | - | operators which take into account its value. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word32 L_var_out; - - L_var_out = L_mult (var1, var2); -#if (WMOPS) - multiCounter[currCounter].L_mult--; -#endif - L_var_out = L_sub_c (L_var3, L_var_out); -#if (WMOPS) - multiCounter[currCounter].L_sub_c--; - multiCounter[currCounter].L_msuNs++; -#endif - return (L_var_out); -} -#endif - -/* ------------------------- End of L_msuNs() ------------------------- */ - - -#if INCLUDE_UNSAFE -/*___________________________________________________________________________ - | | - | Function Name : L_add_c | - | | - | Purpose : | - | | - | Performs 32 bits addition of the two 32 bits variables (L_var1+L_var2+C)| - | with carry. No saturation. Generate carry and Overflow values. The car- | - | ry and overflow values are binary variables which can be tested and as- | - | signed values. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | L_var2 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - | | - | Caution : | - | | - | In some cases the Carry flag has to be cleared or set before using | - | operators which take into account its value. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_add_c (Word32 L_var1, Word32 L_var2) -{ - Word32 L_var_out; - Word32 L_test; - Flag carry_int = 0; - - L_var_out = L_var1 + L_var2 + GET_CARRY(); - - L_test = L_var1 + L_var2; - - if ((L_var1 > 0) && (L_var2 > 0) && (L_test < 0)) - { - SET_OVERFLOW(1); - carry_int = 0; - } - else - { - if ((L_var1 < 0) && (L_var2 < 0)) - { - if (L_test >= 0) - { - SET_OVERFLOW(1); - carry_int = 1; - } - else - { - SET_OVERFLOW(0); - carry_int = 1; - } - } - else - { - if (((L_var1 ^ L_var2) < 0) && (L_test >= 0)) - { - SET_OVERFLOW(0); - carry_int = 1; - } - else - { - SET_OVERFLOW(0); - carry_int = 0; - } - } - } - - if (GET_CARRY()) - { - if (L_test == MAX_32) - { - SET_OVERFLOW(1); - SET_CARRY(carry_int); - } - else - { - if (L_test == (Word32) 0xFFFFFFFFL) - { - SET_CARRY(1); - } - else - { - SET_CARRY(carry_int); - } - } - } - else - { - SET_CARRY(carry_int); - } - -#if (WMOPS) - multiCounter[currCounter].L_add_c++; -#endif - return (L_var_out); -} -#endif - -/* ------------------------- End of L_add_c() ------------------------- */ - -#if INCLUDE_UNSAFE -/*___________________________________________________________________________ - | | - | Function Name : L_sub_c | - | | - | Purpose : | - | | - | Performs 32 bits subtraction of the two 32 bits variables with carry | - | (borrow) : L_var1-L_var2-C. No saturation. Generate carry and Overflow | - | values. The carry and overflow values are binary variables which can | - | be tested and assigned values. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | L_var2 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - | | - | Caution : | - | | - | In some cases the Carry flag has to be cleared or set before using | - | operators which take into account its value. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_sub_c (Word32 L_var1, Word32 L_var2) -{ - Word32 L_var_out; - Word32 L_test; - Flag carry_int = 0; - - if (GET_CARRY()) - { - SET_CARRY(0); - if (L_var2 != MIN_32) - { - L_var_out = L_add_c (L_var1, -L_var2); -#if (WMOPS) - multiCounter[currCounter].L_add_c--; -#endif - } - else - { - L_var_out = L_var1 - L_var2; - if (L_var1 > 0L) - { - SET_OVERFLOW(1); - SET_CARRY(0); - } - } - } - else - { - L_var_out = L_var1 - L_var2 - (Word32) 0X00000001L; - L_test = L_var1 - L_var2; - - if ((L_test < 0) && (L_var1 > 0) && (L_var2 < 0)) - { - SET_OVERFLOW(1); - carry_int = 0; - } - else if ((L_test > 0) && (L_var1 < 0) && (L_var2 > 0)) - { - SET_OVERFLOW(1); - carry_int = 1; - } - else if ((L_test > 0) && ((L_var1 ^ L_var2) > 0)) - { - SET_OVERFLOW(0); - carry_int = 1; - } - if (L_test == MIN_32) - { - SET_OVERFLOW(1); - SET_CARRY(carry_int); - } - else - { - SET_CARRY(carry_int); - } - } - -#if (WMOPS) - multiCounter[currCounter].L_sub_c++; -#endif - return (L_var_out); -} -#endif -/* ------------------------- End of L_sub_c() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_negate | - | | - | Purpose : | - | | - | Negate the 32 bit variable L_var1 with saturation; saturate in the case | - | where input is -2147483648 (0x8000 0000). | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_negate (Word32 L_var1) -{ - Word32 L_var_out; - - L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1; -#if (WMOPS) - multiCounter[currCounter].L_negate++; -#endif - return (L_var_out); -} -/* ------------------------- End of L_negate() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : mult_r | - | | - | Purpose : | - | | - | Same as mult with rounding, i.e.: | - | mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and | - | mult_r(-32768,-32768) = 32767. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) mult_r (Word16 var1, Word16 var2) -{ - Word16 var_out; - Word32 L_product_arr; - - L_product_arr = (Word32) var1 *(Word32) var2; /* product */ - L_product_arr += (Word32) 0x00004000L; /* round */ - L_product_arr &= (Word32) 0xffff8000L; - L_product_arr >>= 15; /* shift */ - - if (L_product_arr & (Word32) 0x00010000L) /* sign extend when necessary */ - { - L_product_arr |= (Word32) 0xffff0000L; - } - var_out = saturate (L_product_arr); -#if (WMOPS) - multiCounter[currCounter].mult_r++; -#endif - return (var_out); -} -/* ------------------------- End of mult_r() ------------------------- */ - - - -/*___________________________________________________________________________ - | | - | Function Name : shr_r | - | | - | Purpose : | - | | - | Same as shr(var1,var2) but with rounding. Saturate the result in case of| - | underflows or overflows : | - | - If var2 is greater than zero : | - | if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1)))) | - | is equal to zero | - | then | - | shr_r(var1,var2) = shr(var1,var2) | - | else | - | shr_r(var1,var2) = add(shr(var1,var2),1) | - | - If var2 is less than or equal to zero : | - | shr_r(var1,var2) = shr(var1,var2). | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) shr_r (Word16 var1, Word16 var2) -{ - Word16 var_out; - - if (var2 > 15) - { - var_out = 0; - } - else - { - var_out = shr (var1, var2); -#if (WMOPS) - multiCounter[currCounter].shr--; -#endif - - if (var2 > 0) - { - if ((var1 & ((Word16) 1 << (var2 - 1))) != 0) - { - var_out++; - } - } - } -#if (WMOPS) - multiCounter[currCounter].shr_r++; -#endif - return (var_out); -} -/* ------------------------- End of shr_r() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : mac_r | - | | - | Purpose : | - | | - | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | - | result to L_var3 with saturation. Round the LS 16 bits of the result | - | into the MS 16 bits with saturation and shift the result right by 16. | - | Return a 16 bit result. | - | mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2)) | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var3 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) mac_r (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word16 var_out; - - L_var3 = L_mac (L_var3, var1, var2); -#if (WMOPS) - multiCounter[currCounter].L_mac--; -#endif - L_var3 = L_add (L_var3, (Word32) 0x00008000L); -#if (WMOPS) - multiCounter[currCounter].L_add--; -#endif - var_out = extract_h (L_var3); -#if (WMOPS) - multiCounter[currCounter].extract_h--; - multiCounter[currCounter].mac_r++; -#endif - return (var_out); -} -/* ------------------------- End of mac_r() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : msu_r | - | | - | Purpose : | - | | - | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | - | bit result to L_var3 with saturation. Round the LS 16 bits of the res- | - | ult into the MS 16 bits with saturation and shift the result right by | - | 16. Return a 16 bit result. | - | msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2)) | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var3 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) msu_r (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word16 var_out; - - L_var3 = L_msu (L_var3, var1, var2); -#if (WMOPS) - multiCounter[currCounter].L_msu--; -#endif - L_var3 = L_add (L_var3, (Word32) 0x00008000L); -#if (WMOPS) - multiCounter[currCounter].L_add--; -#endif - var_out = extract_h (L_var3); -#if (WMOPS) - multiCounter[currCounter].extract_h--; - multiCounter[currCounter].msu_r++; -#endif - return (var_out); -} -/* ------------------------- End of msu_r() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_deposit_h | - | | - | Purpose : | - | | - | Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The | - | 16 LS bits of the output are zeroed. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var_out <= 0x7fff 0000. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_deposit_h (Word16 var1) -{ - Word32 L_var_out; - - L_var_out = (Word32) var1 << 16; -#if (WMOPS) - multiCounter[currCounter].L_deposit_h++; -#endif - return (L_var_out); -} -/* ------------------------- End of L_deposit_h() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_deposit_l | - | | - | Purpose : | - | | - | Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The | - | 16 MS bits of the output are sign extended. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0xFFFF 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_deposit_l (Word16 var1) -{ - Word32 L_var_out; - - L_var_out = (Word32) var1; -#if (WMOPS) - multiCounter[currCounter].L_deposit_l++; -#endif - return (L_var_out); -} -/* ------------------------- End of L_deposit_l() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_shr_r | - | | - | Purpose : | - | | - | Same as L_shr(L_var1,var2) but with rounding. Saturate the result in | - | case of underflows or overflows : | - | - If var2 is greater than zero : | - | if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))| - | is equal to zero | - | then | - | L_shr_r(L_var1,var2) = L_shr(L_var1,var2) | - | else | - | L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1) | - | - If var2 is less than or equal to zero : | - | L_shr_r(L_var1,var2) = L_shr(L_var1,var2). | - | | - | Complexity weight : 3 | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_shr_r (Word32 L_var1, Word16 var2) -{ - Word32 L_var_out; - - if (var2 > 31) - { - L_var_out = 0; - } - else - { - L_var_out = L_shr (L_var1, var2); -#if (WMOPS) - multiCounter[currCounter].L_shr--; -#endif - if (var2 > 0) - { - if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0) - { - L_var_out++; - } - } - } -#if (WMOPS) - multiCounter[currCounter].L_shr_r++; -#endif - return (L_var_out); -} -/* ------------------------- End of L_shr_r() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_abs | - | | - | Purpose : | - | | - | Absolute value of L_var1; Saturate in case where the input is | - | -214783648 | - | | - | Complexity weight : 3 | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x0000 0000 <= var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_abs (Word32 L_var1) -{ - Word32 L_var_out; - - if (L_var1 == MIN_32) - { - L_var_out = MAX_32; - } - else - { - if (L_var1 < 0) - { - L_var_out = -L_var1; - } - else - { - L_var_out = L_var1; - } - } - -#if (WMOPS) - multiCounter[currCounter].L_abs++; -#endif - return (L_var_out); -} -/* ------------------------- End of L_abs() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : norm_s | - | | - | Purpose : | - | | - | Produces the number of left shift needed to normalize the 16 bit varia- | - | ble var1 for positive values on the interval with minimum of 16384 and | - | maximum of 32767, and for negative values on the interval with minimum | - | of -32768 and maximum of -16384; in order to normalize the result, the | - | following operation must be done : | - | norm_var1 = shl(var1,norm_s(var1)). | - | | - | Complexity weight : 15 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 0000 <= var_out <= 0x0000 000f. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) norm_s (Word16 var1) -{ - Word16 var_out; - - if (var1 == 0) - { - var_out = 0; - } - else - { - if ((UWord16)var1 == (UWord16)0xffff) - { - var_out = 15; - } - else - { - if (var1 < 0) - { - var1 = (Word16)(~var1); - } - for (var_out = 0; var1 < 0x4000; var_out++) - { - var1 <<= 1; - } - } - } - -#if (WMOPS) - multiCounter[currCounter].norm_s++; -#endif - return (var_out); -} -/* ------------------------- End of norm_s() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : div_s | - | | - | Purpose : | - | | - | Produces a result which is the fractional integer division of var1 by | - | var2; var1 and var2 must be positive and var2 must be greater or equal | - | to var1; the result is positive (leading bit equal to 0) and truncated | - | to 16 bits. | - | If var1 = var2 then div(var1,var2) = 32767. | - | | - | Complexity weight : 18 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 0000 <= var1 <= var2 and var2 != 0. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : var1 <= var2 <= 0x0000 7fff and var2 != 0. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | - | It's a Q15 value (point between b15 and b14). | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) div_s (Word16 var1, Word16 var2) -{ - Word16 var_out = 0; - Word16 iteration; - Word32 L_num; - Word32 L_denom; - - if ((var1 > var2) || (var1 < 0) || (var2 < 0)) - { - //printf ("Division Error var1=%d var2=%d\n", var1, var2); - //abort(); /* exit (0); */ - pj_assert(!"Division Error"); - } - if (var2 == 0) - { - //printf ("Division by 0, Fatal error \n"); - //abort(); /* exit (0); */ - assert(!"Division by 0"); - } - if (var1 == 0) - { - var_out = 0; - } - else - { - if (var1 == var2) - { - var_out = MAX_16; - } - else - { - L_num = L_deposit_l (var1); -#if (WMOPS) - multiCounter[currCounter].L_deposit_l--; -#endif - L_denom = L_deposit_l (var2); -#if (WMOPS) - multiCounter[currCounter].L_deposit_l--; -#endif - - for (iteration = 0; iteration < 15; iteration++) - { - var_out <<= 1; - L_num <<= 1; - - if (L_num >= L_denom) - { - L_num = L_sub (L_num, L_denom); -#if (WMOPS) - multiCounter[currCounter].L_sub--; -#endif - var_out = add (var_out, 1); -#if (WMOPS) - multiCounter[currCounter].add--; -#endif - } - } - } - } - -#if (WMOPS) - multiCounter[currCounter].div_s++; -#endif - return (var_out); -} -/* ------------------------- End of div_s() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : norm_l | - | | - | Purpose : | - | | - | Produces the number of left shifts needed to normalize the 32 bit varia-| - | ble L_var1 for positive values on the interval with minimum of | - | 1073741824 and maximum of 2147483647, and for negative values on the in-| - | terval with minimum of -2147483648 and maximum of -1073741824; in order | - | to normalize the result, the following operation must be done : | - | norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). | - | | - | Complexity weight : 30 | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 0000 <= var_out <= 0x0000 001f. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) norm_l (Word32 L_var1) -{ - Word16 var_out; - - if (L_var1 == 0) - { - var_out = 0; - } - else - { - if (L_var1 == (Word32) 0xffffffffL) - { - var_out = 31; - } - else - { - if (L_var1 < 0) - { - L_var1 = ~L_var1; - } - for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++) - { - L_var1 <<= 1; - } - } - } - -#if (WMOPS) - multiCounter[currCounter].norm_l++; -#endif - return (var_out); -} -/* ------------------------- End of norm_l() ------------------------- */ - - -/* - ***************************************************************** - Additional operators extracted from the G.723.1 Library - Adapted for WMOPS calculations - ***************************************************************** -*/ - -/*___________________________________________________________________________ - | | - | Function Name : L_mls | - | | - | Purpose : | - | | - | Multiplies a 16 bit word v by a 32 bit word Lv and returns a 32 bit | - | word (multiplying 16 by 32 bit words gives 48 bit word; the function | - | extracts the 32 MSB and shift the result to the left by 1). | - | | - | A 32 bit word can be written as | - | Lv = a + b * 2^16 | - | where a= unsigned 16 LSBs and b= signed 16 MSBs. | - | The function returns v * Lv / 2^15 which is equivalent to | - | a*v / 2^15 + b*v*2 | - | | - | Complexity weight : 6 [to be confirmed] | - | | - | Inputs : | - | | - | Lv | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | - | v | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x8000 <= var1 <= 0x7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | - | | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(Word32) L_mls (Word32 Lv, Word16 v) -{ - Word32 Temp ; - - Temp = Lv & (Word32) 0x0000ffff ; - Temp = Temp * (Word32) v ; - Temp = L_shr_nocheck( Temp, (Word16) 15 ) ; - Temp = L_mac( Temp, v, extract_h(Lv) ) ; - -#if (WMOPS) - multiCounter[currCounter].L_shr--; - multiCounter[currCounter].L_mac--; - multiCounter[currCounter].extract_h--; - multiCounter[currCounter].L_mls++; -#endif - - return Temp ; -} -/* ------------------------- End of L_mls() ------------------------- */ - - -/*__________________________________________________________________________ -| | -| Function Name : div_l | -| | -| Purpose : | -| | -| Produces a result which is the fractional integer division of L_var1 by| -| var2; L_var1 and var2 must be positive and var2 << 16 must be greater or| -| equal to L_var1; the result is positive (leading bit equal to 0) and | -| truncated to 16 bits. | -| If L_var1 == var2 << 16 then div_l(L_var1,var2) = 32767. | -| | -| Complexity weight : 20 | -| | -| Inputs : | -| | -| L_var1 | -| 32 bit long signed integer (Word32) whose value falls in the | -| range : 0x0000 0000 <= var1 <= (var2 << 16) and var2 != 0. | -| L_var1 must be considered as a Q.31 value | -| | -| var2 | -| 16 bit short signed integer (Word16) whose value falls in the | -| range : var1 <= (var2<< 16) <= 0x7fff0000 and var2 != 0. | -| var2 must be considered as a Q.15 value | -| | -| Outputs : | -| | -| none | -| | -| Return Value : | -| | -| var_out | -| 16 bit short signed integer (Word16) whose value falls in the | -| range : 0x0000 0000 <= var_out <= 0x0000 7fff. | -| It's a Q15 value (point between b15 and b14). | -|___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) div_l (Word32 L_num, Word16 den) -{ - Word16 var_out = (Word16)0; - Word32 L_den; - Word16 iteration; - -#if (WMOPS) - multiCounter[currCounter].div_l++; -#endif - - if ( den == (Word16) 0 ) { - //printf("Division by 0 in div_l, Fatal error \n"); - //exit(0); - assert(!"Division by 0"); - } - - if ( (L_num < (Word32) 0) || (den < (Word16) 0) ) { - //printf("Division Error in div_l, Fatal error \n"); - //exit(0); - assert(!"Division Error"); - } - - L_den = L_deposit_h( den ) ; -#if (WMOPS) - multiCounter[currCounter].L_deposit_h--; -#endif - - if ( L_num >= L_den ){ - return MAX_16 ; - } - else { - L_num = L_shr_nocheck(L_num, (Word16)1) ; - L_den = L_shr_nocheck(L_den, (Word16)1); -#if (WMOPS) - multiCounter[currCounter].L_shr-=2; -#endif - for(iteration=(Word16)0; iteration< (Word16)15;iteration++) { - var_out = shl_nocheck( var_out, (Word16)1); - L_num = L_shl_nocheck( L_num, (Word16)1); -#if (WMOPS) - multiCounter[currCounter].shl--; - multiCounter[currCounter].L_shl--; -#endif - if (L_num >= L_den) { - L_num = L_sub(L_num,L_den); - var_out = add(var_out, (Word16)1); -#if (WMOPS) - multiCounter[currCounter].L_sub--; - multiCounter[currCounter].add--; -#endif - } - } - - return var_out; - } -} -/* ------------------------- End of div_l() ------------------------- */ - - -/*__________________________________________________________________________ -| | -| Function Name : i_mult | -| | -| Purpose : | -| | -| Integer 16-bit multiplication. No overflow protection is performed if | -| ORIGINAL_G7231 is defined. | -| | -| Complexity weight : TBD | -| | -| Inputs : | -| | -| a | -| 16 bit short signed integer (Word16). | -| | -| b | -| 16 bit short signed integer (Word16). | -| | -| Outputs : | -| | -| none | -| | -| Return Value : | -| | -| 16 bit short signed integer (Word16). No overflow checks | -| are performed if ORIGINAL_G7231 is defined. | -|___________________________________________________________________________| -*/ -LIBG7221_DEF(Word16) i_mult (Word16 a, Word16 b) -{ -#ifdef ORIGINAL_G7231 - return a*b ; -#else - Word32 register c=a*b; -#if (WMOPS) - multiCounter[currCounter].i_mult++; -#endif - return saturate(c) ; -#endif -} -/* ------------------------- End of i_mult() ------------------------- */ - - -/* - ********************************************************************** - The following three operators are not part of the original - G.729/G.723.1 set of basic operators and implement shiftless - accumulation operation. - ********************************************************************** -*/ - -/*___________________________________________________________________________ - | - | Function Name : L_mult0 - | - | Purpose : - | - | L_mult0 is the 32 bit result of the multiplication of var1 times var2 - | without one left shift. - | - | Complexity weight : 1 - | - | Inputs : - | - | var1 16 bit short signed integer (Word16) whose value falls in the - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. - | - | var2 16 bit short signed integer (Word16) whose value falls in the - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. - | - | Return Value : - | - | L_var_out - | 32 bit long signed integer (Word32) whose value falls in the - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. - |___________________________________________________________________________ -*/ -LIBG7221_DEF(Word32) L_mult0 (Word16 var1,Word16 var2) -{ - Word32 L_var_out; - - L_var_out = (Word32)var1 * (Word32)var2; - -#if (WMOPS) - multiCounter[currCounter].L_mult0++; -#endif - return(L_var_out); -} -/* ------------------------- End of L_mult0() ------------------------- */ - - -/*___________________________________________________________________________ - | - | Function Name : L_mac0 - | - | Purpose : - | - | Multiply var1 by var2 (without left shift) and add the 32 bit result to - | L_var3 with saturation, return a 32 bit result: - | L_mac0(L_var3,var1,var2) = L_add(L_var3,(L_mult0(var1,var2)). - | - | Complexity weight : 1 - | - | Inputs : - | - | L_var3 32 bit long signed integer (Word32) whose value falls in the - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. - | - | var1 16 bit short signed integer (Word16) whose value falls in the - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. - | - | var2 16 bit short signed integer (Word16) whose value falls in the - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. - | - | Return Value : - | - | L_var_out - | 32 bit long signed integer (Word32) whose value falls in the - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. - |___________________________________________________________________________ -*/ -LIBG7221_DEF(Word32) L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word32 L_var_out; - Word32 L_product; - - L_product = L_mult0(var1,var2); - L_var_out = L_add(L_var3,L_product); - -#if (WMOPS) - multiCounter[currCounter].L_mac0++; - multiCounter[currCounter].L_mult0--; - multiCounter[currCounter].L_add--; -#endif - return(L_var_out); -} -/* ------------------------- End of L_mac0() ------------------------- */ - - -/*___________________________________________________________________________ - | - | Function Name : L_msu0 - | - | Purpose : - | - | Multiply var1 by var2 (without left shift) and subtract the 32 bit - | result to L_var3 with saturation, return a 32 bit result: - | L_msu0(L_var3,var1,var2) = L_sub(L_var3,(L_mult0(var1,var2)). - | - | Complexity weight : 1 - | - | Inputs : - | - | L_var3 32 bit long signed integer (Word32) whose value falls in the - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. - | - | var1 16 bit short signed integer (Word16) whose value falls in the - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. - | - | var2 16 bit short signed integer (Word16) whose value falls in the - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. - | - | Return Value : - | - | L_var_out - | 32 bit long signed integer (Word32) whose value falls in the - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. - |___________________________________________________________________________ -*/ -LIBG7221_DEF(Word32) L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) -{ - Word32 L_var_out; - Word32 L_product; - - L_product = L_mult0(var1,var2); - L_var_out = L_sub(L_var3,L_product); - -#if (WMOPS) - multiCounter[currCounter].L_msu0++; - multiCounter[currCounter].L_mult0--; - multiCounter[currCounter].L_sub--; -#endif - return(L_var_out); -} -/* ------------------------- End of L_msu0() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : LU_shl | - | | - | Purpose : | - | | - | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | - | fill the var2 LSB of the result. If var2 is negative, arithmetically | - | shift L_var1 right by -var2 with sign extension. Saturate the result in | - | case of underflows or overflows. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(UWord32) LU_shl (UWord32 L_var1, Word16 var2) -{ - Word16 neg_var2; - UWord32 L_var_out = 0; - - if (var2 <= 0) - { - if (var2 < -32) - var2 = -32; - neg_var2 = negate(var2); - L_var_out = LU_shr (L_var1, neg_var2); -#if (WMOPS) - multiCounter[currCounter].negate--; - multiCounter[currCounter].LU_shr--; -#endif - } - else - { - for (; var2 > 0; var2--) - { - if (L_var1 > (UWord32) 0X7fffffffL) - { - SET_OVERFLOW(1); - L_var_out = UMAX_32; - break; - } - else - { - if (L_var1 < (UWord32) 0x00000001L) - { - SET_OVERFLOW(1); - L_var_out = (UWord32)MIN_32; - break; - } - } - L_var1 *= 2; - L_var_out = L_var1; - } - } -#if (WMOPS) - multiCounter[currCounter].LU_shl++; -#endif - return (L_var_out); -} -/* ------------------------- End of LU_shl() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : LU_shr | - | | - | Purpose : | - | | - | Arithmetically shift the 32 bit input L_var1 right var2 positions with | - | sign extension. If var2 is negative, arithmetically shift L_var1 left | - | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | - | in case of underflows or overflows. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -LIBG7221_DEF(UWord32) LU_shr (UWord32 L_var1, Word16 var2) -{ - Word16 neg_var2; - UWord32 L_var_out; - - if (var2 < 0) - { - if (var2 < -32) - var2 = -32; - neg_var2 = negate(var2); - L_var_out = LU_shl (L_var1, neg_var2); -#if (WMOPS) - multiCounter[currCounter].negate--; - multiCounter[currCounter].LU_shl--; -#endif - } - else - { - if (var2 >= 32) - { - L_var_out = 0L; - } - else - { - L_var_out = L_var1 >> var2; - } - } -#if (WMOPS) - multiCounter[currCounter].LU_shr++; -#endif - return (L_var_out); -} -/* ------------------------- End of LU_shr() ------------------------- */ - -#endif /* PJMEDIA_LIBG7221_FUNCS_INLINED */ - -/* ************************** END OF BASOP32.C ************************** */ diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.h b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.h deleted file mode 100644 index 45104d1ce1773e200fb03e4d9156aa5863866cd8..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op.h +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef __BASIC_OP_H__ -#define __BASIC_OP_H__ - -#include "config.h" - -/*___________________________________________________________________________ - | | - | Constants and Globals | - |___________________________________________________________________________| -*/ - -#define MAX_32 (Word32)0x7fffffffL -#define MIN_32 (Word32)0x80000000L - -#define MAX_16 (Word16)0x7fff -#define MIN_16 (Word16)(pj_uint16_t)0x8000 - -#define UMAX_32 (UWord32)0xffffffffL -#define UMIN_32 (UWord32)0x00000000L - -/*___________________________________________________________________________ - | | - | Prototypes for basic arithmetic operators | - |___________________________________________________________________________| -*/ - -PJ_INLINE(Word16) add (Word16 var1, Word16 var2); /* Short add, 1 */ -PJ_INLINE(Word16) sub (Word16 var1, Word16 var2); /* Short sub, 1 */ -PJ_INLINE(Word16) abs_s (Word16 var1); /* Short abs, 1 */ -LIBG7221_DECL(Word16) shl (Word16 var1, Word16 var2); /* Short shift left, 1 */ -PJ_INLINE(Word16) shl_nocheck(Word16 var1, Word16 var2); -LIBG7221_DECL(Word16) shr (Word16 var1, Word16 var2); /* Short shift right, 1 */ -PJ_INLINE(Word16) shr_nocheck(Word16 var1, Word16 var2); -LIBG7221_DECL(Word16) mult (Word16 var1, Word16 var2); /* Short mult, 1 */ -PJ_INLINE(Word32) L_mult (Word16 var1, Word16 var2); /* Long mult, 1 */ -PJ_INLINE(Word16) negate (Word16 var1); /* Short negate, 1 */ -PJ_INLINE(Word16) extract_h (Word32 L_var1); /* Extract high, 1 */ -PJ_INLINE(Word16) extract_l (Word32 L_var1); /* Extract low, 1 */ -PJ_INLINE(Word16) itu_round (Word32 L_var1); /* Round, 1 */ -PJ_INLINE(Word32) L_mac (Word32 L_var3, Word16 var1, Word16 var2); /* Mac, 1 */ -LIBG7221_DECL(Word32) L_msu (Word32 L_var3, Word16 var1, Word16 var2); /* Msu, 1 */ -LIBG7221_DECL(Word32) L_macNs (Word32 L_var3, Word16 var1, Word16 var2); /* Mac without - sat, 1 */ -LIBG7221_DECL(Word32) L_msuNs (Word32 L_var3, Word16 var1, Word16 var2); /* Msu without - sat, 1 */ -//PJ_INLINE(Word32) L_add (Word32 L_var1, Word32 L_var2); /* Long add, 2 */ -PJ_INLINE(Word32) L_sub (Word32 L_var1, Word32 L_var2); /* Long sub, 2 */ -LIBG7221_DECL(Word32) L_add_c (Word32 L_var1, Word32 L_var2); /* Long add with c, 2 */ -LIBG7221_DECL(Word32) L_sub_c (Word32 L_var1, Word32 L_var2); /* Long sub with c, 2 */ -LIBG7221_DECL(Word32) L_negate (Word32 L_var1); /* Long negate, 2 */ -LIBG7221_DECL(Word16) mult_r (Word16 var1, Word16 var2); /* Mult with round, 2 */ -PJ_INLINE(Word32) L_shl (Word32 L_var1, Word16 var2); /* Long shift left, 2 */ -PJ_INLINE(Word32) L_shr (Word32 L_var1, Word16 var2); /* Long shift right, 2*/ -LIBG7221_DECL(Word16) shr_r (Word16 var1, Word16 var2); /* Shift right with - round, 2 */ -LIBG7221_DECL(Word16) mac_r (Word32 L_var3, Word16 var1, Word16 var2); /* Mac with - rounding,2 */ -LIBG7221_DECL(Word16) msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with - rounding,2 */ -LIBG7221_DECL(Word32) L_deposit_h (Word16 var1); /* 16 bit var1 -> MSB, 2 */ -LIBG7221_DECL(Word32) L_deposit_l (Word16 var1); /* 16 bit var1 -> LSB, 2 */ - -LIBG7221_DECL(Word32) L_shr_r (Word32 L_var1, Word16 var2); /* Long shift right with - round, 3 */ -LIBG7221_DECL(Word32) L_abs (Word32 L_var1); /* Long abs, 3 */ -LIBG7221_DECL(Word32) L_sat (Word32 L_var1); /* Long saturation, 4 */ -LIBG7221_DECL(Word16) norm_s (Word16 var1); /* Short norm, 15 */ -LIBG7221_DECL(Word16) div_s (Word16 var1, Word16 var2); /* Short division, 18 */ -LIBG7221_DECL(Word16) norm_l (Word32 L_var1); /* Long norm, 30 */ - -/* - Additional G.723.1 operators -*/ -LIBG7221_DECL(Word32) L_mls( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ -LIBG7221_DECL(Word16) div_l( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ -LIBG7221_DECL(Word16) i_mult(Word16 a, Word16 b); /* Weight FFS; currently assigned 1 */ - -/* - New shiftless operators, not used in G.729/G.723.1 -*/ -LIBG7221_DECL(Word32) L_mult0(Word16 v1, Word16 v2); /* 32-bit Multiply w/o shift 1 */ -LIBG7221_DECL(Word32) L_mac0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Mac w/o shift 1 */ -LIBG7221_DECL(Word32) L_msu0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Msu w/o shift 1 */ - -/* - Additional G.722.1 operators -*/ -LIBG7221_DECL(UWord32) LU_shl (UWord32 L_var1, Word16 var2); -LIBG7221_DECL(UWord32) LU_shr (UWord32 L_var1, Word16 var2); - -#define INCLUDE_UNSAFE 0 - -/* Local */ -PJ_INLINE(Word16) saturate (Word32 L_var1); - -#if INCLUDE_UNSAFE - extern Flag g7221_Overflow; - extern Flag g7221_Carry; -# define SET_OVERFLOW(n) g7221_Overflow = n -# define SET_CARRY(n) g7221_Carry = n - -#else -# define SET_OVERFLOW(n) -# define SET_CARRY(n) -# define GET_OVERFLOW() 0 -# define GET_CARRY() 0 -#endif - -#include "basic_op_i.h" - -#if PJMEDIA_LIBG7221_FUNCS_INLINED -# include "basic_op.c" -#endif - -#endif /* __BASIC_OP_H__ */ - - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h b/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h deleted file mode 100644 index d6906237b100b75aef8dce6b5286979a94f4b645..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/basic_op_i.h +++ /dev/null @@ -1,730 +0,0 @@ -/*___________________________________________________________________________ - | | - | Function Name : extract_h | - | | - | Purpose : | - | | - | Return the 16 MSB of L_var1. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32 ) whose value falls in the | - | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) extract_h (Word32 L_var1) -{ - return (Word16) (L_var1 >> 16); -} -/* ------------------------- End of extract_h() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : extract_l | - | | - | Purpose : | - | | - | Return the 16 LSB of L_var1. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32 ) whose value falls in the | - | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) extract_l (Word32 L_var1) -{ - return (Word16) L_var1; -} - -/* ------------------------- End of extract_l() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : saturate | - | | - | Purpose : | - | | - | Limit the 32 bit input to the range of a 16 bit word. | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) saturate (Word32 L_var1) -{ - Word16 val16 = (Word16) L_var1; - - if (val16 == L_var1) - return val16; - - if (L_var1 > MAX_16) - return MAX_16; - return MIN_16; -} -/* ------------------------- End of saturate() ------------------------- */ - - -#if PJ_HAS_INT64 -PJ_INLINE(Word32) L_saturate (pj_int64_t LL_var1) -{ - pj_int32_t L_var1 = (pj_int32_t)LL_var1; - if (LL_var1 == L_var1) - return L_var1; - else if (LL_var1 > MAX_32) - return MAX_32; - else - return MIN_32; -} -#endif - - -/*___________________________________________________________________________ - | | - | Function Name : add | - | | - | Purpose : | - | | - | Performs the addition (var1+var2) with overflow control and saturation;| - | the 16 bit result is set at +32767 when overflow occurs or at -32768 | - | when underflow occurs. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) add (Word16 var1, Word16 var2) -{ - return saturate (var1 + var2); -} -/* ------------------------- End of add() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : sub | - | | - | Purpose : | - | | - | Performs the subtraction (var1+var2) with overflow control and satu- | - | ration; the 16 bit result is set at +32767 when overflow occurs or at | - | -32768 when underflow occurs. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) sub (Word16 var1, Word16 var2) -{ - return saturate ((Word32) var1 - var2); -} -/* ------------------------- End of sub() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : negate | - | | - | Purpose : | - | | - | Negate var1 with saturation, saturate in the case where input is -32768:| - | negate(var1) = sub(0,var1). | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) negate (Word16 var1) -{ - return (Word16)((var1 == MIN_16) ? MAX_16 : -var1); -} -/* ------------------------- End of negate() ------------------------- */ - - - - -/*___________________________________________________________________________ - | | - | Function Name : L_add | - | | - | Purpose : | - | | - | 32 bits addition of the two 32 bits variables (L_var1+L_var2) with | - | overflow control and saturation; the result is set at +2147483647 when | - | overflow occurs or at -2147483648 when underflow occurs. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | L_var2 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word32) L_add (Word32 L_var1, Word32 L_var2) -{ -#if PJ_HAS_INT64 - return L_saturate(((pj_int64_t)L_var1) + L_var2); -#else - Word32 L_var_out; - - L_var_out = L_var1 + L_var2; - - if (((L_var1 ^ L_var2) & MIN_32) == 0) - { - if ((L_var_out ^ L_var1) & MIN_32) - { - SET_OVERFLOW(1); - L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32; - } - } - return (L_var_out); -#endif -} - -/* ------------------------- End of L_add() ------------------------- */ - - - - -/*___________________________________________________________________________ - | | - | Function Name : L_sub | - | | - | Purpose : | - | | - | 32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with | - | overflow control and saturation; the result is set at +2147483647 when | - | overflow occurs or at -2147483648 when underflow occurs. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | L_var2 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word32) L_sub (Word32 L_var1, Word32 L_var2) -{ -#if PJ_HAS_INT64 - return L_saturate((pj_int64_t)L_var1 - L_var2); -#else - Word32 L_var_out; - - L_var_out = L_var1 - L_var2; - - if (((L_var1 ^ L_var2) & MIN_32) != 0) - { - if ((L_var_out ^ L_var1) & MIN_32) - { - L_var_out = (L_var1 < 0L) ? MIN_32 : MAX_32; - SET_OVERFLOW(1); - } - } - return (L_var_out); -#endif -} -/* ------------------------- End of L_sub() ------------------------- */ - -/*___________________________________________________________________________ - | | - | Function Name : L_mult | - | | - | Purpose : | - | | - | L_mult is the 32 bit result of the multiplication of var1 times var2 | - | with one shift left i.e.: | - | L_mult(var1,var2) = L_shl((var1 times var2),1) and | - | L_mult(-32768,-32768) = 2147483647. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word32) L_mult (Word16 var1, Word16 var2) -{ - Word32 L_var_out; - - L_var_out = (Word32) var1 *(Word32) var2; - - if (L_var_out != (Word32) 0x40000000L) - { - return L_var_out << 1; - } - else - { - SET_OVERFLOW(1); - return MAX_32; - } -} -/* ------------------------- End of L_mult() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_mac | - | | - | Purpose : | - | | - | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | - | result to L_var3 with saturation, return a 32 bit result: | - | L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)). | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var3 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word32) L_mac (Word32 L_var3, Word16 var1, Word16 var2) -{ - return L_add (L_var3, L_mult (var1, var2)); -} -/* ------------------------- End of L_mac() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : round | - | | - | Purpose : | - | | - | Round the lower 16 bits of the 32 bit input number into the MS 16 bits | - | with saturation. Shift the resulting bits right by 16 and return the 16 | - | bit number: | - | round(L_var1) = extract_h(L_add(L_var1,32768)) | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | L_var1 | - | 32 bit long signed integer (Word32 ) whose value falls in the | - | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) itu_round (Word32 L_var1) -{ - return extract_h (L_add (L_var1, (Word32) 0x00008000L)); -} -/* ------------------------- End of round() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : L_shr | - | | - | Purpose : | - | | - | Arithmetically shift the 32 bit input L_var1 right var2 positions with | - | sign extension. If var2 is negative, arithmetically shift L_var1 left | - | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | - | in case of underflows or overflows. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word32) L_shr_nocheck(Word32 L_var1, Word16 var2) -{ -#if 1 - return L_var1 >> var2; -#else - if (var2 >= 31) - { - return (L_var1 < 0L) ? -1 : 0; - } - else - { - if (L_var1 < 0) - { - return ~((~L_var1) >> var2); - } - else - { - return L_var1 >> var2; - } - } -#endif -} - -PJ_INLINE(Word32) L_shl_nocheck (Word32 L_var1, Word16 var2) -{ -#if PJ_HAS_INT64 - return L_saturate( ((pj_int64_t)L_var1) << var2 ); -#else - for (; var2 > 0; var2--) - { - if (L_var1 > (Word32) 0X3fffffffL) - { - SET_OVERFLOW(1); - return MAX_32; - } - else - { - if (L_var1 < (Word32) 0xc0000000L) - { - SET_OVERFLOW(1); - return MIN_32; - } - } - L_var1 <<= 1; - } - return (L_var1); -#endif -} - -PJ_INLINE(Word32) L_shr (Word32 L_var1, Word16 var2) -{ - if (var2 < 0) - { - if (var2 < -32) - var2 = -32; - return L_shl_nocheck (L_var1, (Word16) -var2); - } - else - { - return L_shr_nocheck(L_var1, var2); - } -} -/* ------------------------- End of L_shr() ------------------------- */ - -/*___________________________________________________________________________ - | | - | Function Name : L_shl | - | | - | Purpose : | - | | - | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | - | fill the var2 LSB of the result. If var2 is negative, arithmetically | - | shift L_var1 right by -var2 with sign extension. Saturate the result in | - | case of underflows or overflows. | - | | - | Complexity weight : 2 | - | | - | Inputs : | - | | - | L_var1 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | - | | - | var2 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | L_var_out | - | 32 bit long signed integer (Word32) whose value falls in the | - | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word32) L_shl (Word32 L_var1, Word16 var2) -{ - if (var2 <= 0) - { - if (var2 < -32) - var2 = -32; - return L_shr_nocheck(L_var1, (Word16) -var2); - } - else - { - return L_shl_nocheck(L_var1, var2); - } -} -/* ------------------------- End of L_shl() ------------------------- */ - - -/*___________________________________________________________________________ - | | - | Function Name : abs_s | - | | - | Purpose : | - | | - | Absolute value of var1; abs_s(-32768) = 32767. | - | | - | Complexity weight : 1 | - | | - | Inputs : | - | | - | var1 | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | - | | - | Outputs : | - | | - | none | - | | - | Return Value : | - | | - | var_out | - | 16 bit short signed integer (Word16) whose value falls in the | - | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | - |___________________________________________________________________________| -*/ -PJ_INLINE(Word16) abs_s (Word16 var1) -{ -#if 1 - if (var1 >= 0) - return var1; - else if (var1 == MIN_16) - return MAX_16; - else - return (Word16)-var1; -#else - if (var1 == MIN_16) - { - return MAX_16; - } - else - { - if (var1 < 0) - { - return (Word16)-var1; - } - else - { - return var1; - } - } -#endif -} -/* ------------------------- End of abs_s() ------------------------- */ - - -PJ_INLINE(Word16) shl_nocheck(Word16 var1, Word16 var2) -{ -#if 1 - /* blp: this should be more optimized */ - return saturate (((Word32)var1) << var2); -#else - /* Original algorithm */ - Word32 result = (Word32) var1 *((Word32) 1 << var2); - - if ((var2 > 15 && var1 != 0) || (result != (Word32) ((Word16) result))) - { - SET_OVERFLOW(1); - return (Word16) ((var1 > 0) ? MAX_16 : MIN_16); - } - else - { - return extract_l (result); - } -#endif -} - -PJ_INLINE(Word16) shr_nocheck(Word16 var1, Word16 var2) -{ -#if 1 - /* blp: this should yield the same value */ - return (Word16) (var1 >> var2); -#else - /* Original algorithm */ - if (var2 >= 15) - { - return (Word16)((var1 < 0) ? -1 : 0); - } - else - { - if (var1 < 0) - { - return (Word16) (~((~var1) >> var2)); - } - else - { - return (Word16)(var1 >> var2); - } - } -#endif -} diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/common.c b/sflphone-common/libs/pjproject/third_party/g7221/common/common.c deleted file mode 100644 index d5eed810505d743598c6a1e066dc1bf80a215f3f..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/common.c +++ /dev/null @@ -1,461 +0,0 @@ -/**************************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -****************************************************************************************/ - -/**************************************************************************************** - Filename: common.c - - Purpose: Contains the functions used for both G.722.1 Annex C encoder and decoder - - Design Notes: - -****************************************************************************************/ -/**************************************************************************************** - Include files -****************************************************************************************/ -#include "defs.h" -#include "huff_def.h" -#include "huff_tab.h" -#include "tables.h" -#include "count.h" - -/**************************************************************************************** - Function: categorize - - Syntax: void categorize(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 rms_index, - Word16 power_categories, - Word16 category_balances) - - inputs: number_of_regions - num_categorization_control_possibilities - number_of_available_bits - rms_index[MAX_NUMBER_OF_REGIONS] - - outputs: power_categories[MAX_NUMBER_OF_REGIONS] - category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1] - - Description: Computes a series of categorizations - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.14 | 0.14 - -------|--------------|---------------- - MAX | 0.15 | 0.15 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.42 | 0.45 | 0.48 - -------|--------------|----------------|---------------- - MAX | 0.47 | 0.52 | 0.52 - -------|--------------|----------------|---------------- - -****************************************************************************************/ -void categorize(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *rms_index, - Word16 *power_categories, - Word16 *category_balances) -{ - - Word16 offset; - Word16 temp; - Word16 frame_size; - - /* At higher bit rates, there is an increase for most categories in average bit - consumption per region. We compensate for this by pretending we have fewer - available bits. */ - test(); - if (number_of_regions == NUMBER_OF_REGIONS) - { - frame_size = DCT_LENGTH; - } - else - { - frame_size = MAX_DCT_LENGTH; - } - - temp = sub(number_of_available_bits,frame_size); - - test(); - if (temp > 0) - { - number_of_available_bits = sub(number_of_available_bits,frame_size); - number_of_available_bits = extract_l(L_mult0(number_of_available_bits,5)); - number_of_available_bits = shr_nocheck(number_of_available_bits,3); - number_of_available_bits = add(number_of_available_bits,frame_size); - } - - /* calculate the offset using the original category assignments */ - offset = calc_offset(rms_index,number_of_regions,number_of_available_bits); - - - - /* compute the power categories based on the uniform offset */ - compute_raw_pow_categories(power_categories,rms_index,number_of_regions,offset); - - - /* adjust the category assignments */ - /* compute the new power categories and category balances */ - comp_powercat_and_catbalance(power_categories,category_balances,rms_index,number_of_available_bits,number_of_regions,num_categorization_control_possibilities,offset); - -} - -/*************************************************************************** - Function: comp_powercat_and_catbalance - - Syntax: void comp_powercat_and_catbalance(Word16 *power_categories, - Word16 *category_balances, - Word16 *rms_index, - Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 offset) - - - inputs: *rms_index - number_of_available_bits - number_of_regions - num_categorization_control_possibilities - offset - - outputs: *power_categories - *category_balances - - - Description: Computes the power_categories and the category balances - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.10 | 0.10 - -------|--------------|---------------- - MAX | 0.11 | 0.11 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.32 | 0.35 | 0.38 - -------|--------------|----------------|---------------- - MAX | 0.38 | 0.42 | 0.43 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void comp_powercat_and_catbalance(Word16 *power_categories, - Word16 *category_balances, - Word16 *rms_index, - Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 offset) -{ - - Word16 expected_number_of_code_bits; - Word16 region; - Word16 max_region; - Word16 j; - Word16 max_rate_categories[MAX_NUMBER_OF_REGIONS]; - Word16 min_rate_categories[MAX_NUMBER_OF_REGIONS]; - Word16 temp_category_balances[2*MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES]; - Word16 raw_max, raw_min; - Word16 raw_max_index=0, raw_min_index=0; - Word16 max_rate_pointer, min_rate_pointer; - Word16 max, min; - Word16 itemp0; - Word16 itemp1; - Word16 min_plus_max; - Word16 two_x_number_of_available_bits; - - Word16 temp; - - expected_number_of_code_bits = 0; - move16(); - - for (region=0; region<number_of_regions; region++) - expected_number_of_code_bits = add(expected_number_of_code_bits,expected_bits_table[power_categories[region]]); - - - for (region=0; region<number_of_regions; region++) - { - max_rate_categories[region] = power_categories[region]; - move16(); - - min_rate_categories[region] = power_categories[region]; - move16(); - } - - max = expected_number_of_code_bits; - move16(); - min = expected_number_of_code_bits; - move16(); - max_rate_pointer = num_categorization_control_possibilities; - move16(); - min_rate_pointer = num_categorization_control_possibilities; - move16(); - - for (j=0; j<num_categorization_control_possibilities-1; j++) - { - min_plus_max = add(max,min); - two_x_number_of_available_bits = shl_nocheck(number_of_available_bits,1); - - temp = sub(min_plus_max,two_x_number_of_available_bits); - test(); - if (temp <= 0) - { - raw_min = 99; - move16(); - /* Search from lowest freq regions to highest for best */ - /* region to reassign to a higher bit rate category. */ - for (region=0; region<number_of_regions; region++) - { - test(); - if (max_rate_categories[region] > 0) - { - itemp0 = shl_nocheck(max_rate_categories[region],1); - itemp1 = sub(offset,rms_index[region]); - itemp0 = sub(itemp1,itemp0); - - temp = sub(itemp0,raw_min); - test(); - if (temp < 0) - { - raw_min = itemp0; - raw_min_index = region; - } - } - } - max_rate_pointer = sub(max_rate_pointer,1); - temp_category_balances[max_rate_pointer] = raw_min_index; - move16(); - - max = sub(max,expected_bits_table[max_rate_categories[raw_min_index]]); - max_rate_categories[raw_min_index] = sub(max_rate_categories[raw_min_index],1); - move16(); - - max = add(max,expected_bits_table[max_rate_categories[raw_min_index]]); - } - else - { - raw_max = -99; - move16(); - /* Search from highest freq regions to lowest for best region to reassign to - a lower bit rate category. */ - max_region = sub(number_of_regions,1); - for (region= max_region; region >= 0; region--) - { - temp = sub(min_rate_categories[region],(NUM_CATEGORIES-1)); - test(); - if (temp < 0) - { - itemp0 = shl_nocheck(min_rate_categories[region],1); - itemp1 = sub(offset,rms_index[region]); - itemp0 = sub(itemp1,itemp0); - - temp = sub(itemp0,raw_max); - test(); - if (temp > 0) - { - raw_max = itemp0; - move16(); - raw_max_index = region; - move16(); - } - } - } - temp_category_balances[min_rate_pointer] = raw_max_index; - move16(); - - min_rate_pointer = add(min_rate_pointer,1); - min = sub(min,expected_bits_table[min_rate_categories[raw_max_index]]); - - min_rate_categories[raw_max_index] = add(min_rate_categories[raw_max_index],1); - move16(); - - min = add(min,expected_bits_table[min_rate_categories[raw_max_index]]); - } - } - - for (region=0; region<number_of_regions; region++) - { - power_categories[region] = max_rate_categories[region]; - move16(); - } - - for (j=0; j<num_categorization_control_possibilities-1; j++) - { - category_balances[j] = temp_category_balances[max_rate_pointer++]; - move16(); - } - -} -/*************************************************************************** - Function: calc_offset - - Syntax: offset=calc_offset(Word16 *rms_index,Word16 number_of_regions,Word16 available_bits) - - input: Word16 *rms_index - Word16 number_of_regions - Word16 available_bits - - output: Word16 offset - - Description: Calculates the the category offset. This is the shift required - To get the most out of the number of available bits. A binary - type search is used to find the offset. - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.04 | 0.04 - -------|--------------|---------------- - MAX | 0.04 | 0.04 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.08 | 0.08 | 0.08 - -------|--------------|----------------|---------------- - MAX | 0.09 | 0.09 | 0.09 - -------|--------------|----------------|---------------- - -***************************************************************************/ -Word16 calc_offset(Word16 *rms_index,Word16 number_of_regions,Word16 available_bits) -{ - - Word16 answer; - Word16 delta; - Word16 test_offset; - Word16 region,j; - Word16 power_cats[MAX_NUMBER_OF_REGIONS]; - Word16 bits; - Word16 offset; - Word16 temp; - - /* initialize vars */ - answer = -32; - move16(); - delta = 32; - move16(); - - do - { - test_offset = add(answer,delta); - - /* obtain a category for each region */ - /* using the test offset */ - for (region=0; region<number_of_regions; region++) - { - j = sub(test_offset,rms_index[region]); - j = shr_nocheck(j,1); - - /* Ensure j is between 0 and NUM_CAT-1 */ - test(); - if (j < 0) - { - j = 0; - move16(); - } - temp = sub(j,NUM_CATEGORIES-1); - test(); - if (temp > 0) - { - j = sub(NUM_CATEGORIES,1); - move16(); - } - power_cats[region] = j; - move16(); - } - bits = 0; - move16(); - - /* compute the number of bits that will be used given the cat assignments */ - for (region=0; region<number_of_regions; region++) - bits = add(bits,expected_bits_table[power_cats[region]]); - - /* if (bits > available_bits - 32) then divide the offset region for the bin search */ - offset = sub(available_bits,32); - temp = sub(bits,offset); - test(); - if (temp >= 0) - { - answer = test_offset; - move16(); - } - delta = shr_nocheck(delta,1); - test(); /* for the while loop */ - } while (delta > 0); - - return(answer); -} -/*************************************************************************** - Function: compute_raw_pow_categories - - Syntax: void compute_raw_pow_categories(Word16 *power_categories, - Word16 *rms_index, - Word16 number_of_regions, - Word16 offset) - inputs: *rms_index - number_of_regions - offset - - outputs: *power_categories - - - - Description: This function computes the power categories given the offset - This is kind of redundant since they were already computed - in calc_offset to determine the offset. - - WMOPS: | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.01 | 0.01 - -------|--------------|---------------- - MAX | 0.01 | 0.01 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.01 | 0.01 | 0.01 - -------|--------------|----------------|---------------- - MAX | 0.01 | 0.01 | 0.01 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void compute_raw_pow_categories(Word16 *power_categories,Word16 *rms_index,Word16 number_of_regions,Word16 offset) -{ - Word16 region; - Word16 j; - Word16 temp; - - for (region=0; region<number_of_regions; region++) - { - j = sub(offset,rms_index[region]); - j = shr_nocheck(j,1); - - /* make sure j is between 0 and NUM_CAT-1 */ - test(); - if (j < 0) - { - j = 0; - move16(); - } - temp = sub(j,(NUM_CATEGORIES-1)); - test(); - if (temp > 0) - j = sub(NUM_CATEGORIES,1); - - power_categories[region] = j; - move16(); - } -} - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/config.h b/sflphone-common/libs/pjproject/third_party/g7221/common/config.h deleted file mode 100644 index 4faec787d79753bddee3567150bd1663ec6df8a5..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/config.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __LIBG7221_CONFIG_H__ -#define __LIBG7221_CONFIG_H__ - -#include <pj/config.h> - -/** - * Expand all basic operation functions as inline. Even if this is set to - * zero, some critical functions would still be expanded as inline. Note - * also that enabling this may generate some warning messages about functions - * not being referenced (with gcc). - * - * Default: 0 (no) - */ -#ifndef PJMEDIA_LIBG7221_FUNCS_INLINED -# define PJMEDIA_LIBG7221_FUNCS_INLINED 0 -#endif - -/* Declare/define a function that may be expanded as inline. */ -#if PJMEDIA_LIBG7221_FUNCS_INLINED -# define LIBG7221_DECL(type) PJ_INLINE(type) -# define LIBG7221_DEF(type) PJ_INLINE(type) -#else -# define LIBG7221_DECL(type) PJ_DECL(type) -# define LIBG7221_DEF(type) PJ_DEF(type) -#endif - -#endif /* __LIBG7221_CONFIG_H__ */ diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/count.h b/sflphone-common/libs/pjproject/third_party/g7221/common/count.h deleted file mode 100644 index 0ead7275a4586ec5e1defafb64ea5f4618be9a29..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/count.h +++ /dev/null @@ -1,28 +0,0 @@ -/* $Id: count.h 2623 2009-04-20 18:38:15Z bennylp $ */ -/* - * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#ifndef COUNT_H -#define COUNT_H - -#define move16() -#define move32() -#define logic16() -#define logic32() -#define test() - -#endif diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/defs.h b/sflphone-common/libs/pjproject/third_party/g7221/common/defs.h deleted file mode 100644 index d4c7aa2ec4b627f4257b1aca408b2ddcaf404da0..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/defs.h +++ /dev/null @@ -1,205 +0,0 @@ -/*********************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***********************************************************************/ - -#include <stdio.h> -#include <math.h> -#include <stdlib.h> -#include "g7221/common/typedef.h" -#include "g7221/common/basic_op.h" - -#define PI 3.141592653589793238462 - -#define MAX_DCT_LENGTH 640 -#define DCT_LENGTH 320 -#define DCT_LENGTH_DIV_2 160 -#define DCT_LENGTH_DIV_4 80 -#define DCT_LENGTH_DIV_8 40 -#define DCT_LENGTH_DIV_16 20 -#define DCT_LENGTH_DIV_32 10 -#define DCT_LENGTH_DIV_64 5 - - -#define MAX(a,b) (a > b ? a : b) -#define MIN(a,b) (a < b ? a : b) - -#define NUM_CATEGORIES 8 -#define NUM_CATEGORIZATION_CONTROL_BITS 4 -#define NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 16 -#define CORE_SIZE 10 -#define DCT_LENGTH_LOG 6 -#define MAX_DCT_LENGTH_LOG 7 - -/* region_size = (BLOCK_SIZE * 0.875)/NUM_REGIONS; */ -#define NUMBER_OF_REGIONS 14 -#define MAX_NUMBER_OF_REGIONS 28 -#define REGION_SIZE 20 -#define NUMBER_OF_VALID_COEFS (NUMBER_OF_REGIONS * REGION_SIZE) -#define MAX_NUMBER_OF_VALID_COEFS (MAX_NUMBER_OF_REGIONS * REGION_SIZE) - -#define REGION_POWER_TABLE_SIZE 64 -#define REGION_POWER_TABLE_NUM_NEGATIVES 24 - -#define MAX_NUM_CATEGORIZATION_CONTROL_BITS 5 -#define MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES 32 - -#define ENCODER_SCALE_FACTOR 18318.0 - -/* The MLT output is incorrectly scaled by the factor - product of ENCODER_SCALE_FACTOR and sqrt(160.) - This is now (9/30/96) 1.0/2^(4.5) or 1/22.627. - In the current implementation this - must be an integer power of sqrt(2). The - integer power is ESF_ADJUSTMENT_TO_RMS_INDEX. - The -2 is to conform with the range defined in the spec. */ - - -#define ESF_ADJUSTMENT_TO_RMS_INDEX (9-2) - - -#define INTERMEDIATE_FILES_FLAG 0 - -/* Max bit rate is 48000 bits/sec. */ -#define MAX_BITS_PER_FRAME 960 - - -/***************************************************************************/ -/* Type definitions */ -/***************************************************************************/ -typedef struct -{ - Word16 code_bit_count; /* bit count of the current word */ - Word16 current_word; /* current word in the bitstream being processed */ - Word16 *code_word_ptr; /* pointer to the bitstream */ - Word16 number_of_bits_left; /* number of bits left in the current word */ - Word16 next_bit; /* next bit in the current word */ -}Bit_Obj; - -typedef struct -{ - Word16 seed0; - Word16 seed1; - Word16 seed2; - Word16 seed3; -}Rand_Obj; - -/***************************************************************************/ -/* Function definitions */ -/***************************************************************************/ -extern Word16 compute_region_powers(Word16 *mlt_coefs, - Word16 mag_shift, - Word16 *drp_num_bits, - UWord16 *drp_code_bits, - Word16 *absolute_region_power_index, - Word16 number_of_regions); - -void vector_quantize_mlts(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *mlt_coefs, - Word16 *absolute_region_power_index, - Word16 *power_categories, - Word16 *category_balances, - Word16 *p_categorization_control, - Word16 *region_mlt_bit_counts, - UWord32 *region_mlt_bits); - -Word16 vector_huffman(Word16 category, - Word16 power_index, - Word16 *raw_mlt_ptr, - UWord32 *word_ptr); - - -void adjust_abs_region_power_index(Word16 *absolute_region_power_index,Word16 *mlt_coefs,Word16 number_of_regions); - -void bits_to_words(UWord32 *region_mlt_bits,Word16 *region_mlt_bit_counts, - Word16 *drp_num_bits,UWord16 *drp_code_bits,Word16 *out_words, - Word16 categorization_control, Word16 number_of_regions, - Word16 num_categorization_control_bits, Word16 number_of_bits_per_frame); - -void encoder(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 *mlt_coefs, - Word16 mag_shift, - Word16 *out_words); - -void decoder(Bit_Obj *bitobj, - Rand_Obj *randobj, - Word16 number_of_regions, - Word16 *decoder_mlt_coefs, - Word16 *p_mag_shift, - Word16 *p_old_mag_shift, - Word16 *old_decoder_mlt_coefs, - Word16 frame_error_flag); - -Word16 samples_to_rmlt_coefs(const Word16 *new_samples,Word16 *history,Word16 *coefs,Word16 dct_length); -void rmlt_coefs_to_samples(Word16 *coefs, - Word16 *old_samples, - Word16 *out_samples, - Word16 dct_length, - Word16 mag_shift); - -Word16 index_to_array(Word16 index,Word16 *array,Word16 category); -void categorize(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *rms_index, - Word16 *power_categories, - Word16 *category_balances); - -Word16 calc_offset(Word16 *rms_index,Word16 number_of_regions,Word16 available_bits); -void compute_raw_pow_categories(Word16 *power_categories,Word16 *rms_index,Word16 number_of_regions,Word16 offset); -void comp_powercat_and_catbalance(Word16 *power_categories, - Word16 *category_balances, - Word16 *rms_index, - Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 offset); - -void dct_type_iv_a (Word16 *input,Word16 *output,Word16 dct_length); -void dct_type_iv_s(Word16 *input,Word16 *output,Word16 dct_length); -void decode_envelope(Bit_Obj *bitobj, - Word16 number_of_regions, - Word16 *decoder_region_standard_deviation, - Word16 *absolute_region_power_index, - Word16 *p_mag_shift); - -void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, - Rand_Obj *randobj, - Word16 number_of_regions, - Word16 *decoder_region_standard_deviation, - Word16 *dedecoder_power_categories, - Word16 *dedecoder_mlt_coefs); - -void rate_adjust_categories(Word16 categorization_control, - Word16 *decoder_power_categories, - Word16 *decoder_category_balances); - -void get_next_bit(Bit_Obj *bitobj); -Word16 get_rand(Rand_Obj *randobj); - -void test_4_frame_errors(Bit_Obj *bitobj, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *frame_error_flag, - Word16 categorization_control, - Word16 *absolute_region_power_index); - -void error_handling(Word16 number_of_coefs, - Word16 number_of_valid_coefs, - Word16 *frame_error_flag, - Word16 *decoder_mlt_coefs, - Word16 *old_decoder_mlt_coefs, - Word16 *p_mag_shift, - Word16 *p_old_mag_shift); - - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/huff_def.h b/sflphone-common/libs/pjproject/third_party/g7221/common/huff_def.h deleted file mode 100644 index dd10d9a5f60f037e3e4916305c4a9359a08f4536..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/huff_def.h +++ /dev/null @@ -1,53 +0,0 @@ -/*********************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***********************************************************************/ - -#define REGION_POWER_STEPSIZE_DB 3.010299957 -#define ABS_REGION_POWER_LEVELS 32 -#define DIFF_REGION_POWER_LEVELS 24 - -#define DRP_DIFF_MIN -12 -#define DRP_DIFF_MAX 11 - -#define MAX_NUM_BINS 16 -#define MAX_VECTOR_INDICES 625 -#define MAX_VECTOR_DIMENSION 5 - -extern Word16 differential_region_power_bits[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; -extern UWord16 differential_region_power_codes[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; -extern Word16 differential_region_power_decoder_tree[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS-1][2]; -extern Word16 mlt_quant_centroid[NUM_CATEGORIES][MAX_NUM_BINS]; -extern Word16 expected_bits_table[NUM_CATEGORIES]; -extern Word16 mlt_sqvh_bitcount_category_0[196]; -extern UWord16 mlt_sqvh_code_category_0[196]; -extern Word16 mlt_sqvh_bitcount_category_1[100]; -extern UWord16 mlt_sqvh_code_category_1[100]; -extern Word16 mlt_sqvh_bitcount_category_2[49]; -extern UWord16 mlt_sqvh_code_category_2[49]; -extern Word16 mlt_sqvh_bitcount_category_3[625]; -extern UWord16 mlt_sqvh_code_category_3[625]; -extern Word16 mlt_sqvh_bitcount_category_4[256]; -extern UWord16 mlt_sqvh_code_category_4[256]; -extern Word16 mlt_sqvh_bitcount_category_5[243]; -extern UWord16 mlt_sqvh_code_category_5[243]; -extern Word16 mlt_sqvh_bitcount_category_6[32]; -extern UWord16 mlt_sqvh_code_category_6[32]; -extern Word16 *table_of_bitcount_tables[NUM_CATEGORIES-1]; -extern UWord16 *table_of_code_tables[NUM_CATEGORIES-1]; -extern Word16 mlt_decoder_tree_category_0[180][2]; -extern Word16 mlt_decoder_tree_category_1[93][2]; -extern Word16 mlt_decoder_tree_category_2[47][2]; -extern Word16 mlt_decoder_tree_category_3[519][2]; -extern Word16 mlt_decoder_tree_category_4[208][2]; -extern Word16 mlt_decoder_tree_category_5[191][2]; -extern Word16 mlt_decoder_tree_category_6[31][2]; -extern Word16 *table_of_decoder_tables[NUM_CATEGORIES-1]; - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/huff_tab.c b/sflphone-common/libs/pjproject/third_party/g7221/common/huff_tab.c deleted file mode 100644 index 12ff661cc8afd68321224f1d0d731783819089ed..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/huff_tab.c +++ /dev/null @@ -1,528 +0,0 @@ -/*********************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***********************************************************************/ -#include "defs.h" -#include "huff_def.h" - -Word16 differential_region_power_bits[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS] = { -{99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}, -{ 4, 6, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 5, 7, 8, 9,11,11,12,12,12,12}, -{10, 8, 6, 5, 5, 4, 3, 3, 3, 3, 3, 3, 4, 5, 7, 9,11,12,13,15,15,15,16,16}, -{12,10, 8, 6, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 5, 7, 9,11,13,14,14}, -{13,10, 9, 9, 7, 7, 5, 5, 4, 3, 3, 3, 3, 3, 4, 4, 4, 5, 7, 9,11,13,13,13}, -{12,13,10, 8, 6, 6, 5, 5, 4, 4, 3, 3, 3, 3, 3, 4, 5, 5, 6, 7, 9,11,14,14}, -{12,11, 9, 8, 8, 7, 5, 4, 4, 3, 3, 3, 3, 3, 4, 4, 5, 5, 7, 8,10,13,14,14}, -{15,16,15,12,10, 8, 6, 5, 4, 3, 3, 3, 2, 3, 4, 5, 5, 7, 9,11,13,16,16,16}, -{14,14,11,10, 9, 7, 7, 5, 5, 4, 3, 3, 2, 3, 3, 4, 5, 7, 9, 9,12,14,15,15}, -{ 9, 9, 9, 8, 7, 6, 5, 4, 3, 3, 3, 3, 3, 3, 4, 5, 6, 7, 8,10,11,12,13,13}, -{14,12,10, 8, 6, 6, 5, 4, 3, 3, 3, 3, 3, 3, 4, 5, 6, 8, 8, 9,11,14,14,14}, -{13,10, 9, 8, 6, 6, 5, 4, 4, 4, 3, 3, 2, 3, 4, 5, 6, 8, 9, 9,11,12,14,14}, -{16,13,12,11, 9, 6, 5, 5, 4, 4, 4, 3, 2, 3, 3, 4, 5, 7, 8,10,14,16,16,16}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}, -{13,14,14,14,10, 8, 7, 7, 5, 4, 3, 3, 2, 3, 3, 4, 5, 5, 7, 9,11,14,14,14}}; - -UWord16 differential_region_power_codes[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS] = { -{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -{ 8,38,18,10, 7, 6, 3, 2, 0, 1, 7, 6, 5, 4,11,78,158,318,1278,1279,2552,2553,2554,2555}, -{36, 8, 3, 5, 0, 1, 7, 6, 4, 3, 2, 5, 3, 4, 5,19,74,150,302,1213,1214,1215,2424,2425}, -{2582,644,160,41, 5,11, 7, 5, 4, 1, 0, 6, 4, 7, 3, 6, 4,21,81,323,1290,5167,10332,10333}, -{2940,366,181,180,47,46,27,10, 8, 5, 1, 0, 3, 7, 4, 9,12,26,44,182,734,2941,2942,2943}, -{3982,7967,994,249,63,26,19,18,14, 8, 6, 1, 0, 2, 5, 7,12,30,27,125,496,1990,15932,15933}, -{3254,1626,407,206,202,100,30,14, 3, 5, 3, 0, 2, 4, 2,13,24,31,102,207,812,6511,13020,13021}, -{1110,2216,1111,139,35, 9, 3,20,11, 4, 2, 1, 3, 3, 1, 0,21, 5,16,68,276,2217,2218,2219}, -{1013,1014,127,62,29, 6, 4,16, 0, 1, 3, 2, 3, 1, 5, 9,17, 5,28,30,252,1015,2024,2025}, -{381,380,372,191,94,44,16,10, 7, 3, 1, 0, 2, 6, 9,17,45,92,187,746,1494,2991,5980,5981}, -{3036,758,188,45,43,10, 4, 3, 6, 4, 2, 0, 3, 7,11,20,42,44,46,95,378,3037,3038,3039}, -{751,92,45,20,26, 4,12, 7, 4, 0, 4, 1, 3, 5, 5, 3,27,21,44,47,186,374,1500,1501}, -{45572U,5697,2849,1425,357,45,23, 6,10, 7, 2, 2, 3, 0, 4, 6, 7,88,179,713,11392,45573U,45574U,45575U}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}, -{2511,5016,5018,5017,312,79,38,36,30,14, 6, 0, 2, 1, 3, 5, 8,31,37,157,626,5019,5020,5021}}; - -Word16 differential_region_power_decoder_tree[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS-1][2] = { -{{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0},{ 0, 0}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{ 7, 8},{ 9, 10},{ 11,-12},{-11,-10},{ -8, -9},{ -7, -6},{-13, 12},{ -5, -4},{ 0, 13},{ -3,-14},{ -2, 14},{ -1, 15},{-15, 16},{-16, 17},{-17, 18},{ 19, 20},{ 21, 22},{-18,-19},{-20,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{ 7, 8},{-10, -9},{ -8,-11},{ -7, -6},{ 9, -5},{ 10,-12},{ -4, 11},{-13, -3},{ 12, -2},{ 13,-14},{ -1, 14},{ 15,-15},{ 0, 16},{-16, 17},{-17, 18},{-18, 19},{ 20, 21},{ 22,-19},{-20,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{ 7, 8},{ 9, 10},{-12, 11},{-11,-13},{-10, -9},{ 12,-14},{ -8, -7},{-15, -6},{ 13, -5},{-16, -4},{ 14,-17},{ 15, -3},{ 16,-18},{ -2, 17},{ 18,-19},{ -1, 19},{-20, 20},{ 0, 21},{ 22,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{-11,-10},{ 7,-12},{ 8, -9},{ 9,-13},{-14, 10},{ -8,-15},{-16, 11},{ -7, 12},{-17, -6},{ 13, 14},{-18, 15},{ -5, -4},{ 16, 17},{ -3, -2},{-19, 18},{ -1, 19},{-20, 20},{ 21, 22},{ 0,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{-12,-11},{-13, 7},{ 8,-14},{-10, 9},{ 10,-15},{ -9, 11},{ -8, 12},{-16, 13},{ -7, -6},{-17, 14},{ -5,-18},{ 15, -4},{ 16,-19},{ 17, -3},{-20, 18},{ -2, 19},{-21, 20},{ 0, 21},{ 22, -1},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{-11, 7},{-12,-10},{-13, -9},{ 8, 9},{-14, -8},{ 10,-15},{ -7, 11},{-16, 12},{ -6,-17},{ 13, 14},{ -5, 15},{-18, 16},{ -4, 17},{ -3,-19},{ 18, -2},{-20, 19},{ -1, 20},{ 0, 21},{ 22,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5,-12},{ 6,-11},{-10,-13},{ -9, 7},{ 8,-14},{ 9, -8},{-15, 10},{ -7,-16},{ 11, -6},{ 12,-17},{ 13, -5},{-18, 14},{ 15, -4},{-19, 16},{ 17, -3},{-20, 18},{ 19, 20},{ 21, 22},{ 0, -2},{ -1,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5,-12},{ 6,-13},{-11,-10},{ 7,-14},{ 8, -9},{ 9,-15},{ -8, 10},{ -7,-16},{ 11, 12},{ -6,-17},{ -5, 13},{ 14, 15},{-18, -4},{-19, 16},{ -3, 17},{ 18, -2},{-20, 19},{ 20, 21},{ 22, 0},{ -1,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{-11,-10},{-12, -9},{ 7, 8},{-13, -8},{ 9,-14},{ -7, 10},{ -6,-15},{ 11, 12},{ -5,-16},{ 13, 14},{-17, 15},{ -4, 16},{ 17,-18},{ 18, -3},{ -2, 19},{ -1, 0},{-19, 20},{-20, 21},{ 22,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5, 6},{-11, 7},{-10,-12},{ -9, 8},{ -8,-13},{ 9, -7},{ 10,-14},{ -6, 11},{-15, 12},{ -5, 13},{-16, -4},{ 14, 15},{-17, -3},{-18, 16},{ 17,-19},{ -2, 18},{-20, 19},{ -1, 20},{ 21, 22},{ 0,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5,-12},{ 6,-11},{ 7, 8},{-10,-13},{ -9, 9},{ -8,-14},{ 10, -7},{ 11,-15},{ -6, 12},{ -5, 13},{ -4,-16},{ 14, 15},{ -3,-17},{ 16, 17},{-18, -2},{ 18,-19},{ -1, 19},{-20, 20},{-21, 21},{ 22, 0},{-22,-23}}, -{{ 1, 2},{ 3, 4},{ 5,-12},{-13, 6},{-11, 7},{-14, 8},{-10, 9},{-15, -9},{ -8, 10},{ -7,-16},{ 11, -6},{ 12, -5},{-17, 13},{ 14,-18},{ 15, -4},{ 16,-19},{ 17, -3},{ 18, -2},{ 19, -1},{-20, 20},{ 21, 22},{ 0,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}, -{{ 1, 2},{ 3, 4},{-12, 5},{-11,-13},{ 6,-14},{-10, 7},{ 8,-15},{ -9, 9},{-16, 10},{ -8,-17},{ 11, 12},{ -7,-18},{ -6, 13},{ 14, -5},{ 15,-19},{ -4, 16},{-20, 17},{ 18, 19},{ 20, 21},{ 22, 0},{ -1, -3},{ -2,-21},{-22,-23}}}; - -Word16 mlt_quant_centroid[NUM_CATEGORIES][MAX_NUM_BINS] = { -{ 0, 1606, 3119, 4586, 6049, 7502, 8941,10406,11851,13292,14736,16146,17566,19351, 0, 0}, -{ 0, 2229, 4341, 6401, 8471,10531,12583,14588,16673,18924, 0, 0, 0, 0, 0, 0}, -{ 0, 3055, 5998, 8929,11806,14680,17680, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -{ 0, 4121, 8192,12259,16322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -{ 0, 5413,11071,16315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -{ 0, 6785,14300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -{ 0, 8044, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, -{ 0, 8019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; - -Word16 expected_bits_table[NUM_CATEGORIES] = {52, 47, 43, 37, 29, 22, 16, 0}; - - -Word16 mlt_sqvh_bitcount_category_0[196] = { - 1, 4, 6, 6, 7, 7, 8, 8, 8, 9, 9,10,11,11, 4, 5, - 6, 7, 7, 8, 8, 9, 9, 9, 9,10,11,11, 5, 6, 7, 8, - 8, 9, 9, 9, 9,10,10,10,11,12, 6, 7, 8, 9, 9, 9, - 9,10,10,10,10,11,12,13, 7, 7, 8, 9, 9, 9,10,10, -10,10,11,11,12,13, 8, 8, 9, 9, 9,10,10,10,10,11, -11,12,13,14, 8, 8, 9, 9,10,10,11,11,11,12,12,13, -13,15, 8, 8, 9, 9,10,10,11,11,11,12,12,13,14,15, - 9, 9, 9,10,10,10,11,11,12,13,12,14,15,16, 9, 9, -10,10,10,10,11,12,12,14,14,16,16,16, 9, 9,10,10, -11,11,12,13,13,14,14,15,15,16,10,10,10,11,11,12, -12,13,15,15,16,14,15,15,11,11,11,12,13,13,13,15, -16,16,16,16,14,15,11,11,12,13,13,14,15,16,16,16, -16,16,16,14}; -UWord16 mlt_sqvh_code_category_0[196] = { - 1, 2, 1, 24, 14, 51, 9, 68, 110, 26, 218, 54, 154, 761, 3, 10, - 22, 8, 58, 22, 71, 16, 30, 50, 213, 75, 94, 632, 15, 18, 52, 23, - 107, 5, 54, 63, 239, 46, 276, 271, 851, 252, 28, 10, 12, 1, 22, 133, - 191, 55, 105, 278, 317, 554, 310, 276, 32, 50, 94, 20, 187, 219, 13, 268, - 473, 445, 145, 849, 1277, 623, 1, 14, 0, 55, 238, 121, 120, 269, 318, 530, - 639, 1117, 509, 556, 24, 78, 51, 153, 62, 308, 16, 25, 68, 1058, 428, 277, - 2233, 1114, 92, 108, 141, 223, 270, 381, 24, 212, 760, 35, 1063, 279, 1717, 3439, - 7, 21, 152, 73, 309, 310, 95, 944, 1890, 2232, 1891, 5107,10213, 4981, 61, 62, - 9, 79, 474, 475, 848, 1059, 1056, 1716, 139, 4978, 4983, 4983, 140, 186, 76, 444, - 144, 633, 1057, 838, 2237, 4472, 4473,10212,10212, 4983, 74, 78, 311, 213, 850, 1062, - 1119, 508, 276, 277, 4982, 4473,10212,10212, 208, 70, 555, 418, 68, 510, 2552, 1115, - 4980, 4979, 4982, 4982, 4473,10212, 215, 71, 253, 511, 839, 1718, 2488, 6876, 6877, 4979, - 4979, 4982, 4982, 4473}; -Word16 mlt_sqvh_bitcount_category_1[100] = { - 1, 4, 5, 6, 7, 8, 8, 9,10,10, 4, 5, 6, 7, 7, 8, - 8, 9, 9,11, 5, 5, 6, 7, 8, 8, 9, 9,10,11, 6, 6, - 7, 8, 8, 9, 9,10,11,12, 7, 7, 8, 8, 9, 9,10,11, -11,13, 8, 8, 8, 9, 9,10,10,11,12,14, 8, 8, 8, 9, -10,11,11,12,13,15, 9, 9, 9,10,11,12,12,14,14,14, - 9, 9, 9,10,11,12,14,16,14,14,10,10,11,12,13,14, -16,16,16,14}; -UWord16 mlt_sqvh_code_category_1[100] = { - 1, 2, 11, 27, 31, 9, 120, 31, 275, 310, 1, 0, 12, 5, 33, 54, - 102, 111, 246, 448, 10, 14, 31, 39, 59, 100, 114, 202, 485, 969, 24, 26, - 36, 52, 103, 30, 120, 242, 69, 1244, 35, 32, 14, 61, 113, 117, 233, 486, - 487, 2491, 13, 12, 69, 110, 149, 35, 495, 449, 1978, 7751, 76, 75, 122, 136, - 213, 68, 623, 930, 3959, 9961, 115, 16, 107, 225, 424, 850, 1936, 7916, 4981, 4981, - 148, 154, 243, 407, 988, 851, 7750,19920, 7916, 4981, 406, 274, 464, 931, 3874, 7917, -19921,19920,19920, 7916}; -Word16 mlt_sqvh_bitcount_category_2[49] = { - 1, 4, 5, 7, 8, 9,10, 3, 4, 5, 7, 8, 9,10, 5, 5, - 6, 7, 8,10,10, 7, 6, 7, 8, 9,10,12, 8, 8, 8, 9, -10,12,14, 8, 9, 9,10,11,15,16, 9,10,11,12,13,16, -15}; -UWord16 mlt_sqvh_code_category_2[49] = { - 1, 0, 10, 11, 28, 62, 363, 3, 2, 9, 8, 24, 53, 352, 7, 8, - 13, 25, 89, 74, 355, 10, 23, 24, 29, 55, 354, 1449, 25, 19, 30, 52, - 108, 438, 5793, 91, 36, 63, 353, 725,11584,23170, 180, 75, 218, 439, 2897,23171, -11584}; -Word16 mlt_sqvh_bitcount_category_3[625] = { - 2, 4, 6, 8,10, 5, 5, 6, 8,10, 7, 8, 8,10,12, 9, - 9,10,12,15,10,11,13,16,16, 5, 6, 8,10,11, 5, 6, - 8,10,12, 7, 7, 8,10,13, 9, 9,10,12,15,12,11,13, -16,16, 7, 9,10,12,15, 7, 8,10,12,13, 9, 9,11,13, -16,11,11,12,14,16,12,12,14,16,14, 9,11,12,16,16, - 9,10,13,15,16,10,11,12,16,16,13,13,16,16,16,16, -16,15,16,16,11,13,16,16,15,11,13,15,16,16,13,13, -16,16,16,14,16,16,16,16,16,16,16,16,16, 4, 6, 8, -10,13, 6, 6, 8,10,13, 9, 8,10,12,16,10,10,11,15, -16,13,12,14,16,16, 5, 6, 8,11,13, 6, 6, 8,10,13, - 8, 8, 9,11,14,10,10,12,12,16,13,12,13,15,16, 7, - 8, 9,12,16, 7, 8,10,12,14, 9, 9,10,13,16,11,10, -12,15,16,13,13,16,16,15, 9,11,13,16,16, 9,10,12, -15,16,10,11,13,16,16,13,12,16,16,16,16,16,16,16, -16,11,13,16,16,16,11,13,16,16,16,12,13,15,16,16, -16,16,16,16,16,16,16,16,16,16, 6, 8,11,13,16, 8, - 8,10,12,16,11,10,11,13,16,12,13,13,15,16,16,16, -14,16,15, 6, 8,10,13,16, 8, 8,10,12,16,10,10,11, -13,16,13,12,13,16,16,14,14,14,16,16, 8, 9,11,13, -16, 8, 9,11,16,14,10,10,12,15,16,12,12,13,16,16, -15,16,16,16,16,10,12,15,16,16,10,12,12,14,16,12, -12,13,16,16,14,15,16,16,16,16,16,16,16,16,12,15, -15,16,16,13,13,16,16,14,14,16,16,16,16,16,16,16, -16,16,14,15,16,16,16, 8,10,13,15,16,10,11,13,16, -16,13,13,14,16,16,16,16,16,16,16,16,16,16,16,16, - 8,10,11,15,16, 9,10,12,16,16,12,12,15,16,16,16, -14,16,16,16,16,16,16,16,16, 9,11,14,16,16,10,11, -13,16,16,14,13,14,16,16,16,15,15,16,16,16,16,16, -16,16,11,13,16,16,16,11,13,15,16,16,13,16,16,16, -16,16,16,16,16,16,16,16,16,16,16,15,16,16,16,16, -14,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, -16,16,16,16, 9,13,16,16,16,11,13,16,16,16,14,15, -16,16,16,15,16,16,16,16,16,16,16,16,16, 9,13,15, -15,16,12,13,14,16,16,16,15,16,16,16,16,16,16,16, -16,16,16,16,16,16,11,13,15,16,16,12,14,16,16,16, -16,16,16,16,16,16,16,16,16,16,16,15,15,16,16,16, -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, -16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15, -16,16,13,16,16,16,16,16,16,16,16,16,16,16,16,16, -16}; -UWord16 mlt_sqvh_code_category_3[625] = { - 3, 8, 46, 145, 228, 4, 8, 47, 28, 455, 89, 2, 180, 5, 1335, 250, - 12, 644, 1311, 139, 729, 251, 870, 2172, 2211, 5, 23, 112, 334, 1469, 21, 3, - 5, 111, 2014, 88, 79, 152, 124, 2685, 297, 48, 110, 1310, 149, 501, 1231, 153, - 2267, 2569, 57, 13, 653, 2587, 143, 75, 124, 118, 2611, 5242, 61, 50, 253, 3633, - 2216, 476, 39, 57, 1926, 2236, 2586, 1329, 1920, 2566, 1926, 296, 233, 2590, 2240, 2217, - 253, 613, 867, 144, 318, 614, 252, 2589, 2242, 2218, 872, 866, 2187, 2296, 2155, 2568, - 2227, 150, 2567, 2296, 199, 2686, 2160, 2290,19145, 232, 2680, 128, 2192, 2212, 2684, 793, - 2281, 2223, 2242, 1934, 2165, 2146, 2291, 2296, 2222, 2189, 2187, 2296, 2296, 6, 4, 82, - 725, 3632, 15, 21, 56, 599, 148, 3, 162, 42, 411, 2301, 735, 654, 930, 137, - 2586, 869, 1334, 1931, 2300, 2213, 9, 22, 146, 1290, 5240, 5, 12, 53, 630, 875, - 80, 9, 8, 86, 2002, 210, 117, 56, 2019, 2162, 146, 397, 868, 131, 2151, 77, - 160, 365, 2610, 2252, 59, 54, 41, 2591, 1928, 226, 14, 121, 5792, 2295, 1197, 728, - 408, 130, 2157, 3635, 155, 2573, 2587, 130, 314, 64, 144, 2173, 2176, 115, 30, 409, - 153, 2590, 631, 26, 4787, 2221, 2174, 2683, 1863, 2572, 319, 2150, 2177, 2194, 2571, 2257, - 319, 65, 145, 2251, 2156, 2161, 909, 864, 2193, 2197, 2246, 2588, 5797, 156, 2258, 2221, - 2158, 2199, 2214, 2152, 319, 2188, 2264, 2572, 319, 319, 30, 117, 219, 865, 2263, 147, - 127, 239, 410, 2247, 27, 324, 1468, 2681, 2180, 1328, 5241, 147, 142, 2237, 2241, 2245, - 1921, 2262, 142, 41, 11, 505, 2682, 2591, 0, 26, 229, 2015, 2577, 464, 98, 87, - 5243, 2166, 149, 2016, 5244, 2190, 2198, 9573,11598,11599, 2235, 2190, 144, 298, 1004, 5245, - 2277, 156, 104, 254, 2560, 1922, 612, 325, 2017, 129, 2588, 2608, 1330, 871, 2144, 2145, - 132, 2147, 2148, 2149, 2144, 119, 1331, 133, 2153, 2154, 211, 58, 2609, 1923, 2159, 510, - 163, 5246, 2163, 2164, 1924, 134, 2167, 2168, 2168, 2169, 2170, 2171, 2168, 2168, 1332, 135, - 136, 2175, 2153, 150, 873, 2178, 2179, 1923, 1925, 2181, 2182, 2183, 2163, 2184, 2185, 2186, - 2168, 2168, 1924, 134, 2167, 2168, 2168, 58, 326, 2687, 138, 2191, 31, 66, 874, 2195, - 2196, 151, 152, 1927, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2205, - 55, 103, 1230, 140, 2215, 118, 15, 1333, 2219, 2220, 2018, 511, 141, 2224, 2225, 2226, - 1929, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2229, 366, 1005, 1930, 2238, 2239, 12, 1006, - 5247, 2243, 2244, 1932, 3634, 1933, 2248, 2249, 2250, 145, 146, 2253, 2253, 2254, 2255, 2256, - 2253, 2253, 1291, 5793, 2259, 2260, 2261, 477, 5794, 147, 2265, 2266, 5795, 2268, 2269, 2270, - 2270, 2271, 2272, 2273, 2274, 2274, 2275, 2276, 2273, 2274, 2274, 148, 2278, 2279, 2280, 2260, - 1935, 2282, 2283, 2284, 2265, 2285, 2286, 2287, 2270, 2270, 2288, 2289, 2273, 2274, 2274, 2271, - 2272, 2273, 2274, 2274, 233, 5796, 2292, 2293, 2294, 1292, 3724, 2297, 2298, 2299, 2000, 151, - 2302, 2303, 2200, 152, 2561, 2562, 2563, 2205, 2564, 2565, 2204, 2205, 2205, 363, 154, 154, - 155, 2570, 59, 3725, 2001, 2574, 2575, 2576, 157, 2578, 2579, 2224, 2580, 2581, 2582, 2583, - 2229, 2584, 2585, 2228, 2229, 2229, 654, 5798, 158, 2589, 2238, 2392, 2003, 2592, 2593, 2243, - 2594, 2595, 2596, 2597, 2248, 2598, 2599, 2600, 2253, 2253, 2250, 145, 146, 2253, 2253, 2601, - 2602, 2603, 2604, 2260, 2605, 2606, 2607, 6336, 2265, 6337, 6338, 6339, 2270, 2270, 6340, 6341, - 2273, 2274, 2274, 2271, 2272, 2273, 2274, 2274, 6342, 6343, 2259, 2260, 2260,38288U,38289U, 147, - 2265, 2265, 5795, 2268, 2269, 2270, 2270, 2271, 2272, 2273, 2274, 2274, 2271, 2272, 2273, 2274, - 2274}; -Word16 mlt_sqvh_bitcount_category_4[256] = { - 2, 4, 7,10, 4, 5, 7,10, 7, 8,10,14,11,11,15,15, - 4, 5, 9,12, 5, 5, 8,12, 8, 7,10,15,11,11,15,15, - 7, 9,12,15, 8, 8,12,15,10,10,13,15,14,14,15,13, -11,13,15,15,11,13,15,15,14,15,15,13,15,15,13,13, - 4, 5, 9,13, 5, 6, 9,13, 9, 9,11,15,14,13,15,15, - 4, 6, 9,12, 5, 6, 9,13, 9, 8,11,15,13,12,15,15, - 7, 9,12,15, 7, 8,11,15,10,10,14,15,14,15,15,14, -10,12,15,15,11,13,15,15,15,15,15,14,15,15,14,14, - 6, 9,13,14, 8, 9,12,15,12,12,15,15,15,15,15,15, - 7, 9,13,15, 8, 9,12,15,11,12,15,15,15,15,15,15, - 9,11,15,15, 9,11,15,15,14,14,15,15,15,15,15,15, -14,15,15,15,14,15,15,15,15,15,15,15,14,14,15,15, - 9,12,15,15,12,13,15,15,15,15,15,15,15,15,15,15, -10,12,15,15,12,14,15,15,15,15,15,15,15,15,15,15, -14,15,15,15,15,15,15,15,15,15,15,15,14,14,15,15, -15,15,15,15,15,15,15,15,14,14,15,15,14,14,15,15}; -UWord16 mlt_sqvh_code_category_4[256] = { - 1, 2, 4, 572, 10, 0, 69, 712, 91, 10, 46, 9182, 1426, 1430,30172,30194, - 9, 28, 22, 2258, 16, 25, 142, 2179, 15, 111, 719, 1521, 1131, 1437, 1520,30196, - 88, 283, 3803,30193, 13, 236, 2856,30166, 545, 951, 5709, 1522, 3241, 9180,30179, 5709, - 1088, 4356,30410,30175, 1146, 377,30162,30163, 8715,30176,30165, 5709,30197,30184, 5709, 5709, - 1, 23, 28, 5710, 26, 14, 29, 7538, 102, 103, 1429, 1524, 3237, 7060,30401,30201, - 15, 13, 470, 3768, 24, 15, 281, 5747, 24, 181, 1128,30206, 5711, 3531,30156,30158, - 116, 100, 2260,30187, 119, 234, 1764,30171, 716, 883, 9183,30164, 3236, 1528,30180, 9183, - 885, 2870, 1532,30160, 1431, 5708,30192,30205,30402,30168,30173, 9183,30157,30161, 9183, 9183, - 54, 25, 1621,15211, 180, 287, 2261,30198, 808, 811,30411,30413,30414,22986,22987,30411, - 24, 273, 376,30159, 137, 280, 2871, 1523, 1768, 2259, 1525,30167, 1526,30169,30170, 1525, - 443, 1434, 1527,30174, 474, 1769,30177,30178, 3238, 3239,30181,30181,30182,30183,30181,30181, - 3240,30185,30186, 1527, 9181,30188,30189,30177,30190,30191,30181,30181, 3238, 3239,30181,30181, - 440, 2857, 1529,30195, 2294, 7061, 1530,30199,30200, 1531,30202,30411,30203,30204,30411,30411, - 203, 2872,30207,30400, 189,11492,30403,30404,30405,30406,30407, 1525,30408,30409, 1525, 1525, - 8714, 1533,30412, 1527, 1534, 1535,30415,30177,30416,30417,30181,30181, 3238, 3239,30181,30181, -30418,30419, 1527, 1527,30420,30421,30177,30177, 3238, 3239,30181,30181, 3238, 3239,30181,30181}; -Word16 mlt_sqvh_bitcount_category_5[243] = { - 2, 4, 8, 4, 5, 9, 9,10,14, 4, 6,11, 5, 6,12,10, -11,15, 9,11,15,10,13,15,14,15, 6, 4, 6,12, 6, 7, -12,12,12,15, 5, 7,13, 6, 7,13,12,13,15,10,12,15, -11,13,15,15,15, 7, 8,13,15,11,12,15,15,15, 7,10, -13,15,12,15,15,15,15, 7,15,15, 7,15,15, 7, 6, 7, - 7, 4, 5,11, 5, 7,12,11,12,15, 6, 7,13, 7, 8,14, -12,14,15,11,13,15,12,13,15,15,15, 8, 5, 6,13, 7, - 8,15,12,14,15, 6, 8,14, 7, 8,15,14,15,15,12,12, -15,12,13,15,15,15, 8, 9,13,15,12,13,15,15,15, 8, -11,13,15,13,13,15,15,15, 8,14,15, 8,15,15, 8, 7, - 8, 8, 8,10,15,11,12,15,15,15, 7,10,12,15,12,13, -15,15,15, 8,14,15, 7,15,15, 8, 7, 8, 8, 8,12,15, -12,13,15,15,15, 8,11,13,15,13,15,15,15,15, 8,15, -15, 8,15,15, 8, 7, 8, 8,14,15, 6,15,15, 8, 7, 8, - 8,15,15, 8,15,15, 8, 7, 8, 8, 6, 8, 8, 7, 8, 8, - 7, 8, 8}; -UWord16 mlt_sqvh_code_category_5[243] = { - 0, 5, 220, 10, 16, 443, 390, 391,14333, 11, 26, 1566, 26, 54, 3135, 508, - 1558,28581, 255, 1782,28599, 885, 6208,28578,14335,28579, 54, 9, 35, 3129, 27, 68, - 3537, 1562, 3568,28610, 25, 62, 4078, 58, 118, 7763, 3107, 7758,28563, 778, 3131,28598, - 780, 7123,28630,28593,28586, 118, 243, 6210,28614, 1018, 3567,28601,28611,28570, 68, 388, - 6256,28619, 1559,28562,28606,28565,28591, 118,28594,28571, 62,28618,28590, 118, 58, 118, - 118, 4, 28, 1781, 31, 60, 3134, 1938, 3882,28574, 25, 96, 7757, 49, 126,14244, - 3883,14334,28613, 1769, 4077,28602, 3106, 7756,28582,28621,28566, 126, 14, 61, 4079, 61, - 138,28491, 3536, 8153,28573, 49, 96,12442, 119, 240,28490,12443,28560,28561, 3111, 3580, -28564, 3130, 7759,28567,28568,28569, 240, 444, 6209,28572, 3569, 6211,28575,28576,28577, 138, - 778, 7760,28580, 7761, 7762,28583,28584,28585, 240,14319,28587, 96,28588,28589, 240, 119, - 240, 240, 139, 968,28592, 1554, 3581,28595,28596,28597, 60, 971, 3560,28600, 3582, 7132, -28603,28604,28605, 126,14332,28607, 96,28608,28609, 126, 49, 126, 126, 241, 1558,28612, - 1563, 6257,28615,28616,28617, 138, 1559, 7133,28620, 6220,28622,28623,28624,28625, 240,28626, -28627, 96,28628,28629, 240, 119, 240, 240, 8152,28631, 61,28632,28633, 138, 61, 138, - 138,28634,28635, 96,28636,28637, 240, 119, 240, 240, 49, 96, 96, 119, 240, 240, - 119, 240, 240}; -Word16 mlt_sqvh_bitcount_category_6[32] = { - 1, 4, 4, 6, 4, 6, 6, 8, 4, 6, 6, 8, 6, 9, 8,10, - 4, 6, 7, 8, 6, 9, 8,11, 6, 9, 8,10, 8,10, 9,11}; -UWord16 mlt_sqvh_code_category_6[32] = { - 1, 2, 4, 2, 5, 29, 24, 101, 3, 31, 28, 105, 3, 5, 102, 424, - 1, 30, 0, 107, 27, 200, 103, 806, 1, 4, 104, 402, 3, 425, 213, 807}; - -Word16 *table_of_bitcount_tables[NUM_CATEGORIES-1] = { -mlt_sqvh_bitcount_category_0, -mlt_sqvh_bitcount_category_1, -mlt_sqvh_bitcount_category_2, -mlt_sqvh_bitcount_category_3, -mlt_sqvh_bitcount_category_4, -mlt_sqvh_bitcount_category_5, -mlt_sqvh_bitcount_category_6 -}; - - -UWord16 *table_of_code_tables[NUM_CATEGORIES-1] = { -(UWord16 *)mlt_sqvh_code_category_0, -(UWord16 *)mlt_sqvh_code_category_1, -(UWord16 *)mlt_sqvh_code_category_2, -(UWord16 *)mlt_sqvh_code_category_3, -(UWord16 *)mlt_sqvh_code_category_4, -(UWord16 *)mlt_sqvh_code_category_5, -(UWord16 *)mlt_sqvh_code_category_6 -}; - -Word16 mlt_decoder_tree_category_0[180][2] = { -{ 1, 0},{ 2, 3},{ 4, 5},{ 6, 7},{ 8, 9},{ -1, -14},{ 10, 11},{ 12, 13}, -{ 14, 15},{ 16, 17},{ 18, 19},{ -15, 20},{ 21, 22},{ 23, -28},{ 24, -2},{ 25, 26}, -{ 27, 28},{ 29, 30},{ 31, 32},{ -29, 33},{ -16, 34},{ -3, 35},{ 36, 37},{ -42, 38}, -{ 39, 40},{ 41, 42},{ 43, 44},{ -17, 45},{ -43, 46},{ 47, 48},{ -4, 49},{ -56, 50}, -{ 51, 52},{ 53, 54},{ 55, 56},{ -57, -5},{ -30, 57},{ 58, 59},{ -18, 60},{ 61, -70}, -{ 62, 63},{ 64, -6},{ 65, 66},{ -44, 67},{ -71, 68},{ 69, 70},{ -19, -31},{ -84, 71}, -{ 72, 73},{ 74, 75},{ 76, 77},{ -7, 78},{ 79, -20},{ 80, 81},{ -85, 82},{ -98, 83}, -{ -58, 84},{ 85, -32},{ -99, 86},{ -8, 87},{ 88, 89},{ -72, -45},{ 90, -33},{ 91,-112}, -{ -21, 92},{ -59,-113},{ -46, 93},{ -9, 94},{ -22, 95},{ 96, 97},{ 98, 99},{ -23, -86}, -{ 100, 101},{ -34, -73},{ 102,-126},{-127, -35},{ 103, -47},{ 104, 105},{ 106, 107},{-140,-100}, -{-114, -87},{ 108, 109},{ 110, 111},{-141, -60},{ 112, -48},{ 113, -24},{ -10, -61},{ 114,-101}, -{ 115, 116},{ -74, -36},{ 117,-128},{ 118, -62},{ 119, 120},{ -37, 121},{ -11, -49},{ -88, 122}, -{ 123,-115},{-154, -25},{-142, 124},{-155,-129},{ 125, -50},{ 126, 127},{ -76, -75},{ 128, 129}, -{ -63, -77},{-102, -39},{ -38, 130},{ -51, 131},{ -89,-116},{-117,-156},{ 132, -52},{ -78, 133}, -{ 134,-103},{ 135, 136},{-143, -65},{ 137, -64},{-130,-131},{ -90, 138},{-104, -91},{ -92, 139}, -{-169,-183},{ -26,-118},{ 140, 141},{-144, -66},{ -12, 142},{-168, 143},{-105,-157},{ 144,-182}, -{ 145, 146},{ -79, 147},{ -53,-170},{ 148, 149},{ -27,-145},{ 150, -80},{-106, -13},{-132, -67}, -{-158, -40},{-119, 151},{ 152,-107},{ 153, 154},{ -41,-184},{ 155, 156},{ -54, 157},{-171, 158}, -{ -94, 159},{-134,-146},{ -93,-133},{-159,-108},{ 160, -81},{ 161,-160},{ 162, -68},{-120,-122}, -{-172, 163},{ -55, -95},{ 164,-109},{-161, -82},{-173,-185},{ 165, -69},{-147,-186},{ 166, 167}, -{-121, -96},{ 168,-148},{-174, 169},{ 170,-136},{ -83, 171},{ 172, 173},{-135,-110},{-187, 174}, -{-149,-150},{ 175,-123},{-162,-163},{ -97,-175},{-188, 176},{ 177, 178},{ 179,-111},{-151,-124}, -{-137,-177},{-176,-125},{-164,-138},{-189,-190},}; -Word16 mlt_decoder_tree_category_1[93][2] = { -{ 1, 0},{ 2, 3},{ 4, 5},{ 6, 7},{ 8, -10},{ -1, 9},{ 10, 11},{ 12, 13}, -{ -11, 14},{ 15, 16},{ 17, 18},{ -20, -2},{ 19, 20},{ -21, 21},{ 22, 23},{ -12, 24}, -{ 25, 26},{ 27, 28},{ 29, 30},{ -30, 31},{ -31, -3},{ 32, -22},{ 33, -13},{ 34, 35}, -{ 36, 37},{ 38, 39},{ 40, -4},{ -41, -14},{ 41, -40},{ -32, 42},{ 43, -23},{ 44, 45}, -{ 46, 47},{ 48, -5},{ -51, -50},{ -42, 49},{ -33, 50},{ -15, 51},{ 52, 53},{ 54, -24}, -{ 55, -43},{ 56, -52},{ 57, -61},{ -60, 58},{ -25, 59},{ -16, -34},{ -6, 60},{ -62, 61}, -{ -71, 62},{ -35, -7},{ 63, -72},{ -53, -17},{ 64, -44},{ -26, -70},{ 65, -45},{ -36, 66}, -{ -63, 67},{ -80, -54},{ -81, 68},{ -27, 69},{ 70, -82},{ -18, 71},{ 72, -55},{ 73, -64}, -{ 74, -73},{ 75, -46},{ -37, 76},{ -91, -8},{ -9, 77},{ -90, -83},{ 78, -28},{ 79, -56}, -{ -65, -38},{ -74, 80},{ -19, -57},{ -92, 81},{ -47, -48},{ 82, -66},{ 83, -29},{ -84, 84}, -{ -75, -85},{ -67, -93},{ -39, 85},{ -76, 86},{ -58, 87},{ 88, -49},{ -94, 89},{ 90, -68}, -{ 91, -78},{ -86, -59},{ -77, -95},{ 92, -69},{ -87, -96},}; -Word16 mlt_decoder_tree_category_2[47][2] = { -{ 1, 0},{ 2, 3},{ 4, 5},{ 6, -7},{ -1, 7},{ -8, 8},{ 9, 10},{ 11, 12}, -{ 13, -14},{ -15, -9},{ -2, 14},{ 15, 16},{ 17, 18},{ 19, -16},{ 20, -22},{ -10, 21}, -{ -21, -3},{ 22, 23},{ 24, 25},{ -23, -17},{ 26, 27},{ 28, -29},{ -11, -28},{ 29, 30}, -{ -4, -24},{ -30, 31},{ 32, -18},{ 33, -35},{ -36, 34},{ -31, -12},{ 35, -25},{ -5, -37}, -{ 36, 37},{ -42, 38},{ -19, -43},{ -32, 39},{ -13, -38},{ -26, -20},{ 40, -6},{ -44, 41}, -{ 42, -39},{ -33, -45},{ 43, -27},{ 44, -46},{ 45, -34},{ -40, 46},{ -41, -47},}; -Word16 mlt_decoder_tree_category_3[519][2] = { -{ 1, 2},{ 3, 4},{ 5, 0},{ 6, 7},{ 8, 9},{ 10, 11},{ 12, 13},{ 14, 15}, -{ 16, 17},{-125, 18},{ -1, 19},{ 20, 21},{ 22, 23},{ 24, 25},{ -5, -25},{ 26, 27}, -{ -6,-150},{ 28, 29},{ 30, 31},{ 32, 33},{ 34, -30},{ 35, 36},{ 37, 38},{ 39, -31}, -{-126,-155},{ 40, 41},{-156, 42},{ 43,-130},{ 44,-131},{-151, -26},{ 45, 46},{-250, 47}, -{ 48, 49},{ 50, 51},{ 52,-275},{ 53, 54},{ -2, -7},{ 55, 56},{ 57, 58},{ 59, 60}, -{ 61, 62},{ 63, 64},{ 65, 66},{ 67, 68},{ 69, 70},{ 71, -50},{ 72,-180},{ 73, 74}, -{ 75, 76},{ 77, -55},{ 78,-175},{ 79, -36},{ 80, 81},{ -35, -10},{ 82, 83},{-280, 84}, -{ -11, 85},{ 86, -32},{ 87, 88},{ 89,-161},{ 90,-276},{ 91, 92},{-281, 93},{ -8, 94}, -{ 95, 96},{ 97,-157},{-181,-400},{-132, 98},{-375, 99},{-160, 100},{-127, 101},{ -27, 102}, -{ 103,-251},{ -56, 104},{ 105,-256},{-300, -3},{-152,-255},{ 106, 107},{ -37, 108},{-305, 109}, -{-176, 110},{-136, 111},{ -12, 112},{ 113, 114},{ 115,-135},{ 116, 117},{-162, 118},{ -16, -51}, -{-186, 119},{ 120, 121},{ 122, 123},{ -41, 124},{ -61, 125},{ 126, 127},{ 128, 129},{ 130, -60}, -{ 131, 132},{-306, 133},{ 134,-205},{-405, 135},{ 136, 137},{ 138, 139},{-185, 140},{ 141,-500}, -{ -15, 142},{ 143, -80},{ -75, -40},{-301, 144},{ 145, 146},{-200, 147},{ 148, 149},{ 150, 151}, -{ 152,-525},{ 153,-177},{-425, 154},{ 155, -13},{-430, 156},{ 157,-406},{ 158, 159},{-206,-380}, -{ 160, 161},{ 162, 163},{ 164,-182},{-137, 165},{-286, 166},{ 167,-401},{ 168, 169},{ -42, -33}, -{ 170,-166},{ -57,-325},{ 171,-187},{ -38, 172},{ 173, 174},{-165,-330},{ -4,-282},{ 175,-257}, -{-261,-311},{-376, 176},{ 177, 178},{ -28, 179},{ 180, -9},{-285, 181},{ 182, 183},{ 184,-277}, -{ 185,-133},{-310, -81},{ -85, 186},{-158,-210},{ -17, 187},{ 188, 189},{ 190, -52},{-141, 191}, -{ 192,-128},{-191, -20},{ 193,-140},{ 194, 195},{-211,-260},{ 196, 197},{ 198, 199},{ 200, -66}, -{-201,-225},{-381, 201},{ 202, 203},{ 204, 205},{ 206, 207},{-163,-287},{ 208,-100},{ 209, 210}, -{ 211, 212},{ 213,-252},{-105, -76},{ 214, 215},{ 216, -21},{ -86, -62},{-307, 217},{ -65,-455}, -{-550, 218},{ 219, 220},{ 221, 222},{ 223, 224},{ 225,-230},{-142, 226},{-302,-426},{-431, 227}, -{ 228, 229},{ 230,-190},{-402, -46},{-153,-450},{-505, 231},{ 232, 233},{ 234, 235},{ 236, 237}, -{ 238, 239},{-262, -29},{ 240, 241},{ 242, 243},{-167, -67},{-331,-530},{ 244, 245},{ 246, 247}, -{ 248, 249},{ 250, 251},{ 252, 253},{ 254, 255},{ 256, 257},{ 258, 259},{ 260, 261},{ 262,-336}, -{ 263,-171},{-192,-207},{-258,-138},{ 264, 265},{ 266, 267},{ 268, 269},{ 270, 271},{ 272, 273}, -{ 274, -45},{-335,-411},{ -43, -18},{-265, -71},{-316,-326},{-350,-407},{-146, -14},{ 275, 276}, -{ 277, 278},{ 279, 280},{ 281,-216},{ -34,-283},{-291,-312},{-410,-168},{-555, 282},{ -70, -53}, -{-235, -87},{ -77,-183},{-315,-332},{-178, -58},{ 283, 284},{ 285, 286},{ 287, 288},{ 289, 290}, -{ 291, 292},{ 293, 294},{ 295, 296},{ 297, 298},{-202,-226},{-170,-267},{-134,-290},{-355,-385}, -{-386, -47},{-526,-196},{ 299, 300},{ 301, 302},{ 303, 304},{ 305, 306},{ 307, 308},{ 309, 310}, -{ 311, 312},{ 313, 314},{ 315, 316},{ 317, 318},{ 319, 320},{ 321, 322},{ 323, 324},{ 325,-111}, -{-231,-253},{ -91, -82},{-172,-145},{ -22,-317},{ -90,-356},{-382,-159},{ 326, 327},{ 328, 329}, -{ 330, 331},{ 332, 333},{ 334, 335},{-106,-263},{-278,-215},{-110, -39},{-101,-377},{-129, -63}, -{-436,-195},{-506,-531},{ 336,-212},{-154,-266},{ -59,-288},{-292,-303},{-337,-432},{-188,-451}, -{-456,-460},{-501,-236},{-551, 337},{ 338, 339},{ 340, 341},{ 342, 343},{ 344, 345},{ 346, 347}, -{ 348, 349},{ 350, 351},{ 352, 353},{ 354, 355},{ 356, 357},{ 358, 359},{ 360, 361},{ 362, 363}, -{ 364, 365},{ 366, 367},{ 368, 369},{ 370, 371},{ 372, 373},{ 374, 375},{ 376, 377},{ 378, 379}, -{ 380, 381},{ 382, 383},{ 384, 385},{ 386, 387},{ 388, 389},{ 390, 391},{ 392, 393},{ 394, 395}, -{ 396, 397},{ 398, 399},{ 400, 401},{ 402, 403},{ 404, 405},{ 406, 407},{ -72,-272},{-309,-333}, -{-340,-360},{ -68,-387},{-184,-416},{-427,-147},{-435,-437},{-115,-480},{-510,-532},{-164,-556}, -{ 408,-295},{-296,-297},{-107,-313},{-193,-173},{-320,-327},{-341,-351},{-352,-143},{-378, -19}, -{-403,-412},{-268, -54},{ -83,-441},{-442,-457},{-475, -44},{ -97,-511},{-515,-208},{-527,-528}, -{-237,-536},{-552, 409},{ 410, 411},{ 412, 413},{ 414, 415},{ 416, 417},{ 418, 419},{ 420, 421}, -{ 422, 423},{ 424, 425},{ 426, 427},{ 428, 429},{ 430, 431},{ 432, 433},{ 434, 435},{ 436, 437}, -{ 438, 439},{ 440, 441},{ 442, 443},{ 444, 445},{ 446, 447},{ 448, 449},{ 450, 451},{ 452, 453}, -{ 454, 455},{ 456, 457},{ 458, 459},{ 460, 461},{ 462, 463},{ 464, 465},{ 466, 467},{ 468, 469}, -{ 470, 471},{ 472, 473},{ 474, 475},{ 476, 477},{ 478, 479},{ 480, 481},{ 482, 483},{ 484, 485}, -{ 486, 487},{ 488, 489},{ 490, 491},{ 492, 493},{ 494, 495},{ 496, 497},{ 498, 499},{ 500, 501}, -{ 502, 503},{ 504, 505},{ 506, 507},{ 508, 509},{ 510, 511},{ 512, 513},{ 514, 515},{ 516, 517}, -{ 518,-104},{ -84,-218},{-318,-319},{-117,-321},{-322,-323},{-219,-174},{-243,-328},{-329, -94}, -{-228,-194},{-240,-334},{-102,-229},{-169,-338},{-339,-116},{-289,-342},{-343,-345},{-346,-347}, -{ -23,-203},{-214,-353},{-204,-220},{-357,-358},{-264,-361},{-362,-363},{-365,-366},{-367, -92}, -{-245,-121},{-293,-379},{-108,-232},{-221,-383},{-384,-233},{-294,-241},{-388,-389},{-390,-391}, -{-392,-393},{-394,-395},{-396,-397},{-398, -24},{-109,-149},{-242,-404},{ -64, -79},{ -89,-408}, -{-409,-213},{-120,-113},{-413,-414},{-415, -96},{-417,-418},{-419,-420},{-421,-422},{-423,-298}, -{ -69,-269},{-428,-429},{ -78,-270},{ -88,-433},{-434,-271},{-234,-259},{-438,-439},{-440,-227}, -{-179,-443},{-445,-446},{-447,-223},{-238,-452},{-453,-454},{-273,-254},{-246,-458},{-459, -48}, -{-461,-462},{-463,-465},{-466,-467},{-468,-470},{-471,-304},{-476,-477},{-478,-112},{-481,-482}, -{-483,-485},{-486,-487},{-490,-491},{-103,-118},{-502,-503},{-504,-189},{ -93,-507},{-508,-509}, -{-148,-139},{-512,-513},{-308,-516},{-517,-518},{-520,-521},{ -73, -98},{ -95, -49},{-529,-222}, -{-217,-197},{-533,-534},{-535,-284},{-537,-538},{-540,-541},{-542,-543},{-545,-546},{-144,-198}, -{-314,-553},{-209,-279},{-557,-558},{-560,-561},{-562,-563},{-565,-566},{-567,-575},{-576,-577}, -{-578,-580},{-581,-582},{-583,-585},{-586,-587},{-590,-591},{-600,-601},{-605,-606},}; -Word16 mlt_decoder_tree_category_4[208][2] = { -{ 1, 2},{ 3, 0},{ 4, 5},{ 6, 7},{ 8, 9},{ 10, 11},{ 12, -64},{ -1, 13}, -{ 14, -16},{ -4, 15},{ 16, 17},{ 18, -80},{ -5, 19},{ 20, 21},{ -20, 22},{ 23, -65}, -{ -84, -21},{ -68, 24},{ -17, 25},{ 26, 27},{ 28, -81},{ -69, -85},{ 29, 30},{ 31, 32}, -{-128, 33},{ 34, 35},{ -2, 36},{ 37, 38},{-144, 39},{ 40, -6},{ 41, 42},{ -32, 43}, -{ 44, -8},{ 45, -25},{ -96, 46},{ 47,-100},{ -9, 48},{ 49, -36},{ 50, -24},{ 51, 52}, -{ 53,-148},{ 54, 55},{ -22, 56},{ 57, 58},{-132, -89},{ 59, 60},{-101, 61},{ -37, 62}, -{ -18, 63},{ -88,-129},{ -66, -70},{ -97, 64},{ -72, -73},{ 65,-145},{-149, -86},{ 66, -33}, -{ 67,-133},{ 68, 69},{ 70, 71},{-192, 72},{ 73,-160},{ -82, 74},{-164, 75},{ -10, 76}, -{ 77,-208},{ 78, -40},{ 79, 80},{ -3, 81},{ -7, 82},{ 83, 84},{-104, 85},{ 86, -26}, -{ 87,-105},{ 88,-112},{ 89, 90},{ 91, -41},{ 92, 93},{ 94, 95},{ -48, 96},{ -90, 97}, -{ 98, -28},{ -52, 99},{ -12, 100},{ 101, -74},{ -13,-116},{-161, 102},{ 103, -29},{-102, 104}, -{-152,-165},{ 105, 106},{ 107, 108},{ 109, 110},{ 111,-212},{ 112, 113},{-136, 114},{ 115,-137}, -{ 116, -23},{ -19,-153},{ -98,-134},{-196, 117},{ 118, 119},{ -38,-193},{-113,-150},{-209, 120}, -{ 121, -93},{ -83, 122},{ 123, 124},{ 125, 126},{ 127, 128},{ 129, 130},{ 131, -34},{-146, -53}, -{ 132, 133},{ 134, 135},{ 136, 137},{ 138,-130},{ -49, 139},{ 140, 141},{-117, -42},{ -67, -92}, -{ 142, -87},{ -77,-197},{ -71, 143},{ 144, 145},{ 146, 147},{ 148, 149},{ 150, 151},{ 152, 153}, -{ 154, 155},{ 156, 157},{ 158, 159},{ 160, 161},{ 162, 163},{ 164, 165},{ 166, 167},{ 168, 169}, -{-108, -76},{-168,-169},{-176, -44},{-224, -56},{ -45,-180},{ -11,-106},{-213, 170},{ 171, 172}, -{ 173, 174},{ 175, 176},{ 177, 178},{ 179, 180},{ 181, 182},{ 183, 184},{ 185, 186},{ 187, 188}, -{ 189, 190},{ 191, 192},{ 193, 194},{ 195, 196},{ 197, 198},{ 199, 200},{ 201, 202},{ 203, 204}, -{ 205, 206},{ 207,-131},{ -30, -27},{ -43,-151},{ -75,-154},{-156,-162},{-109,-194},{-198,-201}, -{-114,-225},{-228,-229},{-141,-142},{ -94,-124},{ -95,-147},{-115,-125},{ -54, -55},{-107, -58}, -{ -39,-155},{-121,-157},{-158,-103},{ -14,-122},{-163, -51},{ -57,-166},{-167, -46},{-110,-170}, -{-172,-173},{ -61,-177},{-178, -99},{-181,-182},{-184,-185},{-118, -35},{ -15,-195},{ -31, -60}, -{-135,-199},{-200, -79},{-202,-204},{-205,-119},{ -91,-210},{-211, -78},{-120,-214},{-215,-216}, -{-217,-218},{-220,-221},{ -50,-138},{-226,-139},{-140,-230},{-232,-233},{-240,-241},{-244,-245}, -}; -Word16 mlt_decoder_tree_category_5[191][2] = { -{ 1, 2},{ 0, 3},{ 4, 5},{ 6, 7},{ 8, 9},{ 10, 11},{ -81, -1},{ 12, 13}, -{ 14, -27},{ -3, -9},{ 15, 16},{ 17, 18},{ 19, 20},{-108, 21},{ -4, 22},{ 23, -36}, -{ -12, 24},{ -82, 25},{ 26, -84},{ 27, -90},{ -10, -30},{ 28, 29},{ 30, -28},{ 31,-117}, -{ -13, 32},{ -39, 33},{ 34,-109},{ 35, -93},{ -85,-111},{ -37, 36},{ -31, 37},{ -91, 38}, -{ 39, 40},{ -40,-120},{ 41, 42},{-118, 43},{ -94, 44},{-112,-162},{ 45, 46},{ -2, 47}, -{ 48, 49},{-121,-189},{ 50, -54},{ 51, 52},{ 53, -18},{ 54, 55},{ -6, 56},{ 57, -5}, -{-135, 58},{ 59, 60},{ 61, 62},{ -63, 63},{ 64, -7},{ -15, 65},{ 66, 67},{ -45, 68}, -{ 69, 70},{ 71, -21},{ 72, 73},{ 74, 75},{ 76, 77},{-163, 78},{ 79,-171},{-144, 80}, -{ -48, 81},{ -57, 82},{ 83, 84},{-165, 85},{ -16,-198},{ 86, 87},{ -11, 88},{ 89, -99}, -{ 90, -83},{ -19, 91},{ 92, 93},{ 94, 95},{ 96, 97},{ 98, 99},{ -87, 100},{ 101, 102}, -{-190, -66},{ -33,-192},{ 103, 104},{ 105, 106},{-102, -42},{ 107,-126},{ 108, -29},{-129, -46}, -{ -86, -14},{-114, -32},{-172, 109},{ 110, -58},{ -34,-138},{ 111, 112},{ 113, 114},{ 115, 116}, -{ 117, 118},{ 119, 120},{-127,-166},{-174, 121},{ 122, 123},{ 124, 125},{ -88, -96},{ 126,-100}, -{ -38,-110},{ -22,-136},{ -55,-139},{-201, 127},{ -64,-193},{ 128, -49},{-175,-199},{ 129, 130}, -{ 131, 132},{ 133, 134},{ 135, 136},{ 137, 138},{ 139, 140},{ 141, 142},{ 143, 144},{ 145, 146}, -{ 147, 148},{ 149, 150},{-103, -92},{ -43,-130},{-145,-147},{-148, -41},{-216,-115},{-119,-123}, -{ -95, 151},{ 152, 153},{ 154, 155},{ 156, 157},{ 158, 159},{ 160, 161},{ 162, 163},{ 164, 165}, -{ 166, 167},{ 168, 169},{ 170, 171},{ 172, 173},{ 174, 175},{ 176, 177},{ 178, 179},{ 180, 181}, -{ 182, 183},{ 184, 185},{ 186, 187},{ 188, 189},{ 190,-153},{-180, -8},{ -97, -24},{-122,-113}, -{-124,-125},{ -67, -44},{-128, -69},{-106,-131},{-132,-133},{ -61, -73},{-137,-116},{ -89,-140}, -{-141,-142},{ -23, -25},{-146, -17},{-104,-149},{-150,-151},{ -52,-154},{-156,-157},{ -76, -70}, -{-164, -51},{ -72,-167},{-168,-169},{ -47, -20},{-173, -59},{-101,-176},{-177,-178},{ -68,-181}, -{-183,-184},{ -35, -60},{-191, -98},{ -56,-194},{-195,-196},{ -75, -65},{-200,-105},{-202,-203}, -{-204,-205},{-207,-208},{-210,-211},{ -50,-217},{-219,-220},{-225,-226},{-228,-229},}; -Word16 mlt_decoder_tree_category_6[31][2] = { -{ 1, 0},{ 2, 3},{ 4, 5},{ 6, 7},{ 8, -16},{ -1, -8},{ -2, -4},{ 9, 10}, -{ 11, 12},{ 13, 14},{ 15, 16},{ 17, -24},{ -3, -12},{ -6, 18},{ 19, -20},{ -10, -5}, -{ -17, -9},{ -18, 20},{ 21, 22},{ 23, 24},{ 25, -28},{ 26, -7},{ -14, -22},{ -26, -11}, -{ 27, -19},{ -25, -13},{ -21, 28},{ 29, -30},{ -27, 30},{ -15, -29},{ -23, -31},}; - -Word16 *table_of_decoder_tables[NUM_CATEGORIES-1] = { -(Word16 *)mlt_decoder_tree_category_0, -(Word16 *)mlt_decoder_tree_category_1, -(Word16 *)mlt_decoder_tree_category_2, -(Word16 *)mlt_decoder_tree_category_3, -(Word16 *)mlt_decoder_tree_category_4, -(Word16 *)mlt_decoder_tree_category_5, -(Word16 *)mlt_decoder_tree_category_6, -}; - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/huff_tab.h b/sflphone-common/libs/pjproject/third_party/g7221/common/huff_tab.h deleted file mode 100644 index 5ccd65008faf7106c56d3a23e64c0a4553c9c01f..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/huff_tab.h +++ /dev/null @@ -1,42 +0,0 @@ -/*********************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***********************************************************************/ - -extern Word16 differential_region_power_bits[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; -extern UWord16 differential_region_power_codes[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS]; -extern Word16 differential_region_power_decoder_tree[MAX_NUMBER_OF_REGIONS][DIFF_REGION_POWER_LEVELS-1][2]; -extern Word16 mlt_quant_centroid[NUM_CATEGORIES][MAX_NUM_BINS]; -extern Word16 expected_bits_table[NUM_CATEGORIES]; -extern Word16 mlt_sqvh_bitcount_category_0[196]; -extern UWord16 mlt_sqvh_code_category_0[196]; -extern Word16 mlt_sqvh_bitcount_category_1[100]; -extern UWord16 mlt_sqvh_code_category_1[100]; -extern Word16 mlt_sqvh_bitcount_category_2[49]; -extern UWord16 mlt_sqvh_code_category_2[49]; -extern Word16 mlt_sqvh_bitcount_category_3[625]; -extern UWord16 mlt_sqvh_code_category_3[625]; -extern Word16 mlt_sqvh_bitcount_category_4[256]; -extern UWord16 mlt_sqvh_code_category_4[256]; -extern Word16 mlt_sqvh_bitcount_category_5[243]; -extern UWord16 mlt_sqvh_code_category_5[243]; -extern Word16 mlt_sqvh_bitcount_category_6[32]; -extern UWord16 mlt_sqvh_code_category_6[32]; -extern Word16 *table_of_bitcount_tables[NUM_CATEGORIES-1]; -extern UWord16 *table_of_code_tables[NUM_CATEGORIES-1]; -extern Word16 mlt_decoder_tree_category_0[180][2]; -extern Word16 mlt_decoder_tree_category_1[93][2]; -extern Word16 mlt_decoder_tree_category_2[47][2]; -extern Word16 mlt_decoder_tree_category_3[519][2]; -extern Word16 mlt_decoder_tree_category_4[208][2]; -extern Word16 mlt_decoder_tree_category_5[191][2]; -extern Word16 mlt_decoder_tree_category_6[31][2]; -extern Word16 *table_of_decoder_tables[NUM_CATEGORIES-1]; - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/tables.c b/sflphone-common/libs/pjproject/third_party/g7221/common/tables.c deleted file mode 100644 index 1018e6475fb54b4f7977f6d2d80614794954757c..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/tables.c +++ /dev/null @@ -1,298 +0,0 @@ -/**************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -****************************************************************************/ - -/**************************************************************************** - Filename: tables.c - - Purpose: Contains tables used by G.722.1 Annex C - - Design Notes: - -****************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ -#include "defs.h" - -Word16 int_region_standard_deviation_table[REGION_POWER_TABLE_SIZE] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 2, 3, 4, 6, - 8, 11, 16, 23, 32, 45, 64, 91, 128, 181, - 256, 362, 512, 724, 1024, 1448, 2048, 2896, 4096, 5793, - 8192, 11585, 16384, 23170, 0,0,0,0,0,0, - 0,0,0,0}; - -Word16 standard_deviation_inverse_table[REGION_POWER_TABLE_SIZE] = { - 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, - 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, - 32767, 32767, 32767, 32767, 32767, 23170, 16384, 11585, 8192, 5793, - 4096, 2896, 2048, 1448, 1024, 724, 512, 362, 256, 181, - 128, 91, 64, 45, 32, 23, 16, 11, 8, 6, - 4, 3, 2, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 0, 0}; - - -Word16 step_size_inverse_table[NUM_CATEGORIES]={ - 23167,16384,11585,8192,5793,4096,2896,2896 -}; - - -Word16 vector_dimension[NUM_CATEGORIES] = { 2, 2, 2, 4, 4, 5, 5, 1}; -Word16 number_of_vectors[NUM_CATEGORIES] = {10,10,10, 5, 5, 4, 4,20}; -/* The last category isn't really coded with scalar quantization. */ - -Word16 max_bin[NUM_CATEGORIES] = {13, 9, 6, 4, 3, 2, 1, 1}; - -Word16 max_bin_plus_one_inverse[NUM_CATEGORIES] = -{ - 2341,3277,4682,6554,8193,10923,16385,16385 -}; - -/* - * Release 1.2. - * Add new version of int_dead_zone[] to go with - * changes to vector_huffman() in encoder.c. - * - */ - -/************** See new version of table below -Word16 int_dead_zone[NUM_CATEGORIES]= -{ - 9830,10813,11796,12780,13763,14746,16384,16384 -}; -***************/ - -/******** New version of table added in Release 1.2 ********/ -Word16 int_dead_zone[NUM_CATEGORIES]= -{ -2457, 2703, 2949, 3195, 3440, 3686, 4096, 4096 -}; - - -/* - * Release 1.2. - * Added this new table to go with - * changes to vector_huffman() in encoder.c, - * accompanies the new table for int_dead_zone[]. - */ - -Word16 int_dead_zone_low_bits[NUM_CATEGORIES]= -{ -2, 1, 0, 0, 3, 2, 0, 0 -}; - - -Word16 samples_to_rmlt_window[DCT_LENGTH]= -{ 44, 134, 224, 314, 404, 494, 584, 674, 764, 853, - 943, 1033, 1123, 1213, 1302, 1392, 1482, 1571, 1661, 1750, - 1840, 1929, 2019, 2108, 2197, 2286, 2376, 2465, 2554, 2643, - 2732, 2821, 2909, 2998, 3087, 3175, 3264, 3352, 3441, 3529, - 3617, 3705, 3793, 3881, 3969, 4057, 4144, 4232, 4319, 4407, - 4494, 4581, 4668, 4755, 4842, 4928, 5015, 5101, 5188, 5274, - 5360, 5446, 5532, 5617, 5703, 5788, 5873, 5959, 6043, 6128, - 6213, 6297, 6382, 6466, 6550, 6634, 6718, 6801, 6885, 6968, - 7051, 7134, 7217, 7299, 7382, 7464, 7546, 7628, 7709, 7791, - 7872, 7953, 8034, 8115, 8195, 8276, 8356, 8436, 8515, 8595, - 8674, 8753, 8832, 8911, 8989, 9068, 9146, 9223, 9301, 9378, - 9455, 9532, 9609, 9685, 9762, 9838, 9913, 9989, 10064, 10139, - 10214, 10288, 10363, 10437, 10510, 10584, 10657, 10730, 10803, 10875, - 10948, 11020, 11091, 11163, 11234, 11305, 11375, 11446, 11516, 11586, - 11655, 11724, 11793, 11862, 11930, 11998, 12066, 12134, 12201, 12268, - 12334, 12401, 12467, 12532, 12598, 12663, 12728, 12792, 12857, 12920, - 12984, 13047, 13110, 13173, 13235, 13297, 13359, 13420, 13481, 13542, - 13602, 13662, 13722, 13782, 13841, 13899, 13958, 14016, 14074, 14131, - 14188, 14245, 14301, 14357, 14413, 14468, 14523, 14578, 14632, 14686, - 14739, 14793, 14845, 14898, 14950, 15002, 15053, 15104, 15155, 15205, - 15255, 15305, 15354, 15403, 15451, 15500, 15547, 15595, 15642, 15688, - 15734, 15780, 15826, 15871, 15916, 15960, 16004, 16047, 16091, 16133, - 16176, 16218, 16259, 16300, 16341, 16382, 16422, 16461, 16501, 16540, - 16578, 16616, 16654, 16691, 16728, 16764, 16800, 16836, 16871, 16906, - 16940, 16974, 17008, 17041, 17074, 17106, 17138, 17170, 17201, 17232, - 17262, 17292, 17321, 17350, 17379, 17407, 17435, 17462, 17489, 17516, - 17542, 17567, 17593, 17617, 17642, 17666, 17689, 17713, 17735, 17758, - 17779, 17801, 17822, 17842, 17863, 17882, 17901, 17920, 17939, 17957, - 17974, 17991, 18008, 18024, 18040, 18055, 18070, 18085, 18099, 18113, - 18126, 18139, 18151, 18163, 18174, 18185, 18196, 18206, 18216, 18225, - 18234, 18242, 18250, 18257, 18265, 18271, 18277, 18283, 18288, 18293, - 18298, 18302, 18305, 18308, 18311, 18313, 18315, 18316, 18317, 18317, -}; - -Word16 rmlt_to_samples_window[DCT_LENGTH]= -{ 44, 133, 222, 310, 399, 488, 577, 666, 754, 843, - 932, 1020, 1109, 1198, 1286, 1375, 1464, 1552, 1641, 1729, - 1817, 1906, 1994, 2082, 2171, 2259, 2347, 2435, 2523, 2611, - 2699, 2786, 2874, 2962, 3049, 3137, 3224, 3312, 3399, 3486, - 3573, 3660, 3747, 3834, 3921, 4008, 4094, 4181, 4267, 4353, - 4439, 4526, 4611, 4697, 4783, 4869, 4954, 5040, 5125, 5210, - 5295, 5380, 5465, 5549, 5634, 5718, 5802, 5886, 5970, 6054, - 6138, 6221, 6304, 6388, 6471, 6553, 6636, 6719, 6801, 6883, - 6965, 7047, 7129, 7211, 7292, 7373, 7454, 7535, 7616, 7696, - 7777, 7857, 7937, 8016, 8096, 8175, 8254, 8333, 8412, 8491, - 8569, 8647, 8725, 8803, 8880, 8957, 9035, 9111, 9188, 9264, - 9341, 9417, 9492, 9568, 9643, 9718, 9793, 9868, 9942, 10016, - 10090, 10163, 10237, 10310, 10383, 10455, 10528, 10600, 10672, 10743, - 10815, 10886, 10957, 11027, 11098, 11168, 11237, 11307, 11376, 11445, - 11514, 11582, 11650, 11718, 11785, 11853, 11920, 11986, 12053, 12119, - 12185, 12250, 12315, 12380, 12445, 12509, 12573, 12637, 12701, 12764, - 12826, 12889, 12951, 13013, 13075, 13136, 13197, 13257, 13318, 13378, - 13437, 13497, 13556, 13614, 13673, 13731, 13788, 13846, 13903, 13959, - 14016, 14072, 14128, 14183, 14238, 14292, 14347, 14401, 14454, 14508, - 14561, 14613, 14665, 14717, 14769, 14820, 14871, 14921, 14971, 15021, - 15070, 15119, 15168, 15216, 15264, 15311, 15359, 15405, 15452, 15498, - 15544, 15589, 15634, 15678, 15722, 15766, 15810, 15853, 15895, 15938, - 15979, 16021, 16062, 16103, 16143, 16183, 16223, 16262, 16300, 16339, - 16377, 16414, 16452, 16488, 16525, 16561, 16596, 16632, 16666, 16701, - 16735, 16768, 16801, 16834, 16867, 16899, 16930, 16961, 16992, 17022, - 17052, 17082, 17111, 17140, 17168, 17196, 17223, 17250, 17277, 17303, - 17329, 17354, 17379, 17404, 17428, 17452, 17475, 17498, 17520, 17542, - 17564, 17585, 17606, 17626, 17646, 17665, 17684, 17703, 17721, 17739, - 17756, 17773, 17790, 17806, 17821, 17836, 17851, 17865, 17879, 17893, - 17906, 17918, 17931, 17942, 17954, 17965, 17975, 17985, 17995, 18004, - 18012, 18021, 18028, 18036, 18043, 18049, 18055, 18061, 18066, 18071, - 18076, 18079, 18083, 18086, 18089, 18091, 18093, 18094, 18095, 18095, -}; - -Word16 max_samples_to_rmlt_window[MAX_DCT_LENGTH]={ -0, 43, 89, 133, 178, 222, 268, 314, 357, 403, -447, 493, 538, 582, 628, 671, 717, 763, 807, 853, -896, 942, 987, 1031, 1077, 1121, 1166, 1212, 1256, 1301, -1345, 1390, 1436, 1480, 1526, 1569, 1615, 1660, 1704, 1749, -1793, 1838, 1884, 1928, 1973, 2016, 2062, 2107, 2151, 2196, -2239, 2285, 2331, 2374, 2419, 2463, 2508, 2553, 2597, 2642, -2685, 2730, 2776, 2819, 2864, 2908, 2952, 2998, 3041, 3086, -3129, 3174, 3219, 3263, 3307, 3350, 3396, 3440, 3483, 3528, -3571, 3616, 3661, 3704, 3748, 3791, 3836, 3881, 3923, 3968, -4011, 4055, 4100, 4143, 4187, 4230, 4274, 4318, 4362, 4406, -4448, 4493, 4537, 4580, 4624, 4666, 4710, 4755, 4797, 4841, -4883, 4927, 4971, 5013, 5057, 5099, 5144, 5187, 5229, 5273, -5315, 5359, 5402, 5444, 5488, 5530, 5573, 5617, 5658, 5702, -5743, 5787, 5830, 5871, 5915, 5956, 6000, 6043, 6084, 6127, -6169, 6211, 6254, 6296, 6339, 6380, 6423, 6465, 6507, 6549, -6590, 6633, 6675, 6716, 6759, 6799, 6842, 6884, 6925, 6967, -7007, 7050, 7092, 7132, 7175, 7215, 7257, 7299, 7339, 7381, -7421, 7462, 7504, 7544, 7586, 7626, 7667, 7709, 7749, 7790, -7830, 7871, 7912, 7952, 7993, 8032, 8073, 8114, 8153, 8194, -8234, 8275, 8315, 8355, 8395, 8434, 8474, 8515, 8554, 8594, -8632, 8673, 8713, 8752, 8792, 8830, 8871, 8910, 8949, 8989, -9027, 9066, 9106, 9144, 9184, 9221, 9261, 9300, 9338, 9378, -9415, 9454, 9493, 9531, 9570, 9607, 9646, 9685, 9722, 9761, -9798, 9836, 9875, 9912, 9950, 9987, 10025, 10064, 10100, 10138, -10175, 10213, 10250, 10287, 10325, 10361, 10398, 10436, 10472, 10510, -10545, 10583, 10620, 10656, 10692, 10728, 10766, 10803, 10838, 10874, -10910, 10947, 10983, 11018, 11055, 11089, 11126, 11162, 11197, 11233, -11268, 11303, 11340, 11374, 11410, 11444, 11480, 11515, 11549, 11585, -11619, 11654, 11689, 11723, 11758, 11791, 11826, 11861, 11895, 11930, -11963, 11997, 12032, 12065, 12099, 12132, 12166, 12201, 12233, 12267, -12300, 12333, 12367, 12400, 12433, 12465, 12499, 12532, 12563, 12597, -12629, 12662, 12695, 12727, 12759, 12790, 12823, 12856, 12887, 12920, -12951, 12983, 13016, 13046, 13078, 13109, 13141, 13173, 13203, 13235, -13266, 13296, 13328, 13358, 13389, 13419, 13450, 13481, 13510, 13541, -13571, 13602, 13632, 13661, 13692, 13721, 13751, 13781, 13810, 13840, -13869, 13898, 13929, 13957, 13986, 14015, 14044, 14073, 14101, 14130, -14158, 14187, 14216, 14244, 14272, 14300, 14328, 14357, 14384, 14412, -14439, 14468, 14495, 14522, 14550, 14577, 14604, 14632, 14658, 14686, -14711, 14739, 14765, 14792, 14819, 14844, 14871, 14897, 14923, 14949, -14975, 15001, 15027, 15053, 15079, 15103, 15129, 15155, 15180, 15205, -15229, 15255, 15280, 15304, 15329, 15353, 15378, 15403, 15426, 15451, -15475, 15499, 15523, 15546, 15570, 15594, 15618, 15641, 15664, 15688, -15711, 15734, 15757, 15780, 15802, 15825, 15848, 15871, 15892, 15915, -15937, 15960, 15982, 16003, 16026, 16047, 16069, 16090, 16112, 16133, -16154, 16175, 16197, 16217, 16239, 16259, 16279, 16301, 16320, 16341, -16361, 16382, 16402, 16421, 16441, 16461, 16481, 16501, 16520, 16539, -16558, 16578, 16597, 16615, 16635, 16653, 16672, 16691, 16709, 16728, -16746, 16764, 16782, 16800, 16818, 16835, 16853, 16871, 16888, 16905, -16923, 16940, 16957, 16974, 16991, 17008, 17024, 17041, 17057, 17074, -17090, 17106, 17122, 17138, 17154, 17169, 17185, 17201, 17216, 17231, -17246, 17262, 17277, 17291, 17306, 17321, 17336, 17350, 17364, 17379, -17393, 17407, 17421, 17435, 17449, 17462, 17476, 17490, 17502, 17515, -17528, 17542, 17554, 17567, 17580, 17592, 17605, 17618, 17629, 17642, -17653, 17666, 17678, 17689, 17701, 17712, 17724, 17736, 17746, 17757, -17768, 17779, 17790, 17800, 17811, 17822, 17832, 17842, 17852, 17862, -17872, 17882, 17892, 17902, 17911, 17920, 17930, 17938, 17947, 17956, -17965, 17974, 17983, 17991, 17999, 18008, 18016, 18025, 18032, 18040, -18047, 18055, 18063, 18070, 18078, 18085, 18092, 18099, 18106, 18112, -18119, 18126, 18132, 18138, 18144, 18151, 18157, 18163, 18168, 18174, -18179, 18185, 18191, 18196, 18201, 18206, 18211, 18216, 18220, 18225, -18229, 18234, 18238, 18242, 18246, 18250, 18254, 18257, 18260, 18264, -18268, 18271, 18274, 18277, 18280, 18283, 18286, 18288, 18291, 18293, -18295, 18297, 18300, 18301, 18303, 18305, 18306, 18308, 18309, 18311, -18312, 18312, 18314, 18315, 18315, 18316, 18316, 18317, 18317, 18317 -}; - -Word16 max_rmlt_to_samples_window[MAX_DCT_LENGTH]={ -0, 43, 88, 131, 176, 219, 265, 310, 353, 398, -442, 487, 532, 575, 620, 663, 709, 754, 797, 842, -885, 931, 975, 1019, 1064, 1107, 1152, 1197, 1240, 1286, -1329, 1373, 1419, 1462, 1507, 1550, 1595, 1640, 1683, 1728, -1771, 1816, 1861, 1904, 1949, 1992, 2037, 2081, 2125, 2170, -2212, 2258, 2302, 2345, 2390, 2433, 2477, 2522, 2565, 2610, -2652, 2697, 2742, 2784, 2829, 2872, 2916, 2961, 3004, 3048, -3091, 3136, 3180, 3223, 3267, 3310, 3354, 3399, 3441, 3485, -3528, 3572, 3616, 3659, 3703, 3745, 3790, 3834, 3876, 3920, -3962, 4006, 4050, 4093, 4136, 4179, 4222, 4266, 4309, 4352, -4394, 4438, 4482, 4524, 4568, 4610, 4653, 4697, 4739, 4782, -4824, 4867, 4911, 4953, 4996, 5038, 5081, 5124, 5166, 5209, -5251, 5294, 5337, 5378, 5421, 5463, 5506, 5548, 5590, 5633, -5674, 5717, 5759, 5800, 5843, 5884, 5927, 5970, 6011, 6053, -6094, 6136, 6178, 6219, 6262, 6302, 6345, 6387, 6428, 6470, -6510, 6552, 6594, 6635, 6677, 6717, 6759, 6801, 6841, 6883, -6922, 6964, 7006, 7046, 7087, 7127, 7169, 7210, 7250, 7291, -7331, 7372, 7413, 7453, 7494, 7533, 7574, 7615, 7655, 7695, -7735, 7776, 7816, 7855, 7896, 7935, 7975, 8016, 8054, 8095, -8134, 8174, 8214, 8253, 8293, 8332, 8371, 8412, 8450, 8490, -8528, 8568, 8607, 8646, 8685, 8723, 8763, 8802, 8840, 8879, -8917, 8956, 8995, 9033, 9072, 9109, 9148, 9187, 9225, 9264, -9301, 9340, 9378, 9415, 9454, 9491, 9529, 9567, 9604, 9642, -9679, 9717, 9755, 9791, 9829, 9866, 9903, 9941, 9977, 10015, -10051, 10089, 10126, 10162, 10199, 10235, 10272, 10309, 10345, 10382, -10417, 10454, 10491, 10526, 10563, 10598, 10635, 10672, 10706, 10742, -10778, 10814, 10850, 10885, 10921, 10955, 10991, 11027, 11061, 11097, -11131, 11166, 11202, 11236, 11271, 11305, 11340, 11376, 11409, 11444, -11478, 11513, 11547, 11580, 11615, 11648, 11683, 11717, 11751, 11785, -11817, 11852, 11886, 11918, 11952, 11985, 12018, 12053, 12085, 12118, -12150, 12184, 12217, 12249, 12282, 12314, 12347, 12380, 12411, 12444, -12476, 12508, 12541, 12572, 12604, 12635, 12668, 12700, 12731, 12763, -12794, 12826, 12858, 12888, 12920, 12950, 12982, 13013, 13043, 13074, -13105, 13135, 13166, 13196, 13227, 13257, 13287, 13317, 13347, 13377, -13407, 13437, 13467, 13496, 13525, 13555, 13585, 13614, 13643, 13672, -13701, 13730, 13760, 13787, 13817, 13845, 13873, 13903, 13930, 13959, -13987, 14015, 14043, 14071, 14099, 14126, 14154, 14183, 14209, 14237, -14264, 14292, 14319, 14346, 14373, 14400, 14427, 14454, 14480, 14507, -14533, 14560, 14586, 14612, 14639, 14664, 14691, 14717, 14742, 14768, -14793, 14819, 14845, 14870, 14896, 14920, 14945, 14971, 14996, 15020, -15044, 15070, 15094, 15118, 15143, 15167, 15192, 15216, 15239, 15263, -15287, 15311, 15335, 15358, 15382, 15405, 15428, 15452, 15474, 15498, -15520, 15543, 15566, 15588, 15611, 15633, 15656, 15678, 15700, 15722, -15744, 15766, 15788, 15809, 15831, 15852, 15874, 15895, 15916, 15937, -15958, 15979, 16000, 16020, 16041, 16061, 16082, 16103, 16122, 16143, -16162, 16183, 16203, 16222, 16242, 16261, 16281, 16300, 16319, 16339, -16357, 16377, 16396, 16414, 16433, 16451, 16470, 16488, 16506, 16525, -16542, 16561, 16579, 16596, 16614, 16631, 16649, 16667, 16683, 16700, -16717, 16735, 16752, 16768, 16785, 16801, 16818, 16834, 16850, 16867, -16883, 16899, 16915, 16930, 16945, 16961, 16977, 16992, 17007, 17022, -17037, 17052, 17067, 17081, 17096, 17111, 17126, 17140, 17154, 17168, -17182, 17196, 17209, 17223, 17237, 17250, 17264, 17277, 17290, 17303, -17315, 17329, 17341, 17354, 17367, 17379, 17391, 17404, 17415, 17428, -17439, 17451, 17463, 17475, 17486, 17497, 17509, 17520, 17531, 17542, -17552, 17563, 17574, 17584, 17595, 17605, 17616, 17626, 17636, 17646, -17655, 17665, 17675, 17684, 17694, 17703, 17712, 17721, 17730, 17739, -17747, 17756, 17764, 17773, 17781, 17789, 17798, 17806, 17813, 17821, -17829, 17836, 17843, 17851, 17858, 17866, 17872, 17879, 17886, 17893, -17899, 17906, 17912, 17918, 17924, 17931, 17937, 17942, 17948, 17953, -17959, 17964, 17970, 17975, 17980, 17985, 17990, 17995, 17999, 18004, -18008, 18012, 18016, 18021, 18025, 18028, 18032, 18036, 18039, 18043, -18046, 18049, 18052, 18055, 18058, 18061, 18064, 18067, 18069, 18071, -18073, 18075, 18078, 18079, 18081, 18083, 18084, 18086, 18087, 18089, -18090, 18090, 18091, 18092, 18093, 18094, 18094, 18095, 18095, 18095 -}; diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/tables.h b/sflphone-common/libs/pjproject/third_party/g7221/common/tables.h deleted file mode 100644 index ddf29eb3d28795a96ec4cb1ce29d9a56b4367311..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/tables.h +++ /dev/null @@ -1,47 +0,0 @@ -/*********************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 1999 PictureTel Coporation -** Andover, MA, USA -** -** All rights reserved. -** -***********************************************************************/ - -/*********************************************************************** - Filename: tables.h - - Purpose: Contains table definitions used by G.722.1 Annex C - - Design Notes: - -***********************************************************************/ - -/*********************************************************************** - Include files -***********************************************************************/ -#define REGION_POWER_TABLE_SIZE 64 -#define NUM_CATEGORIES 8 -#define DCT_LENGTH 320 -#define MAX_DCT_LENGTH 640 - -extern Word16 int_region_standard_deviation_table[REGION_POWER_TABLE_SIZE]; -extern Word16 standard_deviation_inverse_table[REGION_POWER_TABLE_SIZE]; -extern Word16 step_size_inverse_table[NUM_CATEGORIES]; -extern Word16 vector_dimension[NUM_CATEGORIES]; -extern Word16 number_of_vectors[NUM_CATEGORIES]; -/* The last category isn't really coded with scalar quantization. */ -extern Word16 max_bin[NUM_CATEGORIES]; -extern Word16 max_bin_plus_one_inverse[NUM_CATEGORIES]; -extern Word16 int_dead_zone[NUM_CATEGORIES]; -extern Word16 samples_to_rmlt_window[DCT_LENGTH]; -extern Word16 rmlt_to_samples_window[DCT_LENGTH]; - -/* Add next line in Release 1.2 */ -extern Word16 int_dead_zone_low_bits[NUM_CATEGORIES]; - -extern Word16 max_samples_to_rmlt_window[MAX_DCT_LENGTH]; -extern Word16 max_rmlt_to_samples_window[MAX_DCT_LENGTH]; diff --git a/sflphone-common/libs/pjproject/third_party/g7221/common/typedef.h b/sflphone-common/libs/pjproject/third_party/g7221/common/typedef.h deleted file mode 100644 index 6daa80797c367eb3c7fa0b0712f7c114d8cbd0da..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/common/typedef.h +++ /dev/null @@ -1,32 +0,0 @@ -/* $Id: typedef.h 2623 2009-04-20 18:38:15Z bennylp $ */ -/* - * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#ifndef TYPEDEF_H -#define TYPEDEF_H - -#include <pj/types.h> - -typedef pj_int8_t Word8; -typedef pj_int16_t Word16; -typedef pj_int32_t Word32; -typedef pj_uint16_t UWord16; -typedef pj_uint32_t UWord32; -typedef int Flag; - -#endif /* TYPEDEF_H */ - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/decode/coef2sam.c b/sflphone-common/libs/pjproject/third_party/g7221/decode/coef2sam.c deleted file mode 100644 index 87deab0ef134506df2e5fc1cd7e3f88d2d0062ca..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/decode/coef2sam.c +++ /dev/null @@ -1,180 +0,0 @@ -/***************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -*****************************************************************************/ - -/***************************************************************************** -* Filename: rmlt_coefs_to_samples.c -* -* Purpose: Convert Reversed MLT (Modulated Lapped Transform) -* Coefficients to Samples -* -* The "Reversed MLT" is an overlapped block transform which uses -* even symmetry * on the left, odd symmetry on the right and a -* Type IV DCT as the block transform. * It is thus similar to a -* MLT which uses odd symmetry on the left, even symmetry * on the -* right and a Type IV DST as the block transform. In fact, it is -* equivalent * to reversing the order of the samples, performing -* an MLT and then negating all * the even-numbered coefficients. -* -*****************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ -#include "defs.h" -#include "tables.h" -#include "count.h" - -/*************************************************************************** - Function: rmlt_coefs_to_samples - - Syntax: void rmlt_coefs_to_samples(Word16 *coefs, - Word16 *old_samples, - Word16 *out_samples, - Word16 dct_length, - Word16 mag_shift) - - inputs: Word16 *coefs - Word16 *old_samples - Word16 dct_length - Word16 mag_shift - - - outputs: Word16 *out_samples - - Description: Converts the mlt_coefs to samples - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 1.91 | 1.91 - -------|--------------|---------------- - MAX | 1.91 | 1.91 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 3.97 | 3.97 | 3.97 - -------|--------------|----------------|---------------- - MAX | 3.97 | 3.97 | 3.97 - -------|--------------|----------------|---------------- - -***************************************************************************/ - -void rmlt_coefs_to_samples(Word16 *coefs, - Word16 *old_samples, - Word16 *out_samples, - Word16 dct_length, - Word16 mag_shift) -{ - - - Word16 index, vals_left; - Word16 new_samples[MAX_DCT_LENGTH]; - Word16 *new_ptr, *old_ptr; - Word16 *win_new, *win_old; - Word16 *out_ptr; - Word16 half_dct_size; - Word32 sum; - - - - half_dct_size = shr_nocheck(dct_length,1); - - /* Perform a Type IV (inverse) DCT on the coefficients */ - dct_type_iv_s(coefs, new_samples, dct_length); - - test(); - if (mag_shift > 0) - { - for(index=0;index<dct_length;index++) - { - new_samples[index] = shr_nocheck(new_samples[index],mag_shift); - move16(); - } - } - else - { - test(); - if (mag_shift < 0) - { - mag_shift = negate(mag_shift); - for(index=0;index<dct_length;index++) - { - new_samples[index] = shl_nocheck(new_samples[index],mag_shift); - move16(); - } - } - - } - - /* Get the first half of the windowed samples */ - - out_ptr = out_samples; - move16(); - test(); - if (dct_length==DCT_LENGTH) - { - win_new = rmlt_to_samples_window; - move16(); - win_old = rmlt_to_samples_window + dct_length; - move16(); - } - else - { - win_new = max_rmlt_to_samples_window; - move16(); - win_old = max_rmlt_to_samples_window + dct_length; - move16(); - } - old_ptr = old_samples; - move16(); - new_ptr = new_samples + half_dct_size; - move16(); - - for (vals_left = half_dct_size; vals_left > 0; vals_left--) - { - sum = 0L; - move32(); - sum = L_mac(sum,*win_new++, *--new_ptr); - sum = L_mac(sum,*--win_old, *old_ptr++); - *out_ptr++ = itu_round(L_shl_nocheck(sum,2)); - move16(); - - } - - /* Get the second half of the windowed samples */ - - for (vals_left = half_dct_size; vals_left > 0; vals_left--) - { - sum = 0L; - move32(); - sum = L_mac(sum,*win_new++, *new_ptr++); - sum = L_mac(sum,negate(*--win_old), *--old_ptr); - *out_ptr++ = itu_round(L_shl_nocheck(sum,2)); - move16(); - } - - /* Save the second half of the new samples for */ - /* next time, when they will be the old samples. */ - - /* pointer arithmetic */ - new_ptr = new_samples + half_dct_size; - move16(); - old_ptr = old_samples; - move16(); - for (vals_left = half_dct_size; vals_left > 0; vals_left--) - { - *old_ptr++ = *new_ptr++; - move16(); - } -} diff --git a/sflphone-common/libs/pjproject/third_party/g7221/decode/dct4_s.c b/sflphone-common/libs/pjproject/third_party/g7221/decode/dct4_s.c deleted file mode 100644 index 0123a13bb46fcebb84317c2407056a7be8ff7c26..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/decode/dct4_s.c +++ /dev/null @@ -1,504 +0,0 @@ -/******************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -********************************************************************************/ - -/******************************************************************************** -* Filename: dct_type_iv_s.c -* -* Purpose: Discrete Cosine Transform, Type IV used for inverse MLT -* -* The basis functions are -* -* cos(PI*(t+0.5)*(k+0.5)/block_length) -* -* for time t and basis function number k. Due to the symmetry of the expression -* in t and k, it is clear that the forward and inverse transforms are the same. -* -*********************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ -#include "defs.h" -#include "count.h" -#include "dct4_s.h" - -/*************************************************************************** - External variable declarations -***************************************************************************/ -extern Word16 syn_bias_7khz[DCT_LENGTH]; -extern Word16 dither[DCT_LENGTH]; -extern Word16 max_dither[MAX_DCT_LENGTH]; - -extern Word16 dct_core_s[DCT_LENGTH_DIV_32][DCT_LENGTH_DIV_32]; -extern cos_msin_t s_cos_msin_2[DCT_LENGTH_DIV_32]; -extern cos_msin_t s_cos_msin_4[DCT_LENGTH_DIV_16]; -extern cos_msin_t s_cos_msin_8[DCT_LENGTH_DIV_8]; -extern cos_msin_t s_cos_msin_16[DCT_LENGTH_DIV_4]; -extern cos_msin_t s_cos_msin_32[DCT_LENGTH_DIV_2]; -extern cos_msin_t s_cos_msin_64[DCT_LENGTH]; -extern cos_msin_t *s_cos_msin_table[]; - -/******************************************************************************** - Function: dct_type_iv_s - - Syntax: void dct_type_iv_s (Word16 *input,Word16 *output,Word16 dct_length) - - - Description: Discrete Cosine Transform, Type IV used for inverse MLT - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 1.74 | 1.74 - -------|--------------|---------------- - MAX | 1.74 | 1.74 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 3.62 | 3.62 | 3.62 - -------|--------------|----------------|---------------- - MAX | 3.62 | 3.62 | 3.62 - -------|--------------|----------------|---------------- - -********************************************************************************/ - -void dct_type_iv_s (Word16 *input,Word16 *output,Word16 dct_length) -{ - Word16 buffer_a[MAX_DCT_LENGTH], buffer_b[MAX_DCT_LENGTH], buffer_c[MAX_DCT_LENGTH]; - Word16 *in_ptr, *in_ptr_low, *in_ptr_high, *next_in_base; - Word16 *out_ptr_low, *out_ptr_high, *next_out_base; - Word16 *out_buffer, *in_buffer, *buffer_swap; - Word16 in_val_low, in_val_high; - Word16 out_val_low, out_val_high; - Word16 in_low_even, in_low_odd; - Word16 in_high_even, in_high_odd; - Word16 out_low_even, out_low_odd; - Word16 out_high_even, out_high_odd; - Word16 *pair_ptr; - Word16 cos_even, cos_odd, msin_even, msin_odd; - Word16 set_span, set_count, set_count_log, pairs_left, sets_left; - Word16 i,k; - Word16 index; - Word16 dummy; - Word32 sum; - cos_msin_t **table_ptr_ptr, *cos_msin_ptr; - - Word32 acca; - Word16 temp; - - Word16 dct_length_log; - Word16 *dither_ptr; - - /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* Do the sum/difference butterflies, the first part of */ - /* converting one N-point transform into 32 - 10 point transforms */ - /* transforms, where N = 1 << DCT_LENGTH_LOG. */ - /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - test(); - if (dct_length==DCT_LENGTH) - { - dct_length_log = DCT_LENGTH_LOG; - move16(); - dither_ptr = dither; - move16(); - } - else - { - dct_length_log = MAX_DCT_LENGTH_LOG; - move16(); - dither_ptr = max_dither; - move16(); - } - - in_buffer = input; - move16(); - out_buffer = buffer_a; - move16(); - - index=0; - move16(); - - i=0; - move16(); - - for (set_count_log = 0; set_count_log <= dct_length_log - 2; set_count_log++) - { - - /*===========================================================*/ - /* Initialization for the loop over sets at the current size */ - /*===========================================================*/ - - /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ - set_span = shr_nocheck(dct_length,set_count_log); - - set_count = shl_nocheck(1,set_count_log); - in_ptr = in_buffer; - move16(); - next_out_base = out_buffer; - move16(); - - /*=====================================*/ - /* Loop over all the sets of this size */ - /*=====================================*/ - temp = sub(index,1); - test(); - if(temp < 0) - { - for (sets_left = set_count;sets_left > 0;sets_left--) - { - - /*||||||||||||||||||||||||||||||||||||||||||||*/ - /* Set up output pointers for the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||*/ - /* pointer arithmetic */ - out_ptr_low = next_out_base; - move16(); - next_out_base += set_span; - move16(); - out_ptr_high = next_out_base; - move16(); - - /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ - /* Loop over all the butterflies in the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ - - do - { - in_val_low = *in_ptr++; - move16(); - in_val_high = *in_ptr++; - move16(); - - /* BEST METHOD OF GETTING RID OF BIAS, BUT COMPUTATIONALLY UNPLEASANT */ - /* ALTERNATIVE METHOD, SMEARS BIAS OVER THE ENTIRE FRAME, COMPUTATIONALLY SIMPLEST. */ - /* IF THIS WORKS, IT'S PREFERABLE */ - - dummy = add(in_val_low,dither_ptr[i++]); - // blp: addition of two 16bits vars, there's no way - // they'll overflow a 32bit var - //acca = L_add(dummy,in_val_high); - acca = dummy + in_val_high; - out_val_low = extract_l(L_shr_nocheck(acca,1)); - - dummy = add(in_val_low,dither_ptr[i++]); - // blp: addition of two 16bits vars, there's no way - // they'll overflow a 32bit var - //acca = L_add(dummy,-in_val_high); - acca = dummy - in_val_high; - out_val_high = extract_l(L_shr_nocheck(acca,1)); - - *out_ptr_low++ = out_val_low; - move16(); - *--out_ptr_high = out_val_high; - move16(); - - test(); - - /* this involves comparison of pointers */ - /* pointer arithmetic */ - - } while (out_ptr_low < out_ptr_high); - - } /* End of loop over sets of the current size */ - } - else - { - for (sets_left = set_count; sets_left > 0; sets_left--) - { - /*||||||||||||||||||||||||||||||||||||||||||||*/ - /* Set up output pointers for the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||*/ - - out_ptr_low = next_out_base; - move16(); - next_out_base += set_span; - move16(); - out_ptr_high = next_out_base; - move16(); - - /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ - /* Loop over all the butterflies in the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ - - do - { - in_val_low = *in_ptr++; - move16(); - in_val_high = *in_ptr++; - move16(); - - out_val_low = add(in_val_low,in_val_high); - out_val_high = add(in_val_low,negate(in_val_high)); - - *out_ptr_low++ = out_val_low; - move16(); - *--out_ptr_high = out_val_high; - move16(); - - test(); - } while (out_ptr_low < out_ptr_high); - - } /* End of loop over sets of the current size */ - } - - /*============================================================*/ - /* Decide which buffers to use as input and output next time. */ - /* Except for the first time (when the input buffer is the */ - /* subroutine input) we just alternate the local buffers. */ - /*============================================================*/ - - in_buffer = out_buffer; - move16(); - - test(); - if (out_buffer == buffer_a) - { - out_buffer = buffer_b; - move16(); - } - else - { - out_buffer = buffer_a; - move16(); - } - - index = add(index,1); - } /* End of loop over set sizes */ - - - /*++++++++++++++++++++++++++++++++*/ - /* Do 32 - 10 point transforms */ - /*++++++++++++++++++++++++++++++++*/ - - pair_ptr = in_buffer; - move16(); - buffer_swap = buffer_c; - move16(); - - for (pairs_left = 1 << (dct_length_log - 1); pairs_left > 0; pairs_left--) - { - for ( k=0; k<CORE_SIZE; k++ ) - { -#if PJ_HAS_INT64 - /* blp: danger danger! not really compatible but faster */ - pj_int64_t sum64=0; - move32(); - - for ( i=0; i<CORE_SIZE; i++ ) - { - sum64 += L_mult(pair_ptr[i], dct_core_s[i][k]); - } - sum = L_saturate(sum64); -#else - sum=0L; - move32(); - - for ( i=0; i<CORE_SIZE; i++ ) - { - sum = L_mac(sum, pair_ptr[i],dct_core_s[i][k]); - } -#endif - buffer_swap[k] = itu_round(sum); - } - - pair_ptr += CORE_SIZE; - move16(); - buffer_swap += CORE_SIZE; - move16(); - } - - for (i=0;i<dct_length;i++) - { - in_buffer[i] = buffer_c[i]; - move16(); - } - - table_ptr_ptr = s_cos_msin_table; - move16(); - - /*++++++++++++++++++++++++++++++*/ - /* Perform rotation butterflies */ - /*++++++++++++++++++++++++++++++*/ - index=0; - move16(); - - for (set_count_log = dct_length_log - 2 ; set_count_log >= 0; set_count_log--) - { - - /*===========================================================*/ - /* Initialization for the loop over sets at the current size */ - /*===========================================================*/ - - /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ - set_span = shr_nocheck(dct_length,set_count_log); - - set_count = shl_nocheck(1,set_count_log); - next_in_base = in_buffer; - move16(); - test(); - if (set_count_log == 0) - { - next_out_base = output; - move16(); - } - else - { - next_out_base = out_buffer; - move16(); - } - - /*=====================================*/ - /* Loop over all the sets of this size */ - /*=====================================*/ - - for (sets_left = set_count; sets_left > 0; sets_left--) - { - - /*|||||||||||||||||||||||||||||||||||||||||*/ - /* Set up the pointers for the current set */ - /*|||||||||||||||||||||||||||||||||||||||||*/ - - in_ptr_low = next_in_base; - move16(); - - temp = shr_nocheck(set_span,1); - in_ptr_high = in_ptr_low + temp; - move16(); - - next_in_base += set_span; - move16(); - - out_ptr_low = next_out_base; - move16(); - - next_out_base += set_span; - move16(); - out_ptr_high = next_out_base; - move16(); - - cos_msin_ptr = *table_ptr_ptr; - move16(); - - /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ - /* Loop over all the butterfly pairs in the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ - - do - { - in_low_even = *in_ptr_low++; - move16(); - in_low_odd = *in_ptr_low++; - move16(); - in_high_even = *in_ptr_high++; - move16(); - in_high_odd = *in_ptr_high++; - move16(); - cos_even = cos_msin_ptr[0].cosine; - move16(); - msin_even = cos_msin_ptr[0].minus_sine; - move16(); - cos_odd = cos_msin_ptr[1].cosine; - move16(); - msin_odd = cos_msin_ptr[1].minus_sine; - move16(); - cos_msin_ptr += 2; - - sum = 0L; - move32(); - - sum = L_mac(sum,cos_even,in_low_even); - sum = L_mac(sum,negate(msin_even),in_high_even); - out_low_even = itu_round(L_shl_nocheck(sum,1)); - - sum = 0L; - move32(); - sum = L_mac(sum,msin_even,in_low_even); - sum = L_mac(sum,cos_even,in_high_even); - out_high_even = itu_round(L_shl_nocheck(sum,1)); - - sum = 0L; - move32(); - sum = L_mac(sum,cos_odd,in_low_odd); - sum = L_mac(sum,msin_odd,in_high_odd); - out_low_odd = itu_round(L_shl_nocheck(sum,1)); - - sum = 0L; - move32(); - sum = L_mac(sum,msin_odd,in_low_odd); - sum = L_mac(sum,negate(cos_odd),in_high_odd); - out_high_odd = itu_round(L_shl_nocheck(sum,1)); - - *out_ptr_low++ = out_low_even; - move16(); - *--out_ptr_high = out_high_even; - move16(); - *out_ptr_low++ = out_low_odd; - move16(); - *--out_ptr_high = out_high_odd; - move16(); - - test(); - } while (out_ptr_low < out_ptr_high); - - } /* End of loop over sets of the current size */ - - /*=============================================*/ - /* Swap input and output buffers for next time */ - /*=============================================*/ - - buffer_swap = in_buffer; - move16(); - in_buffer = out_buffer; - move16(); - out_buffer = buffer_swap; - move16(); - - index = add(index,1); - table_ptr_ptr++; - } - /*------------------------------------ - - ADD IN BIAS FOR OUTPUT - - -----------------------------------*/ - if (dct_length==DCT_LENGTH) - { - for(i=0;i<320;i++) - { - // blp: addition of two 16bits vars, there's no way - // they'll overflow a 32bit var - //sum = L_add(output[i],syn_bias_7khz[i]); - sum = output[i] + syn_bias_7khz[i]; - acca = L_sub(sum,32767); - test(); - if (acca > 0) - { - sum = 32767L; - move32(); - } - // blp: addition of two 16bits vars, there's no way - // they'll overflow 32bit var - //acca = L_add(sum,32768L); - acca = sum + 32768; - test(); - if (acca < 0) - { - sum = -32768L; - move32(); - } - output[i] = extract_l(sum); - } - } -} - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/decode/dct4_s.h b/sflphone-common/libs/pjproject/third_party/g7221/decode/dct4_s.h deleted file mode 100644 index 010e52d82aa7b2e14c313427a94775e69ce18a7a..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/decode/dct4_s.h +++ /dev/null @@ -1,856 +0,0 @@ -/*********************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***********************************************************************/ - -/*********************************************************************** - Filename: dct4_s.h - - Purpose: Contains tables used by dct4_s.c - - Design Notes: - -***********************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ - -typedef struct -{ - Word16 cosine; - Word16 minus_sine; -} cos_msin_t; - -/*************************************************************************** - The dct_core_s table was generated by the following code - - for(i=0;i<10;++i) - { - for(k=0;k<10;++k) - { - dct_core_s[i][k]=(short) (FTOI(((.9*32768.)*cos(3.1415926*(k+0.5)*(i+0.5)/10.)))); - } - } -***************************************************************************/ -Word16 dct_core_s[10][10] = { -{ 29400, 28676, 27246, 25145, 22425, 19153, 15409, 11286, 6885, 2314 }, -{ 28676, 22425, 11286, -2314, -15409, -25145, -29400, -27246, -19153, -6885 }, -{ 27246, 11286, -11286, -27246, -27246, -11286, 11286, 27246, 27246, 11286 }, -{ 25145, -2314, -27246, -22425, 6885, 28676, 19153, -11286, -29400, -15409 }, -{ 22425, -15409, -27246, 6885, 29400, 2314, -28676, -11286, 25145, 19153 }, -{ 19153, -25145, -11286, 28676, 2314, -29400, 6885, 27246, -15409, -22425 }, -{ 15409, -29400, 11286, 19153, -28676, 6885, 22425, -27246, 2314, 25145 }, -{ 11286, -27246, 27246, -11286, -11286, 27246, -27246, 11286, 11286, -27246 }, -{ 6885, -19153, 27246, -29400, 25145, -15409, 2314, 11286, -22425, 28676 }, -{ 2314, -6885, 11286, -15409, 19153, -22425, 25145, -27246, 28676, -29400 } -}; - -Word16 syn_bias_7khz[DCT_LENGTH] = { - -4, 4, -5, -2, 0, -4, 6, 2, -2, -4, - -3, 3, 0, 0, -2, 4, 0, 0, 3, -6, - 8, 5, 4, 5, -8, 0, -2, 0, 0, -3, - 3, 0, 0, 0, 1, -1, -2, 0, 0, 2, - -2, -5, -2, 3, 2, -1, -1, -6, 3, 1, - -7, 4, 4, 0, 1, 4, 1, 0, 1, -5, - -1, 1, -6, 0, -1, -1, 3, 0, -2, 1, - 2, -4, 0, 9, 0, -3, 1, 1, 1, 0, - -3, -2, -1, -4, -2, 0, 5, 2, -3, 5, - 0, -2, 4, 4, 0, -6, -4, 2, 0, 0, - 0, -1, -1, -2, 0, 6, 1, 0, 0, -1, - 0, -4, -1, 0, -4, 1, -1, -5, 0, 1, - 2, 4, 0, -8, -4, 0, -2, -2, 2, 5, - -3, -1, 1, -4, 0, 0, 0, -1, -3, 0, - -5, -4, 0, -2, 0, 7, 1, 0, 5, -2, - -1, 2, 2, -2, 3, 7, -3, 4, 1, -4, - 0, 0, 3, -7, -5, 0, 0, 4, 0, -2, - -1, 0, -5, 0, 2, 0, 11, 5, -1, 0, - 2, 2, -2, -2, 5, 4, -3, 1, 0, -2, - 1, 3, 2, 0, 1, 0, 0, 0, 5, 6, - -2, -1, 0, 2, 3, 2, 0, -3, 4, 5, - 0, -1, 0, 3, 1, -2, -3, -2, -1, 2, - -1, -1, -2, -7, 4, 6, -5, -6, -3, -4, - 0, 2, -5, -2, 3, 0, 0, 0, 2, -2, - -4, 3, 3, 1, 0, 0, 4, -1, 8, 13, - 1, 2, 0, 2, 0, -1, 4, -3, 1, 0, - -1, 3, 0, 0, -5, 0, 6, 2, 4, 5, - 2, -1, -1, 3, 6, 1, 1, 2, -4, 0, - -1, -6, -2, -2, 2, 1, 2, 6, 2, 0, - -2, -2, 0, -1, 2, 0, 0, 3, -2, 1, - 3, 1, 2, -1, -2, 2, 2, -4, 0, 0, - -3, 0, -4, -3, 6, 7, 2, 2, 0, -3}; - -Word16 dither[DCT_LENGTH]= { - 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, - 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, - 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, - 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, - 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, - 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, - 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, - 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, - 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, - 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, - 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, - 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, - 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, - 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, - 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, - 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, - 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, - 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, - 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, - 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, - 1, 1, 1, 0, 1, 0, 0, 0, 1, 0}; - -Word16 max_dither[MAX_DCT_LENGTH]= { - 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, - 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, - 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, - 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, - 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, - 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, - 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, - 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, - 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, - 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, - 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, - 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, - 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, - 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, - 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, - 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, - 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, - 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, - 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, - 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, - 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, - 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, - 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, - 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, - 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, - 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, - 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, - 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, - 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, - 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, - 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, - 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, - 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, - 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, - 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, - 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, - 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, - 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, - 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, - 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, - 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, - 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, - 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, - 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, - 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, - 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, - 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, - 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, - 0, 1, 0, 1, 0, 1, 0, 0, 0, 0 -}; - - -/******************************************************************************** - The s_cos_min tables were generated by the following code: - double angle, scale; - int index; - - for (index = 0;index < length;index++) - { - angle = scale * ((double)index + 0.5); - table[index].cosine = (short) (FTOI((18427)* cos(angle))); - table[index].minus_sine = (short) (FTOI((18427)*(-sin(angle)))); - } - - -********************************************************************************/ - -cos_msin_t s_cos_msin_2[DCT_LENGTH_DIV_32] = { - { 18413 , -723 } , - { 18299 , -2166 } , - { 18073 , -3595 } , - { 17735 , -5002 } , - { 17288 , -6378 } , - { 16734 , -7715 } , - { 16077 , -9004 } , - { 15321 , -10237 } , - { 14471 , -11408 } , - { 13531 , -12508 } - }; -cos_msin_t s_cos_msin_4[DCT_LENGTH_DIV_16] = { - { 18423 , -362 } , - { 18395 , -1085 } , - { 18338 , -1806 } , - { 18253 , -2525 } , - { 18140 , -3239 } , - { 17999 , -3949 } , - { 17830 , -4653 } , - { 17634 , -5349 } , - { 17410 , -6037 } , - { 17159 , -6716 } , - { 16883 , -7385 } , - { 16580 , -8042 } , - { 16251 , -8686 } , - { 15898 , -9318 } , - { 15520 , -9935 } , - { 15118 , -10536 } , - { 14692 , -11122 } , - { 14244 , -11690 } , - { 13774 , -12240 } , - { 13283 , -12772 } - }; -cos_msin_t s_cos_msin_8[DCT_LENGTH_DIV_8] = { - { 18426 , -181 } , - { 18419 , -543 } , - { 18405 , -904 } , - { 18384 , -1265 } , - { 18355 , -1626 } , - { 18320 , -1986 } , - { 18277 , -2345 } , - { 18228 , -2704 } , - { 18171 , -3061 } , - { 18107 , -3417 } , - { 18037 , -3772 } , - { 17959 , -4126 } , - { 17875 , -4477 } , - { 17783 , -4827 } , - { 17685 , -5176 } , - { 17580 , -5522 } , - { 17468 , -5866 } , - { 17350 , -6208 } , - { 17225 , -6547 } , - { 17093 , -6884 } , - { 16954 , -7219 } , - { 16809 , -7550 } , - { 16658 , -7879 } , - { 16500 , -8204 } , - { 16336 , -8526 } , - { 16165 , -8846 } , - { 15988 , -9161 } , - { 15805 , -9473 } , - { 15616 , -9782 } , - { 15421 , -10087 } , - { 15220 , -10387 } , - { 15013 , -10684 } , - { 14801 , -10977 } , - { 14582 , -11265 } , - { 14358 , -11550 } , - { 14129 , -11829 } , - { 13894 , -12104 } , - { 13654 , -12375 } , - { 13408 , -12641 } , - { 13157 , -12901 } - }; -cos_msin_t s_cos_msin_16[DCT_LENGTH_DIV_4] = { - { 18427 , -90 } , - { 18425 , -271 } , - { 18421 , -452 } , - { 18416 , -633 } , - { 18409 , -814 } , - { 18400 , -995 } , - { 18389 , -1175 } , - { 18377 , -1356 } , - { 18363 , -1536 } , - { 18347 , -1716 } , - { 18329 , -1896 } , - { 18310 , -2076 } , - { 18288 , -2256 } , - { 18265 , -2435 } , - { 18241 , -2614 } , - { 18214 , -2793 } , - { 18186 , -2972 } , - { 18156 , -3150 } , - { 18124 , -3328 } , - { 18090 , -3506 } , - { 18055 , -3684 } , - { 18018 , -3861 } , - { 17979 , -4037 } , - { 17939 , -4214 } , - { 17897 , -4390 } , - { 17853 , -4565 } , - { 17807 , -4740 } , - { 17760 , -4915 } , - { 17710 , -5089 } , - { 17660 , -5262 } , - { 17607 , -5436 } , - { 17553 , -5608 } , - { 17497 , -5780 } , - { 17439 , -5952 } , - { 17380 , -6123 } , - { 17319 , -6293 } , - { 17257 , -6463 } , - { 17192 , -6632 } , - { 17126 , -6800 } , - { 17059 , -6968 } , - { 16990 , -7135 } , - { 16919 , -7302 } , - { 16846 , -7467 } , - { 16772 , -7632 } , - { 16696 , -7797 } , - { 16619 , -7960 } , - { 16540 , -8123 } , - { 16459 , -8285 } , - { 16377 , -8446 } , - { 16294 , -8607 } , - { 16208 , -8766 } , - { 16121 , -8925 } , - { 16033 , -9083 } , - { 15943 , -9240 } , - { 15852 , -9396 } , - { 15759 , -9551 } , - { 15664 , -9705 } , - { 15568 , -9858 } , - { 15471 , -10011 } , - { 15372 , -10162 } , - { 15271 , -10313 } , - { 15169 , -10462 } , - { 15066 , -10610 } , - { 14961 , -10758 } , - { 14854 , -10904 } , - { 14747 , -11049 } , - { 14637 , -11194 } , - { 14527 , -11337 } , - { 14415 , -11479 } , - { 14301 , -11620 } , - { 14187 , -11760 } , - { 14071 , -11898 } , - { 13953 , -12036 } , - { 13834 , -12172 } , - { 13714 , -12308 } , - { 13593 , -12442 } , - { 13470 , -12575 } , - { 13346 , -12706 } , - { 13220 , -12837 } , - { 13094 , -12966 } - }; -cos_msin_t s_cos_msin_32[DCT_LENGTH_DIV_2] = { - { 18427 , -45 } , - { 18427 , -136 } , - { 18426 , -226 } , - { 18424 , -317 } , - { 18423 , -407 } , - { 18420 , -497 } , - { 18418 , -588 } , - { 18415 , -678 } , - { 18411 , -769 } , - { 18407 , -859 } , - { 18403 , -949 } , - { 18398 , -1040 } , - { 18392 , -1130 } , - { 18387 , -1220 } , - { 18380 , -1310 } , - { 18374 , -1401 } , - { 18367 , -1491 } , - { 18359 , -1581 } , - { 18351 , -1671 } , - { 18343 , -1761 } , - { 18334 , -1851 } , - { 18324 , -1941 } , - { 18315 , -2031 } , - { 18305 , -2121 } , - { 18294 , -2211 } , - { 18283 , -2301 } , - { 18271 , -2390 } , - { 18259 , -2480 } , - { 18247 , -2570 } , - { 18234 , -2659 } , - { 18221 , -2749 } , - { 18207 , -2838 } , - { 18193 , -2927 } , - { 18178 , -3017 } , - { 18163 , -3106 } , - { 18148 , -3195 } , - { 18132 , -3284 } , - { 18116 , -3373 } , - { 18099 , -3462 } , - { 18082 , -3551 } , - { 18064 , -3639 } , - { 18046 , -3728 } , - { 18027 , -3816 } , - { 18009 , -3905 } , - { 17989 , -3993 } , - { 17969 , -4081 } , - { 17949 , -4170 } , - { 17928 , -4258 } , - { 17907 , -4346 } , - { 17886 , -4434 } , - { 17864 , -4521 } , - { 17841 , -4609 } , - { 17818 , -4696 } , - { 17795 , -4784 } , - { 17772 , -4871 } , - { 17747 , -4958 } , - { 17723 , -5045 } , - { 17698 , -5132 } , - { 17672 , -5219 } , - { 17647 , -5306 } , - { 17620 , -5392 } , - { 17594 , -5479 } , - { 17567 , -5565 } , - { 17539 , -5651 } , - { 17511 , -5737 } , - { 17483 , -5823 } , - { 17454 , -5909 } , - { 17425 , -5994 } , - { 17395 , -6080 } , - { 17365 , -6165 } , - { 17335 , -6250 } , - { 17304 , -6335 } , - { 17272 , -6420 } , - { 17241 , -6505 } , - { 17208 , -6590 } , - { 17176 , -6674 } , - { 17143 , -6758 } , - { 17110 , -6842 } , - { 17076 , -6926 } , - { 17042 , -7010 } , - { 17007 , -7093 } , - { 16972 , -7177 } , - { 16937 , -7260 } , - { 16901 , -7343 } , - { 16864 , -7426 } , - { 16828 , -7509 } , - { 16791 , -7591 } , - { 16753 , -7674 } , - { 16715 , -7756 } , - { 16677 , -7838 } , - { 16638 , -7919 } , - { 16599 , -8001 } , - { 16560 , -8082 } , - { 16520 , -8164 } , - { 16480 , -8245 } , - { 16439 , -8325 } , - { 16398 , -8406 } , - { 16357 , -8486 } , - { 16315 , -8567 } , - { 16272 , -8647 } , - { 16230 , -8726 } , - { 16187 , -8806 } , - { 16143 , -8885 } , - { 16100 , -8964 } , - { 16055 , -9043 } , - { 16011 , -9122 } , - { 15966 , -9200 } , - { 15920 , -9279 } , - { 15875 , -9357 } , - { 15829 , -9435 } , - { 15782 , -9512 } , - { 15735 , -9589 } , - { 15688 , -9667 } , - { 15640 , -9744 } , - { 15592 , -9820 } , - { 15544 , -9897 } , - { 15495 , -9973 } , - { 15446 , -10049 } , - { 15396 , -10124 } , - { 15347 , -10200 } , - { 15296 , -10275 } , - { 15246 , -10350 } , - { 15195 , -10425 } , - { 15143 , -10499 } , - { 15092 , -10573 } , - { 15040 , -10647 } , - { 14987 , -10721 } , - { 14934 , -10794 } , - { 14881 , -10868 } , - { 14828 , -10941 } , - { 14774 , -11013 } , - { 14719 , -11086 } , - { 14665 , -11158 } , - { 14610 , -11230 } , - { 14555 , -11301 } , - { 14499 , -11372 } , - { 14443 , -11444 } , - { 14387 , -11514 } , - { 14330 , -11585 } , - { 14273 , -11655 } , - { 14216 , -11725 } , - { 14158 , -11795 } , - { 14100 , -11864 } , - { 14041 , -11933 } , - { 13983 , -12002 } , - { 13924 , -12070 } , - { 13864 , -12138 } , - { 13804 , -12206 } , - { 13744 , -12274 } , - { 13684 , -12341 } , - { 13623 , -12408 } , - { 13562 , -12475 } , - { 13501 , -12541 } , - { 13439 , -12608 } , - { 13377 , -12673 } , - { 13314 , -12739 } , - { 13252 , -12804 } , - { 13189 , -12869 } , - { 13125 , -12934 } , - { 13062 , -12998 } - }; -cos_msin_t s_cos_msin_64[DCT_LENGTH] = { -{18426, -21}, -{18426, -66}, -{18426, -110}, -{18426, -154}, -{18425, -198}, -{18425, -242}, -{18424, -286}, -{18424, -331}, -{18423, -374}, -{18421, -419}, -{18421, -463}, -{18419, -507}, -{18418, -552}, -{18417, -595}, -{18415, -639}, -{18414, -684}, -{18412, -728}, -{18410, -772}, -{18408, -816}, -{18406, -860}, -{18404, -904}, -{18402, -949}, -{18400, -992}, -{18397, -1037}, -{18394, -1081}, -{18392, -1125}, -{18389, -1169}, -{18387, -1213}, -{18384, -1257}, -{18380, -1301}, -{18378, -1345}, -{18374, -1389}, -{18371, -1433}, -{18367, -1477}, -{18364, -1521}, -{18360, -1566}, -{18356, -1609}, -{18352, -1653}, -{18348, -1697}, -{18344, -1742}, -{18339, -1785}, -{18335, -1829}, -{18331, -1873}, -{18326, -1917}, -{18322, -1961}, -{18317, -2005}, -{18312, -2049}, -{18307, -2092}, -{18302, -2137}, -{18297, -2180}, -{18292, -2224}, -{18286, -2268}, -{18281, -2312}, -{18275, -2356}, -{18270, -2399}, -{18264, -2443}, -{18258, -2487}, -{18252, -2531}, -{18246, -2574}, -{18240, -2618}, -{18233, -2662}, -{18227, -2706}, -{18220, -2749}, -{18214, -2793}, -{18207, -2836}, -{18200, -2880}, -{18193, -2924}, -{18186, -2967}, -{18179, -3011}, -{18172, -3055}, -{18164, -3098}, -{18157, -3142}, -{18149, -3185}, -{18141, -3229}, -{18134, -3272}, -{18126, -3316}, -{18118, -3359}, -{18109, -3403}, -{18101, -3446}, -{18094, -3489}, -{18085, -3533}, -{18076, -3576}, -{18068, -3619}, -{18059, -3663}, -{18050, -3706}, -{18041, -3749}, -{18032, -3792}, -{18023, -3836}, -{18014, -3879}, -{18005, -3922}, -{17995, -3965}, -{17986, -4008}, -{17975, -4051}, -{17966, -4094}, -{17956, -4138}, -{17946, -4180}, -{17936, -4224}, -{17926, -4266}, -{17916, -4309}, -{17905, -4353}, -{17895, -4395}, -{17884, -4438}, -{17874, -4481}, -{17863, -4524}, -{17852, -4567}, -{17841, -4609}, -{17830, -4652}, -{17819, -4695}, -{17807, -4738}, -{17796, -4780}, -{17784, -4823}, -{17772, -4865}, -{17761, -4908}, -{17749, -4951}, -{17738, -4993}, -{17725, -5036}, -{17713, -5078}, -{17701, -5121}, -{17689, -5163}, -{17676, -5205}, -{17664, -5248}, -{17651, -5290}, -{17638, -5333}, -{17626, -5375}, -{17613, -5417}, -{17599, -5459}, -{17586, -5501}, -{17573, -5544}, -{17560, -5586}, -{17546, -5627}, -{17533, -5670}, -{17519, -5712}, -{17505, -5753}, -{17492, -5795}, -{17478, -5837}, -{17464, -5879}, -{17450, -5921}, -{17435, -5963}, -{17421, -6005}, -{17406, -6046}, -{17392, -6088}, -{17377, -6130}, -{17363, -6172}, -{17348, -6213}, -{17333, -6254}, -{17318, -6296}, -{17303, -6338}, -{17288, -6379}, -{17272, -6420}, -{17257, -6462}, -{17241, -6503}, -{17225, -6545}, -{17210, -6586}, -{17194, -6627}, -{17178, -6668}, -{17162, -6709}, -{17145, -6750}, -{17130, -6791}, -{17113, -6832}, -{17097, -6874}, -{17080, -6915}, -{17064, -6956}, -{17047, -6996}, -{17030, -7037}, -{17013, -7078}, -{16996, -7119}, -{16979, -7159}, -{16962, -7200}, -{16945, -7241}, -{16927, -7281}, -{16910, -7322}, -{16892, -7362}, -{16874, -7403}, -{16856, -7444}, -{16838, -7484}, -{16821, -7524}, -{16802, -7564}, -{16784, -7605}, -{16766, -7645}, -{16748, -7685}, -{16729, -7725}, -{16711, -7765}, -{16692, -7805}, -{16674, -7845}, -{16654, -7885}, -{16635, -7925}, -{16616, -7964}, -{16597, -8004}, -{16578, -8044}, -{16559, -8084}, -{16539, -8124}, -{16520, -8164}, -{16500, -8203}, -{16480, -8242}, -{16461, -8282}, -{16441, -8322}, -{16421, -8361}, -{16401, -8400}, -{16380, -8440}, -{16360, -8479}, -{16340, -8518}, -{16319, -8557}, -{16299, -8597}, -{16278, -8635}, -{16257, -8674}, -{16237, -8713}, -{16215, -8752}, -{16195, -8791}, -{16173, -8829}, -{16152, -8868}, -{16131, -8907}, -{16110, -8946}, -{16088, -8985}, -{16067, -9023}, -{16045, -9061}, -{16023, -9100}, -{16001, -9138}, -{15979, -9176}, -{15957, -9215}, -{15935, -9253}, -{15913, -9291}, -{15891, -9329}, -{15868, -9367}, -{15846, -9405}, -{15823, -9443}, -{15800, -9481}, -{15778, -9519}, -{15755, -9557}, -{15732, -9595}, -{15709, -9632}, -{15686, -9670}, -{15662, -9708}, -{15639, -9745}, -{15615, -9782}, -{15592, -9820}, -{15569, -9857}, -{15544, -9894}, -{15521, -9932}, -{15497, -9969}, -{15473, -10006}, -{15449, -10043}, -{15425, -10080}, -{15401, -10117}, -{15377, -10154}, -{15352, -10191}, -{15327, -10227}, -{15303, -10264}, -{15278, -10301}, -{15254, -10337}, -{15229, -10374}, -{15204, -10411}, -{15180, -10447}, -{15154, -10483}, -{15129, -10519}, -{15104, -10556}, -{15078, -10592}, -{15053, -10628}, -{15027, -10664}, -{15002, -10700}, -{14976, -10736}, -{14950, -10772}, -{14924, -10808}, -{14898, -10844}, -{14872, -10879}, -{14846, -10915}, -{14820, -10950}, -{14794, -10985}, -{14767, -11021}, -{14741, -11056}, -{14714, -11092}, -{14687, -11127}, -{14661, -11162}, -{14635, -11197}, -{14607, -11232}, -{14581, -11267}, -{14554, -11302}, -{14526, -11337}, -{14499, -11372}, -{14472, -11407}, -{14444, -11441}, -{14417, -11476}, -{14389, -11511}, -{14362, -11545}, -{14334, -11579}, -{14306, -11614}, -{14278, -11648}, -{14251, -11682}, -{14222, -11716}, -{14194, -11750}, -{14166, -11784}, -{14137, -11818}, -{14109, -11852}, -{14081, -11886}, -{14053, -11919}, -{14023, -11953}, -{13995, -11987}, -{13966, -12020}, -{13937, -12054}, -{13909, -12087}, -{13879, -12120}, -{13851, -12153}, -{13821, -12187}, -{13792, -12220}, -{13763, -12253}, -{13733, -12286}, -{13704, -12319}, -{13674, -12351}, -{13645, -12385}, -{13615, -12417}, -{13585, -12450}, -{13555, -12482}, -{13525, -12514}, -{13495, -12546}, -{13465, -12579}, -{13435, -12611}, -{13405, -12644}, -{13374, -12676}, -{13345, -12708}, -{13314, -12739}, -{13283, -12772} -}; - - - -cos_msin_t *s_cos_msin_table[] = {s_cos_msin_2, s_cos_msin_4, - s_cos_msin_8, s_cos_msin_16, - s_cos_msin_32, s_cos_msin_64 - }; - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/decode/decoder.c b/sflphone-common/libs/pjproject/third_party/g7221/decode/decoder.c deleted file mode 100644 index ab81a300b20d1941c00be747f3f2393d7084e988..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/decode/decoder.c +++ /dev/null @@ -1,1113 +0,0 @@ -/*************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***************************************************************************/ - -/*************************************************************************** - Filename: decoder.c - - Purpose: Contains files used to implement the G.722.1 Annex C decoder - - Design Notes: - -***************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ -#include "defs.h" -#include "tables.h" -#include "huff_def.h" -#include "count.h" - - -/*************************************************************************** - Function: decoder - - Syntax: void decoder(Bit_Obj *bitobj, - Rand_Obj *randobj, - Word16 number_of_regions, - Word16 *decoder_mlt_coefs, - Word16 *p_mag_shift, - Word16 *p_old_mag_shift, - Word16 *old_decoder_mlt_coefs, - Word16 frame_error_flag) - - inputs: Bit_Obj *bitobj - Rand_Obj *randobj - Word16 number_of_regions - Word16 *p_old_mag_shift - Word16 *old_decoder_mlt_coefs - Word16 frame_error_flag - - outputs: Word16 *decoder_mlt_coefs, - Word16 *p_mag_shift, - - - - Description: Decodes the out_words into mlt coefs using G.722.1 Annex C - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|-------------|---------------- - AVG | 0.84 | 0.94 - -------|-------------|---------------- - MAX | 0.90 | 1.00 - -------|-------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|-------------|----------------|---------------- - AVG | 1.31 | 1.56 | 1.88 - -------|-------------|----------------|---------------- - MAX | 1.59 | 1.80 | 1.98 - -------|-------------|----------------|---------------- - -***************************************************************************/ -void decoder(Bit_Obj *bitobj, - Rand_Obj *randobj, - Word16 number_of_regions, - Word16 *decoder_mlt_coefs, - Word16 *p_mag_shift, - Word16 *p_old_mag_shift, - Word16 *old_decoder_mlt_coefs, - Word16 frame_error_flag) -{ - - - Word16 absolute_region_power_index[MAX_NUMBER_OF_REGIONS]; - Word16 decoder_power_categories[MAX_NUMBER_OF_REGIONS]; - Word16 decoder_category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1]; - UWord16 categorization_control; - Word16 decoder_region_standard_deviation[MAX_NUMBER_OF_REGIONS]; - Word16 i; - - Word16 num_categorization_control_bits; - Word16 num_categorization_control_possibilities; - Word16 number_of_coefs; - Word16 number_of_valid_coefs; - - - test(); - if (number_of_regions==NUMBER_OF_REGIONS) - { - num_categorization_control_bits = NUM_CATEGORIZATION_CONTROL_BITS; - move16(); - num_categorization_control_possibilities = NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; - move16(); - number_of_coefs = DCT_LENGTH; - move16(); - number_of_valid_coefs = NUMBER_OF_VALID_COEFS; - move16(); - } - else - { - num_categorization_control_bits = MAX_NUM_CATEGORIZATION_CONTROL_BITS; - move16(); - num_categorization_control_possibilities = MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; - move16(); - number_of_coefs = MAX_DCT_LENGTH; - move16(); - number_of_valid_coefs = MAX_NUMBER_OF_VALID_COEFS; - move16(); - } - - test(); - if (frame_error_flag == 0) - { - - /* convert the bits to absolute region power index and decoder_region_standard_deviation */ - - decode_envelope(bitobj, - number_of_regions, - decoder_region_standard_deviation, - absolute_region_power_index, - p_mag_shift); - - /* fill the categorization_control with NUM_CATEGORIZATION_CONTROL_BITS */ - categorization_control = 0; - for (i=0; i<num_categorization_control_bits; i++) - { - get_next_bit(bitobj); - categorization_control = shl_nocheck(categorization_control,1); - categorization_control = add(categorization_control,bitobj->next_bit); - } - - bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,num_categorization_control_bits); - - /* obtain decoder power categories and category balances */ - /* based on the absolute region power index */ - categorize(bitobj->number_of_bits_left, - number_of_regions, - num_categorization_control_possibilities, - absolute_region_power_index, - decoder_power_categories, - decoder_category_balances); - - /* perform adjustmaents to the power categories and category balances based on the cat control */ - rate_adjust_categories(categorization_control, - decoder_power_categories, - decoder_category_balances); - - /* decode the quantized bits into mlt coefs */ - decode_vector_quantized_mlt_indices(bitobj, - randobj, - number_of_regions, - decoder_region_standard_deviation, - decoder_power_categories, - decoder_mlt_coefs); - - /* test for frame errors */ - test_4_frame_errors(bitobj, - number_of_regions, - num_categorization_control_possibilities, - &frame_error_flag, - categorization_control, - absolute_region_power_index); - } - - /* perform error handling operations */ - error_handling(number_of_coefs, - number_of_valid_coefs, - &frame_error_flag, - decoder_mlt_coefs, - old_decoder_mlt_coefs, - p_mag_shift, - p_old_mag_shift); - -} - -/*************************************************************************** - Function: decode_envelope - - Syntax: void decode_envelope(Bit_Obj *bitobj, - Word16 number_of_regions, - Word16 *decoder_region_standard_deviation, - Word16 *absolute_region_power_index, - Word16 *p_mag_shift) - - inputs: Bit_Obj *bitobj - Word16 number_of_regions - - - outputs: Word16 *decoder_region_standard_deviation - Word16 *absolute_region_power_index - Word16 *p_mag_shift - - - Description: Recover differential_region_power_index from code bits - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.04 | 0.04 - -------|--------------|---------------- - MAX | 0.05 | 0.05 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.08 | 0.08 | 0.08 - -------|--------------|----------------|---------------- - MAX | 0.10 | 0.10 | 0.10 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void decode_envelope(Bit_Obj *bitobj, - Word16 number_of_regions, - Word16 *decoder_region_standard_deviation, - Word16 *absolute_region_power_index, - Word16 *p_mag_shift) - -{ - Word16 region; - Word16 i; - Word16 index; - Word16 differential_region_power_index[MAX_NUMBER_OF_REGIONS]; - Word16 max_index; - - Word16 temp; - Word16 temp1; - Word16 temp2; - Word32 acca; - - index = 0; - move16(); - - /* get 5 bits from the current code word */ - for (i=0; i<5; i++) - { - get_next_bit(bitobj); - index = shl_nocheck(index,1); - index = add(index,bitobj->next_bit); - } - bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,5); - - /* ESF_ADJUSTMENT_TO_RMS_INDEX compensates for the current (9/30/96) - IMLT being scaled to high by the ninth power of sqrt(2). */ - differential_region_power_index[0] = sub(index,ESF_ADJUSTMENT_TO_RMS_INDEX); - move16(); - - /* obtain differential_region_power_index */ - for (region=1; region<number_of_regions; region++) - { - index = 0; - move16(); - do - { - get_next_bit(bitobj); - test(); - if (bitobj->next_bit == 0) - { - index = differential_region_power_decoder_tree[region][index][0]; - move16(); - } - else - { - index = differential_region_power_decoder_tree[region][index][1]; - move16(); - } - bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); - test(); - } while (index > 0); - - differential_region_power_index[region] = negate(index); - move16(); - } - - /* Reconstruct absolute_region_power_index[] from differential_region_power_index[]. */ - absolute_region_power_index[0] = differential_region_power_index[0]; - move16(); - for (region=1; region<number_of_regions; region++) - { - acca = L_add(absolute_region_power_index[region-1],differential_region_power_index[region]); - acca = L_add(acca,DRP_DIFF_MIN); - absolute_region_power_index[region] = extract_l(acca); - } - - /* Reconstruct decoder_region_standard_deviation[] from absolute_region_power_index[]. */ - /* DEBUG!!!! - This integer method jointly computes the mag_shift - and the standard deviations already mag_shift compensated. It - relies on REGION_POWER_STEPSIZE_DB being exactly 3.010299957 db - or a square root of 2 chnage in standard deviation. If - REGION_POWER_STEPSIZE_DB changes, this software must be - reworked. */ - - temp = 0; - move16(); - max_index = 0; - move16(); - for (region=0; region<number_of_regions; region++) - { - acca = L_add(absolute_region_power_index[region],REGION_POWER_TABLE_NUM_NEGATIVES); - i = extract_l(acca); - - temp1 = sub(i,max_index); - test(); - if (temp1 > 0) - { - max_index = i; - move16(); - } - temp = add(temp,int_region_standard_deviation_table[i]); - } - i = 9; - move16(); - - temp1 = sub(temp,8); - temp2 = sub(max_index,28); - test(); - test(); - logic16(); - test(); - logic16(); - while ((i >= 0) && ((temp1 >= 0) || (temp2 > 0))) - { - i = sub(i,1); - temp = shr_nocheck(temp,1); - max_index = sub(max_index,2); - temp1 = sub(temp,8); - temp2 = sub(max_index,28); - test(); - test(); - logic16(); - test(); - logic16(); - } - - *p_mag_shift = i; - move16(); - - /* pointer arithmetic */ - temp = (Word16 )(REGION_POWER_TABLE_NUM_NEGATIVES + (*p_mag_shift * 2)); - - for (region=0; region<number_of_regions; region++) - { - acca = L_add(absolute_region_power_index[region],temp); - i = extract_l(acca); - decoder_region_standard_deviation[region] = int_region_standard_deviation_table[i]; - move16(); - } - -} - -/*************************************************************************** - Function: rate_adjust_categories - - Syntax: void rate_adjust_categories(Word16 categorization_control, - Word16 *decoder_power_categories, - Word16 *decoder_category_balances) - - inputs: Word16 categorization_control, - Word16 *decoder_power_categories, - Word16 *decoder_category_balances - - outputs: Word16 categorization_control, - Word16 *decoder_power_categories, - - Description: Adjust the power categories based on the categorization control - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.00 | 0.00 - -------|--------------|---------------- - MAX | 0.00 | 0.00 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - MAX | 0.01 | 0.01 | 0.01 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void rate_adjust_categories(Word16 categorization_control, - Word16 *decoder_power_categories, - Word16 *decoder_category_balances) -{ - Word16 i; - Word16 region; - - i = 0; - move16(); - - test(); - while (categorization_control > 0) - { - region = decoder_category_balances[i++]; - move16(); - decoder_power_categories[region] = add(decoder_power_categories[region],1); - move16(); - categorization_control = sub(categorization_control,1); - } - -} - -/*************************************************************************** - Function: decode_vector_quantized_mlt_indices - - Syntax: void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, - Rand_Obj *randobj, - Word16 number_of_regions, - Word16 *decoder_region_standard_deviation, - Word16 *decoder_power_categories, - Word16 *decoder_mlt_coefs) - inputs: Bit_Obj *bitobj - Rand_Obj *randobj - Word16 number_of_regions - Word16 *decoder_region_standard_deviation - Word16 *decoder_power_categories - - - outputs: Word16 *decoder_mlt_coefs - - - Description: Decode MLT coefficients - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.60 | 0.72 - -------|--------------|---------------- - MAX | 0.67 | 0.76 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.77 | 0.98 | 1.28 - -------|--------------|----------------|---------------- - MAX | 1.05 | 1.18 | 1.36 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void decode_vector_quantized_mlt_indices(Bit_Obj *bitobj, - Rand_Obj *randobj, - Word16 number_of_regions, - Word16 *decoder_region_standard_deviation, - Word16 *decoder_power_categories, - Word16 *decoder_mlt_coefs) -{ - Word16 standard_deviation; - Word16 *decoder_mlt_ptr; - Word16 decoder_mlt_value; - Word16 noifillpos; - Word16 noifillneg; - Word16 noise_fill_factor[3] = {5793,8192,23170}; - Word16 region; - Word16 category; - Word16 j,n; - Word16 k[MAX_VECTOR_DIMENSION]; - Word16 vec_dim; - Word16 num_vecs; - Word16 index; - Word16 bit=0; - Word16 signs_index=0; - Word16 num_sign_bits; - Word16 ran_out_of_bits_flag; - Word16 *decoder_table_ptr; - Word16 random_word; - - Word16 temp1; - Word16 temp; - Word32 acca; - - ran_out_of_bits_flag = 0; - move16(); - - for (region=0; region<number_of_regions; region++) - { - category = (Word16)decoder_power_categories[region]; - move16(); - acca = L_mult0(region,REGION_SIZE); - index = extract_l(acca); - decoder_mlt_ptr = &decoder_mlt_coefs[index]; - move16(); - standard_deviation = decoder_region_standard_deviation[region]; - move16(); - - temp = sub(category,7); - test(); - if (temp < 0) - { - /* Get the proper table of decoder tables, vec_dim, and num_vecs for the cat */ - decoder_table_ptr = (Word16 *) table_of_decoder_tables[category]; - move16(); - vec_dim = vector_dimension[category]; - move16(); - num_vecs = number_of_vectors[category]; - move16(); - - for (n=0; n<num_vecs; n++) - { - index = 0; - move16(); - - /* get index */ - do - { - test(); - if (bitobj->number_of_bits_left <= 0) - { - ran_out_of_bits_flag = 1; - move16(); - break; - } - - get_next_bit(bitobj); - - test(); - if (bitobj->next_bit == 0) - { - temp = shl_nocheck(index,1); - index = (Word16)*(decoder_table_ptr + temp); - move16(); - } - else - { - temp = shl_nocheck(index,1); - index = (Word16)*(decoder_table_ptr + temp + 1); - move16(); - } - bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); - test(); - - } while (index > 0); - - test(); - if (ran_out_of_bits_flag != 0) - break; - - index = negate(index); - - /* convert index into array used to access the centroid table */ - /* get the number of sign bits in the index */ - num_sign_bits = index_to_array(index,k,category); - - temp = sub(bitobj->number_of_bits_left,num_sign_bits); - test(); - if (temp >= 0) - { - - test(); - if (num_sign_bits != 0) - { - signs_index = 0; - move16(); - for (j=0; j<num_sign_bits; j++) - { - get_next_bit(bitobj); - signs_index = shl_nocheck(signs_index,1); - signs_index = add(signs_index,bitobj->next_bit); - bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); - } - temp = sub(num_sign_bits,1); - bit = shl_nocheck(1,(temp)); - } - - for (j=0; j<vec_dim; j++) - { - acca = L_mult0(standard_deviation,mlt_quant_centroid[category][k[j]]); - acca = L_shr_nocheck(acca,12); - decoder_mlt_value = extract_l(acca); - - test(); - if (decoder_mlt_value != 0) - { - test(); - if ((signs_index & bit) == 0) - decoder_mlt_value = negate(decoder_mlt_value); - bit = shr_nocheck(bit,1); - } - *decoder_mlt_ptr++ = decoder_mlt_value; - move16(); - } - } - else - { - ran_out_of_bits_flag = 1; - move16(); - break; - } - } - /* If ran out of bits during decoding do noise fill for remaining regions. */ - /* DEBUG!! - For now also redo all of last region with all noise fill. */ - test(); - if (ran_out_of_bits_flag != 0) - { - temp = add(region,1); - for (j=temp; j<number_of_regions; j++) - { - decoder_power_categories[j] = 7; - move16(); - } - category = 7; - move16(); - decoder_mlt_ptr = &decoder_mlt_coefs[region*REGION_SIZE]; - move16(); - } - } - - temp = sub(category,5); - temp1 = sub(category,6); - test(); - test(); - logic16(); - if ((temp == 0) || (temp1 == 0)) - { - - decoder_mlt_ptr = &decoder_mlt_coefs[region*REGION_SIZE]; - move16(); - noifillpos = mult(standard_deviation,noise_fill_factor[category - 5]); - noifillneg = negate(noifillpos); - - random_word = get_rand(randobj); - - for (j=0; j<10; j++) - { - test(); - if (*decoder_mlt_ptr == 0) - { - logic16(); - test(); - if ((random_word & 1) == 0) - { - temp1 = noifillneg; - move16(); - } - else - { - temp1 = noifillpos; - move16(); - } - *decoder_mlt_ptr = temp1; - move16(); - random_word = shr_nocheck(random_word,1); - } - /* pointer arithmetic */ - decoder_mlt_ptr++; - } - random_word = get_rand(randobj); - for (j=0; j<10; j++) - { - test(); - if (*decoder_mlt_ptr == 0) - { - logic16(); - test(); - if ((random_word & 1) == 0) - { - temp1 = noifillneg; - move16(); - } - else - { - temp1 = noifillpos; - move16(); - } - *decoder_mlt_ptr = temp1; - move16(); - random_word = shr_nocheck(random_word,1); - } - /* pointer arithmetic */ - decoder_mlt_ptr++; - } - } - - /* if (category == 7) */ - temp1 = sub(category,7); - test(); - if (temp1 == 0) - { - index = sub(category,5); - noifillpos = mult(standard_deviation,noise_fill_factor[index]); - noifillneg = negate(noifillpos); - - random_word = get_rand(randobj); - for (j=0; j<10; j++) - { - logic16(); - test(); - if ((random_word & 1) == 0) - { - temp1 = noifillneg; - move16(); - } - else - { - temp1 = noifillpos; - move16(); - } - *decoder_mlt_ptr++ = temp1; - move16(); - random_word = shr_nocheck(random_word,1); - } - random_word = get_rand(randobj); - for (j=0; j<10; j++) - { - logic16(); - test(); - if ((random_word & 1) == 0) - { - temp1 = noifillneg; - move16(); - } - else - { - temp1 = noifillpos; - move16(); - } - - *decoder_mlt_ptr++ = temp1; - move16(); - random_word = shr_nocheck(random_word,1); - } - } - } - - test(); - if (ran_out_of_bits_flag) - bitobj->number_of_bits_left = sub(bitobj->number_of_bits_left,1); -} -/**************************************************************************************** - Function: index_to_array - - Syntax: number_of_non_zero = index_to_array(Word16 index, - Word16 array[MAX_VECTOR_DIMENSION], - Word16 category) - - inputs: Word16 index - Word16 category - - outputs: Word16 array[MAX_VECTOR_DIMENSION] - used in decoder to access - mlt_quant_centroid table - - Word16 number_of_non_zero - number of non zero elements - in the array - - Description: Computes an array of sign bits with the length of the category vector - Returns the number of sign bits and the array - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.00 | 0.00 - -------|--------------|---------------- - MAX | 0.00 | 0.00 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - MAX | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - -****************************************************************************************/ -Word16 index_to_array(Word16 index,Word16 *array,Word16 category) -{ - Word16 j,q,p; - Word16 number_of_non_zero; - Word16 max_bin_plus_one; - Word16 inverse_of_max_bin_plus_one; - Word16 temp; - - number_of_non_zero = 0; - move16(); - - p = index; - move16(); - - max_bin_plus_one = add(max_bin[category],1); - inverse_of_max_bin_plus_one = max_bin_plus_one_inverse[category]; - move16(); - - temp = sub(vector_dimension[category],1); - for (j=temp; j>=0; j--) - { - q = mult(p,inverse_of_max_bin_plus_one); - temp = extract_l(L_mult0(q,max_bin_plus_one)); - array[j] = sub(p,temp); - move16(); - - p = q; - move16(); - - temp = array[j]; - move16(); - test(); - if (temp != 0) - number_of_non_zero = add(number_of_non_zero,1); - } - return(number_of_non_zero); -} -/*************************************************************************** - Function: test_4_frame_errors - - Syntax: void test_4_frame_errors(Bit_Obj *bitobj, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *frame_error_flag, - Word16 categorization_control, - Word16 *absolute_region_power_index) - - inputs: bit_obj - number_of_regions - num_categorization_control_possibilities - frame_error_flag - categorization_control - absolute_region_power_index - - - outputs: frame_error_flag - - - - - Description: Tests for error conditions and sets the frame_error_flag accordingly - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.01 | 0.01 - -------|--------------|---------------- - MAX | 0.04 | 0.08 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.01 | 0.01 | 0.01 - -------|--------------|----------------|---------------- - MAX | 0.02 | 0.06 | 0.08 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void test_4_frame_errors(Bit_Obj *bitobj, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *frame_error_flag, - Word16 categorization_control, - Word16 *absolute_region_power_index) -{ - Word16 region; - Word16 i; - Word16 temp; - Word32 acca; - Word32 accb; - - /* Test for bit stream errors. */ - - test(); - if (bitobj->number_of_bits_left > 0) - { - for (i=0; i<bitobj->number_of_bits_left; i++) - { - get_next_bit(bitobj); - test(); - if (bitobj->next_bit == 0) - { - *frame_error_flag = 1; - move16(); - } - } - } - else - { - temp = sub(categorization_control,sub(num_categorization_control_possibilities,1)); - test(); - if (temp < 0) - { - test(); - if (bitobj->number_of_bits_left < 0) - { - *frame_error_flag |= 2; - logic16(); - } - } - } - - /* checks to ensure that abs_region_power_index is within range */ - /* the error flag is set if it is out of range */ - for (region=0; region<number_of_regions; region++) - { - /* the next two lines of comments were modified in release 1.2 - * to correct the description of the range of - * absolute_region_power_index[] to be tested in the next - * 9 lines of code. - */ - /* if ((absolute_region_power_index[region] > 31) || - (absolute_region_power_index[region] < -8) */ - - acca = L_add(absolute_region_power_index[region],ESF_ADJUSTMENT_TO_RMS_INDEX); - accb = L_sub(acca,31); - acca = L_add(acca,8); - test(); - - /* the next line was modifed in release 1.2 to - * correct miss typed code and error checking. - */ - if ((accb > 0) || (acca < 0)) - { - *frame_error_flag |= 4; - logic16(); - } - } - -} -/*************************************************************************** - Function: error_handling - - Syntax: void error_handling(Word16 number_of_coefs, - Word16 number_of_valid_coefs, - Word16 *frame_error_flag, - Word16 *decoder_mlt_coefs, - Word16 *old_decoder_mlt_coefs, - Word16 *p_mag_shift, - Word16 *p_old_mag_shift) - - inputs: number_of_coefs - number_of_valid_coefs - frame_error_flag - old_decoder_mlt_coefs - p_old_mag_shift - - - outputs: decoder_mlt_coefs - old_decoder_mlt_coefs - p_mag_shift - p_old_mag_shift - - - - Description: If both the current and previous frames are errored, - set the mlt coefficients to 0. If only the current frame - is errored, then repeat the previous frame's mlt coefficients. - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.02 | 0.02 - -------|--------------|---------------- - MAX | 0.03 | 0.03 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.03 | 0.03 | 0.03 - -------|--------------|----------------|---------------- - MAX | 0.03 | 0.03 | 0.06 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void error_handling(Word16 number_of_coefs, - Word16 number_of_valid_coefs, - Word16 *frame_error_flag, - Word16 *decoder_mlt_coefs, - Word16 *old_decoder_mlt_coefs, - Word16 *p_mag_shift, - Word16 *p_old_mag_shift) -{ - Word16 i; - - test(); - if (*frame_error_flag != 0) - { - - for (i = 0; i < number_of_valid_coefs; i++) - { - decoder_mlt_coefs[i] = old_decoder_mlt_coefs[i]; - move16(); - } - - for (i = 0; i < number_of_valid_coefs; i++) - { - old_decoder_mlt_coefs[i] = 0; - move16(); - } - - *p_mag_shift = *p_old_mag_shift; - move16(); - - *p_old_mag_shift = 0; - move16(); - } - else - { - /* Store in case next frame is errored. */ - for (i = 0; i < number_of_valid_coefs; i++) - { - old_decoder_mlt_coefs[i] = decoder_mlt_coefs[i]; - move16(); - } - - *p_old_mag_shift = *p_mag_shift; - move16(); - } - - - /* Zero out the upper 1/8 of the spectrum. */ - for (i = number_of_valid_coefs; i < number_of_coefs; i++) - { - decoder_mlt_coefs[i] = 0; - move16(); - } - -} -/**************************************************************************************** - Function: get_next_bit - - Syntax: void get_next_bit(Bit_Obj *bitobj) - - Description: Returns the next bit in the current word inside the bit object - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.00 | 0.00 - -------|--------------|---------------- - MAX | 0.00 | 0.00 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - MAX | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - -****************************************************************************************/ -void get_next_bit(Bit_Obj *bitobj) -{ - Word16 temp; - - test(); - if (bitobj->code_bit_count == 0) - { - bitobj->current_word = *bitobj->code_word_ptr++; - move16(); - bitobj->code_bit_count = 16; - move16(); - } - bitobj->code_bit_count = sub(bitobj->code_bit_count,1); - temp = shr_nocheck(bitobj->current_word,bitobj->code_bit_count); - logic16(); - bitobj->next_bit = (Word16 )(temp & 1); - -} -/**************************************************************************************** - Function: get_rand - - Syntax: Word16 get_rand(Rand_Obj *randobj) - - Description: Returns a random Word16 based on the seeds inside the rand object - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.00 | 0.00 - -------|--------------|---------------- - MAX | 0.00 | 0.00 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - MAX | 0.00 | 0.00 | 0.00 - -------|--------------|----------------|---------------- - -****************************************************************************************/ -Word16 get_rand(Rand_Obj *randobj) -{ - Word16 random_word; - Word32 acca; - - acca = L_add(randobj->seed0,randobj->seed3); - random_word = extract_l(acca); - - logic16(); - test(); - if ((random_word & 32768L) != 0) - random_word = add(random_word,1); - - randobj->seed3 = randobj->seed2; - move16(); - randobj->seed2 = randobj->seed1; - move16(); - randobj->seed1 = randobj->seed0; - move16(); - randobj->seed0 = random_word; - move16(); - - return(random_word); -} diff --git a/sflphone-common/libs/pjproject/third_party/g7221/encode/dct4_a.c b/sflphone-common/libs/pjproject/third_party/g7221/encode/dct4_a.c deleted file mode 100644 index 94ddf9fe4917e6e68ee8ff5a4466f9e4cb1b8955..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/encode/dct4_a.c +++ /dev/null @@ -1,367 +0,0 @@ -/********************************************************************************* -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -*********************************************************************************/ - -/********************************************************************************* -* Filename: dct_type_iv_a.c -* -* Purpose: Discrete Cosine Transform, Type IV used for MLT -* -* The basis functions are -* -* cos(PI*(t+0.5)*(k+0.5)/block_length) -* -* for time t and basis function number k. Due to the symmetry of the expression -* in t and k, it is clear that the forward and inverse transforms are the same. -* -*********************************************************************************/ - -/********************************************************************************* - Include files -*********************************************************************************/ -#include "defs.h" -#include "count.h" -#include "dct4_a.h" - -/********************************************************************************* - External variable declarations -*********************************************************************************/ -extern Word16 anal_bias[DCT_LENGTH]; -extern Word16 dct_core_a[DCT_LENGTH_DIV_32][DCT_LENGTH_DIV_32]; -extern cos_msin_t a_cos_msin_2 [DCT_LENGTH_DIV_32]; -extern cos_msin_t a_cos_msin_4 [DCT_LENGTH_DIV_16]; -extern cos_msin_t a_cos_msin_8 [DCT_LENGTH_DIV_8]; -extern cos_msin_t a_cos_msin_16[DCT_LENGTH_DIV_4]; -extern cos_msin_t a_cos_msin_32[DCT_LENGTH_DIV_2]; -extern cos_msin_t a_cos_msin_64[DCT_LENGTH]; -extern cos_msin_t *a_cos_msin_table[]; - -/********************************************************************************* - Function: dct_type_iv_a - - Syntax: void dct_type_iv_a (input, output, dct_length) - Word16 input[], output[], dct_length; - - Description: Discrete Cosine Transform, Type IV used for MLT - - Design Notes: - - WMOPS: | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 1.14 | 1.14 - -------|--------------|---------------- - MAX | 1.14 | 1.14 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 2.57 | 2.57 | 2.57 - -------|--------------|----------------|---------------- - MAX | 2.57 | 2.57 | 2.57 - -------|--------------|----------------|---------------- - -*********************************************************************************/ - -void dct_type_iv_a (Word16 *input,Word16 *output,Word16 dct_length) -{ - Word16 buffer_a[MAX_DCT_LENGTH], buffer_b[MAX_DCT_LENGTH], buffer_c[MAX_DCT_LENGTH]; - Word16 *in_ptr, *in_ptr_low, *in_ptr_high, *next_in_base; - Word16 *out_ptr_low, *out_ptr_high, *next_out_base; - Word16 *out_buffer, *in_buffer, *buffer_swap; - Word16 in_val_low, in_val_high; - Word16 out_val_low, out_val_high; - Word16 in_low_even, in_low_odd; - Word16 in_high_even, in_high_odd; - Word16 out_low_even, out_low_odd; - Word16 out_high_even, out_high_odd; - Word16 *pair_ptr; - Word16 cos_even, cos_odd, msin_even, msin_odd; - Word16 neg_cos_odd; - Word16 neg_msin_even; - Word32 sum; - Word16 set_span, set_count, set_count_log, pairs_left, sets_left; - Word16 i,k; - Word16 index; - cos_msin_t **table_ptr_ptr, *cos_msin_ptr; - - Word16 temp; - Word32 acca; - - Word16 dct_length_log; - - - /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* Do the sum/difference butterflies, the first part of */ - /* converting one N-point transform into N/2 two-point */ - /* transforms, where N = 1 << DCT_LENGTH_LOG. = 64/128 */ - /*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - test(); - if (dct_length==DCT_LENGTH) - { - dct_length_log = DCT_LENGTH_LOG; - - /* Add bias offsets */ - for (i=0;i<dct_length;i++) - { - input[i] = add(input[i],anal_bias[i]); - move16(); - } - } - else - dct_length_log = MAX_DCT_LENGTH_LOG; - - index = 0L; - move16(); - - in_buffer = input; - move16(); - - out_buffer = buffer_a; - move16(); - - temp = sub(dct_length_log,2); - for (set_count_log=0;set_count_log<=temp;set_count_log++) - { - - /*===========================================================*/ - /* Initialization for the loop over sets at the current size */ - /*===========================================================*/ - - /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ - set_span = shr_nocheck(dct_length,set_count_log); - - set_count = shl_nocheck(1,set_count_log); - - in_ptr = in_buffer; - move16(); - - next_out_base = out_buffer; - move16(); - - /*=====================================*/ - /* Loop over all the sets of this size */ - /*=====================================*/ - - for (sets_left=set_count;sets_left>0;sets_left--) - { - - /*||||||||||||||||||||||||||||||||||||||||||||*/ - /* Set up output pointers for the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||*/ - - out_ptr_low = next_out_base; - next_out_base = next_out_base + set_span; - out_ptr_high = next_out_base; - - /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ - /* Loop over all the butterflies in the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||||||||*/ - - do - { - in_val_low = *in_ptr++; - in_val_high = *in_ptr++; - // blp: addition of two 16bits vars, there's no way - // they'll overflow a 32bit var - //acca = L_add(in_val_low,in_val_high); - acca = (in_val_low + in_val_high); - acca = L_shr_nocheck(acca,1); - out_val_low = extract_l(acca); - - acca = L_sub(in_val_low,in_val_high); - acca = L_shr_nocheck(acca,1); - out_val_high = extract_l(acca); - - *out_ptr_low++ = out_val_low; - *--out_ptr_high = out_val_high; - - test(); - } while (out_ptr_low < out_ptr_high); - - } /* End of loop over sets of the current size */ - - /*============================================================*/ - /* Decide which buffers to use as input and output next time. */ - /* Except for the first time (when the input buffer is the */ - /* subroutine input) we just alternate the local buffers. */ - /*============================================================*/ - - in_buffer = out_buffer; - move16(); - if (out_buffer == buffer_a) - out_buffer = buffer_b; - else - out_buffer = buffer_a; - index = add(index,1); - - } /* End of loop over set sizes */ - - - /*++++++++++++++++++++++++++++++++*/ - /* Do N/2 two-point transforms, */ - /* where N = 1 << DCT_LENGTH_LOG */ - /*++++++++++++++++++++++++++++++++*/ - - pair_ptr = in_buffer; - move16(); - - buffer_swap = buffer_c; - move16(); - - temp = sub(dct_length_log,1); - temp = shl_nocheck(1,temp); - - for (pairs_left=temp; pairs_left > 0; pairs_left--) - { - for ( k=0; k<CORE_SIZE; k++ ) - { -#if PJ_HAS_INT64 - /* blp: danger danger! not really compatible but faster */ - pj_int64_t sum64=0; - move32(); - - for ( i=0; i<CORE_SIZE; i++ ) - { - sum64 += L_mult(pair_ptr[i], dct_core_a[i][k]); - } - sum = L_saturate(sum64); -#else - sum=0L; - move32(); - for ( i=0; i<CORE_SIZE; i++ ) - { - sum = L_mac(sum, pair_ptr[i],dct_core_a[i][k]); - } -#endif - buffer_swap[k] = itu_round(sum); - } - /* address arithmetic */ - pair_ptr += CORE_SIZE; - buffer_swap += CORE_SIZE; - } - - for (i=0;i<dct_length;i++) - { - in_buffer[i] = buffer_c[i]; - move16(); - } - - table_ptr_ptr = a_cos_msin_table; - - /*++++++++++++++++++++++++++++++*/ - /* Perform rotation butterflies */ - /*++++++++++++++++++++++++++++++*/ - temp = sub(dct_length_log,2); - for (set_count_log = temp; set_count_log >= 0; set_count_log--) - { - /*===========================================================*/ - /* Initialization for the loop over sets at the current size */ - /*===========================================================*/ - /* set_span = 1 << (DCT_LENGTH_LOG - set_count_log); */ - set_span = shr_nocheck(dct_length,set_count_log); - - set_count = shl_nocheck(1,set_count_log); - next_in_base = in_buffer; - move16(); - - test(); - if (set_count_log == 0) - { - next_out_base = output; - } - else - { - next_out_base = out_buffer; - } - - - /*=====================================*/ - /* Loop over all the sets of this size */ - /*=====================================*/ - for (sets_left = set_count; sets_left > 0;sets_left--) - { - /*|||||||||||||||||||||||||||||||||||||||||*/ - /* Set up the pointers for the current set */ - /*|||||||||||||||||||||||||||||||||||||||||*/ - in_ptr_low = next_in_base; - move16(); - temp = shr_nocheck(set_span,1); - - /* address arithmetic */ - in_ptr_high = in_ptr_low + temp; - next_in_base += set_span; - out_ptr_low = next_out_base; - next_out_base += set_span; - out_ptr_high = next_out_base; - cos_msin_ptr = *table_ptr_ptr; - - /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ - /* Loop over all the butterfly pairs in the current set */ - /*||||||||||||||||||||||||||||||||||||||||||||||||||||||*/ - - do - { - /* address arithmetic */ - in_low_even = *in_ptr_low++; - in_low_odd = *in_ptr_low++; - in_high_even = *in_ptr_high++; - in_high_odd = *in_ptr_high++; - cos_even = cos_msin_ptr[0].cosine; - move16(); - msin_even = cos_msin_ptr[0].minus_sine; - move16(); - cos_odd = cos_msin_ptr[1].cosine; - move16(); - msin_odd = cos_msin_ptr[1].minus_sine; - move16(); - cos_msin_ptr += 2; - - sum = 0L; - sum=L_mac(sum,cos_even,in_low_even); - neg_msin_even = negate(msin_even); - sum=L_mac(sum,neg_msin_even,in_high_even); - out_low_even = itu_round(sum); - - sum = 0L; - sum=L_mac(sum,msin_even,in_low_even); - sum=L_mac(sum,cos_even,in_high_even); - out_high_even= itu_round(sum); - - sum = 0L; - sum=L_mac(sum,cos_odd,in_low_odd); - sum=L_mac(sum,msin_odd,in_high_odd); - out_low_odd= itu_round(sum); - - sum = 0L; - sum=L_mac(sum,msin_odd,in_low_odd); - neg_cos_odd = negate(cos_odd); - sum=L_mac(sum,neg_cos_odd,in_high_odd); - out_high_odd= itu_round(sum); - - *out_ptr_low++ = out_low_even; - *--out_ptr_high = out_high_even; - *out_ptr_low++ = out_low_odd; - *--out_ptr_high = out_high_odd; - test(); - } while (out_ptr_low < out_ptr_high); - - } /* End of loop over sets of the current size */ - - /*=============================================*/ - /* Swap input and output buffers for next time */ - /*=============================================*/ - - buffer_swap = in_buffer; - in_buffer = out_buffer; - out_buffer = buffer_swap; - table_ptr_ptr++; - } -} - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/encode/dct4_a.h b/sflphone-common/libs/pjproject/third_party/g7221/encode/dct4_a.h deleted file mode 100644 index 74f3d9397a8484852914827050c3275834fb057e..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/encode/dct4_a.h +++ /dev/null @@ -1,728 +0,0 @@ -/**************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -****************************************************************************/ - -/**************************************************************************** - Filename: dct4_a.h - - Purpose: Contains tables used by dct4_a.c - - Design Notes: - -****************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ -#include <stdio.h> -#include <math.h> - -typedef struct -{ - Word16 cosine; - Word16 minus_sine; -} cos_msin_t; - -cos_msin_t a_cos_msin_2[10] = { - { 29805 , -1171 } , - { 29621 , -3506 } , - { 29255 , -5819 } , - { 28708 , -8097 } , - { 27984 , -10324 } , - { 27088 , -12488 } , - { 26025 , -14575 } , - { 24801 , -16572 } , - { 23425 , -18466 } , - { 21903 , -20247 } - }; -cos_msin_t a_cos_msin_4[20] = { - { 29822 , -586 } , - { 29776 , -1756 } , - { 29684 , -2924 } , - { 29547 , -4087 } , - { 29364 , -5244 } , - { 29135 , -6392 } , - { 28862 , -7531 } , - { 28544 , -8659 } , - { 28182 , -9773 } , - { 27776 , -10871 } , - { 27328 , -11954 } , - { 26838 , -13017 } , - { 26306 , -14061 } , - { 25734 , -15083 } , - { 25122 , -16081 } , - { 24471 , -17055 } , - { 23783 , -18003 } , - { 23057 , -18923 } , - { 22297 , -19813 } , - { 21502 , -20673 } - }; -cos_msin_t a_cos_msin_8[40] = { - { 29827 , -293 } , - { 29815 , -878 } , - { 29792 , -1464 } , - { 29758 , -2048 } , - { 29712 , -2632 } , - { 29654 , -3215 } , - { 29586 , -3797 } , - { 29505 , -4377 } , - { 29414 , -4955 } , - { 29311 , -5532 } , - { 29196 , -6106 } , - { 29071 , -6678 } , - { 28934 , -7248 } , - { 28786 , -7814 } , - { 28627 , -8378 } , - { 28457 , -8938 } , - { 28276 , -9495 } , - { 28084 , -10049 } , - { 27882 , -10598 } , - { 27668 , -11144 } , - { 27444 , -11685 } , - { 27209 , -12221 } , - { 26964 , -12753 } , - { 26709 , -13280 } , - { 26443 , -13802 } , - { 26167 , -14318 } , - { 25881 , -14829 } , - { 25584 , -15335 } , - { 25278 , -15834 } , - { 24963 , -16327 } , - { 24637 , -16814 } , - { 24302 , -17295 } , - { 23958 , -17769 } , - { 23605 , -18236 } , - { 23242 , -18695 } , - { 22871 , -19148 } , - { 22490 , -19594 } , - { 22101 , -20031 } , - { 21704 , -20461 } , - { 21298 , -20884 } - }; -cos_msin_t a_cos_msin_16[80] = { - { 29828 , -146 } , - { 29825 , -439 } , - { 29819 , -732 } , - { 29811 , -1025 } , - { 29799 , -1317 } , - { 29785 , -1610 } , - { 29767 , -1902 } , - { 29747 , -2194 } , - { 29724 , -2486 } , - { 29698 , -2778 } , - { 29670 , -3069 } , - { 29638 , -3360 } , - { 29604 , -3651 } , - { 29567 , -3942 } , - { 29526 , -4232 } , - { 29483 , -4521 } , - { 29438 , -4811 } , - { 29389 , -5099 } , - { 29338 , -5388 } , - { 29283 , -5676 } , - { 29226 , -5963 } , - { 29166 , -6249 } , - { 29103 , -6535 } , - { 29038 , -6821 } , - { 28969 , -7106 } , - { 28898 , -7390 } , - { 28824 , -7673 } , - { 28748 , -7956 } , - { 28668 , -8237 } , - { 28586 , -8518 } , - { 28501 , -8799 } , - { 28413 , -9078 } , - { 28323 , -9357 } , - { 28229 , -9634 } , - { 28133 , -9911 } , - { 28035 , -10187 } , - { 27933 , -10461 } , - { 27829 , -10735 } , - { 27723 , -11008 } , - { 27613 , -11279 } , - { 27501 , -11550 } , - { 27387 , -11819 } , - { 27269 , -12088 } , - { 27149 , -12355 } , - { 27027 , -12621 } , - { 26901 , -12885 } , - { 26774 , -13149 } , - { 26643 , -13411 } , - { 26510 , -13672 } , - { 26375 , -13932 } , - { 26237 , -14190 } , - { 26096 , -14447 } , - { 25953 , -14702 } , - { 25807 , -14956 } , - { 25659 , -15209 } , - { 25509 , -15460 } , - { 25356 , -15710 } , - { 25200 , -15958 } , - { 25043 , -16205 } , - { 24882 , -16450 } , - { 24720 , -16693 } , - { 24554 , -16935 } , - { 24387 , -17175 } , - { 24217 , -17414 } , - { 24045 , -17651 } , - { 23871 , -17886 } , - { 23694 , -18119 } , - { 23515 , -18351 } , - { 23334 , -18581 } , - { 23150 , -18809 } , - { 22964 , -19036 } , - { 22776 , -19260 } , - { 22586 , -19483 } , - { 22394 , -19704 } , - { 22199 , -19923 } , - { 22003 , -20140 } , - { 21804 , -20355 } , - { 21603 , -20568 } , - { 21400 , -20779 } , - { 21195 , -20988 } - }; -cos_msin_t a_cos_msin_32[160]= { - { 29828 , -73 } , - { 29827 , -220 } , - { 29826 , -366 } , - { 29824 , -512 } , - { 29821 , -659 } , - { 29817 , -805 } , - { 29813 , -952 } , - { 29808 , -1098 } , - { 29802 , -1244 } , - { 29796 , -1390 } , - { 29789 , -1537 } , - { 29781 , -1683 } , - { 29772 , -1829 } , - { 29763 , -1975 } , - { 29753 , -2121 } , - { 29742 , -2267 } , - { 29730 , -2413 } , - { 29718 , -2559 } , - { 29705 , -2705 } , - { 29692 , -2851 } , - { 29677 , -2997 } , - { 29662 , -3142 } , - { 29646 , -3288 } , - { 29630 , -3433 } , - { 29613 , -3579 } , - { 29595 , -3724 } , - { 29576 , -3869 } , - { 29557 , -4014 } , - { 29537 , -4159 } , - { 29516 , -4304 } , - { 29494 , -4449 } , - { 29472 , -4594 } , - { 29449 , -4738 } , - { 29426 , -4883 } , - { 29401 , -5027 } , - { 29376 , -5172 } , - { 29351 , -5316 } , - { 29324 , -5460 } , - { 29297 , -5604 } , - { 29269 , -5747 } , - { 29241 , -5891 } , - { 29211 , -6034 } , - { 29181 , -6178 } , - { 29151 , -6321 } , - { 29119 , -6464 } , - { 29087 , -6607 } , - { 29054 , -6749 } , - { 29021 , -6892 } , - { 28987 , -7034 } , - { 28952 , -7177 } , - { 28916 , -7319 } , - { 28880 , -7460 } , - { 28843 , -7602 } , - { 28805 , -7744 } , - { 28767 , -7885 } , - { 28728 , -8026 } , - { 28688 , -8167 } , - { 28648 , -8308 } , - { 28607 , -8448 } , - { 28565 , -8589 } , - { 28522 , -8729 } , - { 28479 , -8869 } , - { 28435 , -9008 } , - { 28391 , -9148 } , - { 28346 , -9287 } , - { 28300 , -9426 } , - { 28253 , -9565 } , - { 28206 , -9703 } , - { 28158 , -9842 } , - { 28109 , -9980 } , - { 28060 , -10118 } , - { 28010 , -10255 } , - { 27959 , -10393 } , - { 27908 , -10530 } , - { 27856 , -10667 } , - { 27803 , -10803 } , - { 27750 , -10940 } , - { 27696 , -11076 } , - { 27641 , -11212 } , - { 27586 , -11347 } , - { 27529 , -11482 } , - { 27473 , -11617 } , - { 27415 , -11752 } , - { 27357 , -11886 } , - { 27299 , -12021 } , - { 27239 , -12154 } , - { 27179 , -12288 } , - { 27119 , -12421 } , - { 27057 , -12554 } , - { 26996 , -12687 } , - { 26933 , -12819 } , - { 26870 , -12951 } , - { 26806 , -13083 } , - { 26741 , -13215 } , - { 26676 , -13346 } , - { 26610 , -13476 } , - { 26544 , -13607 } , - { 26477 , -13737 } , - { 26409 , -13867 } , - { 26340 , -13996 } , - { 26271 , -14125 } , - { 26202 , -14254 } , - { 26132 , -14383 } , - { 26061 , -14511 } , - { 25989 , -14638 } , - { 25917 , -14766 } , - { 25844 , -14893 } , - { 25771 , -15020 } , - { 25697 , -15146 } , - { 25622 , -15272 } , - { 25547 , -15397 } , - { 25471 , -15523 } , - { 25394 , -15648 } , - { 25317 , -15772 } , - { 25239 , -15896 } , - { 25161 , -16020 } , - { 25082 , -16143 } , - { 25003 , -16266 } , - { 24923 , -16389 } , - { 24842 , -16511 } , - { 24760 , -16632 } , - { 24678 , -16754 } , - { 24596 , -16875 } , - { 24513 , -16995 } , - { 24429 , -17115 } , - { 24345 , -17235 } , - { 24260 , -17354 } , - { 24174 , -17473 } , - { 24088 , -17592 } , - { 24002 , -17710 } , - { 23914 , -17827 } , - { 23827 , -17945 } , - { 23738 , -18061 } , - { 23649 , -18178 } , - { 23560 , -18293 } , - { 23470 , -18409 } , - { 23379 , -18524 } , - { 23288 , -18638 } , - { 23196 , -18752 } , - { 23104 , -18866 } , - { 23011 , -18979 } , - { 22917 , -19092 } , - { 22824 , -19204 } , - { 22729 , -19316 } , - { 22634 , -19427 } , - { 22538 , -19538 } , - { 22442 , -19649 } , - { 22345 , -19759 } , - { 22248 , -19868 } , - { 22150 , -19977 } , - { 22052 , -20086 } , - { 21953 , -20194 } , - { 21854 , -20301 } , - { 21754 , -20408 } , - { 21653 , -20515 } , - { 21552 , -20621 } , - { 21451 , -20726 } , - { 21349 , -20831 } , - { 21246 , -20936 } , - { 21143 , -21040 } - }; -cos_msin_t a_cos_msin_64[320] = { -{29827, -34}, -{29827, -106}, -{29827, -177}, -{29827, -249}, -{29826, -320}, -{29825, -392}, -{29824, -463}, -{29823, -535}, -{29821, -606}, -{29819, -678}, -{29818, -750}, -{29816, -821}, -{29814, -893}, -{29812, -964}, -{29809, -1035}, -{29807, -1106}, -{29804, -1177}, -{29801, -1249}, -{29797, -1320}, -{29795, -1392}, -{29791, -1463}, -{29787, -1535}, -{29784, -1606}, -{29780, -1678}, -{29776, -1749}, -{29771, -1820}, -{29767, -1892}, -{29763, -1963}, -{29758, -2035}, -{29753, -2106}, -{29748, -2177}, -{29742, -2249}, -{29737, -2320}, -{29731, -2391}, -{29726, -2462}, -{29719, -2534}, -{29713, -2605}, -{29707, -2676}, -{29701, -2747}, -{29694, -2819}, -{29686, -2890}, -{29680, -2961}, -{29673, -3032}, -{29665, -3103}, -{29658, -3174}, -{29650, -3245}, -{29643, -3316}, -{29635, -3387}, -{29626, -3459}, -{29618, -3529}, -{29610, -3600}, -{29601, -3671}, -{29592, -3742}, -{29583, -3813}, -{29574, -3884}, -{29564, -3955}, -{29554, -4026}, -{29544, -4097}, -{29535, -4167}, -{29525, -4238}, -{29514, -4309}, -{29504, -4380}, -{29493, -4450}, -{29483, -4521}, -{29472, -4591}, -{29461, -4662}, -{29450, -4733}, -{29439, -4803}, -{29427, -4874}, -{29415, -4944}, -{29403, -5015}, -{29391, -5085}, -{29379, -5155}, -{29366, -5226}, -{29353, -5296}, -{29341, -5367}, -{29328, -5438}, -{29314, -5508}, -{29301, -5578}, -{29289, -5648}, -{29274, -5718}, -{29260, -5788}, -{29247, -5858}, -{29232, -5928}, -{29218, -5998}, -{29204, -6068}, -{29188, -6139}, -{29175, -6209}, -{29159, -6279}, -{29145, -6348}, -{29128, -6418}, -{29114, -6488}, -{29097, -6557}, -{29082, -6627}, -{29066, -6697}, -{29050, -6767}, -{29034, -6837}, -{29017, -6906}, -{29001, -6975}, -{28984, -7045}, -{28966, -7114}, -{28950, -7184}, -{28933, -7254}, -{28915, -7323}, -{28897, -7392}, -{28880, -7461}, -{28862, -7530}, -{28843, -7600}, -{28825, -7669}, -{28807, -7738}, -{28788, -7806}, -{28769, -7875}, -{28751, -7944}, -{28732, -8014}, -{28712, -8082}, -{28692, -8151}, -{28672, -8219}, -{28653, -8289}, -{28633, -8357}, -{28613, -8425}, -{28593, -8494}, -{28572, -8563}, -{28551, -8632}, -{28531, -8700}, -{28510, -8768}, -{28488, -8837}, -{28468, -8905}, -{28447, -8973}, -{28425, -9041}, -{28403, -9109}, -{28381, -9177}, -{28359, -9245}, -{28336, -9313}, -{28315, -9381}, -{28292, -9448}, -{28269, -9517}, -{28246, -9584}, -{28223, -9652}, -{28200, -9720}, -{28176, -9787}, -{28153, -9854}, -{28129, -9922}, -{28105, -9990}, -{28082, -10056}, -{28057, -10124}, -{28032, -10191}, -{28009, -10258}, -{27984, -10326}, -{27959, -10392}, -{27934, -10460}, -{27909, -10526}, -{27883, -10593}, -{27858, -10661}, -{27832, -10727}, -{27807, -10794}, -{27780, -10860}, -{27754, -10927}, -{27728, -10993}, -{27701, -11059}, -{27676, -11126}, -{27648, -11192}, -{27622, -11259}, -{27595, -11324}, -{27567, -11391}, -{27540, -11456}, -{27512, -11523}, -{27484, -11588}, -{27456, -11655}, -{27429, -11720}, -{27401, -11786}, -{27372, -11852}, -{27344, -11917}, -{27315, -11982}, -{27286, -12049}, -{27257, -12114}, -{27229, -12179}, -{27199, -12244}, -{27169, -12309}, -{27140, -12375}, -{27110, -12439}, -{27080, -12505}, -{27050, -12570}, -{27019, -12634}, -{26990, -12699}, -{26958, -12764}, -{26928, -12828}, -{26897, -12892}, -{26866, -12956}, -{26835, -13021}, -{26804, -13086}, -{26773, -13149}, -{26741, -13214}, -{26709, -13278}, -{26677, -13342}, -{26645, -13406}, -{26613, -13470}, -{26581, -13534}, -{26549, -13597}, -{26515, -13661}, -{26483, -13725}, -{26450, -13788}, -{26417, -13851}, -{26384, -13915}, -{26350, -13978}, -{26316, -14041}, -{26283, -14103}, -{26248, -14166}, -{26215, -14229}, -{26180, -14292}, -{26146, -14355}, -{26112, -14417}, -{26077, -14480}, -{26042, -14543}, -{26008, -14605}, -{25972, -14667}, -{25937, -14730}, -{25901, -14792}, -{25866, -14854}, -{25830, -14916}, -{25794, -14977}, -{25759, -15039}, -{25723, -15101}, -{25687, -15162}, -{25650, -15224}, -{25613, -15286}, -{25577, -15347}, -{25540, -15408}, -{25503, -15470}, -{25465, -15531}, -{25428, -15592}, -{25391, -15653}, -{25353, -15714}, -{25315, -15774}, -{25277, -15834}, -{25240, -15895}, -{25201, -15956}, -{25162, -16016}, -{25124, -16076}, -{25086, -16136}, -{25047, -16196}, -{25008, -16256}, -{24969, -16316}, -{24930, -16375}, -{24891, -16436}, -{24851, -16496}, -{24811, -16555}, -{24772, -16615}, -{24732, -16674}, -{24692, -16732}, -{24652, -16791}, -{24612, -16852}, -{24572, -16911}, -{24531, -16969}, -{24490, -17027}, -{24449, -17086}, -{24408, -17145}, -{24367, -17203}, -{24325, -17261}, -{24284, -17320}, -{24242, -17379}, -{24200, -17436}, -{24158, -17494}, -{24116, -17552}, -{24075, -17610}, -{24032, -17668}, -{23990, -17725}, -{23947, -17782}, -{23904, -17840}, -{23862, -17897}, -{23819, -17954}, -{23775, -18011}, -{23732, -18068}, -{23689, -18125}, -{23645, -18181}, -{23602, -18238}, -{23558, -18294}, -{23514, -18351}, -{23470, -18407}, -{23426, -18464}, -{23381, -18520}, -{23337, -18576}, -{23293, -18632}, -{23248, -18688}, -{23202, -18743}, -{23158, -18799}, -{23112, -18854}, -{23068, -18910}, -{23022, -18964}, -{22977, -19020}, -{22931, -19074}, -{22885, -19129}, -{22839, -19185}, -{22793, -19239}, -{22747, -19294}, -{22700, -19348}, -{22655, -19403}, -{22607, -19457}, -{22561, -19511}, -{22514, -19565}, -{22467, -19619}, -{22421, -19673}, -{22373, -19726}, -{22326, -19780}, -{22279, -19834}, -{22230, -19887}, -{22183, -19940}, -{22135, -19993}, -{22087, -20047}, -{22039, -20099}, -{21991, -20152}, -{21942, -20205}, -{21894, -20257}, -{21845, -20309}, -{21797, -20362}, -{21748, -20413}, -{21699, -20466}, -{21650, -20518}, -{21601, -20570}, -{21551, -20621}, -{21502, -20674} -}; - -cos_msin_t *a_cos_msin_table[] = {a_cos_msin_2, a_cos_msin_4, - a_cos_msin_8, a_cos_msin_16, - a_cos_msin_32,a_cos_msin_64 - }; - -Word16 dct_core_a[10][10] = { - -{ 10453, 10196, 9688, 8941, 7973, 6810, 5479, 4013, 2448, 823 }, -{ 10196, 7973, 4013, -823, -5479, -8941, -10453, -9688, -6810, -2448 }, -{ 9688 , 4013, -4013, -9688, -9688, -4013, 4013, 9688, 9688, 4013 }, -{ 8941 , -823, -9688, -7973, 2448, 10196, 6810, -4013, -10453, -5479 }, -{ 7973 , -5479, -9688, 2448, 10453, 823, -10196, -4013, 8941, 6810 }, -{ 6810 , -8941, -4013, 10196, 823, -10453, 2448, 9688, -5479, -7973 }, -{ 5479 , -10453, 4013, 6810, -10196, 2448, 7973, -9688, 823, 8941 }, -{ 4013 , -9688, 9688, -4013, -4013, 9688, -9688, 4013, 4013, -9688 }, -{ 2448 , -6810, 9688, -10453, 8941, -5479, 823, 4013, -7973, 10196 }, -{ 823 , -2448, 4013, -5479, 6810, -7973, 8941, -9688, 10196, -10453 }}; - -Word16 anal_bias[320] = { - 1, 1, 3, 1, 4, 1, 3, -2, 4, 3, - 4, 1, 3, 0, 2, -3, 0, 0, 2, 2, - 4, 1, 1, -5, 4, 1, 2, -1, 0, -1, - 1, -2, 0, 2, 2, 2, 4, 1, 3, 0, - 5, 3, 2, 0, 3, 0, 1, -4, 1, 1, - 2, 0, 4, 0, 1, -4, 6, 1, 3, -1, - 1, 0, 0, -4, 1, 1, 3, 1, 3, 2, - 4, -2, 4, 3, 5, 1, 3, 0, 1, -3, - 1, 1, 2, 0, 4, 1, 2, -4, 4, 2, - 2, -1, 1, -1, 1, -4, 0, 0, 3, 0, - 5, 2, 3, -1, 6, 2, 5, 0, 4, 0, - 1, -3, 1, 0, 3, 0, 4, 0, 1, -3, - 4, 1, 3, -1, 1, -2, 1, -4, 0, 1, - 2, 1, 3, 2, 2, -2, 4, 3, 3, 0, - 3, 0, 0, -2, 1, 0, 2, 0, 5, -1, - 1, -3, 4, 2, 2, 0, 2, -3, 1, -4, - -1, 1, 2, 2, 4, 1, 3, -1, 5, 2, - 2, 0, 3, -1, 2, -3, 0, 1, 2, 2, - 4, 0, 1, -5, 5, 1, 3, 0, 2, -1, - 0, -2, 1, 2, 2, 2, 4, 1, 0, 0, - 4, 2, 4, 1, 4, -1, 1, -4, 0, 1, - 3, 1, 5, 1, 1, -2, 4, 0, 2, 0, - 2, -1, 0, -2, 0, 1, 1, 1, 4, 2, - 3, -2, 5, 4, 4, 0, 3, 0, 3, -4, - 1, 2, 2, 0, 4, 1, 0, -3, 4, 2, - 3, -1, 1, -1, 1, -4, 0, 2, 3, 1, - 4, 1, 3, 0, 3, 3, 4, 1, 2, 0, - 1, -3, 2, 2, 2, 1, 5, 0, 1, -4, - 4, 1, 3, -2, 3, -1, 0, -2, 0, 2, - 2, 0, 5, 1, 4, -1, 4, 3, 4, 1, - 3, 0, 1, -4, 2, 0, 3, 1, 5, 0, - 1, -5, 5, 2, 2, 0, 0, 0, 0, -4}; - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/encode/encoder.c b/sflphone-common/libs/pjproject/third_party/g7221/encode/encoder.c deleted file mode 100644 index 2d878cc48ab368fb88bf00da9a4c25360ab3ebcd..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/encode/encoder.c +++ /dev/null @@ -1,1125 +0,0 @@ -/*************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -***************************************************************************/ - -/*************************************************************************** - Filename: encoder.c - - Purpose: Contains files used to implement the G.722.1 Annex C encoder - - Design Notes: - -***************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ - -#include <stdio.h> -#include <math.h> -#include "defs.h" -#include "huff_def.h" -#include "tables.h" -#include "count.h" - -/*************************************************************************** - Function: encoder - - Syntax: void encoder(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 mlt_coefs, - Word16 mag_shift, - Word16 out_words) - - inputs: number_of_available_bits - number_of_regions - mag_shift - mlt_coefs[DCT_LENGTH] - - outputs: out_words[MAX_BITS_PER_FRAME/16] - - - Description: Encodes the mlt coefs into out_words using G.722.1 Annex C - - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.93 | 1.04 - -------|--------------|---------------- - MAX | 1.20 | 1.28 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 1.39 | 1.71 | 2.01 - -------|--------------|----------------|---------------- - MAX | 2.00 | 2.30 | 2.52 - -------|--------------|----------------|---------------- - -***************************************************************************/ - -void encoder(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 *mlt_coefs, - Word16 mag_shift, - Word16 *out_words) -{ - - Word16 num_categorization_control_bits; - Word16 num_categorization_control_possibilities; - Word16 number_of_bits_per_frame; - Word16 number_of_envelope_bits; - Word16 categorization_control; - Word16 region; - Word16 absolute_region_power_index[MAX_NUMBER_OF_REGIONS]; - Word16 power_categories[MAX_NUMBER_OF_REGIONS]; - Word16 category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1]; - Word16 drp_num_bits[MAX_NUMBER_OF_REGIONS+1]; - UWord16 drp_code_bits[MAX_NUMBER_OF_REGIONS+1]; - Word16 region_mlt_bit_counts[MAX_NUMBER_OF_REGIONS]; - UWord32 region_mlt_bits[4*MAX_NUMBER_OF_REGIONS]; - Word16 mag_shift_offset; - - Word16 temp; - - /* initialize variables */ - test(); - if (number_of_regions == NUMBER_OF_REGIONS) - { - num_categorization_control_bits = NUM_CATEGORIZATION_CONTROL_BITS; - move16(); - num_categorization_control_possibilities = NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; - move16(); - } - else - { - num_categorization_control_bits = MAX_NUM_CATEGORIZATION_CONTROL_BITS; - move16(); - num_categorization_control_possibilities = MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES; - move16(); - } - - number_of_bits_per_frame = number_of_available_bits; - move16(); - - for (region=0; region<number_of_regions; region++) - { - region_mlt_bit_counts[region] = 0; - move16(); - } - - /* Estimate power envelope. */ - number_of_envelope_bits = compute_region_powers(mlt_coefs, - mag_shift, - drp_num_bits, - drp_code_bits, - absolute_region_power_index, - number_of_regions); - - /* Adjust number of available bits based on power envelope estimate */ - temp = sub(number_of_available_bits,number_of_envelope_bits); - number_of_available_bits = sub(temp,num_categorization_control_bits); - - /* get categorizations */ - categorize(number_of_available_bits, - number_of_regions, - num_categorization_control_possibilities, - absolute_region_power_index, - power_categories, - category_balances); - - /* Adjust absolute_region_category_index[] for mag_shift. - This assumes that REGION_POWER_STEPSIZE_DB is defined - to be exactly 3.010299957 or 20.0 times log base 10 - of square root of 2. */ - temp = shl_nocheck(mag_shift,1); - mag_shift_offset = add(temp,REGION_POWER_TABLE_NUM_NEGATIVES); - - for (region=0; region<number_of_regions; region++) - { - absolute_region_power_index[region] = add(absolute_region_power_index[region],mag_shift_offset); - move16(); - } - - /* adjust the absolute power region index based on the mlt coefs */ - adjust_abs_region_power_index(absolute_region_power_index,mlt_coefs,number_of_regions); - - - /* quantize and code the mlt coefficients based on categorizations */ - vector_quantize_mlts(number_of_available_bits, - number_of_regions, - num_categorization_control_possibilities, - mlt_coefs, - absolute_region_power_index, - power_categories, - category_balances, - &categorization_control, - region_mlt_bit_counts, - region_mlt_bits); - - /* stuff bits into words */ - bits_to_words(region_mlt_bits, - region_mlt_bit_counts, - drp_num_bits, - drp_code_bits, - out_words, - categorization_control, - number_of_regions, - num_categorization_control_bits, - number_of_bits_per_frame); - -} - -/*************************************************************************** - Function: bits_to_words - - Syntax: bits_to_words(UWord32 *region_mlt_bits, - Word16 *region_mlt_bit_counts, - Word16 *drp_num_bits, - UWord16 *drp_code_bits, - Word16 *out_words, - Word16 categorization_control, - Word16 number_of_regions, - Word16 num_categorization_control_bits, - Word16 number_of_bits_per_frame) - - - Description: Stuffs the bits into words for output - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.09 | 0.12 - -------|--------------|---------------- - MAX | 0.10 | 0.13 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.12 | 0.15 | 0.19 - -------|--------------|----------------|---------------- - MAX | 0.14 | 0.17 | 0.21 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void bits_to_words(UWord32 *region_mlt_bits, - Word16 *region_mlt_bit_counts, - Word16 *drp_num_bits, - UWord16 *drp_code_bits, - Word16 *out_words, - Word16 categorization_control, - Word16 number_of_regions, - Word16 num_categorization_control_bits, - Word16 number_of_bits_per_frame) -{ - Word16 out_word_index = 0; - Word16 j; - Word16 region; - Word16 out_word; - Word16 region_bit_count; - Word16 current_word_bits_left; - UWord16 slice; - Word16 out_word_bits_free = 16; - UWord32 *in_word_ptr; - UWord32 current_word; - - Word32 acca = 0; - Word32 accb; - Word16 temp; - - /* First set up the categorization control bits to look like one more set of region power bits. */ - out_word = 0; - move16(); - - drp_num_bits[number_of_regions] = num_categorization_control_bits; - move16(); - - drp_code_bits[number_of_regions] = (UWord16)categorization_control; - move16(); - - /* These code bits are right justified. */ - for (region=0; region <= number_of_regions; region++) - { - current_word_bits_left = drp_num_bits[region]; - move16(); - - current_word = (UWord32)drp_code_bits[region]; - move16(); - - j = sub(current_word_bits_left,out_word_bits_free); - - test(); - if (j >= 0) - { - temp = extract_l(L_shr_nocheck(current_word,j)); - out_word = add(out_word,temp); - - out_words[out_word_index++] = out_word; - move16(); - - out_word_bits_free = 16; - move16(); - - out_word_bits_free = sub(out_word_bits_free,j); - - acca = (current_word << out_word_bits_free); - out_word = extract_l(acca); - } - else - { - j = negate(j); - - acca = (current_word << j); - accb = L_deposit_l(out_word); - acca = L_add(accb,acca); - out_word = extract_l(acca); - - out_word_bits_free = sub(out_word_bits_free,current_word_bits_left); - } - } - - /* These code bits are left justified. */ - - for (region=0;region<number_of_regions; region++) - { - accb = L_deposit_l(out_word_index); - accb = L_shl_nocheck(accb,4); - accb = L_sub(accb,number_of_bits_per_frame); - test(); - if(accb < 0) - { - temp = shl_nocheck(region,2); - in_word_ptr = ®ion_mlt_bits[temp]; - region_bit_count = region_mlt_bit_counts[region]; - move16(); - - temp = sub(32,region_bit_count); - test(); - if(temp > 0) - current_word_bits_left = region_bit_count; - else - current_word_bits_left = 32; - - current_word = *in_word_ptr++; - - acca = L_deposit_l(out_word_index); - acca = L_shl_nocheck(acca,4); - acca = L_sub(acca,number_of_bits_per_frame); - - /* from while loop */ - test(); - test(); - logic16(); - while ((region_bit_count > 0) && (acca < 0)) - { - /* from while loop */ - test(); - test(); - logic16(); - - temp = sub(current_word_bits_left,out_word_bits_free); - test(); - if (temp >= 0) - { - temp = sub(32,out_word_bits_free); - accb = LU_shr(current_word,temp); - slice = (UWord16)extract_l(accb); - - out_word = add(out_word,slice); - - test(); - current_word <<= out_word_bits_free; - - current_word_bits_left = sub(current_word_bits_left,out_word_bits_free); - out_words[out_word_index++] = extract_l(out_word); - move16(); - - out_word = 0; - move16(); - - out_word_bits_free = 16; - move16(); - } - else - { - temp = sub(32,current_word_bits_left); - accb = LU_shr(current_word,temp); - slice = (UWord16)extract_l(accb); - - temp = sub(out_word_bits_free,current_word_bits_left); - test(); - accb = slice << temp; - acca = L_deposit_l(out_word); - acca = L_add(acca,accb); - out_word = extract_l(acca); - out_word_bits_free = sub(out_word_bits_free,current_word_bits_left); - - current_word_bits_left = 0; - move16(); - } - - test(); - if (current_word_bits_left == 0) - { - current_word = *in_word_ptr++; - region_bit_count = sub(region_bit_count,32); - - /* current_word_bits_left = MIN(32,region_bit_count); */ - temp = sub(32,region_bit_count); - test(); - if(temp > 0) - current_word_bits_left = region_bit_count; - else - current_word_bits_left = 32; - - } - acca = L_deposit_l(out_word_index); - acca = L_shl_nocheck(acca,4); - acca = L_sub(acca,number_of_bits_per_frame); - } - accb = L_deposit_l(out_word_index); - accb = L_shl_nocheck(accb,4); - accb = L_sub(accb,number_of_bits_per_frame); - } - } - - /* Fill out with 1's. */ - - test(); - while (acca < 0) - { - test(); - current_word = 0x0000ffff; - move32(); - - temp = sub(16,out_word_bits_free); - acca = LU_shr(current_word,temp); - slice = (UWord16)extract_l(acca); - - out_word = add(out_word,slice); - out_words[out_word_index++] = out_word; - move16(); - - out_word = 0; - move16(); - - out_word_bits_free = 16; - move16(); - - acca = L_deposit_l(out_word_index); - acca = L_shl_nocheck(acca,4); - acca = L_sub(acca,number_of_bits_per_frame); - } -} -/*************************************************************************** - Function: adjust_abs_region_power_index - - Syntax: adjust_abs_region_power_index(Word16 *absolute_region_power_index, - Word16 *mlt_coefs, - Word16 number_of_regions) - - inputs: *mlt_coefs - *absolute_region_power_index - number_of_regions - - outputs: *absolute_region_power_index - - Description: Adjusts the absolute power index - - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.03 | 0.03 - -------|--------------|---------------- - MAX | 0.12 | 0.12 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.03 | 0.03 | 0.03 - -------|--------------|----------------|---------------- - MAX | 0.14 | 0.14 | 0.14 - -------|--------------|----------------|---------------- - -***************************************************************************/ -void adjust_abs_region_power_index(Word16 *absolute_region_power_index,Word16 *mlt_coefs,Word16 number_of_regions) -{ - Word16 n,i; - Word16 region; - Word16 *raw_mlt_ptr; - - Word32 acca; - Word16 temp; - - for (region=0; region<number_of_regions; region++) - { - n = sub(absolute_region_power_index[region],39); - n = shr_nocheck(n,1); - - test(); - if (n > 0) - { - temp = extract_l(L_mult0(region,REGION_SIZE)); - - raw_mlt_ptr = &mlt_coefs[temp]; - - for (i=0; i<REGION_SIZE; i++) - { - acca = L_shl_nocheck(*raw_mlt_ptr,16); - acca = L_add(acca,32768L); - acca = L_shr_nocheck(acca,n); - acca = L_shr_nocheck(acca,16); - *raw_mlt_ptr++ = extract_l(acca); - } - - temp = shl_nocheck(n,1); - temp = sub(absolute_region_power_index[region],temp); - absolute_region_power_index[region] = temp; - move16(); - } - } -} - -/*************************************************************************** - Function: compute_region_powers - - Syntax: Word16 compute_region_powers(Word16 *mlt_coefs, - Word16 mag_shift, - Word16 *drp_num_bits, - UWord16 *drp_code_bits, - Word16 *absolute_region_power_index, - Word16 number_of_regions) - mlt_coefs[DCT_LENGTH]; - mag_shift; - drp_num_bits[MAX_NUMBER_OF_REGIONS]; - drp_code_bits[MAX_NUMBER_OF_REGIONS]; - absolute_region_power_index[MAX_NUMBER_OF_REGIONS]; - number_of_regions; - - Description: Computes the power for each of the regions - - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.09 | 0.09 - -------|--------------|---------------- - MAX | 0.13 | 0.13 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.20 | 0.20 | 0.20 - -------|--------------|----------------|---------------- - MAX | 0.29 | 0.29 | 0.29 - -------|--------------|----------------|---------------- - -***************************************************************************/ - -Word16 compute_region_powers(Word16 *mlt_coefs, - Word16 mag_shift, - Word16 *drp_num_bits, - UWord16 *drp_code_bits, - Word16 *absolute_region_power_index, - Word16 number_of_regions) -{ - - Word16 *input_ptr; - Word32 long_accumulator; - Word16 itemp1; - Word16 power_shift; - Word16 region; - Word16 j; - Word16 differential_region_power_index[MAX_NUMBER_OF_REGIONS]; - Word16 number_of_bits; - - Word32 acca; - Word16 temp; - Word16 temp1; - Word16 temp2; - - - input_ptr = mlt_coefs; - for (region=0; region<number_of_regions; region++) - { - long_accumulator = L_deposit_l(0); - - for (j=0; j<REGION_SIZE; j++) - { - itemp1 = *input_ptr++; - move16(); - long_accumulator = L_mac0(long_accumulator,itemp1,itemp1); - } - - power_shift = 0; - move16(); - - acca = (long_accumulator & 0x7fff0000L); - logic32(); - - test(); - while (acca > 0) - { - test(); - long_accumulator = L_shr_nocheck(long_accumulator,1); - - acca = (long_accumulator & 0x7fff0000L); - logic32(); - - power_shift = add(power_shift,1); - } - - acca = L_sub(long_accumulator,32767); - - temp = add(power_shift,15); - test(); - test(); - logic16(); - while ((acca <= 0) && (temp >= 0)) - { - test(); - test(); - logic16(); - - long_accumulator = L_shl_nocheck(long_accumulator,1); - acca = L_sub(long_accumulator,32767); - power_shift--; - temp = add(power_shift,15); - } - long_accumulator = L_shr_nocheck(long_accumulator,1); - /* 28963 corresponds to square root of 2 times REGION_SIZE(20). */ - acca = L_sub(long_accumulator,28963); - - test(); - if (acca >= 0) - power_shift = add(power_shift,1); - - acca = L_deposit_l(mag_shift); - acca = L_shl_nocheck(acca,1); - acca = L_sub(power_shift,acca); - acca = L_add(35,acca); - acca = L_sub(acca,REGION_POWER_TABLE_NUM_NEGATIVES); - absolute_region_power_index[region] = extract_l(acca); - } - - - /* Before we differentially encode the quantized region powers, adjust upward the - valleys to make sure all the peaks can be accurately represented. */ - temp = sub(number_of_regions,2); - - for (region = temp; region >= 0; region--) - { - temp1 = sub(absolute_region_power_index[region+1],DRP_DIFF_MAX); - temp2 = sub(absolute_region_power_index[region],temp1); - test(); - if (temp2 < 0) - { - absolute_region_power_index[region] = temp1; - move16(); - } - } - - /* The MLT is currently scaled too low by the factor - ENCODER_SCALE_FACTOR(=18318)/32768 * (1./sqrt(160). - This is the ninth power of 1 over the square root of 2. - So later we will add ESF_ADJUSTMENT_TO_RMS_INDEX (now 9) - to drp_code_bits[0]. */ - - /* drp_code_bits[0] can range from 1 to 31. 0 will be used only as an escape sequence. */ - temp1 = sub(1,ESF_ADJUSTMENT_TO_RMS_INDEX); - temp2 = sub(absolute_region_power_index[0],temp1); - test(); - if (temp2 < 0) - { - absolute_region_power_index[0] = temp1; - move16(); - } - - temp1 = sub(31,ESF_ADJUSTMENT_TO_RMS_INDEX); - - /* - * The next line was corrected in Release 1.2 - */ - - temp2 = sub(absolute_region_power_index[0], temp1); - test(); - if (temp2 > 0) - { - absolute_region_power_index[0] = temp1; - move16(); - } - - differential_region_power_index[0] = absolute_region_power_index[0]; - move16(); - - number_of_bits = 5; - move16(); - - drp_num_bits[0] = 5; - move16(); - - drp_code_bits[0] = (UWord16)add(absolute_region_power_index[0],ESF_ADJUSTMENT_TO_RMS_INDEX); - move16(); - - /* Lower limit the absolute region power indices to -8 and upper limit them to 31. Such extremes - may be mathematically impossible anyway.*/ - for (region=1; region<number_of_regions; region++) - { - temp1 = sub(-8,ESF_ADJUSTMENT_TO_RMS_INDEX); - temp2 = sub(absolute_region_power_index[region],temp1); - test(); - if (temp2 < 0) - { - absolute_region_power_index[region] = temp1; - move16(); - } - - temp1 = sub(31,ESF_ADJUSTMENT_TO_RMS_INDEX); - temp2 = sub(absolute_region_power_index[region],temp1); - test(); - if (temp2 > 0) - { - absolute_region_power_index[region] = temp1; - move16(); - } - } - - for (region=1; region<number_of_regions; region++) - { - j = sub(absolute_region_power_index[region],absolute_region_power_index[region-1]); - temp = sub(j,DRP_DIFF_MIN); - test(); - if (temp < 0) - { - j = DRP_DIFF_MIN; - } - j = sub(j,DRP_DIFF_MIN); - move16(); - differential_region_power_index[region] = j; - move16(); - - temp = add(absolute_region_power_index[region-1],differential_region_power_index[region]); - temp = add(temp,DRP_DIFF_MIN); - absolute_region_power_index[region] = temp; - move16(); - - number_of_bits = add(number_of_bits,differential_region_power_bits[region][j]); - drp_num_bits[region] = differential_region_power_bits[region][j]; - move16(); - drp_code_bits[region] = differential_region_power_codes[region][j]; - move16(); - } - - return (number_of_bits); -} - -/*************************************************************************** - Function: vector_quantize_mlts - - Syntax: void vector_quantize_mlts(number_of_available_bits, - number_of_regions, - num_categorization_control_possibilities, - mlt_coefs, - absolute_region_power_index, - power_categories, - category_balances, - p_categorization_control, - region_mlt_bit_counts, - region_mlt_bits) - - Word16 number_of_available_bits; - Word16 number_of_regions; - Word16 num_categorization_control_possibilities; - Word16 mlt_coefs[DCT_LENGTH]; - Word16 absolute_region_power_index[MAX_NUMBER_OF_REGIONS]; - Word16 power_categories[MAX_NUMBER_OF_REGIONS]; - Word16 category_balances[MAX_NUM_CATEGORIZATION_CONTROL_POSSIBILITIES-1]; - Word16 *p_categorization_control; - Word16 region_mlt_bit_counts[MAX_NUMBER_OF_REGIONS]; - Word32 region_mlt_bits[4*MAX_NUMBER_OF_REGIONS]; - - Description: Scalar quantized vector Huffman coding (SQVH) - - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.57 | 0.65 - -------|--------------|---------------- - MAX | 0.78 | 0.83 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.62 | 0.90 | 1.11 - -------|--------------|----------------|---------------- - MAX | 1.16 | 1.39 | 1.54 - -------|--------------|----------------|---------------- - -***************************************************************************/ - -void vector_quantize_mlts(Word16 number_of_available_bits, - Word16 number_of_regions, - Word16 num_categorization_control_possibilities, - Word16 *mlt_coefs, - Word16 *absolute_region_power_index, - Word16 *power_categories, - Word16 *category_balances, - Word16 *p_categorization_control, - Word16 *region_mlt_bit_counts, - UWord32 *region_mlt_bits) -{ - - Word16 *raw_mlt_ptr; - Word16 region; - Word16 category; - Word16 total_mlt_bits = 0; - - Word16 temp; - Word16 temp1; - Word16 temp2; - - /* Start in the middle of the categorization control range. */ - temp = shr_nocheck(num_categorization_control_possibilities,1); - temp = sub(temp,1); - for (*p_categorization_control = 0; *p_categorization_control < temp; (*p_categorization_control)++) - { - region = category_balances[*p_categorization_control]; - move16(); - power_categories[region] = add(power_categories[region],1); - move16(); - } - - for (region=0; region<number_of_regions; region++) - { - category = power_categories[region]; - move16(); - temp = extract_l(L_mult0(region,REGION_SIZE)); - raw_mlt_ptr = &mlt_coefs[temp]; - move16(); - temp = sub(category,(NUM_CATEGORIES-1)); - test(); - if (temp < 0) - { - region_mlt_bit_counts[region] = - vector_huffman(category, absolute_region_power_index[region],raw_mlt_ptr, - ®ion_mlt_bits[shl_nocheck(region,2)]); - } - else - { - region_mlt_bit_counts[region] = 0; - move16(); - } - total_mlt_bits = add(total_mlt_bits,region_mlt_bit_counts[region]); - } - - - /* If too few bits... */ - temp = sub(total_mlt_bits,number_of_available_bits); - test(); - test(); - logic16(); - while ((temp < 0) && (*p_categorization_control > 0)) - { - test(); - test(); - logic16(); - (*p_categorization_control)--; - region = category_balances[*p_categorization_control]; - move16(); - - power_categories[region] = sub(power_categories[region],1); - move16(); - - total_mlt_bits = sub(total_mlt_bits,region_mlt_bit_counts[region]); - category = power_categories[region]; - move16(); - - raw_mlt_ptr = &mlt_coefs[region*REGION_SIZE]; - move16(); - - temp = sub(category,(NUM_CATEGORIES-1)); - test(); - if (temp < 0) - { - region_mlt_bit_counts[region] = - vector_huffman(category, absolute_region_power_index[region],raw_mlt_ptr, - ®ion_mlt_bits[shl_nocheck(region,2)]); - } - else - { - region_mlt_bit_counts[region] = 0; - move16(); - } - total_mlt_bits = add(total_mlt_bits,region_mlt_bit_counts[region]); - temp = sub(total_mlt_bits,number_of_available_bits); - } - - /* If too many bits... */ - /* Set up for while loop test */ - temp1 = sub(total_mlt_bits,number_of_available_bits); - temp2 = sub(*p_categorization_control,sub(num_categorization_control_possibilities,1)); - test(); - test(); - logic16(); - - while ((temp1 > 0) && (temp2 < 0)) - { - /* operations for while contitions */ - test(); - test(); - logic16(); - - region = category_balances[*p_categorization_control]; - move16(); - - power_categories[region] = add(power_categories[region],1); - move16(); - - total_mlt_bits = sub(total_mlt_bits,region_mlt_bit_counts[region]); - category = power_categories[region]; - move16(); - - temp = extract_l(L_mult0(region,REGION_SIZE)); - raw_mlt_ptr = &mlt_coefs[temp]; - move16(); - - temp = sub(category,(NUM_CATEGORIES-1)); - test(); - if (temp < 0) - { - region_mlt_bit_counts[region] = - vector_huffman(category, absolute_region_power_index[region],raw_mlt_ptr, - ®ion_mlt_bits[shl_nocheck(region,2)]); - } - else - { - region_mlt_bit_counts[region] = 0; - move16(); - } - total_mlt_bits = add(total_mlt_bits,region_mlt_bit_counts[region]); - (*p_categorization_control)++; - - temp1 = sub(total_mlt_bits,number_of_available_bits); - temp2 = sub(*p_categorization_control,sub(num_categorization_control_possibilities,1)); - } -} - -/*************************************************************************** - Function: vector_huffman - - Syntax: Word16 vector_huffman(Word16 category, - Word16 power_index, - Word16 *raw_mlt_ptr, - UWord32 *word_ptr) - - inputs: Word16 category - Word16 power_index - Word16 *raw_mlt_ptr - - outputs: number_of_region_bits - *word_ptr - - - Description: Huffman encoding for each region based on category and power_index - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 0.03 | 0.03 - -------|--------------|---------------- - MAX | 0.04 | 0.04 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 0.03 | 0.03 | 0.03 - -------|--------------|----------------|---------------- - MAX | 0.04 | 0.04 | 0.04 - -------|--------------|----------------|---------------- - -***************************************************************************/ -Word16 vector_huffman(Word16 category, - Word16 power_index, - Word16 *raw_mlt_ptr, - UWord32 *word_ptr) -{ - - - Word16 inv_of_step_size_times_std_dev; - Word16 j,n; - Word16 k; - Word16 number_of_region_bits; - Word16 number_of_non_zero; - Word16 vec_dim; - Word16 num_vecs; - Word16 kmax, kmax_plus_one; - Word16 index,signs_index; - Word16 *bitcount_table_ptr; - UWord16 *code_table_ptr; - Word32 code_bits; - Word16 number_of_code_bits; - UWord32 current_word; - Word16 current_word_bits_free; - - Word32 acca; - Word32 accb; - Word16 temp; - - Word16 mytemp; /* new variable in Release 1.2 */ - Word16 myacca; /* new variable in Release 1.2 */ - - - /* initialize variables */ - vec_dim = vector_dimension[category]; - move16(); - - num_vecs = number_of_vectors[category]; - move16(); - - kmax = max_bin[category]; - move16(); - - kmax_plus_one = add(kmax,1); - move16(); - - current_word = 0L; - move16(); - - current_word_bits_free = 32; - move16(); - - number_of_region_bits = 0; - move16(); - - /* set up table pointers */ - bitcount_table_ptr = (Word16 *)table_of_bitcount_tables[category]; - code_table_ptr = (UWord16 *) table_of_code_tables[category]; - - /* compute inverse of step size * standard deviation */ - acca = L_mult(step_size_inverse_table[category],standard_deviation_inverse_table[power_index]); - acca = L_shr_nocheck(acca,1); - acca = L_add(acca,4096); - acca = L_shr_nocheck(acca,13); - - /* - * The next two lines are new to Release 1.2 - */ - - mytemp = (Word16)(acca & 0x3); - acca = L_shr_nocheck(acca,2); - - inv_of_step_size_times_std_dev = extract_l(acca); - - - for (n=0; n<num_vecs; n++) - { - index = 0; - move16(); - - signs_index = 0; - move16(); - - number_of_non_zero = 0; - move16(); - - for (j=0; j<vec_dim; j++) - { - k = abs_s(*raw_mlt_ptr); - - acca = L_mult(k,inv_of_step_size_times_std_dev); - acca = L_shr_nocheck(acca,1); - - /* - * The next four lines are new to Release 1.2 - */ - - myacca = (Word16)L_mult(k,mytemp); - myacca = (Word16)L_shr_nocheck(myacca,1); - myacca = (Word16)L_add(myacca,int_dead_zone_low_bits[category]); - myacca = (Word16)L_shr_nocheck(myacca,2); - - acca = L_add(acca,int_dead_zone[category]); - - /* - * The next two lines are new to Release 1.2 - */ - - acca = L_add(acca,myacca); - acca = L_shr_nocheck(acca,13); - - k = extract_l(acca); - - test(); - if (k != 0) - { - number_of_non_zero = add(number_of_non_zero,1); - signs_index = shl_nocheck(signs_index,1); - - test(); - if (*raw_mlt_ptr > 0) - { - signs_index = add(signs_index,1); - } - - temp = sub(k,kmax); - test(); - if (temp > 0) - { - k = kmax; - move16(); - } - } - acca = L_shr_nocheck(L_mult(index,(kmax_plus_one)),1); - index = extract_l(acca); - index = add(index,k); - raw_mlt_ptr++; - } - - code_bits = *(code_table_ptr+index); - number_of_code_bits = add((*(bitcount_table_ptr+index)),number_of_non_zero); - number_of_region_bits = add(number_of_region_bits,number_of_code_bits); - - acca = code_bits << number_of_non_zero; - accb = L_deposit_l(signs_index); - acca = L_add(acca,accb); - code_bits = acca; - move32(); - - /* msb of codebits is transmitted first. */ - j = sub(current_word_bits_free,number_of_code_bits); - test(); - if (j >= 0) - { - test(); - acca = code_bits << j; - current_word = L_add(current_word,acca); - current_word_bits_free = j; - move16(); - } - else - { - j = negate(j); - acca = L_shr_nocheck(code_bits,j); - current_word = L_add(current_word,acca); - - *word_ptr++ = current_word; - move16(); - - current_word_bits_free = sub(32,j); - test(); - current_word = code_bits << current_word_bits_free; - } - } - - *word_ptr++ = current_word; - move16(); - - return (number_of_region_bits); -} - - diff --git a/sflphone-common/libs/pjproject/third_party/g7221/encode/sam2coef.c b/sflphone-common/libs/pjproject/third_party/g7221/encode/sam2coef.c deleted file mode 100644 index 3dd5b7666038b4d0f201c48cf3637ac5856946e2..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/g7221/encode/sam2coef.c +++ /dev/null @@ -1,271 +0,0 @@ -/****************************************************************************** -** -** ITU-T G.722.1 (2005-05) - Fixed point implementation for main body and Annex C -** > Software Release 2.1 (2008-06) -** (Simple repackaging; no change from 2005-05 Release 2.0 code) -** -** � 2004 Polycom, Inc. -** -** All rights reserved. -** -******************************************************************************/ - -/****************************************************************************** -* Filename: samples_to_rmlt_coefs.c -* -* Purpose: Convert Samples to Reversed MLT (Modulated Lapped Transform) -* Coefficients -* -* The "Reversed MLT" is an overlapped block transform which uses -* even symmetry * on the left, odd symmetry on the right and a -* Type IV DCT as the block transform. * It is thus similar to a -* MLT which uses odd symmetry on the left, even symmetry * on the -* right and a Type IV DST as the block transform. In fact, it is -* equivalent * to reversing the order of the samples, performing -* an MLT and then negating all * the even-numbered coefficients. -* -******************************************************************************/ - -/*************************************************************************** - Include files -***************************************************************************/ -#include "defs.h" -#include "tables.h" -#include "count.h" - -/*************************************************************************** - Function: samples_to_rmlt_coefs - - Syntax: Word16 samples_to_rmlt_coefs(new_samples, - old_samples, - coefs, - dct_length) - Word16 *new_samples; - Word16 *old_samples; - Word16 *coefs; - Word16 dct_length; - - Description: Convert samples to MLT coefficients - - Design Notes: - - WMOPS: 7kHz | 24kbit | 32kbit - -------|--------------|---------------- - AVG | 1.40 | 1.40 - -------|--------------|---------------- - MAX | 1.40 | 1.40 - -------|--------------|---------------- - - 14kHz | 24kbit | 32kbit | 48kbit - -------|--------------|----------------|---------------- - AVG | 3.07 | 3.07 | 3.07 - -------|--------------|----------------|---------------- - MAX | 3.10 | 3.10 | 3.10 - -------|--------------|----------------|---------------- - -***************************************************************************/ - -Word16 samples_to_rmlt_coefs(const Word16 *new_samples,Word16 *old_samples,Word16 *coefs,Word16 dct_length) -{ - - Word16 index, vals_left,mag_shift,n; - Word16 windowed_data[MAX_DCT_LENGTH]; - Word16 *old_ptr; - const Word16 *new_ptr, *sam_low, *sam_high; - Word16 *win_low, *win_high; - Word16 *dst_ptr; - Word16 neg_win_low; - Word16 samp_high; - Word16 half_dct_size; - - Word32 acca; - Word32 accb; - Word16 temp; - Word16 temp1; - Word16 temp2; - Word16 temp5; - - half_dct_size = shr_nocheck(dct_length,1); - - /*++++++++++++++++++++++++++++++++++++++++++++*/ - /* Get the first half of the windowed samples */ - /*++++++++++++++++++++++++++++++++++++++++++++*/ - - dst_ptr = windowed_data; - move16(); - - /* address arithmetic */ - test(); - if (dct_length==DCT_LENGTH) - { - win_high = samples_to_rmlt_window + half_dct_size; - } - else - { - win_high = max_samples_to_rmlt_window + half_dct_size; - } - - win_low = win_high; - move16(); - - /* address arithmetic */ - sam_high = old_samples + half_dct_size; - - sam_low = sam_high; - move16(); - - for (vals_left = half_dct_size;vals_left > 0;vals_left--) - { - acca = 0L; - move32(); - - acca = L_mac(acca,*--win_low, *--sam_low); - acca = L_mac(acca,*win_high++, *sam_high++); - temp = itu_round(acca); - - *dst_ptr++ = temp; - move16(); - } - - /*+++++++++++++++++++++++++++++++++++++++++++++*/ - /* Get the second half of the windowed samples */ - /*+++++++++++++++++++++++++++++++++++++++++++++*/ - - sam_low = new_samples; - move16(); - - /* address arithmetic */ - sam_high = new_samples + dct_length; - - for (vals_left = half_dct_size; vals_left > 0; vals_left--) - { - acca = 0L; - move32(); - - acca = L_mac(acca,*--win_high, *sam_low++); - neg_win_low = negate(*win_low++); - samp_high = *--sam_high; - acca = L_mac(acca, neg_win_low, samp_high); - temp = itu_round(acca); - - *dst_ptr++=temp; - move16(); - } - - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* Save the new samples for next time, when they will be the old samples */ - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - new_ptr = new_samples; - move16(); - - old_ptr = old_samples; - move16(); - - for (vals_left = dct_length;vals_left > 0;vals_left--) - { - *old_ptr++ = *new_ptr++; - move16(); - } - - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* Calculate how many bits to shift up the input to the DCT. */ - /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - temp1=0; - move16(); - - for(index=0;index<dct_length;index++) - { - temp2 = abs_s(windowed_data[index]); - temp = sub(temp2,temp1); - test(); - if(temp > 0) - { - move16(); - temp1 = temp2; - } - } - - mag_shift=0; - move16(); - - temp = sub(temp1,14000); - test(); - if (temp >= 0) - { - mag_shift = 0; - move16(); - } - else - { - temp = sub(temp1,438); - test(); - if(temp < 0) - temp = add(temp1,1); - else - { - temp = temp1; - move16(); - } - accb = L_mult(temp,9587); - acca = L_shr_nocheck(accb,20); - temp5 = extract_l(acca); - temp = norm_s(temp5); - test(); - if (temp == 0) - { - mag_shift = 9; - move16(); - } - else - mag_shift = sub(temp,6); - - } - - acca = 0L; - move32(); - for(index=0; index<dct_length; index++) - { - temp = abs_s( windowed_data[index]); - acca = L_add(acca,temp); - } - - acca = L_shr_nocheck(acca,7); - - test(); - if (temp1 < acca) - { - mag_shift = sub(mag_shift,1); - } - - test(); - if (mag_shift > 0) - { - for(index=0;index<dct_length;index++) - { - windowed_data[index] = shl_nocheck(windowed_data[index],mag_shift); - } - } - else - { - test(); - if (mag_shift < 0) - { - n = negate(mag_shift); - for(index=0;index<dct_length;index++) - { - windowed_data[index] = shr_nocheck(windowed_data[index],n); - move16(); - } - } - } - - /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - /* Perform a Type IV DCT on the windowed data to get the coefficients */ - /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ - - dct_type_iv_a(windowed_data, coefs, dct_length); - - return(mag_shift); -} diff --git a/sflphone-common/libs/pjproject/third_party/mp3/BladeMP3EncDLL.h b/sflphone-common/libs/pjproject/third_party/mp3/BladeMP3EncDLL.h deleted file mode 100644 index 2e32b913a9d08b44eee1b138b3fcb8d103c196c6..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/mp3/BladeMP3EncDLL.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Blade Type of DLL Interface for Lame encoder - * - * Copyright (c) 1999-2002 A.L. Faber - * Based on bladedll.h version 1.0 written by Jukka Poikolainen - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -//#define _BLADEDLL 1 - -#ifndef ___BLADEDLL_H_INCLUDED___ -#define ___BLADEDLL_H_INCLUDED___ - -#ifdef __GNUC__ -//#define ATTRIBUTE_PACKED __attribute__((packed)) -#define ATTRIBUTE_PACKED -#else -#define ATTRIBUTE_PACKED -#pragma pack(push) -#pragma pack(1) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* encoding formats */ - -#define BE_CONFIG_MP3 0 -#define BE_CONFIG_LAME 256 - -/* type definitions */ - -typedef unsigned long HBE_STREAM; -typedef HBE_STREAM *PHBE_STREAM; -typedef unsigned long BE_ERR; - -/* error codes */ - -#define BE_ERR_SUCCESSFUL 0x00000000 -#define BE_ERR_INVALID_FORMAT 0x00000001 -#define BE_ERR_INVALID_FORMAT_PARAMETERS 0x00000002 -#define BE_ERR_NO_MORE_HANDLES 0x00000003 -#define BE_ERR_INVALID_HANDLE 0x00000004 -#define BE_ERR_BUFFER_TOO_SMALL 0x00000005 - -/* other constants */ - -#define BE_MAX_HOMEPAGE 128 - -/* format specific variables */ - -#define BE_MP3_MODE_STEREO 0 -#define BE_MP3_MODE_JSTEREO 1 -#define BE_MP3_MODE_DUALCHANNEL 2 -#define BE_MP3_MODE_MONO 3 - - - -#define MPEG1 1 -#define MPEG2 0 - -#ifdef _BLADEDLL -#undef FLOAT - #include <Windows.h> -#endif - -#define CURRENT_STRUCT_VERSION 1 -#define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG) // is currently 331 bytes - - -typedef enum -{ - VBR_METHOD_NONE = -1, - VBR_METHOD_DEFAULT = 0, - VBR_METHOD_OLD = 1, - VBR_METHOD_NEW = 2, - VBR_METHOD_MTRH = 3, - VBR_METHOD_ABR = 4 -} VBRMETHOD; - -typedef enum -{ - LQP_NOPRESET =-1, - - // QUALITY PRESETS - LQP_NORMAL_QUALITY = 0, - LQP_LOW_QUALITY = 1, - LQP_HIGH_QUALITY = 2, - LQP_VOICE_QUALITY = 3, - LQP_R3MIX = 4, - LQP_VERYHIGH_QUALITY = 5, - LQP_STANDARD = 6, - LQP_FAST_STANDARD = 7, - LQP_EXTREME = 8, - LQP_FAST_EXTREME = 9, - LQP_INSANE = 10, - LQP_ABR = 11, - LQP_CBR = 12, - LQP_MEDIUM = 13, - LQP_FAST_MEDIUM = 14, - - // NEW PRESET VALUES - LQP_PHONE =1000, - LQP_SW =2000, - LQP_AM =3000, - LQP_FM =4000, - LQP_VOICE =5000, - LQP_RADIO =6000, - LQP_TAPE =7000, - LQP_HIFI =8000, - LQP_CD =9000, - LQP_STUDIO =10000 - -} LAME_QUALITY_PRESET; - - - -typedef struct { - unsigned long dwConfig; // BE_CONFIG_XXXXX - // Currently only BE_CONFIG_MP3 is supported - union { - - struct { - - unsigned long dwSampleRate; // 48000, 44100 and 32000 allowed - unsigned char byMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO - unsigned short wBitrate; // 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed - int bPrivate; - int bCRC; - int bCopyright; - int bOriginal; - - } mp3; // BE_CONFIG_MP3 - - struct - { - // STRUCTURE INFORMATION - unsigned long dwStructVersion; - unsigned long dwStructSize; - - // BASIC ENCODER SETTINGS - unsigned long dwSampleRate; // SAMPLERATE OF INPUT FILE - unsigned long dwReSampleRate; // DOWNSAMPLERATE, 0=ENCODER DECIDES - long nMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO - unsigned long dwBitrate; // CBR bitrate, VBR min bitrate - unsigned long dwMaxBitrate; // CBR ignored, VBR Max bitrate - long nPreset; // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum - unsigned long dwMpegVersion; // FUTURE USE, MPEG-1 OR MPEG-2 - unsigned long dwPsyModel; // FUTURE USE, SET TO 0 - unsigned long dwEmphasis; // FUTURE USE, SET TO 0 - - // BIT STREAM SETTINGS - int bPrivate; // Set Private Bit (TRUE/FALSE) - int bCRC; // Insert CRC (TRUE/FALSE) - int bCopyright; // Set Copyright Bit (TRUE/FALSE) - int bOriginal; // Set Original Bit (TRUE/FALSE) - - // VBR STUFF - int bWriteVBRHeader; // WRITE XING VBR HEADER (TRUE/FALSE) - int bEnableVBR; // USE VBR ENCODING (TRUE/FALSE) - int nVBRQuality; // VBR QUALITY 0..9 - unsigned long dwVbrAbr_bps; // Use ABR in stead of nVBRQuality - VBRMETHOD nVbrMethod; - int bNoRes; // Disable Bit resorvoir (TRUE/FALSE) - - // MISC SETTINGS - int bStrictIso; // Use strict ISO encoding rules (TRUE/FALSE) - unsigned short nQuality; // Quality Setting, HIGH unsigned char should be NOT LOW byte, otherwhise quality=5 - - // FUTURE USE, SET TO 0, align strucutre to 331 bytes - unsigned char btReserved[255-4*sizeof(unsigned long) - sizeof( unsigned short )]; - - } LHV1; // LAME header version 1 - - struct { - - unsigned long dwSampleRate; - unsigned char byMode; - unsigned short wBitrate; - unsigned char byEncodingMethod; - - } aac; - - } format; - -} BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED; - - -typedef struct { - - // BladeEnc DLL Version number - - unsigned char byDLLMajorVersion; - unsigned char byDLLMinorVersion; - - // BladeEnc Engine Version Number - - unsigned char byMajorVersion; - unsigned char byMinorVersion; - - // DLL Release date - - unsigned char byDay; - unsigned char byMonth; - unsigned short wYear; - - // BladeEnc Homepage URL - - char zHomepage[BE_MAX_HOMEPAGE + 1]; - - unsigned char byAlphaLevel; - unsigned char byBetaLevel; - unsigned char byMMXEnabled; - - unsigned char btReserved[125]; - - -} BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED; - -#ifndef _BLADEDLL - -typedef unsigned long (*BEINITSTREAM) (PBE_CONFIG, unsigned long *, unsigned long *, PHBE_STREAM); -typedef unsigned long (*BEENCODECHUNK) (HBE_STREAM, unsigned long, short *, unsigned char *, unsigned long *); - -// added for floating point audio -- DSPguru, jd -typedef unsigned long (*BEENCODECHUNKFLOATS16NI) (HBE_STREAM, unsigned long, float *, float *, unsigned char *, unsigned long *); -typedef unsigned long (*BEDEINITSTREAM) (HBE_STREAM, unsigned char *, unsigned long *); -typedef unsigned long (*BECLOSESTREAM) (HBE_STREAM); -typedef void (*BEVERSION) (PBE_VERSION); -typedef unsigned long (*BEWRITEVBRHEADER) (const char*); -typedef unsigned long (*BEWRITEINFOTAG) (HBE_STREAM, const char * ); - -#define TEXT_BEINITSTREAM "beInitStream" -#define TEXT_BEENCODECHUNK "beEncodeChunk" -#define TEXT_BEENCODECHUNKFLOATS16NI "beEncodeChunkFloatS16NI" -#define TEXT_BEDEINITSTREAM "beDeinitStream" -#define TEXT_BECLOSESTREAM "beCloseStream" -#define TEXT_BEVERSION "beVersion" -#define TEXT_BEWRITEVBRHEADER "beWriteVBRHeader" -#define TEXT_BEFLUSHNOGAP "beFlushNoGap" -#define TEXT_BEWRITEINFOTAG "beWriteInfoTag" - - -#else - -__declspec(dllexport) unsigned long beInitStream(PBE_CONFIG pbeConfig, Punsigned long dwSamples, Punsigned long dwBufferSize, PHBE_STREAM phbeStream); -__declspec(dllexport) unsigned long beEncodeChunk(HBE_STREAM hbeStream, unsigned long nSamples, PSHORT pSamples, Punsigned char pOutput, Punsigned long pdwOutput); - -// added for floating point audio -- DSPguru, jd -__declspec(dllexport) unsigned long beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, unsigned long nSamples, PFLOAT buffer_l, PFLOAT buffer_r, Punsigned char pOutput, Punsigned long pdwOutput); -__declspec(dllexport) unsigned long beDeinitStream(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput); -__declspec(dllexport) unsigned long beCloseStream(HBE_STREAM hbeStream); -__declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion); -__declspec(dllexport) unsigned long beWriteVBRHeader(LPCSTR lpszFileName); -__declspec(dllexport) unsigned long beFlushNoGap(HBE_STREAM hbeStream, Punsigned char pOutput, Punsigned long pdwOutput); -__declspec(dllexport) unsigned long beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName ); - -#endif - -#ifndef __GNUC__ -#pragma pack(pop) -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sflphone-common/libs/pjproject/third_party/mp3/mp3_port.h b/sflphone-common/libs/pjproject/third_party/mp3/mp3_port.h deleted file mode 100644 index fe8bbb751453af96d87ab07da80bb0b8dfa854cb..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/mp3/mp3_port.h +++ /dev/null @@ -1,147 +0,0 @@ -/* $Id: mp3_port.h 1177 2007-04-09 07:06:08Z bennylp $ */ -/* - * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * Contributed by: - * Toni < buldozer at aufbix dot org > - */ - -#ifndef __PJMEDIA_MP3_PORT_H__ -#define __PJMEDIA_MP3_PORT_H__ - - -/** - * @file mp3_port.h - * @brief MP3 writer - */ -#include <pjmedia/port.h> - -/** - * @defgroup PJMEDIA_MP3_FILE_REC MP3 Audio File Writer (Recorder) - * @ingroup PJMEDIA_PORT - * @brief MP3 Audio File Writer (Recorder) - * @{ - * - * This section describes MP3 file writer. Currently it only works on Windows - * using BladeEncDLL of the LAME MP3 encoder. <b>Note that the LAME_ENC.DLL - * file must exist in the PATH so that the encoder can work properly.</b> - * - * The MP3 file writer is created with #pjmedia_mp3_writer_port_create() which - * among other things specifies the desired file name and audio properties. - * It then takes PCM input when #pjmedia_port_put_frame() is called and encode - * the PCM input into MP3 streams before writing it to the .mp3 file. - */ - - -PJ_BEGIN_DECL - - -/** - * This structure contains encoding options that can be specified during - * MP3 writer port creation. Application should always zero the structure - * before setting some value to make sure that default options will be used. - */ -typedef struct pjmedia_mp3_encoder_option -{ - /** Specify whether variable bit rate should be used. Variable bitrate - * would normally produce better quality at the expense of probably - * larger file. - */ - pj_bool_t vbr; - - /** Target bitrate, in bps. If VBR is enabled, this settings specifies - * the average bit-rate requested, and will make the encoder ignore - * the quality setting. For CBR, this specifies the actual bitrate, - * and if this option is zero, it will be set to the sampling rate - * multiplied by number of channels. - */ - unsigned bit_rate; - - /** Encoding quality, 0-9, with 0 is the highest quality. For VBR, the - * quality setting will only take effect when bit_rate setting is zero. - */ - unsigned quality; - -} pjmedia_mp3_encoder_option; - - -/** - * Create a media port to record PCM media to a MP3 file. After the port - * is created, application can call #pjmedia_port_put_frame() to feed the - * port with PCM frames. The port then will encode the PCM frame into MP3 - * stream, and store it to MP3 file specified in the argument. - * - * When application has finished with writing MP3 file, it must destroy the - * media port with #pjmedia_port_destroy() so that the MP3 file can be - * closed properly. - * - * @param pool Pool to create memory buffers for this port. - * @param filename File name. - * @param clock_rate The sampling rate. - * @param channel_count Number of channels. - * @param samples_per_frame Number of samples per frame. - * @param bits_per_sample Number of bits per sample (eg 16). - * @param option Optional option to set encoding parameters. - * @param p_port Pointer to receive the file port instance. - * - * @return PJ_SUCCESS on success. - */ -PJ_DECL(pj_status_t) -pjmedia_mp3_writer_port_create(pj_pool_t *pool, - const char *filename, - unsigned clock_rate, - unsigned channel_count, - unsigned samples_per_frame, - unsigned bits_per_sample, - const pjmedia_mp3_encoder_option *option, - pjmedia_port **p_port ); - -/** - * Register the callback to be called when the file writing has reached - * certain size. Application can use this callback, for example, to limit - * the size of the output file. - * - * @param port The file writer port. - * @param pos The file position on which the callback will be called. - * @param user_data User data to be specified in the callback, and will be - * given on the callback. - * @param cb Callback to be called. If the callback returns non- - * PJ_SUCCESS, the writing will stop. Note that if - * application destroys the port in the callback, it must - * return non-PJ_SUCCESS here. - * - * @return PJ_SUCCESS on success. - */ -PJ_DECL(pj_status_t) -pjmedia_mp3_writer_port_set_cb( pjmedia_port *port, - pj_size_t pos, - void *user_data, - pj_status_t (*cb)(pjmedia_port *port, - void *usr_data)); - - -/** - * @} - */ - - -PJ_END_DECL - -#endif /* __PJMEDIA_MP3_PORT_H__ */ - diff --git a/sflphone-common/libs/pjproject/third_party/mp3/mp3_writer.c b/sflphone-common/libs/pjproject/third_party/mp3/mp3_writer.c deleted file mode 100644 index 4abd78d449f12e0694032b84cca3ed39964f3e43..0000000000000000000000000000000000000000 --- a/sflphone-common/libs/pjproject/third_party/mp3/mp3_writer.c +++ /dev/null @@ -1,563 +0,0 @@ -/* $Id: mp3_writer.c 1233 2007-04-30 11:05:23Z bennylp $ */ -/* - * Copyright (C) 2003-2007 Benny Prijono <benny@prijono.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * Contributed by: - * Toni < buldozer at aufbix dot org > - */ -#include "mp3_port.h" -#include <pjmedia/errno.h> -#include <pj/assert.h> -#include <pj/file_access.h> -#include <pj/file_io.h> -#include <pj/log.h> -#include <pj/pool.h> -#include <pj/string.h> -#include <pj/unicode.h> - - -/* Include BladeDLL declarations */ -#include "BladeMP3EncDLL.h" - - -#define THIS_FILE "mp3_writer.c" -#define SIGNATURE PJMEDIA_PORT_SIGNATURE('F', 'W', 'M', '3') -#define BYTES_PER_SAMPLE 2 - -static struct BladeDLL -{ - void *hModule; - int refCount; - BEINITSTREAM beInitStream; - BEENCODECHUNK beEncodeChunk; - BEDEINITSTREAM beDeinitStream; - BECLOSESTREAM beCloseStream; - BEVERSION beVersion; - BEWRITEVBRHEADER beWriteVBRHeader; - BEWRITEINFOTAG beWriteInfoTag; -} BladeDLL; - - -struct mp3_file_port -{ - pjmedia_port base; - pj_size_t total; - pj_oshandle_t fd; - pj_size_t cb_size; - pj_status_t (*cb)(pjmedia_port*, void*); - - unsigned silence_duration; - - pj_str_t mp3_filename; - pjmedia_mp3_encoder_option mp3_option; - unsigned mp3_samples_per_frame; - pj_int16_t *mp3_sample_buf; - unsigned mp3_sample_pos; - HBE_STREAM mp3_stream; - unsigned char *mp3_buf; -}; - - -static pj_status_t file_put_frame(pjmedia_port *this_port, - const pjmedia_frame *frame); -static pj_status_t file_get_frame(pjmedia_port *this_port, - pjmedia_frame *frame); -static pj_status_t file_on_destroy(pjmedia_port *this_port); - - -#if defined(PJ_WIN32) || defined(_WIN32) || defined(WIN32) - -#include <windows.h> -#define DLL_NAME PJ_T("LAME_ENC.DLL") - -/* - * Load BladeEncoder DLL. - */ -static pj_status_t init_blade_dll(void) -{ - if (BladeDLL.refCount == 0) { - #define GET_PROC(type, name) \ - BladeDLL.name = (type)GetProcAddress(BladeDLL.hModule, PJ_T(#name)); \ - if (BladeDLL.name == NULL) { \ - PJ_LOG(1,(THIS_FILE, "Unable to find %s in %s", #name, DLL_NAME)); \ - return PJ_RETURN_OS_ERROR(GetLastError()); \ - } - - BE_VERSION beVersion; - BladeDLL.hModule = (void*)LoadLibrary(DLL_NAME); - if (BladeDLL.hModule == NULL) { - pj_status_t status = PJ_RETURN_OS_ERROR(GetLastError()); - char errmsg[PJ_ERR_MSG_SIZE]; - - pj_strerror(status, errmsg, sizeof(errmsg)); - PJ_LOG(1,(THIS_FILE, "Unable to load %s: %s", DLL_NAME, errmsg)); - return status; - } - - GET_PROC(BEINITSTREAM, beInitStream); - GET_PROC(BEENCODECHUNK, beEncodeChunk); - GET_PROC(BEDEINITSTREAM, beDeinitStream); - GET_PROC(BECLOSESTREAM, beCloseStream); - GET_PROC(BEVERSION, beVersion); - GET_PROC(BEWRITEVBRHEADER, beWriteVBRHeader); - GET_PROC(BEWRITEINFOTAG, beWriteInfoTag); - - #undef GET_PROC - - BladeDLL.beVersion(&beVersion); - PJ_LOG(4,(THIS_FILE, "%s encoder v%d.%d loaded (%s)", DLL_NAME, - beVersion.byMajorVersion, beVersion.byMinorVersion, - beVersion.zHomepage)); - } - ++BladeDLL.refCount; - return PJ_SUCCESS; -} - -/* - * Decrement the reference counter of the DLL. - */ -static void deinit_blade_dll() -{ - --BladeDLL.refCount; - if (BladeDLL.refCount == 0 && BladeDLL.hModule) { - FreeLibrary(BladeDLL.hModule); - BladeDLL.hModule = NULL; - PJ_LOG(4,(THIS_FILE, "%s unloaded", DLL_NAME)); - } -} - -#else - -static pj_status_t init_blade_dll(void) -{ - PJ_LOG(1,(THIS_FILE, "Error: MP3 writer port only works on Windows for now")); - return PJ_ENOTSUP; -} - -static void deinit_blade_dll() -{ -} -#endif - - - -/* - * Initialize MP3 encoder. - */ -static pj_status_t init_mp3_encoder(struct mp3_file_port *fport, - pj_pool_t *pool) -{ - BE_CONFIG LConfig; - unsigned long InSamples; - unsigned long OutBuffSize; - long MP3Err; - - /* - * Initialize encoder configuration. - */ - pj_bzero(&LConfig, sizeof(BE_CONFIG)); - LConfig.dwConfig = BE_CONFIG_LAME; - LConfig.format.LHV1.dwStructVersion = 1; - LConfig.format.LHV1.dwStructSize = sizeof(BE_CONFIG); - LConfig.format.LHV1.dwSampleRate = fport->base.info.clock_rate; - LConfig.format.LHV1.dwReSampleRate = 0; - - if (fport->base.info.channel_count==1) - LConfig.format.LHV1.nMode = BE_MP3_MODE_MONO; - else if (fport->base.info.channel_count==2) - LConfig.format.LHV1.nMode = BE_MP3_MODE_STEREO; - else - return PJMEDIA_ENCCHANNEL; - - LConfig.format.LHV1.dwBitrate = fport->mp3_option.bit_rate / 1000; - LConfig.format.LHV1.nPreset = LQP_NOPRESET; - LConfig.format.LHV1.bCopyright = 0; - LConfig.format.LHV1.bCRC = 1; - LConfig.format.LHV1.bOriginal = 1; - LConfig.format.LHV1.bPrivate = 0; - - if (!fport->mp3_option.vbr) { - LConfig.format.LHV1.nVbrMethod = VBR_METHOD_NONE; - LConfig.format.LHV1.bWriteVBRHeader = 0; - LConfig.format.LHV1.bEnableVBR = 0; - } else { - LConfig.format.LHV1.nVbrMethod = VBR_METHOD_DEFAULT; - LConfig.format.LHV1.bWriteVBRHeader = 1; - LConfig.format.LHV1.dwVbrAbr_bps = fport->mp3_option.bit_rate; - LConfig.format.LHV1.nVBRQuality = (pj_uint16_t) - fport->mp3_option.quality; - LConfig.format.LHV1.bEnableVBR = 1; - } - - LConfig.format.LHV1.nQuality = (pj_uint16_t) - (((0-fport->mp3_option.quality-1)<<8) | - fport->mp3_option.quality); - - /* - * Init MP3 stream. - */ - InSamples = 0; - MP3Err = BladeDLL.beInitStream(&LConfig, &InSamples, &OutBuffSize, - &fport->mp3_stream); - if (MP3Err != BE_ERR_SUCCESSFUL) - return PJMEDIA_ERROR; - - /* - * Allocate sample buffer. - */ - fport->mp3_samples_per_frame = (unsigned)InSamples; - fport->mp3_sample_buf = pj_pool_alloc(pool, fport->mp3_samples_per_frame * 2); - if (!fport->mp3_sample_buf) - return PJ_ENOMEM; - - /* - * Allocate encoded MP3 buffer. - */ - fport->mp3_buf = pj_pool_alloc(pool, (pj_size_t)OutBuffSize); - if (fport->mp3_buf == NULL) - return PJ_ENOMEM; - - - return PJ_SUCCESS; -} - - -/* - * Create MP3 file writer port. - */ -PJ_DEF(pj_status_t) -pjmedia_mp3_writer_port_create( pj_pool_t *pool, - const char *filename, - unsigned sampling_rate, - unsigned channel_count, - unsigned samples_per_frame, - unsigned bits_per_sample, - const pjmedia_mp3_encoder_option *param_option, - pjmedia_port **p_port ) -{ - struct mp3_file_port *fport; - pj_status_t status; - - status = init_blade_dll(); - if (status != PJ_SUCCESS) - return status; - - /* Check arguments. */ - PJ_ASSERT_RETURN(pool && filename && p_port, PJ_EINVAL); - - /* Only supports 16bits per sample for now. */ - PJ_ASSERT_RETURN(bits_per_sample == 16, PJ_EINVAL); - - /* Create file port instance. */ - fport = pj_pool_zalloc(pool, sizeof(struct mp3_file_port)); - PJ_ASSERT_RETURN(fport != NULL, PJ_ENOMEM); - - /* Initialize port info. */ - pj_strdup2_with_null(pool, &fport->mp3_filename, filename); - pjmedia_port_info_init(&fport->base.info, &fport->mp3_filename, SIGNATURE, - sampling_rate, channel_count, bits_per_sample, - samples_per_frame); - - fport->base.get_frame = &file_get_frame; - fport->base.put_frame = &file_put_frame; - fport->base.on_destroy = &file_on_destroy; - - - /* Open file in write and read mode. - * We need the read mode because we'll modify the WAVE header once - * the recording has completed. - */ - status = pj_file_open(pool, filename, PJ_O_WRONLY, &fport->fd); - if (status != PJ_SUCCESS) { - deinit_blade_dll(); - return status; - } - - /* Copy and initialize option with default settings */ - if (param_option) { - pj_memcpy(&fport->mp3_option, param_option, - sizeof(pjmedia_mp3_encoder_option)); - } else { - pj_bzero(&fport->mp3_option, sizeof(pjmedia_mp3_encoder_option)); - fport->mp3_option.vbr = PJ_TRUE; - } - - /* Calculate bitrate if it's not specified, only if it's not VBR. */ - if (fport->mp3_option.bit_rate == 0 && !fport->mp3_option.vbr) - fport->mp3_option.bit_rate = sampling_rate * channel_count; - - /* Set default quality if it's not specified */ - if (fport->mp3_option.quality == 0) - fport->mp3_option.quality = 2; - - /* Init mp3 encoder */ - status = init_mp3_encoder(fport, pool); - if (status != PJ_SUCCESS) { - pj_file_close(fport->fd); - deinit_blade_dll(); - return status; - } - - /* Done. */ - *p_port = &fport->base; - - PJ_LOG(4,(THIS_FILE, - "MP3 file writer '%.*s' created: samp.rate=%dKHz, " - "bitrate=%dkbps%s, quality=%d", - (int)fport->base.info.name.slen, - fport->base.info.name.ptr, - fport->base.info.clock_rate/1000, - fport->mp3_option.bit_rate/1000, - (fport->mp3_option.vbr ? " (VBR)" : ""), - fport->mp3_option.quality)); - - return PJ_SUCCESS; -} - - - -/* - * Register callback. - */ -PJ_DEF(pj_status_t) -pjmedia_mp3_writer_port_set_cb( pjmedia_port *port, - pj_size_t pos, - void *user_data, - pj_status_t (*cb)(pjmedia_port *port, - void *usr_data)) -{ - struct mp3_file_port *fport; - - /* Sanity check */ - PJ_ASSERT_RETURN(port && cb, PJ_EINVAL); - - /* Check that this is really a writer port */ - PJ_ASSERT_RETURN(port->info.signature == SIGNATURE, PJ_EINVALIDOP); - - fport = (struct mp3_file_port*) port; - - fport->cb_size = pos; - fport->base.port_data.pdata = user_data; - fport->cb = cb; - - return PJ_SUCCESS; - -} - - -/* - * Put a frame into the buffer. When the buffer is full, flush the buffer - * to the file. - */ -static pj_status_t file_put_frame(pjmedia_port *this_port, - const pjmedia_frame *frame) -{ - struct mp3_file_port *fport = (struct mp3_file_port *)this_port; - unsigned long MP3Err; - pj_ssize_t bytes; - pj_status_t status; - unsigned long WriteSize; - - /* Record silence if input is no-frame */ - if (frame->type == PJMEDIA_FRAME_TYPE_NONE || frame->size == 0) { - unsigned samples_left = fport->base.info.samples_per_frame; - unsigned samples_copied = 0; - - /* Only want to record at most 1 second of silence */ - if (fport->silence_duration >= fport->base.info.clock_rate) - return PJ_SUCCESS; - - while (samples_left) { - unsigned samples_needed = fport->mp3_samples_per_frame - - fport->mp3_sample_pos; - if (samples_needed > samples_left) - samples_needed = samples_left; - - pjmedia_zero_samples(fport->mp3_sample_buf + fport->mp3_sample_pos, - samples_needed); - fport->mp3_sample_pos += samples_needed; - samples_left -= samples_needed; - samples_copied += samples_needed; - - /* Encode if we have full frame */ - if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) { - - /* Clear position */ - fport->mp3_sample_pos = 0; - - /* Encode ! */ - MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream, - fport->mp3_samples_per_frame, - fport->mp3_sample_buf, - fport->mp3_buf, - &WriteSize); - if (MP3Err != BE_ERR_SUCCESSFUL) - return PJMEDIA_ERROR; - - /* Write the chunk */ - bytes = WriteSize; - status = pj_file_write(fport->fd, fport->mp3_buf, &bytes); - if (status != PJ_SUCCESS) - return status; - - /* Increment total written. */ - fport->total += bytes; - } - } - - fport->silence_duration += fport->base.info.samples_per_frame; - - } - /* If encoder is expecting different sample size, then we need to - * buffer the samples. - */ - else if (fport->mp3_samples_per_frame != - fport->base.info.samples_per_frame) - { - unsigned samples_left = frame->size / 2; - unsigned samples_copied = 0; - const pj_int16_t *src_samples = frame->buf; - - fport->silence_duration = 0; - - while (samples_left) { - unsigned samples_needed = fport->mp3_samples_per_frame - - fport->mp3_sample_pos; - if (samples_needed > samples_left) - samples_needed = samples_left; - - pjmedia_copy_samples(fport->mp3_sample_buf + fport->mp3_sample_pos, - src_samples + samples_copied, - samples_needed); - fport->mp3_sample_pos += samples_needed; - samples_left -= samples_needed; - samples_copied += samples_needed; - - /* Encode if we have full frame */ - if (fport->mp3_sample_pos == fport->mp3_samples_per_frame) { - - /* Clear position */ - fport->mp3_sample_pos = 0; - - /* Encode ! */ - MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream, - fport->mp3_samples_per_frame, - fport->mp3_sample_buf, - fport->mp3_buf, - &WriteSize); - if (MP3Err != BE_ERR_SUCCESSFUL) - return PJMEDIA_ERROR; - - /* Write the chunk */ - bytes = WriteSize; - status = pj_file_write(fport->fd, fport->mp3_buf, &bytes); - if (status != PJ_SUCCESS) - return status; - - /* Increment total written. */ - fport->total += bytes; - } - } - - } else { - - fport->silence_duration = 0; - - /* Encode ! */ - MP3Err = BladeDLL.beEncodeChunk(fport->mp3_stream, - fport->mp3_samples_per_frame, - frame->buf, - fport->mp3_buf, - &WriteSize); - if (MP3Err != BE_ERR_SUCCESSFUL) - return PJMEDIA_ERROR; - - /* Write the chunk */ - bytes = WriteSize; - status = pj_file_write(fport->fd, fport->mp3_buf, &bytes); - if (status != PJ_SUCCESS) - return status; - - /* Increment total written. */ - fport->total += bytes; - } - - /* Increment total written, and check if we need to call callback */ - - if (fport->cb && fport->total >= fport->cb_size) { - pj_status_t (*cb)(pjmedia_port*, void*); - pj_status_t status; - - cb = fport->cb; - fport->cb = NULL; - - status = (*cb)(this_port, this_port->port_data.pdata); - return status; - } - - return PJ_SUCCESS; -} - -/* - * Get frame, basicy is a no-op operation. - */ -static pj_status_t file_get_frame(pjmedia_port *this_port, - pjmedia_frame *frame) -{ - PJ_UNUSED_ARG(this_port); - PJ_UNUSED_ARG(frame); - return PJ_EINVALIDOP; -} - - -/* - * Close the port, modify file header with updated file length. - */ -static pj_status_t file_on_destroy(pjmedia_port *this_port) -{ - struct mp3_file_port *fport = (struct mp3_file_port*)this_port; - pj_status_t status; - unsigned long WriteSize; - unsigned long MP3Err; - - - /* Close encoder */ - MP3Err = BladeDLL.beDeinitStream(fport->mp3_stream, fport->mp3_buf, - &WriteSize); - if (MP3Err == BE_ERR_SUCCESSFUL) { - pj_ssize_t bytes = WriteSize; - status = pj_file_write(fport->fd, fport->mp3_buf, &bytes); - } - - /* Close file */ - status = pj_file_close(fport->fd); - - /* Write additional VBR header */ - if (fport->mp3_option.vbr) { - MP3Err = BladeDLL.beWriteVBRHeader(fport->mp3_filename.ptr); - } - - - /* Decrement DLL reference counter */ - deinit_blade_dll(); - - /* Done. */ - return PJ_SUCCESS; -} -