1
我應該將每個yuv圖像緩衝區(我從相機接收的)逆時針旋轉90度。我發現這個使用java的地方是post。此代碼工作正常。 但我試圖做一個本地方法,因爲我想要做的方法具有相同的邏輯,但工作更快。Android NDK內存使用情況
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我沒有問題。有任何想法嗎?