2012-06-19 48 views
0

RGB輸入YUV到彙編

public void onPreviewFrame(byte[] data, Camera camera) 

我們得到YUV格式的數據。現在轉換爲RGB我已經在NDK中使用了一個轉換器。但它還不夠快。

所以我發現這一點: http://www.roman10.net/effective-color-conversion-yuv-rgb-in-android-in-assembly/

它有這個NDK方法: https://github.com/roman10/roman10-android-tutorial/blob/master/colorConversion/jni/test.c

,但我不知道如何改變它,所以它會接受YUV字節數組「數據」,並返回我一個RGB int數組?

回答

0

您必須編寫一個類似於naGetConvertedFrame()的JNI函數。新功能將有如下聲明:

JNIEXPORT void JNICALL Java_<name>_convert(JNIEnv * pEnv, jobject pObj, jobject pBitmap, jbyteArray jData, jint jWidth, jint jHeight) 

函數的名稱應反映Java類將宣佈這個功能native方法(見RenderView.java爲例)的名稱。在羅馬的例子中,共享庫從另一個類加載,在Main.java - 但這loadLibrary()可以很容易地被轉移到RenderView.java文件。

private static native void convert(Bitmap _bitmap, byte[] data, int _width, int _height); 

你的功能將類似於最初的例子,只是它不會讀取文件,而是使用GetByteArrayElements()收購Ÿü,並v指針的轉換器。

+0

我使用GetByteArrayElemnts()函數進行搜索,但仍不知道如何從字節獲取YUV值[] – tomi

+0

您從相機接收到的byte []是半平面:先是Y字節(_width * _height),之後 - (_width * _height/4)對V和U字節。正如我所看到的,您打算使用的庫只支持平面YUV(其中U像素和V像素是分開的)。您可能需要根據代碼進行半平面輸入來編寫自己的函數。 –

+0

thx的解釋。 – tomi