این صفحه تمام تستهای موجود برای ارزیابی لایه انتزاعی سختافزار دوربین اندروید (HAL) را فهرست میکند. این تست برای تولیدکنندگان تجهیزات اصلی (OEMها) و فروشندگان پردازندههای کاربردی (AP) در نظر گرفته شده است تا بتوانند از پیادهسازی صحیح HAL دوربین با حداقل نقص اطمینان حاصل کنند. اگرچه این یک افزونه داوطلبانه به مجموعه تست سازگاری اندروید (CTS) است، اما پوشش تست دوربین را تا حد زیادی افزایش میدهد و مطمئناً اشکالات احتمالی را شناسایی خواهد کرد.
با گذراندن این آزمایشها، تولیدکنندگان اصلی تجهیزات (OEM) تأیید میکنند که آیا رابطهای لایه انتزاعی سختافزار دوربین اندروید (HAL) 3 را به درستی ادغام کردهاند یا خیر. در صورت مطابقت با تمام موارد موجود در چک لیست، پیادهسازی دستگاه ممکن است از نظر رابطهای HAL دوربین اندروید کامل در نظر گرفته شود. این به نوبه خود دستگاه را قادر میسازد تا به درستی از بسته android.hardware.camera2 که برنامههای دوربین بر اساس آن ساخته میشوند، پشتیبانی کند.
مشخصات دوربین HAL3
مشخصات دوربین اندروید HAL3 منبع معتبری از اطلاعات در مورد دستگاههایی است که باید الزامات را برآورده کنند؛ این صفحه خلاصهای از تمام آزمایشهایی را ارائه میدهد که میتوانند به عنوان یک چک لیست استفاده شوند. مجریان HAL دوربین (به عنوان مثال فروشندگان AP) باید مشخصات دوربین HAL3 را خط به خط بررسی کرده و از مطابقت دستگاههای خود با آن اطمینان حاصل کنند.
مشخصات فعلی HAL در این فایلها در کیت توسعه پلتفرم اندروید (PDK) عمومی اندروید ۵.۰ و نسخههای بعدی آن تعریف شده است:
- رابط و مشخصات دوربین HAL 3.x :
hardware/libhardware/include/hardware/camera3.h،hardware/libhardware/include/hardware/camera_common.h - مشخصات فراداده دوربین HAL 3.x :
system/media/camera/docs/docs.html - رابط و مشخصات فرمت پیکسلی HAL :
system/core/libsystem/include/system/graphics.h
انواع تست دوربین
در اینجا انواع اصلی تستهای موجود برای جدیدترین دوربین اندروید به همراه دستورالعملهای مرتبط با آنها آورده شده است:
- مجموعه تست فروشنده (VTS) : تستهایی که مستقیماً رابط HAL دوربین را آزمایش میکنند
- مجموعه تست سازگاری (CTS) : تستهای استاندارد و خودکار اندروید برای اطمینان از سازگاری دستگاه. برای جزئیات بیشتر، به مجموعه تست سازگاری و بررسی اجمالی فدراسیون تجارت مراجعه کنید.
- مجموعه تست تصویر (ITS) : برای اطمینان از صحت تصویر، تستها را به صورت دستی اجرا کنید. برای جزئیات بیشتر، به بخش ITS دوربین مراجعه کنید.
- تستهای دستی TestingCam : از منبع موجود در
pdk/apps/TestingCamera/اجرا میشود. - تستهای دستی TestingCam2.1 : اجرا از منبع در
pdk/apps/TestingCamera2/
همه این انواع آزمایشها به تفصیل در زیر شرح داده شدهاند. این آزمایشها به ترتیب زمانی که انتظار میرود تولیدکنندگان تجهیزات اصلی (OEM) آنها را اجرا کنند، ارائه شدهاند.
برای مثال، اگر دستگاهی در تستهای بومی شکست بخورد، مطمئناً در تستهای بعدی مجموعه تست سازگاری (CTS) نیز شکست خواهد خورد. و اگر دستگاهی در CTS شکست بخورد، رفتن به مجموعه تست تصویر (ITS) فایده چندانی ندارد. توصیه میکنیم قبل از رفتن به مجموعه تستهای بعدی، به بررسی شکستها در هر نوع تست بپردازید.
تستهای مجموعه تست فروشنده (VTS)
مجموعه تست فروشندگان اندروید (VTS) یک مجموعه تست است که در سطح رابط HIDL کار میکند. برای اطلاعات بیشتر در مورد استفاده از VTS، به مجموعه تست فروشندگان مراجعه کنید.
تستهای مجموعه تست سازگاری (CTS)
مجموعه تست سازگاری دوربین اندروید (CTS) بر سازگاری دستگاه تمرکز دارد. برای اطلاعات بیشتر در مورد راهاندازی یک محیط آزمایش، به بخش راهاندازی CTS مراجعه کنید.
مسیر شروع برای تستهای CTS دوربین: platform/cts است.
هنگام اجرای CTS دوربین برای دستگاههایی که از دوربینهای خارجی (مانند وبکمهای USB) پشتیبانی میکنند، باید دستگاهی را هنگام اجرای CTS به سیستم متصل کنید، در غیر این صورت آزمایشها به طور خودکار با شکست مواجه میشوند. نمونههایی از دوربینهای خارجی عبارتند از: Logitech HD Pro Webcam C920 و Microsoft LifeCam HD-3000 .
برای دستورالعملهای کلی در مورد اجرای CTS، به مقدمه CTS و زیرصفحات آن مراجعه کنید.
تستهای CTS برای رابط android.hardware.Camera API)
این تستهای دوربین را در مسیر cts/tests/tests/ پیدا کنید:
-
hardware/src/android/hardware/cts/CameraTest.java -
hardware/src/android/hardware/cts/CameraGLTest.java -
hardware/src/android/hardware/cts/Camera_SizeTest.java -
permission/src/android/permission/cts/CameraPermissionTest.java
تستهای CTS برای API مربوط به android.hardware.camera2
این تستهای دوربین را در مسیر cts/tests/tests/ پیدا کنید:
-
hardware/src/android/hardware/camera2/cts/* -
permission/src/android/permission/cts/Camera2PermissionTest.java
آزمایشهای دوربین CTS Verifier
این تستهای دوربین را در آدرس زیر پیدا کنید: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
تستهای مجموعه تست تصویر (ITS)
تستهای مجموعه تست تصویر دوربین (ITS) بر صحت تصویر تمرکز دارند. برای انجام تستها، اسکریپتهای پایتون را روی یک ایستگاه کاری با دستگاه اندروید متصل از طریق USB اجرا کنید.
زیرساخت و تستهای Camera ITS در دایرکتوری cts/apps/CameraITS قرار دارند. هر تست در زیردایرکتوری tests/scene # قرار دارد.
برای اطلاعات بیشتر در مورد نحوه تنظیم و اجرای آزمایشها، به Camera ITS مراجعه کنید.
برای توضیحات صحنه و آزمایش، به آزمایشهای ITS دوربین مراجعه کنید.
تستهای ITS یا قبول میشوند یا رد میشوند. تمام تستهای اجباری در هر پوشهی صحنه باید قبول شوند. تستهایی که اجباری نیستند میتوانند شکست بخورند و همچنان در CtsVerifier به عنوان قبول شده محسوب شوند.
آزمایشهای ITS سناریوهایی را آزمایش میکنند که در CTS آزمایش نشدهاند و جزء مهمی از طرح آزمایش HAL 3.2 هستند.
تستهای چارچوب رسانه
تمام تستهای رسانهای مربوط به دوربین را در MediaFrameworkTest با موفقیت پشت سر بگذارید. لطفاً توجه داشته باشید که این تستها نیاز به نصب mediaframeworktest.apk روی دستگاه اندروید دارند. شما باید make mediaframeworktest و سپس از adb برای نصب .apk حاصل استفاده کنید. دستورات نمونه در زیر آمده است.
مسیر شروع برای تستهای چارچوب رسانهای مرتبط با دوربین: platform/frameworks/base
کد منبع تستها را اینجا پیدا کنید: frameworks/base/media/tests/MediaFrameworkTest
برای تنظیم این آزمایشها:
make mediaframeworktestadb install out/target/product/name/data/app/mediaframeworktest.apk
که در آن متغیر name نشان دهنده دایرکتوری حاوی محصول فروشنده است.
تمام تستها را در دایرکتوری زیر یا زیر دایرکتوریهای آن پیدا کنید:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
هر زیرشاخه نشاندهندهی یک کلاس از تستها است:
-
functional/ -
integration/ -
performance/ -
power/ -
stress/ -
unit/
اجرای تستهای Media Framework
برای مشاهده همه آزمونهای موجود::
adb shell pm list instrumentation
این نتایجی شبیه به موارد زیر خواهد داشت:
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner (target=com.android.mediaframeworktest)
مولفه (بین instrumentation: و (target=com.android.mediaframeworktest) را از هر خط تست شناسایی و استخراج کنید. این مولفه از نام بسته هدف ( com.android.mediaframeworktest ) و نام اجراکننده تست ( MediaFramework تشکیل شده است. MediaFramework ).
برای مثال:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
سپس میتوانید هر جزء را به صورت زیر به adb shell am instrument ارسال کنید:
adb shell am instrument -w component.name
که در آن component.name برابر با مقدار استخراج شده در بالا است. برای مثال:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
لطفاً توجه داشته باشید، اگرچه مسیر کلاس، پکیج جاوا + نام کلاس است، پکیج instrumentation لزوماً همان پکیج جاوا نیست. هنگام الحاق نام کامپوننت، مطمئن شوید که از پکیج AndroidManifest.xml استفاده میکنید، نه از پکیج جاوایی که کلاس اجراکنندهی تست در آن قرار دارد.
برای اجرای یک کلاس از تستها، از کلاس -e استفاده کنید.
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
برای اجرای فقط یک متد در یک کلاس تست، علامت پوند (#) و نام متد (در این مورد، testConnectPro ) را به نام کلاس اضافه کنید، مانند زیر:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
تستهای عملکردی تنظیمات رسانه
در اینجا نمونهای از یک تست عملکردی ارائه شده است. این تست، عملکرد اساسی ترکیبات مختلف تنظیمات دوربین (یعنی فلاش، نوردهی، WB، صحنه، اندازه تصویر و برچسب جغرافیایی) را تأیید میکند.
دستور تست را اجرا کنید:
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
تستهای ادغام رسانه
در اینجا مثالی از اجرای یک تست یکپارچهسازی، در این مورد mediaframeworktest/integration/CameraBinderTest.java و mediaframeworktest/CameraStressTestRunner.java، آورده شده است:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
در صورت موفقیت، خروجی شبیه به این خواهد بود:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
آزمونهای عملکرد رسانه
این تست حافظه پیشنمایش، پیشنمایش دوربین را برای ۲۰۰ بار باز و منتشر میکند. در هر ۲۰ تکرار، تصویر لحظهای از سرور رسانهای ps ضبط میشود و میزان استفاده از حافظه را پس از ۲۰۰ تکرار مقایسه میکند. اگر اختلاف بیشتر از ۱۵۰ کیلومابایت باشد، تست با شکست مواجه میشود.
دستور تست را اجرا کنید:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
خروجی دقیقتر را میتوانید در /sdcard/mediaMemOutput.txt بیابید.
تستهای واحد رسانه
دستورات اجرای تستهای واحد همگی مشابه هستند. برای مثال، برای CameraMetadataTest.java، دستور به صورت زیر خواهد بود:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
آزمونهای استرس رسانهای
این آزمایش برای تحت فشار قرار دادن دوربین در هنگام ضبط تصویر و فیلم است.
دستور تست را اجرا کنید:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
همه آزمونها باید با موفقیت پشت سر گذاشته شوند.
تستهای دستی TestingCam
برنامه TestingCam باید به صورت دستی اجرا شود و بررسیهای زیر انجام شود. منبع TestingCam اینجاست: pdk/apps/TestingCamera/
فوکوس بینهایت با قابلیت کج کردن دوربین
TestingCam را اجرا کنید، پیشنمایش را روشن کنید و مطمئن شوید که حالت فوکوس خودکار روی بینهایت تنظیم شده است. با استفاده از دکمهی «عکس بگیرید» ، از سوژههای دور (حداقل ۱۰ متر دورتر) با دوربینی که به صورت افقی، رو به بالا (نزدیک به عمودی) و رو به پایین (نزدیک به عمودی) قرار دارد، عکس بگیرید. نمونهای از عکس رو به بالا میتواند برگها/شاخههای بالای درخت از زیر باشد و نمونهای از عکس رو به پایین میتواند خیابان از پشت بام یک ساختمان باشد. در همه موارد، سوژه دور باید واضح و در فوکوس باشد. عکسها را ذخیره و در نمای گالری مشاهده کنید تا بتوانید بزرگنمایی کرده و وضوح را راحتتر بررسی کنید.
توجه داشته باشید که برای اینکه دوربینی با محرک VCM بتواند از این آزمون سربلند بیرون بیاید، یا به یک سیستم کنترل فوکوس خودکار حلقه بسته نیاز دارد، یا به نوعی اصلاح SW بر اساس استفاده از دادههای شتابسنج برای تعیین جهت دوربین نیاز دارد. کالیبراسیون قابل اعتماد کارخانهای موقعیت بینهایت لنز نیز مورد نیاز خواهد بود.
تستهای دستی TestingCam2
برنامه TestingCam2 باید به صورت دستی اجرا شود و بررسیهای زیر انجام شود. منبع TestingCam2 اینجاست: pdk/apps/TestingCamera2/
ضبط JPEG
TestingCam2 را اجرا کنید و دکمه JPEG را فشار دهید. تصویری که در سمت راست تصویر منظرهیاب ظاهر میشود باید مشابه منظرهیاب باشد، از جمله اینکه جهتگیری یکسانی داشته باشد.