Commit a4aa79e4 authored by reutelhuber's avatar reutelhuber
Browse files

update to main

parents a75a3adb 67aaefcf
Loading
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1787,7 +1787,7 @@ IsmPositionProvider *IsmPositionProvider_open(
    IsmPositionProvider *ipp;
    uint16_t i;

    ipp = (IsmPositionProvider *) malloc_( sizeof( IsmPositionProvider ) );
    ipp = (IsmPositionProvider *) malloc( sizeof( IsmPositionProvider ) );
    ipp->frameCounter = 0;
    ipp->numObjects = 0;

@@ -2182,8 +2182,8 @@ static void parseIsm(
    if ( parseUint32( line, &numberOfObjectPositionsToRead ) == 0 )
    {
        positionProvider->numPositions[idx] = numberOfObjectPositionsToRead;
        positionProvider->positions[idx] = malloc_( numberOfObjectPositionsToRead * sizeof( IVAS_REND_AudioObjectPosition ) );
        positionProvider->positionDurations[idx] = malloc_( numberOfObjectPositionsToRead * sizeof( uint16_t ) );
        positionProvider->positions[idx] = malloc( numberOfObjectPositionsToRead * sizeof( IVAS_REND_AudioObjectPosition ) );
        positionProvider->positionDurations[idx] = malloc( numberOfObjectPositionsToRead * sizeof( uint16_t ) );

        for ( i = 0; i < numberOfObjectPositionsToRead; ++i )
        {
+1 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ if [ $BUILD -eq 1 ];then
	make clean
	
    # Replace free -> free_, malloc -> malloc_, calloc -> calloc_
	./scripts/prepare_mem_dryrun.py
	python3 ./scripts/prepare_mem_dryrun.py

	# Enable WMOPS and disable DEBUGGING
	sed -i.bak -e "s/\/\*\s*\(#define\s*WMOPS\)\s*\*\//\1/g" lib_com/options.h

lib_com/ivas_cnst.h

100644 → 100755
+31 −0
Original line number Diff line number Diff line
@@ -174,6 +174,10 @@ typedef enum
#define BINAURAL_CHANNELS                       2                           /* number of channels for binaural output configuration */
#define CPE_CHANNELS                            2                           /* number of CPE (stereo) channels */
#define FOA_CHANNELS                            4                           /* number of FOA channels */
#ifdef HODIRAC
#define HOA2_CHANNELS                           9
#endif

#define MAX_NUM_OBJECTS                         4                           /* max. number of audio objects */

#define MAX_SCE                                 MAX_NUM_OBJECTS             /* max. number of SCEs */
@@ -837,6 +841,10 @@ enum fea_names
#define SNS_MSVQ_NSTAGES_TCX10                  3
#define SNS_MSVQ_NSTAGES_SIDE                   2
#endif
#ifdef FIX_445_SNS_BUGFIXES
#define SNS_CDBKS_BITS_4_FRAC                   12
#define SNS_MEANS_BITS_4_FRAC                   14
#endif

#define MDCT_ST_PLC_FADEOUT_MIN_NOISE_NRG       0.001f
#define MDCT_ST_PLC_FADEOUT_MAX_CONC_FRAME      2 * FRAMES_PER_SEC
@@ -901,7 +909,11 @@ typedef enum
 * DirAC Constants 
 *----------------------------------------------------------------------------------*/

#ifdef HODIRAC
#define DIRAC_MAX_ANA_CHANS                     11                          /* Maximum number of channels for DirAC analysis */
#else
#define DIRAC_MAX_ANA_CHANS                     FOA_CHANNELS                /* Maximum number of channels for DirAC analysis */
#endif

#define DIRAC_NUM_DIMS                          3                           /* number of directions to estimate (X,Y,Z) */
#define DIRAC_MAX_NBANDS                        12                          /* Maximum number of frequency bands for the DirAC Side Parameter decoding */
@@ -915,6 +927,11 @@ typedef enum
#define DIRAC_NO_FB_BANDS_MAX                   MDFT_FB_BANDS_240
#define DELAY_DIRAC_ENC_CMP_NS_PARAM_ISM        ( IVAS_ENC_DELAY_NS + IVAS_DEC_DELAY_NS ) /* == 12 ms */

#ifdef HODIRAC
#define DIRAC_HO_NUMSECTORS                     2
#define NUM_ANA_SECTORS 2
#endif


/* DirAC renderer setup */
typedef enum
@@ -973,7 +990,17 @@ typedef enum

#define SPAR_CONFIG_BW                          FB

#ifndef SPAR_TUNING
#define IVAS_SPAR_MAX_CH                        (FOA_CHANNELS + 2 * ( IVAS_MAX_SBA_ORDER - 1 )) /* FOA + planar HOA */
#else
#define IVAS_SPAR_MAX_CH                        ((( IVAS_MAX_SBA_ORDER ) * ( IVAS_MAX_SBA_ORDER )) + 2) /* HOA2 + pHOA3*/
#define IVAS_HBR_MAX_DECOR_CHS                  (2)
#endif

#ifdef HODIRAC
#define IVAS_SPAR_MAX_FB_IN_CHAN               11
#endif


#define IVAS_SPAR_P_LOWERTRI                    ((IVAS_SPAR_MAX_CH - 1) * (IVAS_SPAR_MAX_CH - 2)) >> 1
#define IVAS_SPAR_MAX_C_COEFF                   (IVAS_SPAR_MAX_CH - IVAS_SPAR_MAX_DMX_CHS) * ( IVAS_SPAR_MAX_DMX_CHS - 1)
@@ -1182,7 +1209,11 @@ enum
#define MASA_ANGLE_TOLERANCE                    0.5f
#define MASA_LIMIT_NO_BANDS_SUR_COH             8
#define MINIMUM_BIT_BUDGET_NORMAL_META          100
#ifdef HODIRAC
#define DIFF_DFRATIO_2BIT_LIMIT_IDX_HODIRAC     4
#endif
#define DIFF_DFRATIO_2BIT_LIMIT_IDX             3

#define DIFF_DFRATIO_1BIT_LIMIT_IDX             6
#define DIFF_EC_HUFF_BAND_LIMIT                 8
#define DIFF_EC_HUFF_GR0_LIMIT                  8
+15 −2
Original line number Diff line number Diff line
@@ -50,8 +50,11 @@ static void ivas_set_up_cov_smoothing(
    ivas_cov_smooth_state_t *hCovState,
    ivas_filterbank_t *pFb,
    const float max_update_rate,
    const int16_t min_pool_size,
    const int16_t min_pool_size
#ifndef FIX_331_ALL_BRS
    ,
    const int16_t nchan_inp /* i  : number of input channels       */
#endif
    ,
    const int32_t ivas_total_brate )
{
@@ -90,7 +93,9 @@ static void ivas_set_up_cov_smoothing(
            }
        }
    }
    else if ( nchan_inp <= FOA_CHANNELS )
    else
#ifndef FIX_331_ALL_BRS
        if ( nchan_inp <= FOA_CHANNELS )
    {
        for ( j = 0; j < pFb->filterbank_num_bands; j++ )
        {
@@ -112,6 +117,7 @@ static void ivas_set_up_cov_smoothing(
    }
    else
    {
#endif
        for ( j = 0; j < pFb->filterbank_num_bands; j++ )
        {
            float update_factor;
@@ -131,7 +137,9 @@ static void ivas_set_up_cov_smoothing(
                hCovState->pSmoothing_factor[j] = max_update_rate;
            }
        }
#ifndef FIX_331_ALL_BRS
    }
#endif
    hCovState->prior_bank_idx = -1;

    return;
@@ -178,7 +186,12 @@ ivas_error ivas_spar_covar_smooth_enc_open(
        }
    }


#ifndef FIX_331_ALL_BRS
    ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, nchan_inp, ivas_total_brate );
#else
    ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, ivas_total_brate );
#endif

    *hCovState_out = hCovState;

+292 −8
Original line number Diff line number Diff line
@@ -71,8 +71,10 @@ ivas_error ivas_dirac_config(
    int16_t spar_dirac_split_band;
    IVAS_FB_MIXER_HANDLE hFbMdft;
    SBA_MODE sba_mode;

    int16_t *dirac_to_spar_md_bands;


    error = IVAS_ERR_OK;

    if ( enc_dec == ENC )
@@ -128,7 +130,14 @@ ivas_error ivas_dirac_config(
    if ( sba_mode == SBA_MODE_SPAR )
    {
        hConfig->nbands = IVAS_MAX_NUM_BANDS;

        spar_dirac_split_band = min( IVAS_MAX_NUM_BANDS, SPAR_DIRAC_SPLIT_START_BAND );
#ifdef HODIRAC
        if ( sba_order > 1 && ivas_total_brate > IVAS_256k )
        {
            spar_dirac_split_band = 0;
        }
#endif
    }
    else
    {
@@ -164,6 +173,16 @@ ivas_error ivas_dirac_config(
            {
                hConfig->enc_param_start_band = spar_dirac_split_band;
            }
#ifdef HODIRAC
            if ( sba_order > 1 && ivas_total_brate > IVAS_256k )
            {
                hConfig->dec_param_estim = FALSE;
                hConfig->enc_param_start_band = 0;

                set_c( (int8_t *) hQMetaData->twoDirBands, (int8_t) 1, hQMetaData->q_direction[0].cfg.nbands );
                hQMetaData->numTwoDirBands = (uint8_t) hQMetaData->q_direction[0].cfg.nbands;
            }
#endif
        }
        else
        {
@@ -176,7 +195,9 @@ ivas_error ivas_dirac_config(

    if ( sba_mode == SBA_MODE_SPAR )
    {
        ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ),
        ivas_dirac_config_bands( band_grouping,
                                 IVAS_MAX_NUM_BANDS,
                                 (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ),
                                 dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft );
    }
    else
@@ -354,13 +375,45 @@ ivas_error ivas_dirac_sba_config(
        else
        {
            hQMetaData->useLowerBandRes = 0;
#ifdef HODIRAC
            if ( !( sba_order > 1 && sba_total_brate > IVAS_256k ) )
#endif
            {
                nbands_coded = nbands - 1; /* always combine the last two bands */
            }
        }

        if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, nbands_coded, 1, 0 ) ) != IVAS_ERR_OK )
        {
            int16_t no_dirs = 1;
#ifdef HODIRAC
            if ( sba_order > 1 && sba_total_brate > IVAS_256k )
            {
                no_dirs = 2;
            }
#endif

            if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, nbands_coded, no_dirs, 0 ) ) != IVAS_ERR_OK )
            {
                return error;
            }
#ifdef HODIRAC_FIX_BR_SWITCHING_DTX
            if ( sba_order > 1 && sba_total_brate > IVAS_256k )
            {
                int16_t dir, j;
                for ( dir = 0; dir < hQMetaData->no_directions; dir++ )
                {
                    for ( j = 0; j < nbands_coded; j++ )
                    {
                        for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ )
                        {
                            hQMetaData->q_direction[dir].band_data[j].energy_ratio_index[i] = 0;
                            hQMetaData->q_direction[dir].band_data[j].energy_ratio_index_mod[i] = 0;
                        }
                    }
                }
            }
#endif
        }

        if ( sba_total_brate <= IVAS_13k2 )
        {
@@ -452,11 +505,19 @@ ivas_error ivas_dirac_sba_config(
        }
        if ( sba_total_brate >= IVAS_96k )
        {
            if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 6, 1, 0 ) ) != IVAS_ERR_OK )
            {
                int16_t no_dirs = 1;
#ifdef HODIRAC
                if ( sba_order > 1 && sba_total_brate > IVAS_256k )
                {
                    no_dirs = 2;
                }
#endif
                if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, 6, no_dirs, 0 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }

            }
            nbands_wb = 4;
        }
        else
@@ -484,8 +545,17 @@ ivas_error ivas_dirac_sba_config(
            for ( i = 0; i < hQMetaData->no_directions; i++ )
            {
                hQMetaData->q_direction[i].cfg.search_effort = 1;
#ifdef HODIRAC
                if ( sba_order > 1 && sba_total_brate > IVAS_256k )
                {
                    hQMetaData->q_direction[i].cfg.start_band = 0;
                }
                else
#endif
                {
                    hQMetaData->q_direction[i].cfg.start_band = nbands_wb;
                }
            }

            *element_mode = IVAS_CPE_MDCT;
        }
@@ -787,6 +857,220 @@ void deindex_spherical_component(
    return;
}

#ifdef HODIRAC
void calculate_hodirac_sector_parameters(
    float RealBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i: signal vector (L+1)^2 x N_bins, real part */
    float ImagBuffer[DIRAC_MAX_ANA_CHANS][DIRAC_NO_FB_BANDS_MAX], /* i: signal vector, imaginary part*/
    const int16_t N_bins,                                         /* i: number of bins */
    const float beta,                                             /* i: forgetting factor for average filtering */
    const int16_t *band_grouping,                                 /* i: indices of band groups */
    const int16_t N_bands,                                        /* i: number of bands (groups) */
    const int16_t enc_param_start_band,                           /* i: first band to process */
    float *azi,                                                   /* o: array of sector azimuth angles, flat */
    float *ele,                                                   /* o: array of sector elevation angles, flat */
    float *diff,                                                  /* o: array of sector diffuseness values, flat*/
    float *ene                                                    /* o: array of sector energy values, flat*/
)
{
    int16_t i_sec, i_bin, i_band;

    float p_real, p_imag, normI, energy, tmp_diff;

    float sec_I_vec_x[NUM_ANA_SECTORS];
    float sec_I_vec_y[NUM_ANA_SECTORS];
    float sec_I_vec_z[NUM_ANA_SECTORS];

    static int16_t firstrun_sector_params = 1;

    static float sec_I_vec_smth_x[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS];
    static float sec_I_vec_smth_y[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS];
    static float sec_I_vec_smth_z[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS];

    static float energy_smth[NUM_ANA_SECTORS][IVAS_MAX_NUM_BANDS];
    static float azi_prev[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS];
    static float ele_prev[NUM_ANA_SECTORS * IVAS_MAX_NUM_BANDS];

#ifdef DEBUGGING
    assert( N_bins <= DIRAC_NO_FB_BANDS_MAX );
#endif

    for ( i_sec = 0; i_sec < NUM_ANA_SECTORS; i_sec++ )
    {

        float *p_sec_I_vec_x = &sec_I_vec_x[i_sec];
        float *p_sec_I_vec_y = &sec_I_vec_y[i_sec];
        float *p_sec_I_vec_z = &sec_I_vec_z[i_sec];

        const float *p_c_weights = c_weights;

        float *p_ImagBuffer_0 = ImagBuffer[0];
        float *p_ImagBuffer_1 = ImagBuffer[1];
        float *p_ImagBuffer_2 = ImagBuffer[2];
        float *p_ImagBuffer_3 = ImagBuffer[3];
        float *p_ImagBuffer_4 = ImagBuffer[4];
        float *p_ImagBuffer_5 = ImagBuffer[5];
        float *p_ImagBuffer_6 = ImagBuffer[6];
        float *p_ImagBuffer_8 = ImagBuffer[8];

        float *p_RealBuffer_0 = RealBuffer[0];
        float *p_RealBuffer_1 = RealBuffer[1];
        float *p_RealBuffer_2 = RealBuffer[2];
        float *p_RealBuffer_3 = RealBuffer[3];
        float *p_RealBuffer_4 = RealBuffer[4];
        float *p_RealBuffer_5 = RealBuffer[5];
        float *p_RealBuffer_6 = RealBuffer[6];
        float *p_RealBuffer_8 = RealBuffer[8];

        for ( i_band = enc_param_start_band; i_band < N_bands; i_band++ )
        {
            float *p_azi = &azi[i_sec * N_bands + i_band];
            float *p_ele = &ele[i_sec * N_bands + i_band];
            float *p_ene = &ene[i_sec * N_bands + i_band];

            float *p_diff = &diff[i_sec * N_bands + i_band];
            float *p_azi_prev = &azi_prev[i_sec * N_bands + i_band];
            float *p_ele_prev = &ele_prev[i_sec * N_bands + i_band];

            float *p_energy_smth = &energy_smth[i_sec][i_band];
            float *p_sec_I_vec_smth_x = &sec_I_vec_smth_x[i_sec][i_band];
            float *p_sec_I_vec_smth_y = &sec_I_vec_smth_y[i_sec][i_band];
            float *p_sec_I_vec_smth_z = &sec_I_vec_smth_z[i_sec][i_band];

            *p_sec_I_vec_x = 0.f;
            *p_sec_I_vec_y = 0.f;
            *p_sec_I_vec_z = 0.f;
            energy = 0.f;

            if ( i_sec == 0 )
            {
                for ( i_bin = band_grouping[i_band]; i_bin < band_grouping[i_band + 1]; i_bin++ )
                {
                    float w = *( p_c_weights++ );
                    float sec_w_imag, sec_x_imag, sec_y_imag, sec_z_imag;
                    float sec_w_real, sec_x_real, sec_y_real, sec_z_real;

                    sec_w_imag = 1.772454f * *( p_ImagBuffer_0 ) + 1.772454f * *( p_ImagBuffer_1 );
                    sec_x_imag = 1.772454f * *( p_ImagBuffer_3++ ) + 1.023326f * *( p_ImagBuffer_4++ );
                    sec_y_imag = 0.590818f * *( p_ImagBuffer_0++ ) + 1.772454f * *( p_ImagBuffer_1++ ) - 0.590817f * *( p_ImagBuffer_6++ ) - 1.023326f * *( p_ImagBuffer_8++ );
                    sec_z_imag = 1.772454f * *( p_ImagBuffer_2++ ) + 1.023326f * *( p_ImagBuffer_5++ );

                    sec_w_real = 1.772454f * *( p_RealBuffer_0 ) + 1.772454f * *( p_RealBuffer_1 );
                    sec_x_real = 1.772454f * *( p_RealBuffer_3++ ) + 1.023326f * *( p_RealBuffer_4++ );
                    sec_y_real = 0.590818f * *( p_RealBuffer_0++ ) + 1.772454f * *( p_RealBuffer_1++ ) - 0.590817f * *( p_RealBuffer_6++ ) - 1.023326f * *( p_RealBuffer_8++ );
                    sec_z_real = 1.772454f * *( p_RealBuffer_2++ ) + 1.023326f * *( p_RealBuffer_5++ );

                    p_real = sec_w_real * w;
                    p_imag = sec_w_imag * w;

                    *p_sec_I_vec_x += p_real * sec_x_real + p_imag * sec_x_imag;
                    *p_sec_I_vec_y += p_real * sec_y_real + p_imag * sec_y_imag;
                    *p_sec_I_vec_z += p_real * sec_z_real + p_imag * sec_z_imag;

                    energy += 0.5f * ( p_real * p_real + p_imag * p_imag + sec_x_real * sec_x_real + sec_x_imag * sec_x_imag +
                                       sec_y_real * sec_y_real + sec_y_imag * sec_y_imag +
                                       sec_z_real * sec_z_real + sec_z_imag * sec_z_imag );
                }
            }
            else
            {
                for ( i_bin = band_grouping[i_band]; i_bin < band_grouping[i_band + 1]; i_bin++ )
                {
                    float w = *( p_c_weights++ );
                    float sec_w_imag, sec_x_imag, sec_y_imag, sec_z_imag;
                    float sec_w_real, sec_x_real, sec_y_real, sec_z_real;

                    sec_w_imag = 1.772454f * *(p_ImagBuffer_0) -1.772454f * *( p_ImagBuffer_1 );
                    sec_x_imag = 1.772454f * *( p_ImagBuffer_3++ ) - 1.023326f * *( p_ImagBuffer_4++ );
                    sec_y_imag = -0.590818f * *( p_ImagBuffer_0++ ) + 1.772454f * *( p_ImagBuffer_1++ ) + 0.590817f * *( p_ImagBuffer_6++ ) + 1.023326f * *( p_ImagBuffer_8++ );
                    sec_z_imag = 1.772454f * *( p_ImagBuffer_2++ ) - 1.023326f * *( p_ImagBuffer_5++ );

                    sec_w_real = 1.772454f * *(p_RealBuffer_0) -1.772454f * *( p_RealBuffer_1 );
                    sec_x_real = 1.772454f * *( p_RealBuffer_3++ ) - 1.023326f * *( p_RealBuffer_4++ );
                    sec_y_real = -0.590818f * *( p_RealBuffer_0++ ) + 1.772454f * *( p_RealBuffer_1++ ) + 0.590817f * *( p_RealBuffer_6++ ) + 1.023326f * *( p_RealBuffer_8++ );
                    sec_z_real = 1.772454f * *( p_RealBuffer_2++ ) - 1.023326f * *( p_RealBuffer_5++ );

                    p_real = sec_w_real * w;
                    p_imag = sec_w_imag * w;

                    *p_sec_I_vec_x += p_real * sec_x_real + p_imag * sec_x_imag;
                    *p_sec_I_vec_y += p_real * sec_y_real + p_imag * sec_y_imag;
                    *p_sec_I_vec_z += p_real * sec_z_real + p_imag * sec_z_imag;

                    energy += 0.5f * ( p_real * p_real + p_imag * p_imag + sec_x_real * sec_x_real + sec_x_imag * sec_x_imag +
                                       sec_y_real * sec_y_real + sec_y_imag * sec_y_imag +
                                       sec_z_real * sec_z_real + sec_z_imag * sec_z_imag );
                }
            }

            if ( firstrun_sector_params )
            {
                *p_sec_I_vec_smth_x = *p_sec_I_vec_x;
                *p_sec_I_vec_smth_y = *p_sec_I_vec_y;
                *p_sec_I_vec_smth_z = *p_sec_I_vec_z;
                *p_energy_smth = energy;
            }
            else
            {
                float w = ( 1.0f - beta );
                *p_sec_I_vec_smth_x = w * *p_sec_I_vec_x + beta * *p_sec_I_vec_smth_x;
                *p_sec_I_vec_smth_y = w * *p_sec_I_vec_y + beta * *p_sec_I_vec_smth_y;
                *p_sec_I_vec_smth_z = w * *p_sec_I_vec_z + beta * *p_sec_I_vec_smth_z;
                *p_energy_smth = w * energy + beta * *p_energy_smth;
            }

            if ( energy < EPSILON )
            {
                *p_azi = 0.f;
                *p_ele = 0.f;
                *p_ene = 0.f;
                *p_diff = 1.f;
            }
            else
            {
                normI = sqrtf( *p_sec_I_vec_smth_x * *p_sec_I_vec_smth_x +
                               *p_sec_I_vec_smth_y * *p_sec_I_vec_smth_y +
                               *p_sec_I_vec_smth_z * *p_sec_I_vec_smth_z );
                *p_azi = atan2f( *p_sec_I_vec_smth_y, *p_sec_I_vec_smth_x ) * _180_OVER_PI;
                *p_ele = asinf( *p_sec_I_vec_smth_z / ( normI + EPSILON ) ) * _180_OVER_PI;
                *p_ene = *p_energy_smth;
                *p_diff = 1.f - normI / ( *p_energy_smth + EPSILON );
            }

            tmp_diff = *p_diff;

            if ( tmp_diff < 0.0f )
            {
                *p_diff = 0.f;
            }
            if ( tmp_diff > 0.5f )
            {
                if ( firstrun_sector_params )
                {
                    *p_azi = 0.f;
                    *p_ele = 0.f;
                }
                else
                {
                    *p_azi = 2.f * ( 1.f - tmp_diff ) * *p_azi + ( 2.f * tmp_diff - 1.f ) * *p_azi_prev;
                    *p_ele = 2.f * ( 1.f - tmp_diff ) * *p_ele + ( 2.f * tmp_diff - 1.f ) * *p_ele_prev;
                }
            }
            else
            {
                *p_azi_prev = *p_azi;
                *p_ele_prev = *p_ele;
            }
#ifdef HODIRAC_CHECK_VALUE_RANGE
            assert( *p_azi >= -180.f && *p_azi <= 180.f );
            assert( *p_ele >= -90.f && *p_ele <= 90.f );
#endif
        } // i_band
    }     // i_sec

    firstrun_sector_params = 0;
}
#endif


/*-----------------------------------------------------------------------*
 * Local functions
Loading