این صفحه فهرست جامعی از تستهای مجموعه تست تصویر دوربین (ITS) را ارائه میکند که بخشی از تأییدکننده مجموعه تست سازگاری Android (CTS) است. تستهای ITS تستهای عملکردی هستند، به این معنی که کیفیت تصویر را اندازهگیری نمیکنند، اما همه عملکردهای دوربین تبلیغاتی همانطور که انتظار میرود کار میکنند. این سند به توسعهدهندگان و آزمایشکنندگان اجازه میدهد بفهمند که آزمایشهای فردی چه میکنند و چگونه خطاهای آزمایش را اشکالزدایی کنند.
تست ها بر اساس صحنه به صورت زیر گروه بندی می شوند:
- صحنه 0 : گرفتن ابرداده، لرزش، ژیروسکوپ، لرزش
- صحنه 1: نوردهی، حساسیت، جبران EV، YUV در مقابل JPEG/RAW
- صحنه 2 : تشخیص چهره
- صحنه 3 : بهبود لبه، حرکت لنز
- صحنه 4 : نسبت تصویر، برش، میدان دید
- صحنه 5 : سایه زنی لنز
- صحنه 6 : زوم
- sensor_fusion : تنظیم زمان دوربین/ژیروسکوپ
برای توضیح هر صحنه به بخش های جداگانه مراجعه کنید.
صحنه 0
تست های Scene0 به اطلاعات صحنه خاصی نیاز ندارند. اما برای تست ژیروسکوپ و لرزش گوشی باید ثابت باشد.
test_burst_capture
تأیید می کند که کل خط لوله ضبط می تواند با سرعت ضبط کامل و زمان CPU مطابقت داشته باشد.
API های آزمایش شده:
Pass: مجموعهای از تصاویر در اندازه کامل را میگیرد و دوربین به اندازه کافی سریع است تا از مهلت زمانی جلوگیری کند.
test_capture_result_dump
آزمایش می کند که نتیجه گرفتن از یک عکس دستی برگردانده می شود و سپس آن را تخلیه می کند.
API های آزمایش شده:
Pass: ضبط را کامل می کند و نتایج ضبط را تخلیه می کند.
test_gyro_bias
آزمایش می کند که آیا ژیروسکوپ خروجی ثابتی دارد که دستگاه ثابت است یا خیر. داده ها به صورت میانگین 20 نقطه داده رسم می شوند.
API های آزمایش شده:
پاس: دلتای ژیروسکوپ در طول زمان کمتر از 0.01 است.
test_gyro_bias_plot.png
test_jitter
لرزش را در مهرهای زمانی دوربین اندازه گیری می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
پاس: حداقل 30 میلیثانیه دلتا بین فریمها وجود دارد.
test_jitter_plot.png (به محدوده کوچک محور y توجه کنید. Jitter در واقع در این نمودار کوچک است.)
test_metadata
اعتبار ورودی های فراداده را آزمایش می کند. به نتایج عکسبرداری و ویژگیهای دوربین به اشیاء نگاه میکند. این آزمایش از نوردهی و دریافت مقادیر auto_capture_request
استفاده می کند زیرا محتوای تصویر مهم نیست.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
پاس: سطح سختافزار، RollingShutterSkew، برچسبهای frameDuration
زمان، منبع timestampSource
، croppingType
، rollingShutterSkew
، pixel_pitch
، FOV، فاصله blackLevelPattern
موجود هستند و مقادیر معتبری دارند.
test_param_sensitivity_burst
آزمایش می کند که پارامتر android.sensor.sensitivity
به درستی به صورت پشت سر هم اعمال می شود. فقط فراداده های خروجی را بررسی می کند.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
پاس: داده های خروجی دارای تحمل خطا کمتر از 0.2٪ هستند.
test_read_write
آزمایش می کند که دستگاه با بازخوانی فراداده ضبط، مقادیر نوردهی و افزایش صحیح را می نویسد.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
پاس: خواندن و نوشتن مقادیر در تمام عکس ها مطابقت دارند.
test_sensor_events
آزمایش می کند که دستگاه پرس و جو می کند و رویدادهای حسگر را برای دستگاه هایی که پشتیبانی از همجوشی حسگر را تبلیغ می کنند چاپ می کند. سنسورهای مورد انتظار شتاب سنج، ژیروسکوپ و مغناطیس سنج هستند. این تست فقط در صورتی کار می کند که صفحه نمایش روشن باشد، یعنی دستگاه در حالت آماده به کار نیست.
API های آزمایش شده:
پاس: رویدادها برای هر سنسور دریافت می شود.
test_solid_color_test_pattern
تست هایی که الگوهای تست رنگ ثابت به درستی برای بی صدا شدن دوربین ایجاد می شوند. اگر قطع دوربین پشتیبانی می شود، الگوهای تست رنگ ثابت باید پشتیبانی شوند. اگر بیصدا کردن دوربین پشتیبانی نمیشود، الگوهای تست رنگ ثابت فقط در صورتی آزمایش میشوند که قابلیت تبلیغ شده باشد.
اگر تصاویر RAW پشتیبانی می شوند، تخصیص رنگ نیز آزمایش می شود. رنگ های تست شده مشکی، سفید، قرمز، آبی و سبز هستند. برای دوربین هایی که از تصاویر RAW پشتیبانی نمی کنند، فقط مشکی تست می شود.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
پاس: الگوهای تست جامد پشتیبانی شده رنگ صحیح هستند و واریانس کمی در تصویر وجود دارد.
test_test_pattern
پارامتر android.sensor.testPatternMode
را برای گرفتن فریمها برای هر الگوی آزمایشی معتبر آزمایش میکند و بررسی میکند که فریمها برای رنگهای ثابت و نوارهای رنگی درست تولید شدهاند. این آزمون شامل مراحل زیر است:
- تصاویر را برای همه الگوهای تست پشتیبانی شده می گیرد.
- یک بررسی صحت ساده برای الگوی تست رنگ ثابت و نوارهای رنگی انجام می دهد.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
پاس: الگوهای تست پشتیبانی شده به درستی تولید می شوند.
test_test_patterns_2.jpg
test_tonemap_curve
تبدیل الگوی آزمایشی از RAW به YUV را با نقشه خطی آزمایش می کند. این آزمایش به android.sensor.testPatternMode = 2
(COLOR_BARS) نیاز دارد تا یک الگوی تصویر عالی برای تبدیل نقشه تن ایجاد کند. اطمینان حاصل می کند که خط لوله دارای خروجی های رنگی مناسب با نقشه خطی و ورودی تصویر ایده آل است (متکی به test_test_patterns
).
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
پاس: YUV و RAW شبیه یکدیگر هستند.
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
آزمایش می کند که آیا رویدادهای حسگر تصویر و حرکت در یک حوزه زمانی هستند یا خیر.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
پاس: مهرهای زمانی حرکت بین دو مهر زمانی تصویر هستند.
test_vibration_restriction
آزمایش می کند که آیا لرزش دستگاه مطابق انتظار عمل می کند یا خیر.
API های آزمایش شده:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
پاس: هنگامی که توسط API محدودیت صوتی دوربین بیصدا میشود، دستگاه نمیلرزد.
صحنه 1
صحنه 1 یک نمودار خاکستری است. نمودار خاکستری باید مرکز 30 درصد میدان دید دوربین را پوشش دهد. انتظار می رود نمودار خاکستری 3A (نور خودکار، تعادل رنگ سفید خودکار، فوکوس خودکار) را به طور متوسط به چالش بکشد زیرا منطقه مرکزی هیچ ویژگی ندارد. با این حال، درخواست عکسبرداری کل صحنه را مشخص می کند که شامل ویژگی های کافی برای همگرایی 3A است.
دوربین های RFoV را می توان در دستگاه تست WFoV یا RFoV آزمایش کرد. اگر یک دوربین RFoV در دستگاه تست WFoV آزمایش شود، نمودار با ⅔ مقیاس می شود تا از برخی مرزهای نمودار خاکستری در FoV اطمینان حاصل شود تا به همگرایی 3A کمک کند.
صحنه 1: نمودار اندازه کامل (سمت چپ). ⅔ نمودار مقیاس شده (راست).
test_3a
همگرایی 3A را با یک هدف نسبتاً چالش برانگیز آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: 3A همگرا می شود و مقادیر 3A برگشتی معتبر هستند.
test_ae_af
الگوریتم های نوردهی خودکار 3A (AE) و فوکوس خودکار (AF) را به صورت جداگانه آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
پاس: 3A همگرا می شود و مقادیر 3A برگشتی قانونی هستند.
test_ae_precapture_trigger
هنگام استفاده از ماشه پیش گرفتن، دستگاه حالت AE را آزمایش می کند. پنج درخواست دستی را با AE غیرفعال می گیرد. آخرین درخواست دارای یک ماشه Precapture AE است که باید نادیده گرفته شود زیرا AE غیرفعال است.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
پاس: AE همگرا می شود.
test_auto_vs_manual
تستهایی که عکسهای خودکار و دستی گرفتهاند یکسان هستند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
پاس: افزایش و تبدیل دستی تراز سفیدی گزارش شده در هر نتیجه عکسبرداری با estimate
تعادل رنگ سفید خودکار از الگوریتم 3A دوربین مطابقت دارد.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
تست_سیاه_سفید
تست هایی که دستگاه تصاویر سیاه و سفید کامل تولید می کند. دو عکس می گیرد، اولی با بهره بسیار کم و نوردهی کوتاه که منجر به یک عکس سیاه می شود و دومی با بهره بسیار زیاد و نوردهی طولانی که منجر به یک عکس سفید می شود.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: تصاویر سیاه و سفید تولید می کند. کانال های اشباع شده تصاویر سفید دارای مقادیر RGB [255، 255، 255] با حاشیه خطای کمتر از 1٪ اختلاف هستند.
![]() | ![]() | |
test_black_white_black.jpg | test_black_white_white.jpg |
test_black_white_plot_means.png
test_burst_sameness_manual
5 بار پشت سر هم از 50 عکس با تنظیمات ضبط دستی می گیرد و بررسی می کند که همه آنها یکسان هستند. از این آزمایش می توان برای شناسایی فریم های پراکنده ای که به روش متفاوتی پردازش می شوند یا مصنوعاتی دارند استفاده کرد.
API های آزمایش شده:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
پاس: تصاویر از نظر بصری و در مقادیر RGB یکسان هستند.
Fail: یک افزایش یا کاهش نمودار میانگین RGB را در ابتدای هر انفجار نشان می دهد
- تحمل برای
first_API_level
<30 3٪ است - تحمل برای
first_API_level
>= 30 2٪ است
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
test_capture_result
آزمایش می کند که داده های معتبر در اشیاء CaptureResult
. عکسبرداری خودکار، دستی و خودکار انجام می دهد.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
پاس: ابرداده برای همه عکسبرداریها معتبر است و تنظیمات دستی در ضبط خودکار دوم به بیرون درز نمیکنند. تصحیح سایه لنز را برای عکسبرداری ترسیم می کند.
test_capture_result_plot_lsc_auto_ch0.png
test_crop_region_raw
آزمایش می کند که جریان های RAW قابل برش نیستند.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
پاس: تصاویر YUV در مرکز برش داده می شوند اما تصاویر خام نه.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
آزمایش هایی که مناطق کشت کار می کنند. یک تصویر کامل می گیرد و وصله هایی از 5 ناحیه مختلف (گوشه ها و مرکز) ایجاد می کند. با مجموعه برش برای 5 منطقه عکس می گیرد. مقادیر پچ و برش تصویر را با هم مقایسه می کند.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Pass: تصویر ناحیه برش خورده با وصله مربوط به تصویر برش مطابقت دارد.
test_dng_noise_model
بررسی می کند که پارامترهای مدل خام DNG صحیح هستند. طرح، واریانس اندازهگیری شده یک وصله مرکزی کارت خاکستری را در عکسهای خام گرفتهشده در طیف وسیعی از حساسیتها نشان میدهد و این مقادیر را با واریانسی که در هر حساسیت انتظار میرود توسط مدل نویز DNG در HAL دوربین مقایسه میکند (بر اساس پارامترهای O,S در اشیاء نتیجه گرفتن بازگردانده می شوند). برای جزئیات بیشتر در مورد مدل نویز DNG، سند زیر را در مورد مدل نویز DNG دانلود کنید.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
پاس: پارامترهای مدل خام DNG صحیح است. مقادیر RGB مورد انتظار با مقادیر واقعی RGB اندازه گیری شده مطابقت دارد.
test_dng_noise_model_plog.png
test_ev_compensation_advanced
آزمایش هایی که نشان می دهد جبران ارزش نوردهی (EV) اعمال می شود. این آزمایش نوردهی را در هشت مرحله افزایش می دهد و روشنایی اندازه گیری شده را در مقابل روشنایی مورد انتظار بررسی می کند. مقادیر مورد انتظار از روشنایی تصویر بدون اعمال جبران EV محاسبه می شود و اگر مقادیر محاسبه شده از محدوده مقدار واقعی تصویر بیشتر شود، مقدار مورد انتظار اشباع می شود. اگر مقادیر مورد انتظار و مقادیر اندازهگیری شده مطابقت نداشته باشند یا تصاویر در عرض پنج مرحله بیش از حد نوردهی کنند، آزمایش با شکست مواجه میشود.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
پاس: تصاویر افزایش نوردهی را بدون نوردهی بیش از حد در پنج مرحله نشان میدهند.
test_ev_compensation_advanced_plot_means.png
test_ev_compensation_basic
آزمایش می کند که جبران EV با استفاده از محدوده ایجاد شده با CONTROL_AE_COMPENSATION_STEP
می شود. در هر مقدار جبرانی هشت فریم گرفته می شود.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
پاس: با افزایش تنظیم جبران EV، میزان عکسبرداری افزایش مییابد، و هشت فریم ثبتشده برای هر تنظیم جبران EV دارای مقادیر luma پایدار هستند.
test_ev_compensation_basic.png
test_exposure
تست هایی که نشان می دهد نوردهی ثابت به عنوان ISO و زمان نوردهی متفاوت است. مجموعهای از عکسها را میگیرد که ISO و زمان نوردهی برای متعادل کردن یکدیگر انتخاب شدهاند. نتایج باید روشنایی یکسانی داشته باشند، اما در طول توالی تصویر باید نویزتر شود. تأیید می کند که مقادیر میانگین پیکسل های نمونه به یکدیگر نزدیک هستند. اطمینان حاصل می کند که تصاویر روی 0 یا 1 قرار نگرفته اند (که آنها را مانند خطوط صاف می کند). با تنظیم پرچم debug
در فایل پیکربندی، آزمایش را می توان با تصاویر RAW نیز اجرا کرد.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
پاس: تصاویر دارای روشنایی یکسان هستند، اما با ISO بالاتر نویزتر می شوند. صفحات RGB زمانی که مقدار ISO*exposure در فضای بهره آزمایش شده ثابت باشد صاف هستند.
test_exposure_plot_means.png
![]() | ![]() | |
test_exposure_mult=1.00.jpg | test_exposure_mult=64.00.jpg |
test_jpeg
آزمایشهایی که تصاویر YUV و تصاویر JPEG دستگاه را تبدیل کردهاند یکسان به نظر میرسند. تست مرکز 10% تصویر را می گیرد و مقدار RGB را محاسبه می کند و مطابقت آنها را تأیید می کند.
API های آزمایش شده:
Pass: میانگین تفاوت RGB بین هر تصویر کمتر از 3٪ است.
![]() | ![]() | |
test_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
test_latching
تست هایی که تنظیمات (نور و افزایش) روی قاب سمت راست دوربین های FULL
و LEVEL_3
. یک سری عکس با استفاده از درخواست های پشت سر هم می گیرد و پارامترهای درخواست عکس برداری را بین عکس ها تغییر می دهد. بررسی می کند که تصاویر دارای ویژگی های مورد انتظار هستند.
API های آزمایش شده:
پاس: تصاویر [2، 3، 6، 8، 10، 12، 13] ISO یا نوردهی را افزایش داده اند و با میانگین RGB بالاتر در test_latching_plot_means.png
نشان داده می شوند.
![]() | ![]() | ![]() | |
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
![]() | |||
test_latching_i=12.jpg |
test_latching_plot_means.png
تست_خطی
آزمایش می کند که پردازش دستگاه را می توان به پیکسل های خطی معکوس کرد. دنباله ای از عکس ها را با دستگاه به سمت یک هدف یکنواخت می گیرد.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
پاس: مقادیر R، G، B باید به صورت خطی با افزایش حساسیت افزایش یابد.
test_linearity_plot_means.png
test_locked_burst
تست قفل 3A و انفجار YUV (با استفاده از تنظیم خودکار). این آزمون برای قبولی در دستگاههای محدودی طراحی شده است که MANUAL_SENSOR
یا PER_FRAME_CONTROLS
. تست سازگاری تصویر YUV را بررسی می کند در حالی که بررسی نرخ فریم در CTS است.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
پاس: عکسها یکدست به نظر میرسند.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
test_multi_camera_match
آزمایش میکند تا ببیند آیا دوربینهای چندگانه روی دستگاهها مقادیر RGB مشابهی برای یک پچ خاکستری میدهند یا خیر.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#LENS_FOCAL_LENGTH
پاس: دوربینهای مختلف مقادیر RGB مشابهی را برای همان پچ خاکستری تولید میکنند.
test_multi_camera+match_yuv_fl=4.38.jpg
test_param_color_correction
آزمایش می کند که پارامترهای android.colorCorrection.*
هنگام تنظیم اعمال می شوند. عکس هایی با مقادیر تبدیل و افزایش متفاوت می گیرد، و آزمایش می کند که به نسبت متفاوت به نظر می رسند. تبدیل و سود به گونه ای انتخاب می شوند که خروجی به طور فزاینده ای قرمز یا آبی شود. از نقشه خطی استفاده می کند. نگاشت تن تکنیکی است که در پردازش تصویر برای نگاشت یک مجموعه از رنگ ها به مجموعه ای دیگر به منظور تقریب ظاهر تصاویر با دامنه دینامیکی بالا در محیطی که محدوده دینامیکی محدودتری دارد استفاده می شود.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
پاس: مقادیر R و B با توجه به تبدیل افزایش می یابد.
test_param_color_correction_plot_means.png
*محور x درخواست های ضبط است: 0 = وحدت، 1 = تقویت قرمز، 2 = تقویت آبی
test_param_color_correction_req=0.jpg
test_param_color_correctness_req=1.jpg (تقویت R)
test_param_color_correction_req=2.jpg (تقویت B)
test_param_exposure_time
آزمایش می کند که پارامتر android.sensor.exposureTime
اعمال می شود.
API های آزمایش شده:
پاس: هر شات روشن تر از عکس قبلی است.
test_param_exposure_time_frame0.jpg
test_param_exposure_time_plot.png
test_param_flash_mode
آزمایش می کند که پارامتر android.flash.mode
اعمال می شود. به صورت دستی نوردهی را در سمت تاریک قرار می دهد، به طوری که مشخص است که فلاش روشن شده است یا نه، و از یک نقشه خطی استفاده می کند. مرکز را با تصویر کاشی بررسی می کند تا ببیند آیا یک گرادیان بزرگ ایجاد شده است تا بررسی کند که فلاش روشن شده است یا خیر.
API های آزمایش شده:
Pass: مرکز تصویر کاشی دارای یک گرادیان بزرگ است به این معنی که فلاش شلیک می شود.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
test_param_noise_reduction
آزمایش می کند که هنگام تنظیم پارامتر android.noiseReduction.mode
به درستی اعمال شود. با دوربین کم نور عکس می گیرد. از یک بهره آنالوگ بالا برای اطمینان از نویز بودن تصویر گرفته شده استفاده می کند. سه عکس برای NR خاموش، "سریع" و "کیفیت بالا" می گیرد. همچنین تصویری با بهره کم و NR خاموش می گیرد و از واریانس آن به عنوان خط پایه استفاده می کند. هرچه SNR (نسبت سیگنال به نویز) بالاتر باشد، کیفیت تصویر بهتر است.
API های آزمایش شده:
پاس: SNR با حالت های مختلف کاهش نویز متفاوت است و مانند نمودار زیر رفتار می کند.
test_param_noise_reduction_plot_SNRs.png
0: OFF، 1: FAST، 2: HQ، 3: MIN، 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_sensitivity
آزمایش هایی که پارامتر android.sensor.sensitivity
اعمال می شود. این تست حساسیت را در 5 مرحله با نوردهی ثابت برای هر شات افزایش می دهد.
API های آزمایش شده:
پاس: میانگین RGB مرکز 10٪ با افزایش حساسیت روشن تر می شود.
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
test_param_shading_mode
آزمایش می کند که پارامتر android.shading.mode
اعمال می شود.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
پاس: حالتهای سایهزنی تغییر میکنند و نقشههای سایهزنی لنز مطابق انتظار اصلاح میشوند.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
آزمایش هایی که پارامتر android.tonemap.mode اعمال می شود. منحنی های نقشه رنگی مختلف را برای هر کانال R، G، B اعمال می کند و بررسی می کند که تصاویر خروجی مطابق انتظار اصلاح شده باشند. این آزمون از دو تست تست 1 و تست 2 تشکیل شده است.
API های آزمایش شده:
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
عبور:
- test1: هر دو تصویر دارای نقشه خطی هستند، اما n=1 دارای شیب تندتری است. کانال G (سبز) برای تصویر n=1 روشن تر است.
- test2: نقشه تن یکسان، اما طول متفاوت. تصاویر هم همینطور.
![]() | ![]() | |
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
test_post_raw_sensitivity_boost
افزایش حساسیت RAW را بررسی می کند. مجموعه ای از تصاویر RAW و YUV را با حساسیت های مختلف می گیرد، ترکیب تقویت حساسیت RAW را پست می کند و بررسی می کند که آیا میانگین پیکسل خروجی با تنظیمات درخواست مطابقت دارد یا خیر.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
پاس: با افزایش بوست، تصاویر RAW تیره تر می شوند در حالی که روشنایی تصاویر YUV ثابت می مانند
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
مجموعه ای از تصاویر خام را با افزایش افزایش می دهد و نویز را اندازه گیری می کند. فقط به صورت خام و به صورت رگباری عکس می گیرد.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
پاس: هر شات نویزتر از شلیک قبلی است، زیرا بهره در حال افزایش است.
از واریانس سلول شبکه آمار مرکز استفاده می کند.
test_raw_burst_sensitivity_variance.png
test_raw_exposure
مجموعه ای از تصاویر خام را با افزایش زمان نوردهی می گیرد و مقادیر پیکسل را اندازه گیری می کند.
API های آزمایش شده:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Pass: افزایش ISO (بهره) پیکسل ها را نسبت به نور حساس تر می کند، بنابراین نمودار به سمت چپ حرکت می کند.
test_raw_exposure_s=55.png
(10⁰ 1 ms، 101 10 ms، 10-1 0.1 ms است)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_sensitivity
مجموعه ای از تصاویر خام را با افزایش حساسیت می گیرد و نویز (واریانس) در مرکز 10% تصویر را اندازه گیری می کند. آزمایش هایی که نشان می دهد هر شات نویزتر از عکس قبلی است.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
پاس: با هر ضربه واریانس افزایش می یابد.
test_raw_sensitivity_variance.png
test_reprocess_noise_reduction
تست هایی که android.noiseReduction.mode
برای پردازش مجدد درخواست ها اعمال می شود. تصاویر پردازش شده را با دوربین کم نور می گیرد. از یک بهره آنالوگ بالا برای اطمینان از نویز بودن تصویر ضبط شده استفاده می کند. سه تصویر پردازش شده را برای NR خاموش، "سریع" و "کیفیت بالا" می گیرد. یک تصویر پردازش مجدد با بهره کم و NR خاموش می گیرد و از واریانس آن به عنوان خط پایه استفاده می کند.
API های آزمایش شده:
پاس: FAST >= OFF، HQ >= FAST، HQ >> OFF
نمودار SNR معمولی در مقابل NR_MODE
test_tonemap_sequence
دنبالهای از عکسها را با منحنیهای نقشه رنگی مختلف آزمایش میکند. 3 عکس دستی با نقشه رنگی خطی می گیرد. 3 عکس دستی با نقشه آهنگ پیش فرض می گیرد. دلتا را بین هر جفت فریم متوالی محاسبه می کند.
API های آزمایش شده:
پاس: 3 فریم یکسان و به دنبال آن یک مجموعه متفاوت از 3 فریم یکسان وجود دارد.
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
تستهایی که تمام اندازهها و فرمتهای گزارششده برای عکسبرداری کار میکنند. از یک درخواست دستی با یک نقشه خطی استفاده می کند تا YUV و JPEG هنگام تبدیل توسط ماژول image_processing_utils
به نظر برسند. تصاویر بهطور پیشفرض ذخیره نمیشوند، اما میتوانند با فعال کردن debug_mode
ذخیره شوند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
پاس: همه مراکز تصویر دارای حداکثر تفاوت RMS (مقدار ریشه میانگین مربع سیگنال) در تصاویر تبدیل شده RGB با 3٪ بالاترین وضوح تصویر YUV هستند.
test_yuv_jpeg_all.png
test_yuv_plus_dng
تست هایی که اندازه ها و فرمت های گزارش شده برای ثبت تصویر کار می کنند.
API های آزمایش شده:
Pass: تست تصاویر درخواستی را تکمیل و برمی گرداند.
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
گرفتن یک فریم را به عنوان خروجی YUV و JPEG آزمایش می کند. از یک درخواست دستی با یک نقشه خطی استفاده می کند تا YUV و JPEG هنگام تبدیل توسط ماژول image_processing_utils
به نظر برسند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
پاس: تصاویر YUV و JPEG مشابه هستند و کمتر از 1٪ RMS (مقدار ریشه میانگین مربع سیگنال) تفاوت دارند.
![]() | ![]() | |
test_yuv_plus_jpg_jpg.jpg | test_yuv_plus_jpeg_yuv.jpg |
test_yuv_plus_raw
گرفتن یک فریم را به عنوان خروجی RAW و YUV آزمایش می کند. از یک درخواست دستی با نقشه خطی استفاده می کند، بنابراین انتظار می رود RAW و YUV یکسان باشند. مقادیر RGB 10% مرکز تصاویر تبدیل شده را با هم مقایسه می کند. گزارشات android.shading.mode
.
API های آزمایش شده:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
پاس: تصاویر YUV و JPEG مشابه هستند و کمتر از 3.5٪ RMS (مقدار ریشه میانگین مربع سیگنال) تفاوت دارند.
![]() | ![]() | |
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
test_yuv_plus_raw10
گرفتن یک فریم را به عنوان خروجی RAW10 و YUV آزمایش می کند. از یک درخواست دستی با نقشه خطی استفاده می کند، بنابراین انتظار می رود RAW و YUV یکسان باشند. مقادیر RGB 10% مرکز تصاویر تبدیل شده را با هم مقایسه می کند. گزارشات android.shading.mode
.
API های آزمایش شده:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
پاس: تصاویر RAW10 و YUV مشابه هستند و کمتر از 3.5٪ RMS (مقدار ریشه میانگین مربع سیگنال) تفاوت دارند.
![]() | ![]() | |
test_yuv_plus_raw10_shading=1_raw.jpg | test_yuv_plus_raw10_shading=1_yuv.jpg |
test_yuv_plus_raw12
گرفتن یک فریم را به عنوان خروجی RAW12 و YUV آزمایش می کند. از یک درخواست دستی با نقشه خطی استفاده می کند، بنابراین انتظار می رود RAW و YUV یکسان باشند. مقادیر RGB 10% مرکز تصاویر تبدیل شده را با هم مقایسه می کند. گزارشات android.shading.mode
.
API های آزمایش شده:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW12
پاس: تصاویر RAW12 و YUV مشابه هستند و کمتر از 3.5٪ RMS (مقدار ریشه میانگین مربع سیگنال) تفاوت دارند.
![]() | ![]() | |
test_yuv_plus_raw12_shading=1_raw.jpg | test_yuv_plus_raw12_shading=1_yuv.jpg |
صحنه2_a
scene2_a دارای سه چهره با زمینه خاکستری و لباس خنثی است. چهره ها به گونه ای انتخاب می شوند که طیف وسیعی از رنگ پوست داشته باشند.
صحنه2_a
test_auto_flash
آزمایش می کند که فلاش خودکار در یک صحنه تاریک فعال می شود. با بررسی اینکه مرکز تصویر کاشی دارای یک گرادیان بزرگ است، تأیید می کند که فلاش خودکار فعال شده است. برای راه اندازی فلاش خودکار، تبلت و چراغ های دستگاه تست باید خاموش شوند. تبلت با آزمایش خاموش می شود و چراغ ها را می توان به طور خودکار با کنترلر آردوینو خاموش کرد. صحنه باید کاملا تاریک باشد تا تست به درستی کار کند. به این ترتیب، دهانه پشت تبلت باید به طور کامل توسط تبلت صحنه پوشانده شود، و دهانه جلویی باید توسط یک دیافراگم و تلفن DUT پوشانده شود تا از ورود نور سرگردان به دکل جلوگیری شود.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass: مرکز تصویر کاشی دارای یک گرادیان بزرگ است به این معنی که فلاش خودکار شلیک می شود.
test_effects
قاب را برای جلوه های دوربین پشتیبانی شده می گیرد و بررسی می کند که آیا آنها به درستی تولید شده اند یا خیر. این آزمایش فقط جلوههای OFF
و MONO
را بررسی میکند، اما تصاویر را برای همه جلوههای پشتیبانی شده ذخیره میکند.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass: تصویر صحنه را با جلوههای OFF
و یک تصویر تک رنگ با جلوهها روی MONO
.
test_effects_MONO.jpg
test_format_combos
ترکیب های مختلف فرمت های خروجی را آزمایش می کند.
API های آزمایش شده:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
پاس: همه ترکیب ها با موفقیت ضبط می شوند.
test_jpeg_quality
کیفیت فشرده سازی JPEG دوربین را آزمایش می کند. کیفیت های JPEG را از طریق android.jpeg.quality
گام بردارید و اطمینان حاصل کنید که جداول Quantization به درستی تغییر می کنند.
API های آزمایش شده:
پاس: ماتریس کوانتیزاسیون با افزایش کیفیت کاهش می یابد. (ماتریس نشان دهنده ضریب تقسیم است.)
ماتریس لوما/کروما DQT دوربین عقب Pixel 4 در مقایسه با کیفیت JPEG متوسط است
نمونه تست ناموفق
توجه داشته باشید که برای تصاویر با کیفیت بسیار پایین (jpeg.quality < 50)، هیچ افزایشی در فشرده سازی در ماتریس کوانتیزاسیون وجود ندارد.
test_num_faces
تشخیص چهره را آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
پاس: سه چهره را پیدا می کند.
test_num_faces_fd_mode_1.jpg
صحنه2_ب
test_auto_per_frame_control
ویژگیهای PER_FRAME_CONTROL
را برای درخواستهای ضبط خودکار آزمایش میکند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
پاس: همه ویژگیهای PER_FRAME_CONTROL
موجود هستند.
test_auto_per_frame_control_frame_1.jpg
test_auto_per_frame_control_frame_10.jpg
test_auto_per_frame_control_frame_29.jpg
test_auto_per_frame_control_plot.png
test_num_faces
تشخیص چهره را با افزایش تنوع رنگ پوست در صحنه های صورت آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
پاس: 3 چهره را پیدا می کند.
test_num_faces_fd_mode_1.jpg
test_yuv_jpg_capture_sameness
دو تصویر را با استفاده از بزرگترین فرمتهای رایج YUV و JPEG با نسبت ابعادی مشابه با بزرگترین فرمت JPEG با وضوح تصویر 1920x1440 میگیرد. jpeg.quality
را روی 100 تنظیم می کند و درخواست دو سطحی را می گیرد. هر دو تصویر را به آرایههای RGB تبدیل میکند و اختلاف ریشه سهبعدی میانگین مربع (RMS) بین دو تصویر را محاسبه میکند.
API های آزمایش شده:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
-
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
-
android.graphics.ImageFormat#JPEG
پاس: تصاویر YUV و JPEG مشابه هستند و کمتر از 1٪ RMS (مقدار ریشه میانگین مربع سیگنال) تفاوت دارند.
صحنه2_ج
test_num_faces
تشخیص چهره را با افزایش تنوع رنگ پوست در صحنه های صورت آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
پاس: 3 چهره را پیدا می کند.
test_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
تأخیر ضبط JPEG را برای کلاس عملکرد S همانطور که در بخش 2.2.7.2 دوربین در CDD مشخص شده است، آزمایش می کند.
پاس: باید تأخیر ضبط JPEG camera2 کمتر از 1000 میلیثانیه برای وضوح 1080p داشته باشد که توسط دوربین CTS PerformanceTest در شرایط نوری ITS (3000K) برای هر دو دوربین اصلی اندازهگیری شده است.
test_camera_launch_perf_class
تأخیر راه اندازی دوربین را برای کلاس عملکرد S طبق بخش 2.2.7.2 دوربین در CDD مشخص شده آزمایش می کند.
پاس: باید تاخیر راه اندازی camera2 (باز کردن دوربین تا اولین فریم پیش نمایش) کمتر از 600 میلی ثانیه باشد که توسط دوربین CTS PerformanceTest در شرایط نوری ITS (3000K) برای هر دو دوربین اصلی اندازه گیری شده است.
صحنه2_د
test_num_faces
تشخیص چهره را با افزایش تنوع رنگ پوست در صحنه های صورت آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
پاس: 3 چهره را پیدا می کند.
صحنه2_e
test_continuous_picture
50 فریم با وضوح VGA با اولین تنظیم درخواست عکسبرداری گرفته می شود android.control.afMode = 4 (CONTINUOUS_PICTURE).
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Pass: سیستم 3A در پایان گرفتن 50 فریم ته نشین می شود.
test_num_faces
تشخیص چهره را با افزایش تنوع رنگ پوست در صحنه های صورت آزمایش می کند.
API های آزمایش شده:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
پاس: 3 چهره را پیدا می کند.
صحنه 3
Scene3 از نمودار ISO12233 استفاده می کند و اکثر تست ها از روش استخراج نمودار برای یافتن نمودار در صحنه استفاده می کنند. به همین دلیل، اکثر تصاویر ذخیره شده مانند تصاویر صحنه های 1، 2 یا 4 حاشیه ندارند، بلکه فقط نمودار هستند.
test_3a_consistency
تست های سازگاری 3A
API های آزمایش شده:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
پاس: 3A برای نوردهی، افزایش، awb (توازن سفید خودکار) و fd (فاصله فوکوس) سه بار در محدوده تحمل همگرا می شود.
test_edge_enhancement
آزمایش می کند که پارامتر android.edge.mode
به درستی اعمال شود. تصاویر بدون پردازش مجدد را برای هر حالت لبه می گیرد و وضوح تصویر خروجی و فراداده نتیجه ضبط را برمی گرداند. یک درخواست عکس برداری را با یک حالت لبه، حساسیت، زمان نوردهی، فاصله فوکوس و پارامتر سطح خروجی پردازش می کند.
Pass: حالت HQ
(2) واضح تر از حالت OFF
(0). حالت FAST
(1) واضح تر از حالت OFF
. حالت HQ
واضح تر یا برابر با حالت FAST
است.
API های آزمایش شده:
پارامترهای دوربین تحت تاثیر:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (حالت سریع)
test_edge_enhancement_edge=2.jpg (high quality mode)
test_flip_mirror
Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .
Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.
Pass: Image isn't flipped, mirrored or rotated.
test_flip_mirror_scene_patch.jpg
test_lens_movement_reporting
Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilize as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Lens movement flag is True
in the frame with sharpness change.
test_reprocess_edge_enhancement
Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.
APIs tested:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass: Sharpness for the different edge modes is correct. HQ
(mode 2) is sharper than OFF
(mode 0), and improvement between different modes is similar.
test_reprocess_edge_enhancement_plot.png
scene4
Scene4 consists of a black circle on a white background inside a square.
scene4
test_aspect_ratio_and_crop
Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.
test_multi_camera_alignment
Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass: Focal lengths and circles sizes are consistent.
test_preview_stabilization_fov
Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON
, and another with preview stabilization OFF
. A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%. ie the FOV changes at most 20%
test_video_aspect_ratio_and_crop
Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
scene5/diffuser
test_lens_shading_and_color_uniformity
Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.
scene6
Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.
scene6
test_zoom
Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.
test_zoom to find the contour of the circle closest to the center.
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern. The sensor_fusion
tests can be automated with the Sensor Fusion Box .
Image of checkerboard
test_multi_camera_frame_sync
Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.
test_preview_stabilization
Tests that stabilized preview video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME
parameter is not enabled.
The test_sensor_fusion
test generates a number of plots. The two most important plots for debugging are:
test_sensor_fusion_gyro_events
: Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.test_sensor_fusion_plot_rotations
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .
test_video_stabilization
Tests that stabilized video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
This page provides a comprehensive list of the tests under the Camera Image Test Suite (ITS), which is part of the Android Compatibility Test Suite (CTS) Verifier. ITS tests are functional tests, meaning that they do not measure image quality, but that all of the advertised camera functions are working as expected. This document lets developers and testers understand what the individual tests do and how to debug test failures.
Tests are grouped by scene as follows:
- scene0 : Capture metadata, jitter, gyroscope, vibration
- scene1 : Exposure, sensitivity, EV compensation, YUV vs JPEG/RAW
- scene2 : Face detection
- scene3 : Edge enhancement, lens movement
- scene4 : Aspect ratio, cropping, field-of-view
- scene5 : Lens shading
- scene6 : Zoom
- sensor_fusion : Camera/gyroscope timing offset
See individual sections for a description of each scene.
scene0
Scene0 tests require no specific scene information. However, the phone must be stationary for gyroscope and vibration testing.
test_burst_capture
Verifies that the entire capture pipeline can keep up with the speed of fullsize capture and CPU time.
APIs tested:
Pass: Captures a burst of full size images and the camera is fast enough to avoid timeout.
test_capture_result_dump
Tests that a capture result is returned from a manual capture and then dumps it.
APIs tested:
Pass: Completes capture and dumps the capture results.
test_gyro_bias
Tests if the gyro has stable output when the device is stationary. Data is plotted as an average of 20 data points.
APIs tested:
Pass: The gyro reading's delta is less than 0.01 over time.
test_gyro_bias_plot.png
test_jitter
Measures jitter in camera timestamps.
APIs tested:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Pass: There's at least a 30 ms delta between frames.
test_jitter_plot.png (Note the small y-axis range. Jitter is actually small in this plot.)
test_metadata
Tests the validity of metadata entries. Looks at capture results and at the camera characteristics objects. This test uses auto_capture_request
exposure and gain values because image content isn't important.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Hardware level, rollingShutterSkew
, frameDuration
tags, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, FOV, hyperfocal distance are present and have valid values.
test_param_sensitivity_burst
Tests that the android.sensor.sensitivity
parameter is applied properly in burst. Inspects the output metadata only.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: Output data has an error tolerance of less than 0.2%.
test_read_write
Tests that the device writes the correct exposure and gain values by reading back the capture metadata.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass: Read and write values match across all shots.
test_sensor_events
Tests that device queries and prints out sensor events for devices that advertise sensor fusion support. The sensors expected are accelerometer, gyroscope, and magnetometer. This test only works if the screen is on, meaning the device isn't in standby mode.
APIs tested:
Pass: Events for each sensor are received.
test_solid_color_test_pattern
Tests that solid color test patterns are generated properly for camera muting. If camera muting is supported, solid color test patterns must be supported. If camera muting is not supported, solid color test patterns are only tested if the capability is advertised.
If RAW images are supported, color assigment is tested as well. The colors tested are black, white, red, blue, and green. For cameras that do not support RAW images, only black is tested.
APIs tested:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Pass: Solid test patterns supported are the correct color and there is low variance in the image.
test_test_pattern
Tests the android.sensor.testPatternMode
parameter to capture frames for each valid test pattern and checks that the frames are generated correctly for solid colors and color bars. This test includes the following steps:
- Captures images for all supported test patterns.
- Performs a simple correctness check for solid color test pattern and color bars.
APIs tested:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Pass: Supported test patterns are generated correctly.
test_test_patterns_2.jpg
test_tonemap_curve
Tests conversion of test pattern from RAW to YUV with linear tonemap. This test requires android.sensor.testPatternMode = 2
(COLOR_BARS) to generate a perfect image pattern for tonemap conversion. Ensures pipeline has proper color outputs with linear tonemap and ideal image input (relies on test_test_patterns
).
APIs tested:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: The YUV and the RAW look similar to each other.
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
Tests if image and motion sensor events are in the same time domain.
APIs tested:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
Pass: Motion timestamps are between the two image timestamps.
test_vibration_restriction
Tests if the device's vibration is functioning as expected.
APIs tested:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Pass: The device doesn't vibrate when muted by the camera audio restriction API.
scene1
scene1 is a gray chart. The gray chart must cover the center 30% of the camera field of view. The gray chart is expected to challenge 3A (auto exposure, auto white balance, auto focus) moderately as the center region has no features. However, the capture request specifies the entire scene which includes sufficient features for 3A to converge.
RFoV cameras can be tested in the WFoV or the RFoV test rig. If a RFoV camera is tested in the WFoV test rig, the chart is scaled by ⅔ to ensure some boundaries for the gray chart in the FoV to help 3A converge.
scene1: Full size chart (left). ⅔ scaled chart (right).
test_3a
Tests the convergence of 3A with a moderately challenging target.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: 3A converges and the returned 3A values are valid.
test_ae_af
Tests the 3A auto exposure (AE) and auto focus (AF) algorithms individually.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: 3A converges and the returned 3A values are legal.
test_ae_precapture_trigger
Tests the AE state machine when using the precapture trigger. Captures five manual requests with AE disabled. The last request has an AE precapture trigger, which should be ignored because AE is disabled.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Pass: AE converges.
test_auto_vs_manual
Tests that captured auto and manual shots look the same.
APIs tested:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Pass: Manual white balance gains and transform reported in each capture result match with the auto white balance estimate
from camera's 3A algorithm.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
test_black_white
Tests that the device produces full black and white images. Takes two captures, the first with extremely low gain and short exposure, which results in a black photo, and the second with extremely high gain and long exposure, which results in a white photo.
APIs tested:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: Produces black and white images. Saturated channels of white images have RGB values of [255, 255, 255] with a margin of error of less than 1% difference.
![]() | ![]() | |
test_black_white_black.jpg | test_black_white_white.jpg |
test_black_white_plot_means.png
test_burst_sameness_manual
Takes 5 bursts of 50 images with manual capture setting and checks that they're all identical. This test can be used to identify if there are sporadic frames that are processed differently or have artifacts.
APIs tested:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Pass: Images are identical visually and in RGB values.
Fail: Shows a spike or drop of the RGB average chart at the beginning of each burst
- Tolerance is 3% for
first_API_level
< 30 - Tolerance is 2% for
first_API_level
>= 30
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
test_capture_result
Tests that valid data comes back in CaptureResult
objects. Does an auto, manual, and auto capture.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: Metadata is valid for all captures and the manual settings don't leak into the second auto capture. Plots out the lens shading correction for the captures.
test_capture_result_plot_lsc_auto_ch0.png
test_crop_region_raw
Tests that the RAW streams aren't croppable.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Pass: YUV images get center-cropped but not RAW images.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
Tests that crop regions work. Takes a full image and creates patches of 5 different regions (corners and center.) Takes images with crop set for the 5 regions. Compares the patch and the crop image values.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Pass: Image of the cropped region matches the patch that corresponds to the crop image.
test_dng_noise_model
Verifies that the DNG raw model parameters are correct. The plot depicts the measured variance of a center patch of the grey card in raw shots captured over a range of sensitivities, and compares these values with the variance that is expected at each sensitivity by the DNG noise model in the camera HAL (based on the O,S parameters returned in the capture result objects). For a more details on the DNG noise model, download the following document on the DNG Noise Model .
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: DNG raw model parameters are correct. Expected RGB values match that of the actual RGB values measured.
test_dng_noise_model_plog.png
test_ev_compensation_advanced
Tests that the exposure value (EV) compensation is applied. The test increases exposure in eight steps, and checks measured brightness versus expected brightness. Expected values are calculated from image brightness of image with no EV compensation applied and the expected value will saturate if the calculated values exceed the actual image value range. Test fails if the expected values and measured values don't match or images overexpose within five steps.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Pass: Images show increasing exposure without overexposing within five steps.
test_ev_compensation_advanced_plot_means.png
test_ev_compensation_basic
Tests that the EV compensation is applied using a range created with CONTROL_AE_COMPENSATION_STEP
. Eight frames are captured at each compensation value.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Pass: Captures increase in luma with increased EV compensation setting, and the eight frames captured for each EV compensation setting have stable luma values.
test_ev_compensation_basic.png
test_exposure
Tests that a constant exposure is achieved as ISO and exposure time vary. Takes a series of shots that have ISO and exposure time chosen to balance each other. Results should have the same brightness, but over the sequence the image should get noisier. Verifies sample pixel mean values are close to each other. Ensures that the images aren't clamped to 0 or 1 (which would make them look like flat lines). The test can also be run with RAW images by setting the debug
flag in your configuration file.
APIs tested:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: Images have the same brightness, but get noisier with higher ISO. RGB planes are flat when the value of ISO*exposure is constant over the tested gain space.
test_exposure_plot_means.png
![]() | ![]() | |
test_exposure_mult=1.00.jpg | test_exposure_mult=64.00.jpg |
test_jpeg
Tests that converted YUV images and device JPEG images look the same. Test takes the center 10% of the image and calculates the RGB value, and verifies that they match.
APIs tested:
Pass: The average RGB difference between each image is less than 3%.
![]() | ![]() | |
test_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
test_latching
Tests that settings (exposure and gain) latch on the right frame for FULL
and LEVEL_3
cameras. Takes a series of shots using back-to-back requests, varying the capture request parameters between shots. Checks that the images have the expected properties.
APIs tested:
Pass: Images [2, 3, 6, 8, 10, 12, 13] have increased ISO or exposure and show up with higher RGB means on test_latching_plot_means.png
.
![]() | ![]() | ![]() | |
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
![]() | ![]() | ![]() | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
![]() | |||
test_latching_i=12.jpg |
test_latching_plot_means.png
test_linearity
Tests that device processing can be inverted to linear pixels. Captures a sequence of shots with the device pointed at a uniform target.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: R, G, B values must increase linearly with increased sensitivity.
test_linearity_plot_means.png
test_locked_burst
Tests 3A lock and YUV burst (using auto setting). This test is designed to pass even on limited devices that don't have MANUAL_SENSOR
or PER_FRAME_CONTROLS
. The test checks YUV image consistency while the frame rate check is in CTS.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Pass: Captures look consistent.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
test_multi_camera_match
Tests to see if multi cameras on devices give similar RGB values for a gray patch.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#LENS_FOCAL_LENGTH
Pass: Different cameras produce similar RGB values for the same gray patch.
test_multi_camera+match_yuv_fl=4.38.jpg
test_param_color_correction
Tests that the android.colorCorrection.*
parameters are applied when set. Takes shots with different transform and gain values, and tests that they look correspondingly different. The transform and gains are chosen to make the output increasingly red or blue. Uses a linear tonemap. Tone mapping is a technique used in image processing to map one set of colors to another to approximate the appearance of high-dynamic-range images in a medium that has a more limited dynamic range.
APIs tested:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Pass: R and B values boost according to transformation.
test_param_color_correction_plot_means.png
*The x-axis is the capture requests: 0 = unity, 1=red boost, 2= blue boost
test_param_color_correction_req=0.jpg
test_param_color_correctness_req=1.jpg (R boost)
test_param_color_correction_req=2.jpg (B boost)
test_param_exposure_time
Tests that the android.sensor.exposureTime
parameter is applied.
APIs tested:
Pass: Each shot is brighter than the previous shot.
test_param_exposure_time_frame0.jpg
test_param_exposure_time_plot.png
test_param_flash_mode
Tests that the android.flash.mode
parameter is applied. Manually sets the exposure to be on the dark side, so that it is obvious whether the flash fired or not, and uses a linear tonemap. Checks the center with the tile image to see if there's a large gradient that's created to verify whether the flash fired.
APIs tested:
Pass: The center of the tile image has a large gradient meaning that the flash fired.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
test_param_noise_reduction
Tests that the android.noiseReduction.mode
parameter is applied correctly when set. Captures images with the camera dimly lit. Uses a high analog gain to ensure the captured image is noisy. Captures three images, for NR off, "fast", and "high quality". Also captures an image with low gain and NR off, and uses the variance of this as the baseline. The higher the SNR (Signal to Noise Ratio), the better the image quality.
APIs tested:
Pass: SNR varies with different noise reduction modes and behaves similarly as the graph below.
test_param_noise_reduction_plot_SNRs.png
0: OFF, 1: FAST, 2: HQ, 3: MIN , 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_sensitivity
Tests that the android.sensor.sensitivity
parameter is applied. The test increases the sensitivity in 5 steps with fixed exposure for each shot.
APIs tested:
Pass: RGB means of center 10% gets brighter with increased sensitivity.
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
test_param_shading_mode
Tests that the android.shading.mode
parameter is applied.
APIs tested:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Pass: Shading modes are switched and the lens shading maps are modified as expected.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
Tests that the android.tonemap.mode parameter is applied. Applies different tonemap curves to each R, G, B channel, and checks that the output images are modified as expected. This test consists of two tests, test1 and test2.
APIs tested:
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass:
- test1: Both images have a linear tonemap, but n=1 has a steeper gradient. The G (green) channel is brighter for the n=1 image.
- test2: Same tonemap, but different length. Images are the same.
![]() | ![]() | |
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
test_post_raw_sensitivity_boost
Checks post RAW sensitivity boost. Captures a set of RAW and YUV images with different sensitivity, posts RAW sensitivity boost combination and checks if the output pixel mean matches request settings.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: RAW images get darker as boost increases while YUV images stay constant in brightness
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
Captures a set of raw images with increasing gains and measures the noise. Captures raw-only, in a burst.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass: Each shot is noisier than the previous shot, as the gain is increasing.
Uses the variance of the center stats grid cell.
test_raw_burst_sensitivity_variance.png
test_raw_exposure
Captures a set of raw images with increasing exposure time and measures the pixel values.
APIs tested:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Pass: Increasing the ISO (gain) makes the pixels more sensitive to light, so the plot moves towards the left.
test_raw_exposure_s=55.png
(10⁰ is 1 ms, 10¹ is 10 ms, 10⁻¹ is 0.1 ms)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_sensitivity
Captures a set of raw images with increasing sensitivities and measures the noise (variance) in the center 10% of image. Tests that each shot is noisier than the previous one.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass: Variance increases with each shot.
test_raw_sensitivity_variance.png
test_reprocess_noise_reduction
Tests that android.noiseReduction.mode
is applied for reprocessing requests. Captures reprocessed images with the camera dimly lit. Uses a high analog gain to ensure the capture image is noisy. Captures three reprocessed images, for NR off, "fast", and "high quality". Captures a reprocessed image with low gain and NR off, and uses the variance of this as the baseline.
APIs tested:
Pass: FAST >= OFF, HQ >= FAST, HQ >> OFF
Typical SNR vs NR_MODE plot
test_tonemap_sequence
Tests a sequence of shots with different tonemap curves. Captures 3 manual shots with a linear tonemap. Captures 3 manual shots with default tonemap. Computes the delta between each consecutive frame pair.
APIs tested:
Pass: There are 3 identical frames followed by a different set of 3 identical frames.
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
Tests that all reported sizes and formats for image capture work. Uses a manual request with a linear tonemap so that the YUV and JPEG look the same when converted by the image_processing_utils
module. Images aren't saved by default, but can be saved by enabling debug_mode
.
APIs tested:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Pass: All image centers have a max RMS (root-mean-square value of a signal) difference in RGB converted images with 3% of highest resolution YUV image.
test_yuv_jpeg_all.png
test_yuv_plus_dng
Tests that the reported sizes and formats for image capture work.
APIs tested:
Pass: Test completes and returns the images requested.
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
Tests capturing a single frame as both YUV and JPEG outputs. Uses a manual request with a linear tonemap so that the YUV and JPEG look the same when converted by the image_processing_utils
module.
APIs tested:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Pass: YUV and JPEG images are similar and have less than 1% RMS (root-mean-square value of a signal) difference.
![]() | ![]() | |
test_yuv_plus_jpg_jpg.jpg | test_yuv_plus_jpeg_yuv.jpg |
test_yuv_plus_raw
Tests capturing a single frame as both RAW and YUV outputs. Uses a manual request with linear tonemap so RAW and YUV are expected to be the same. Compares RGB converted images' center 10% RGB values. Logs android.shading.mode
.
APIs tested:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: YUV and JPEG images are similar and have less than 3.5% RMS (root-mean-square value of a signal) difference.
![]() | ![]() | |
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
test_yuv_plus_raw10
Tests capturing a single frame as both RAW10 and YUV outputs. Uses a manual request with linear tonemap so RAW and YUV are expected to be the same. Compares RGB converted images' center 10% RGB values. Logs android.shading.mode
.
APIs tested:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
Pass: RAW10 and YUV images are similar and have less than 3.5% RMS (root-mean-square value of a signal) difference.
![]() | ![]() | |
test_yuv_plus_raw10_shading=1_raw.jpg | test_yuv_plus_raw10_shading=1_yuv.jpg |
test_yuv_plus_raw12
Tests capturing a single frame as both RAW12 and YUV outputs. Uses a manual request with linear tonemap so RAW and YUV are expected to be the same. Compares RGB converted images' center 10% RGB values. Logs android.shading.mode
.
APIs tested:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW12
Pass: RAW12 and YUV images are similar and have less than 3.5% RMS (root-mean-square value of a signal) difference.
![]() | ![]() | |
test_yuv_plus_raw12_shading=1_raw.jpg | test_yuv_plus_raw12_shading=1_yuv.jpg |
scene2_a
scene2_a has three faces with a gray background and neutral clothing. The faces are chosen to have a wide range of skin tones.
scene2_a
test_auto_flash
Tests that auto-flash is triggered in a dark scene. Verifies that auto-flash is fired by checking that the center of the tile image has a large gradient. To trigger auto-flash, the tablet and lights in the test rig must be turned off. The tablet is turned off by the test, and the lights can be turned off automatically with the Arduino controller. The scene must be completely dark for the test to work correctly. As such, the rear tablet opening must be completely covered by the scene tablet, and the front opening must be covered by an aperture and the DUT phone to block stray light from entering the rig.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass: The center of the tile image has a large gradient meaning that auto-flash fired.
test_effects
Captures frame for supported camera effects and checks if they are generated correctly. The test only checks effects OFF
and MONO
, but saves images for all supported effects.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass: Captures the scene image with effects OFF
and a monochrome image with effects set to MONO
.
test_effects_MONO.jpg
test_format_combos
Tests different combinations of output formats.
APIs tested:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Pass: All the combinations are successfully captured.
test_jpeg_quality
Tests the camera JPEG compression quality. Step JPEG qualities through android.jpeg.quality
and ensures Quantization Tables change correctly.
APIs tested:
Pass: Quantization matrix decreases with quality increase. (Matrix represents the division factor.)
Pixel 4 rear camera luma/chroma DQT matrix averages vs JPEG quality
Failed test example
Note that for very low quality images (jpeg.quality < 50), there is no increase in compression in the quantization matrix.
test_num_faces
Tests face detection.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds three faces.
test_num_faces_fd_mode_1.jpg
scene2_b
test_auto_per_frame_control
Tests PER_FRAME_CONTROL
properties for auto capture requests.
APIs tested:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass: All of the PER_FRAME_CONTROL
properties are present.
test_auto_per_frame_control_frame_1.jpg
test_auto_per_frame_control_frame_10.jpg
test_auto_per_frame_control_frame_29.jpg
test_auto_per_frame_control_plot.png
test_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds 3 faces.
test_num_faces_fd_mode_1.jpg
test_yuv_jpg_capture_sameness
Captures two images using the largest common YUV and JPEG formats with the same aspect ratio as the largest JPEG format not exceeding a resolution of 1920x1440. Sets jpeg.quality
to 100 and captures a dual surface request. Converts both images to RGB arrays and calculates the 3D root mean square (RMS) difference between the two images.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
-
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
-
android.graphics.ImageFormat#JPEG
Pass: YUV and JPEG images are similar and have less than 1% RMS (root-mean-square value of a signal) difference.
scene2_c
test_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds 3 faces.
test_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
Tests JPEG capture latency for the S performance class as specified in section 2.2.7.2 Camera in the CDD.
Pass: MUST have camera2 JPEG capture latency < 1000ms for 1080p resolution as measured by the CTS camera PerformanceTest under ITS lighting conditions (3000K) for both primary cameras.
test_camera_launch_perf_class
Tests camera launch latency for the S performance class as specified section 2.2.7.2 Camera in the CDD.
Pass: MUST have camera2 startup latency (open camera to first preview frame) < 600ms as measured by the CTS camera PerformanceTest under ITS lighting conditions (3000K) for both primary cameras.
scene2_d
test_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds 3 faces.
scene2_e
test_continuous_picture
50 VGA resolution frames are captured with the capture request first setting android.control.afMode = 4 (CONTINUOUS_PICTURE).
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Pass: 3A system settles by the end of a 50-frame capture.
test_num_faces
Tests face detection with increased skin tone diversity in face scenes.
APIs tested:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass: Finds 3 faces.
scene3
Scene3 uses the ISO12233 chart, and most tests use a chart extractor method to find the chart in the scene. For this reason, most of the saved images don't have borders like the images for scenes 1, 2 or 4, but only the chart.
test_3a_consistency
Tests for 3A consistency.
APIs tested:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass: 3A converges for exposure, gain, awb (auto white balance), and fd (focus distance) three times within tolerance.
test_edge_enhancement
Tests that the android.edge.mode
parameter is applied correctly. Captures non-reprocess images for each edge mode and returns sharpness of the output image and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, and output surface parameter.
Pass: HQ
mode (2) sharper than OFF
mode (0). FAST
mode (1) sharper than OFF
mode. HQ
mode sharper or equal to FAST
mode.
APIs tested:
Impacted camera parameters:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (fast mode)
test_edge_enhancement_edge=2.jpg (high quality mode)
test_flip_mirror
Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .
Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.
Pass: Image isn't flipped, mirrored or rotated.
test_flip_mirror_scene_patch.jpg
test_lens_movement_reporting
Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilize as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Lens movement flag is True
in the frame with sharpness change.
test_reprocess_edge_enhancement
Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.
APIs tested:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass: Sharpness for the different edge modes is correct. HQ
(mode 2) is sharper than OFF
(mode 0), and improvement between different modes is similar.
test_reprocess_edge_enhancement_plot.png
scene4
Scene4 consists of a black circle on a white background inside a square.
scene4
test_aspect_ratio_and_crop
Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.
test_multi_camera_alignment
Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass: Focal lengths and circles sizes are consistent.
test_preview_stabilization_fov
Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON
, and another with preview stabilization OFF
. A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%. ie the FOV changes at most 20%
test_video_aspect_ratio_and_crop
Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.
scene5/diffuser
test_lens_shading_and_color_uniformity
Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.
APIs tested:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.
scene6
Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.
scene6
test_zoom
Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.
test_zoom to find the contour of the circle closest to the center.
sensor_fusion
Sensor fusion tests require specific phone movement in front of a checkerboard pattern. The sensor_fusion
tests can be automated with the Sensor Fusion Box .
Image of checkerboard
test_multi_camera_frame_sync
Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.
test_preview_stabilization
Tests that stabilized preview video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization
test_sensor_fusion
Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME
parameter is not enabled.
The test_sensor_fusion
test generates a number of plots. The two most important plots for debugging are:
test_sensor_fusion_gyro_events
: Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.test_sensor_fusion_plot_rotations
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .
test_video_stabilization
Tests that stabilized video rotates less than gyroscope.
APIs tested:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.
The following are sample videos with and without stabilization.
Sample video with stabilization
Sample video without stabilization