Commit e595a4ee authored by Adam Mills's avatar Adam Mills
Browse files

Merge branch '732-osba-crashes-for-planar-sba' into 'main'

fix for issue 732, planar sba in OSBA mode

See merge request !1000
parents a042eaaa 256fe0e1
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5652,6 +5652,10 @@ void ivas_osba_enc(
    const ISM_MODE ism_mode,                                    /* i  : ISM mode                                  */
    const int16_t sba_analysis_order,                           /* i  : SBA order evaluated in DirAC/SPAR encoder */
    const int32_t input_Fs                                      /* i  : input sampling rate                       */
#ifdef FIX_732_PLANAR_SBA_OSBA
    ,
    const int16_t sba_planar /* i : planar SBA flag*/
#endif
);

ivas_error ivas_masa_ism_data_open(
+2 −0
Original line number Diff line number Diff line
@@ -158,6 +158,8 @@
#define OSBA_SPLIT_RENDERING
#endif

#define FIX_732_PLANAR_SBA_OSBA                         /* Dlb : issue 732: fix for crash in planar mode in OSBA format*/

#define FIX_708_DPID_COMMAND_LINE                       /* issue 708: sanity checks for '-dpid' command-line */
#define FIX_730_DPID_NOT_SET_CORRECTLY                  /* Eri: issue 730: write dpid read from file in correct index, print informative error message when DPID specified is not found. */

+17 −1
Original line number Diff line number Diff line
@@ -386,15 +386,28 @@ ivas_error ivas_enc(
    }
    else if ( ivas_format == SBA_ISM_FORMAT )
    {
#ifdef FIX_732_PLANAR_SBA_OSBA
        int16_t planar_sba_orig;
        planar_sba_orig = hEncoderConfig->sba_planar;
#endif
#ifndef NONBE_CR_FIX_735_SBA_HP20_BRATE_SWITCHING
        ivas_osba_enc_reconfig( st_ivas );
#endif
        /* Analyze objects and determine needed audio signals */
        ivas_osba_enc( st_ivas->hOSba, st_ivas->hIsmMetaData, data_f, input_frame, hEncoderConfig->nchan_ism, st_ivas->ism_mode, st_ivas->sba_analysis_order,
                       hEncoderConfig->input_Fs );
                       hEncoderConfig->input_Fs
#ifdef FIX_732_PLANAR_SBA_OSBA
                       ,
                       hEncoderConfig->sba_planar
#endif
        );

        if ( st_ivas->ism_mode == ISM_MODE_NONE )
        {
#ifdef FIX_732_PLANAR_SBA_OSBA
            /*once SBA and ISM are combined into SBA signal then disable planar flag*/
            hEncoderConfig->sba_planar = 0;
#endif
            if ( st_ivas->nchan_transport == 1 )
            {
                st = st_ivas->hSCE[st_ivas->nSCE - 1]->hCoreCoder[0];
@@ -451,6 +464,9 @@ ivas_error ivas_enc(
                    return error;
                }
            }
#ifdef FIX_732_PLANAR_SBA_OSBA
            hEncoderConfig->sba_planar = planar_sba_orig;
#endif
        }
        else
        {
+11 −0
Original line number Diff line number Diff line
@@ -390,6 +390,10 @@ void ivas_osba_enc(
    const ISM_MODE ism_mode,          /* i  : ISM mode                                    */
    const int16_t sba_analysis_order, /* i  : SBA order evaluated in DirAC/SPAR encoder */
    const int32_t input_Fs            /* i  : input sampling rate*/
#ifdef FIX_732_PLANAR_SBA_OSBA
    ,
    const int16_t sba_planar /* i : planar SBA flag*/
#endif
)
{
    float data_out_f[MAX_INPUT_CHANNELS][L_FRAME48k];
@@ -407,6 +411,13 @@ void ivas_osba_enc(
        /* Convert ISM to SBA */
        ivas_osba_render_ism_to_sba( data_in_f, data_out_f, input_frame, sba_analysis_order, nchan_ism, hIsmMeta, hOSba->prev_object_dm_gains, hOSba->interpolator );

#ifdef FIX_732_PLANAR_SBA_OSBA
        if ( sba_planar )
        {
            ivas_sba_zero_vert_comp( &( data_in_f[nchan_ism] ), sba_analysis_order, sba_planar, input_frame );
        }
#endif

        /* Merge SBA signals */
        ivas_merge_sba_transports( data_out_f, &( data_in_f[nchan_ism] ), data_in_f, input_frame, sba_analysis_order );
    }
+5 −0
Original line number Diff line number Diff line
@@ -574,7 +574,12 @@ ivas_error IVAS_ENC_ConfigureForSBAObjects(
    st_ivas->hEncoderConfig->sba_order = order;

    /* Input in ACN/SN3D in all cases (3D and planar): get number of channels */
#ifdef FIX_732_PLANAR_SBA_OSBA
    /*Input file will always contain all channels for a given order irrespective of planar flag*/
    st_ivas->hEncoderConfig->nchan_inp = ivas_sba_get_nchan( st_ivas->hEncoderConfig->sba_order, 0 ) + numObjects;
#else
    st_ivas->hEncoderConfig->nchan_inp = ivas_sba_get_nchan( st_ivas->hEncoderConfig->sba_order, isPlanar ) + numObjects;
#endif

    st_ivas->hEncoderConfig->Opt_PCA_ON = (int16_t) Opt_PCA_ON;