Add support for JavaToNativeFloatArray

Change-Id: I75482debc163d2c5f173cad644cd25ceb2996b38

Bug: webrtc:15047
Change-Id: I75482debc163d2c5f173cad644cd25ceb2996b38
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/299240
Reviewed-by: Paulina Hensman <phensman@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39713}
This commit is contained in:
Magnus Jedvert 2023-03-28 09:43:22 +00:00 committed by WebRTC LUCI CQ
parent e7482b403d
commit 49572e3438
2 changed files with 17 additions and 0 deletions

View File

@ -265,6 +265,21 @@ std::vector<int32_t> JavaToNativeIntArray(JNIEnv* env,
return container;
}
std::vector<float> JavaToNativeFloatArray(JNIEnv* env,
const JavaRef<jfloatArray>& jarray) {
// jfloat is a "machine-dependent native type" which represents a 32-bit
// float. C++ makes no guarantees about the size of floating point types, and
// some exotic architectures don't even have 32-bit floats (or even binary
// floats), but on all architectures we care about this is a float.
static_assert(std::is_same<float, jfloat>::value, "jfloat must be float");
float* array_ptr =
env->GetFloatArrayElements(jarray.obj(), /*isCopy=*/nullptr);
size_t array_length = env->GetArrayLength(jarray.obj());
std::vector<float> container(array_ptr, array_ptr + array_length);
env->ReleaseFloatArrayElements(jarray.obj(), array_ptr, /*mode=*/JNI_ABORT);
return container;
}
ScopedJavaLocalRef<jobjectArray> NativeToJavaBooleanArray(
JNIEnv* env,
const std::vector<bool>& container) {

View File

@ -242,6 +242,8 @@ std::vector<int8_t> JavaToNativeByteArray(JNIEnv* env,
const JavaRef<jbyteArray>& jarray);
std::vector<int32_t> JavaToNativeIntArray(JNIEnv* env,
const JavaRef<jintArray>& jarray);
std::vector<float> JavaToNativeFloatArray(JNIEnv* env,
const JavaRef<jfloatArray>& jarray);
ScopedJavaLocalRef<jobjectArray> NativeToJavaBooleanArray(
JNIEnv* env,