diff --git a/lib_com/options.h b/lib_com/options.h index 095cc709b0e0bec146db6479e0551f5600c805c3..f81f82b1635780ea3482c33f53e9d7e605598337 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -216,6 +216,7 @@ #define NONBE_FIX_797_OMASA_INACTIVE_SEP_OBJ /* VA: issue 797: fix of crash when the separated object is inactive and the MASA metadata is using very few bits */ #define NONBE_FIX_798_OSBA_MC_DEC_CRASH #define NONBE_FIX_806_OMASA_ONE_SEP_TRANSPORT_MIX /* Nokia: issue 806: fix one separated object mode transport mix of the separated object */ +#define NONBE_FIX_809_EXTERNAL_TARGET_INTERPOLATION /* FhG: issue 809: unify external target interpolation inter and intra frame behaviour */ #define JBM_FOR_OSBA /* FhG: implement OSBA format in the JBM path */ diff --git a/lib_rend/ivas_rotation.c b/lib_rend/ivas_rotation.c index b6a81bca91c88225dc31fb24f8077896d63d6c49..5263bd5fda20044212286fd76f693ae9415e137f 100644 --- a/lib_rend/ivas_rotation.c +++ b/lib_rend/ivas_rotation.c @@ -1362,7 +1362,23 @@ static void external_target_interpolation( { if ( i > 0 ) { - hCombinedOrientationData->Quaternions_ext_interpolation_start = hExtOrientationData->Quaternions[i - 1]; +#ifdef NONBE_FIX_809_EXTERNAL_TARGET_INTERPOLATION + if ( hExtOrientationData->enableExternalOrientation[i - 1] == 0 ) + { + IVAS_QUATERNION identity; + identity.w = 1.0f; + identity.x = identity.y = identity.z = 0.0f; + hCombinedOrientationData->Quaternions_ext_interpolation_start = identity; + } + else if ( hExtOrientationData->enableExternalOrientation[i - 1] == 2 ) + { + hCombinedOrientationData->Quaternions_ext_interpolation_start = hCombinedOrientationData->Quaternion_frozen_ext; + } + else +#endif + { + hCombinedOrientationData->Quaternions_ext_interpolation_start = hExtOrientationData->Quaternions[i - 1]; + } } else {