Unverified Commit 35bd7130 authored by norvell's avatar norvell
Browse files

Replace *BsShape_Q_fx with Q15

parent 44a001a0
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -128,9 +128,6 @@ void ivas_HRTF_td_binary_close_fx(
            free( ( *hHrtfTD )->ModelParams.azimBsShape_dyn_fx[i] );
        }
        free( ( *hHrtfTD )->ModelParams.azimBsShape_dyn_fx );
#ifdef FIX_2235_TD_RENDERER_WORD16
        free( ( *hHrtfTD )->ModelParams.azimBsShape_Q_fx );
#endif

        free( (void *) ( *hHrtfTD )->ModelParams.azimBsShape_fx ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */
        for ( i = 0; i < ( *hHrtfTD )->ModelParams.elevDim3; i++ )
+11 −15
Original line number Diff line number Diff line
@@ -46,8 +46,8 @@


#ifdef FIX_2235_TD_RENDERER_WORD16
static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word16 azimKSeq_0_fx, const Word16 azimSegSamples, const Word16 *azimBsShape_fx, const Word16 azimBsShape_Q_fx, const Word16 subSampFactor );
static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word16 *KSeq_fx, const Word16 KSeq_Q_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word16 *BsShape_fx, Word16 BsShape_Q_fx );
static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word16 azimKSeq_0_fx, const Word16 azimSegSamples, const Word16 *azimBsShape_fx, const Word16 subSampFactor );
static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word16 *KSeq_fx, const Word16 KSeq_Q_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word16 *BsShape_fx );
#else
static void getPeriodicBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *AzIdx, const Word16 NumBFs, const Word32 t_fx, Word16 *num_az_idx, const Word32 knot_interval_fx, const Word32 azimKSeq_0_fx, const Word16 azimSegSamples, const Word32 *azimBsShape_fx, const Word16 subSampFactor );
static void getStandardBSplineSampVec_fx( Word32 *BfVec_fx, Word16 *NzIdx, Word16 *num_idx, const Word16 NumBFs, const Word32 t_fx, const Word32 *KSeq_fx, const Word16 SegSamples, const Word16 *BsLen, const Word16 *BsStart, const Word32 *BsShape_fx );
@@ -223,7 +223,7 @@ static void GenerateFilter_fx(

#ifdef FIX_2235_TD_RENDERER_WORD16
    getStandardBSplineSampVec_fx( modelEval->elevBfVec_fx, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq_fx, Q8,
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx, model->elevBsShape_Q_fx );
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
#else
    getStandardBSplineSampVec_fx( modelEval->elevBfVec_fx, EvIdx, &num_ev_idx, model->elevDim3, elev, model->elevKSeq_fx,
                                  model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
@@ -269,7 +269,7 @@ static void GenerateFilter_fx(
#ifdef FIX_2235_TD_RENDERER_WORD16
            getPeriodicBSplineSampVec_fx( modelEval->azimBfVec_fx[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p],
                                          knot_interval, model->azimKSeq_fx[k][0], model->azimSegSamples[model->azimShapeIdx[k]],
                                          model->azimBsShape_fx[model->azimShapeIdx[k]], model->azimBsShape_Q_fx[model->azimShapeIdx[k]], model->azimShapeSampFactor[k] );
                                          model->azimBsShape_fx[model->azimShapeIdx[k]], model->azimShapeSampFactor[k] );
#else
            getPeriodicBSplineSampVec_fx( modelEval->azimBfVec_fx[p], AzIdx[p], model->azimDim3[k], azim, &num_az_idx[p],
                                          knot_interval, model->azimKSeq_fx[k][0], model->azimSegSamples[model->azimShapeIdx[k]],
@@ -474,7 +474,7 @@ static void GenerateITD_fx(
    {
#ifdef FIX_2235_TD_RENDERER_WORD16
        getStandardBSplineSampVec_fx( modelEval->elevBfVecITD_fx, EvIdx, &num_ev_idx, model->elevDim3, elev_fx, model->elevKSeq_fx, Q8,
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx, model->elevBsShape_Q_fx );
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
#else
        getStandardBSplineSampVec_fx( modelEval->elevBfVecITD_fx, EvIdx, &num_ev_idx, model->elevDim3, elev_fx, model->elevKSeq_fx,
                                      model->elevSegSamples, model->elevBsLen, model->elevBsStart, model->elevBsShape_fx );
@@ -489,7 +489,7 @@ static void GenerateITD_fx(
        }
#ifdef FIX_2235_TD_RENDERER_WORD16
        getStandardBSplineSampVec_fx( modelEval->azimBfVecITD_fx, AzIdx, &num_az_idx, shr( add( model->azimDim3, 1 ), 1 ), azim_itd_fx, model->azimKSeq_fx, Q7,
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx, model->azimBsShape_Q_fx );
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx );
#else
        getStandardBSplineSampVec_fx( modelEval->azimBfVecITD_fx, AzIdx, &num_az_idx, shr( add( model->azimDim3, 1 ), 1 ), azim_itd_fx, model->azimKSeq_fx,
                                      model->azimSegSamples, model->azimBsLen, model->azimBsStart, model->azimBsShape_fx );
@@ -655,8 +655,7 @@ static void getPeriodicBSplineSampVec_fx(
#endif
    const Word16 azimSegSamples, /* i  : Samples per segment                                   */
#ifdef FIX_2235_TD_RENDERER_WORD16
    const Word16 *azimBsShape_fx,  /* i  : Basis shape                        Q azimBsShape_Q_fx */
    const Word16 azimBsShape_Q_fx, /* i  : Q-value of azimBsShape_fx                             */
    const Word16 *azimBsShape_fx,  /* i  : Basis shape                                       Q15 */
#else
    const Word32 *azimBsShape_fx, /* i  : Basis shape                                       Q30 */
#endif
@@ -717,7 +716,7 @@ static void getPeriodicBSplineSampVec_fx(
        d = sub( d0, imult1616( ( sub( add( i, nI ), 1 ) ), SegSamples ) ); /* offset of knot_interval */
        d = sub( d0, imult1616( sub( add( i, nI ), 1 ), SegSamples ) );
#ifdef FIX_2235_TD_RENDERER_WORD16
        BfVec_fx[i] = L_shl( L_deposit_l( azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )] ), 30 - azimBsShape_Q_fx );
        BfVec_fx[i] = L_shl( L_deposit_l( azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )] ), 30 - Q15 );
#else
        BfVec_fx[i] = azimBsShape_fx[i_mult( abs_s( d ), subSampFactor )];
#endif
@@ -752,8 +751,7 @@ static void getStandardBSplineSampVec_fx(
    const Word16 *BsLen,     /* i  : lengths of basis shapes                                */
    const Word16 *BsStart,   /* i  : start of basis shapes                                  */
#ifdef FIX_2235_TD_RENDERER_WORD16
    const Word16 *BsShape_fx, /* i  : basis shapes                            Q BsShape_Q_fx */
    Word16 BsShape_Q_fx       /* i  : Q-value of basis shapes                                */
    const Word16 *BsShape_fx  /* i  : basis shapes                                      Q15 */
#else
    const Word32 *BsShape_fx /* i  : basis shapes                                       Q30 */
#endif
@@ -818,7 +816,7 @@ static void getStandardBSplineSampVec_fx(
        }
#ifdef FIX_2235_TD_RENDERER_WORD16
        assert( d >= 0 && d < BsLen[shape_idx] );
        BfVec_fx[i] = L_shl( L_deposit_l( BsShape_fx[add( BsStart[shape_idx], d )] ), 30 - BsShape_Q_fx ); /* Q30 */
        BfVec_fx[i] = L_shl( L_deposit_l( BsShape_fx[add( BsStart[shape_idx], d )] ), 30 - Q15 ); /* Q30 */
#else
        BfVec_fx[i] = BsShape_fx[add( BsStart[shape_idx], abs_s( d ) )]; /*TT, verify if abs is needed */
        move32();
@@ -884,9 +882,7 @@ void BSplineModelEvalDealloc_fx(
        free( model->azimBsShape_dyn_fx );
#endif
        free( (void *) model->azimBsShape_fx ); /* void* cast needed to please both gcc and Visual studio compilers. Deallocating const float** should be fine and gcc agrees, but Visual studio complains. */
#ifdef FIX_2235_TD_RENDERER_WORD16
        free( model->azimBsShape_Q_fx );
#endif

        FOR( i = 0; i < model->elevDim3; i++ )
        {
            free( model->azimKSeq_fx[i] );
+4 −10
Original line number Diff line number Diff line
@@ -428,7 +428,6 @@ static ivas_error DefaultBSplineModel_fx(

#ifdef FIX_2235_TD_RENDERER_WORD16
    model->elevBsShape_fx = defaultHRIR_rom_elevBsShape_fx;
    model->elevBsShape_Q_fx = defaultHRIR_rom_elevBsShape_Q_fx;
#else
    model->elevBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_elevBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    IF( model->elevBsShape_dyn_fx == NULL )
@@ -440,7 +439,7 @@ static ivas_error DefaultBSplineModel_fx(
#endif

#ifdef FIX_2235_TD_RENDERER_WORD16
    IF( ( model->azimBsShape_fx = (const Word16 **) malloc( model->num_unique_azim_splines * sizeof( Word16 * ) ) ) == NULL || ( model->azimBsShape_Q_fx = (Word16 *) malloc( model->num_unique_azim_splines * sizeof( Word16 ) ) ) == NULL )
    IF( ( model->azimBsShape_fx = (const Word16 **) malloc( model->num_unique_azim_splines * sizeof( Word16 * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Binaural TD renderer\n" ) );
    }
@@ -456,8 +455,7 @@ static ivas_error DefaultBSplineModel_fx(
    }
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
    model->azimBsShape_fx[0] = defaultHRIR_rom_azimBsShape_fx;
    model->azimBsShape_Q_fx[0] = defaultHRIR_rom_azimBsShape_Q_fx;
    model->azimBsShape_fx[0] = defaultHRIR_rom_azimBsShape_fx; /* Q15 */
#else
    model->azimBsShape_dyn_fx[0] = (Word32 *) malloc( sizeof( defaultHRIR_rom_azimBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
    IF( model->azimBsShape_dyn_fx[0] == NULL )
@@ -710,9 +708,7 @@ static ivas_error DefaultBSplineModel_fx(
    modelITD->W_e = Q15 - defaultHRIR_rom_ITD_W_Q_fx;
    move16();
#ifdef FIX_2235_TD_RENDERER_WORD16
    modelITD->azimBsShape_fx = defaultHRIR_rom_ITD_azimBsShape_fx;
    move16();
    modelITD->azimBsShape_Q_fx = defaultHRIR_rom_ITD_azimBsShape_Q_fx;
    modelITD->azimBsShape_fx = defaultHRIR_rom_ITD_azimBsShape_fx; /* Q15 */
    move16();
#else
    modelITD->azimBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_ITD_azimBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) ); /* basis functions are flipped around 180 deg, number of basis functions above/below is (N+1)/2 */
@@ -724,9 +720,7 @@ static ivas_error DefaultBSplineModel_fx(
    modelITD->azimBsShape_fx = modelITD->azimBsShape_dyn_fx;
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
    modelITD->elevBsShape_fx = defaultHRIR_rom_ITD_elevBsShape_fx;
    move16();
    modelITD->elevBsShape_Q_fx = defaultHRIR_rom_ITD_elevBsShape_Q_fx;
    modelITD->elevBsShape_fx = defaultHRIR_rom_ITD_elevBsShape_fx; /* Q15 */
    move16();
#else
    modelITD->elevBsShape_dyn_fx = (Word32 *) malloc( sizeof( defaultHRIR_rom_ITD_elevBsShape_fx ) * sizeof( Word32 ) / sizeof( Word16 ) );
+19 −5
Original line number Diff line number Diff line
@@ -54,9 +54,6 @@ extern const Word16 defaultHRIR_rom_azimShapeSampFactor[15];
extern const Word16 defaultHRIR_rom_elevKSeq_Q_fx;
#endif
extern const Word16 defaultHRIR_rom_elevKSeq_fx[13];
#ifdef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_azimKSeq_Q_fx;
#endif
extern const Word16 defaultHRIR_rom_Alpha48_Q_fx;
extern const Word16 defaultHRIR_rom_AlphaL48_fx[470 * 128]; /*Q30*/
extern const Word16 defaultHRIR_rom_AlphaR48_fx[470 * 128]; /*Q30*/
@@ -75,27 +72,44 @@ extern const Word32 defaultHRIR_rom_ER32_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28*
extern const Word16 defaultHRIR_rom_E16_Q_fx;
extern const Word32 defaultHRIR_rom_EL16_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28*/
extern const Word32 defaultHRIR_rom_ER16_fx[HRTF_MODEL_N_SECTIONS * 470]; /*Q28*/
#ifdef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_elevBsShape_fx[36]; /*Q15*/
#else
extern const Word16 defaultHRIR_rom_elevBsShape_Q_fx;
extern const Word16 defaultHRIR_rom_elevBsShape_fx[36]; /*Q30*/
#endif
extern const Word16 defaultHRIR_rom_elevBsLen[4];
extern const Word16 defaultHRIR_rom_elevBsStart[4];
#ifdef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_elevBsShape_fx[36]; /*Q15*/
extern const Word16 defaultHRIR_rom_azimBsShape_fx[21]; /*Q15*/
#else
extern const Word16 defaultHRIR_rom_elevBsShape_Q_fx;
extern const Word16 defaultHRIR_rom_elevBsShape_fx[36]; /*Q30*/
extern const Word16 defaultHRIR_rom_azimBsShape_Q_fx;
extern const Word16 defaultHRIR_rom_azimBsShape_fx[21]; /*Q30*/
#endif

extern const Word16 defaultHRIR_rom_ITD_W_Q_fx;
extern const Word16 defaultHRIR_rom_ITD_W_fx[658];
#ifdef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_ITD_azimBsShape_fx[84]; /* Q15 */
extern const Word16 defaultHRIR_rom_ITD_azimKSeq_fx[19];    /* Q7  */
extern const Word16 defaultHRIR_rom_ITD_elevBsShape_fx[28]; /* Q15 */
#else
extern const Word16 defaultHRIR_rom_ITD_azimBsShape_Q_fx;
extern const Word16 defaultHRIR_rom_ITD_azimBsShape_fx[84];
extern const Word16 defaultHRIR_rom_ITD_azimKSeq_Q_fx;
extern const Word16 defaultHRIR_rom_ITD_azimKSeq_fx[19];
extern const Word16 defaultHRIR_rom_ITD_elevBsShape_Q_fx;
extern const Word16 defaultHRIR_rom_ITD_elevBsShape_fx[28];
#ifndef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_ITD_elevKSeq_Q_fx;
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
extern const Word16 defaultHRIR_rom_ITD_elevKSeq_fx[16];    /* Q8 */
#else
extern const Word16 defaultHRIR_rom_ITD_elevKSeq_Q_fx;
extern const Word16 defaultHRIR_rom_ITD_elevKSeq_fx[16];
#endif
extern const Word16 defaultHRIR_rom_ITD_model_configuration[4];
extern const Word16 defaultHRIR_rom_ITD_elevBsLen[4];
extern const Word16 defaultHRIR_rom_ITD_elevBsStart[4];
+27 −2
Original line number Diff line number Diff line
@@ -95,16 +95,25 @@ const Word16 defaultHRIR_rom_elevKSeq_fx [13] = {
};
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
const Word16 defaultHRIR_rom_azimKSeq_Q_fx = 6;
#endif
const Word16 defaultHRIR_rom_elevBsShape_fx[36] = {
32767, 13824, 4096, 512, 0, 0, 16256, 19456, 14976, 8192, 3456, 1024, 128, 0, 0, 2603, 8533, 14976, 19115, 18901, 15360, 10283, 5461, 2304, 683, 85, 0, 0, 85, 683, 2304, 5461, 10325, 15701, 20053, 21845, 
}; /* Q15 */
#else
const Word16 defaultHRIR_rom_elevBsShape_Q_fx = 15;
const Word16 defaultHRIR_rom_elevBsShape_fx[36] = {
32767, 13824, 4096, 512, 0, 0, 16256, 19456, 14976, 8192, 3456, 1024, 128, 0, 0, 2603, 8533, 14976, 19115, 18901, 15360, 10283, 5461, 2304, 683, 85, 0, 0, 85, 683, 2304, 5461, 10325, 15701, 20053, 21845, 
};
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
const Word16 defaultHRIR_rom_azimBsShape_fx[21] = {
21845, 21534, 20666, 19339, 17651, 15701, 13588, 11409, 9262, 7247, 5461, 3981, 2796, 1873, 1180, 683, 350, 147, 44, 5, 0, 
}; /* Q15 */
#else
const Word16 defaultHRIR_rom_azimBsShape_Q_fx = 15;
const Word16 defaultHRIR_rom_azimBsShape_fx[21] = {
21845, 21534, 20666, 19339, 17651, 15701, 13588, 11409, 9262, 7247, 5461, 3981, 2796, 1873, 1180, 683, 350, 147, 44, 5, 0, 
};
#endif
const Word16 defaultHRIR_rom_Alpha48_Q_fx = 14;
const Word16 defaultHRIR_rom_AlphaL48_fx[470 * 128] = {
2196,437,2620,2054,2197,2199,2307,2350,2385,2307,2258,2205,2160,2123,2102,2085,2065,2056,2023,1908,2395,344,-284,-1067,727,
@@ -10191,6 +10200,14 @@ const Word16 defaultHRIR_rom_ITD_azimBsLen[4] = {
const Word16 defaultHRIR_rom_ITD_azimBsStart[4] = {
0, 11, 32, 63,
};
#ifdef FIX_2235_TD_RENDERER_WORD16
const Word16 defaultHRIR_rom_ITD_azimBsShape_fx[84] = {
32767,23888,16777,11239,7078,4096,2097,885,262,33,0,0,8413,14221,17768,19399,19456,18285,16228,13631,10838,8192,5972,4194,2810,
1769,1024,524,221,66,8,0,0,461,1726,3613,5942,8533,11207,13782,16078,17916,19115,19543,19268,18402,17061,15360,13413,11335,
9241,7244,5461,3981,2796,1873,1180,683,350,147,44,5,0,0,5,44,147,350,683,1180,1873,2796,3981,5461,7247,
9262,11409,13588,15701,17651,19339,20666,21534,21845,
}; /* Q15 */
#else
const Word16 defaultHRIR_rom_ITD_azimBsShape_Q_fx = 15;
const Word16 defaultHRIR_rom_ITD_azimBsShape_fx[84] = {
32767,23888,16777,11239,7078,4096,2097,885,262,33,0,0,8413,14221,17768,19399,19456,18285,16228,13631,10838,8192,5972,4194,2810,
@@ -10198,6 +10215,7 @@ const Word16 defaultHRIR_rom_ITD_azimBsShape_fx[84] = {
9241,7244,5461,3981,2796,1873,1180,683,350,147,44,5,0,0,5,44,147,350,683,1180,1873,2796,3981,5461,7247,
9262,11409,13588,15701,17651,19339,20666,21534,21845,
};
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
const Word16 defaultHRIR_rom_ITD_azimKSeq_fx[19] = {
@@ -10210,11 +10228,18 @@ const Word16 defaultHRIR_rom_ITD_azimKSeq_fx[19] = {
};
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
const Word16 defaultHRIR_rom_ITD_elevBsShape_fx[28] = {
32767,9709,1214,0,0,18508,16991,8192,2427,303,0,0,4349,12945,19115,18002,12035,5461,1618,202,0,0,202,1618,5461,
12136,18811,21845,
}; /* Q15 */
#else
const Word16 defaultHRIR_rom_ITD_elevBsShape_Q_fx = 15;
const Word16 defaultHRIR_rom_ITD_elevBsShape_fx[28] = {
32767,9709,1214,0,0,18508,16991,8192,2427,303,0,0,4349,12945,19115,18002,12035,5461,1618,202,0,0,202,1618,5461,
12136,18811,21845,
};
#endif
#ifdef FIX_2235_TD_RENDERER_WORD16
const Word16 defaultHRIR_rom_ITD_elevKSeq_fx[16] = {
-23040, -19968, -16896, -13824, -10752, -7680, -4608, -1536, 1536, 4608, 7680, 10752, 13824, 16896, 19968, 23040, 
Loading