Commit 22b8b54d authored by Adam Mills's avatar Adam Mills
Browse files

Merge branch '715-rom_to_ram-should-be-enabled-in-options-h' into 'main'

[Split Non BE] Resolve Split rendering issue #712, #713, #715  (enable ROM_TO_RAM switch, updating head-tracking array correctly in MC, MASA SR mode)

See merge request !983
parents 16ba5da1 a25f3fba
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -156,6 +156,8 @@
#define SPLIT_REND_WITH_HEAD_ROT_PARAMBIN               /* Nokia: Issue 623: Split rendering support for parambin renderer */
#define FIX_658_SPLIT_REND_MASA                         /*Dlb : Fix for issue 658, uninitialized memory access in MASA in Split rendering 0DOF mode*/
#define OSBA_SPLIT_RENDERING
#define ROM_TO_RAM                                     /*Dlb : ROM optimization in SR mode*/     
#define FIX_712_713_SPLIT_REND_MASA_MC                 /*Dlb : Fix for issue 712 and 713*/
#endif

#define FIX_732_PLANAR_SBA_OSBA                         /* Dlb : issue 732: fix for crash in planar mode in OSBA format*/
+1 −1
Original line number Diff line number Diff line
@@ -701,7 +701,7 @@ void DeleteLCLDDecoder( LCLDDecoder *psLCLDDecoder )
        }

#ifdef ROM_TO_RAM
        for ( uint32_t n = 0; n < ALLOC_TABLE_SIZE * 2; n++ )
        for ( n = 0; n < ALLOC_TABLE_SIZE * 2; n++ )
        {
            if ( psLCLDDecoder->num_decode_table[n] > 1 )
            {
+26 −0
Original line number Diff line number Diff line
@@ -6957,6 +6957,11 @@ static ivas_error renderMcToSplitBinaural(
            /* copy input to tdrend input/output buffer */
            copyBufferTo2dArray( mcInput->base.inputBuffer, tmpRendBuffer );

#ifdef FIX_712_713_SPLIT_REND_MASA_MC
            /* perform rotation in source format to tmpRotBuffer */
            pCombinedOrientationDataLocal = &combinedOrientationDataLocal;
#endif

            /* Render */
            if ( ( error = ivas_td_binaural_renderer_ext( ( pos_idx == 0 ) ? &mcInput->tdRendWrapper : &mcInput->splitTdRendWrappers[pos_idx - 1],
                                                          mcInput->base.inConfig,
@@ -8214,8 +8219,29 @@ static void renderMasaToBinaural(
    copyBufferTo2dArray( masaInput->base.inputBuffer, tmpBuffer_buff );
    copyMasaMetadataToDiracRenderer( &masaInput->masaMetadata, masaInput->decDummy->hSpatParamRendCom );

#ifdef FIX_712_713_SPLIT_REND_MASA_MC
    if ( is_split_rend_mode )
    {
        int16_t sf, i, j;
        COMBINED_ORIENTATION_HANDLE pCombinedOrientationData;
        pCombinedOrientationData = *masaInput->base.ctx.pCombinedOrientationData;
        for ( sf = 1; sf < pCombinedOrientationData->num_subframes; sf++ )
        {
            pCombinedOrientationData->Quaternions[sf] = pCombinedOrientationData->Quaternions[0];
            for ( i = 0; i < 3; i++ )
            {
                for ( j = 0; j < 3; j++ )
                {
                    pCombinedOrientationData->Rmat[sf][i][j] = pCombinedOrientationData->Rmat[0][i][j];
                }
            }
        }
    }
#endif

    ivas_dirac_dec_binaural( masaInput->decDummy, *masaInput->base.ctx.pCombinedOrientationData, tmpBuffer, masaInput->base.inputBuffer.config.numChannels,
                             getNumSubframesInBuffer( &outAudio, *masaInput->base.ctx.pOutSampleRate ) );

#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( is_split_rend_mode )
    {
+12 −0
Original line number Diff line number Diff line
@@ -130,6 +130,18 @@ FORMAT_TO_FILE_COMPARETEST = {
    "ISM4": TESTV_DIR.joinpath("stv4ISM48s.wav"),
    "MASA1": TESTV_DIR.joinpath("stv1MASA1TC48c.wav"),
    "MASA2": TESTV_DIR.joinpath("stv2MASA2TC48c.wav"),
    "OSBA_1_1": TESTV_DIR.joinpath("stvOSBA_1ISM_FOA48c.wav"),
    "OSBA_1_2": TESTV_DIR.joinpath("stvOSBA_1ISM_2OA48c.wav"),
    "OSBA_1_3": TESTV_DIR.joinpath("stvOSBA_1ISM_3OA48c.wav"),
    "OSBA_2_1": TESTV_DIR.joinpath("stvOSBA_2ISM_FOA48c.wav"),
    "OSBA_2_2": TESTV_DIR.joinpath("stvOSBA_2ISM_2OA48c.wav"),
    "OSBA_2_3": TESTV_DIR.joinpath("stvOSBA_2ISM_3OA48c.wav"),
    "OSBA_3_1": TESTV_DIR.joinpath("stvOSBA_3ISM_FOA48c.wav"),
    "OSBA_3_2": TESTV_DIR.joinpath("stvOSBA_3ISM_2OA48c.wav"),
    "OSBA_3_3": TESTV_DIR.joinpath("stvOSBA_3ISM_3OA48c.wav"),
    "OSBA_4_1": TESTV_DIR.joinpath("stvOSBA_4ISM_FOA48c.wav"),
    "OSBA_4_2": TESTV_DIR.joinpath("stvOSBA_4ISM_2OA48c.wav"),
    "OSBA_4_3": TESTV_DIR.joinpath("stvOSBA_4ISM_3OA48c.wav"),
    "META": TEST_VECTOR_DIR.joinpath("mixed_scene.txt"),
    "16ch_8+4+4": TESTV_DIR.joinpath("stv3OA48c.wav"),
    "4d4": TESTV_DIR.joinpath("stv71MC48c.wav"),
+4 −1
Original line number Diff line number Diff line
@@ -41,18 +41,21 @@ The tests cover the following IVAS formats:
* Multi-Channel
* ISM
* MASA
* OSBA

The tests include both split rendering operating modes:
* Full chain: encoder, decoder, external renderer
* External: external renderer only

Note: MASA format only supports the full chain split rendering mode.
Note: OSBA format only supports the full chain split rendering mode.

Furthermore, the tests iterate over the following parameters:
* Renderer config file which specifies DoF (degrees of freedom), split rendering bitrate, and split rendering codec
* Trajectory file
* Encoder/decoder bitrate (only for full-chain split rendering mode)

Some PLC and BINAURAL_SPLIT_PCM tests are also implemented.

## Directory Structure

```
Loading