2013-11-24 62 views
3

我遇到了不同的麻煩,試圖實現一些用Renderscript for Android編寫的代碼。 首先讓我說我的所有SDK包都是最新的22.3版本,包括Ecplise ADT和Build-Tools 19.0.0。使用Renderscript支持庫爲不同的平臺獲取不同的錯誤

我的目的是在廣泛的Android平臺上實現一些高計算的圖像算法,可能從API 8開始。爲此,我在Ecplise項目上設置了對renderscript-v8庫的引用,應用程序的API 19.

我有兩個Android設備進行測試,第一個是Android 4.3(API 18),第二個是Android 2.2(API 8)。運行這段代碼,調用ScriptIntrinsicYuvToRGB(代碼部分從Executing ScriptIntrinsicYuvToRgb問題採取的),當我遇到不同的異常:

/* -------------- 
    global vars */ 

private RenderScript rs; 
private ScriptIntrinsicYuvToRGB rs_YUVtoRGB; 
private Allocation rs_YUVtoRGB_in; 
private Allocation rs_YUVtoRGB_out; 

/* -------------- 
in constructor... */ 

this.rs = RenderScript.create(this.getContext()); 
this.rs_YUVtoRGB = ScriptIntrinsicYuvToRGB.create(this.rs, Element.U8_4(rs)); 

Type.Builder tb_in = new Type.Builder(this.rs, Element.createPixel(this.rs, Element.DataType.UNSIGNED_8, Element.DataKind.PIXEL_YUV)); 
tb_in.setX(prevWidth); 
tb_in.setY(prevHeight); 
tb_in.setMipmaps(false); 
tb_in.setYuvFormat(this.camera.getParameters().getPreviewFormat()); 
this.rs_YUVtoRGB_in = Allocation.createTyped(this.rs, tb_in.create(), Allocation.USAGE_SCRIPT); 

Type.Builder tb_out = new Type.Builder(this.rs, Element.RGBA_8888(this.rs)); 
tb_out.setX(prevWidth); 
tb_out.setY(prevHeight); 
tb_out.setMipmaps(false); 
this.rs_YUVtoRGB_out = Allocation.createTyped (this.rs, tb_out.create(), Allocation.USAGE_SCRIPT); 

/* -------------- 
launching the script... */ 

// byte[] raw... // a YUV image 

this.rs_YUVtoRGB_in.copyFrom(raw); 
this.rs_YUVtoRGB.setInput(this.rs_YUVtoRGB_in); 
this.rs_YUVtoRGB.forEach(this.rs_YUVtoRGB_out); 

int[] framePixels = new int[previewSize.width * previewSize.height]; 
this.rs_YUVtoRGB_out.copyTo(framePixels); // final RGB converted image 

Eclipse的管理來編譯它(它應該意味着庫以及參考)但是...

Android 4.3的失敗在:Type.Builder tb_in = new Type.Builder(this.rs, Element.createPixel(this.rs, Element.DataType.UNSIGNED_8, Element.DataKind.PIXEL_YUV));Unsupported DataKind

11-24 11:17:57.685: E/AndroidRuntime(2494): FATAL EXCEPTION: main 
11-24 11:17:57.685: E/AndroidRuntime(2494): android.renderscript.RSIllegalArgumentException: Unsupported DataKind 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.renderscript.Element.createPixel(Element.java:911) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.support.v8.renderscript.ElementThunker.createPixel(ElementThunker.java:224) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.support.v8.renderscript.Element.createPixel(Element.java:832) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at com.lag.appprj.CameraPreview.setupCamera(CameraPreview.java:167) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at com.lag.appprj.CameraPreview.surfaceCreated(CameraPreview.java:86) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.SurfaceView.updateWindow(SurfaceView.java:571) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.SurfaceView.access$000(SurfaceView.java:86) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:833) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1860) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481) 
11-24 11:17:57.685: E/AndroidRuntime(2494):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 

雖然在Android 2.2它在初始化階段失敗:Error loading RS jni library: java.lang.UnsatisfiedLinkError: Library RSSupport not found

11-24 11:45:45.329: E/AndroidRuntime(2048): FATAL EXCEPTION: main 
11-24 11:45:45.329: E/AndroidRuntime(2048): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lag.appprj/com.lag.appprj.CaptureActivity}: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Library RSSupport not found 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.os.Looper.loop(Looper.java:123) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at java.lang.reflect.Method.invoke(Method.java:521) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at dalvik.system.NativeStart.main(Native Method) 
11-24 11:45:45.329: E/AndroidRuntime(2048): Caused by: android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library: java.lang.UnsatisfiedLinkError: Library RSSupport not found 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.support.v8.renderscript.RenderScript.create(RenderScript.java:945) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.support.v8.renderscript.RenderScript.create(RenderScript.java:982) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.support.v8.renderscript.RenderScript.create(RenderScript.java:968) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at com.lag.appprj.CameraPreview.<init>(CameraPreview.java:80) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at com.lag.appprj.CaptureActivity.onCreate(CaptureActivity.java:34) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-24 11:45:45.329: E/AndroidRuntime(2048):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

感謝您的幫助

回答

4

與createPixel錯誤()是ElementThunker.java確實是個bug。它缺少PIXEL_YUV的情況,所以它最終返回null而不是適當的類型。我將在AOSP中解決這個問題,以及將來的SDK發佈。 (修補程序位於https://android-review.googlesource.com/70810)。

至於庫加載問題,我相信你的其他SO問題,你注意到你的Application.mk文件沒有爲所有體系結構構建(因此不捆綁合適的共享庫)。它在4.3上工作的原因是4.3自動拷貝了libRSSupport.so(儘管它確實不應該)。舊版本的設備顯然不會有這個.so的默認/系統/ lib /副本,所以他們將永遠無法加載它,除非你的版本實際上將它與apk包裝在一起。

+0

也進入'PIXEL_YUV'錯誤。我想沒有多少人在使用它,但它被忽視了這麼久。 – dzeikei

相關問題