mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
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 <android/native_window_jni.h>
|
||||||
|
|
||||||
#include "cpu_features_macros.h" // NOLINT
|
#include "cpu_features_macros.h" // NOLINT
|
||||||
|
|
||||||
|
// For ARMv7, we use `cpu_feature` to detect availability of NEON at runtime.
|
||||||
#ifdef CPU_FEATURES_ARCH_ARM
|
#ifdef CPU_FEATURES_ARCH_ARM
|
||||||
#include "cpuinfo_arm.h" // NOLINT
|
#include "cpuinfo_arm.h" // NOLINT
|
||||||
#endif // CPU_FEATURES_ARCH_ARM
|
#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_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 <jni.h>
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@ -400,7 +411,7 @@ void Convert10BitFrameTo8BitDataBuffer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
#ifdef HAS_COMPILE_TIME_NEON_SUPPORT
|
||||||
void Convert10BitFrameTo8BitDataBufferNeon(
|
void Convert10BitFrameTo8BitDataBufferNeon(
|
||||||
const libgav1::DecoderBuffer* decoder_buffer, jbyte* data) {
|
const libgav1::DecoderBuffer* decoder_buffer, jbyte* data) {
|
||||||
uint32x2_t lcg_value = vdup_n_u32(random());
|
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
|
} // namespace
|
||||||
|
|
||||||
@ -507,20 +518,19 @@ DECODER_FUNC(jlong, gav1Init, jint threads) {
|
|||||||
return kStatusError;
|
return kStatusError;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CPU_FEATURES_ARCH_ARM
|
#ifdef CPU_FEATURES_ARCH_ANY_ARM // Arm v7/v8
|
||||||
// Libgav1 requires NEON with arm ABIs.
|
#ifndef HAS_COMPILE_TIME_NEON_SUPPORT // no compile time NEON support
|
||||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
#ifdef CPU_FEATURES_ARCH_ARM // check runtime support for ARMv7
|
||||||
const cpu_features::ArmFeatures arm_features =
|
if (cpu_features::GetArmInfo().features.neon == false) {
|
||||||
cpu_features::GetArmInfo().features;
|
|
||||||
if (!arm_features.neon) {
|
|
||||||
context->jni_status_code = kJniStatusNeonNotSupported;
|
context->jni_status_code = kJniStatusNeonNotSupported;
|
||||||
return reinterpret_cast<jlong>(context);
|
return reinterpret_cast<jlong>(context);
|
||||||
}
|
}
|
||||||
#else
|
#else // Unexpected case of an ARMv8 with no NEON support.
|
||||||
context->jni_status_code = kJniStatusNeonNotSupported;
|
context->jni_status_code = kJniStatusNeonNotSupported;
|
||||||
return reinterpret_cast<jlong>(context);
|
return reinterpret_cast<jlong>(context);
|
||||||
#endif // CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
|
||||||
#endif // CPU_FEATURES_ARCH_ARM
|
#endif // CPU_FEATURES_ARCH_ARM
|
||||||
|
#endif // HAS_COMPILE_TIME_NEON_SUPPORT
|
||||||
|
#endif // CPU_FEATURES_ARCH_ANY_ARM
|
||||||
|
|
||||||
libgav1::DecoderSettings settings;
|
libgav1::DecoderSettings settings;
|
||||||
settings.threads = threads;
|
settings.threads = threads;
|
||||||
@ -613,11 +623,11 @@ DECODER_FUNC(jint, gav1GetFrame, jlong jContext, jobject jOutputBuffer,
|
|||||||
CopyFrameToDataBuffer(decoder_buffer, data);
|
CopyFrameToDataBuffer(decoder_buffer, data);
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
#ifdef CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
#ifdef HAS_COMPILE_TIME_NEON_SUPPORT
|
||||||
Convert10BitFrameTo8BitDataBufferNeon(decoder_buffer, data);
|
Convert10BitFrameTo8BitDataBufferNeon(decoder_buffer, data);
|
||||||
#else
|
#else
|
||||||
Convert10BitFrameTo8BitDataBuffer(decoder_buffer, data);
|
Convert10BitFrameTo8BitDataBuffer(decoder_buffer, data);
|
||||||
#endif // CPU_FEATURES_COMPILED_ANY_ARM_NEON
|
#endif // HAS_COMPILE_TIME_NEON_SUPPORT
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
context->jni_status_code = kJniStatusBitDepth12NotSupportedWithYuv;
|
context->jni_status_code = kJniStatusBitDepth12NotSupportedWithYuv;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user