Commit 11b66be3 authored by vaclav's avatar vaclav
Browse files

move 'splitRendBits' handle under st_ivas->hSplitBinRend

parent 68675d4d
Loading
Loading
Loading
Loading
+27 −41
Original line number Diff line number Diff line
@@ -75,17 +75,12 @@ static
#define MIN_NUM_BITS_ACTIVE_FRAME 56
#define NUM_BITS_SID_IVAS_5K2     104
#ifdef SPLIT_REND_WITH_HEAD_ROT
#define NUM_FRAMES_PER_SEC 50
#define MAX_FRAME_SIZE     ( 48000 / NUM_FRAMES_PER_SEC )
#define MAX_FRAME_SIZE ( 48000 / IVAS_NUM_FRAMES_PER_SEC )
#else
#define MAX_FRAME_SIZE ( 48000 / 50 )
#endif
#define MAX_NUM_OUTPUT_CHANNELS            16
#define MAX_OUTPUT_PCM_BUFFER_SIZE         ( MAX_NUM_OUTPUT_CHANNELS * MAX_FRAME_SIZE )
#ifdef SPLIT_REND_WITH_HEAD_ROT
#define MAX_SPLIT_REND_BITRATE                   ( 768000 ) /* TODO tmu: unify with SPLIT_REND_MAX_BRATE ? */
#define MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / NUM_FRAMES_PER_SEC ) + 7 ) >> 3 )
#endif
#define IVAS_PUBLIC_ORIENT_TRK_NONE        ( 0 )
#define IVAS_PUBLIC_ORIENT_TRK_REF         ( 1 )
#define IVAS_PUBLIC_ORIENT_TRK_AVG         ( 2 )
@@ -207,7 +202,7 @@ int main(
    ivas_error error = IVAS_ERR_UNKNOWN;
    int16_t pcmBuf[MAX_OUTPUT_PCM_BUFFER_SIZE];
#ifdef SPLIT_REND_WITH_HEAD_ROT
    uint8_t splitRendBitsBuf[MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES];
    uint8_t splitRendBitsBuf[IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES];
#endif
    RenderConfigReader *renderConfigReader = NULL;
#ifdef DEBUGGING
@@ -434,6 +429,7 @@ int main(
        arg.enableHeadRotation = true;
    }
#endif

    if ( ( error = IVAS_DEC_Configure( hIvasDec, arg.output_Fs, arg.outputFormat, arg.customLsOutputEnabled, arg.hrtfReaderEnabled, arg.enableHeadRotation, arg.enableExternalOrientation, arg.orientation_tracking, arg.renderConfigEnabled, arg.Opt_non_diegetic_pan, arg.non_diegetic_pan_gain, arg.delayCompensationEnabled ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
@@ -1643,7 +1639,7 @@ static ivas_error initOnFirstGoodFrame(
#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( *hSplitRendFileReadWrite != NULL )
        {
            IVAS_SPLIT_REND_BITS splitRendBitsZero;
            IVAS_SPLIT_REND_BITS_DATA splitRendBitsZero;
            splitRendBitsZero.bits_written = 0;
            splitRendBitsZero.bits_read = 0;

@@ -1815,12 +1811,9 @@ static ivas_error decodeG192(
    uint16_t numObj = 0;
    IVAS_DEC_BS_FORMAT bsFormat = IVAS_DEC_BS_UNKOWN;
    IVAS_VECTOR3 Pos[IVAS_MAX_PARAM_SPATIAL_SUBFRAMES];

#ifdef SPLIT_REND_WITH_HEAD_ROT
    IVAS_SPLIT_REND_BITS splitRendBits;
    SplitFileReadWrite *hSplitRendFileReadWrite;
    SplitFileReadWrite *splitRendWriter = NULL;
#endif

    IsmFileWriter *ismWriters[IVAS_MAX_NUM_OBJECTS];
    for ( i = 0; i < IVAS_MAX_NUM_OBJECTS; ++i )
    {
@@ -1844,15 +1837,6 @@ static ivas_error decodeG192(
    reset_wmops();
#endif

#ifdef SPLIT_REND_WITH_HEAD_ROT
    // TODO: move the init into IVAS_DEC_Configure()
    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
@@ -2003,7 +1987,7 @@ static ivas_error decodeG192(
        if ( ( error = IVAS_DEC_GetSamples( hIvasDec, pcmBuf, &nOutSamples
#ifdef SPLIT_REND_WITH_HEAD_ROT
                                            ,
                                            &splitRendBits
                                            splitRendBitsBuf
#endif
                                            ) ) != IVAS_ERR_OK )
        {
@@ -2039,9 +2023,10 @@ static ivas_error decodeG192(
                    &numObj
#ifdef SPLIT_REND_WITH_HEAD_ROT
                    ,
                    &hSplitRendFileReadWrite
                    &splitRendWriter
#endif
                );

                if ( error != IVAS_ERR_OK )
                {
                    goto cleanup;
@@ -2057,26 +2042,26 @@ static ivas_error decodeG192(
        if ( decodedGoodFrame )
        {
#ifdef SPLIT_REND_WITH_HEAD_ROT
            if ( ( hSplitRendFileReadWrite != NULL ) && ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED ) )
            if ( arg.outputFormat == IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED || 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 )
                IVAS_SPLIT_REND_BITS_DATA splitRendBits;

                if ( ( error = IVAS_DEC_GetSplitRendBits( hIvasDec, &splitRendBits ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nUnable to write to bitstream file!\n" );
                    exit( -1 );
                }
                    fprintf( stderr, "\nError in IVAS_DEC_SplitRendBits: %s\n", IVAS_DEC_GetErrorMessage( error ) );
                    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 )

                if ( split_rend_write_bitstream_to_file( splitRendWriter, 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" );
                        exit( -1 );
                    fprintf( stderr, "\nError writing split rendering bitstream to file!\n" );
                    goto cleanup;
                }
            }
#endif

            if ( arg.outputFormat != IVAS_DEC_OUTPUT_SPLIT_BINAURAL_CODED )
            {
#endif
                if ( delayNumSamples < nOutSamples )
                {
                    if ( ( error = AudioFileWriter_write( afWriter, &pcmBuf[delayNumSamples * nOutChannels], nOutSamples * nOutChannels - ( delayNumSamples * nOutChannels ) ) ) != IVAS_ERR_OK )
@@ -2239,10 +2224,11 @@ static ivas_error decodeG192(

cleanup:
#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( hSplitRendFileReadWrite != NULL )
    if ( splitRendWriter != NULL )
    {
        split_rend_reader_writer_close( &hSplitRendFileReadWrite );
        split_rend_reader_writer_close( &splitRendWriter );
    }

    if ( afWriter != NULL )
    {
#endif
+0 −3
Original line number Diff line number Diff line
@@ -629,9 +629,6 @@ enum
#define CLDFB_NO_COL_MAX_SWITCH_BFI         10                     /* CLDFB resampling - max number of CLDFB col. for switching, BFI */
#define CLDFB_OVRLP_MIN_SLOTS               3                      /* CLDFB resampling - minimize processing to minimum required for transition frame ACELP->TCX/HQ */
#define INV_CLDFB_BANDWIDTH                 ( 1.f / 800.f )
#ifdef SPLIT_REND_WITH_HEAD_ROT // VE!!!!!
#define CLDFB_PLC_XF                        2                      /* Length of cross-fade into first good frame after frame loss in CLDFB cols. */
#endif

#define L_FILT_2OVER3                       12
#define L_FILT_2OVER3_LP                    3
+7 −1
Original line number Diff line number Diff line
@@ -52,6 +52,12 @@

#define RENDERER_HEAD_POSITIONS_PER_FRAME 4

#ifdef SPLIT_REND_WITH_HEAD_ROT
#define IVAS_NUM_FRAMES_PER_SEC 50

#define MAX_SPLIT_REND_BITRATE                        768000
#define IVAS_MAX_SPLIT_REND_BITS_BUFFER_SIZE_IN_BYTES ( ( ( (int32_t) MAX_SPLIT_REND_BITRATE / IVAS_NUM_FRAMES_PER_SEC ) + 7 ) >> 3 )
#endif

/*----------------------------------------------------------------------------------*
 * Common API structures
@@ -132,7 +138,7 @@ typedef struct ivas_split_rend_bits_t
    int32_t bits_read;
    IVAS_SPLIT_REND_CODEC codec;
    IVAS_SPLIT_REND_POSE_CORRECTION_MODE pose_correction;
} ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS, *IVAS_SPLIT_REND_BITS_HANDLE;
} ivas_split_rend_bits_t, IVAS_SPLIT_REND_BITS_DATA, *IVAS_SPLIT_REND_BITS_HANDLE;
#endif
typedef struct
{
+5 −1
Original line number Diff line number Diff line
@@ -1604,13 +1604,17 @@ typedef enum
 * Split Binaural Rendering Constants
 *----------------------------------------------------------------------------------*/

#ifdef SPLIT_REND_WITH_HEAD_ROT
#define CLDFB_PLC_XF                            2 /* Length of cross-fade into first good frame after frame loss in CLDFB cols. */
#endif

#define SPLIT_REND_DECOR_ALPHA                  0.25f

#define SPLIT_REND_MAX_YAW_ONLY_POSES           2
#define SPLIT_REND_MAX_PITCH_ONLY_POSES         2
#define SPLIT_REND_MAX_ROLL_ONLY_POSES          2
#define SPLIT_REND_MAX_ONE_AXIS_MD_POSES        2
#define MAX_EXTRAPOLATION_ANGLE                 (15.0f) /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/
#define MAX_EXTRAPOLATION_ANGLE                 15.0f /* this means additional 15 degrees can be extrapolated on top of MD probing poses*/

#define SPLIT_REND_MAX_DOF                      3

+1 −1
Original line number Diff line number Diff line
@@ -310,7 +310,7 @@ ivas_error ivas_dec(
    int16_t *data                                               /* o  : output synthesis signal                 */
#ifdef SPLIT_REND_WITH_HEAD_ROT
    ,
    IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits
    uint8_t *splitRendBitsBuf                                   /* o  : output split rendering bits             */
#endif
);

Loading