Commit f627b9ea authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Merge remote-tracking branch 'origin/main' into 2140_fix_object_editing_sanitizer_issues

parents 78e47794 482a19ac
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -160,6 +160,10 @@
      <Project>{2FA8F384-0775-F3B7-F8C3-85209222FC70}</Project>
      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
    </ProjectReference>
    <ProjectReference Include="lib_debug.vcxproj">
      <Project>{54509728-928B-44D9-A118-A6F92F08B34F}</Project>
      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
+53 −5
Original line number Diff line number Diff line
@@ -3108,6 +3108,13 @@ void getMetadataFromFileReader(
        fprintf( stderr, "\nError (%s) while reading ISM metadata from: %s\n\n", ivas_error_to_string( error ), IsmFileReader_getFilePath( ismReader ) );
        exit( -1 );
    }
#ifdef FIX_2084_FLOATING_POINT_LEFTOVERS
    objectMetadataBuffer->positions[objIdx].azimuth_fx = ismMetadata.azimuth_fx;
    objectMetadataBuffer->positions[objIdx].elevation_fx = ismMetadata.elevation_fx;
    objectMetadataBuffer->positions[objIdx].radius_fx = ismMetadata.radius_fx;
    objectMetadataBuffer->positions[objIdx].yaw_fx = ismMetadata.yaw_fx;
    objectMetadataBuffer->positions[objIdx].pitch_fx = ismMetadata.pitch_fx;
#else
    objectMetadataBuffer->positions[objIdx].azimuth_fx = (Word32) ( ismMetadata.azimuth * ( 1 << 22 ) );
    objectMetadataBuffer->positions[objIdx].elevation_fx = (Word32) ( ismMetadata.elevation * ( 1 << 22 ) );
    objectMetadataBuffer->positions[objIdx].radius_fx = (Word16) ( ismMetadata.radius * ( 1 << 9 ) );
@@ -3119,6 +3126,7 @@ void getMetadataFromFileReader(
    objectMetadataBuffer->positions[objIdx].radius = ismMetadata.radius;
    objectMetadataBuffer->positions[objIdx].yaw = ismMetadata.yaw;
    objectMetadataBuffer->positions[objIdx].pitch = ismMetadata.pitch;
#endif
    objectMetadataBuffer->positions[objIdx].non_diegetic_flag = ismMetadata.non_diegetic_flag;

    return;
@@ -3172,20 +3180,50 @@ static void IsmPositionProvider_getNextFrame(
        /* Otherwise fall back to default position */
        else
        {
#ifdef FIX_2084_FLOATING_POINT_LEFTOVERS
            objectMetadataBuffer->positions[objIdx].azimuth_fx = 0;
            objectMetadataBuffer->positions[objIdx].elevation_fx = 0;
            objectMetadataBuffer->positions[objIdx].radius_fx = 512; // 1.f in Q9
            objectMetadataBuffer->positions[objIdx].yaw_fx = 0;
            objectMetadataBuffer->positions[objIdx].pitch_fx = 0;
            objectMetadataBuffer->positions[objIdx].non_diegetic_flag = 0;
#else
            objectMetadataBuffer->positions[objIdx].azimuth = 0.0f;
            objectMetadataBuffer->positions[objIdx].elevation = 0.0f;
            objectMetadataBuffer->positions[objIdx].radius = 1.0f;
            objectMetadataBuffer->positions[objIdx].yaw = 0.0f;
            objectMetadataBuffer->positions[objIdx].pitch = 0.0f;
            objectMetadataBuffer->positions[objIdx].azimuth_fx = 0;
            objectMetadataBuffer->positions[objIdx].elevation_fx = 0;
            objectMetadataBuffer->positions[objIdx].radius_fx = 512;
            objectMetadataBuffer->positions[objIdx].yaw_fx = 0;
            objectMetadataBuffer->positions[objIdx].pitch_fx = 0;
            objectMetadataBuffer->positions[objIdx].non_diegetic_flag = 0;
#endif
        }

        /* Wrap azimuth to lie within (-180, 180] range */
#ifdef FIX_2084_FLOATING_POINT_LEFTOVERS
        while ( LT_32( objectMetadataBuffer->positions[objIdx].azimuth_fx, 0 ) )
        {
            objectMetadataBuffer->positions[objIdx].azimuth_fx = L_add( objectMetadataBuffer->positions[objIdx].azimuth_fx, DEG_360_IN_Q22 );
        }
        while ( GE_32( objectMetadataBuffer->positions[objIdx].azimuth_fx, DEG_360_IN_Q22 ) )
        {
            objectMetadataBuffer->positions[objIdx].azimuth_fx = L_sub( objectMetadataBuffer->positions[objIdx].azimuth_fx, DEG_360_IN_Q22 );
        }

        /* Clamp elevation to lie within [-90, 90] range (can't be wrapped easily) */
        objectMetadataBuffer->positions[objIdx].elevation_fx = L_min( L_max( objectMetadataBuffer->positions[objIdx].elevation_fx, -DEG_90_IN_Q22 ), DEG_90_IN_Q22 );

        /* Wrap yaw to lie within (-180, 180] range */
        while ( LT_32( objectMetadataBuffer->positions[objIdx].yaw_fx, 0 ) )
        {
            objectMetadataBuffer->positions[objIdx].yaw_fx = L_add( objectMetadataBuffer->positions[objIdx].yaw_fx, DEG_360_IN_Q22 );
        }
        while ( GE_32( objectMetadataBuffer->positions[objIdx].yaw_fx, DEG_360_IN_Q22 ) )
        {
            objectMetadataBuffer->positions[objIdx].yaw_fx = L_sub( objectMetadataBuffer->positions[objIdx].yaw_fx, DEG_360_IN_Q22 );
        }

        /* Clamp pitch to lie within [-90, 90] range (can't be wrapped easily) */
        objectMetadataBuffer->positions[objIdx].pitch_fx = L_min( L_max( objectMetadataBuffer->positions[objIdx].pitch_fx, -DEG_90_IN_Q22 ), DEG_90_IN_Q22 );
#else
        while ( objectMetadataBuffer->positions[objIdx].azimuth < 0.0f )
        {
            objectMetadataBuffer->positions[objIdx].azimuth += 360.0f;
@@ -3213,6 +3251,7 @@ static void IsmPositionProvider_getNextFrame(
        objectMetadataBuffer->positions[objIdx].pitch = min( max( objectMetadataBuffer->positions[objIdx].pitch, -90 ), 90 );
        objectMetadataBuffer->positions[objIdx].yaw_fx = (Word32) ( ( objectMetadataBuffer->positions[objIdx].yaw ) * ( 1 << Q22 ) );
        objectMetadataBuffer->positions[objIdx].pitch_fx = (Word32) ( ( objectMetadataBuffer->positions[objIdx].pitch ) * ( 1 << Q22 ) );
#endif
    }

    ++positionProvider->frameCounter;
@@ -3517,6 +3556,14 @@ static void parseObjectPosition(
        exit( -1 );
    }

#ifdef FIX_2084_FLOATING_POINT_LEFTOVERS
    position->azimuth_fx = (Word32) ( meta_prm[0] * ( 1 << Q22 ) );   /* Q22 */
    position->elevation_fx = (Word32) ( meta_prm[1] * ( 1 << Q22 ) ); /* Q22 */
    position->radius_fx = (Word16) ( meta_prm[2] * ( 1 << Q9 ) );     /* Q9 */
    position->yaw_fx = (Word32) ( meta_prm[5] * ( 1 << Q22 ) );       /* Q22 */
    position->pitch_fx = (Word32) ( meta_prm[6] * ( 1 << Q22 ) );     /* Q22 */
    position->non_diegetic_flag = (Word16) meta_prm[7];
#else
    position->azimuth = meta_prm[0];
    position->elevation = meta_prm[1];
    position->azimuth_fx = (Word32) ( meta_prm[0] * ( 1 << 22 ) );
@@ -3525,6 +3572,7 @@ static void parseObjectPosition(
    position->yaw = meta_prm[5];
    position->pitch = meta_prm[6];
    position->non_diegetic_flag = (int16_t) meta_prm[7];
#endif

    return;
}
+2 −0
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ typedef struct _IVAS_ISM_METADATA
    Word32 gainFactor_fx; /* Q29 */
    Word32 yaw_fx;        /* Q22 */
    Word32 pitch_fx;      /* Q22 */
#ifndef FIX_2084_FLOATING_POINT_LEFTOVERS
    float azimuth;
    float elevation;
    float radius;
@@ -140,6 +141,7 @@ typedef struct _IVAS_ISM_METADATA
    float gainFactor;
    float yaw;
    float pitch;
#endif
    Word16 non_diegetic_flag;
    Word32 gain_fx; /* Q29 */

+4 −0
Original line number Diff line number Diff line
@@ -195,7 +195,11 @@ typedef enum
#define MAX_JBM_L_FRAME48k                      1920
#define MAX_JBM_L_FRAME_NS                      40000000L
#define MAX_SPAR_INTERNAL_CHANNELS              IVAS_SPAR_MAX_CH
#ifdef UNIFIED_DECODING_PATHS_LEFTOVERS
#define MAX_CLDFB_DIGEST_CHANNELS               3                           /* == maximum of ParamISM TCs and ParamMC TCs */
#else
#define MAX_CLDFB_DIGEST_CHANNELS               (FOA_CHANNELS + MAX_NUM_OBJECTS)
#endif

typedef enum
{
+10 −41
Original line number Diff line number Diff line
@@ -41,14 +41,12 @@
#include <assert.h>
#include "ivas_prot_fx.h"

#ifdef FIX_2089_NONBE_LIMITER_CONSTS
#define RELEASE_CNST_20MS   ( 85899345 )   // Q30
#define RELEASE_CNST_2_20MS ( 21474836 )   // Q30
#define RELEASE_CNST_10MS   ( 42949672 )   // Q30
#define RELEASE_CNST_2_10MS ( 10737418 )   // Q30
#define RELEASE_CNST_5MS    ( 21474836 )   // Q30
#define RELEASE_CNST_2_5MS  ( 5368709 )    // Q30
#endif
#define ATTACK_CNST_48k     ( 2106670080 ) // Q31
#define ATTACK_CNST_32k     ( 2086555136 ) // Q31
#define ATTACK_CNST_16k     ( 2027355264 ) // Q31
@@ -355,7 +353,6 @@ void limiter_process_fx(
     * keep the gain curve smoother if the threshold is exceeded in many frames
     * in a short span of time.
     */
#ifdef FIX_2089_NONBE_LIMITER_CONSTS
    IF( EQ_32( L_mult0( output_frame, 50 ), hLimiter->sampling_rate ) )
    {
        releaseHeuristic_cnst = RELEASE_CNST_20MS;
@@ -379,7 +376,6 @@ void limiter_process_fx(
    }
    ELSE
    {
#ifdef FIX_2089_NONBE_LIMITER_CONSTS_WITH_DIV
        // computing output_frame/hLimiter->sampling_rate in Q30
        i = norm_s( output_frame );
        c = norm_l( hLimiter->sampling_rate );
@@ -394,35 +390,8 @@ void limiter_process_fx(
        i = sub( sub( c, i ), 1 ); // Q30
        releaseHeuristic_cnst_2 = L_shl( scale, i );
        releaseHeuristic_cnst = L_shl( releaseHeuristic_cnst_2, 2 );
#else
        /* or same default values as previous code version */
        releaseHeuristic_cnst = RELEASE_CNST_5MS;
        move32();
        releaseHeuristic_cnst_2 = RELEASE_CNST_2_5MS;
        move32();
#endif
    }

#else
    SWITCH( output_frame )
    {
        case 960:
        case 640:
        case 320:
        case 160:
            releaseHeuristic_cnst = 85899345; /*Q30*/
            move32();
            releaseHeuristic_cnst_2 = 21474836; /*Q30*/
            move32();
            BREAK;
        default:
            releaseHeuristic_cnst = 21474836; /*Q30*/
            move32();
            releaseHeuristic_cnst_2 = 5368709; /*Q30*/
            move32();
            BREAK;
    }
#endif
    releaseHeuristic = hLimiter->release_heuristic_fx; /* Q30 */
    move32();

Loading