Camera3_capture_result 構造体リファレンス

Camera3_capture_result 構造体リファレンス

#include < camera3.h >

データフィールド

uint32_tフレーム番号
constカメラ_メタデータ_t *結果
uint32_t num_output_buffers
const Camera3_stream_buffer_t *出力バッファ
const Camera3_stream_buffer_t *入力バッファ
uint32_t部分的な結果

詳細な説明

カメラ3_キャプチャ_結果_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 呼び出しの 1 つで入力バッファーを返す必要があり、その呼び出しでは、メタデータと出力バッファーなしで入力バッファーのみを返すことになる場合があります。同期フェンスは、出力バッファの場合と同じ方法で処理する必要があります。

パフォーマンスに関する考慮事項:

アプリケーションはこれらの部分的な結果もすぐに受け取るため、部分的な結果の送信は、パイプラインの非常に早い段階でわかっている結果を送信する前に、パイプライン全体の遅延を回避するために、パフォーマンスの最適化を行うことを強くお勧めします。

典型的な使用例は、パイプラインの途中で AF 状態を計算することです。状態をすぐにフレームワークに戻すことで、パフォーマンスが 50% 向上し、オートフォーカスの応答性が向上します。

ファイルCamera3.h2251行目の定義。

フィールドドキュメント

uint32_t フレーム番号

フレーム番号は、このキャプチャを一意に識別するために、送信されたリクエストのフレームワークによって設定される増分整数です。また、 Camera3_callback_ops_t.notify()に送信される非同期通知内のリクエストを識別するためにも使用されます。

ファイルCamera3.h2258行目の定義。

const Camera3_stream_buffer_t * input_buffer

>= CAMERA_DEVICE_API_VERSION_3_2:

このキャプチャの入力ストリーム バッファのハンドル。 HAL が process_capture_result() を呼び出した時点ではまだ消費されていない可能性があります。フレームワークは、バッファを再利用する前に、HAL によって提供されるリリース同期フェンスを待機します。

HAL は、output_buffer の場合と同じ方法で同期フェンスを処理する必要があります。

リクエストごとに送信できる入力バッファは 1 つだけです。出力バッファと同様に、返された入力バッファの順序は HAL によって維持される必要があります。

パフォーマンスに関する考慮事項:

入力バッファはできるだけ早く返される必要があります。 HAL が同期フェンスをサポートしている場合、process_capture_result を呼び出して、同期フェンスが適切に設定された状態で HAL を返すことができます。同期フェンスがサポートされていない場合、バッファーは消費されたときにのみ返されるため、時間がかかる可能性があります。 HAL は、バッファがより早く返されるように、この入力バッファをコピーすることを選択する場合があります。

ファイルCamera3.h2361行目の定義。

uint32_t num_output_buffers

この結果構造体で返される出力バッファの数。一致するキャプチャ リクエストの数以下である必要があります。これがキャプチャ リクエストのバッファ数よりも少ない場合は、残りの出力バッファをフレームワークに返すために、同じ Frame_number を使用して process_capture_result を少なくとも 1 回以上呼び出す必要があります。構造に有効な結果メタデータが含まれる場合、またはこの結果で入力バッファが返される場合、これはゼロのみになる可能性があります。

ファイルCamera3.h2296行目の定義。

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 通知の前にフレームワークに送信される場合があります。

パフォーマンスに関する考慮事項:

フレームワークに配信されたバッファは、SHUTTER Notice() 呼び出しを介して公開の開始タイムスタンプが受信されるまで、アプリケーション層にディスパッチされません。できるだけ早くその電話を発信することを強くお勧めします。

ファイルCamera3.h2335行目の定義。

uint32_t 部分結果

>= CAMERA_DEVICE_API_VERSION_3_2:

部分的な結果を利用するには、HAL は静的メタデータ android.request.partialResultCount をフレームごとに送信する部分的な結果の数に設定する必要があります。

部分的な結果を含む新しいキャプチャ結果はそれぞれ、このフィールド (partial_result) を 1 から android.request.partialResultCount までの個別の包括的な値に設定する必要があります。

この機能を利用したくない HAL は、android.request.partialResultCount または Partial_result を 1 以外の値に設定してはなりません。

キャプチャ結果にバッファのみが含まれ、メタデータが含まれていない場合、この値は 0 に設定する必要があります。

ファイルCamera3.h2381行目の定義。

const Camera_metadata_t * 結果

このキャプチャの結果メタデータ。これには、最終キャプチャ パラメータ、キャプチャおよび後処理ハードウェアの状態、3A アルゴリズム (有効な場合) の状態、および有効な統計ユニットの出力に関する情報が含まれます。

結果のメタデータを含めることができるのは、指定された Frame_number を使用した process_capture_result() への 1 回の呼び出しのみです。同じframe_numberに対する他のすべての呼び出しでは、これをNULLに設定する必要があります。

結果メタデータの生成でエラーが発生した場合、結果は空のメタデータ バッファである必要があり、notify() を ERROR_RESULT で呼び出す必要があります。

>= CAMERA_DEVICE_API_VERSION_3_2:

特定の Frame_number を使用して process_capture_result() を複数回呼び出すと、結果のメタデータが含まれる場合があります。

送信される部分メタデータには、特定のフレームの以前の部分結果で返されたメタデータ キーが含まれていてはなりません。そのフレームの新しい部分結果ごとに、個別のpartial_result値も設定する必要があります。

Notice が ERROR_RESULT で呼び出された場合、そのフレームのそれ以降の部分的な結果はすべてフレームワークによって無視されます。

ファイルCamera3.h2285行目の定義。


この構造体のドキュメントは次のファイルから生成されました。