Commit 9b187a62 authored by Dominik Weckbecker's avatar Dominik Weckbecker 💬
Browse files

implement experimental signaling of the ISM mode in OSBA format

parent f1c424c7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1148,6 +1148,9 @@ enum

#define MASA_TRANSP_BITS                        1
#define NO_BITS_MASA_ISM_NO_OBJ                 2
#ifdef NONBE_FIX_ISM_XOVER_BR
#define NO_BITS_SBA_ISM_NO_OBJ                  3
#endif
#define MASA2TOTAL_THR                          0.98f
#define BITS_MASA2TOTTAL_DCT0                   6
#define STEP_M2T                                0.1f
+24 −8
Original line number Diff line number Diff line
@@ -451,11 +451,27 @@ ivas_error ivas_dec_setup(
        }
        else if ( st_ivas->ivas_format == SBA_ISM_FORMAT )
        {

#ifdef NONBE_FIX_ISM_XOVER_BR
            int16_t osba_mode_bit = st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1];
#endif

            /* the number of objects is written at the end of the bitstream, in the SBA metadata */
#ifdef NONBE_FIX_ISM_XOVER_BR
            st_ivas->nchan_ism = 2 * st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 2] + st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 3] + 1;
#else
            st_ivas->nchan_ism = 2 * st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 1] + st_ivas->bit_stream[ivas_total_brate / FRAMES_PER_SEC - 2] + 1;
#endif

#ifdef NONBE_FIX_ISM_XOVER_BR
            if ( osba_mode_bit )
            {
                st_ivas->ism_mode = ISM_SBA_MODE_DISC;
			}
#endif

#ifdef NONBE_FIX_ISM_XOVER_BR
            if ( ivas_total_brate < IVAS_24k4 || ivas_osba_ism_mode_select( ivas_total_brate, st_ivas->nchan_ism ) )
            if ( ivas_total_brate < IVAS_24k4 || osba_mode_bit )
#else
            if ( ivas_total_brate < IVAS_24k4 || ivas_total_brate >= IVAS_256k )
#endif
@@ -471,7 +487,7 @@ ivas_error ivas_dec_setup(

            /* read Ambisonic (SBA) order */
#ifdef NONBE_FIX_ISM_XOVER_BR
            if ( !ivas_osba_ism_mode_select( ivas_total_brate, st_ivas->nchan_ism ) )
            if ( !osba_mode_bit )
#else
            if ( ivas_total_brate < IVAS_256k )
#endif
@@ -513,7 +529,7 @@ ivas_error ivas_dec_setup(
                }
            }
#ifdef NONBE_FIX_ISM_XOVER_BR
            if ( ivas_osba_ism_mode_select( ivas_total_brate, st_ivas->nchan_ism ) )
            if ( osba_mode_bit )
#else
            if ( ivas_total_brate >= IVAS_256k )
#endif
+1 −1
Original line number Diff line number Diff line
@@ -208,7 +208,7 @@ ivas_error ivas_ism_metadata_dec(
        if ( ism_mode == ISM_SBA_MODE_DISC )
        {
            /* number of objects was read in ivas_dec_setup() */
            st0->next_bit_pos += NO_BITS_MASA_ISM_NO_OBJ;
            st0->next_bit_pos += NO_BITS_SBA_ISM_NO_OBJ;
        }
        else if ( ism_mode != ISM_MASA_MODE_DISC && ism_mode != ISM_MASA_MODE_MASA_ONE_OBJ )
        {
+1 −1
Original line number Diff line number Diff line
@@ -428,7 +428,7 @@ ivas_error ivas_jbm_dec_tc(
        }
        else
        {
            nb_bits_metadata[1] += NO_BITS_MASA_ISM_NO_OBJ;
            nb_bits_metadata[1] += NO_BITS_SBA_ISM_NO_OBJ;
            sba_ch_idx = 0;
        }

+4 −0
Original line number Diff line number Diff line
@@ -141,6 +141,9 @@ ivas_error ivas_sba_dec_reconfigure(
    ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old );
    nchan_hp20_old = getNumChanSynthesis( st_ivas );

#ifdef NONBE_FIX_ISM_XOVER_BR
	if ( !(st_ivas->ivas_format == SBA_ISM_FORMAT ) )
#else
    if ( st_ivas->ivas_format == SBA_ISM_FORMAT )
    {
#ifdef NONBE_FIX_ISM_XOVER_BR
@@ -157,6 +160,7 @@ ivas_error ivas_sba_dec_reconfigure(
        }
    }
    else
#endif
    {
        st_ivas->ism_mode = ISM_MODE_NONE;
    }
Loading