Camera2 APIを使用してImageReader(YUV_420_888フォーマット)でカメラのプレビューを設定しようとしています。Android Camera2プレビューの出力サイズ
[4032x3024,4000x3000,3840x2160,3288x2480,3200x2400,2592x1944,2688x1512,2048x1536,1920x1080,1600x1200,1440x1080,1280x960,1280x768,1280x720,1024x768,800x600,864x480,800x480,720x480,640x480,640x360,352x288,320x240,176x144,160x120]
するImageReaderのインスタンスを準備し、キャプチャ要求を繰り返すとCaptureSessionを起動します:
mImageReader = ImageReader.newInstance(W,H, ImageFormat.YUV_420_888,1);
StreamConfigurationMap scmap = camCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size previewSizes[] = scmap.getOutputSizes(ImageReader.class);
私のネクサス5Xは、次のサイズをサポートしています。まず第一に、私は、サポートされているプレビューサイズを選択する必要があります
次に、OnImageAvailableListenerの各プレビューフレーム(さらに処理し、GLESを介して表示するため)を読み込もうとしています。そして、私が知りたい - どのように多くの私が受け取ったYチャネルバイト:
public void onImageAvailable(ImageReader reader) {
ByteBuffer yBuffer = mImageReader.acquireNextImage().getPlanes()[0].getBuffer();
Log.d("Camera2Debug","Y-channel bytes received: " + yBuffer.remaining());
...
}
YUV_420_888画像のためのYチャネルはWが幅x高バイト、含まれている必要があります - 幅、Hを - 考慮する画像の高さです。
問題:いくつかの場合 プレビューがyBufferの実際のサイズが期待値(幅x高)と一致していないサイズをサポート。例えば
:それはデバイスでサポートされている場合でも、私はneccessaryプレビューサイズを使用することはできません。この問題に
Preview Size | Y-bytes received | Y-bytes expected | match
4032x3024 | 12 192 768 | 12 192 768 | yes
1920x1080 | 2 073 600 | 2 073 600 | yes
1440x1080 | 1 589 728 | 1 555 200 | no
1280x960 | 1 228 800 | 1 228 800 | yes
1280x768 | 983 040 | 983 040 | yes
800x600 | 499 168 | 480 000 | no
...
499168
に起因。
私は間違っていますか?
返されたイメージの幅と高さを記録することでさらにデバッグすることができますが、最初にサイズを取得するときに 'scmap.getOutputSizes(ImageFormat.YUV_420_888) 'を使用したいと考えています。ドキュメントによって、 'getOutputSizes(Class >)'は 'PRIVATE'フォーマットのサイズを返します。こちらをご覧ください:https://developer.android.com/reference/android/hardware/camera2/params/StreamConfigurationMap.html#getOutputSizes(java.lang.Class) –
msandiford
ご意見ありがとうございます。 'acquireNextImage()'によって返されたImageのサイズが正しいこと(プレビューサイズに等しい)について言及することを忘れました。問題は 'getPlanes()[0] .getBuffer()'のサイズにあります。 – frumle
解決済み:[リンク](http://stackoverflow.com/questions/30405977/nexus-9-camera2-api-yuv-420-888-vs-getoutputsizes)。 – frumle