Commit 4f1720b0 authored by sagnowski's avatar sagnowski
Browse files

Port split rendering changes to new version of decodeG192

parent cd639983
Loading
Loading
Loading
Loading
+77 −12
Original line number Diff line number Diff line
@@ -1839,6 +1839,10 @@ static ivas_error decodeG192(
    IVAS_VECTOR3 Pos;
    int16_t vec_pos_update, vec_pos_len;

#ifdef SPLIT_REND_WITH_HEAD_ROT
    IVAS_SPLIT_REND_BITS splitRendBits;
    SplitFileReadWrite *hSplitRendFileReadWrite;
#endif

    for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i )
    {
@@ -1901,6 +1905,15 @@ static ivas_error decodeG192(
        nOutSamples = (int16_t) ( arg.output_Fs / 1000 * DEFAULT_FETCH_FRAMESIZE_MS );
        vec_pos_len = 1;
    }

#ifdef SPLIT_REND_WITH_HEAD_ROT
    splitRendBits.bits_buf = splitRendBitsBuf;
    splitRendBits.bits_read = 0;
    splitRendBits.bits_written = 0;
    splitRendBits.buf_len = MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES;
    hSplitRendFileReadWrite = NULL;
#endif

    /*------------------------------------------------------------------------------------------*
     * Loop for every packet (frame) of bitstream data
     * - Read the bitstream packet
@@ -1951,11 +1964,25 @@ static ivas_error decodeG192(
        {
            IVAS_QUATERNION Quaternion;

#ifdef SPLIT_REND_WITH_HEAD_ROT
            if ( headRotReader == NULL )
            {
                    Quaternion.w = -3.0f;
                    Quaternion.x = 0.0f;
                    Quaternion.y = 0.0f;
                    Quaternion.z = 0.0f;
            }
            else
            {
#endif
                if ( ( error = HeadRotationFileReading( headRotReader, &Quaternion, &Pos ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError %s while reading head orientation from %s\n", IVAS_DEC_GetErrorMessage( error ), RotationFileReader_getFilePath( headRotReader ) );
                    goto cleanup;
                }
#ifdef SPLIT_REND_WITH_HEAD_ROT
            }
#endif


            if ( ( error = IVAS_DEC_FeedHeadTrackData( hIvasDec, Quaternion, Pos
@@ -2048,6 +2075,8 @@ static ivas_error decodeG192(
                    goto cleanup;
                }
            }

            /* TODO(sgi): Get split bitstream here */
            error = IVAS_DEC_GetSamples( hIvasDec, nSamplesToRender, pcmBuf + nOutChannels * nSamplesRendered, &nSamplesRendered_loop, &needNewFrame );
            nSamplesRendered += nSamplesRendered_loop;
            nSamplesToRender -= nSamplesRendered_loop;
@@ -2092,7 +2121,8 @@ static ivas_error decodeG192(
                    &nOutChannels,
                    &numObj
#ifdef SPLIT_REND_WITH_HEAD_ROT
    ,NULL /* TODO(sgi): see #else branch for reference */
                    ,
                    &hSplitRendFileReadWrite
#endif
                    );
                if ( error != IVAS_ERR_OK )
@@ -2109,6 +2139,28 @@ static ivas_error decodeG192(
        /* Write current frame */
        if ( decodedGoodFrame )
        {
#ifdef SPLIT_REND_WITH_HEAD_ROT
            if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED ) )
            {
                if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written,
                                                         splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nUnable to write to bitstream file!\n" );
                    goto cleanup;
                }
            }
            else
            {
                if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_PCM ) )
                {
                    if ( split_rend_write_bitstream_to_file( hSplitRendFileReadWrite, splitRendBits.bits_buf, &splitRendBits.bits_read, &splitRendBits.bits_written,
                                                             splitRendBits.codec, splitRendBits.pose_correction ) != IVAS_ERR_OK )
                    {
                        fprintf( stderr, "\nUnable to write to bitstream file!\n" );
                        goto cleanup;
                    }
                }
#endif
                if ( delayNumSamples < nOutSamples )
                {
                    if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK )
@@ -2122,6 +2174,9 @@ static ivas_error decodeG192(
                {
                    delayNumSamples -= nOutSamples;
                }
#ifdef SPLIT_REND_WITH_HEAD_ROT
            }
#endif
        }

        /* Write ISm metadata to external file(s) */
@@ -2370,11 +2425,18 @@ static ivas_error decodeG192(

    /* add zeros at the end to have equal length of synthesized signals */
    memset( pcmBuf, 0, delayNumSamples_orig[0] * nOutChannels * sizeof( int16_t ) );
#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( afWriter != NULL )
    {
#endif
        if ( ( error = AudioFileWriter_write( afWriter, pcmBuf, delayNumSamples_orig[0] * nOutChannels ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nError writing output file: %s\n", ivas_error_to_string( error ) );
            goto cleanup;
        }
#ifdef SPLIT_REND_WITH_HEAD_ROT
    }
#endif

    /*------------------------------------------------------------------------------------------*
     * Close files and deallocate resources
@@ -2384,6 +2446,9 @@ static ivas_error decodeG192(

cleanup:

#ifdef SPLIT_REND_WITH_HEAD_ROT
    split_rend_reader_writer_close( &hSplitRendFileReadWrite );
#endif
    AudioFileWriter_close( &afWriter );
    MasaFileWriter_close( &masaWriter );
#ifdef DEBUGGING