1

USING_IO_INPUT フラグで作成された割り当てを使用して、カメラから画像を取得しようとしています。以下のように設定しています

Type.Builder yuvType = new Type.Builder(mRS, Element.YUV(mRS));
                yuvType.setYuvFormat(imageReaderFormat);
                yuvType.setX(mCameraWidth).setY(mCameraHeight);
mAllocation = Allocation.createTyped(mRS, yuvType.create(), Allocation
                        .MipmapControl.MIPMAP_NONE,
                        Allocation.USAGE_IO_INPUT | Allocation.USAGE_SCRIPT);
mAllocation.setOnBufferAvailableListener(mOnBufferAllocationAvailable);

割り当てサーフェスをプレビュー セッションに追加し、非常に単純な関数へのコールバックを取得しています。

public void onBufferAvailable(Allocation allocation) {
     allocation.ioReceive();
     //mPixels is properly initialised
     allocation.copyTo(mPixels);
}

このセットアップは Nexus 5X では機能しますが、5.1.1 を実行している Nexus 4 では失敗します。コールバックを呼び出すallocation.ioReceive()と、ドライバーからいくつかの警告が出力され、Allocation からバイト配列にコピーすると、ガベージがコピーされます。

W/Adreno-RS: <rsdVendorAllocationUnMapQCOM:394>: NOT Found allocation map for alloc 0xa1761000
W/Adreno-GSL: <gsl_ldd_control:427>: ioctl fd 25 code 0xc01c0915 (IOCTL_KGSL_MAP_USER_MEM) failed: errno 22 Invalid argument
W/Adreno-RS: <rsdVendorAllocationMapQCOM:288>: gsl_memory_map_fd failed -5 hostptr: 0xa0112000 sz: 0 offset: 0 flags: 0x10c0b00 alloc: 0xa1761000

onBufferAvailable「RSMessageThread」で呼び出されますが、バックグラウンド スレッドでカメラを実行しています。

この問題は、割り当てとカメラ プレビューの設定方法に関連していますか、それともドライバーのバグですか?

4

2 に答える 2

0

Samsung Galaxy S4 (スマートフォン) の Android バージョン 5.0 (API 21) で同じエラー メッセージが表示されますが、Samsung Galaxy Tab 5 (タブレット) の Android バージョン 5.1 で camera2 と renderscript を使用する同一のアプリケーションでは表示されません。 1 (API 22)。これは、デバイス ベンダー側の初期の実装の問題であると想定しています。

于 2016-04-05T01:29:54.163 に答える
0

公式のHDR ビューファインダーの例を試しましたか? これが Nexus 4 で機能する場合は、その例を調べることができます。

そうでない場合は、私の実装YUV_420_888 を使用して、YUV 割り当てではなく、3 つのイメージ プレーンからの情報を使用したバイト割り当てを使用して、別のアプローチを使用するビットマップを試すことができます。

于 2016-04-05T21:17:12.953 に答える