Loading lib_com/ivas_prot.h +99 −102 Original line number Diff line number Diff line Loading @@ -817,7 +817,7 @@ ivas_error ivas_jbm_dec_flush_renderer( #endif ); ivas_error ivas_jbm_dec_feed_tc_to_renderer( void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ Loading Loading @@ -854,9 +854,9 @@ int16_t ivas_jbm_dec_get_num_tc_channels( ); void ivas_jbm_dec_copy_tc_no_tsm( Decoder_Struct *st_ivas, float *tc[], const int16_t output_frame Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ float *tc[], /* i : transport channels */ const int16_t output_frame /* i : output frame size */ ); void ivas_jbm_dec_get_md_map_even_spacing( Loading Loading @@ -3468,7 +3468,7 @@ ivas_error ivas_sba_dec_reconfigure( #ifdef JBM_FOR_OSBA , uint16_t *nSamplesFlushed, /* o : number of samples flushed */ #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT const PCM_RESOLUTION pcm_resolution, /* i : type for the decoded PCM resolution */ void *data /* o : output synthesis signal */ #else Loading Loading @@ -4366,7 +4366,7 @@ void ivas_spar_dec_digest_tc( const int16_t nSamplesForRendering /* i : number of samples provided */ ); ivas_error ivas_sba_dec_digest_tc( void ivas_sba_dec_digest_tc( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const int16_t nCldfbSlots, /* i : number of CLDFB slots */ const int16_t nSamplesForRendering /* i : number of samples provided */ Loading Loading @@ -5690,9 +5690,8 @@ void ivas_osba_enc( const int16_t input_frame, /* i : Input frame size */ const int16_t nchan_ism, /* i : Number of objects for parameter analysis*/ const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ const int32_t input_Fs /* i : input sampling rate */ , const int16_t sba_analysis_order, /* i : SBA order evaluated in SBA encoder */ const int32_t input_Fs, /* i : input sampling rate */ const int16_t sba_planar /* i : planar SBA flag */ ); Loading @@ -5700,7 +5699,6 @@ ivas_error ivas_osba_data_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ); #ifdef JBM_FOR_OSBA ivas_error ivas_osba_dirac_td_binaural_jbm( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Loading @@ -5711,7 +5709,6 @@ ivas_error ivas_osba_dirac_td_binaural_jbm( ); #endif ivas_error ivas_osba_dirac_td_binaural( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output[], /* o : output synthesis signal */ Loading lib_dec/ivas_dec.c +3 −1 Original line number Diff line number Diff line Loading @@ -734,7 +734,6 @@ ivas_error ivas_dec( #ifdef JBM_FOR_OSBA if ( ( error = ivas_sba_upmixer_renderer( st_ivas, p_output, output_frame ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_sba_upmixer_renderer( st_ivas, &p_output[sba_ch_idx], output_frame ) ) != IVAS_ERR_OK ) #endif { Loading Loading @@ -854,6 +853,7 @@ ivas_error ivas_dec( { return error; } #ifdef NONBE_FIX_802_PARAMUPMIX_HIGHPASS for ( n = 0; n < st_ivas->nchan_transport; n++ ) { Loading @@ -863,7 +863,9 @@ ivas_error ivas_dec( } } #endif ivas_mc_paramupmix_dec( st_ivas, p_output ); #ifndef NONBE_FIX_802_PARAMUPMIX_HIGHPASS /* HP filtering */ if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) Loading lib_dec/ivas_dirac_dec.c +2 −5 Original line number Diff line number Diff line Loading @@ -2385,7 +2385,6 @@ void ivas_dirac_dec_render_sf( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { #ifdef OSBA_ROOM_IR /* render objects in combined format onto the CICP19 channels for BINAURAL_ROOM_IR */ if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) Loading @@ -2400,6 +2399,7 @@ void ivas_dirac_dec_render_sf( int16_t n_samples_to_render; int16_t interp_offset; float gain, prev_gain; num_objects = st_ivas->nchan_ism; nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; Loading @@ -2408,9 +2408,7 @@ void ivas_dirac_dec_render_sf( if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) { ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); interp_offset = 0; } Loading Loading @@ -2472,7 +2470,6 @@ void ivas_dirac_dec_render_sf( } #endif #ifdef SPLIT_REND_WITH_HEAD_ROT if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { Loading lib_dec/ivas_init_dec.c +5 −5 Original line number Diff line number Diff line Loading @@ -363,12 +363,11 @@ ivas_error ivas_dec_setup( #ifdef JBM_FOR_OSBA , nSamplesRendered, #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT pcm_resolution, #endif data #endif ) ) != IVAS_ERR_OK ) { return error; Loading Loading @@ -481,14 +480,13 @@ ivas_error ivas_dec_setup( /* set Ambisonic (SBA) order used for analysis and coding */ st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); #endif if ( st_ivas->ini_frame > 0 && ivas_total_brate != st_ivas->last_active_ivas_total_brate ) { if ( ( error = ivas_sba_dec_reconfigure( st_ivas #ifdef JBM_FOR_OSBA , nSamplesRendered, #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT pcm_resolution, #endif data Loading @@ -504,6 +502,7 @@ ivas_error ivas_dec_setup( /* set Ambisonic (SBA) order used for analysis and coding */ st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); #endif ivas_sba_config( ivas_total_brate, st_ivas->sba_analysis_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init ); /*correct number of CPEs for discrete ISM coding*/ Loading Loading @@ -632,7 +631,7 @@ ivas_error ivas_dec_setup( #ifdef JBM_FOR_OSBA , nSamplesRendered, #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT pcm_resolution, #endif data Loading @@ -641,6 +640,7 @@ ivas_error ivas_dec_setup( { return error; } st_ivas->last_active_ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; st_ivas->hDecoderConfig->ivas_total_brate = ivas_total_brate; } Loading lib_dec/ivas_jbm_dec.c +70 −89 Original line number Diff line number Diff line Loading @@ -342,8 +342,6 @@ ivas_error ivas_jbm_dec_tc( /* Configuration of combined-format bit-budget distribution */ ivas_set_surplus_brate_dec( st_ivas, &ism_total_brate ); st->bit_stream = &( st_ivas->bit_stream[( ism_total_brate / FRAMES_PER_SEC )] ); /* set ISM parameters and decode ISM metadata in OMASA format */ if ( ( error = ivas_omasa_ism_metadata_dec( st_ivas, ism_total_brate, &nchan_ism, &nchan_transport_ism, dirac_bs_md_write_idx, &nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { Loading Loading @@ -429,7 +427,6 @@ ivas_error ivas_jbm_dec_tc( /* core-decoding of transport channels */ if ( st_ivas->nSCE == 1 ) { st = st_ivas->hSCE[0]->hCoreCoder[0]; if ( ( error = ivas_sce_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { return error; Loading @@ -437,7 +434,6 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->nCPE == 1 ) { st = st_ivas->hCPE[0]->hCoreCoder[0]; if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { return error; Loading @@ -445,7 +441,6 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->nCPE > 1 ) { st = st_ivas->hCPE[0]->hCoreCoder[0]; if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { return error; Loading @@ -461,9 +456,7 @@ ivas_error ivas_jbm_dec_tc( ivas_pca_dec( st_ivas->hSpar->hPCA, output_frame, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->hDecoderConfig->last_ivas_total_brate, st_ivas->bfi, &p_output[sba_ch_idx] ); } ivas_spar_dec_gen_umx_mat( st_ivas->hSpar->hMdDec, st_ivas->nchan_transport, IVAS_MAX_NUM_BANDS, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); ivas_spar_dec_gen_umx_mat( st_ivas->hSpar->hMdDec, st_ivas->nchan_transport, IVAS_MAX_NUM_BANDS, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); ivas_sba_dirac_stereo_dec( st_ivas, &p_output[sba_ch_idx], output_frame, 0 ); } Loading Loading @@ -508,7 +501,6 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) { ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); /* add W */ Loading Loading @@ -778,7 +770,7 @@ ivas_error ivas_jbm_dec_tc( * Feed decoded transport channels and metadata to the IVAS JBM renderer routine *--------------------------------------------------------------------------*/ ivas_error ivas_jbm_dec_feed_tc_to_renderer( void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ Loading @@ -788,10 +780,8 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( float data_f[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k]; /* 'float' buffer for transport channels that will be directly converted with the CLDFB */ float *p_data_f[MAX_CLDFB_DIGEST_CHANNELS]; int16_t n, n_render_timeslots; ivas_error error; push_wmops( "ivas_jbm_dec_feed_tc_to_rendererer" ); for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) { p_data_f[n] = &data_f[n][0]; Loading Loading @@ -843,10 +833,7 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( } else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) { if ( ( error = ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } #ifdef JBM_FOR_OSBA else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) Loading Loading @@ -892,10 +879,7 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( n_render_timeslots *= ( st_ivas->hTcBuffer->n_samples_granularity / st_ivas->hSpatParamRendCom->slot_size ); } if ( ( error = ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { Loading @@ -918,16 +902,12 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( } else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) { if ( ( error = ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } } pop_wmops(); return IVAS_ERR_OK; return; } Loading @@ -952,33 +932,26 @@ ivas_error ivas_jbm_dec_render( { int16_t n, nchan_out; int16_t nchan_transport; float output[MAX_OUTPUT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS float output[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k]; /* 'float' buffer for output synthesis */ #else float output[MAX_OUTPUT_CHANNELS][L_FRAME48k]; /* 'float' buffer for output synthesis */ #endif ][L_FRAME48k]; /* 'float' buffer for output synthesis */ int16_t nchan_remapped; int32_t output_Fs; AUDIO_CONFIG output_config; int16_t nSamplesAskedLocal; ivas_error error; float *p_output[MAX_OUTPUT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS #endif ]; float *p_tc[MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS float *p_output[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; float *p_tc[MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS]; #else float *p_output[MAX_OUTPUT_CHANNELS]; float *p_tc[MAX_TRANSPORT_CHANNELS]; #endif ]; SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; push_wmops( "ivas_dec_render" ); /*----------------------------------------------------------------* * Initialization of local vars after struct has been set *----------------------------------------------------------------*/ Loading @@ -990,12 +963,11 @@ ivas_error ivas_jbm_dec_render( output_config = st_ivas->hDecoderConfig->output_config; nSamplesAskedLocal = nSamplesAsked + st_ivas->hTcBuffer->n_samples_discard; for ( n = 0; n < MAX_OUTPUT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( n = 0; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) #else for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ ) #endif ; n++ ) { p_output[n] = &output[n][0]; } Loading Loading @@ -1146,9 +1118,7 @@ ivas_error ivas_jbm_dec_render( { nchan_remapped = st_ivas->nchan_transport; if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) { if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) { Loading @@ -1173,7 +1143,6 @@ ivas_error ivas_jbm_dec_render( nchan_remapped = nchan_transport; /* Loudspeakers, Ambisonics or Binaural rendering */ if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) { if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) Loading @@ -1186,19 +1155,17 @@ ivas_error ivas_jbm_dec_render( else if ( st_ivas->renderer_type == RENDERER_OSBA_STEREO ) { *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); /* render objects */ ivas_ism_render_sf( st_ivas, p_output, *nSamplesRendered ); /* add already rendererd SBA part */ for ( n = 0; n < nchan_out; n++ ) { v_add( p_output[n], p_tc[n + st_ivas->nchan_ism], p_output[n], *nSamplesRendered ); } } else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS #ifdef JBM_FOR_OSBA || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM #endif ) else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { float output_ism[MAX_OUTPUT_CHANNELS][L_FRAME48k]; float *p_output_ism[MAX_OUTPUT_CHANNELS]; Loading @@ -1208,7 +1175,11 @@ ivas_error ivas_jbm_dec_render( p_output_ism[n] = &output_ism[n][0]; } ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { return error; } #ifdef OSBA_ROOM_IR if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) #endif Loading @@ -1229,8 +1200,11 @@ ivas_error ivas_jbm_dec_render( } else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) /*EXT output = individual objects + HOA3*/ { if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output[st_ivas->nchan_ism] ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output[st_ivas->nchan_ism] ); for ( n = 0; n < st_ivas->nchan_ism; n++ ) { mvr2r( st_ivas->hTcBuffer->tc[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output[n], *nSamplesRendered ); Loading @@ -1238,17 +1212,23 @@ ivas_error ivas_jbm_dec_render( } else { ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { return error; } } } else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) { ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); } else /* SBA_MODE_SPAR */ { ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { return error; } if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { #ifdef DEBUGGING Loading Loading @@ -1668,6 +1648,7 @@ ivas_error ivas_jbm_dec_flush_renderer( tc_local[ch_idx] = &st_ivas->hTcBuffer->tc[ch_idx + 2][hTcBuffer->n_samples_rendered]; mvr2r( st_ivas->hSbaIsmData->delayBuffer[ch_idx], tc_local[ch_idx], st_ivas->hSbaIsmData->delayBuffer_size ); } /* transfer adapted sf info from hTcBuffer to SPAR and DirAC */ st_ivas->hSpar->nb_subframes = 1; st_ivas->hSpar->subframes_rendered = 0; Loading @@ -1679,9 +1660,11 @@ ivas_error ivas_jbm_dec_flush_renderer( st_ivas->hSpatParamRendCom->subframe_nbslots[0] = JBM_CLDFB_SLOTS_IN_SUBFRAME; st_ivas->hSpatParamRendCom->slots_rendered = 0; st_ivas->hSpatParamRendCom->num_slots = JBM_CLDFB_SLOTS_IN_SUBFRAME; /* also adapt md maps, just use the last index */ set_s( st_ivas->hSpar->render_to_md_map, last_spar_md_idx, n_slots_still_available ); set_s( st_ivas->hSpatParamRendCom->render_to_md_map, last_dirac_md_idx, n_slots_still_available ); /* render the last subframe */ if ( ( error = ivas_osba_dirac_td_binaural_jbm( st_ivas, (uint16_t) hTcBuffer->n_samples_granularity, nSamplesRendered, &nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { Loading @@ -1707,7 +1690,7 @@ ivas_error ivas_jbm_dec_flush_renderer( if ( st_ivas->hDecoderConfig->Opt_Limiter ) #endif { if ( !( st_ivas->ivas_format == MONO_FORMAT ) ) if ( st_ivas->ivas_format != MONO_FORMAT ) { #ifndef DISABLE_LIMITER ivas_limiter_dec( st_ivas->hLimiter, p_output, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, st_ivas->BER_detect ); Loading Loading @@ -2266,12 +2249,12 @@ ivas_error ivas_jbm_dec_tc_buffer_open( if ( hTcBuffer->tc_buffer_mode == TC_BUFFER_MODE_NONE ) { hTcBuffer->tc_buffer = NULL; for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading @@ -2291,19 +2274,18 @@ ivas_error ivas_jbm_dec_tc_buffer_open( n_samp_residual = 0; } nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; nsamp_to_allocate += nchan_residual * n_samp_residual; if ( nsamp_to_allocate == 0 ) { hTcBuffer->tc_buffer = NULL; for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading @@ -2327,12 +2309,11 @@ ivas_error ivas_jbm_dec_tc_buffer_open( hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; offset += n_samp_residual; } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading Loading @@ -2445,13 +2426,12 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; offset += n_samp_residual; } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading Loading @@ -2514,15 +2494,15 @@ void ivas_jbm_dec_tc_buffer_close( if ( *phTcBuffer != NULL ) { for ( i = 0; i < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( i = 0; i < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; i++ ) #else for ( i = 0; i < MAX_TRANSPORT_CHANNELS; i++ ) #endif ; i++ ) { ( *phTcBuffer )->tc[i] = NULL; } if ( ( *phTcBuffer )->tc_buffer != NULL ) { free( ( *phTcBuffer )->tc_buffer ); Loading Loading @@ -2684,9 +2664,10 @@ TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( *--------------------------------------------------------------------------*/ void ivas_jbm_dec_copy_tc_no_tsm( Decoder_Struct *st_ivas, float *tc[], const int16_t output_frame ) Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ float *tc[], /* i : transport channels */ const int16_t output_frame /* i : output frame size */ ) { int16_t n_ch_full_copy; int16_t n_ch_cldfb; Loading Loading
lib_com/ivas_prot.h +99 −102 Original line number Diff line number Diff line Loading @@ -817,7 +817,7 @@ ivas_error ivas_jbm_dec_flush_renderer( #endif ); ivas_error ivas_jbm_dec_feed_tc_to_renderer( void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ Loading Loading @@ -854,9 +854,9 @@ int16_t ivas_jbm_dec_get_num_tc_channels( ); void ivas_jbm_dec_copy_tc_no_tsm( Decoder_Struct *st_ivas, float *tc[], const int16_t output_frame Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ float *tc[], /* i : transport channels */ const int16_t output_frame /* i : output frame size */ ); void ivas_jbm_dec_get_md_map_even_spacing( Loading Loading @@ -3468,7 +3468,7 @@ ivas_error ivas_sba_dec_reconfigure( #ifdef JBM_FOR_OSBA , uint16_t *nSamplesFlushed, /* o : number of samples flushed */ #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT const PCM_RESOLUTION pcm_resolution, /* i : type for the decoded PCM resolution */ void *data /* o : output synthesis signal */ #else Loading Loading @@ -4366,7 +4366,7 @@ void ivas_spar_dec_digest_tc( const int16_t nSamplesForRendering /* i : number of samples provided */ ); ivas_error ivas_sba_dec_digest_tc( void ivas_sba_dec_digest_tc( Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ const int16_t nCldfbSlots, /* i : number of CLDFB slots */ const int16_t nSamplesForRendering /* i : number of samples provided */ Loading Loading @@ -5690,9 +5690,8 @@ void ivas_osba_enc( const int16_t input_frame, /* i : Input frame size */ const int16_t nchan_ism, /* i : Number of objects for parameter analysis*/ const ISM_MODE ism_mode, /* i : ISM mode */ const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ const int32_t input_Fs /* i : input sampling rate */ , const int16_t sba_analysis_order, /* i : SBA order evaluated in SBA encoder */ const int32_t input_Fs, /* i : input sampling rate */ const int16_t sba_planar /* i : planar SBA flag */ ); Loading @@ -5700,7 +5699,6 @@ ivas_error ivas_osba_data_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder handle */ ); #ifdef JBM_FOR_OSBA ivas_error ivas_osba_dirac_td_binaural_jbm( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ Loading @@ -5711,7 +5709,6 @@ ivas_error ivas_osba_dirac_td_binaural_jbm( ); #endif ivas_error ivas_osba_dirac_td_binaural( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output[], /* o : output synthesis signal */ Loading
lib_dec/ivas_dec.c +3 −1 Original line number Diff line number Diff line Loading @@ -734,7 +734,6 @@ ivas_error ivas_dec( #ifdef JBM_FOR_OSBA if ( ( error = ivas_sba_upmixer_renderer( st_ivas, p_output, output_frame ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_sba_upmixer_renderer( st_ivas, &p_output[sba_ch_idx], output_frame ) ) != IVAS_ERR_OK ) #endif { Loading Loading @@ -854,6 +853,7 @@ ivas_error ivas_dec( { return error; } #ifdef NONBE_FIX_802_PARAMUPMIX_HIGHPASS for ( n = 0; n < st_ivas->nchan_transport; n++ ) { Loading @@ -863,7 +863,9 @@ ivas_error ivas_dec( } } #endif ivas_mc_paramupmix_dec( st_ivas, p_output ); #ifndef NONBE_FIX_802_PARAMUPMIX_HIGHPASS /* HP filtering */ if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) Loading
lib_dec/ivas_dirac_dec.c +2 −5 Original line number Diff line number Diff line Loading @@ -2385,7 +2385,6 @@ void ivas_dirac_dec_render_sf( if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { #ifdef OSBA_ROOM_IR /* render objects in combined format onto the CICP19 channels for BINAURAL_ROOM_IR */ if ( st_ivas->ivas_format == SBA_ISM_FORMAT && st_ivas->ism_mode == ISM_SBA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) Loading @@ -2400,6 +2399,7 @@ void ivas_dirac_dec_render_sf( int16_t n_samples_to_render; int16_t interp_offset; float gain, prev_gain; num_objects = st_ivas->nchan_ism; nchan_out_woLFE = st_ivas->hIntSetup.nchan_out_woLFE; n_slots_to_render = st_ivas->hSpar->subframe_nbslots[st_ivas->hSpar->subframes_rendered]; Loading @@ -2408,9 +2408,7 @@ void ivas_dirac_dec_render_sf( if ( st_ivas->hCombinedOrientationData && st_ivas->hCombinedOrientationData->enableCombinedOrientation[0] ) { ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); ivas_jbm_dec_get_adapted_linear_interpolator( n_samples_to_render, n_samples_to_render, st_ivas->hIsmRendererData->interpolator ); interp_offset = 0; } Loading Loading @@ -2472,7 +2470,6 @@ void ivas_dirac_dec_render_sf( } #endif #ifdef SPLIT_REND_WITH_HEAD_ROT if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) { Loading
lib_dec/ivas_init_dec.c +5 −5 Original line number Diff line number Diff line Loading @@ -363,12 +363,11 @@ ivas_error ivas_dec_setup( #ifdef JBM_FOR_OSBA , nSamplesRendered, #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT pcm_resolution, #endif data #endif ) ) != IVAS_ERR_OK ) { return error; Loading Loading @@ -481,14 +480,13 @@ ivas_error ivas_dec_setup( /* set Ambisonic (SBA) order used for analysis and coding */ st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); #endif if ( st_ivas->ini_frame > 0 && ivas_total_brate != st_ivas->last_active_ivas_total_brate ) { if ( ( error = ivas_sba_dec_reconfigure( st_ivas #ifdef JBM_FOR_OSBA , nSamplesRendered, #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT pcm_resolution, #endif data Loading @@ -504,6 +502,7 @@ ivas_error ivas_dec_setup( /* set Ambisonic (SBA) order used for analysis and coding */ st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); #endif ivas_sba_config( ivas_total_brate, st_ivas->sba_analysis_order, -1, &( st_ivas->nchan_transport ), st_ivas->sba_planar, &st_ivas->nSCE, &st_ivas->nCPE, &st_ivas->element_mode_init ); /*correct number of CPEs for discrete ISM coding*/ Loading Loading @@ -632,7 +631,7 @@ ivas_error ivas_dec_setup( #ifdef JBM_FOR_OSBA , nSamplesRendered, #if defined SPLIT_REND_WITH_HEAD_ROT #ifdef SPLIT_REND_WITH_HEAD_ROT pcm_resolution, #endif data Loading @@ -641,6 +640,7 @@ ivas_error ivas_dec_setup( { return error; } st_ivas->last_active_ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; st_ivas->hDecoderConfig->ivas_total_brate = ivas_total_brate; } Loading
lib_dec/ivas_jbm_dec.c +70 −89 Original line number Diff line number Diff line Loading @@ -342,8 +342,6 @@ ivas_error ivas_jbm_dec_tc( /* Configuration of combined-format bit-budget distribution */ ivas_set_surplus_brate_dec( st_ivas, &ism_total_brate ); st->bit_stream = &( st_ivas->bit_stream[( ism_total_brate / FRAMES_PER_SEC )] ); /* set ISM parameters and decode ISM metadata in OMASA format */ if ( ( error = ivas_omasa_ism_metadata_dec( st_ivas, ism_total_brate, &nchan_ism, &nchan_transport_ism, dirac_bs_md_write_idx, &nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { Loading Loading @@ -429,7 +427,6 @@ ivas_error ivas_jbm_dec_tc( /* core-decoding of transport channels */ if ( st_ivas->nSCE == 1 ) { st = st_ivas->hSCE[0]->hCoreCoder[0]; if ( ( error = ivas_sce_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { return error; Loading @@ -437,7 +434,6 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->nCPE == 1 ) { st = st_ivas->hCPE[0]->hCoreCoder[0]; if ( ( error = ivas_cpe_dec( st_ivas, 0, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { return error; Loading @@ -445,7 +441,6 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->nCPE > 1 ) { st = st_ivas->hCPE[0]->hCoreCoder[0]; if ( ( error = ivas_mct_dec( st_ivas, p_output, output_frame, nb_bits_metadata[0] + nb_bits_metadata[1] ) ) != IVAS_ERR_OK ) { return error; Loading @@ -461,9 +456,7 @@ ivas_error ivas_jbm_dec_tc( ivas_pca_dec( st_ivas->hSpar->hPCA, output_frame, st_ivas->hSpar->hMdDec->spar_md_cfg.nchan_transport, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->hDecoderConfig->last_ivas_total_brate, st_ivas->bfi, &p_output[sba_ch_idx] ); } ivas_spar_dec_gen_umx_mat( st_ivas->hSpar->hMdDec, st_ivas->nchan_transport, IVAS_MAX_NUM_BANDS, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); ivas_spar_dec_gen_umx_mat( st_ivas->hSpar->hMdDec, st_ivas->nchan_transport, IVAS_MAX_NUM_BANDS, st_ivas->bfi, ivas_get_spar_dec_md_num_subframes( st_ivas->sba_order, st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->last_active_ivas_total_brate ) ); ivas_sba_dirac_stereo_dec( st_ivas, &p_output[sba_ch_idx], output_frame, 0 ); } Loading Loading @@ -508,7 +501,6 @@ ivas_error ivas_jbm_dec_tc( } else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) { ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame ); /* add W */ Loading Loading @@ -778,7 +770,7 @@ ivas_error ivas_jbm_dec_tc( * Feed decoded transport channels and metadata to the IVAS JBM renderer routine *--------------------------------------------------------------------------*/ ivas_error ivas_jbm_dec_feed_tc_to_renderer( void ivas_jbm_dec_feed_tc_to_renderer( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ const int16_t nSamplesForRendering, /* i : number of TC samples available for rendering */ int16_t *nSamplesResidual, /* o : number of samples not fitting into the renderer grid and buffer for the next call*/ Loading @@ -788,10 +780,8 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( float data_f[MAX_CLDFB_DIGEST_CHANNELS][MAX_JBM_L_FRAME48k]; /* 'float' buffer for transport channels that will be directly converted with the CLDFB */ float *p_data_f[MAX_CLDFB_DIGEST_CHANNELS]; int16_t n, n_render_timeslots; ivas_error error; push_wmops( "ivas_jbm_dec_feed_tc_to_rendererer" ); for ( n = 0; n < MAX_CLDFB_DIGEST_CHANNELS; n++ ) { p_data_f[n] = &data_f[n][0]; Loading Loading @@ -843,10 +833,7 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( } else if ( st_ivas->ivas_format == SBA_FORMAT || st_ivas->ivas_format == MASA_FORMAT ) { if ( ( error = ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } #ifdef JBM_FOR_OSBA else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) Loading Loading @@ -892,10 +879,7 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( n_render_timeslots *= ( st_ivas->hTcBuffer->n_samples_granularity / st_ivas->hSpatParamRendCom->slot_size ); } if ( ( error = ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC ) { Loading @@ -918,16 +902,12 @@ ivas_error ivas_jbm_dec_feed_tc_to_renderer( } else if ( st_ivas->mc_mode == MC_MODE_MCMASA ) { if ( ( error = ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_digest_tc( st_ivas, n_render_timeslots, st_ivas->hTcBuffer->n_samples_available ); } } pop_wmops(); return IVAS_ERR_OK; return; } Loading @@ -952,33 +932,26 @@ ivas_error ivas_jbm_dec_render( { int16_t n, nchan_out; int16_t nchan_transport; float output[MAX_OUTPUT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS float output[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k]; /* 'float' buffer for output synthesis */ #else float output[MAX_OUTPUT_CHANNELS][L_FRAME48k]; /* 'float' buffer for output synthesis */ #endif ][L_FRAME48k]; /* 'float' buffer for output synthesis */ int16_t nchan_remapped; int32_t output_Fs; AUDIO_CONFIG output_config; int16_t nSamplesAskedLocal; ivas_error error; float *p_output[MAX_OUTPUT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS #endif ]; float *p_tc[MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS float *p_output[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; float *p_tc[MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS]; #else float *p_output[MAX_OUTPUT_CHANNELS]; float *p_tc[MAX_TRANSPORT_CHANNELS]; #endif ]; SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom; push_wmops( "ivas_dec_render" ); /*----------------------------------------------------------------* * Initialization of local vars after struct has been set *----------------------------------------------------------------*/ Loading @@ -990,12 +963,11 @@ ivas_error ivas_jbm_dec_render( output_config = st_ivas->hDecoderConfig->output_config; nSamplesAskedLocal = nSamplesAsked + st_ivas->hTcBuffer->n_samples_discard; for ( n = 0; n < MAX_OUTPUT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( n = 0; n < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; n++ ) #else for ( n = 0; n < MAX_OUTPUT_CHANNELS; n++ ) #endif ; n++ ) { p_output[n] = &output[n][0]; } Loading Loading @@ -1146,9 +1118,7 @@ ivas_error ivas_jbm_dec_render( { nchan_remapped = st_ivas->nchan_transport; if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) { if ( st_ivas->ism_mode == ISM_MASA_MODE_DISC && st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC ) { Loading @@ -1173,7 +1143,6 @@ ivas_error ivas_jbm_dec_render( nchan_remapped = nchan_transport; /* Loudspeakers, Ambisonics or Binaural rendering */ if ( st_ivas->ism_mode == ISM_SBA_MODE_DISC ) { if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) Loading @@ -1186,19 +1155,17 @@ ivas_error ivas_jbm_dec_render( else if ( st_ivas->renderer_type == RENDERER_OSBA_STEREO ) { *nSamplesRendered = min( st_ivas->hTcBuffer->n_samples_available, nSamplesAskedLocal ); /* render objects */ ivas_ism_render_sf( st_ivas, p_output, *nSamplesRendered ); /* add already rendererd SBA part */ for ( n = 0; n < nchan_out; n++ ) { v_add( p_output[n], p_tc[n + st_ivas->nchan_ism], p_output[n], *nSamplesRendered ); } } else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS #ifdef JBM_FOR_OSBA || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM #endif ) else if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS || st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV_ROOM ) { float output_ism[MAX_OUTPUT_CHANNELS][L_FRAME48k]; float *p_output_ism[MAX_OUTPUT_CHANNELS]; Loading @@ -1208,7 +1175,11 @@ ivas_error ivas_jbm_dec_render( p_output_ism[n] = &output_ism[n][0]; } ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { return error; } #ifdef OSBA_ROOM_IR if ( st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV_ROOM ) #endif Loading @@ -1229,8 +1200,11 @@ ivas_error ivas_jbm_dec_render( } else if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) /*EXT output = individual objects + HOA3*/ { if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output[st_ivas->nchan_ism] ) ) != IVAS_ERR_OK ) { return error; } ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, &p_output[st_ivas->nchan_ism] ); for ( n = 0; n < st_ivas->nchan_ism; n++ ) { mvr2r( st_ivas->hTcBuffer->tc[n] + st_ivas->hTcBuffer->n_samples_rendered, p_output[n], *nSamplesRendered ); Loading @@ -1238,17 +1212,23 @@ ivas_error ivas_jbm_dec_render( } else { ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { return error; } } } else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) else if ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM ) { ivas_dirac_dec_binaural_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, nchan_remapped, p_output ); } else /* SBA_MODE_SPAR */ { ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ); if ( ( error = ivas_sba_dec_render( st_ivas, nSamplesAskedLocal, nSamplesRendered, nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { return error; } if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { #ifdef DEBUGGING Loading Loading @@ -1668,6 +1648,7 @@ ivas_error ivas_jbm_dec_flush_renderer( tc_local[ch_idx] = &st_ivas->hTcBuffer->tc[ch_idx + 2][hTcBuffer->n_samples_rendered]; mvr2r( st_ivas->hSbaIsmData->delayBuffer[ch_idx], tc_local[ch_idx], st_ivas->hSbaIsmData->delayBuffer_size ); } /* transfer adapted sf info from hTcBuffer to SPAR and DirAC */ st_ivas->hSpar->nb_subframes = 1; st_ivas->hSpar->subframes_rendered = 0; Loading @@ -1679,9 +1660,11 @@ ivas_error ivas_jbm_dec_flush_renderer( st_ivas->hSpatParamRendCom->subframe_nbslots[0] = JBM_CLDFB_SLOTS_IN_SUBFRAME; st_ivas->hSpatParamRendCom->slots_rendered = 0; st_ivas->hSpatParamRendCom->num_slots = JBM_CLDFB_SLOTS_IN_SUBFRAME; /* also adapt md maps, just use the last index */ set_s( st_ivas->hSpar->render_to_md_map, last_spar_md_idx, n_slots_still_available ); set_s( st_ivas->hSpatParamRendCom->render_to_md_map, last_dirac_md_idx, n_slots_still_available ); /* render the last subframe */ if ( ( error = ivas_osba_dirac_td_binaural_jbm( st_ivas, (uint16_t) hTcBuffer->n_samples_granularity, nSamplesRendered, &nSamplesAvailableNext, p_output ) ) != IVAS_ERR_OK ) { Loading @@ -1707,7 +1690,7 @@ ivas_error ivas_jbm_dec_flush_renderer( if ( st_ivas->hDecoderConfig->Opt_Limiter ) #endif { if ( !( st_ivas->ivas_format == MONO_FORMAT ) ) if ( st_ivas->ivas_format != MONO_FORMAT ) { #ifndef DISABLE_LIMITER ivas_limiter_dec( st_ivas->hLimiter, p_output, st_ivas->hDecoderConfig->nchan_out, *nSamplesRendered, st_ivas->BER_detect ); Loading Loading @@ -2266,12 +2249,12 @@ ivas_error ivas_jbm_dec_tc_buffer_open( if ( hTcBuffer->tc_buffer_mode == TC_BUFFER_MODE_NONE ) { hTcBuffer->tc_buffer = NULL; for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading @@ -2291,19 +2274,18 @@ ivas_error ivas_jbm_dec_tc_buffer_open( n_samp_residual = 0; } nsamp_to_allocate = hTcBuffer->nchan_buffer_full * n_samp_full; nsamp_to_allocate += nchan_residual * n_samp_residual; if ( nsamp_to_allocate == 0 ) { hTcBuffer->tc_buffer = NULL; for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ch_idx = 0; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading @@ -2327,12 +2309,11 @@ ivas_error ivas_jbm_dec_tc_buffer_open( hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; offset += n_samp_residual; } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading Loading @@ -2445,13 +2426,12 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure( hTcBuffer->tc[ch_idx] = &hTcBuffer->tc_buffer[offset]; offset += n_samp_residual; } for ( ; ch_idx < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( ; ch_idx < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; ch_idx++ ) #else for ( ; ch_idx < MAX_TRANSPORT_CHANNELS; ch_idx++ ) #endif ; ch_idx++ ) { hTcBuffer->tc[ch_idx] = NULL; } Loading Loading @@ -2514,15 +2494,15 @@ void ivas_jbm_dec_tc_buffer_close( if ( *phTcBuffer != NULL ) { for ( i = 0; i < MAX_TRANSPORT_CHANNELS #ifdef JBM_FOR_OSBA + MAX_NUM_OBJECTS for ( i = 0; i < MAX_TRANSPORT_CHANNELS + MAX_NUM_OBJECTS; i++ ) #else for ( i = 0; i < MAX_TRANSPORT_CHANNELS; i++ ) #endif ; i++ ) { ( *phTcBuffer )->tc[i] = NULL; } if ( ( *phTcBuffer )->tc_buffer != NULL ) { free( ( *phTcBuffer )->tc_buffer ); Loading Loading @@ -2684,9 +2664,10 @@ TC_BUFFER_MODE ivas_jbm_dec_get_tc_buffer_mode( *--------------------------------------------------------------------------*/ void ivas_jbm_dec_copy_tc_no_tsm( Decoder_Struct *st_ivas, float *tc[], const int16_t output_frame ) Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle */ float *tc[], /* i : transport channels */ const int16_t output_frame /* i : output frame size */ ) { int16_t n_ch_full_copy; int16_t n_ch_cldfb; Loading