camera3_capture_result 構造体リファレンス
#include <
camera3.h
>
データ フィールド |
|
uint32_t | frame_number |
const camera_metadata_t * | 結果 |
uint32_t | num_output_buffers |
const camera3_stream_buffer_t * | output_buffers |
const camera3_stream_buffer_t * | input_buffer |
uint32_t | partial_result |
詳細な説明
camera3_capture_result_t:
カメラ HAL デバイスによる 1 回の撮影/再処理の結果。これは、process_capture_request() で HAL に送信された単一のキャプチャ リクエストに応答して、process_capture_result() で非同期的にフレームワークに送信されます。リクエストごとに HAL によって複数の process_capture_result() 呼び出しが実行される場合があります。
各呼び出し(すべて同じフレーム番号)には、出力バッファのサブセットや結果メタデータが含まれる場合があります。メタデータは、特定のフレーム番号に対して 1 回だけ指定できます。それ以外の呼び出しでは、結果メタデータを NULL に設定する必要があります。
結果構造には、このキャプチャの出力メタデータと、このキャプチャで入力された、または入力される出力バッファのセットが含まれます。各出力バッファには、HAL によってバッファがまだ入力されていない場合に、フレームワークが読み取り前に待機するリリース同期フェンスが付属している場合があります。
>= CAMERA_DEVICE_API_VERSION_3_2:
メタデータは、1 つのフレーム番号に対して複数回指定できます。フレームワークは、各部分結果を合計結果セットに結合して、最終的な結果セットを集計します。
リクエストで入力バッファが指定されている場合、HAL は process_capture_result 呼び出しのいずれかでそのバッファを返す必要があります。この呼び出しでは、メタデータと出力バッファなしで入力バッファのみを返すことができます。同期フェンスは、出力バッファの場合と同じ方法で処理する必要があります。
パフォーマンスに関する考慮事項:
アプリケーションはこれらの部分結果もすぐに受信するため、パイプラインの早い段階で判明した結果を送信する前にパイプライン全体のレイテンシが発生しないように、部分結果を送信することを強くおすすめします。
一般的なユースケースとしては、パイプラインの途中で AF 状態を計算することがあります。状態をすぐにフレームワークに送り返すことで、パフォーマンスが 50% 向上し、自動フォーカスの応答性が向上します。
フィールドのドキュメント
uint32_t frame_number |
フレーム番号は、このキャプチャを一意に識別するために、送信されたリクエストでフレームワークによって設定される増分整数です。また、 camera3_callback_ops_t.notify() に送信される非同期通知でリクエストを識別するためにも使用されます。
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
このキャプチャの入力ストリーム バッファのハンドル。HAL が process_capture_result() を呼び出す時点では、まだ消費されていない可能性があります。フレームワークは、HAL から提供されたリリース同期フェンスを待機してからバッファを再利用します。
HAL は、output_buffers の場合と同じ方法で同期フェンスを処理する必要があります。
リクエストごとに送信できる入力バッファは 1 つのみです。出力バッファと同様に、返される入力バッファの順序は HAL によって維持する必要があります。
パフォーマンスに関する考慮事項:
入力バッファはできる限り早く返す必要があります。HAL が同期フェンスをサポートしている場合は、process_capture_result を呼び出して、同期フェンスを適切に設定して返すことができます。同期フェンスがサポートされていない場合、バッファは消費されたときにのみ返されます。この処理には時間がかかります。HAL は、バッファをより早く返すために、この入力バッファをコピーすることを選択する場合があります。
uint32_t num_output_buffers |
const camera3_stream_buffer_t * output_buffers |
このキャプチャの出力ストリーム バッファのハンドル。HAL が process_capture_result() を呼び出す時点では、まだ入力されていない可能性があります。フレームワークは、HAL から提供されたリリース同期フェンスを待機してからバッファを読み取ります。
HAL は、ストリーム バッファのリリース同期フェンスを有効な同期 fd に設定する必要があります。バッファがすでに入力されている場合は -1 に設定します。
HAL がバッファの処理中にエラーに遭遇し、バッファが入力されていない場合は、バッファのステータス フィールドを CAMERA3_BUFFER_STATUS_ERROR に設定する必要があります。HAL がエラーが発生する前に取得フェンスで待機しなかった場合は、取得フェンスを解放フェンスにコピーして、フレームワークがバッファを再利用する前にフェンスで待機できるようにする必要があります。
すべての出力バッファで、取得フェンスを -1 に設定する必要があります。num_output_buffers がゼロの場合、NULL になることがあります。その場合、出力バッファを提供するために、HAL が少なくとも 1 回以上 process_capture_result を呼び出す必要があります。
フレームの新しいバッファで process_capture_result が呼び出される場合は、対応するストリームの以前のフレームのバッファがすべて配信されている必要があります(フェンスはまだシグナル送信されていない必要があります)。
>= CAMERA_DEVICE_API_VERSION_3_2:
フレームの Gralloc バッファは、対応する SHUTTER-notify の前にフレームワークに送信される場合があります。
パフォーマンスに関する考慮事項:
フレームワークに配信されたバッファは、SHUTTER notify() 呼び出しを介して露出開始のタイムスタンプが受信されるまで、アプリケーション レイヤにディスパッチされません。この呼び出しはできるだけ早くディスパッチすることを強くおすすめします。
uint32_t partial_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
部分的な結果を活用するには、HAL が静的メタデータ android.request.partialResultCount を、フレームごとに送信する部分的な結果の数に設定する必要があります。
部分的な結果を含む新しいキャプチャ結果ごとに、このフィールド(partial_result)を 1 ~ android.request.partialResultCount の範囲内の一意の値に設定する必要があります。
この機能を利用しない HAL は、android.request.partialResultCount または partial_result を 1 以外の値に設定してはなりません。
キャプチャ結果にバッファのみが含まれ、メタデータが含まれていない場合は、この値を 0 に設定する必要があります。
const camera_metadata_t * result |
このキャプチャの結果メタデータ。これには、最終的なキャプチャ パラメータ、キャプチャと後処理のハードウェアの状態、3A アルゴリズムの状態(有効な場合)、有効な統計情報ユニットの出力に関する情報が含まれます。
指定された frame_number で process_capture_result() を呼び出す場合、結果のメタデータを含めることができるのは 1 回のみです。同じ frame_number に対する他のすべての呼び出しでは、これを NULL に設定する必要があります。
結果メタデータの生成中にエラーが発生した場合は、結果は空のメタデータ バッファにする必要があります。また、ERROR_RESULT を指定して notify() を呼び出す必要があります。
>= CAMERA_DEVICE_API_VERSION_3_2:
特定の frame_number で process_capture_result() を複数回呼び出すと、結果のメタデータが含まれる場合があります。
送信される部分メタデータには、特定のフレームの以前の部分結果で返されたメタデータキーを含めないでください。そのフレームの新しい部分結果ごとに、一意の partial_result 値を設定する必要があります。
ERROR_RESULT で notify が呼び出された場合、そのフレームのそれ以降の部分結果はすべてフレームワークによって無視されます。
この構造体のドキュメントは、次のファイルから生成されました。
- hardware/libhardware/include/hardware/ camera3.h