Commit c802b313 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Port float MR 1542 to float reference

parent 2e2b8692
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -196,6 +196,8 @@
#define NONBE_FIX_SBA_SIGNALING_BITS_B                  /* FhG: issue 1061: option B: signal sba order additionally in OSBA */

#define NONBE_FIX_984_OMASA_EXT_OUTPUT                  /* Nok: issue 1497 - porting OMASA EXT MR   */
#define NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR            /* Nok: issue 1074 fixing number of objects signaling in OMASA low rate */

/* #################### End BASOP porting switches ############################ */

/* clang-format on */
+18 −0
Original line number Diff line number Diff line
@@ -349,12 +349,30 @@ ivas_error ivas_dec_setup(

            if ( st_ivas->nchan_ism > 0 )
            {
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
                /* the input_ivas_format should be MASA_ISM_FORMAT, but we cannot initialize it now */
                /* info about the number of objects:
                          '00' - MASA format at the encoder
                          '01' - MASA_ISM_FORMAT at the encoder, with 4 objects
                          '10' - MASA_ISM_FORMAT at the encoder, with 3 objects
                          '11' - MASA_ISM_FORMAT at the encoder, with 1 or 2 objects
                          reading if 1 or 2 objects is performed later
                */
                st_ivas->nchan_ism = 5 - st_ivas->nchan_ism;
                if ( st_ivas->nchan_transport == 1 && st_ivas->nchan_ism == 2 )
                {
                    st_ivas->nchan_ism = 1;
                }
                /* for MASA_ISM_FORMAT at input the number of MASA transport channels is always 2 and the corresponding bit is not used here*/
#else
                /* the input_ivas_format should be MASA_ISM_FORMAT, but we cannot initialize it now */
                if ( st_ivas->nchan_transport == 2 && st_ivas->nchan_ism == 3 )
                {
                    st_ivas->nchan_ism = 4;
                }

                /* for MASA_ISM_FORMAT at input the number of MASA transport channels is always 2 */
#endif
                st_ivas->nchan_transport = 2;
                element_mode_flag = 1;
            }
+130 −79
Original line number Diff line number Diff line
@@ -151,6 +151,52 @@ ivas_error ivas_masa_decode(
    {
        if ( !( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) )
        {
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
            if ( ivas_format == MASA_FORMAT )
            {
                /* re-read the number of objects, needed in case of bad frame  */
                st_ivas->nchan_ism = 5 - ( st_ivas->bit_stream[( ivas_total_brate / FRAMES_PER_SEC ) - 3] + 2 * st_ivas->bit_stream[( ivas_total_brate / FRAMES_PER_SEC ) - 2] );
            }
            if ( ivas_format == MASA_FORMAT && st_ivas->nchan_ism != 5 )
            {
                /* there was OMASA in the input */
                hMasa->config.input_ivas_format = MASA_ISM_FORMAT;
                if ( st_ivas->nchan_ism < 3 )
                {
                    /* was read in ivas_init_dec() to distinguish between 1 and 2 objects */
                    if ( st_ivas->bit_stream[( ivas_total_brate / FRAMES_PER_SEC ) - 1] == 0 )
                    {
                        st_ivas->nchan_ism = 1;
                    }
                    st->next_bit_pos -= MASA_TRANSP_BITS;
                    *nb_bits_read += MASA_TRANSP_BITS;

                    /* the two reserved bits were already read in ivas_init_dec()*/
                    byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                    byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                    *nb_bits_read += MASA_HEADER_BITS;
                    /* read number of directions */
                    byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                    ( *nb_bits_read )++;
                    hMasa->config.numberOfDirections = (uint8_t) ( byteBuffer + 1 );
                }
                else
                {
                    /* if there are 3 or 4 objects the number of transport channels bit is given to MASA format
                    and used to read number of directions*/
                    byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                    ( *nb_bits_read )++;
                    hMasa->config.numberOfDirections = (uint8_t) ( byteBuffer + 1 );

                    /* the two reserved bits were already read in ivas_init_dec()*/
                    byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                    byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                    *nb_bits_read += MASA_HEADER_BITS;
                }
            }
            else
            {
#endif
                if ( ivas_format != MASA_ISM_FORMAT )
                {
                    /* number of transport channels is always 2 for MASA_ISM format */
@@ -251,6 +297,7 @@ ivas_error ivas_masa_decode(

#ifdef NONBE_FIX_984_OMASA_EXT_OUTPUT

#ifndef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
                /* read 2 bits:
                              '00' - MASA format at the encoder
                              '01' - MASA_ISM_FORMAT at the encoder, with 1 object
@@ -258,6 +305,7 @@ ivas_error ivas_masa_decode(
                              '11' - MASA_ISM_FORMAT at the encoder, with 3 or 4 objects
                              reading if 3 or 4 object is performed later
                 */
#endif
                byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                byteBuffer = byteBuffer + 2 * st->bit_stream[( st->next_bit_pos )--];

@@ -289,6 +337,9 @@ ivas_error ivas_masa_decode(
                byteBuffer = st->bit_stream[( st->next_bit_pos )--];
                ( *nb_bits_read )++;
                hMasa->config.numberOfDirections = (uint8_t) ( byteBuffer + 1 );
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
            }
#endif
        }
        else
        {
+35 −4
Original line number Diff line number Diff line
@@ -421,6 +421,18 @@ ivas_error ivas_masa_encode(
#ifdef NONBE_FIX_984_OMASA_EXT_OUTPUT
            if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MODE_NONE )
            {
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
                /* use the MASA number of transport channels bit to signal if there are 1 or 2 objects */
                if ( nchan_ism == 1 || nchan_ism == 2 )
                {
                    push_next_indice( hMetaData, nchan_ism - 1, MASA_TRANSP_BITS );
                }
                else
                {
                    /* for 3 or 4 objects write already the number of MASA directions */
                    push_next_indice( hMetaData, hQMetaData->no_directions - 1, MASA_TRANSP_BITS );
                }
#else
                /* use the MASA number of transport channels bit to signal if there are 3 or 4 objects */
                if ( nchan_ism == 4 )
                {
@@ -430,6 +442,7 @@ ivas_error ivas_masa_encode(
                {
                    push_next_indice( hMetaData, 0, MASA_TRANSP_BITS );
                }
#endif
            }
            else
            {
@@ -445,6 +458,16 @@ ivas_error ivas_masa_encode(
        if ( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MODE_NONE )
        {
#ifdef NONBE_FIX_984_OMASA_EXT_OUTPUT
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
            if ( nchan_ism >= 3 ) /* if 3 or 4 objects */
            {
                push_next_indice( hMetaData, 5 - nchan_ism, MASA_HEADER_BITS );
            }
            else
            {
                push_next_indice( hMetaData, 3, MASA_HEADER_BITS );
            }
#else
            if ( nchan_ism <= 3 )
            {
                push_next_indice( hMetaData, nchan_ism, MASA_HEADER_BITS );
@@ -453,6 +476,7 @@ ivas_error ivas_masa_encode(
            {
                push_next_indice( hMetaData, nchan_ism - 1, MASA_HEADER_BITS );
            }
#endif
            hQMetaData->metadata_max_bits -= MASA_HEADER_BITS;
#else
            /* signal MASA_ISM_FORMAT to decoder */
@@ -469,9 +493,16 @@ ivas_error ivas_masa_encode(
            push_next_indice( hMetaData, 0, MASA_HEADER_BITS );
            hQMetaData->metadata_max_bits -= MASA_HEADER_BITS;
        }
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
        if ( !( ivas_format == MASA_ISM_FORMAT && ism_mode == ISM_MODE_NONE && nchan_ism > 2 ) )
        {
#endif
            /* write number of directions */
            push_next_indice( hMetaData, hQMetaData->no_directions - 1, 1 );
            hQMetaData->metadata_max_bits -= 1;
#ifdef NONBE_FIX_1074_NOBJ_SIGNAL_OMASA_LBR
        }
#endif

        /* write subframe mode */
        push_next_indice( hMetaData, hQMetaData->q_direction[0].cfg.nblocks == 1 ? 1 : 0, MASA_SUBFRAME_BITS );