Loading lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -5049,7 +5049,11 @@ void ivas_masa_estimate_energy( const int16_t nchan_transport /* i : number of MASA input/transport channels */ ); #ifdef MEM_ALLOC_APP ivas_error ivas_masa_enc_config_memory( #else ivas_error ivas_masa_enc_config( #endif Encoder_Struct* st_ivas /* i/o: IVAS encoder structure */ ); Loading lib_enc/ivas_enc.c +0 −2 Original line number Diff line number Diff line Loading @@ -239,12 +239,10 @@ ivas_error ivas_enc( push_indice( st->hBstr, IND_SMODE, hEncoderConfig->sba_order, SBA_ORDER_BITS ); #endif } #ifndef MEM_ALLOC_APP else { ivas_masa_enc_reconfigure( st_ivas ); } #endif /* SBA/MASA metadata encoding and SBA/MASA metadata bitstream writing */ hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; Loading lib_enc/ivas_init_enc.c +2 −4 Original line number Diff line number Diff line Loading @@ -1265,10 +1265,8 @@ ivas_error ivas_reconfig_enc( } else if ( ivas_format == MASA_FORMAT ) { ivas_masa_enc_reconfigure( st_ivas ); /* reconfigure the SBA format encoder */ error = ivas_masa_enc_config( st_ivas ); /* reconfigure the MASA format encoder */ error = ivas_masa_enc_config_memory( st_ivas ); } else if ( ivas_format == SBA_ISM_FORMAT ) { Loading lib_enc/ivas_masa_enc.c +75 −8 Original line number Diff line number Diff line Loading @@ -659,17 +659,31 @@ void ivas_masa_estimate_energy( } #ifdef MEM_ALLOC_APP /*-----------------------------------------------------------------------* * ivas_masa_enc_config_memory() * * Frame-by-frame configuration of MASA encoder memory *-----------------------------------------------------------------------*/ #else /*-----------------------------------------------------------------------* * ivas_masa_enc_config() * * Frame-by-frame configuration of MASA encoder *-----------------------------------------------------------------------*/ #endif #ifdef MEM_ALLOC_APP ivas_error ivas_masa_enc_config_memory( #else ivas_error ivas_masa_enc_config( #endif Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) { #ifndef MEM_ALLOC_APP int16_t i; #endif MASA_ENCODER_HANDLE hMasa; IVAS_QMETADATA_HANDLE hQMetaData; IVAS_FORMAT ivas_format; Loading @@ -682,8 +696,8 @@ ivas_error ivas_masa_enc_config( int16_t maxBin, sf; #endif ivas_error error; int32_t ism_total_brate; #ifndef MEM_ALLOC_APP int32_t ism_total_brate; int32_t masa_total_brate; #endif Loading @@ -693,6 +707,7 @@ ivas_error ivas_masa_enc_config( ivas_format = st_ivas->hEncoderConfig->ivas_format; ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; #ifndef MEM_ALLOC_APP ism_total_brate = 0; if ( ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) { Loading @@ -703,7 +718,7 @@ ivas_error ivas_masa_enc_config( } ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate ); #endif hQMetaData->is_masa_ivas_format = 1; if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) Loading Loading @@ -740,6 +755,7 @@ ivas_error ivas_masa_enc_config( ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, ivas_total_brate, st_ivas->nchan_transport, ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); } #ifndef MEM_ALLOC_APP /* Setup importance weights for two-direction band selection. */ if ( hMasa->config.numberOfDirections == 2 ) { Loading Loading @@ -787,6 +803,7 @@ ivas_error ivas_masa_enc_config( { set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); } #endif /* Set qmeta to correct values */ if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands != 0 ? 2 : 1, hMasa->config.useCoherence ) ) != IVAS_ERR_OK ) Loading Loading @@ -925,6 +942,56 @@ void ivas_masa_enc_init( } } ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate ); /* Setup importance weights for two-direction band selection. */ if ( hMasa->config.numberOfDirections == 2 ) { set_f( hMasa->data.importanceWeight, 1.0f, hMasa->config.numCodingBands ); if ( hMasa->config.numCodingBands == 5 ) { hMasa->data.importanceWeight[4] = 0.7f; } else if ( hMasa->config.numCodingBands == 8 ) { hMasa->data.importanceWeight[7] = 0.7f; } else if ( hMasa->config.numCodingBands == 10 ) { hMasa->data.importanceWeight[8] = 0.7f; hMasa->data.importanceWeight[9] = 0.1f; } else if ( hMasa->config.numCodingBands == 12 ) { hMasa->data.importanceWeight[10] = 0.7f; hMasa->data.importanceWeight[11] = 0.1f; } else if ( hMasa->config.numCodingBands == 18 ) { hMasa->data.importanceWeight[14] = 0.8f; hMasa->data.importanceWeight[15] = 0.5f; hMasa->data.importanceWeight[16] = 0.2f; hMasa->data.importanceWeight[17] = 0.0f; } else if ( hMasa->config.numCodingBands == 24 ) { hMasa->data.importanceWeight[20] = 0.8f; hMasa->data.importanceWeight[21] = 0.5f; hMasa->data.importanceWeight[22] = 0.2f; hMasa->data.importanceWeight[23] = 0.0f; } if ( hMasa->config.numTwoDirBands == hMasa->config.numCodingBands ) { set_c( (int8_t *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); } } else { set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); } for ( i = 0; i < hQMetaData->no_directions; i++ ) { hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands; Loading Loading @@ -954,7 +1021,7 @@ void ivas_masa_enc_init( } maxBand--; st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; hQMetaData->q_direction->cfg.inactiveBands = 0; masa_total_brate = ivas_total_brate; if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { Loading Loading @@ -983,11 +1050,11 @@ void ivas_masa_enc_init( if ( maxBand < MASA_MAXIMUM_CODING_SUBBANDS ) { st_ivas->hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand; hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand; } else { st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; hQMetaData->q_direction->cfg.inactiveBands = 0; } } Loading @@ -1007,13 +1074,13 @@ void ivas_masa_enc_init( if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) { if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX ) if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX ) { st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise; hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise; } else { st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS; hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS; } } Loading lib_enc/ivas_mcmasa_enc.c +4 −0 Original line number Diff line number Diff line Loading @@ -128,7 +128,11 @@ ivas_error ivas_mcmasa_enc_open( } /* With McMASA, we config MASA encoder only in init as we know the input and there are no frame-by-frame changes currently. */ #ifdef MEM_ALLOC_APP if ( ( error = ivas_masa_enc_config_memory( st_ivas ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) #endif { return error; } Loading Loading
lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -5049,7 +5049,11 @@ void ivas_masa_estimate_energy( const int16_t nchan_transport /* i : number of MASA input/transport channels */ ); #ifdef MEM_ALLOC_APP ivas_error ivas_masa_enc_config_memory( #else ivas_error ivas_masa_enc_config( #endif Encoder_Struct* st_ivas /* i/o: IVAS encoder structure */ ); Loading
lib_enc/ivas_enc.c +0 −2 Original line number Diff line number Diff line Loading @@ -239,12 +239,10 @@ ivas_error ivas_enc( push_indice( st->hBstr, IND_SMODE, hEncoderConfig->sba_order, SBA_ORDER_BITS ); #endif } #ifndef MEM_ALLOC_APP else { ivas_masa_enc_reconfigure( st_ivas ); } #endif /* SBA/MASA metadata encoding and SBA/MASA metadata bitstream writing */ hMetaData = ( st_ivas->nSCE > 0 ) ? st_ivas->hSCE[st_ivas->nSCE - 1]->hMetaData : st_ivas->hCPE[st_ivas->nCPE - 1]->hMetaData; Loading
lib_enc/ivas_init_enc.c +2 −4 Original line number Diff line number Diff line Loading @@ -1265,10 +1265,8 @@ ivas_error ivas_reconfig_enc( } else if ( ivas_format == MASA_FORMAT ) { ivas_masa_enc_reconfigure( st_ivas ); /* reconfigure the SBA format encoder */ error = ivas_masa_enc_config( st_ivas ); /* reconfigure the MASA format encoder */ error = ivas_masa_enc_config_memory( st_ivas ); } else if ( ivas_format == SBA_ISM_FORMAT ) { Loading
lib_enc/ivas_masa_enc.c +75 −8 Original line number Diff line number Diff line Loading @@ -659,17 +659,31 @@ void ivas_masa_estimate_energy( } #ifdef MEM_ALLOC_APP /*-----------------------------------------------------------------------* * ivas_masa_enc_config_memory() * * Frame-by-frame configuration of MASA encoder memory *-----------------------------------------------------------------------*/ #else /*-----------------------------------------------------------------------* * ivas_masa_enc_config() * * Frame-by-frame configuration of MASA encoder *-----------------------------------------------------------------------*/ #endif #ifdef MEM_ALLOC_APP ivas_error ivas_masa_enc_config_memory( #else ivas_error ivas_masa_enc_config( #endif Encoder_Struct *st_ivas /* i/o: IVAS encoder structure */ ) { #ifndef MEM_ALLOC_APP int16_t i; #endif MASA_ENCODER_HANDLE hMasa; IVAS_QMETADATA_HANDLE hQMetaData; IVAS_FORMAT ivas_format; Loading @@ -682,8 +696,8 @@ ivas_error ivas_masa_enc_config( int16_t maxBin, sf; #endif ivas_error error; int32_t ism_total_brate; #ifndef MEM_ALLOC_APP int32_t ism_total_brate; int32_t masa_total_brate; #endif Loading @@ -693,6 +707,7 @@ ivas_error ivas_masa_enc_config( ivas_format = st_ivas->hEncoderConfig->ivas_format; ivas_total_brate = st_ivas->hEncoderConfig->ivas_total_brate; #ifndef MEM_ALLOC_APP ism_total_brate = 0; if ( ivas_format == MASA_ISM_FORMAT && st_ivas->nSCE > 0 && ( st_ivas->ism_mode == ISM_MASA_MODE_DISC || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ ) ) { Loading @@ -703,7 +718,7 @@ ivas_error ivas_masa_enc_config( } ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate ); #endif hQMetaData->is_masa_ivas_format = 1; if ( ivas_format == MASA_FORMAT || ivas_format == MASA_ISM_FORMAT ) Loading Loading @@ -740,6 +755,7 @@ ivas_error ivas_masa_enc_config( ivas_masa_set_coding_config( &( hMasa->config ), hMasa->data.band_mapping, ivas_total_brate, st_ivas->nchan_transport, ( ivas_format == MC_FORMAT && st_ivas->mc_mode == MC_MODE_MCMASA ) ); } #ifndef MEM_ALLOC_APP /* Setup importance weights for two-direction band selection. */ if ( hMasa->config.numberOfDirections == 2 ) { Loading Loading @@ -787,6 +803,7 @@ ivas_error ivas_masa_enc_config( { set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); } #endif /* Set qmeta to correct values */ if ( ( error = ivas_qmetadata_allocate_memory( hQMetaData, hMasa->config.numCodingBands, hMasa->config.numberOfDirections == 2 && hMasa->config.numTwoDirBands != 0 ? 2 : 1, hMasa->config.useCoherence ) ) != IVAS_ERR_OK ) Loading Loading @@ -925,6 +942,56 @@ void ivas_masa_enc_init( } } ivas_masa_set_elements( ivas_total_brate, st_ivas->mc_mode, st_ivas->nchan_transport, hQMetaData, &st_ivas->hEncoderConfig->element_mode_init, &st_ivas->nSCE, &st_ivas->nCPE, ivas_format, st_ivas->ism_mode, ism_total_brate ); /* Setup importance weights for two-direction band selection. */ if ( hMasa->config.numberOfDirections == 2 ) { set_f( hMasa->data.importanceWeight, 1.0f, hMasa->config.numCodingBands ); if ( hMasa->config.numCodingBands == 5 ) { hMasa->data.importanceWeight[4] = 0.7f; } else if ( hMasa->config.numCodingBands == 8 ) { hMasa->data.importanceWeight[7] = 0.7f; } else if ( hMasa->config.numCodingBands == 10 ) { hMasa->data.importanceWeight[8] = 0.7f; hMasa->data.importanceWeight[9] = 0.1f; } else if ( hMasa->config.numCodingBands == 12 ) { hMasa->data.importanceWeight[10] = 0.7f; hMasa->data.importanceWeight[11] = 0.1f; } else if ( hMasa->config.numCodingBands == 18 ) { hMasa->data.importanceWeight[14] = 0.8f; hMasa->data.importanceWeight[15] = 0.5f; hMasa->data.importanceWeight[16] = 0.2f; hMasa->data.importanceWeight[17] = 0.0f; } else if ( hMasa->config.numCodingBands == 24 ) { hMasa->data.importanceWeight[20] = 0.8f; hMasa->data.importanceWeight[21] = 0.5f; hMasa->data.importanceWeight[22] = 0.2f; hMasa->data.importanceWeight[23] = 0.0f; } if ( hMasa->config.numTwoDirBands == hMasa->config.numCodingBands ) { set_c( (int8_t *) hMasa->data.twoDirBands, 1, hMasa->config.numCodingBands ); } } else { set_c( (int8_t *) hMasa->data.twoDirBands, 0, hMasa->config.numCodingBands ); } for ( i = 0; i < hQMetaData->no_directions; i++ ) { hQMetaData->q_direction[i].cfg.nbands = hMasa->config.numCodingBands; Loading Loading @@ -954,7 +1021,7 @@ void ivas_masa_enc_init( } maxBand--; st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; hQMetaData->q_direction->cfg.inactiveBands = 0; masa_total_brate = ivas_total_brate; if ( ivas_format == MASA_ISM_FORMAT && st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { Loading Loading @@ -983,11 +1050,11 @@ void ivas_masa_enc_init( if ( maxBand < MASA_MAXIMUM_CODING_SUBBANDS ) { st_ivas->hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand; hQMetaData->q_direction->cfg.inactiveBands = MASA_MAXIMUM_CODING_SUBBANDS - maxBand; } else { st_ivas->hQMetaData->q_direction->cfg.inactiveBands = 0; hQMetaData->q_direction->cfg.inactiveBands = 0; } } Loading @@ -1007,13 +1074,13 @@ void ivas_masa_enc_init( if ( ivas_format == MASA_ISM_FORMAT && ( st_ivas->ism_mode == ISM_MASA_MODE_MASA_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ || st_ivas->ism_mode == ISM_MASA_MODE_DISC ) ) { if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || st_ivas->hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX ) if ( st_ivas->hCPE[0]->element_mode == IVAS_CPE_DFT || hMasa->data.hOmasaData->omasa_stereo_sw_cnt < OMASA_STEREO_SW_CNT_MAX ) { st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise; hMasa->data.hOmasaData->lp_noise_CPE = st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise; } else { st_ivas->hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS; hMasa->data.hOmasaData->lp_noise_CPE = ( st_ivas->hCPE[0]->hCoreCoder[0]->lp_noise + st_ivas->hCPE[0]->hCoreCoder[1]->lp_noise ) / CPE_CHANNELS; } } Loading
lib_enc/ivas_mcmasa_enc.c +4 −0 Original line number Diff line number Diff line Loading @@ -128,7 +128,11 @@ ivas_error ivas_mcmasa_enc_open( } /* With McMASA, we config MASA encoder only in init as we know the input and there are no frame-by-frame changes currently. */ #ifdef MEM_ALLOC_APP if ( ( error = ivas_masa_enc_config_memory( st_ivas ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_masa_enc_config( st_ivas ) ) != IVAS_ERR_OK ) #endif { return error; } Loading