Commit 49fbd624 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch '3gpp_issue_950_fix' into 'main'

Fix for 3GPP issue 950: High MLD for ParamMC 5.1 at 48/64/80kbps or 7.1+4 at 128kbps [allow regression]

See merge request !1774
parents 84345b51 a1a5235b
Loading
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -4032,6 +4032,13 @@ void ivas_jbm_dec_copy_tc_no_tsm_fx(
                                             &cldfb_real_buffer_fx[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands],
                                             &cldfb_imag_buffer_fx[slot_idx * num_freq_bands * n_ch_cldfb + cldfb_ch * num_freq_bands],
                                             num_freq_bands, st_ivas->cldfbAnaDec[cldfb_ch], &Q_tc );
                IF( EQ_16( (Word16) st_ivas->ivas_format, (Word16) MC_FORMAT ) )
                {
                    st_ivas->hParamMC->Cldfb_RealBuffer_tc_e = sub( 31, Q_tc );
                    st_ivas->hParamMC->Cldfb_ImagBuffer_tc_e = sub( 31, Q_tc );
                    move16();
                    move16();
                }
            }
        }
    }
+8 −5
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ static ivas_error param_mc_get_diff_proto_info_fx( const Word32 *proto_mtx, cons
static void param_mc_update_mixing_matrices_fx( PARAM_MC_DEC_HANDLE hParamMC, Word32 *mixing_matrix[], Word16 *mixing_matrix_fx, Word32 *mixing_matrix_res[], Word16 *mixing_matrix_res_exp, const UWord16 nX, const UWord16 nY );


static void param_mc_protoSignalComputation_fx( Word32 *RealBuffer_fx, Word32 *ImagBuffer_fx, Word32 *proto_frame_f_fx, const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, const Word16 num_freq_bands /*, Word16 RealBuffer_fx_e, Word16 ImagBuffer_fx_e, Word16 *common_e*/ );
static void param_mc_protoSignalComputation_fx( Word32 *RealBuffer_fx, Word32 *ImagBuffer_fx, Word32 *proto_frame_f_fx, const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, const Word16 num_freq_bands, Word16 Cldfb_Real_Imag_exp, Word16 *proto_frame_f_fx_q /* Word16 ImagBuffer_fx_e, Word16 *common_e*/ );

/*-------------------------------------------------------------------------
 * ivas_param_mc_dec_open()
@@ -1983,7 +1983,7 @@ void ivas_param_mc_dec_render_fx(
                param_mc_protoSignalComputation_fx( &hParamMC->Cldfb_RealBuffer_tc_fx[hParamMC->slots_rendered * nchan_transport * hParamMC->num_freq_bands],
                                                    &hParamMC->Cldfb_ImagBuffer_tc_fx[hParamMC->slots_rendered * nchan_transport * hParamMC->num_freq_bands],
                                                    hParamMC->proto_frame_f_fx, hParamMC->diff_proto_info,
                                                    hParamMC->num_freq_bands );
                                                    hParamMC->num_freq_bands, hParamMC->Cldfb_RealBuffer_tc_e, &hParamMC->proto_frame_f_fx_q );
                /*-----------------------------------------------------------------*
                 * frequency domain decorrelation
                 *-----------------------------------------------------------------*/
@@ -1995,7 +1995,7 @@ void ivas_param_mc_dec_render_fx(
                                                  DIRAC_SYNTHESIS_COV_MC_LS,
                                                  nchan_transport,
                                                  hParamMC->proto_frame_f_fx,
                                                  Q5,
                                                  hParamMC->proto_frame_f_fx_q,
                                                  hParamMC->diff_proto_info->num_protos_diff,
                                                  hParamMC->diff_proto_info->proto_index_diff,
                                                  hParamMC->proto_frame_dec_f_fx, // output
@@ -2321,8 +2321,9 @@ static void param_mc_protoSignalComputation_fx(
    Word32 *ImagBuffer_fx,                           /* i  : CLDFB samples of the transport channels (imaginary part) */
    Word32 *proto_frame_f_fx,                        /* o  : interleaved complex prototype CLDFB samples              */
    const PARAM_MC_DIFF_PROTO_INFO *diff_proto_info, /* i  : prototype generation information                         */
    const Word16 num_freq_bands                      /* i  : number of frequency bands for the prototypes             */
)
    const Word16 num_freq_bands,                     /* i  : number of frequency bands for the prototypes             */
    const Word16 Cldfb_Real_Imag_exp,                /*i: Exponent of real and imag buffers */
    Word16 *proto_frame_f_fx_q )
{
    Word16 band;
    Word16 proto_ch_idx, source_ch_cnt;
@@ -2367,6 +2368,8 @@ static void param_mc_protoSignalComputation_fx(
                move32();
                p_proto_frame_fx++;
            }
            *proto_frame_f_fx_q = sub( 30, Cldfb_Real_Imag_exp );
            move16();
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -573,7 +573,7 @@ typedef struct ivas_param_mc_dec_data_structure
    Word32 *proto_matrix_int_fx;
    Word16 proto_matrix_int_len;
    Word16 proto_matrix_int_e;

    Word16 proto_frame_f_fx_q;
    /*sub-modules*/
    HANDLE_DIRAC_DECORR_PARAMS h_freq_domain_decorr_ap_params;
    HANDLE_DIRAC_DECORR_STATE h_freq_domain_decorr_ap_state;
+6 −0
Original line number Diff line number Diff line
@@ -482,6 +482,7 @@ void ivas_dirac_dec_decorr_process_fx(
        q_shift = 0;
        move16();
    }
    set32_fx( aux_buffer_fx, 0, 2 * MAX_OUTPUT_CHANNELS * CLDFB_NO_CHANNELS_MAX );
    FOR( ch_idx = 0; ch_idx < num_protos_dir; ch_idx++ )
    {
        v_shr( &input_frame_fx[imult1616( 2, imult1616( ch_idx, num_freq_bands ) )], negate( q_shift ), &aux_buffer_fx[imult1616( 2, imult1616( ch_idx, num_freq_bands ) )], imult1616( 2, num_freq_bands ) ); // Q - q_shift
@@ -496,6 +497,11 @@ void ivas_dirac_dec_decorr_process_fx(
    {
        v_add_inc_fx( &aux_buffer_fx[imult1616( 2, imult1616( ch_idx, max_band_decorr_temp ) )], 2, &aux_buffer_fx[add( imult1616( 2, imult1616( ch_idx, max_band_decorr_temp ) ), 1 )], 2, &aux_buffer_fx[imult1616( ch_idx, max_band_decorr_temp )], 1, max_band_decorr_temp ); // q_aux_buffer
    }
    if ( is_zero_arr( aux_buffer_fx, 2 * MAX_OUTPUT_CHANNELS * CLDFB_NO_CHANNELS_MAX ) )
    {
        q_aux_buffer = 31;
        move16();
    }
    /* compute onset filter */
    max_band_decorr = h_freq_domain_decorr_ap_params->max_band_decorr;
    move16();