Loading lib_util/ambi_cenvert.c +39 −29 Original line number Diff line number Diff line Loading @@ -35,23 +35,25 @@ #include "ivas_cnst.h" #include "ambi_convert.h" #define SQRT_3 1.7320508f #define SQRT_5 2.2360679f #define SQRT_7 2.64575131f #define INV_SQRT_3 0.5773502f #define INV_SQRT_5 0.4472135f #define INV_SQRT_7 0.3779644f #define TWO_OVER_SQRT_3 1.1547005f #define SQRT_8_OVER_5 1.2649110f #define SQRT_3_OVER_5 0.7745966f #define SQRT_45_OVER_32 1.1858541f #define INV_TWO_OVER_SQRT_3 0.8660254f #define INV_SQRT_8_OVER_5 0.7905694f #define INV_SQRT_3_OVER_5 1.2909944f #define INV_SQRT_45_OVER_32 0.8432740f #define SQRT_2_ 1.4142135f #define SQRT_3_ 1.7320508f #define SQRT_5_ 2.2360679f #define SQRT_7_ 2.64575131f #define INV_SQRT_2_ 0.7071067f #define INV_SQRT_3_ 0.5773502f #define INV_SQRT_5_ 0.4472135f #define INV_SQRT_7_ 0.3779644f #define TWO_OVER_SQRT_3_ 1.1547005f #define SQRT_8_OVER_5_ 1.2649110f #define SQRT_3_OVER_5_ 0.7745966f #define SQRT_45_OVER_32_ 1.1858541f #define INV_TWO_OVER_SQRT_3_ 0.8660254f #define INV_SQRT_8_OVER_5_ 0.7905694f #define INV_SQRT_3_OVER_5_ 1.2909944f #define INV_SQRT_45_OVER_32_ 0.8432740f #define AMBI_MAX_CHANNELS 16 Loading @@ -60,27 +62,37 @@ -------------------------------- */ static const float N3D_SN3D[AMBI_MAX_CHANNELS] = { 1.0f, SQRT_3, SQRT_3, SQRT_3, SQRT_5, SQRT_5, SQRT_5, SQRT_5, SQRT_5, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7 SQRT_3_, SQRT_3_, SQRT_3_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_ }; static const float SN3D_N3D[AMBI_MAX_CHANNELS] = { 1.0f, INV_SQRT_3, INV_SQRT_3, INV_SQRT_3, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7 INV_SQRT_3_, INV_SQRT_3_, INV_SQRT_3_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_ }; static const float MAXN_SN3D[AMBI_MAX_CHANNELS] = { 1.0f, 1.0f, 1.0f, 1.0f, TWO_OVER_SQRT_3, TWO_OVER_SQRT_3, 1, TWO_OVER_SQRT_3, TWO_OVER_SQRT_3, SQRT_8_OVER_5, SQRT_3_OVER_5, SQRT_45_OVER_32, 1, SQRT_45_OVER_32, SQRT_3_OVER_5, SQRT_8_OVER_5 TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, 1, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, SQRT_8_OVER_5_, SQRT_3_OVER_5_, SQRT_45_OVER_32_, 1, SQRT_45_OVER_32_, SQRT_3_OVER_5_, SQRT_8_OVER_5_ }; static const float SN3D_MAXN[AMBI_MAX_CHANNELS] = { 1.0f, 1.0f, 1.0f, 1.0f, INV_TWO_OVER_SQRT_3, INV_TWO_OVER_SQRT_3, 1.0f, INV_TWO_OVER_SQRT_3, INV_TWO_OVER_SQRT_3, INV_SQRT_8_OVER_5, INV_SQRT_3_OVER_5, INV_SQRT_45_OVER_32, 1.0f, INV_SQRT_45_OVER_32, INV_SQRT_3_OVER_5, INV_SQRT_8_OVER_5 }; INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, INV_SQRT_8_OVER_5_, INV_SQRT_3_OVER_5_, INV_SQRT_45_OVER_32_, 1.0f, INV_SQRT_45_OVER_32_, INV_SQRT_3_OVER_5_, INV_SQRT_8_OVER_5_ }; static const float FM_SN3D[AMBI_MAX_CHANNELS] = { SQRT_2_, 1.0f, 1.0f, 1.0f, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, 1, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, SQRT_8_OVER_5_, SQRT_3_OVER_5_, SQRT_45_OVER_32_, 1, SQRT_45_OVER_32_, SQRT_3_OVER_5_, SQRT_8_OVER_5_ }; static const float FM_MAXN[AMBI_MAX_CHANNELS] = { INV_SQRT_2, 1.0f, 1.0f, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, INV_SQRT_8_OVER_5_, INV_SQRT_3_OVER_5_, INV_SQRT_45_OVER_32_, 1.0f, INV_SQRT_45_OVER_32_, INV_SQRT_3_OVER_5_, INV_SQRT_8_OVER_5_ }; /* ---------------------------- channel re-ordering tables Loading Loading @@ -110,12 +122,10 @@ static const int16_t REORDER_ACN_SID[AMBI_MAX_CHANNELS] = { 0, 15, 9, 14, 10, 13, 11, 12 }; /* ---------------------------------- API functions for the conversion ---------------------------------- */ int16_t convert_ambi_format( float in[][L_FRAME48k], float out[][L_FRAME48k], int16_t order, AMBI_FMT in_format, AMBI_FMT out_format ) { assert( order <= 3 ); Loading lib_util/ambi_convert.h +5 −4 Original line number Diff line number Diff line Loading @@ -46,15 +46,16 @@ typedef enum typedef enum { AMBI_NORM_SN3D = 0, AMBI_NORM_N3D = 1, AMBI_NORM_MAXN = 2 AMBI_NORM_N3D, AMBI_NORM_MAXN, AMBI_NORM_FM } AMBI_CHANNEL_NORM; typedef enum { AMBI_CHANNEL_ORDER_ACN = 0, AMBI_CHANNEL_ORDER_FM = 1, AMBI_CHANNEL_ORDER_SID = 2 AMBI_CHANNEL_ORDER_FM, AMBI_CHANNEL_ORDER_SID } AMBI_CHANNEL_ORDER; int16_t convert_ambi_format(float in[][L_FRAME48k], float out[][L_FRAME48k], int16_t order, AMBI_FMT in_format, AMBI_FMT out_format); Loading Loading
lib_util/ambi_cenvert.c +39 −29 Original line number Diff line number Diff line Loading @@ -35,23 +35,25 @@ #include "ivas_cnst.h" #include "ambi_convert.h" #define SQRT_3 1.7320508f #define SQRT_5 2.2360679f #define SQRT_7 2.64575131f #define INV_SQRT_3 0.5773502f #define INV_SQRT_5 0.4472135f #define INV_SQRT_7 0.3779644f #define TWO_OVER_SQRT_3 1.1547005f #define SQRT_8_OVER_5 1.2649110f #define SQRT_3_OVER_5 0.7745966f #define SQRT_45_OVER_32 1.1858541f #define INV_TWO_OVER_SQRT_3 0.8660254f #define INV_SQRT_8_OVER_5 0.7905694f #define INV_SQRT_3_OVER_5 1.2909944f #define INV_SQRT_45_OVER_32 0.8432740f #define SQRT_2_ 1.4142135f #define SQRT_3_ 1.7320508f #define SQRT_5_ 2.2360679f #define SQRT_7_ 2.64575131f #define INV_SQRT_2_ 0.7071067f #define INV_SQRT_3_ 0.5773502f #define INV_SQRT_5_ 0.4472135f #define INV_SQRT_7_ 0.3779644f #define TWO_OVER_SQRT_3_ 1.1547005f #define SQRT_8_OVER_5_ 1.2649110f #define SQRT_3_OVER_5_ 0.7745966f #define SQRT_45_OVER_32_ 1.1858541f #define INV_TWO_OVER_SQRT_3_ 0.8660254f #define INV_SQRT_8_OVER_5_ 0.7905694f #define INV_SQRT_3_OVER_5_ 1.2909944f #define INV_SQRT_45_OVER_32_ 0.8432740f #define AMBI_MAX_CHANNELS 16 Loading @@ -60,27 +62,37 @@ -------------------------------- */ static const float N3D_SN3D[AMBI_MAX_CHANNELS] = { 1.0f, SQRT_3, SQRT_3, SQRT_3, SQRT_5, SQRT_5, SQRT_5, SQRT_5, SQRT_5, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7, SQRT_7 SQRT_3_, SQRT_3_, SQRT_3_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_5_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_, SQRT_7_ }; static const float SN3D_N3D[AMBI_MAX_CHANNELS] = { 1.0f, INV_SQRT_3, INV_SQRT_3, INV_SQRT_3, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_5, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7, INV_SQRT_7 INV_SQRT_3_, INV_SQRT_3_, INV_SQRT_3_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_5_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_, INV_SQRT_7_ }; static const float MAXN_SN3D[AMBI_MAX_CHANNELS] = { 1.0f, 1.0f, 1.0f, 1.0f, TWO_OVER_SQRT_3, TWO_OVER_SQRT_3, 1, TWO_OVER_SQRT_3, TWO_OVER_SQRT_3, SQRT_8_OVER_5, SQRT_3_OVER_5, SQRT_45_OVER_32, 1, SQRT_45_OVER_32, SQRT_3_OVER_5, SQRT_8_OVER_5 TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, 1, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, SQRT_8_OVER_5_, SQRT_3_OVER_5_, SQRT_45_OVER_32_, 1, SQRT_45_OVER_32_, SQRT_3_OVER_5_, SQRT_8_OVER_5_ }; static const float SN3D_MAXN[AMBI_MAX_CHANNELS] = { 1.0f, 1.0f, 1.0f, 1.0f, INV_TWO_OVER_SQRT_3, INV_TWO_OVER_SQRT_3, 1.0f, INV_TWO_OVER_SQRT_3, INV_TWO_OVER_SQRT_3, INV_SQRT_8_OVER_5, INV_SQRT_3_OVER_5, INV_SQRT_45_OVER_32, 1.0f, INV_SQRT_45_OVER_32, INV_SQRT_3_OVER_5, INV_SQRT_8_OVER_5 }; INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, INV_SQRT_8_OVER_5_, INV_SQRT_3_OVER_5_, INV_SQRT_45_OVER_32_, 1.0f, INV_SQRT_45_OVER_32_, INV_SQRT_3_OVER_5_, INV_SQRT_8_OVER_5_ }; static const float FM_SN3D[AMBI_MAX_CHANNELS] = { SQRT_2_, 1.0f, 1.0f, 1.0f, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, 1, TWO_OVER_SQRT_3_, TWO_OVER_SQRT_3_, SQRT_8_OVER_5_, SQRT_3_OVER_5_, SQRT_45_OVER_32_, 1, SQRT_45_OVER_32_, SQRT_3_OVER_5_, SQRT_8_OVER_5_ }; static const float FM_MAXN[AMBI_MAX_CHANNELS] = { INV_SQRT_2, 1.0f, 1.0f, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, 1.0f, INV_TWO_OVER_SQRT_3_, INV_TWO_OVER_SQRT_3_, INV_SQRT_8_OVER_5_, INV_SQRT_3_OVER_5_, INV_SQRT_45_OVER_32_, 1.0f, INV_SQRT_45_OVER_32_, INV_SQRT_3_OVER_5_, INV_SQRT_8_OVER_5_ }; /* ---------------------------- channel re-ordering tables Loading Loading @@ -110,12 +122,10 @@ static const int16_t REORDER_ACN_SID[AMBI_MAX_CHANNELS] = { 0, 15, 9, 14, 10, 13, 11, 12 }; /* ---------------------------------- API functions for the conversion ---------------------------------- */ int16_t convert_ambi_format( float in[][L_FRAME48k], float out[][L_FRAME48k], int16_t order, AMBI_FMT in_format, AMBI_FMT out_format ) { assert( order <= 3 ); Loading
lib_util/ambi_convert.h +5 −4 Original line number Diff line number Diff line Loading @@ -46,15 +46,16 @@ typedef enum typedef enum { AMBI_NORM_SN3D = 0, AMBI_NORM_N3D = 1, AMBI_NORM_MAXN = 2 AMBI_NORM_N3D, AMBI_NORM_MAXN, AMBI_NORM_FM } AMBI_CHANNEL_NORM; typedef enum { AMBI_CHANNEL_ORDER_ACN = 0, AMBI_CHANNEL_ORDER_FM = 1, AMBI_CHANNEL_ORDER_SID = 2 AMBI_CHANNEL_ORDER_FM, AMBI_CHANNEL_ORDER_SID } AMBI_CHANNEL_ORDER; int16_t convert_ambi_format(float in[][L_FRAME48k], float out[][L_FRAME48k], int16_t order, AMBI_FMT in_format, AMBI_FMT out_format); Loading