تصف هذه الصفحة عملية الكاميرا وتحسينها، بما في ذلك تيارات الإخراج والاقتصاص وإعادة المعالجة والتكبير/التصغير.
تيارات الإخراج
يعمل النظام الفرعي للكاميرا فقط على مسار الأنابيب المستند إلى ANativeWindow لـ جميع درجات الدقة وتنسيقات الإخراج. يمكن ضبط تيارات متعددة في وقت واحد لإرسال إطار واحد إلى العديد من الأهداف، مثل وحدة معالجة الرسومات أو أداة ترميز الفيديو أو RenderScript أو المخازن المؤقتة المرئية للتطبيق (RAW Bayer أو المخازن المؤقتة التي تمّت معالجتها بتنسيق YUV أو المخازن المؤقتة المرمَّزة بتنسيق JPEG).
كتحسين، يجب ضبط تيارات الإخراج هذه مسبقًا، و لا يمكن أن يكون هناك سوى عدد محدود منها في وقت واحد. يسمح ذلك بالتخصيص المسبق لـ مخازن الذاكرة المؤقتة وضبط أجهزة الكاميرا، بحيث لا تحدث تأخيرات أو حالات بطء في تلبية الطلب عند إرسال الطلبات مع إدراج مسارات أنابيب إخراج متعددة أو مختلفة.
لمزيد من المعلومات عن مجموعات إخراج التيارات المضمونة
التي تعتمد على مستوى الأجهزة المتوافق، يُرجى الاطّلاع على
createCaptureSession.
الاقتصاص
يتم إرسال إشعار باقتصاص مجموعة البكسل الكاملة (للتكبير/التصغير الرقمي وحالات الاستخدام الأخرى التي يكون فيها مجال رؤية أصغر مرغوبًا) من خلال الإعداد ANDROID_SCALER_CROP_REGION. هذا إعداد لكل طلب، ويمكن تغييره لكل طلب،
وهو أمر بالغ الأهمية لتنفيذ التكبير/التصغير الرقمي السلس.
يتم تحديد المنطقة على شكل مستطيل (x، y، العرض، الارتفاع)، مع وصف (x، y)
للزاوية العلوية اليمنى من المستطيل. يتم تحديد المستطيل على نظام الإحداثيات لمجموعة البكسل النشطة في أداة الاستشعار، مع اعتبار (0,0) البكسل العلوي الأيمن من مجموعة البكسل النشطة. لذلك، لا يمكن أن يكون العرض والارتفاع أكبر من الأبعاد التي تم الإبلاغ عنها في حقل المعلومات الثابتة.ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY يتم الإبلاغ عن الحد الأدنى المسموح به للعرض والارتفاع من خلال HAL
من خلال حقل المعلومات الثابتة ANDROID_SCALER_MAX_DIGITAL_ZOOM، الذي يصف
الحد الأقصى لعامل التكبير/التصغير المتوافق. لذلك، فإنّ الحد الأدنى لعرض منطقة الاقتصاص و
ارتفاعها هما:
{width, height} =
{ floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
ANDROID_SCALER_MAX_DIGITAL_ZOOM),
floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
ANDROID_SCALER_MAX_DIGITAL_ZOOM) }
إذا كانت منطقة الاقتصاص بحاجة إلى استيفاء متطلبات معيّنة (على سبيل المثال، يجب أن تبدأ بإحداثيات زوجية، ويجب أن يكون عرضها/ارتفاعها زوجيًا)، يجب أن تجري HAL عملية التقريب اللازمة وتكتب منطقة الاقتصاص النهائية المستخدَمة في البيانات الوصفية لنتيجة الإخراج. وبالمثل، إذا كانت HAL تنفّذ ميزة تثبيت الفيديو، يجب أن تعدّل منطقة اقتصاص النتيجة لوصف المنطقة المضمّنة فعليًا في الإخراج بعد تطبيق ميزة تثبيت الفيديو. بشكل عام، يجب أن يكون التطبيق الذي يستخدم الكاميرا قادرًا على تحديد مجال الرؤية الذي يتلقّاه استنادًا إلى منطقة الاقتصاص وأبعاد وحدة استشعار الصور والبعد البؤري للعدسة.
بما أنّ منطقة الاقتصاص تنطبق على جميع التيارات التي قد تكون لها نسب عرض إلى ارتفاع مختلفة عن منطقة الاقتصاص، قد تكون منطقة أداة الاستشعار الدقيقة المستخدَمة لكل تيار أصغر من منطقة الاقتصاص. على وجه التحديد، يجب أن يحافظ كل تيار على البكسل المربّع ونسبة العرض إلى الارتفاع من خلال اقتصاص منطقة الاقتصاص المحدّدة بشكل طفيف. إذا كانت نسبة العرض إلى الارتفاع للتيار أوسع من منطقة الاقتصاص، يجب اقتصاص التيار بشكل أكبر عموديًا، وإذا كانت نسبة العرض إلى الارتفاع للتيار أضيق من منطقة الاقتصاص، يجب اقتصاص التيار بشكل أكبر أفقيًا.
في جميع الحالات، يجب أن يكون اقتصاص التيار متمركزًا ضمن منطقة الاقتصاص الكاملة، و لا يتم اقتصاص كل تيار إلا أفقيًا أو عموديًا بالنسبة إلى منطقة الاقتصاص الكاملة، وليس كليهما.
على سبيل المثال، إذا تم تحديد تيارَين، تيار بدقة 640×480 (نسبة العرض إلى الارتفاع 4:3) وتيار بدقة 1280×720 (نسبة العرض إلى الارتفاع 16:9)، يوضّح ما يلي مناطق الإخراج المتوقّعة لكل تيار لبعض مناطق الاقتصاص النموذجية، على مستشعر افتراضي بدقة 3 ميغابكسل (مجموعة بكسل بدقة 2000 × 1500).
منطقة الاقتصاص: (500، 375، 1000، 750) (نسبة العرض إلى الارتفاع 4:3)
اقتصاص التيار بدقة 640×480: (500، 375، 1000، 750) (يساوي منطقة الاقتصاص)
اقتصاص التيار بدقة 1280×720: (500، 469، 1000، 562)
الشكل 1: نسبة العرض إلى الارتفاع 4:3
منطقة الاقتصاص: (500، 375، 1333، 750) (نسبة العرض إلى الارتفاع 16:9)
اقتصاص التيار بدقة 640×480: (666، 375، 1000، 750)
اقتصاص التيار بدقة 1280×720: (500، 375، 1333، 750) (يساوي منطقة الاقتصاص)
الشكل 2: نسبة العرض إلى الارتفاع 16:9
منطقة الاقتصاص: (500، 375، 750، 750) (نسبة العرض إلى الارتفاع 1:1)
اقتصاص التيار بدقة 640×480: (500، 469، 750، 562)
اقتصاص التيار بدقة 1280×720: (500، 543، 750، 414)
الشكل 3: نسبة العرض إلى الارتفاع 1:1
ومثال أخير، تيار بنسبة عرض إلى ارتفاع مربّعة بدقة 1024×1024 بدلاً من التيار بدقة 480p
stream:
منطقة الاقتصاص: (500، 375، 1000، 750) (نسبة العرض إلى الارتفاع 4:3)
اقتصاص التيار بدقة 1024×1024: (625، 375، 750، 750)
اقتصاص التيار بدقة 1280×720: (500، 469، 1000، 562)
الشكل 4: نسبة العرض إلى الارتفاع 4:3، مربّعة
إعادة المعالجة
يتم توفير دعم إضافي لملفات الصور الأولية من خلال دعم إعادة معالجة بيانات RAW Bayer. يسمح هذا الدعم لمسار أنابيب الكاميرا بمعالجة مخزن مؤقت للبيانات الأولية والبيانات الوصفية التي تم التقاطها سابقًا (إطار كامل تم تسجيله سابقًا)، لإنتاج إخراج جديد بتنسيق YUV أو JPEG.
تكبير/تصغير
بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من Android أو إصدار أحدث، يمكن للتطبيق استخدام ميزة التكبير/التصغير
(الرقمي والبصري) في الكاميرا من خلال الإعداد ANDROID_CONTROL_ZOOM_RATIO.
يتم تحديد نسبة التكبير/التصغير كعامل نقطة عائمة. بدلاً من استخدام ANDROID_SCALER_CROP_REGION للاقتصاص والتكبير/التصغير، يمكن للتطبيق استخدام ANDROID_CONTROL_ZOOM_RATIO للتحكّم في مستوى التكبير/التصغير، واستخدام ANDROID_SCALER_CROP_REGION للاقتصاص الأفقي والعمودي لتحقيق نسب عرض إلى ارتفاع مختلفة عن مستشعر الكاميرا الأصلي.
قد يحتوي نظام الكاميرات المتعددة على أكثر من عدسة واحدة بأطوال بؤرية مختلفة، ويمكن للمستخدم استخدام التكبير/التصغير البصري من خلال التبديل بين العدسات.
يقدّم استخدام ANDROID_CONTROL_ZOOM_RATIO مزايا في السيناريوهات التالية:
- التكبير/التصغير من عدسة واسعة إلى عدسة مقرِّبة (تيليفوتو): توفّر نسبة النقطة العائمة
دقة أفضل مقارنةً بالقيم الصحيحة لـ
ANDROID_SCALER_CROP_REGION. - التصغير من عدسة واسعة إلى عدسة لالتقاط صور موسّعة:
ANDROID_CONTROL_ZOOM_RATIOيتيح التصغير (<1.0f)، بينما لا يتيحANDROID_SCALER_CROP_REGIONذلك.
نسبة التكبير/التصغير: 2.0؛ رُبع مجال الرؤية الأصلي
منطقة الاقتصاص: (0، 0، 2000، 1500) (نسبة العرض إلى الارتفاع 4:3)
اقتصاص التيار بدقة 640×480: (0، 0، 2000، 1500) (يساوي منطقة الاقتصاص)
اقتصاص التيار بدقة 1280×720: (0، 187، 2000، 1125)
الشكل 5: التكبير/التصغير 2.0، نسبة العرض إلى الارتفاع 4:3
نسبة التكبير/التصغير: 2.0؛ رُبع مجال الرؤية الأصلي
منطقة الاقتصاص: (0، 187، 2000، 1125) (نسبة العرض إلى الارتفاع 16:9)
اقتصاص البث بدقة 640×480: (250، 187، 1500، 1125) (مُعد للعرض على شاشة عريضة عموديًا)
اقتصاص البث بدقة 1280×720: (0، 187، 2000، 1125) (يساوي منطقة الاقتصاص)
الشكل 6: التكبير/التصغير 2.0، نسبة العرض إلى الارتفاع 16:9
نسبة التكبير/التصغير: 0.5؛ 4 أضعاف مجال الرؤية الأصلي (تم التبديل من عدسة واسعة إلى عدسة فائقة الاتساع)
منطقة الاقتصاص: (250، 0، 1500، 1500) (نسبة العرض إلى الارتفاع 1:1)
اقتصاص التيار بدقة 640×480: (250، 187، 1500، 1125) (مُحاط بأشرطة أفقية)
اقتصاص التيار بدقة 1280×720: (250، 328، 1500، 844) (مُحاط بأشرطة أفقية)
الشكل 7: التكبير/التصغير 0.5، نسبة العرض إلى الارتفاع 1:1
كما هو موضّح في الرسوم البيانية أعلاه، يتغيّر نظام إحداثيات منطقة الاقتصاص إلى مجال الرؤية الفعال بعد التكبير/التصغير، ويتم تمثيله بالمستطيل الذي يتضمّن الأبعاد التالية: (0، 0، activeArrayWith، activeArrayHeight). وينطبق الأمر نفسه على مناطق التعرّض التلقائي/توازن اللون الأبيض/التركيز التلقائي والوجوه. لا ينطبق تغيير نظام الإحداثيات هذا على التقاط الصور الأولية والبيانات الوصفية ذات الصلة، مثل intrinsicCalibration وlensShadingMap.
باستخدام المثال الافتراضي نفسه أعلاه، وبافتراض أنّ تيار الإخراج رقم 1 (640×480) هو تيار عدسة الكاميرا، يمكن تحقيق التكبير/التصغير بمقدار 2.0x بإحدى الطريقتَين التاليتَين:
zoomRatio = 2.0،scaler.cropRegion = (0, 0, 2000, 1500)zoomRatio = 1.0(تلقائي)،scaler.cropRegion = (500, 375, 1000, 750)
لكي يضبط التطبيق android.control.aeRegions ليكون الربع العلوي الأيسر من مجال رؤية عدسة الكاميرا، اضبط android.control.aeRegions على (0, 0, 1000, 750) مع ضبط android.control.zoomRatio على 2.0. بدلاً من ذلك، يمكن للتطبيق ضبط android.control.aeRegions على المنطقة المكافئة لـ (500, 375, 1000, 750) لـ android.control.zoomRatio بقيمة 1.0.