カメラ HAL テストのチェックリスト

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このドキュメントでは、Android カメラ ハードウェア アブストラクション レイヤー (HAL) を評価するために使用できるすべてのテストを一覧表示します。これは相手先ブランド供給 (OEM) およびアプリケーション プロセッサ (AP) ベンダーを対象としているため、欠陥を最小限に抑えてカメラ HAL を適切に実装することができます。これは Android 互換性テスト スイート (CTS) への自発的な追加ですが、カメラ テストの対象範囲が大幅に広がり、潜在的なバグが確実に特定されます。

OEM は、これらのテストに合格することで、Android カメラ ハードウェア アブストラクション レイヤー (HAL) 3 インターフェースが適切に統合されているかどうかを検証します。チェックリストのすべての項目に準拠している場合、デバイス実装は Android Camera HAL インターフェースに関して完全であると見なされる場合があります。これにより、デバイスは、カメラ アプリが構築するandroid.hardware.camera2パッケージを適切にサポートできるようになります。

カメラ HAL3 仕様

Android Camera HAL3仕様は、どのデバイスが満たす必要があるかについての信頼できる情報源です。このページには、チェックリストとして使用できるすべてのテストの概要が記載されています。 Camera HAL の実装者 (AP ベンダーなど) は、Camera HAL3 仕様を 1 行ずつ確認し、デバイスがそれに準拠していることを確認する必要があります。

現在の HAL 仕様は、Android 5.0 以降の汎用 Android プラットフォーム開発キット (PDK) 内の次のファイルで定義されています。

カメラテストの種類

以下に、最新の Android カメラで利用できる主な種類のテストと、関連する手順への参照を示します。

これらすべてのテスト タイプについて、以下で詳しく説明します。これらのテストは、OEM が実行することが期待される時系列順に提示されます。

たとえば、デバイスがネイティブ テストに不合格になると、その後の互換性テスト スイート (CTS) テストにも確実に不合格になります。また、デバイスが CTS に失敗した場合、Image Test Suite (ITS) に進んでもほとんど意味がありません。次の一連のテストに進む前に、各テスト タイプの失敗に対処することをお勧めします。

ベンダー テスト スイート (VTS) テスト

Android Vendor Test Suite (VTS) は、HIDL インターフェース レベルで機能するテスト スイートです。 VTS の使用の詳細については、ベンダー テスト スイートを参照してください。

互換性テスト スイート (CTS) テスト

Camera Android Compatibility Test Suite (CTS) テストは、デバイスの互換性に重点を置いています。テスト環境のセットアップについては、 CTS のセットアップを参照してください。

カメラ CTS テストの開始パスはplatform/ctsです。

外部カメラ (USB Web カメラなど) をサポートするデバイスに対してカメラ CTS を実行する場合、CTS の実行時にデバイスを接続しておく必要があります。そうしないと、テストは自動的に失敗します。外部カメラの例としては、 Logitech HD Pro Webcam C920およびMicrosoft LifeCam HD-3000があります。

CTS の実行に関する一般的な手順については、CTSの概要とそのサブページを参照してください。

android.hardware.Camera API の CTS テスト

cts/tests/tests/でこれらのカメラ テストを見つけます。

  • hardware/src/android/hardware/cts/CameraTest.java
  • hardware/src/android/hardware/cts/CameraGLTest.java
  • hardware/src/android/hardware/cts/Camera_SizeTest.java
  • permission/src/android/permission/cts/CameraPermissionTest.java

android.hardware.camera2 API の CTS テスト

cts/tests/tests/でこれらのカメラ テストを見つけます。

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

CTS 検証ツールのカメラ テスト

これらのカメラ テストは、 cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*にあります。

イメージ テスト スイート (ITS) テスト

Camera Image Test Suite (ITS) テストは、画像の正確性に重点を置いています。テストを実行するには、Android デバイスが USB 経由で接続されたワークステーションで Python スクリプトを実行します。

Camera ITS インフラストラクチャとテストは、 cts/apps/CameraITSディレクトリにあります。各テストは、 tests/scene #サブディレクトリにあります。

テスト環境をセットアップするには、
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh
を実行します。

テストをセットアップして実行する方法の詳細については、 cts/apps/CameraITSにあるCameraITS PDF ファイルを参照してください。スクリプトの使用方法については、 testsサブディレクトリにあるtutorial.pyを参照してください。

ITS テストには Linux 環境が必要です。 ITS テストを実行するために必要な特定の Python バージョンの詳細については、リリースのCameraITS PDF ファイルまたは Android 12 のAndroid 12 リリース ノートを参照してください。

静的シーンの推奨設定については、 Camera ITS-in-a-box で説明されています。 sensor_fusion シーンの推奨セットアップについては、 Sensor Fusion Box クイック スタート ガイドで説明されています。

ITS を手動で実行するには、白い壁、灰色のカード、電気スタンドなど、特定の再利用可能なターゲットを使用して単純な物理環境を準備します。 Android デバイスを三脚にマウントし、スクリプトを実行してカメラ機能をテストします。ほとんどのテストは合格または不合格ですが、一部の指標は提供されます。

これらのスクリプトは、CTS でテストされていないシナリオをテストし、HAL 3.2 テスト計画の重要なコンポーネントです。

ITS テストは合格または不合格のいずれかです。各シーン フォルダー内のすべての必須テストに合格する必要があります。義務付けられていないテストは失敗する可能性があり、 CtsVerifier合格としてカウントされます。

シーンとテストの説明については、「カメラ ITS テスト」を参照してください。

メディア フレームワークのテスト

MediaFrameworkTest でカメラ関連のメディア テストをすべてパスします。これらのテストでは、mediaframeworktest.apk が Android デバイスにインストールされている必要があることに注意してください。 make mediaframeworktestし、adb を使用して結果の .apk をインストールする必要があります。コマンドの例を以下に示します。

カメラ関連のメディア フレームワーク テストの開始パスは、 platform/frameworks/base

テストのソース コードは、 frameworks/base/media/tests/MediaFrameworkTest

これらのテストを設定するには:

make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk

name変数は、ベンダーの製品を含むディレクトリを表します。

次のディレクトリまたはそのサブディレクトリですべてのテストを見つけます。

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

各サブディレクトリは、テストのクラスを表します。

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

メディア フレームワーク テストの実行

利用可能なすべてのテストを表示するには::

adb shell pm list instrumentation

これにより、次のような結果が得られます。

instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
(target=com.android.mediaframeworktest)
instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
(target=com.android.mediaframeworktest)

各テスト行からコンポーネント ( instrumentation:(target=com.android.mediaframeworktest)の間) を特定して抽出します。コンポーネントは、ターゲット パッケージ名 ( com.android.mediaframeworktest ) とテスト ランナー名 ( MediaFramework TestRunner ) で構成されます。 MediaFramework TestRunner )。

例えば:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

次に、各コンポーネントを次のようにadb shell am instrumentに渡すことができます。

adb shell am instrument -w component.name

component.nameは、上記の抽出された値と同じです。例えば:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

クラス パスは Java パッケージ + クラス名ですが、インストルメンテーション パッケージは Java パッケージと必ずしも同じではないことに注意してください。コンポーネント名を連結するときは、テスト ランナー クラスが存在する Java パッケージではなく、必ず AndroidManifest.xml パッケージを使用してください。

単一クラスのテストを実行するには、-e クラスを渡します引数、次のように:

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

テスト クラスで 1 つのメソッドのみを実行するには、次のようにクラス名にポンド記号 (#) とメソッド名 (この場合はtestConnectPro ) を追加します。

adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

メディア設定の機能テスト

機能テストの実行例を次に示します。このテストでは、カメラ設定のさまざまな組み合わせの基本機能を検証します。 (つまり、フラッシュ、露出、WB、シーン、画像サイズ、ジオタグ)

テスト コマンドを実行します。

adb shell am instrument -w -r  -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner

メディア統合テスト

統合テストの実行例を次に示します。この場合は、mediaframeworktest/integration/CameraBinderTest.java と mediaframeworktest/CameraStressTestRunner.java です。

adb  shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'

成功した場合、次のような出力が得られます。

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

メディア性能試験

このプレビュー メモリ テストは、カメラ プレビューを 200 回開いて解放します。 20 回の反復ごとに、ps mediaserver のスナップショットが記録され、200 回の反復後に異なるメモリ使用量が比較されます。差が 150kM を超える場合、テストは失敗します。

テスト コマンドを実行します。

adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner

より詳細な出力は、/sdcard/ /sdcard/mediaMemOutput.txtにあります。

メディア単体テスト

単体テストを実行するコマンドはすべて似ています。たとえば、CameraMetadataTest.java の場合、コマンドは次のようになります。

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

メディア ストレス テスト

このテストは、カメラの画像キャプチャとビデオ録画にストレスを与えるためのものです。

テスト コマンドを実行します。

adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner

すべてのテストに合格する必要があります。

手動 TestingCam テスト

TestingCam アプリは、次のチェックを実行して手動で実行する必要があります。 TestingCam のソースは次のとおりです: pdk/apps/TestingCamera/

カメラの傾きによる無限焦点

TestingCam を起動し、プレビューをオンにして、オートフォーカス モードが無限に設定されていることを確認します。 [写真を撮る] ボタンを使用して、カメラを水平、上 (垂直に近い)、下 (垂直に近い) に向けて、遠くの被写体 (少なくとも 10 m 離れた場所) のショットをキャプチャします。上向きのショットの例は、下から見た木の高い葉/枝であり、下向きのショットの例は、建物の屋根から見た通りです。いずれの場合も、遠くの被写体はシャープで焦点が合っている必要があります。ギャラリー ビューでショットを保存して表示すると、ズームインしてシャープネスをより簡単に調べることができます。

VCMアクチュエータを搭載したカメラがこのテストに合格するには、クローズドループAF制御システムが必要になるか、加速度計データを使用してカメラの向きを決定することに基づく何らかのSW補正が必要になることに注意してください。レンズの無限遠位置の信頼できる工場校正も必要になります。

手動 TestingCam2 テスト

TestingCam2 アプリは、次のチェックを実行して手動で実行する必要があります。 TestingCam2 のソースは次のとおりです: pdk/apps/TestingCamera2/

JPEG キャプチャ

TestingCam2 を起動し、 JPEGボタンを押します。ビューファインダー画像の右側に表示される画像は、同じ方向を含むビューファインダーと同じように表示されます。