Commit 70525a5a authored by vaclav's avatar vaclav
Browse files

simplification within NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA

parent d0f9e9d6
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -328,6 +328,10 @@ typedef enum
#define ISM_Q_STEP                              2.5f
#define ISM_Q_STEP_BORDER                       5.0f

#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
#define ISM_FEC_MAX                             10
#endif

#define ISM_RADIUS_NBITS                        6 
#define ISM_RADIUS_MIN                          0.0f
#define ISM_RADIUS_DELTA                        0.25f /* Max radius = (2^ISM_RADIUS_NBITS-1)*0.25 = 15.75 */
+0 −12
Original line number Diff line number Diff line
@@ -990,10 +990,6 @@ ivas_error ivas_ism_enc(
    const int16_t input_frame,                                  /* i  : input frame length per channel              */
    int16_t *nb_bits_metadata,                                  /* i  : number of metadata bits                     */
    const int16_t flag_omasa_ener_brate                         /* i  : less bitrate for objects in OMASA flag      */
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA 
    ,
    int16_t changed_object                                      /* i : tells if the separated object changed in OMASA */
#endif
);

ivas_error ivas_ism_metadata_enc(
@@ -1012,10 +1008,6 @@ ivas_error ivas_ism_metadata_enc(
    const int16_t flag_omasa_ener_brate,                        /* i  : less bitrate for objects in OMASA flag      */
    int16_t *omasa_stereo_sw_cnt,
    const int16_t ini_frame
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA 
    ,
    int16_t changed_object                                      /* i  : tells if the separated object has changed   */
#endif 
);

ivas_error ivas_ism_metadata_dec(
@@ -5710,10 +5702,6 @@ void ivas_omasa_enc(
    const ISM_MODE ism_mode,                                    /* i  : ISM mode                                */
    float *data_separated_object,                               /* o  : Separated object audio signal           */
    int16_t* idx_separated_object                               /* o  : Index of the separated object           */
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA 
    ,
    int16_t * changed_object                                    /* o  : signals if separated object has changed */
#endif
);

void ivas_set_surplus_brate_enc(
+6 −40
Original line number Diff line number Diff line
@@ -196,12 +196,7 @@ ivas_error ivas_enc(
            ivas_param_ism_stereo_dmx( st_ivas, data_f, input_frame );

            /* Core coding of Stereo DMX */
            if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                         ,
                                         0
#endif
                                         ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK )
            {
                return error;
            }
@@ -209,12 +204,7 @@ ivas_error ivas_enc(
        else if ( st_ivas->ism_mode == ISM_MODE_DISC )
        {
            /* Analysis, decision about bitrates per channel & core coding */
            if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                         ,
                                         0
#endif
                                         ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, nb_bits_metadata, 0 ) ) != IVAS_ERR_OK )
            {
                return error;
            }
@@ -287,10 +277,6 @@ ivas_error ivas_enc(
        float *data_separated_object;
        int16_t idx_separated_object;
        int16_t flag_omasa_ener_brate;
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
        int16_t force_absolute_coding;
        force_absolute_coding = 0;
#endif

        flag_omasa_ener_brate = 0;

@@ -318,12 +304,7 @@ ivas_error ivas_enc(
        if ( st_ivas->ism_mode != ISM_MASA_MODE_DISC )
        {
            /* Estimate MASA parameters for the objects */
            ivas_omasa_enc( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hIsmMetaData, data_f, input_frame, st_ivas->nchan_transport, hEncoderConfig->nchan_ism, st_ivas->ism_mode, data_separated_object, &idx_separated_object
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                            ,
                            &force_absolute_coding
#endif
            );
            ivas_omasa_enc( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hIsmMetaData, data_f, input_frame, st_ivas->nchan_transport, hEncoderConfig->nchan_ism, st_ivas->ism_mode, data_separated_object, &idx_separated_object );
        }

        /* Encode ISMs transport channels */
@@ -337,12 +318,7 @@ ivas_error ivas_enc(
        }
        else if ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ )
        {
            if ( ( error = ivas_ism_enc( st_ivas, &data_separated_object, input_frame, &nb_bits_metadata[1], 0
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                         ,
                                         force_absolute_coding
#endif
                                         ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_ism_enc( st_ivas, &data_separated_object, input_frame, &nb_bits_metadata[1], 0 ) ) != IVAS_ERR_OK )
            {
                return error;
            }
@@ -352,12 +328,7 @@ ivas_error ivas_enc(
            flag_omasa_ener_brate = ivas_omasa_ener_brate( st_ivas->hEncoderConfig->nchan_ism, ivas_total_brate, data_f, input_frame );

            /* Analysis, decision about bitrates per channel & core coding */
            if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, &nb_bits_metadata[1], flag_omasa_ener_brate
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                         ,
                                         0
#endif
                                         ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_ism_enc( st_ivas, data_f, input_frame, &nb_bits_metadata[1], flag_omasa_ener_brate ) ) != IVAS_ERR_OK )
            {
                return error;
            }
@@ -427,12 +398,7 @@ ivas_error ivas_enc(
            n = hEncoderConfig->nchan_ism;
            hMetaData = st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData;

            if ( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, n, st_ivas->hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, NULL, hMetaData, &nb_bits_metadata[1], 0, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hCPE[0]->hCoreCoder[0]->ini_frame
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                                  ,
                                                  0
#endif
                                                  ) ) != IVAS_ERR_OK )
            if ( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, n, st_ivas->hEncoderConfig->nchan_ism, st_ivas->hIsmMetaData, NULL, hMetaData, &nb_bits_metadata[1], 0, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hCPE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK )
            {
                return error;
            }
+2 −16
Original line number Diff line number Diff line
@@ -54,10 +54,6 @@ ivas_error ivas_ism_enc(
    const int16_t input_frame,          /* i  : input frame length per channel  */
    int16_t *nb_bits_metadata,          /* i  : number of metadata bits         */
    const int16_t flag_omasa_ener_brate /* i  : less bitrate for objects in OMASA flag */
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
    ,
    int16_t force_absolute_coding
#endif
)
{
    SCE_ENC_HANDLE hSCE;
@@ -240,12 +236,7 @@ ivas_error ivas_ism_enc(
    else if ( st_ivas->ism_mode == ISM_MODE_PARAM )
    {
        if ( ( error = ivas_ism_metadata_enc( &st_ivas->hEncoderConfig->ivas_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData,
                                              nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                              ,
                                              0
#endif
                                              ) ) != IVAS_ERR_OK )
                                              nb_bits_metadata, vad_flag, st_ivas->ism_mode, st_ivas->hParamIsm, st_ivas->hEncoderConfig->ism_extended_metadata_flag, -1, 0, NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK )
        {
            return error;
        }
@@ -268,12 +259,7 @@ ivas_error ivas_ism_enc(
        ism_total_brate_ref = ism_total_brate;

        if ( ( error = ivas_ism_metadata_enc( &ism_total_brate, nchan_ism, nchan_transport_ism, st_ivas->hIsmMetaData, st_ivas->hSCE, st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData,
                                              nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.hOmasaData->lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt ) : NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                              ,
                                              force_absolute_coding
#endif
                                              ) ) != IVAS_ERR_OK )
                                              nb_bits_metadata, vad_flag, st_ivas->ism_mode, NULL, st_ivas->hEncoderConfig->ism_extended_metadata_flag, st_ivas->hMasa != NULL ? st_ivas->hMasa->data.hOmasaData->lp_noise_CPE : 0, flag_omasa_ener_brate, st_ivas->hMasa != NULL ? &( st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt ) : NULL, st_ivas->hSCE[0]->hCoreCoder[0]->ini_frame ) ) != IVAS_ERR_OK )
        {
            return error;
        }
+10 −41
Original line number Diff line number Diff line
@@ -55,7 +55,9 @@
#define ISM_MAX_ELEVATION_DIFF_IDX ( ISM_ELEVATION_NBITS - 1 /*zero*/ - 1 /*sign*/ )
#define ISM_MAX_RADIUS_DIFF_IDX    ( ISM_RADIUS_NBITS - 1 /*zero*/ - 1 /*sign*/ )

#ifndef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
#define ISM_FEC_MAX 10
#endif
#define ISM_MD_FEC_DIFF          10
#define ISM_MD_INC_DIFF_CNT_MAX  6
#define ISM_MD_FEC_CNT_MAX       25
@@ -67,12 +69,7 @@
 * Local function declarations
 *-----------------------------------------------------------------------*/

static void encode_angle_indices( BSTR_ENC_HANDLE hBstr, ISM_METADATA_ANGLE_HANDLE angle, const int16_t last_ism_metadata_flag, const int16_t ini_frame, const int16_t idx_angle1_abs, const int16_t idx_angle2_abs, int16_t *flag_abs_angle1, int16_t *flag_abs_angle2
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                  ,
                                  int16_t changed_object
#endif
);
static void encode_angle_indices( BSTR_ENC_HANDLE hBstr, ISM_METADATA_ANGLE_HANDLE angle, const int16_t last_ism_metadata_flag, const int16_t ini_frame, const int16_t idx_angle1_abs, const int16_t idx_angle2_abs, int16_t *flag_abs_angle1, int16_t *flag_abs_angle2 );

static void encode_radius( BSTR_ENC_HANDLE hBstr, int16_t *last_radius_idx, int16_t *radius_diff_cnt, const int16_t last_ism_metadata_flag, const int16_t idx_radius_abs, int16_t *flag_abs_radius );

@@ -187,12 +184,7 @@ ivas_error ivas_ism_metadata_enc(
    const float lp_noise_CPE,
    const int16_t flag_omasa_ener_brate, /* i  : less bitrate for objects in OMASA flag */
    int16_t *omasa_stereo_sw_cnt,
    const int16_t ini_frame
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
    ,
    int16_t changed_object /* i : tells if the separated object has changed */
#endif
)
    const int16_t ini_frame )
{
    int16_t i, ch, nb_bits_start = 0;
    int16_t flag_abs_azimuth[MAX_NUM_OBJECTS];
@@ -439,12 +431,8 @@ ivas_error ivas_ism_metadata_enc(
                    }

                    idx_angle1_abs = ism_quant_meta( hIsmMetaData->azimuth, &valQ, ism_azimuth_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_AZIMUTH_NBITS );
                    encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, hSCE[0]->hCoreCoder[0]->ini_frame, idx_angle1_abs, 0, &flag_abs_azimuth[ch], NULL
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                          ,
                                          changed_object
#endif
                    );

                    encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, hSCE[0]->hCoreCoder[0]->ini_frame, idx_angle1_abs, 0, &flag_abs_azimuth[ch], NULL );
                }
                else
                {
@@ -458,12 +446,8 @@ ivas_error ivas_ism_metadata_enc(
                        idx_angle1_abs = hParamIsm->azi_index[ch];
                        idx_angle2_abs = hParamIsm->ele_index[ch];
                    }
                    encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_azimuth[ch], &flag_abs_elevation[ch]
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                          ,
                                          changed_object
#endif
                    );

                    encode_angle_indices( hBstr, &( hIsmMetaData->position_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_azimuth[ch], &flag_abs_elevation[ch] );

                    /*----------------------------------------------------------------*
                     * Quantize and encode radius, yaw, and pitch
@@ -474,12 +458,7 @@ ivas_error ivas_ism_metadata_enc(
                        idx_angle2_abs = ism_quant_meta( hIsmMetaData->pitch, &valQ, ism_elevation_borders, ISM_Q_STEP, ISM_Q_STEP_BORDER, 1 << ISM_ELEVATION_NBITS );
                        idx_radius_abs = usquant( hIsmMetaData->radius, &valQ, ISM_RADIUS_MIN, ISM_RADIUS_DELTA, 1 << ISM_RADIUS_NBITS );

                        encode_angle_indices( hBstr, &( hIsmMetaData->orientation_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_yaw[ch], &flag_abs_pitch[ch]
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
                                              ,
                                              changed_object
#endif
                        );
                        encode_angle_indices( hBstr, &( hIsmMetaData->orientation_angle ), hIsmMetaData->last_ism_metadata_flag, ini_frame, idx_angle1_abs, idx_angle2_abs, &flag_abs_yaw[ch], &flag_abs_pitch[ch] );
                        encode_radius( hBstr, &hIsmMetaData->last_radius_idx, &hIsmMetaData->radius_diff_cnt, hIsmMetaData->last_ism_metadata_flag, idx_radius_abs, &flag_abs_radius[ch] );
                    }
                }
@@ -1009,10 +988,6 @@ static void encode_angle_indices(
    const int16_t idx_angle2_abs,         /* i  : Elevation index               */
    int16_t *flag_abs_angle1,             /* o  : Azimuth/yaw encoding mode     */
    int16_t *flag_abs_angle2              /* o  : Elevation/pitch encoding mode */
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
    ,
    int16_t changed_object /* i  : tells if separated object has changed in OMASA */
#endif
)
{
    int16_t idx_angle1, nbits_diff_angle1, diff;
@@ -1029,9 +1004,6 @@ static void encode_angle_indices(
    *flag_abs_angle1 = 0;                      /* differential coding by default */
    if ( angle->angle1_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */
         || last_ism_metadata_flag == 0        /* If last frame had no metadata coded, do not use differential coding */
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
         || changed_object
#endif
    )
    {
        *flag_abs_angle1 = 1;
@@ -1129,9 +1101,6 @@ static void encode_angle_indices(
        *flag_abs_angle2 = 0;                      /* differential coding by default */
        if ( angle->angle2_diff_cnt == ISM_FEC_MAX /* make differential encoding in ISM_FEC_MAX consecutive frames at maximum (in order to control the decoding in FEC) */
             || last_ism_metadata_flag == 0        /* If last frame had no metadata coded, do not use differential coding */
#ifdef NONBE_FIX_944_FEC_OMASA_1SEP_OBJ_MASA
             || changed_object
#endif
        )
        {
            *flag_abs_angle2 = 1;
Loading