Commit a1cad8f9 authored by vaclav's avatar vaclav
Browse files

error code returns for MASA/McMASA malloc()

parent 1500082f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4484,7 +4484,7 @@ ivas_error ivas_masa_dec_reconfigure(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                          */
);

void ivas_masa_encode(
ivas_error ivas_masa_encode(
    MASA_ENCODER_HANDLE hMasa,                                  /* i/o: MASA encoder structure                          */
    IVAS_QMETADATA_HANDLE hQMetaData,                           /* i/o: q_metadata handle                               */
    BSTR_ENC_HANDLE hMetaData,                                  /* i/o: Metadata bitstream handle                       */
+47 −14
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ static void replicate_subframes( IVAS_QMETADATA_HANDLE hQMetaData );

static void restore_lowbitrate_masa( IVAS_QMETADATA_HANDLE hQMetaData, const int16_t low_bitrate_mode, const int16_t numCodingBands );

static void init_lfe_synth_data( Decoder_Struct *st_ivas, MASA_DECODER_HANDLE hMasa );
static ivas_error init_lfe_synth_data( Decoder_Struct *st_ivas, MASA_DECODER_HANDLE hMasa );

static void compute_foa_cov_matrix( float foaCov[FOA_CHANNELS][FOA_CHANNELS], float inCov[FOA_CHANNELS][FOA_CHANNELS], float mixMtx[FOA_CHANNELS][FOA_CHANNELS] );

@@ -314,6 +314,7 @@ ivas_error ivas_masa_decode(
        create_masa_ext_out_meta( hMasa, hQMetaData, st_ivas->nchan_transport );
    }
#endif

    return error /* *nb_bits_read*/;
}

@@ -329,6 +330,9 @@ ivas_error ivas_masa_dec_open(
)
{
    MASA_DECODER_HANDLE hMasa;
    ivas_error error;

    error = IVAS_ERR_OK;

    if ( ( hMasa = (MASA_DECODER_HANDLE) malloc( sizeof( MASA_DECODER ) ) ) == NULL )
    {
@@ -345,10 +349,17 @@ ivas_error ivas_masa_dec_open(
    /* Create spherical grid only for external output */
    if ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_EXTERNAL )
    {
        hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) );
        if ( ( hMasa->data.sph_grid16 = (SPHERICAL_GRID_DATA *) malloc( sizeof( SPHERICAL_GRID_DATA ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }

        generate_gridEq( hMasa->data.sph_grid16 );
#ifdef FIX_350_MASA_DELAY_COMP
        hMasa->data.extOutMeta = (MASA_DECODER_EXT_OUT_META *) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) );
        if ( ( hMasa->data.extOutMeta = (MASA_DECODER_EXT_OUT_META *) malloc( sizeof( MASA_DECODER_EXT_OUT_META ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }
#endif
    }
    else
@@ -361,7 +372,7 @@ ivas_error ivas_masa_dec_open(

    if ( st_ivas->mc_mode == MC_MODE_MCMASA )
    {
        init_lfe_synth_data( st_ivas, hMasa );
        error = init_lfe_synth_data( st_ivas, hMasa );
    }
    else
    {
@@ -370,7 +381,7 @@ ivas_error ivas_masa_dec_open(

    st_ivas->hMasa = hMasa;

    return IVAS_ERR_OK;
    return error;
}


@@ -398,6 +409,7 @@ void ivas_masa_dec_close(
        hMasa->data.extOutMeta = NULL;
    }
#endif

    if ( hMasa->hMasaLfeSynth != NULL )
    {
        if ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer != NULL )
@@ -811,7 +823,7 @@ static void restore_lowbitrate_masa(
}


static void init_lfe_synth_data(
static ivas_error init_lfe_synth_data(
    Decoder_Struct *st_ivas,  /* i  : IVAS decoder struct     */
    MASA_DECODER_HANDLE hMasa /* i/o: MASA decoder structure  */
)
@@ -822,7 +834,10 @@ static void init_lfe_synth_data(
    output_Fs = st_ivas->hDecoderConfig->output_Fs;
    output_config = st_ivas->hDecoderConfig->output_config;

    hMasa->hMasaLfeSynth = (MCMASA_LFE_SYNTH_DATA_HANDLE) malloc( sizeof( MCMASA_LFE_SYNTH_DATA ) );
    if ( ( hMasa->hMasaLfeSynth = (MCMASA_LFE_SYNTH_DATA_HANDLE) malloc( sizeof( MCMASA_LFE_SYNTH_DATA ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
    }

    hMasa->hMasaLfeSynth->transportEneSmooth = 0.0f;
    hMasa->hMasaLfeSynth->protoLfeEneSmooth = 0.0f;
@@ -846,7 +861,10 @@ static void init_lfe_synth_data(
        /* Ring buffer for the filterbank of the LFE synthesis.
         * The filterbank is using moving average lowpass filter with the crossover of 120 Hz. */
        bufferSize = (int16_t) ( ( output_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES );
        hMasa->hMasaLfeSynth->lfeSynthRingBuffer = (float *) malloc( bufferSize * sizeof( float ) );
        if ( ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }
        set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer, bufferSize );
        hMasa->hMasaLfeSynth->ringBufferLoPointer = 0;
        hMasa->hMasaLfeSynth->ringBufferHiPointer = bufferSize / 2;
@@ -856,7 +874,10 @@ static void init_lfe_synth_data(
        /* Ring buffer for additional lowpass filter for the LFE signal.
         * Moving average lowpass filter with the crossover of 240 Hz. */
        bufferSize /= 2;
        hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = (float *) malloc( bufferSize * sizeof( float ) );
        if ( ( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2 = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }
        set_zero( hMasa->hMasaLfeSynth->lfeSynthRingBuffer2, bufferSize );
        hMasa->hMasaLfeSynth->ringBufferLoPointer2 = 0;
        hMasa->hMasaLfeSynth->lowpassSum2 = 0.0f;
@@ -864,13 +885,19 @@ static void init_lfe_synth_data(

        /* Delay buffer for matching the delay of the lowpass filter */
        bufferSize /= 2; /* The delay of the moving average lowpass filter is bufferSize / 2 */
        hMasa->hMasaLfeSynth->delayBuffer_syncLp = (float *) malloc( bufferSize * sizeof( float ) );
        if ( ( hMasa->hMasaLfeSynth->delayBuffer_syncLp = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }
        set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncLp, bufferSize );
        hMasa->hMasaLfeSynth->delayBuffer_syncLp_size = bufferSize;

        /* Delay buffer for syncing with DirAC rendering */
        bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS ) - hMasa->hMasaLfeSynth->ringBufferSize / 2 - hMasa->hMasaLfeSynth->ringBufferSize2 / 2;
        hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) );
        if ( ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }
        set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize );
        hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize;

@@ -889,7 +916,10 @@ static void init_lfe_synth_data(

        /* Delay buffer for syncing with DirAC rendering */
        bufferSize = NS2SA( output_Fs, IVAS_FB_DEC_DELAY_NS );
        hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) );
        if ( ( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA decoder\n" ) );
        }
        set_zero( hMasa->hMasaLfeSynth->delayBuffer_syncDirAC, bufferSize );
        hMasa->hMasaLfeSynth->delayBuffer_syncDirAC_size = bufferSize;

@@ -905,7 +935,7 @@ static void init_lfe_synth_data(
        hMasa->hMasaLfeSynth->delayBuffer_syncDirAC = NULL;
    }

    return;
    return IVAS_ERR_OK;
}


@@ -1378,7 +1408,10 @@ static void compute_foa_cov_matrix(
}

#ifdef FIX_350_MASA_DELAY_COMP
static void create_masa_ext_out_meta( MASA_DECODER *hMasa, IVAS_QMETADATA_HANDLE hQMetaData, const int16_t nchan_transport )
static void create_masa_ext_out_meta(
    MASA_DECODER *hMasa,
    IVAS_QMETADATA_HANDLE hQMetaData,
    const int16_t nchan_transport )
{
    const uint8_t ivasmasaFormatDescriptor[8] = { 0x49, 0x56, 0x41, 0x53, 0x4D, 0x41, 0x53, 0x41 }; /* "IVASMASA" */
    int16_t i, sf, b_old, b_new, dir;
+9 −3
Original line number Diff line number Diff line
@@ -237,8 +237,11 @@ ivas_error ivas_enc(

                ivas_masa_estimate_energy( st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport );

                ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format,
                                  ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1 );
                if ( ( error = ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format,
                                                 ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1 ) ) != IVAS_ERR_OK )
                {
                    return error;
                }
            }
        }
        else if ( st_ivas->sba_mode == SBA_MODE_SPAR )
@@ -330,7 +333,10 @@ ivas_error ivas_enc(

            ivas_mcmasa_enc( st_ivas->hMcMasa, st_ivas->hQMetaData, st_ivas->hMasa, data_f, input_frame, st_ivas->nchan_transport, nchan_inp );

            ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, 0, -1 );
            if ( ( error = ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format, ivas_total_brate, 0, -1 ) ) != IVAS_ERR_OK )
            {
                return error;
            }

            if ( st_ivas->hMcMasa->separateChannelEnabled )
            {
+7 −3
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ void ivas_masa_enc_close(
 * main MASA encoder function
 *-----------------------------------------------------------------------*/

void ivas_masa_encode(
ivas_error ivas_masa_encode(
    MASA_ENCODER_HANDLE hMasa,        /* i/o: MASA encoder structure                  */
    IVAS_QMETADATA_HANDLE hQMetaData, /* i/o: q_metadata handle                       */
    BSTR_ENC_HANDLE hMetaData,        /* i/o: Metadata bitstream handle               */
@@ -226,7 +226,11 @@ void ivas_masa_encode(

        if ( Opt_DTX_ON )
        {
            h_orig_metadata = (MASA_DIRECTIONAL_SPATIAL_META *) malloc( MASA_MAXIMUM_DIRECTIONS * sizeof( MASA_DIRECTIONAL_SPATIAL_META ) );
            if ( ( h_orig_metadata = (MASA_DIRECTIONAL_SPATIAL_META *) malloc( MASA_MAXIMUM_DIRECTIONS * sizeof( MASA_DIRECTIONAL_SPATIAL_META ) ) ) == NULL )
            {
                return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for MASA encoder\n" ) );
            }

            for ( i = 0; i < MASA_MAXIMUM_DIRECTIONS; i++ )
            {
                for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ )
@@ -368,7 +372,7 @@ void ivas_masa_encode(
        hQMetaData->no_directions = numberOfDirectionsQMetaData;
    }

    return;
    return IVAS_ERR_OK;
}


+44 −11
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ ivas_error ivas_mcmasa_enc_open(
    assert( st_ivas->hMasa != NULL && "MASA encoder handle is not present" );
    hMasa = st_ivas->hMasa;

    if ( NULL == ( hMcMasa = (MCMASA_ENC_HANDLE) malloc( sizeof( MCMASA_ENC_DATA ) ) ) )
    if ( ( hMcMasa = (MCMASA_ENC_HANDLE) malloc( sizeof( MCMASA_ENC_DATA ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
    }
@@ -207,9 +207,16 @@ ivas_error ivas_mcmasa_enc_open(
    if ( hMcMasa->separateChannelEnabled )
    {
        /* TD Energy calculation with LP */
        hMcMasa->delay_buffer_lfe[0] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) );
        if ( ( hMcMasa->delay_buffer_lfe[0] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
        }
        set_zero( hMcMasa->delay_buffer_lfe[0], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) );
        hMcMasa->delay_buffer_lfe[1] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) );

        if ( ( hMcMasa->delay_buffer_lfe[1] = (float *) malloc( NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
        }
        set_zero( hMcMasa->delay_buffer_lfe[1], NS2SA( input_Fs, DELAY_DIRAC_ENC_CMP_NS + DIRAC_SLOT_ENC_NS ) );
        hMcMasa->hFbMixerLfe = NULL;
    }
@@ -243,7 +250,10 @@ ivas_error ivas_mcmasa_enc_open(
        bufferSize = (int16_t) ( ( input_Fs / FRAMES_PER_SEC ) / MAX_PARAM_SPATIAL_SUBFRAMES );
        for ( i = 0; i < 2; i++ )
        {
            hMcMasa->lfeAnaRingBuffer[i] = (float *) malloc( bufferSize * sizeof( float ) );
            if ( ( hMcMasa->lfeAnaRingBuffer[i] = (float *) malloc( bufferSize * sizeof( float ) ) ) == NULL )
            {
                return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
            }
            set_zero( hMcMasa->lfeAnaRingBuffer[i], bufferSize );
            hMcMasa->lowpassSum[i] = 0.0f;
        }
@@ -257,33 +267,56 @@ ivas_error ivas_mcmasa_enc_open(
    /* intensity 3-dim */
    for ( i = 0; i < DIRAC_NUM_DIMS; i++ )
    {
        hMcMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) );
        if ( ( hMcMasa->direction_vector_m[i] = (float **) malloc( MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( float * ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
        }

        for ( j = 0; j < MAX_PARAM_SPATIAL_SUBFRAMES; j++ )
        {
            hMcMasa->direction_vector_m[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) );
            if ( ( hMcMasa->direction_vector_m[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ) ) == NULL )
            {
                return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
            }
        }
    }

    hMcMasa->no_col_avg_diff = (int8_t) ( DIRAC_NO_COL_AVG_DIFF_NS / dirac_slot_ns );
    for ( i = 0; i < DIRAC_NUM_DIMS; i++ )
    {
        hMcMasa->buffer_intensity_real[i] = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) );
        if ( ( hMcMasa->buffer_intensity_real[i] = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
        }

        for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ )
        {
            hMcMasa->buffer_intensity_real[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) );
            if ( ( hMcMasa->buffer_intensity_real[i][j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ) ) == NULL )
            {
                return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
            }
            set_zero( hMcMasa->buffer_intensity_real[i][j], hMcMasa->nbands );
        }
    }

    hMcMasa->buffer_intensity_real_vert = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) );
    if ( ( hMcMasa->buffer_intensity_real_vert = (float **) malloc( hMcMasa->no_col_avg_diff * sizeof( float * ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
    }

    for ( j = 0; j < hMcMasa->no_col_avg_diff; j++ )
    {
        hMcMasa->buffer_intensity_real_vert[j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) );
        if ( ( hMcMasa->buffer_intensity_real_vert[j] = (float *) malloc( hMcMasa->nbands * sizeof( float ) ) ) == NULL )
        {
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
        }
        set_zero( hMcMasa->buffer_intensity_real_vert[j], hMcMasa->nbands );
    }

    hMcMasa->buffer_energy = (float *) malloc( hMcMasa->nbands * hMcMasa->no_col_avg_diff * sizeof( float ) );
    if ( ( hMcMasa->buffer_energy = (float *) malloc( hMcMasa->nbands * hMcMasa->no_col_avg_diff * sizeof( float ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for McMasa\n" ) );
    }
    set_zero( hMcMasa->buffer_energy, hMcMasa->nbands * hMcMasa->no_col_avg_diff );

    if ( st_ivas->hEncoderConfig->mc_input_setup == MC_LS_SETUP_5_1 )