مصادر البث والاقتصاص والتكبير/التصغير

تيارات الإخراج

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

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

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

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

منطقة الاقتصاص: (500, 375, 1000, 750) (نسبة العرض إلى الارتفاع 4:3)
اقتصاص التيار بدقة 640x480: (500, 375, 1000, 750) (يساوي منطقة الاقتصاص)
اقتصاص التيار بدقة 1280x720: (500, 469, 1000, 562)

crop-region-43-ratio

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

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

crop-region-169-ratio

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

منطقة الاقتصاص: (500, 375, 750, 750) (نسبة العرض إلى الارتفاع 1:1)
اقتصاص التيار بدقة 640x480: (500, 469, 750, 562)
اقتصاص التيار بدقة 1280x720: (500, 543, 750, 414)

crop-region-11-ratio

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

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

crop-region-43-square-ratio

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

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

يتيح دعم إعادة المعالجة لبيانات RAW Bayer إمكانية استخدام ملفات الصور الأولية. يسمح هذا الدعم لخط أنابيب الكاميرا بمعالجة مخزن مؤقت لبيانات RAW وبيانات وصفية تم التقاطها سابقًا (إطار كامل تم تسجيله سابقًا)، لإنتاج إخراج جديد بدقة 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)
اقتصاص التيار بدقة 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)
اقتصاص التيار بدقة 640x480: (250, 187, 1500, 1125) (مُحاط بأشرطة أفقية)
اقتصاص التيار بدقة 1280x720: (250, 328, 1500, 844) (مُحاط بأشرطة أفقية)

images/zoom-ratio-0.5-crop-11

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

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

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