تحدّد هذه الصفحة الاختلافات بين نظام العرض الموسّع (EVS) وCamera2. وتوضّح أيضًا كيفية إعداد عملية تنفيذ Camera2.
فتح الكاميرا وإغلاقها
نظام العرض الموسّع (EVS)
openCamera تجمع بين فتح الجهاز وإعداد بث واحد.
Camera2
لفتح جهاز وإغلاقه باستخدام Camera2:
اختَر أحد الأوضاع التالية:
الوضع الحصري: استخدِم
CameraManager.openCamera(Java) أوACameraManager_openCameraفي حزمة تطوير البرامج الأصلية (NDK).الوضع المشترَك: استخدِم
openSharedCameraأوACameraManager_openSharedCamera. عند تفعيل ميزة مشاركة الكاميرا، قدِّم إعدادات جلسة مشترَكة.
لإعداد البث، أنشِئ جلسة التقاط باستخدام أسطح الإخراج ذات الصلة. على سبيل المثال، من ImageReader أو SurfaceView باستخدام
CameraDevice.createCaptureSession()(Java) أوACameraDevice_createCaptureSession()(NDK).تتيح Camera2 بث عدة أحداث في الوقت نفسه. يمكنك إنشاء عدة أحداث لأغراض مثل المعاينة والتسجيل ومعالجة الصور. تعمل الأحداث كخطوط أنابيب موازية، وتُعالِج بالتسلسل الإطارات الأولية من الكاميرا.
لإغلاق جهاز الكاميرا، استخدِم
CameraDevice.close()(Java) أوACameraDevice_close()(NDK).
إليك مقتطفات من نماذج الرموز البرمجية:
Java
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
manager.openCamera(cameraId, new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
// Camera opened, now create session
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {}
@Override
public void onError(@NonNull CameraDevice camera, int error) {}
}, handler);
} catch (CameraAccessException e) {
// Handle exception
}
NDK
ACameraManager *cameraManager = ACameraManager_create();
ACameraDevice *cameraDevice = nullptr;
camera_status_t status = ACameraManager_openCamera(
cameraManager, cameraId, &deviceStateCallbacks, &cameraDevice);
بث بيانات الكاميرا
يوضّح هذا القسم كيفية بث بيانات الكاميرا.
نظام العرض الموسّع (EVS)
في نظام العرض الموسّع (EVS)، يمكنك:
- بدء البث باستخدام
startVideoStream - إيقاف البث باستخدام
stopVideoStream
Camera2
في Camera2، يمكنك:
إنشاء
CaptureRequestمناسب للمعاينة باستخدامTEMPLATE_PREVIEWمعCameraDevice.createCaptureRequest()في Java أوACameraDevice_createCaptureRequest()في NDKإرسال طلب البث المستمر باستخدام
CameraCaptureSession.setSingleRepeatingRequest(Java) أوACameraCaptureSession_setRepeatingRequestV2(NDK)إيقاف البث باستخدام
CameraCaptureSession.stopRepeating(Java) أوACameraCaptureSession_stopRepeating(NDK).
إدارة المخزن المؤقت
في نظام العرض الموسّع (EVS)،
setMaxFramesInFlightكانت تتحكّم سابقًا في عدد المخزن المؤقت، الذي يمكن تغييره أثناء البث. عند بدء بث الكاميرا، كان نظام العرض الموسّع (EVS) يوفّر رقم تعريف المخزن المؤقت لكل إطار صورة، والذي كان مرتبطًا بعنوان المخزن المؤقت نفسه في الذاكرة.في Camera2، يتم ضبط الحد الأقصى لعدد الصور في
AImageReaderأوImageReaderباستخدامAImageReader_newأوImageReader.newInstanceعند تهيئة الجلسة. ولا يمكن تغيير هذا العدد بشكل ديناميكي بعد بدء الجلسة. للحصول على رقم تعريف المخزن المؤقت لكل إطار، يمكن للعملاء الاحتفاظ بخريطة تربط عنوان المخزن المؤقت للأجهزة، الذي يتم الحصول عليه من عنصرImage، بمعرّف فريد.
إيقاف البث مؤقتًا واستئنافه
استخدم نظام العرض الموسّع (EVS) الدالتَين
pauseVideoStreamوresumeVideoStream.لا تتوفّر دالتان مكافئتان لهما في Camera2. بدلاً من ذلك، يمكنك استخدام:
stopRepeatingللإيقاف المؤقتsetSingleRepeatingRequestللاستئناف
مَعلمات الكاميرا
استخدم نظام العرض الموسّع (EVS) طرقًا، مثل
setIntParameterلتغيير مَعلمة طلب التقاط الكاميرا.في Camera2، لتعديل المَعلمات، استخدِم واجهة برمجة التطبيقات set لـ
CaptureRequestbuilder ثم أرسِلها.
إليك نماذج من الرموز البرمجية:
Java
CaptureRequest.Builder builder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.set(CaptureRequest.CONTROL_EFFECT_MODE, CaptureRequest.CONTROL_EFFECT_MODE_MONO);
// Submit this request
NDK
ACaptureRequest_setEntry_i32(captureRequest, ACAMERA_CONTROL_EFFECT_MODE, 1, &effectMode);
الكاميرات المنطقية
نظام العرض الموسّع (EVS): بالنسبة إلى الكاميرات المنطقية، مثل "عرض محيطي"، كان "مدير نظام العرض الموسّع" يفتح جميع الكاميرات الفعلية المرتبطة ويبدأ بث الفيديو ويوفر مجموعة متماسكة من الصور.
Camera2: عندما تكون هناك حاجة إلى وظائف مماثلة باستخدام Camera2، يجب أن تدير التطبيقات الكاميرات المنطقية، ما يتطلب منك ما يلي:
- تحديد الكاميرات الفرعية الفعلية المرتبطة بكاميرا منطقية
- فتح كل كاميرا فعلية ضرورية
- بدء البث على كل كاميرا
- مزامنة الإطارات، إذا لزم الأمر في أفضل الأحوال، يتم التعامل مع ذلك في طبقة تجريد الأجهزة (HAL) للمزامنة على مستوى الأجهزة.
سنوفّر مكتبة توافق (طبقة shim) لعملاء نظام العرض الموسّع (EVS) الحاليين لتسهيل عملية النقل. والهدف هو دعم واجهات برمجة تطبيقات Camera2 مع إجراء الحد الأدنى من التغييرات على الرمز البرمجي.
الأذونات
يوضّح هذا القسم التغييرات التي تم إجراؤها على الأذونات.
نظام العرض الموسّع (EVS)
يقتصر الوصول على المعرّفات الفريدة المميّزة (UID). على سبيل المثال،
AID_AUTOMOTIVE_EVS. تشمل الأذونات المتوقّفة نهائيًا
android.car.permission.USE_CAR_EVS_CAMERA.
Camera2
تتطلب Camera2 android.permission.CAMERA. بالنسبة إلى الحالات الخاصة:
android.permission.SYSTEM_CAMERA: للوصول إلى الكاميرات المخفية عن تطبيقات الجهات الخارجية يتطلب أيضًا إذنCAMERA. لمزيد من المعلومات، يُرجى الاطّلاع على الكاميرات على مستوى النظام.android.permission.CAMERA_HEADLESS_SYSTEM_USER: يسمح بالوصول منUser 0، وهو أمر بالغ الأهمية لخدمات مثل كاميرات الرؤية الخلفية التي يجب تشغيلها عند تبديل المستخدمين. يتطلب إذن CAMERA ممنوحًا مسبقًا.android.permission.CAMERA_PRIVACY_ALLOWLIST: يسمح لمصنّعي المعدات الأصلية باستثناء تطبيقات معيّنة بالغة الأهمية للسلامة من مفتاح خصوصية الكاميرا الذي يتحكّم فيه المستخدم.
يجب أن تلتزم تطبيقات الكاميرا البالغة الأهمية للسلامة بسياسات المنح المسبق المضمّنة من Google الموضّحة في مقالة التصميم من أجل القيادة.
العملاء الأساسيون والثانويون
للوصول المشترَك إلى الكاميرا:
قدّم نظام العرض الموسّع (EVS) واجهات برمجة تطبيقات صريحة،
setPrimaryClientوforcePrimaryClient، لإدارة العميل الأساسي الذي كان لديه الـ إذن بتعديل المَعلمات.في Camera2، عند فتح الكاميرا في الوضع المشترَك (الإصدار 16 من Android والإصدارات الأحدث)، تحدّد أولوية العميل الذي يصل إلى الكاميرا العميل الأساسي. يمكن للعميل ذي الأولوية القصوى (عادةً التطبيق الذي يعمل في المقدّمة) تعديل مَعلمات طلب الالتقاط. لا يتم استخدام أي واجهات برمجة تطبيقات مباشرة لفرض الحالة الأساسية. تتم إدارة الحالة الأساسية من خلال الإطار.
الكاميرات على مستوى النظام
لتقييد الوصول إلى جهاز الكاميرا على تطبيقات النظام أو تطبيقات الطرف الأول فقط،
عليك الإعلان عن إمكانية ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA
في طبقة تجريد الأجهزة (HAL) للكاميرا لهذا الجهاز. يجب أن يحصل العملاء على إذن android.permission.SYSTEM_CAMERA، بالإضافة إلى إذن android.permission.CAMERA المرتبط بجهاز الكاميرا هذا.
كاميرا الرؤية الخلفية
نظام العرض الموسّع (EVS)
كان نظام العرض الموسّع (EVS) يتيح سابقًا الوصول إلى الكاميرا قبل بدء تشغيل Android، وهو حدث بالغ الأهمية لميزات مثل كاميرات الرؤية الخلفية. يتحمّل مصنّعو المعدات الأصلية للمركبات مسؤولية الامتثال والشهادات بموجب اللوائح التنظيمية المنصوص عليها في المعيار الفيدرالي لسلامة المركبات الآلية (FMVSS)، رقم 111، الرؤية الخلفية. بالإضافة إلى ذلك، يجب أن يلتزم مصنّعو المعدات الأصلية للمركبات باللوائح التنظيمية الأخرى لكاميرات الرؤية الخلفية.
يعتمد الامتثال على الأجهزة وتنفيذ طبقة تجريد الأجهزة (HAL) وعملية التكامل الشاملة للنظام. بعد بدء تشغيل Android على النظام الأساسي المرجعي، يحتاج نظام العرض الموسّع (EVS) عادةً إلى أربع إلى ست ثوانٍ ليصبح جاهزًا للتشغيل ومنح إذن الوصول إلى الكاميرا.
Camera2
يمكن لعميل مميّز، يتم تحديده من خلال AID_AUTOMOTIVE_EVS UID، استخدام واجهات برمجة تطبيقات Camera2 للوصول إلى الكاميرا قبل اكتمال عملية بدء تشغيل Android. يقتصر هذا الوصول المبكر على الكاميرات على مستوى النظام الموجودة على الجزء الخارجي من المركبة. تستوفي Camera2 مؤشرات الأداء الرئيسية نفسها للوصول المبكر إلى الكاميرا مثل نظام العرض الموسّع (EVS)، الذي يصبح متاحًا عادةً في غضون أربع إلى ست ثوانٍ بعد بدء تشغيل Android.
للحصول على عرض متّسق وغير محجوب لكاميرا الرؤية الخلفية، خاصةً أثناء عمليات نقل المستخدم أو عندما قد تحجب تطبيقات أخرى المعاينة، ننصحك باتّباع هذه الإرشادات عند تنفيذ كاميرا الرؤية الخلفية باستخدام Camera2:
يمكنك تحديد كاميرا الرؤية الخلفية ككاميرا على مستوى النظام لتقييد وصول تطبيقات الجهات الخارجية.
يمكنك تشغيل الخدمة أو التطبيق الذي يصل إلى الكاميرا باسم
User 0باستخدام إذن CAMERA_HEADLESS_SYSTEM_USER. يضمن ذلك بث الكاميرا بدون انقطاع، بغض النظر عن تبديل المستخدم الذي يظهر في المقدّمة.يمكنك إضافة التطبيق إلى قائمة السماح بخصوصية الكاميرا لمنح إذن الوصول إلى الكاميرا حتى عندما يكون مفتاح خصوصية الكاميرا الذي يتحكّم فيه المستخدم مفعّلاً.
CarEVSManager وCarEVSService
كان CarEVSManager يمنح سابقًا تطبيقات Java إذن الوصول إلى الكاميرا. يؤدي النقل
إلى Camera2 إلى استبدال هذه الميزة بـ
standard android.hardware.camera2.CameraManager.
نخطّط لإيقاف CarEVSService نهائيًا، وهي خدمة اختيارية تراقب السمة GEAR_SELECTION VHAL وكانت تُستخدم لبدء نشاط كاميرا الرؤية الخلفية الذي يحدّده مصنّع المعدات الأصلية. على مصنّعي المعدات الأصلية الذين يستخدمون هذه الميزة نقل المنطق المرتبط بها إلى تطبيق مملوك لهم.
- مراقبة السمة
GEAR_SELECTION VHAL - بدء نشاط كاميرا الرؤية الخلفية عند تفعيل الترس الخلفي
- استخدام واجهات برمجة تطبيقات Camera2 لعرض لقطات الكاميرا
عرض شاشة العرض
شاشة العرض في نظام العرض الموسّع (EVS) وخدمة شاشة العرض في السيارات
تم إيقاف هاتَين الميزتَين نهائيًا.
Camera2
يمكنك استخدام طرق العرض العادية في Android مع Surface،
android.hardware.display.DisplayManager، و
android.view.Display.
بالنسبة إلى السيناريوهات التي تتطلب عرض الكاميرا مبكرًا، يمكن أن يوفّر Camera2 ImageReader وصولاً مباشرًا إلى المخزن المؤقت للأجهزة حتى تتمكّن من دمجه مع عمليات تنفيذ شاشة العرض الحالية المستندة إلى إدارة الحقوق الرقمية (DRM) للعرض.
يُسمح بالوصول المبكر إلى الكاميرا حصريًا للعملاء المميّزين الذين لديهم AID_AUTOMOTIVE_EVS_UID ويقتصر على الكاميرات على مستوى النظام الموجودة على الجزء الخارجي من المركبة.
طبقة تجريد الأجهزة (HAL) للمحاكي (طبقة تجريد الأجهزة (HAL) الوهمية لنظام العرض الموسّع (EVS))
نخطّط لإيقاف طبقة تجريد الأجهزة (HAL) الوهمية لنظام العرض الموسّع (EVS) نهائيًا. بدلاً من ذلك، على مصنّعي المعدات الأصلية استخدام طبقة تجريد الأجهزة (HAL) للكاميرا المحاكاة في Camera2
، hardware/google/camera/devices/EmulatedCamera/والتي نخطّط لدعم ما يلي فيها:
- عدد الكاميرات القابل للإعداد
- أنماط اختبار الأشرطة الملوّنة
- محاكاة ملفات الفيديو
لتضمين طبقة تجريد الأجهزة (HAL) هذه في الإصدار:
# In device.mk
PRODUCT_SOONG_NAMESPACES += hardware/google/camera/devices/EmulatedCamera
PRODUCT_PACKAGES += com.google.emulated.camera.provider.hal
مطلوب أيضًا سياسات Linux المحسّنة للأمان (SELinux) المناسبة للسماح لـ cameraserver بالتفاعل مع خدمة طبقة تجريد الأجهزة (HAL) للكاميرا المحاكاة.
طبقة تجريد الأجهزة (HAL) لكاميرا V4L2 UVC
نخطّط لإيقاف طبقة تجريد الأجهزة (HAL) لـ V4L2 في نظام العرض الموسّع (EVS) نهائيًا. يمكنك استخدام دعم الكاميرا الخارجية في Camera2 لكاميرات USB (UVC). لمزيد من المعلومات، يُرجى الاطّلاع على الكاميرات الخارجية المتصلة عبر USB.
واجهات برمجة تطبيقات الموجات فوق الصوتية
نخطّط لإيقاف واجهات برمجة تطبيقات الموجات فوق الصوتية في نظام العرض الموسّع (EVS) نهائيًا. بدلاً من ذلك، يمكنك استخدام سمات VHAL التالية التي تم طرحها في Android 15 لرصد أجهزة الاستشعار فوق الصوتية.
| السمة | النوع | التعريف |
|---|---|---|
ULTRASONICS_SENSOR_POSITION |
ثابت | {<x>, <y>, <z>}
بالملليمترات، تمثّل كل قيمة موضع جهاز الاستشعار على طول المحور المرتبط بالنسبة إلى إطار إحداثيات جهاز استشعار AAOS. |
ULTRASONICS_SENSOR_ORIENTATION |
ثابت | {<qw>, <qx>, <qy>, <qz>}
وهو دوران جهاز الاستشعار هذا حول الرباعي بالنسبة إلى إطار إحداثيات جهاز استشعار AAOS: $$w+xi+yj+zk$$ |
ULTRASONICS_SENSOR_FIELD_OF_VIEW |
ثابت | {<horizontal>, <vertical>}
بالدرجات، مجال رؤية جهاز الاستشعار الأفقي والعمودي |
ULTRASONICS_SENSOR_DETECTION_RANGE |
ثابت | {<minimum>, <maximum>}
بالملليمترات، نطاق رصد جهاز الاستشعار |
ULTRASONICS_SENSOR_DETECTION_RANGES |
ثابت | {<range_min_1>, <range_max_1>, <range_min_2>,
<range_max_2>}
بالملليمترات، شاملة، هي مجموعة من نطاقات رصد جهاز الاستشعار المتوافقة. |
ULTRASONICS_SENSOR_DETECTION_RANGES |
غير متقطع | {<distance>, <distance_error>}
بالملليمترات، هي المسافة التي تم قياسها لجهاز الاستشعار والخطأ في المسافة. إذا كان النطاق فقط هو المتوافق، فهذه هي الحد الأدنى للمسافة في النطاق الذي تم رصده. |