Commit 2d5a15a3 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

cleanup fix for BINAURAL_SPLIT_PCM, perform limiting/synthesis only when needed

parent f65246ba
Loading
Loading
Loading
Loading
Loading
+11 −12
Original line number Original line Diff line number Diff line
@@ -1277,7 +1277,7 @@ ivas_error IVAS_DEC_GetSamples(
#if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT
#if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT
ivas_error IVAS_DEC_GetSplitBinauralBitstream(
ivas_error IVAS_DEC_GetSplitBinauralBitstream(
    IVAS_DEC_HANDLE hIvasDec,                   /* i/o: IVAS decoder handle                                                     */
    IVAS_DEC_HANDLE hIvasDec,                   /* i/o: IVAS decoder handle                                                     */
    void *pcmBuf_out,                           /* o  : output synthesis signal                                                 */
    void *pcmBuf_out,                           /* o  : output synthesis signal for BINAURAL_SPLIT_PCM                          */
    IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits, /* o : bitstream output for split rendering mode*/
    IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits, /* o : bitstream output for split rendering mode*/
    int16_t *nOutSamples,                       /* o  : number of samples per channel written to output buffer                  */
    int16_t *nOutSamples,                       /* o  : number of samples per channel written to output buffer                  */
    bool *needNewFrame                          /* indication that the decoder needs a new frame                                */
    bool *needNewFrame                          /* indication that the decoder needs a new frame                                */
@@ -1288,9 +1288,7 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream(
    int32_t output_Fs;
    int32_t output_Fs;
    float *writePtr;
    float *writePtr;
    float *readPtr, *readEnd;
    float *readPtr, *readEnd;
#ifdef FIX_264_AUDIO_CHANNELS_TO_HEAP
    float *pOutput[BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES];
    float *pOutput[BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES];
#endif
    float output[BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES][L_FRAME48k];
    float output[BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES][L_FRAME48k];
    float pcmBuf[BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES * L_FRAME48k];
    float pcmBuf[BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES * L_FRAME48k];
    int16_t numSamplesPerChannelCacheSize;
    int16_t numSamplesPerChannelCacheSize;
@@ -1399,12 +1397,10 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream(
            output[j][i] = pcmBuf[i * BINAURAL_CHANNELS * numPoses + j];
            output[j][i] = pcmBuf[i * BINAURAL_CHANNELS * numPoses + j];
        }
        }
    }
    }
#ifdef FIX_264_AUDIO_CHANNELS_TO_HEAP
    for ( i = 0; i < BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES; ++i )
    for ( i = 0; i < BINAURAL_CHANNELS * MAX_HEAD_ROT_POSES; ++i )
    {
    {
        pOutput[i] = output[i];
        pOutput[i] = output[i];
    }
    }
#endif
    max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 );
    max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 );
    pcm_out = ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0;
    pcm_out = ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0;
    td_input = st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC;
    td_input = st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC;
@@ -1434,9 +1430,11 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream(
    }
    }


    /* convert to int16 with limiting for BINAURAL_SPLIT_PCM */
    /* convert to int16 with limiting for BINAURAL_SPLIT_PCM */
    if ( pcm_out )
    {
#ifndef DISABLE_LIMITER
#ifndef DISABLE_LIMITER
        ivas_limiter_dec( st_ivas->hLimiter, pOutput,
        ivas_limiter_dec( st_ivas->hLimiter, pOutput,
                      BINAURAL_CHANNELS,
                          st_ivas->hDecoderConfig->nchan_out,
                          numSamplesPerChannelToSplitEncode, st_ivas->BER_detect );
                          numSamplesPerChannelToSplitEncode, st_ivas->BER_detect );
#endif
#endif


@@ -1444,8 +1442,9 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream(
        st_ivas->noClipping +=
        st_ivas->noClipping +=
#endif
#endif
            ivas_syn_output( pOutput, numSamplesPerChannelToSplitEncode,
            ivas_syn_output( pOutput, numSamplesPerChannelToSplitEncode,
                         BINAURAL_CHANNELS,
                             st_ivas->hDecoderConfig->nchan_out,
                             (int16_t *) pcmBuf_out );
                             (int16_t *) pcmBuf_out );
    }


    free( st_ivas->splitBinRend.hMultiBinCldfbData );
    free( st_ivas->splitBinRend.hMultiBinCldfbData );


+2 −2
Original line number Original line Diff line number Diff line
@@ -221,7 +221,7 @@ ivas_error IVAS_DEC_GetSamples(
#if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT
#if defined API_5MS && defined SPLIT_REND_WITH_HEAD_ROT
ivas_error IVAS_DEC_GetSplitBinauralBitstream(
ivas_error IVAS_DEC_GetSplitBinauralBitstream(
    IVAS_DEC_HANDLE hIvasDec,    /* i/o: IVAS decoder handle                                                     */
    IVAS_DEC_HANDLE hIvasDec,    /* i/o: IVAS decoder handle                                                     */
    void *pcmBuf,                               /* o  : output synthesis signal                                  */
    void *pcmBuf_out,                            /* o  : output synthesis signal for BINAURAL_SPLIT_PCM          */
    IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits,  /* o : bitstream output for split rendering mode                */
    IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits,  /* o : bitstream output for split rendering mode                */
    int16_t *nOutSamples,        /* o  : number of samples per channel written to output buffer                  */
    int16_t *nOutSamples,        /* o  : number of samples per channel written to output buffer                  */
    bool *needNewFrame           /* indication that the decoder needs a new frame                                */
    bool *needNewFrame           /* indication that the decoder needs a new frame                                */