بث المحتوى والاقتصاص والتكبير أو التصغير

مصادر البيانات الناتجة

يعمل النظام الفرعي للكاميرا فقط على مسار 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 يطبّق ميزة تثبيت الفيديو، يجب تعديل منطقة اقتصاص النتيجة لوصف المنطقة المضمّنة فعليًا في النتيجة بعد تطبيق ميزة تثبيت الفيديو. بشكل عام، يجب أن يكون التطبيق الذي يستخدم الكاميرا قادرًا على تحديد مجال الرؤية الذي يتلقّاه استنادًا إلى منطقة الاقتصاص وأبعاد أداة استشعار الصور وطول بؤرة العدسة.

بما أنّ منطقة الاقتصاص تنطبق على جميع مصادر البيانات التي قد يكون لها نسب قياس مختلفة عن منطقة الاقتصاص، قد تكون منطقة أداة الاستشعار الدقيقة المستخدَمة لكل مصدر بيانات أصغر من منطقة الاقتصاص. وعلى وجه التحديد، يجب أن تحافظ كل بث على وحدات بكسل مربعة ونسبة عرض إلى ارتفاع من خلال اقتصاص منطقة القص المحدّدة بدرجة بسيطة. إذا كانت نسبة العرض إلى الارتفاع للبث أوسع من منطقة الاقتصاص، يجب اقتصاص البث بشكل أكبر عموديًا، وإذا كانت نسبة العرض إلى الارتفاع للبث أضيق من منطقة الاقتصاص، يجب اقتصاص البث بشكل أكبر أفقيًا.

في جميع الحالات، يجب أن يكون الجزء المقتطع من البث في المنتصف ضمن منطقة الاقتصاص الكاملة، ويجب اقتصاص كل بث إما أفقيًا أو عموديًا فقط بالنسبة إلى منطقة الاقتصاص الكاملة، وليس كليهما.

على سبيل المثال، إذا تم تحديد بثيَن، بث مباشر بحجم 640 × 480 (نسبة عرض إلى ارتفاع 4:3) وبث بمقاس 1280 × 720 (نسبة عرض إلى ارتفاع 16:9)، يتم توضيح مناطق الإنتاج المتوقعة لكل بث في بعض نماذج مناطق الاقتصاص، من خلال أداة استشعار افتراضية بدقة 3 ميغا بكسل (2000 × 1500 بكسل).

منطقة الاقتصاص: (500، 375، 1000، 750) (نسبة العرض إلى الارتفاع: 4:3)
اقتصاص ساحة المشاركات: (500، 375، 1000، 750) (يساوي منطقة الاقتصاص)
1280×720 اقتصاص البث: (500 أو 4020)

crop-region-43-ratio

الشكل 1: نسبة العرض إلى الارتفاع 4‏:3

منطقة الاقتصاص: (‎500, 375, 1333, 750) (نسبة العرض إلى الارتفاع 16:9)
اقتصاص البث بدقة ‎640×480: (‎666, 375, 1000, 750)
اقتصاص البث بدقة ‎1280×720: (‎500, 375, 1333, 750) (يساوي منطقة الاقتصاص)

crop-region-169-ratio

الشكل 2. نسبة العرض إلى الارتفاع 16:9

منطقة الاقتصاص: (500 و375 و750 و750) (نسبة العرض إلى الارتفاع: 1:1)
اقتصاص ساحة المشاركات: (500 و469 و750 و562)
اقتصاص ساحة المشاركات: (500 و543 و750 و414)

crop-region-11-ratio

الشكل 3: نسبة العرض إلى الارتفاع: 1:1

في ما يلي مثال آخر، وهو بث بدقة 1024×1024 وبنسبة عرض إلى ارتفاع مربّع بدلاً من بث بدقة 480p:
منطقة الاقتصاص: (500، 375، 1000، 750) (نسبة العرض إلى الارتفاع 4:3)
اقتصاص البث بدقة 1024×1024: (625، 375، 750، 750)
اقتصاص البث بدقة 1280×720: (500، 469، 1000، 562)

نسبة منطقة الاقتصاص 43

الشكل 4: نسبة العرض إلى الارتفاع 4:3، مربّع

إعادة المعالجة

يتم توفير دعم إضافي لملفات الصور الأولية من خلال إتاحة إعادة معالجة بيانات RAW Bayer. يتيح هذا التوافق لقناة الكاميرا معالجة ملف تخزين مؤقت وبيانات وصفية تم التقاطهما سابقًا بتنسيق 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)

zoom-ratio-2-crop-43

الشكل 5: تكبير/تصغير بنسبة 2.0، نسبة العرض إلى الارتفاع 4:3

نسبة التكبير/التصغير: 2.0، أي ربع مجال الرؤية الأصلي
منطقة الاقتصاص: (0, 187, 2000, 1125) (نسبة العرض إلى الارتفاع 16:9)
اقتصاص البث بدقة 640x480: (250, 187, 1500, 1125) (تنسيق شاشة عريضة أفقيًا)
اقتصاص البث بدقة 1280x720: (0, 187, 2000, 1125) (يساوي منطقة الاقتصاص)

zoom-ratio-2-crop-169

الشكل 6: تكبير/تصغير بمعدل 2.0، نسبة العرض إلى الارتفاع 16:9

نسبة التكبير/التصغير: 0.5، 4 أضعاف مجال الرؤية الأصلي (تم التبديل من العدسة العريضة إلى العدسة الواسعة جدًا)
منطقة الاقتصاص: (250، 0، 1500، 1500) (نسبة العرض إلى الارتفاع 1:1)
اقتصاص البث 640×480: (250، 187، 1500، اقتصاص 0، 1125)

images/zoom-ratio-0.5-crop-11

الشكل 7: نسبة تكبير/تصغير 0.5، نسبة العرض إلى الارتفاع 1:1

كما هو موضّح في الرسوم البيانية أعلاه، يتغيّر نظام الإحداثيات لمنطقة الاقتصاص إلى مجال الرؤية الفعال بعد التكبير، ويتم تمثيله بالمستطيل الذي يضمّ الأبعاد التالية: (0 و0 وactiveArrayWith وactiveArrayHeight). ينطبق الأمر نفسه على مناطق AE/AWB/AF والوجوه. لا ينطبق تغيير نظام الإحداثيات هذا على التقاط RAW والبيانات الوصفية ذات الصلة به مثل intrinsicCalibration وlensShadingMap.

باستخدام المثال الافتراضي نفسه أعلاه، وبافتراض أنّ مصدر الإخراج رقم 1 (640×480) هو مصدر "منظار الكاميرا"، يمكن تحقيق تكبير بمقدار 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.