Commit dec683eb authored by vaclav's avatar vaclav
Browse files

port MR

parent 1e52e7a9
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -154,6 +154,7 @@ typedef enum
#else
    RENDERER_OSBA_LS
#endif

} RENDERER_TYPE;

#define MAX_FREQUENCY_BANDS                    64
+30 −20
Original line number Diff line number Diff line
@@ -165,19 +165,23 @@ void ivas_omasa_combine_separate_ism_with_masa_fx(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder handle                    */
    Word32 *output[],                                           /* o  : output synthesis signal                */
    Word16 *output_q,                                           /* i/o: output Q value                         */
    const int16_t nchan_ism,                                    /* i  : number of ISMs                         */
    const int16_t output_frame                                  /* i  : output frame length per channel        */
    const Word16 nchan_ism,                                     /* i  : number of ISMs                         */
    const Word16 output_frame                                   /* i  : output frame length per channel        */
);

#ifdef FIX_1161_REDUCE_OMASA_HEAP
ivas_error ivas_omasa_objects_delay_open_fx(
#else
ivas_error ivas_omasa_render_objects_from_mix_open_fx(
#endif
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                 */
);

void ivas_omasa_render_objects_from_mix_fx(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder handle                    */
    Word32 *output[],                                           /* o  : output synthesis signal                */
    const int16_t nchan_ism,                                    /* i  : number of ISMs                         */
    const int16_t output_frame,                                 /* i  : output frame length per channel        */
    const Word16 nchan_ism,                                     /* i  : number of ISMs                         */
    const Word16 output_frame,                                  /* i  : output frame length per channel        */
    Word16 *output_q                                            /* i/o: output Q value                         */
);

@@ -191,6 +195,7 @@ ivas_error ivas_omasa_ism_metadata_dec_fx(
    const Word16 dirac_bs_md_write_idx,                         /* i  : DirAC bitstream write index             */
    Word16 nb_bits_metadata[]                                   /* o  : number of ISM metadata bits             */
);

ivas_error ivas_omasa_dec_config_fx(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder structure                                  */
    UWord16 *nSamplesRendered,                                  /* o  : number of samples flushed from the previous frame (JBM) */
@@ -3162,8 +3167,8 @@ void stereo_tcx_core_enc(
    Word16 pitch_buf_fx[NB_SUBFR16k], /* o  : pitch for each subframe, Q6                */
    const Word16 last_element_mode,   /* i  : last element mode, Q0                      */
    const Word16 vad_hover_flag,      /* i  : VAD hangover flag, Q0                      */
    Word16 Q_new );

    Word16 Q_new 
);

Word16 transient_analysis_ivas_fx(
    TRAN_DET_HANDLE hTranDet,  /* i  : handle transient detection       */
@@ -3289,20 +3294,24 @@ void ivas_fb_mixer_get_windowed_fr_fx(
    const Word16 length,      /* i  : number of new samples in time slot */
    const Word16 mdft_len,    /* i  : MDFT frame length                  */
    const Word16 nchan_fb_in, /* i  : number of analysis channels        */
    Word16 gb );
    Word16 gb 
);

void ivas_omasa_set_config_fx(
    OMASA_ENC_HANDLE hOMasa,   /* i/o: OMASA encoder handle */
    MASA_ENCODER_HANDLE hMasa, /* i  : MASA encoder handle  */
    const Word32 input_Fs,     /* i  : Input sample rate    */
    const ISM_MODE ism_mode    /* i  : ISM mode             */
);

Word16 ivas_omasa_ener_brate_fx(
    const Word16 nchan_ism,        /* i  : number of ISMs                   */
    const Word32 ivas_total_brate, /* i  : IVAS total bitrate               */
    Word32 *data_f[],              /* i  : Input / transport audio signals  */
    const Word16 input_frame,      /* i  : Input frame size                 */
    Word16 data_e                  /*i:exponent for data_f                  */
    const Word16 data_e            /* i  : exponent for data_f              */
);

void computeDiffuseness_mdft_fx(
    Word32 **buffer_intensity[DIRAC_NUM_DIMS],
    const Word32 *buffer_energy,
@@ -3341,6 +3350,7 @@ UWord8 ivas_masa_surrcoh_signicant_fx(
ivas_error ivas_mcmasa_enc_open_fx(
    Encoder_Struct *st_ivas /* i/o: IVAS encoder handle                             */
);

void ivas_mcmasa_enc_close_fx(
    MCMASA_ENC_HANDLE *hMcMasa, /* i/o: encoder McMASA handle                           */
    const Word32 input_Fs       /* i  : input sampling rate                             */
+1 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@

#define FIX_1372_ISAR_POST_REND
#define NONBE_FIX_984_OMASA_EXT_OUTPUT                  /* Nokia: issue #984: complete the OMASA EXT output implementation */
#define FIX_1161_REDUCE_OMASA_HEAP                      /* VA: reduction of OMASA heap memory */
#define USE_NEW_HRTF_BINARY_FILE_FORMAT                 /* Orange: to activate when decided to change the hrtf binary file format */
#define FIX_WARNING_RENDER_CONFIG                       /* Orange: fix warning on windows build */
#define FIX_1052_EXT_OUTPUT                             /* VA: issue 1052: define EXT decoder output configuration for stereo and MC formats */
+45 −28
Original line number Diff line number Diff line
@@ -1359,7 +1359,6 @@ ivas_error ivas_init_decoder_fx(
        }
    }


    /*--------------------------------------------------------------------*
     * Allocate and initialize HRTF Statistics handle
     *--------------------------------------------------------------------*/
@@ -1532,7 +1531,6 @@ ivas_error ivas_init_decoder_fx(
            }
        }


        test();
        test();
#ifdef NONBE_FIX_1052_SBA_EXT_FIX
@@ -1727,7 +1725,6 @@ ivas_error ivas_init_decoder_fx(
            }
        }


        test();
        test();
        IF( NE_32( hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_FOA ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_STEREO ) && NE_32( st_ivas->hDecoderConfig->output_config, IVAS_AUDIO_CONFIG_MONO ) )
@@ -1865,6 +1862,7 @@ ivas_error ivas_init_decoder_fx(
        {
            k = add( k, 1 );
        }

        test();
        IF( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) )
        {
@@ -2198,7 +2196,6 @@ ivas_error ivas_init_decoder_fx(
        }
    }


    /*-----------------------------------------------------------------*
     * Allocate and initialize HP20 filter memories
     *-----------------------------------------------------------------*/
@@ -2350,10 +2347,8 @@ ivas_error ivas_init_decoder_fx(
        IF( ( EQ_32( st_ivas->ivas_format, MC_FORMAT ) ) && ( EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) )
        {
            granularity = NS2SA_FX2( output_Fs, CLDFB_SLOT_NS );

            n_channels_transport_jbm = ivas_jbm_dec_get_num_tc_channels_fx( st_ivas );


            IF( NE_32( ( error = ivas_jbm_dec_tc_buffer_open_fx( st_ivas, TC_BUFFER_MODE_RENDERER, n_channels_transport_jbm, MC_PARAMUPMIX_MAX_INPUT_CHANS, MC_PARAMUPMIX_MAX_INPUT_CHANS, granularity ) ), IVAS_ERR_OK ) )
            {
                return error;
@@ -2380,10 +2375,12 @@ ivas_error ivas_init_decoder_fx(
            /* Allocate TD renderer for the objects in DISC mode */
            Word16 SrcInd[MAX_NUM_TDREND_CHANNELS];
            Word16 num_src;

            IF( NE_32( ( error = ivas_td_binaural_open_fx( st_ivas, SrcInd, &num_src ) ), IVAS_ERR_OK ) )
            {
                return error;
            }

            Word16 nchan_rend = num_src;
            move16();
            test();
@@ -2403,6 +2400,7 @@ ivas_error ivas_init_decoder_fx(
                SrcSpatial_p->q_Pos_p = Q31;
                move16();
            }

            IF( EQ_32( st_ivas->hOutSetup.output_config, IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) )
            {
                IF( NE_32( ( error = ivas_reverb_open_fx( &st_ivas->hReverb, st_ivas->hHrtfStatistics, st_ivas->hRenderConfig, st_ivas->hDecoderConfig->output_Fs ) ), IVAS_ERR_OK ) )
@@ -2411,16 +2409,50 @@ ivas_error ivas_init_decoder_fx(
                }
            }

#ifdef FIX_1161_REDUCE_OMASA_HEAP
            /* Allocate memory for delay buffer within 'hMasaIsmData' */
            IF( NE_32( ( error = ivas_omasa_objects_delay_open_fx( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
#else
            /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */
            IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
#endif
        }

        test();
        test();
        test();
        IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) && ( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) )
        {
            /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */
#ifdef FIX_1161_REDUCE_OMASA_HEAP
            IF( NE_32( ( error = ivas_omasa_objects_delay_open_fx( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
#endif

            IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }

#ifdef NONBE_FIX_984_OMASA_EXT_OUTPUT
        IF( EQ_32( st_ivas->renderer_type, RENDERER_OMASA_OBJECT_EXT ) )
        {
            /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */
#ifdef FIX_1161_REDUCE_OMASA_HEAP
            IF( NE_32( ( error = ivas_omasa_objects_delay_open_fx( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
#else
            error = ivas_omasa_render_objects_from_mix_open_fx( st_ivas );
            move32();

@@ -2428,12 +2460,9 @@ ivas_error ivas_init_decoder_fx(
            {
                return error;
            }
#endif

            error = ivas_spat_hSpatParamRendCom_config_fx( &st_ivas->hSpatParamRendCom, DIRAC_OPEN, 0,
                                                           st_ivas->ivas_format, st_ivas->mc_mode, output_Fs, 0, 0 );
            move32();

            IF( NE_32( error, IVAS_ERR_OK ) )
            IF( ( ( error = ivas_spat_hSpatParamRendCom_config_fx( &st_ivas->hSpatParamRendCom, DIRAC_OPEN, 0, st_ivas->ivas_format, st_ivas->mc_mode, output_Fs, 0, 0 ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
@@ -2442,25 +2471,12 @@ ivas_error ivas_init_decoder_fx(
        IF( EQ_32( st_ivas->renderer_type, RENDERER_OMASA_MIX_EXT ) )
        {
            /* Allocate 'hIsmRendererData' handle */
            error = ivas_omasa_combine_separate_ism_with_masa_open_fx( st_ivas );
            move32();
            IF( NE_32( error, IVAS_ERR_OK ) )
            IF( ( ( error = ivas_omasa_combine_separate_ism_with_masa_open_fx( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
#endif
        test();
        test();
        test();
        IF( EQ_32( st_ivas->renderer_type, RENDERER_DIRAC ) && ( EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_MASA_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_PARAM_ONE_OBJ ) || EQ_32( st_ivas->ism_mode, ISM_MASA_MODE_DISC ) ) )
        {
            /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */
            IF( NE_32( ( error = ivas_omasa_separate_object_renderer_open( st_ivas ) ), IVAS_ERR_OK ) )
            {
                return error;
            }
        }
    }

    test();
@@ -2536,7 +2552,6 @@ ivas_error ivas_init_decoder_fx(
        }
    }


#ifndef NONBE_FIX_MC_LFE_LPF
    /*-----------------------------------------------------------------*
     * LFE handles for rendering after rendering to adjust LFE delay to binaural filter delay
@@ -2573,7 +2588,6 @@ ivas_error ivas_init_decoder_fx(
        set32_fx( st_ivas->hLFE->prior_out_buffer_fx, 0, L_FRAME48k );
    }
#endif

    /*-----------------------------------------------------------------*
     * CLDFB handles for rendering
     *-----------------------------------------------------------------*/
@@ -2634,6 +2648,7 @@ ivas_error ivas_init_decoder_fx(
    /*-----------------------------------------------------------------*
     * LFE handles for rendering after rendering to adjust LFE delay to filter delay
     *-----------------------------------------------------------------*/

    test();
    IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) || EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) )
    {
@@ -2738,6 +2753,7 @@ ivas_error ivas_init_decoder_fx(
    /*-----------------------------------------------------------------*
     * Allocate floating-point output audio buffers
     *-----------------------------------------------------------------*/

    st_ivas->p_out_len = ivas_get_nchan_buffers_dec_fx( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate );
    move16();
    FOR( n = 0; n < ivas_get_nchan_buffers_dec_fx( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ )
@@ -2754,9 +2770,11 @@ ivas_error ivas_init_decoder_fx(
    {
        st_ivas->p_output_fx[n] = NULL;
    }

    return error;
}


/*-------------------------------------------------------------------------
 * destroy_core_dec()
 *
@@ -3686,6 +3704,5 @@ static ivas_error doSanityChecks_IVAS(
        }
    }
#endif

    return IVAS_ERR_OK;
}
+4 −1
Original line number Diff line number Diff line
@@ -110,6 +110,7 @@ ivas_error ivas_ism_renderer_open_fx(
        interpolator_length = init_interpolator_length;
        move16();
    }

    IF( ( st_ivas->hIsmRendererData->interpolator_fx = (Word16 *) malloc( sizeof( Word16 ) * init_interpolator_length ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ISM renderer interpolator\n" ) );
@@ -411,7 +412,7 @@ void ivas_ism_get_stereo_gains_fx(
}

/*-------------------------------------------------------------------------*
 * ivas_masa_oism_separate_object_renderer_open()
 * ivas_omasa_separate_object_renderer_open()
 *
 * Open structures, reserve memory, and init values.
 *-------------------------------------------------------------------------*/
@@ -452,6 +453,7 @@ ivas_error ivas_omasa_separate_object_renderer_open(
    st_ivas->hIsmRendererData->interpolator_len = interpolator_length;
    move16();

#ifndef FIX_1161_REDUCE_OMASA_HEAP
    st_ivas->hMasaIsmData->delayBuffer_size = extract_l( ( st_ivas->hDecoderConfig->output_Fs / 50 ) / MAX_PARAM_SPATIAL_SUBFRAMES );
    move16();

@@ -480,6 +482,7 @@ ivas_error ivas_omasa_separate_object_renderer_open(
        }
        set32_fx( st_ivas->hMasaIsmData->delayBuffer_fx[i], 0, st_ivas->hMasaIsmData->delayBuffer_size );
    }
#endif

    return IVAS_ERR_OK;
}
Loading