مصادر البيانات الناتجة
يعمل النظام الفرعي للكاميرا فقط على مسار ANativeWindow المستنِد إلى جميع درجات الدقة وتنسيقات الإخراج. يمكن ضبط أحداث بث متعددة في وقت واحد لإرسال إطار واحد إلى العديد من الأهداف، مثل وحدة معالجة الرسومات أو RenderScript أو وحدات التخزين المؤقت المرئية للتطبيق (وحدات التخزين المؤقت RAW Bayer أو YUV التي تمت معالجتها أو وحدات التخزين المؤقت بترميز JPEG).
ولإجراء تحسين، يجب ضبط مصادر الإخراج هذه مسبقًا، ويمكن أن يتوفّر عدد محدود منها في الوقت نفسه. يتيح ذلك تخصيص ملفّات ذاكرة مؤقتة مسبقًا وضبط أجهزة الكاميرا، بحيث لا تحدث تأخيرات أو وقت استجابة عند إرسال الطلبات مع إدراج مسارات إخراج متعددة أو متغيرة.
لمزيد من المعلومات عن مجموعات مخرجات البث المضمونة
التي تعتمد على مستوى الأجهزة المتوافقة، يُرجى الاطّلاع على
createCaptureSession()
.
الاقتصاص
يتمّ اقتصاص صفيف البكسل الكامل (للتكبير الرقمي وحالات الاستخدام الأخرى التي يكون فيها استخدام مجال رؤية أصغر مرغوبًا فيه) من خلال الإعداد ANDROID_SCALER_CROP_REGION. هذا الإعداد خاص بكل طلب، ويمكن تغييره حسب الطلب، وهو أمر مهم لتنفيذ التكبير الرقمي السلس.
يتم تعريف المنطقة على أنّها مستطيل (x, y, width, height)، مع (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 التقريب اللازم ويكتب منطقة الاقتصاص النهائية المستخدَمة في metadata لنتيجة المخرجات. وبالمثل، إذا كان HAL ينفّذ ميزة تثبيت الفيديو، يجب تعديل منطقة اقتصاص النتيجة لوصف المنطقة المضمّنة فعليًا في النتيجة بعد تطبيق ميزة تثبيت الفيديو. بشكل عام، يجب أن يكون التطبيق الذي يستخدم الكاميرا قادرًا على تحديد مجال الرؤية الذي يتلقّاه استنادًا إلى منطقة الاقتصاص وأبعاد أداة استشعار الصور وطول بؤرة العدسة.
بما أنّ منطقة الاقتصاص تنطبق على جميع مصادر البيانات التي قد يكون لها نسب قياس مختلفة عن منطقة الاقتصاص، قد تكون منطقة أداة الاستشعار الدقيقة المستخدَمة لكل مصدر بيانات أصغر من منطقة الاقتصاص. على وجه التحديد، يجب أن تحافظ كل بث على وحدات بكسل مربعة ونسبة عرض إلى ارتفاع من خلال اقتصاص منطقة القص المحدّدة بدرجة بسيطة. إذا كانت نسبة العرض إلى الارتفاع في البث أوسع من منطقة الاقتصاص، يجب اقتصاص البث بشكل أكبر عموديًا، وإذا كانت نسبة العرض إلى الارتفاع في البث أضيق من منطقة الاقتصاص، يجب اقتصاص البث بشكل أكبر أفقيًا.
في جميع الحالات، يجب وضع اقتصاص البث في منتصف منطقة الاقتصاص الكاملة، ويجب اقتصاص كل بث إما أفقيًا أو عموديًا فقط بالنسبة إلى منطقة الاقتصاص الكاملة، وعدم اقتصاصه كليهما مطلقًا.
على سبيل المثال، إذا تم تحديد مصدرَين للبث، أحدهما بدقة 640x480 (نسبة العرض إلى الارتفاع 4:3) والثاني بدقة 1280x720 (نسبة العرض إلى الارتفاع 16:9)، يوضّح الجدول التالي مناطق الإخراج المتوقّعة لكل مصدر بث لبعض نماذج مناطق الاقتصاص، وذلك باستخدام كاميرا افتراضية بدقة 3 ميغا بكسل (مصفوفة بكسل 2000 x 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:
منطقة الاقتصاص: (500، 375، 1000، 750) (نسبة العرض إلى الارتفاع 4:3)
اقتصاص البث بدقة 1024×1024: (625، 375، 750، 750)
اقتصاص البث بدقة 1280×720: (500، 469، 1000، 562)

الشكل 4: نسبة العرض إلى الارتفاع 4:3، مربّع
إعادة المعالجة
يتوفّر دعم إضافي لملفات الصور الأولية من خلال إعادة معالجة بيانات Bayer بتنسيق RAW. يتيح هذا التوافق لقناة الكاميرا معالجة ملف التخزين المؤقت وبيانات RAW وبيانات وصفية تم التقاطها سابقًا (إطار كامل تم تسجيله سابقًا) لإنشاء ملف إخراج جديد بتنسيق YUV أو JPEG.
Zoom
على الأجهزة التي تعمل بنظام التشغيل Android 11 أو إصدار أحدث، يمكن للتطبيق استخدام ميزة تكبير/تصغير الكاميرا
(الرقمية والبصرية) من خلال الإعداد 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)
اقتصاص البث بدقة 640x480: (0, 0, 2000, 1500) (يساوي منطقة الاقتصاص)
اقتصاص البث بدقة 1280x720: (0, 187, 2000, 1125)

الشكل 5: تكبير/تصغير بنسبة 2.0، نسبة العرض إلى الارتفاع 4:3
نسبة التكبير/التصغير: 2.0، أي ربع مجال الرؤية الأصلي
منطقة الاقتصاص: (0, 187, 2000, 1125) (نسبة العرض إلى الارتفاع 16:9)
اقتصاص البث بدقة 640x480: (250, 187, 1500, 1125) (تنسيق شاشة عريضة أفقيًا)
اقتصاص البث بدقة 1280x720: (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
).
ينطبق الأمر نفسه على مناطق AE/AWB/AF والوجوه. لا ينطبق تغيير نظام الإحداثيات هذا على
التقاط الصور بتنسيق RAW والبيانات الوصفية ذات الصلة، مثل intrinsicCalibration
و
lensShadingMap
.
باستخدام المثال الافتراضي نفسه أعلاه، وبافتراض أنّ مصدر الإخراج رقم 1 (640x480) هو مصدر "منظار الكاميرا"، يمكن تحقيق تكبير بمقدار 2.0 مرة بطريقتَين:
- "
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
.