Commit 6eaf2d31 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Added conversions for sub-funcs in ivas_ism_dec.c

[x] conversion for ivas_dirac_dec_binaural_copy_hrtfs
[x] conversion for ivas_td_binaural_close
parent d0036286
Loading
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -299,6 +299,13 @@ ivas_error ivas_init_decoder_front(
ivas_error ivas_init_decoder(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                  */
);
#ifdef IVAS_FLOAT_FIXED
ivas_error ivas_output_buff_dec_fx(
    Word32 *p_output_f[],              /* i/o: output audio buffers                       */
    const Word16 nchan_out_buff_old, /* i  : previous frame number of output channels   */
    const Word16 nchan_out_buff      /* i  : number of output channels                  */
);
#endif // IVAS_FLOAT_FIXED

ivas_error ivas_output_buff_dec(
    float *p_output_f[],                                        /* i/o: output audio buffers                    */
+30 −0
Original line number Diff line number Diff line
@@ -349,12 +349,32 @@ static ivas_error ivas_ism_bitrate_switching_dec(
        if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB
        )
        {
#ifdef IVAS_FLOAT_FIXED
            /* open the parametric binaural renderer */
            if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs_fx( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
            {
                return error;
            }
#if 1/*Cleanup Changes for ivas_dirac_dec_binaural_copy_hrtfs_fx*/
            FOR(Word16 i = 0; i < BINAURAL_CHANNELS; i++ )
            {
                FOR(Word16 j = 0; j < HRTF_SH_CHANNELS; j++ )
                {
                    fixedToFloat_arr(st_ivas->hHrtfParambin->hrtfShCoeffsRe_fx[i][j], st_ivas->hHrtfParambin->hrtfShCoeffsRe[i][j], 15, HRTF_NUM_BINS );
                    fixedToFloat_arr(st_ivas->hHrtfParambin->hrtfShCoeffsIm_fx[i][j], st_ivas->hHrtfParambin->hrtfShCoeffsIm[i][j], 14, HRTF_NUM_BINS );
                }
            }
            fixedToFloat_arrL(st_ivas->hHrtfParambin->parametricReverberationTimes_fx, st_ivas->hHrtfParambin->parametricReverberationTimes, 31, CLDFB_NO_CHANNELS_MAX );
            fixedToFloat_arrL(st_ivas->hHrtfParambin->parametricReverberationEneCorrections_fx, st_ivas->hHrtfParambin->parametricReverberationEneCorrections, 31, CLDFB_NO_CHANNELS_MAX );
            fixedToFloat_arrL(st_ivas->hHrtfParambin->parametricEarlyPartEneCorrection_fx, st_ivas->hHrtfParambin->parametricEarlyPartEneCorrection, 31, CLDFB_NO_CHANNELS_MAX );
#endif
#else
            if ( ( error = ivas_dirac_dec_binaural_copy_hrtfs( &st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
            {
                return error;
            }

#endif // IVAS_FLOAT_FIXED
            if ( ( error = ivas_dirac_dec_init_binaural_data( st_ivas, st_ivas->hHrtfParambin ) ) != IVAS_ERR_OK )
            {
                return error;
@@ -363,7 +383,11 @@ static ivas_error ivas_ism_bitrate_switching_dec(
            /* Close the TD Binaural renderer */
            if ( st_ivas->hBinRendererTd->HrFiltSet_p->ModelParams.modelROM == TRUE )
            {
#ifdef IVAS_FLOAT_FIXED
                ivas_td_binaural_close_fx( &st_ivas->hBinRendererTd );
#else
                ivas_td_binaural_close( &st_ivas->hBinRendererTd );
#endif // IVAS_FLOAT_FIXED
                st_ivas->hHrtfTD = NULL;

                if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
@@ -412,6 +436,12 @@ static ivas_error ivas_ism_bitrate_switching_dec(
    {
        nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );

#ifdef IVAS_FLOAT_FIXED
        IF( ( error = ivas_output_buff_dec_fx( st_ivas->p_output_fx, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
        {
            return error;
        }
#endif // IVAS_FLOAT_FIXED
        if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
        {
            return error;
+36 −0
Original line number Diff line number Diff line
@@ -353,6 +353,42 @@ void ivas_dirac_dec_close_binaural_data(
 * Temporary function for copying HRTF data from rom tables if no binary
 * file was given.
 *------------------------------------------------------------------------*/
#ifdef IVAS_FLOAT_FIXED
ivas_error ivas_dirac_dec_binaural_copy_hrtfs_fx(
    HRTFS_PARAMBIN_HANDLE *hHrtfParambin /* i/o: HRTF structure for rendering */
)
{
    Word16 i, j;
    IF ( hHrtfParambin != NULL && *hHrtfParambin != NULL )
    {
        /* Tables already loaded from file */
        return IVAS_ERR_OK;
    }
    ELSE
    {
        /* Initialise tables from ROM */
        HRTFS_PARAMBIN *hrtfParambin;
        IF ( ( hrtfParambin = (HRTFS_PARAMBIN *) malloc( sizeof( HRTFS_PARAMBIN ) ) ) == NULL )
        {
            return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Could not allocate memory for parametric binauralizer HRTF tables" );
        }
        FOR ( i = 0; i < BINAURAL_CHANNELS; i++ )
        {
            FOR ( j = 0; j < HRTF_SH_CHANNELS; j++ )
            {
                Copy( hrtfShCoeffsRe_fx[i][j], hrtfParambin->hrtfShCoeffsRe_fx[i][j], HRTF_NUM_BINS );
                Copy( hrtfShCoeffsIm_fx[i][j], hrtfParambin->hrtfShCoeffsIm_fx[i][j], HRTF_NUM_BINS );
            }
        }
        Copy32( parametricReverberationTimes_fx, hrtfParambin->parametricReverberationTimes_fx, CLDFB_NO_CHANNELS_MAX );
        Copy32( parametricReverberationEneCorrections_fx, hrtfParambin->parametricReverberationEneCorrections_fx, CLDFB_NO_CHANNELS_MAX );
        Copy32( parametricEarlyPartEneCorrection_fx, hrtfParambin->parametricEarlyPartEneCorrection_fx, CLDFB_NO_CHANNELS_MAX );
        *hHrtfParambin = hrtfParambin;
    }

    return IVAS_ERR_OK;
}
#endif // IVAS_FLOAT_FIXED

ivas_error ivas_dirac_dec_binaural_copy_hrtfs(
    HRTFS_PARAMBIN_HANDLE *hHrtfParambin /* i/o: HRTF structure for rendering */
+22 −6
Original line number Diff line number Diff line
@@ -205,7 +205,6 @@ ivas_error ivas_td_binaural_open_unwrap_fx(
            move16();

            TDREND_SRC_SPATIAL_t *SrcSpatial_p = pBinRendTd->Sources[nS]->SrcSpatial_p;
            // floatToFixed_arr( SrcSpatial_p->Pos_p, SrcSpatial_p->Pos_p_fx, 15, 3 );
            IF( ( error = TDREND_MIX_SRC_SetPos_fx( pBinRendTd, nS, Pos_fx ) ) != IVAS_ERR_OK )
            {
                return error;
@@ -455,6 +454,23 @@ ivas_error ivas_td_binaural_open_unwrap(
 *
 * Close TD Object binaural renderer
 *---------------------------------------------------------------------*/
#ifdef IVAS_FLOAT_FIXED
void ivas_td_binaural_close_fx(
    BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */
)
{
    IF ( hBinRendererTd == NULL || *hBinRendererTd == NULL )
    {
        return;
    }
    free( ( *hBinRendererTd )->TdRend_MixSpatSpec_p );
    free( ( *hBinRendererTd )->DirAtten_p );
    TDREND_MIX_Dealloc_fx( *hBinRendererTd );
    free( *hBinRendererTd );
    *hBinRendererTd = NULL;
    return;
}
#endif // IVAS_FLOAT_FIXED

void ivas_td_binaural_close(
    BINAURAL_TD_OBJECT_RENDERER_HANDLE *hBinRendererTd /* i/o: TD binaural object renderer handle */
@@ -1030,11 +1046,11 @@ static void angles_to_vec_fx(
)
{
    Word16 elevation_fx, azimuth_fx;
    elevation_fx =(Word16)L_shr( Mult_32_16( elevation, 91 ), 22 );
    azimuth_fx = (Word16)L_shr( Mult_32_16( azimuth, 91 ), 22 );
    vec[0] = mult( radius, mult( getCosWord16R2( imult1616( elevation_fx, 91 ) ), getCosWord16R2( imult1616( azimuth_fx, 91 ) ) ) );
    vec[1] = mult( radius, mult( getCosWord16R2( imult1616( elevation_fx, 91 ) ), getSineWord16R2( imult1616( azimuth_fx, 91 ) ) ) );
    vec[2] = mult( radius, getSineWord16R2( imult1616( elevation_fx, 91 ) ) );
    elevation_fx =(Word16)L_shr( Mult_32_16( elevation, 91 ), 7 );
    azimuth_fx = (Word16)L_shr( Mult_32_16( azimuth, 91 ), 7 );
    vec[0] = mult( radius, mult( getCosWord16R2( elevation_fx ), getCosWord16R2( azimuth_fx ) ) );
    vec[1] = mult( radius, mult( getCosWord16R2( elevation_fx ), getSineWord16R2( azimuth_fx ) ) );
    vec[2] = mult( radius, getSineWord16R2( elevation_fx ) );
    return;
}
#endif // IVAS_FLOAT_FIXED
+39 −0
Original line number Diff line number Diff line
@@ -528,6 +528,45 @@ void HRTF_model_precalc(
 *
 * Deallocate BSpline HR Filter model
 --------------------------------------------------------------------*/
#ifdef IVAS_FLOAT_FIXED
void BSplineModelEvalDealloc_fx(
    ModelParams_t *model,  /* i  : Model parameters           */
    ModelEval_t *modelEval /* i  : Model evaluation structure */
)
{
    /* Allocated in LoadBSplineBinary() */
    Word16 i;

    IF ( model->modelROM )
    {
#if 1 //To be removed later :Floating point memory release
        free( (void *) model->azimBsShape ); /* 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 < model->elevDim3; i++ )
        {
            free( model->azimKSeq[i] );
        }
        free( model->azimKSeq );
        IF ( modelEval != NULL )
        {
            free( modelEval->hrfModL );
            free( modelEval->hrfModR );
        }
#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. */
        FOR ( i = 0; i < model->elevDim3; i++ )
        {
            free( model->azimKSeq_fx[i] );
        }
        free( model->azimKSeq_fx);
        IF ( modelEval != NULL )
        {
            free( modelEval->hrfModL_fx);
            free( modelEval->hrfModR_fx);
        }
    }
    return;
}
#endif // IVAS_FLOAT_FIXED

void BSplineModelEvalDealloc(
    ModelParams_t *model,  /* i  : Model parameters           */
Loading