Fix erroneous use of "cpu_features" in AV1 JNI exports.
`CPU_FEATURES_COMPILED_ANY_ARM_NEON` is always defined when `CPU_FEATURES_ARCH_ARM` is but it can be defined as `0` or `1` ([cpu_features source](8e60d3f9be/include/cpu_features_macros.h (L237-L245)
)). This patch makes sure to use the value of `CPU_FEATURES_COMPILED_ANY_ARM_NEON` instead of whether it is defined or not.
PiperOrigin-RevId: 673837522
This commit is contained in:
parent
ce98b7d379
commit
3caebbf5ad
@ -19,12 +19,23 @@
|
||||
#include <android/native_window_jni.h>
|
||||
|
||||
#include "cpu_features_macros.h" // NOLINT
|
||||
|
||||
// For ARMv7, we use `cpu_feature` to detect availability of NEON at runtime.
|
||||
#ifdef CPU_FEATURES_ARCH_ARM
|
||||
#include "cpuinfo_arm.h" // NOLINT
|
||||
#endif // CPU_FEATURES_ARCH_ARM
|
||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#include <arm_neon.h>
|
||||
|
||||
// For ARM in general (v7/v8) we detect compile time availability of NEON.
|
||||
#ifdef CPU_FEATURES_ARCH_ANY_ARM
|
||||
#if CPU_FEATURES_COMPILED_ANY_ARM_NEON // always defined to 0 or 1.
|
||||
#define HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
#endif // CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#endif // CPU_FEATURES_ARCH_ANY_ARM
|
||||
|
||||
#ifdef HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
#include <arm_neon.h>
|
||||
#endif
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include <cstdint>
|
||||
@ -400,7 +411,7 @@ void Convert10BitFrameTo8BitDataBuffer(
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#ifdef HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
void Convert10BitFrameTo8BitDataBufferNeon(
|
||||
const libgav1::DecoderBuffer* decoder_buffer, jbyte* data) {
|
||||
uint32x2_t lcg_value = vdup_n_u32(random());
|
||||
@ -497,7 +508,7 @@ void Convert10BitFrameTo8BitDataBufferNeon(
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#endif // HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
|
||||
} // namespace
|
||||
|
||||
@ -507,20 +518,19 @@ DECODER_FUNC(jlong, gav1Init, jint threads) {
|
||||
return kStatusError;
|
||||
}
|
||||
|
||||
#ifdef CPU_FEATURES_ARCH_ARM
|
||||
// Libgav1 requires NEON with arm ABIs.
|
||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
const cpu_features::ArmFeatures arm_features =
|
||||
cpu_features::GetArmInfo().features;
|
||||
if (!arm_features.neon) {
|
||||
#ifdef CPU_FEATURES_ARCH_ANY_ARM // Arm v7/v8
|
||||
#ifndef HAS_COMPILE_TIME_NEON_SUPPORT // no compile time NEON support
|
||||
#ifdef CPU_FEATURES_ARCH_ARM // check runtime support for ARMv7
|
||||
if (cpu_features::GetArmInfo().features.neon == false) {
|
||||
context->jni_status_code = kJniStatusNeonNotSupported;
|
||||
return reinterpret_cast<jlong>(context);
|
||||
}
|
||||
#else
|
||||
#else // Unexpected case of an ARMv8 with no NEON support.
|
||||
context->jni_status_code = kJniStatusNeonNotSupported;
|
||||
return reinterpret_cast<jlong>(context);
|
||||
#endif // CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#endif // CPU_FEATURES_ARCH_ARM
|
||||
#endif // HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
#endif // CPU_FEATURES_ARCH_ANY_ARM
|
||||
|
||||
libgav1::DecoderSettings settings;
|
||||
settings.threads = threads;
|
||||
@ -613,11 +623,11 @@ DECODER_FUNC(jint, gav1GetFrame, jlong jContext, jobject jOutputBuffer,
|
||||
CopyFrameToDataBuffer(decoder_buffer, data);
|
||||
break;
|
||||
case 10:
|
||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#ifdef HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
Convert10BitFrameTo8BitDataBufferNeon(decoder_buffer, data);
|
||||
#else
|
||||
Convert10BitFrameTo8BitDataBuffer(decoder_buffer, data);
|
||||
#endif // CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
||||
#endif // HAS_COMPILE_TIME_NEON_SUPPORT
|
||||
break;
|
||||
default:
|
||||
context->jni_status_code = kJniStatusBitDepth12NotSupportedWithYuv;
|
||||
|
Loading…
x
Reference in New Issue
Block a user