الطلبات
يُصدر إطار عمل التطبيق طلبات النتائج المسجَّلة إلى النظام الفرعي للكاميرا. يتجاوب طلب واحد مع مجموعة واحدة من النتائج. يتضمن الطلب جميع معلومات التكوين المتعلقة بالتقاط هذه النتائج ومعالجتها. يتضمن ذلك عناصر مثل درجة الدقة وتنسيق البكسل؛ وأداة استشعار يدوية، وعدسة، والتحكم في الفلاش؛ 3A أوضاع التشغيل؛ التحكّم في معالجة RAW إلى YUV أو إنشاء الإحصاءات. ويسمح هذا الإجراء بقدر أكبر من التحكم في النتائج المخرجات والمعالجة. يمكن إرسال طلبات متعددة في الوقت نفسه إرسال الطلبات التي لا يحظرها وتتم معالجة الطلبات دائمًا في الترتيب الذي تم استلامه.
طبقة تجريد الأجهزة (HAL) والنظام الفرعي للكاميرا
يتضمن النظام الفرعي للكاميرا تنفيذات للمكونات في الكاميرا مثل خوارزمية 3A وعناصر التحكم في المعالجة. طبقة تجريد الأجهزة (HAL) للكاميرا توفّر واجهات برمجة تطبيقات تعمل على تنفيذ إصداراتك من هذه المكوّنات. إلى الحفاظ على التوافق عبر المنصات بين العديد من الشركات المصنعة للأجهزة مورّدو معالج إشارات الصور (ISP، أو مستشعر الكاميرا)، ومسار الكاميرا يُعد نموذجيًا افتراضيًا ولا يتوافق بشكل مباشر مع أي مزود خدمة إنترنت حقيقي. ومع ذلك، مشابهة بما يكفي لمسارات المعالجة الحقيقية بحيث يمكنك تعيينها إلى الأجهزة بكفاءة. بالإضافة إلى ذلك، فهي مجردة بما يكفي للسماح للعديد من الخوارزميات وأوامر التشغيل المختلفة دون المساس بأي منهما الجودة أو الكفاءة أو التوافق عبر الأجهزة.
يتوافق مسار الكاميرا أيضًا مع المشغِّلات التي يمكن أن يبدأها إطار عمل التطبيق لتشغيل ميزات مثل ميزة "التركيز التلقائي". كما أنه يرسل الإشعارات مرة أخرى إلى إطار عمل التطبيق الذي يُعلِم التطبيقات بالأحداث، مثل قفل التركيز التلقائي أو الأخطاء.
يرجى ملاحظة أن بعض كتل معالجة الصور الموضحة في الرسم التخطيطي أعلاه ليست محددة جيدًا في الإصدار الأولي. تعمل مسارات الكاميرا على ما يلي: الافتراضات:
- لا تخضع مخرجات RAW Bayer لأي معالجة داخل مزود خدمة الإنترنت.
- يتم إنشاء الإحصاءات استنادًا إلى بيانات المستشعر الأولية.
- تقع كتل المعالجة المختلفة التي تحول بيانات جهاز الاستشعار الأولية إلى YUV في ترتيبًا عشوائيًا.
- وفي حين أنه يتم عرض وحدات قياس واقتصاص متعددة، تشارك كل وحدات المقياس عناصر التحكم في منطقة الإخراج (تكبير/تصغير رقمي). ومع ذلك، قد يكون لكل وحدة عنوان درجة دقة الإخراج وتنسيق البكسل.
ملخّص استخدام واجهة برمجة التطبيقات
إليك ملخّص موجز لخطوات استخدام واجهة برمجة التطبيقات Android Camera API. يمكنك الاطّلاع على
قسم تسلسل عمليات بدء التشغيل والمتوقع للحصول على شرح تفصيلي
هذه الخطوات، بما في ذلك طلبات بيانات من واجهة برمجة التطبيقات.
- الاستماع إلى أجهزة الكاميرا وتعدادها
- افتح الجهاز واربط المستمعين.
- اضبط المخرجات لحالة الاستخدام المستهدفة (مثل التقاط الصور أو تسجيلها أو وما إلى ذلك).
- إنشاء طلبات لحالة الاستخدام المستهدفة
- تسجيل/تكرار الطلبات واللقطات المتسلسلة
- تلقّي البيانات الوصفية للنتائج وبيانات الصور.
- عند تبديل حالات الاستخدام، ارجع إلى الخطوة 3.
ملخّص عمليات HAL
- تأتي الطلبات غير المتزامنة للالتقاط من إطار العمل.
- يجب أن يعالج جهاز HAL الطلبات بالترتيب. ولكل طلب، قم بإنتاج البيانات الوصفية لنتائج المخرجات ومخزن مؤقت واحد أو أكثر لصور المخرجات.
- يُدرج ترتيبًا أوّلًا في الطلبات والنتائج وعمليات البث المُشار إليها من قِبل الطلبات اللاحقة.
- ويجب أن تكون الطوابع الزمنية متطابقة لجميع المخرجات في طلب معيّن، بحيث وإطار العمل الخاص بك أن يطابقها معًا إذا لزم الأمر.
- جميع إعدادات وحالة الالتقاط (باستثناء سلاسل إجراءات 3A) يتم تضمينها في الطلبات والنتائج.
بدء التشغيل وتسلسل العملية المتوقّع
يحتوي هذا القسم على شرح مفصل للخطوات المتوقعة عند استخدام واجهة برمجة تطبيقات الكاميرا. يُرجى مراجعة النظام الأساسي/الأجهزة/الواجهات/الكاميرا/ لواجهة HIDL التعريفات.
تعداد أجهزة الكاميرا وفتحها وإنشاء جلسة نشطة
- بعد الإعداد، يبدأ إطار العمل بالاستماع إلى أي محتوى متوفّر حاليًا.
لمزودي الكاميرات الذين ينفذون
واجهة
ICameraProvider
. إذا كان مقدّم الخدمة أو ومزودي الخدمة، سيحاول إطار العمل إنشاء اتصال. - يعدد إطار العمل أجهزة الكاميرا عبر
ICameraProvider::getCameraIdList()
- ينشئ إطار العمل مثيلاً لـ
ICameraDevice
جديد من خلال استدعاء الدالة ذات الصلةICameraProvider::getCameraDeviceInterface_VX_X()
- يستدعي إطار العمل
ICameraDevice::open()
لإنشاء عنصر جلسة الالتقاط النشطة I CameraDeviceSession.
استخدام جلسة كاميرا نشطة
- يستدعي إطار العمل
ICameraDeviceSession::configureStreams()
. تحتوي على قائمة بمصادر الإدخال/الإخراج إلى جهاز HAL. - يطلب إطار العمل الإعدادات التلقائية لبعض حالات الاستخدام
مكالمة إلى
ICameraDeviceSession::constructDefaultRequestSettings()
. وقد يحدث ذلك في أي وقت بعدICameraDeviceSession
. تم الإنشاء بواسطةICameraDevice::open
. - ينشئ الإطار طلب الالتقاط الأول ويرسله إلى HAL مع
تستند إلى إحدى مجموعات الإعدادات الافتراضية، ومع خيار
مصدر البيانات الذي تم تسجيله مسبقًا في إطار العمل. تم إرسال هذا
إلى HAL مع
ICameraDeviceSession::processCaptureRequest()
. يجب أن تحظر HAL عودة هذه المكالمة حتى تكون جاهزة للمكالمة التالية أن يتم إرسال الطلب. - يستمر إطار العمل في إرسال الطلبات والمكالمات.
ICameraDeviceSession::constructDefaultRequestSettings()
للوصول إلى الإعدادات الافتراضية لحالات الاستخدام الأخرى حسب الضرورة. - عندما يبدأ التقاط طلب (تبدأ أداة الاستشعار في الكشف عن
) إلا أن HAL تستدعي
ICameraDeviceCallback::notify()
مع رسالة SHUTTER، بما في ذلك رقم الإطار والطابع الزمني للبدء من التعرض للأصوات. لا يجب أن تحدث معاودة الاتصال هذه قبل أول هناك مكالمة واحدة (processCaptureResult()
) لطلب ما، ولكن لم يتم العثور على نتائج. تسليمه إلى التطبيق لالتقاط صورة حتى يتم استدعاءnotify()
لهذا الالتقاط. - وبعد بعض التأخير في خط الأنابيب، تبدأ طبقة تجريد الأجهزة (HAL) في عرض الالتقاطات المكتملة إلى
إطار العمل مع
ICameraDeviceCallback::processCaptureResult()
. ويتم إرجاعها بنفس الترتيب الذي تم فيه إرسال الطلبات. منتجات الطلبات في رحلة واحدة، اعتمادًا على عمق مسار جهاز HAL للكاميرا.
وبعد مرور بعض الوقت، سيحدث أحد الأمور التالية:
- وقد يتوقّف إطار العمل عن إرسال طلبات جديدة، لذا يُرجى الانتظار إلى
عمليات الالتقاط الحالية التي سيتم استكمالها (تم ملء جميع الموارد الاحتياطية، ويتم تسجيل جميع النتائج
عادت)، ثم الاتصال بـ
ICameraDeviceSession::configureStreams()
مرة أخرى. يؤدي هذا إلى إعادة ضبط معدات الكاميرا ومسارها لمجموعة جديدة من مصادر إدخال وإخراج. قد تتم إعادة استخدام بعض أحداث البث من الفيديو السابق التكوين. بعد ذلك، يستمر إطار العمل بدءًا من طلب الالتقاط الأول. إلى HAL، إذا كان هناك واحد على الأقل يبقى تدفق مخرجات مسجل. (بخلاف ذلك،ICameraDeviceSession::configureStreams()
مطلوب أولاً.) - قد يستدعي إطار العمل
ICameraDeviceSession::close()
لإنهاء جلسة الكاميرا. قد يتم الاتصال بهذا في أي وقت في حال عدم وجود مكالمات أخرى من إطار العمل نشطًا، على الرغم من أن الاتصال قد يتم حظره حتى يتم اكتملت عمليات التقاط الصور أثناء الطيران (تم عرض جميع النتائج، وجميع الموارد الاحتياطية ممتلئة). بعد عودة مكالمةclose()
، لن يعود هناك المزيد من المكالمات إلى يُسمح باستخدامICameraDeviceCallback
من طبقة تجريد الأجهزة (HAL). بمجرد هناك طلبclose()
قيد التنفيذ، وقد لا يستدعي إطار العمل أي استدعاءات أخرى وظائف جهاز HAL. - في حال حدوث خطأ أو حدث آخر غير متزامن، يجب أن يتم استدعاء HAL
ICameraDeviceCallback::notify()
باستخدام القيمة المناسبة خطأ/حدث. بعد الرجوع من إشعار خطأ فادح على مستوى الجهاز، من المفترض أن تكون HAL كما لو تم استدعاء "close()
" فيها. ومع ذلك، يجب أن تتوفر إما الإلغاء أو إكمال جميع اللقطات المعلّقة قبل الاتصال بالرقمnotify()
بحيث بمجرد يتم استدعاء الدالةnotify()
مع وجود خطأ فادح، فلن يكون لإطار العمل تلقّي المزيد من معاودة الاتصال من الجهاز. الطرق بالإضافة إلى علىclose()
إرجاعها. -ENODEV أو NULL بعد رجوع الطريقةnotify()
من جدول بيانات فادح .
مستويات الأجهزة
يمكن لأجهزة الكاميرا تنفيذ عدة مستويات للأجهزة اعتمادًا على والإمكانات. لمزيد من المعلومات، يُرجى مراجعة مستوى الأجهزة المتوافقة.
التفاعل بين طلب التقاط التطبيق وعناصر التحكم 3A ومسار المعالجة
بناءً على الإعدادات في مجموعة التحكم 3A، يتجاهل مسار الكاميرا بعض المعلمات في طلب التقاط التطبيق وتستخدم القيم التي توفرها سلاسل إجراءات التحكم 3A بدلاً من ذلك. على سبيل المثال، عندما يكون التعرض التلقائي للضوء نشطة، ووقت التعرّض للضوء، ومدة عرض اللقطة، ومَعلَمات الحساسية بواسطة خوارزمية المنصة 3A، وأي قيم محددة للتطبيق وتجاهلها. يجب الإبلاغ عن القيم التي تم اختيارها للإطار من خلال سلاسل الإجراءات 3A. في بيانات التعريف للمخرجات. يصف الجدول التالي الأوضاع المختلفة 3A كتلة التحكم والخصائص التي يتم التحكم فيها من خلال هذه الأوضاع. عرض Platform/system/media/camera/docs/docs.html للاطّلاع على تعريفات هذه السمات.
المَعلمة | الولاية | الخصائص التي يتم التحكّم فيها |
---|---|---|
android.control.aeMode | إيقاف | بدون تحديد نمط |
تفعيل | android.sensor.exposureTime android.sensor.frameDuration android.sensor.sensitivity android.lens.aperture (إذا كان متوافقًا) android.lens.filterDensity (إذا كان ذلك متاحًا) | |
تشغيل_الفلاش_التلقائي | كل شيء قيد التشغيل، بالإضافة إلى android.flash.firingPower وandroid.flash.firingTime وandroid.flash.mode | |
ON_ALWAYS_FLASH | مثل ON_auto_FLASH | |
ON_auto_FLASH_RED_EYE | مثل ON_auto_FLASH | |
android.control.awbMode | إيقاف | بدون تحديد نمط |
WHITE_توازن_* | android.colorDebugion.transform. التعديلات الخاصة بنظام التشغيل إذا كان android.colorDebugion.mode هو FAST أو HIGH_QUALITY. | |
android.control.afMode | إيقاف | بدون تحديد نمط |
FOCUS_mode_* | android.lens.focusAmount | |
android.control.videoStabilization | إيقاف | بدون تحديد نمط |
تفعيل | يمكن ضبط android.scaler.cropRegion لتفعيل تثبيت الفيديو. | |
android.control.mode | إيقاف | AE وAWB وAF غير مفعّلة |
تلقائي | يتم استخدام إعدادات AE وAWB وAF الفردي | |
SCENE_mode_* | يمكن إلغاء جميع المَعلمات الواردة أعلاه. تم إيقاف عناصر تحكم 3A الفردية. |
تعمل جميع عناصر التحكم في كتلة معالجة الصور في الشكل 2 على مبدأ متشابه، وبوجه عام لكل كتلة ثلاثة أوضاع:
- غير مفعّل: تم إيقاف مجموعة المعالجة هذه. النموذج التجريبي وتصحيح الألوان لا يمكن إيقاف كتل تعديل منحنى نغمة الرنين.
- سريع: في هذا الوضع، قد لا تؤدي كتلة المعالجة إلى إبطاء إطار الإخراج. مقارنةً بوضع "إيقاف التشغيل"، إلا أنه من المفترض أن ينتج إخراجه من خلال وضع هذا القيد. عادةً، سيتم استخدام هذا أوضاع المعاينة أو تسجيل الفيديو أو الالتقاط المتسلسلة للصور الثابتة. في بعض من الأجهزة، قد يعادل ذلك وضع "إيقاف التشغيل" (لا يمكن إجراء أي معالجة بدون مما يقلل عدد اللقطات في الثانية)، وقد يساوي ذلك في بعض الأجهزة وضع HIGH_QUALITY (لا تزال أفضل جودة لا تؤدي إلى إبطاء معدل عرض الإطارات).
- HIGH_QUALITY: في هذا الوضع، يجب أن تنتج عن كتلة المعالجة أفضل جودة نتيجة البحث، مما يؤدي إلى إبطاء عدد اللقطات في الثانية عند الحاجة. ويتم استخدام هذه الطريقة عادةً لالتقاط الصور الثابتة بجودة عالية. بعض المساحات تضمين تحكم يدوي يمكن تحديده اختياريًا بدلاً من FAST أو HIGH_QUALITY. على سبيل المثال، تدعم كتلة تصحيح الألوان أحد الألوان مصفوفة التحويل، بينما يدعم تعديل منحنى النبرة طريقة عامة عشوائية منحنى تعيين الدرجات اللونية.
الحد الأقصى لعدد اللقطات في الثانية الذي يمكن أن يدعمه النظام الفرعي للكاميرا هو دالة من عدة عوامل:
- درجات الدقة المطلوبة لعمليات بث الصور الناتجة
- مدى توفُّر أوضاع التجميع/التخطّي في أداة الصور
- النطاق الترددي لواجهة أداة التصوير
- النطاق الترددي للكتل المختلفة لمعالجة مزود خدمة الإنترنت (ISP)
ونظرًا لأن هذه العوامل قد تختلف اختلافًا كبيرًا بين مزودي خدمة الإنترنت وأجهزة الاستشعار المختلفين، واجهة HAL للكاميرا تبسيط قيود معدل نقل البيانات ممكن. الخصائص التالية للنموذج المقدّم:
- يتم ضبط أداة استشعار الصور دائمًا لإخراج أصغر درجة دقة ممكن نظرًا لأحجام بث الإخراج المطلوبة للتطبيق. الأصغر يتم تعريف الحل على أنه كبير على الأقل بحجم أكبر حجم مصدر البيانات
- وبما أنّ أيّ طلب قد يستخدم بعض مصادر البيانات التي تم ضبطها حاليًا أو جميعها، يجب تهيئة المستشعر ومزود خدمة الإنترنت لدعم توسيع نطاق التقاط صورة واحدة كل مجموعات البث في الوقت نفسه
- تعمل مجموعات بث JPEG مثل عمليات بث YUV التي تمت معالجتها للطلبات التي تتم غير مُضمَّنة في الطلبات التي تتم الإشارة إليها فيها مباشرةً، تدفقات JPEG
- يمكن تشغيل معالج JPEG بالتزامن مع بقية مسار الكاميرا، ولكن لا يمكن معالجة أكثر من لقطة واحدة في الوقت نفسه.