【发布时间】:2016-03-02 11:39:14
【问题描述】:
我应该将我从相机接收到的每个 yuv 图像缓冲区逆时针旋转 90 度。我发现这个post 使用了java。此代码工作正常。 但是我尝试做一个本地方法,因为我想做一个具有相同逻辑但工作速度更快的方法。
JNIEXPORT jbyteArray JNICALL Java_com_ndk_example_utils_NativeUtils_rotateFrameBackward
(JNIEnv *env, jobject obj, jbyteArray arr, jint w, jint h){
jint arrSize = w*h*3/2;
jbyte *data,*yuv;
data = (*env)->GetByteArrayElements(env, arr, JNI_FALSE);
yuv = (*env)->GetByteArrayElements(env, arr, JNI_FALSE);
int x,y,i = 0;
for(x = 0; x < w; x++){
for(y = h-1;y >= 0;y--){
yuv[i] = data[y*w+x];
i++;
}
}
i = arrSize - 1;
for(x = w-1;x > 0;x=x-2)
{
for(y = 0;y < h/2;y++)
{
yuv[i] = data[(w*h)+(y*w)+x];
i--;
yuv[i] = data[(w*h)+(y*w)+(x-1)];
i--;
}
}
(*env)->ReleaseByteArrayElements(env, arr, yuv, JNI_ABORT);
yuv = 0;
data = 0;
return arr;
}
当我在我的 htc 816(v5.1) 上启动此方法时,它运行良好,但是当我在三星 S3(v4.3) 和联想 P-70(v4.4.2) 上启动该应用程序时,该应用程序崩溃了.在 Android Studio 的 Android 监视器选项卡中,我看到了 内存使用量一直在增加,直到我的应用程序崩溃。在我的 htc 中,我没有问题。有什么想法吗?
【问题讨论】:
标签: android c memory-leaks android-ndk java-native-interface