Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

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

このドキュメントでは、Android カメラ ハードウェア抽象化レイヤ(HAL)の評価に使用できるすべてのテストを示します。これは、不具合を極力排除してカメラ HAL を適切に実装できるように、OEM およびアプリケーション プロセッサ(AP)ベンダーを対象としています。このテストは、Android 互換性テストスイート(CTS)に自発的に追加されたものですが、カメラのテスト範囲を大幅に拡大し、潜在的なバグの発見に役立ちます。

これらのテストに合格することにより、OEM は Android カメラ ハードウェア抽象化レイヤ(HAL)3 インターフェースを適切に実装していることを確認できます。チェックリストのすべての項目に適合していた場合、デバイスの実装は Android カメラ HAL インターフェースに関して完全だとみなされます。これにより、デバイスがカメラアプリのベースとなる android.hardware.camera2 パッケージを適切にサポートできるようになります。

カメラ HAL3 仕様

Android カメラ HAL3 仕様は、デバイスの要件に関する信頼できる情報源です。このページでは、チェックリストとして使用できるすべてのテストの概要を説明しています。カメラ HAL を実装する AP ベンダーなどは、カメラ HAL3 仕様を 1 行ずつ追いながら、それにデバイスが適合していることを確認する必要があります。

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

カメラのテストの種類

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

これらのテストの全種類について、以下で詳しく説明します。テストを説明する順序は、OEM がこの順序で実行するのが望ましい順序となっています。

たとえば、デバイスがネイティブ テストでエラーになると、次の互換性テストスイート(CTS)でもエラーになります。CTS でエラーになった場合、画像テストスイート(ITS)に進んでもほとんどが無駄になります。次のテストに進む前に、それぞれの種類のテストでエラーを解決することをおすすめします。

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

Android ベンダー テストスイート(VTS)は、HIDL インターフェースのレベルで動作するテストスイートです。VTS の使用方法については、ベンダー テストスイートのページをご覧ください。

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

カメラ Android 互換性テストスイート(CTS)テストは、デバイスの適合性に絞ったテストです。テスト環境の設定については、CTS のセットアップのページをご覧ください。

カメラ CTS テストは、platform/cts 以下にあります。

カメラ CTS を USB カメラなどの外部カメラをサポートするデバイスで使用する場合は、CTS を実行するときにデバイスが接続されている必要があり、未接続の場合は自動的にエラーとなります。外部カメラには、Logitech HD Pro Webcam C920Microsoft 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)のテスト

カメラ画像テストスイート(ITS)のテストは、画像の正確性に絞ったテストです。テストを実行するには、USB 経由で Android デバイスに接続したワークステーション上で Python スクリプトを実行します。

カメラ 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 CtsVerifier.apk
    cd CameraITS
    source build/envsetup.sh
    

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

ITS 静的テスト(シーン 0~5)は、必要な Python 2.7 環境があれば、どのオペレーティング システムでも実行できます。これに対して、Sensor Fusion Box を使用する sensor_fusion テストは、Linux オペレーティング システムで実行する必要があります。

シーン 0~4 のための推奨セットアップは、Camera ITS-in-a-Box で説明しています。sensor_fusion シーンの推奨セットアップについては、Sensor Fusion Box クイック スタートガイドをご覧ください。

ITS を手動で実行するには、白い壁、標準反射板、卓上スタンドなど、特定の再利用可能なターゲットを備えた簡単な物理環境を準備します。Android デバイスを三脚に取り付け、スクリプトを実行してカメラの機能をテストします。ほとんどのテストは合格か不合格かですが、指標が示されるテストもあります。

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

ITS テストは、合格か不合格かのいずれかです。各シーンのフォルダにある必須のテストには、すべて合格しなければなりません。必須でないテストは不合格でもよく、CtsVerifier で合格としてカウントされます。

シーン 0 からシーン 4 のテスト

これらのシーンは、ITS のテストの大部分を占め、PDF ファイルとして scene フォルダにあります。これらのテストを自動化するには、Camera ITS-in-a-box システムを使用します。

  • シーン 0: セットアップ不要です。
  • シーン 1: 標準反射板が必要です。
  • シーン 2: 顔のシーンが必要です。
  • シーン 3: ISO12233 チャートです。
  • シーン 4: 四角形の中に円が描かれたカスタムシーンです。

シーン 5 のテスト

シーン 5 のテストでは、カメラの上にディフューザーを装着する必要があります。

センサー フュージョンのテスト

センサー フュージョンのテストでは、AR と VR のアプリケーションのために、カメラとジャイロスコープのタイムスタンプのずれをテストする、特定のカメラモーションが必要です。ジャイロスコープを備えていない場合、または REALTIME パラメータが有効になっていない場合、このテストはスキップされます。sensor_fusion テストは、Sensor Fusion Box を使用して自動化できます。

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

MediaFrameworkTest ではカメラ関連のメディアテストをすべて実行します。このテストでは、mediaframeworktest.apk を Android デバイスにインストールする必要があります。make mediaframeworktest を実行し、作成された .apk を adb を使用してインストールする必要があります。コマンドの例を以下に示します。

カメラ関連のメディア フレームワーク テストは、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)とテストランナー名(MediaFrameworkTestRunner)から構成されます。

たとえば、次のようになります。

    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 パッケージを使用してください。

1 つのクラスのテストを実行するには、次のように -e class 引数を渡します。

    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
    

メディア設定機能テスト

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

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

    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 回繰り返した後でメモリ使用量の差が比較されます。差が 150 kM より大きい場合、テストは不合格となります。

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

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

出力の詳細は /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 を起動し、プレビューをオンにして、オート フォーカス モードが無限遠に設定されていることを確認します。[Take picture] ボタンを使用して、遠くの被写体(10 メートル以上)を、カメラを水平、上向き(ほぼ垂直)、下向き(ほぼ垂直)にして撮影します。上向きの例としては、下から木の高い位置にある枝葉を撮影するなどがあります。下向きの例としては、建物の屋上から路面を撮影するなどがあります。すべての場合で、遠くの被写体に焦点が鮮明にあたっている必要があります。画像をギャラリー ビューに保存して表示すると、ズームインして鮮明度を簡単に確認できます。

VCM アクチュエーターを備えたカメラでこのテストに合格するには、閉ループ AF 制御システム、またはカメラの向きを知るために加速度計のデータを使用するソフトウェア補正が必要となります。工場出荷時に行われるレンズの無限遠位置に関する較正が信頼できることも必要です。

手動 TestingCam2 テスト

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

JPEG キャプチャ

TestingCam2 を起動し、[JPEG] ボタンを押します。ビュー ファインダー画像の右側に表示される画像は、向きを含めてビューファインダーと同じになる必要があります。