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

عمليات بث الإخراج

يعمل نظام الكاميرا الفرعي فقط على مسار البيانات المستند إلى ANativeWindow لجميع درجات الدقة وتنسيقات الإخراج. يمكن ضبط أحداث بث متعددة في الوقت نفسه لإرسال إطار واحد إلى العديد من الأهداف، مثل وحدة معالجة الرسومات أو برنامج ترميز الفيديو أو RenderScript أو المخازن المؤقتة المرئية للتطبيق (مخازن مؤقتة بتنسيق RAW Bayer أو مخازن مؤقتة بتنسيق YUV معالج أو مخازن مؤقتة بترميز JPEG).

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

لمزيد من المعلومات حول مجموعات إخراج البث المضمونة التي تعتمد على مستوى الأجهزة المتوافق، يُرجى الاطّلاع على createCaptureSession().

الاقتصاص

يتم إرسال معلومات حول اقتصاص مصفوفة البكسل الكاملة (للتكبير الرقمي وحالات الاستخدام الأخرى التي يكون فيها مجال الرؤية الأصغر مرغوبًا فيه) من خلال الإعداد ANDROID_SCALER_CROP_REGION. هذا الإعداد خاص بكل طلب، ويمكن تغييره لكل طلب على حدة، وهو أمر بالغ الأهمية لتنفيذ التكبير الرقمي بسلاسة.

يتم تحديد المنطقة كمستطيل (س، ص، العرض، الارتفاع)، حيث يصف (س، ص) الزاوية العلوية اليمنى من المستطيل. يتم تحديد المستطيل في نظام الإحداثيات لمجموعة وحدات البكسل النشطة في أداة الاستشعار، حيث تكون النقطة (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 ميغابكسل (مجموعة وحدات بكسل 2000x1500).

منطقة الاقتصاص: (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.

Zoom

بالنسبة إلى الأجهزة التي تعمل بالإصدار 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) (pillarboxed)
اقتصاص البث 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) (تنسيق letterbox)
اقتصاص البث بدقة 1280x720: (250, 328, 1500, 844) (تنسيق letterbox)

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.