From db8640b0bc2a82c87576ed4b7ae33cdf25620c6d Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Mon, 1 Jun 2009 16:43:45 +0000 Subject: Ticket #841: Added config to expand G722.1 functions as inline, default value is 1/true (expand as inline). git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2731 74dad513-b988-da41-8d7b-12977e46ad98 --- third_party/build/g7221/libg7221codec.vcproj | 4 ++ third_party/g7221/common/basic_op.c | 66 ++++++++++++++----------- third_party/g7221/common/basic_op.h | 74 ++++++++++++++-------------- third_party/g7221/common/config.h | 24 +++++++++ 4 files changed, 102 insertions(+), 66 deletions(-) create mode 100644 third_party/g7221/common/config.h (limited to 'third_party') diff --git a/third_party/build/g7221/libg7221codec.vcproj b/third_party/build/g7221/libg7221codec.vcproj index abc62794..fb436777 100644 --- a/third_party/build/g7221/libg7221codec.vcproj +++ b/third_party/build/g7221/libg7221codec.vcproj @@ -3215,6 +3215,10 @@ /> + + diff --git a/third_party/g7221/common/basic_op.c b/third_party/g7221/common/basic_op.c index d4c1530e..0ff6e9bb 100644 --- a/third_party/g7221/common/basic_op.c +++ b/third_party/g7221/common/basic_op.c @@ -1,3 +1,8 @@ +#include "config.h" + +#if !PJMEDIA_LIBG7221_FUNCS_INLINED || \ + (PJMEDIA_LIBG7221_FUNCS_INLINED && defined(__BASIC_OP_H__)) + /*___________________________________________________________________________ | | | Basic arithmetic operators. | @@ -72,7 +77,7 @@ Flag g7221_Carry = 0; | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 shr (Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) shr (Word16 var1, Word16 var2) { if (var2 < 0) { @@ -122,7 +127,7 @@ Word16 shr (Word16 var1, Word16 var2) | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 shl (Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) shl (Word16 var1, Word16 var2) { if (var2 < 0) { @@ -171,7 +176,7 @@ Word16 shl (Word16 var1, Word16 var2) | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 mult (Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) mult (Word16 var1, Word16 var2) { Word16 var_out; Word32 L_product; @@ -228,7 +233,7 @@ Word16 mult (Word16 var1, Word16 var2) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ -Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word32) L_msu (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; @@ -289,7 +294,7 @@ Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) | operators which take into account its value. | |___________________________________________________________________________| */ -Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word32) L_macNs (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; @@ -350,7 +355,7 @@ Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) | operators which take into account its value. | |___________________________________________________________________________| */ -Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word32) L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; @@ -408,7 +413,7 @@ Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) | operators which take into account its value. | |___________________________________________________________________________| */ -Word32 L_add_c (Word32 L_var1, Word32 L_var2) +LIBG7221_DEF(Word32) L_add_c (Word32 L_var1, Word32 L_var2) { Word32 L_var_out; Word32 L_test; @@ -524,7 +529,7 @@ Word32 L_add_c (Word32 L_var1, Word32 L_var2) | operators which take into account its value. | |___________________________________________________________________________| */ -Word32 L_sub_c (Word32 L_var1, Word32 L_var2) +LIBG7221_DEF(Word32) L_sub_c (Word32 L_var1, Word32 L_var2) { Word32 L_var_out; Word32 L_test; @@ -617,7 +622,7 @@ Word32 L_sub_c (Word32 L_var1, Word32 L_var2) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ -Word32 L_negate (Word32 L_var1) +LIBG7221_DEF(Word32) L_negate (Word32 L_var1) { Word32 L_var_out; @@ -663,7 +668,7 @@ Word32 L_negate (Word32 L_var1) | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 mult_r (Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) mult_r (Word16 var1, Word16 var2) { Word16 var_out; Word32 L_product_arr; @@ -728,7 +733,7 @@ Word16 mult_r (Word16 var1, Word16 var2) | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 shr_r (Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) shr_r (Word16 var1, Word16 var2) { Word16 var_out; @@ -797,7 +802,7 @@ Word16 shr_r (Word16 var1, Word16 var2) | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) mac_r (Word32 L_var3, Word16 var1, Word16 var2) { Word16 var_out; @@ -857,7 +862,7 @@ Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) msu_r (Word32 L_var3, Word16 var1, Word16 var2) { Word16 var_out; @@ -907,7 +912,7 @@ Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) | range : 0x8000 0000 <= var_out <= 0x7fff 0000. | |___________________________________________________________________________| */ -Word32 L_deposit_h (Word16 var1) +LIBG7221_DEF(Word32) L_deposit_h (Word16 var1) { Word32 L_var_out; @@ -948,7 +953,7 @@ Word32 L_deposit_h (Word16 var1) | range : 0xFFFF 8000 <= var_out <= 0x0000 7fff. | |___________________________________________________________________________| */ -Word32 L_deposit_l (Word16 var1) +LIBG7221_DEF(Word32) L_deposit_l (Word16 var1) { Word32 L_var_out; @@ -1002,7 +1007,7 @@ Word32 L_deposit_l (Word16 var1) | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ -Word32 L_shr_r (Word32 L_var1, Word16 var2) +LIBG7221_DEF(Word32) L_shr_r (Word32 L_var1, Word16 var2) { Word32 L_var_out; @@ -1060,7 +1065,7 @@ Word32 L_shr_r (Word32 L_var1, Word16 var2) | range : 0x0000 0000 <= var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ -Word32 L_abs (Word32 L_var1) +LIBG7221_DEF(Word32) L_abs (Word32 L_var1) { Word32 L_var_out; @@ -1120,7 +1125,7 @@ Word32 L_abs (Word32 L_var1) | range : 0x0000 0000 <= var_out <= 0x0000 000f. | |___________________________________________________________________________| */ -Word16 norm_s (Word16 var1) +LIBG7221_DEF(Word16) norm_s (Word16 var1) { Word16 var_out; @@ -1130,7 +1135,7 @@ Word16 norm_s (Word16 var1) } else { - if (var1 == (Word16) 0xffff) + if (var1 == (UWord16)0xffff) { var_out = 15; } @@ -1191,7 +1196,7 @@ Word16 norm_s (Word16 var1) | It's a Q15 value (point between b15 and b14). | |___________________________________________________________________________| */ -Word16 div_s (Word16 var1, Word16 var2) +LIBG7221_DEF(Word16) div_s (Word16 var1, Word16 var2) { Word16 var_out = 0; Word16 iteration; @@ -1291,7 +1296,7 @@ Word16 div_s (Word16 var1, Word16 var2) | range : 0x0000 0000 <= var_out <= 0x0000 001f. | |___________________________________________________________________________| */ -Word16 norm_l (Word32 L_var1) +LIBG7221_DEF(Word16) norm_l (Word32 L_var1) { Word16 var_out; @@ -1372,7 +1377,7 @@ Word16 norm_l (Word32 L_var1) | | |___________________________________________________________________________| */ -Word32 L_mls (Word32 Lv, Word16 v) +LIBG7221_DEF(Word32) L_mls (Word32 Lv, Word16 v) { Word32 Temp ; @@ -1431,7 +1436,7 @@ Word32 L_mls (Word32 Lv, Word16 v) | It's a Q15 value (point between b15 and b14). | |___________________________________________________________________________| */ -Word16 div_l (Word32 L_num, Word16 den) +LIBG7221_DEF(Word16) div_l (Word32 L_num, Word16 den) { Word16 var_out = (Word16)0; Word32 L_den; @@ -1519,7 +1524,7 @@ Word16 div_l (Word32 L_num, Word16 den) | are performed if ORIGINAL_G7231 is defined. | |___________________________________________________________________________| */ -Word16 i_mult (Word16 a, Word16 b) +LIBG7221_DEF(Word16) i_mult (Word16 a, Word16 b) { #ifdef ORIGINAL_G7231 return a*b ; @@ -1568,7 +1573,7 @@ Word16 i_mult (Word16 a, Word16 b) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. |___________________________________________________________________________ */ -Word32 L_mult0 (Word16 var1,Word16 var2) +LIBG7221_DEF(Word32) L_mult0 (Word16 var1,Word16 var2) { Word32 L_var_out; @@ -1612,7 +1617,7 @@ Word32 L_mult0 (Word16 var1,Word16 var2) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. |___________________________________________________________________________ */ -Word32 L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word32) L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; @@ -1660,7 +1665,7 @@ Word32 L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. |___________________________________________________________________________ */ -Word32 L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) +LIBG7221_DEF(Word32) L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) { Word32 L_var_out; Word32 L_product; @@ -1711,7 +1716,7 @@ Word32 L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ -UWord32 LU_shl (UWord32 L_var1, Word16 var2) +LIBG7221_DEF(UWord32) LU_shl (UWord32 L_var1, Word16 var2) { Word16 neg_var2; UWord32 L_var_out = 0; @@ -1742,7 +1747,7 @@ UWord32 LU_shl (UWord32 L_var1, Word16 var2) if (L_var1 < (UWord32) 0x00000001L) { SET_OVERFLOW(1); - L_var_out = MIN_32; + L_var_out = (UWord32)MIN_32; break; } } @@ -1791,7 +1796,7 @@ UWord32 LU_shl (UWord32 L_var1, Word16 var2) | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |___________________________________________________________________________| */ -UWord32 LU_shr (UWord32 L_var1, Word16 var2) +LIBG7221_DEF(UWord32) LU_shr (UWord32 L_var1, Word16 var2) { Word16 neg_var2; UWord32 L_var_out; @@ -1825,5 +1830,6 @@ UWord32 LU_shr (UWord32 L_var1, Word16 var2) } /* ------------------------- End of LU_shr() ------------------------- */ +#endif /* PJMEDIA_LIBG7221_FUNCS_INLINED */ /* ************************** END OF BASOP32.C ************************** */ diff --git a/third_party/g7221/common/basic_op.h b/third_party/g7221/common/basic_op.h index fe64a494..45104d1c 100644 --- a/third_party/g7221/common/basic_op.h +++ b/third_party/g7221/common/basic_op.h @@ -1,11 +1,11 @@ #ifndef __BASIC_OP_H__ #define __BASIC_OP_H__ +#include "config.h" + /*___________________________________________________________________________ | | | Constants and Globals | - | | - | $Id $ |___________________________________________________________________________| */ @@ -27,66 +27,66 @@ 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 */ -Word16 shl (Word16 var1, Word16 var2); /* Short shift left, 1 */ +LIBG7221_DECL(Word16) shl (Word16 var1, Word16 var2); /* Short shift left, 1 */ PJ_INLINE(Word16) shl_nocheck(Word16 var1, Word16 var2); -Word16 shr (Word16 var1, Word16 var2); /* Short shift right, 1 */ +LIBG7221_DECL(Word16) shr (Word16 var1, Word16 var2); /* Short shift right, 1 */ PJ_INLINE(Word16) shr_nocheck(Word16 var1, Word16 var2); -Word16 mult (Word16 var1, Word16 var2); /* Short mult, 1 */ +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 */ -Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2); /* Msu, 1 */ -Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2); /* Mac without - sat, 1 */ -Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2); /* Msu without - sat, 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 */ -Word32 L_add_c (Word32 L_var1, Word32 L_var2); /* Long add with c, 2 */ -Word32 L_sub_c (Word32 L_var1, Word32 L_var2); /* Long sub with c, 2 */ -Word32 L_negate (Word32 L_var1); /* Long negate, 2 */ -Word16 mult_r (Word16 var1, Word16 var2); /* Mult with round, 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*/ -Word16 shr_r (Word16 var1, Word16 var2); /* Shift right with - round, 2 */ -Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2); /* Mac with +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 */ -Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with +LIBG7221_DECL(Word16) msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with rounding,2 */ -Word32 L_deposit_h (Word16 var1); /* 16 bit var1 -> MSB, 2 */ -Word32 L_deposit_l (Word16 var1); /* 16 bit var1 -> LSB, 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 */ -Word32 L_shr_r (Word32 L_var1, Word16 var2); /* Long shift right with - round, 3 */ -Word32 L_abs (Word32 L_var1); /* Long abs, 3 */ -Word32 L_sat (Word32 L_var1); /* Long saturation, 4 */ -Word16 norm_s (Word16 var1); /* Short norm, 15 */ -Word16 div_s (Word16 var1, Word16 var2); /* Short division, 18 */ -Word16 norm_l (Word32 L_var1); /* Long norm, 30 */ +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 */ -Word32 L_mls( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ -Word16 div_l( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ -Word16 i_mult(Word16 a, Word16 b); /* Weight FFS; currently assigned 1 */ +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 */ -Word32 L_mult0(Word16 v1, Word16 v2); /* 32-bit Multiply w/o shift 1 */ -Word32 L_mac0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Mac w/o shift 1 */ -Word32 L_msu0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Msu w/o shift 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 */ -UWord32 LU_shl (UWord32 L_var1, Word16 var2); -UWord32 LU_shr (UWord32 L_var1, Word16 var2); +LIBG7221_DECL(UWord32) LU_shl (UWord32 L_var1, Word16 var2); +LIBG7221_DECL(UWord32) LU_shr (UWord32 L_var1, Word16 var2); #define INCLUDE_UNSAFE 0 @@ -108,7 +108,9 @@ PJ_INLINE(Word16) saturate (Word32 L_var1); #include "basic_op_i.h" - +#if PJMEDIA_LIBG7221_FUNCS_INLINED +# include "basic_op.c" +#endif #endif /* __BASIC_OP_H__ */ diff --git a/third_party/g7221/common/config.h b/third_party/g7221/common/config.h new file mode 100644 index 00000000..925a1dae --- /dev/null +++ b/third_party/g7221/common/config.h @@ -0,0 +1,24 @@ +#ifndef __LIBG7221_CONFIG_H__ +#define __LIBG7221_CONFIG_H__ + +#include + +/** + * Expand basic operation functions as inline. + * + * Default: 1 (yes) + */ +#ifndef PJMEDIA_LIBG7221_FUNCS_INLINED +# define PJMEDIA_LIBG7221_FUNCS_INLINED 1 +#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__ */ -- cgit v1.2.3