This source file includes following definitions.
- Java_com_example_helloandroidcamera2_AndroidBufferUtilities_allocNativeYuvBufferT
- Java_com_example_helloandroidcamera2_AndroidBufferUtilities_freeNativeYuvBufferT
- Java_com_example_helloandroidcamera2_AndroidBufferUtilities_rotateNativeYuvBufferT180
- Java_com_example_helloandroidcamera2_AndroidBufferUtilities_lockSurface
- Java_com_example_helloandroidcamera2_AndroidBufferUtilities_allocNativeYuvBufferTFromSurfaceHandle
- Java_com_example_helloandroidcamera2_AndroidBufferUtilities_unlockSurface
#include "AndroidBufferUtilities.h"
#include <stdint.h>
#include <android/log.h>
#include "LockedSurface.h"
#include "YuvBufferT.h"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "AndroidBufferUtilities", __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, "AndroidBufferUtilities", __VA_ARGS__)
extern "C" {
JNIEXPORT
jlong JNICALL Java_com_example_helloandroidcamera2_AndroidBufferUtilities_allocNativeYuvBufferT(
JNIEnv *env, jobject, jint srcWidth, jint srcHeight,
jobject srcLumaByteBuffer, jint srcLumaRowStrideBytes,
jobject srcChromaUByteBuffer, jobject srcChromaVByteBuffer,
jint srcChromaElementStrideBytes, jint srcChromaRowStrideBytes) {
uint8_t *srcLumaPtr = reinterpret_cast<uint8_t *>(
env->GetDirectBufferAddress(srcLumaByteBuffer));
uint8_t *srcChromaUPtr = reinterpret_cast<uint8_t *>(
env->GetDirectBufferAddress(srcChromaUByteBuffer));
uint8_t *srcChromaVPtr = reinterpret_cast<uint8_t *>(
env->GetDirectBufferAddress(srcChromaVByteBuffer));
if (srcLumaPtr == nullptr || srcChromaUPtr == nullptr ||
srcChromaVPtr == nullptr) {
return 0L;
}
YuvBufferT *buffer = new YuvBufferT(srcLumaPtr, srcWidth, srcHeight,
1 , srcLumaRowStrideBytes,
srcChromaUPtr, srcWidth / 2, srcHeight / 2,
srcChromaElementStrideBytes, srcChromaRowStrideBytes,
srcChromaVPtr, srcWidth / 2, srcHeight / 2,
srcChromaElementStrideBytes, srcChromaRowStrideBytes);
return reinterpret_cast<jlong>(buffer);
}
JNIEXPORT jboolean JNICALL Java_com_example_helloandroidcamera2_AndroidBufferUtilities_freeNativeYuvBufferT(
JNIEnv *env, jobject obj, jlong handle) {
if (handle == 0L) {
return false;
}
YuvBufferT *yuvBufferT = reinterpret_cast<YuvBufferT *>(handle);
delete yuvBufferT;
return true;
}
JNIEXPORT
jboolean JNICALL Java_com_example_helloandroidcamera2_AndroidBufferUtilities_rotateNativeYuvBufferT180(
JNIEnv *env, jobject obj, jlong handle) {
if (handle == 0L) {
return false;
}
YuvBufferT *yuvBufferT = reinterpret_cast<YuvBufferT *>(handle);
yuvBufferT->rotate180();
return true;
}
JNIEXPORT jlong JNICALL Java_com_example_helloandroidcamera2_AndroidBufferUtilities_lockSurface(
JNIEnv *env, jobject obj, jobject surface) {
return reinterpret_cast<jlong>(LockedSurface::lock(env, surface));
}
JNIEXPORT jlong JNICALL Java_com_example_helloandroidcamera2_AndroidBufferUtilities_allocNativeYuvBufferTFromSurfaceHandle(
JNIEnv *env, jobject obj, jlong lockedSurfaceHandle) {
if (lockedSurfaceHandle == 0L) {
return 0L;
}
LockedSurface *ls = reinterpret_cast<LockedSurface *>(lockedSurfaceHandle);
YuvBufferT tmp = ls->yuvView();
if (tmp.isNull()) {
return 0L;
}
YuvBufferT *yuvBufferT = new YuvBufferT(tmp);
return reinterpret_cast<jlong>(yuvBufferT);
}
JNIEXPORT jboolean JNICALL Java_com_example_helloandroidcamera2_AndroidBufferUtilities_unlockSurface(
JNIEnv *env, jobject obj, jlong lockedSurfaceHandle) {
if (lockedSurfaceHandle == 0L) {
return false;
}
LockedSurface *ls = reinterpret_cast<LockedSurface *>(lockedSurfaceHandle);
delete ls;
return true;
}
}