Commit 57edb8d5 authored by vaclav's avatar vaclav
Browse files

fix to 4 ISMs 24 kbps case: when all objects are HIGH_IMP, keep 24 kbps...

fix to 4 ISMs 24 kbps case: when all objects are HIGH_IMP, keep 24 kbps bitrate, otherwise increase the 24 kbps bitrate; under FIX_4OBJ_128
parent e4789fa6
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -60,12 +60,19 @@
#define GAMMA_ISM_LOW_IMP3    0.85f
#define GAMMA_ISM_MEDIUM_IMP3 1.15f
#define GAMMA_ISM_HIGH_IMP3   1.3f

#ifdef TUNING_DISC_3_4obj
#ifdef FIX_4OBJ_128
#define GAMMA_ISM_LOW_IMP4    0.8f
#define GAMMA_ISM_MEDIUM_IMP4 1.0f
#define GAMMA_ISM_HIGH_IMP4   1.2f
#else
#define GAMMA_ISM_LOW_IMP4    0.6f
#define GAMMA_ISM_MEDIUM_IMP4 0.8f
#define GAMMA_ISM_HIGH_IMP4   1.0f
#endif
#endif
#endif

/*---------------------------------------------------------------
 * ivas_omasa_ism_mode_select()
@@ -175,6 +182,10 @@ int32_t ivas_interformat_brate(
    const int16_t nchan_ism,     /* i  : number of ISM channels */
    const int32_t element_brate, /* i  : element bitrate        */
    const int16_t ism_imp        /* i  : ISM importance flag    */
#ifdef FIX_4OBJ_128
    ,
    const int16_t limit_flag /* i  : flag to limit the bitrate increase */
#endif
)
{
    int32_t element_brate_out;
@@ -182,7 +193,6 @@ int32_t ivas_interformat_brate(

    nBits = (int16_t) ( element_brate / FRAMES_PER_SEC );


    if ( ism_imp == ISM_INACTIVE_IMP )
    {
        nBits = BITS_ISM_INACTIVE;
@@ -192,6 +202,14 @@ int32_t ivas_interformat_brate(
#ifdef TUNING_DISC_3_4obj
        if ( ism_mode == ISM_MASA_MODE_DISC && ( ( nchan_ism == 4 && element_brate == 24000 ) || ( nchan_ism == 3 && element_brate == 20000 ) ) ) /* this condition corresponds to the ivas_total_brate = 96000 and 3 objects */
        {

#ifdef FIX_4OBJ_128
            if ( limit_flag && ( nchan_ism == 4 && element_brate == 24000 ) )
            {
                return element_brate;
            }
#endif

            if ( ism_imp == ISM_LOW_IMP )
            {
                nBits = (int16_t) ( nBits * GAMMA_ISM_LOW_IMP4 );
+3 −0
Original line number Diff line number Diff line
@@ -5079,6 +5079,9 @@ int32_t ivas_interformat_brate(
    const int16_t nchan_ism,                                    /* i  : number of ISM channels                  */
    const int32_t element_brate,                                /* i  : element bitrate                         */
    const int16_t ism_imp                                       /* i  : ISM importance flag                     */
#ifdef FIX_4OBJ_128
  , const int16_t limit_flag                                    /* i  : flag to limit the bitrate increase      */
#endif
);

void ivas_combined_format_brate_sanity(
+3 −0
Original line number Diff line number Diff line
@@ -179,6 +179,9 @@
#define REDUCE_OMASA_META_BITS                          /* Nokia: reduce metadata number of bits and fix directional metadata bit allocation */
#define OMASA_DIFFUSE_ISM_MERGE                         /* Nokia: Diffuse-energy retaining merging of ISM and MASA */

#define FIX_4OBJ_128    /* VA: fix to 4 ISMs 24 kbps case: when all objects are HIGH_IMP, keep 24 kbps bitrate, otherwise increase the 24 kbps bitrate */


#endif  /* MASA_AND_OBJECTS */


+22 −2
Original line number Diff line number Diff line
@@ -59,7 +59,12 @@ void ivas_set_surplus_brate_dec(

    if ( st_ivas->ism_mode == ISM_MASA_MODE_ONE_OBJ )
    {
        *ism_total_brate = ivas_interformat_brate( ISM_MASA_MODE_ONE_OBJ, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp );
        *ism_total_brate = ivas_interformat_brate( ISM_MASA_MODE_ONE_OBJ, 1, st_ivas->hSCE[0]->element_brate, st_ivas->hIsmMetaData[0]->ism_imp
#ifdef FIX_4OBJ_128
                                                   ,
                                                   0
#endif
        );

        st_ivas->hCPE[0]->brate_surplus = st_ivas->hSCE[0]->element_brate - *ism_total_brate;

@@ -74,6 +79,16 @@ void ivas_set_surplus_brate_dec(
    }
    else if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC )
    {
#ifdef FIX_4OBJ_128
        int16_t brate_limit_flag = 0;

        for ( n = 0; n < st_ivas->nchan_ism; n++ )
        {
            brate_limit_flag += st_ivas->hIsmMetaData[n]->ism_imp;
        }
        brate_limit_flag = brate_limit_flag >= 10 ? 1 : 0;
#endif

        ism_total_brate_ref = 0;
        for ( n = 0; n < st_ivas->nchan_ism; n++ )
        {
@@ -90,7 +105,12 @@ void ivas_set_surplus_brate_dec(
        {
            st_ivas->hSCE[n]->element_brate = element_brate[n];

            *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, st_ivas->nchan_ism, st_ivas->hSCE[n]->element_brate, st_ivas->hIsmMetaData[n]->ism_imp );
            *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, st_ivas->nchan_ism, st_ivas->hSCE[n]->element_brate, st_ivas->hIsmMetaData[n]->ism_imp
#ifdef FIX_4OBJ_128
                                                        ,
                                                        brate_limit_flag
#endif
            );
        }
        st_ivas->hCPE[0]->brate_surplus = ism_total_brate_ref - *ism_total_brate;

+15 −1
Original line number Diff line number Diff line
@@ -824,6 +824,15 @@ ivas_error ivas_ism_metadata_enc(
    if ( ism_mode == ISM_MASA_MODE_DISC )
    {
        int16_t bits_ism, bits_element[MAX_NUM_OBJECTS];
#ifdef FIX_4OBJ_128
        int16_t brate_limit_flag = 0;

        for ( ch = 0; ch < num_obj; ch++ )
        {
            brate_limit_flag += ism_imp[ch];
        }
        brate_limit_flag = brate_limit_flag >= 10 ? 1 : 0;
#endif

        bits_ism = (int16_t) ( *ism_total_brate / FRAMES_PER_SECOND );
        set_s( bits_element, bits_ism / num_obj, num_obj );
@@ -833,7 +842,12 @@ ivas_error ivas_ism_metadata_enc(
        *ism_total_brate = 0;
        for ( ch = 0; ch < num_obj; ch++ )
        {
            *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, num_obj, hSCE[ch]->element_brate, ism_imp[ch] );
            *ism_total_brate += ivas_interformat_brate( ISM_MASA_MODE_DISC, num_obj, hSCE[ch]->element_brate, ism_imp[ch]
#ifdef FIX_4OBJ_128
                                                        ,
                                                        brate_limit_flag
#endif
            );
        }
        ism_metadata_flag_global = 1;
    }
Loading