私がこれまで開発してきたのは、以下のような標準のDngCreator
スキームを使用してさまざまなデバイスの生の情報を書き出す機能です。ローストライド>幅のカメラでRawをCamera2で省く
ただし、私が遭遇しているデバイス(HTC 10)では、Image
クラスには行の幅が幅よりも大きい平面情報が含まれています。私はこれまで画像で起こりうることを理解していますが、私たちが利用できるSDKを使ってそれを修正する方法を見つけることはできません。
ByteBuffer byteBuffer = ByteBuffer.wrap(cameraImageF.getRawBytes());
byteBuffer.rewind();
dngCreator.writeByteBuffer(new FileOutputStream(rawLoggerFileF),
new Size(cameraImageF.getRawImageSize().getWidth(), cameraImageF.getRawImageSize().getHeight()),
byteBuffer, 0);
Iは、元Image
クラスからバイトに保持され、私はそれを受信し、それらを撮影したとき(これはアプリケーションの点である)場合との間で、いくつかの実質的な計算を行うています。だから、私はImage
を手放さなければならないので、カメラから別のフレームを取得し続けることができます。
このアプローチは、さまざまなデバイス(Samsung S7、Nexus 5、Nexus 6pなど)でうまく機能します。しかし、HTC 10では、ストライドは1行につき16バイト長くなり、あたかも私にDngCreator
を知らせる方法がないように思えます。
ソースコードの下にあるwriteBufferのデフォルト値は、内部でrowStride = width * pixelStride
です。私はパラメータのために異なるストライドを送る能力を持っていません。 rowStrideはデフォルトと等しくありません。
dngCreator.saveImage(Outputstream, Image)
は、バッファに書き出すときに内部Imageのストライドを使用します。しかし、私は解放する必要があり、クローン可能なオブジェクトではないので、カメラのImage
クラスを保持することはできません。
rowStride> widthの写真の場合、有効な.dngの書き方を少し紛失して理解しようとしています。
ありがとう、私はこのルートに行く必要があります。多分私は 'maxCount'パラメータとその目的が何のためにあるのか理解できませんでした。それがどのように機能するのかということであれば、 'Image'クラスを維持するために、私のコンテナを変更してそれを調べてみましょう。 –
ImageReaderのmaxCount引数は、システムに戻す前に同時に保持できる画像の数を定義します。 ImageReaderは、下の循環バッファです。より多くの画像を保持するほど、メモリ消費量は大きくなります。また、イメージをすばやく解放しないと、カメラは次のキャプチャのイメージデータを置くことができません(停止します)。したがって、イメージをキャプチャするのと同じ速度でイメージをリリースする必要がありますが、maxCountを増やすと、各イメージを処理パイプラインで長く保持できます。 –