إرشادات لمصنّعي المعدّات الأصلية بشأن تنفيذ ميزة "عائد الاستثمار"

يقدّم نظام التشغيل Android 15 عملية موحّدة لدمج إعدادات المستخدمين الخاصة بمنطقة الاهتمام (RoI) في إطار ترميز الفيديو في Android. تتيح هذه الميزة تحسين جودة الضغط لمناطق الاهتمام من خلال توفير واجهات برمجة تطبيقات عامة لدمج إعدادات المستخدمين وتحليلها في برنامج ترميز الفيديو.

التنفيذ

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

تغييرات في إطار الفيديو

يوضّح هذا القسم التغييرات في إطار الفيديو اللازمة لتنفيذ هذه الميزة.

المفاتيح في Codec2

في نظام التشغيل Android 15، يتم تحديد خريطة مَعلمة التكميم (QP_map) والإعداد المستطيل (rect) كنوعَين من إعدادات منطقة الاهتمام. بالإضافة إلى ذلك، تم تقديم مفتاحَين في Codec2 (C2) لدعم هذه الأنواع الجديدة. ويكون استخدام المفتاحَين مماثلاً لاستخدام واجهات برمجة التطبيقات المتاحة للجميع. ضمن حلقة إطار الترميز، يتم تعديل الإعدادات بشكل ديناميكي أثناء مرحلة التشغيل، قبل وضع المخزن المؤقت للإدخال في قائمة الانتظار، وذلك على النحو التالي:

  • في سيناريو المنطقة الثابتة، إذا لم يتم توفير إعدادات منطقة الاهتمام للإطار الحالي، سيستخدم برنامج الترميز الإعدادات نفسها المستخدَمة في الإطار السابق.

  • في سيناريو ديناميكي، يمكن أن تتغيّر أنواع إعدادات منطقة الاهتمام بشكلٍ ديناميكي.

يتم وصف المفاتيح الجديدة في C2 في الأقسام التالية.

kParamIndexQpOffsetMapBuffer

يشير المفتاح kParamIndexQpOffsetMapBuffer إلى خريطة qp-offset لإطار معيّن. يتم ضبط قيمتها باستخدام مَعلمة الإدخال PARAMETER_KEY_QP_OFFSET_MAP من setParameters.

kParamIndexQpOffsetMapBuffer هي مصفوفة بايتات في C2InfoBuffer، وتتضمّن السمات التالية:

  • الطول: عدد المربّعات 16x16 في إطار واحد

  • القيمة: تمثّل كل قيمة في المصفوفة إزاحة QP لكتلة 16x16، في المنطقة -51~51. يتم احتساب QP لأكبر وحدة ترميز مستهدَفة (LCU) من خلال التحكّم في معدّل الترميز في برنامج الترميز بالإضافة إلى الإزاحة. إذا تجاوزت النتيجة المحسوبة النطاق من 0 إلى 51، يتم اقتطاع القيمة إلى النطاق من 0 إلى 51.

    • إذا كانت القيمة 0: لا يوجد إزاحة QP، ويتم تحديد QP من خلال عنصر التحكّم الأصلي في المعدّل.
    • إذا كانت القيمة غير صفرية: QP هي معدّل التحكّم الأصلي بالإضافة إلى الإزاحة.
    • إذا كانت القيمة سالبة: يتم تحسين جودة الفيديو في وحدة التحكم المنطقية المستهدَفة.
    • إذا كانت القيمة موجبة: تنخفض جودة الفيديو في وحدة ترميز الحساب المستهدَفة.
  • الاستخدام: على المستخدم ضبط هذا المفتاح على شكل مربّعات 16×16. يعدّل برنامج الترميز الإعدادات لتناسب حجم وحدة الترميز الأكبر (LCU) الفعلي من خلال حساب متوسط قيم وحدات 16x16 في وحدة الترميز الأكبر.

C2_PARAMKEY_QP_OFFSET_RECTS

يؤدي المفتاح C2_PARAMKEY_QP_OFFSET_RECTS (الذي تم ضبطه على coding.qp-offset-rects إلى ضبط منطقة الاهتمام على QpOffset-Rects. يتم ضبط قيمته باستخدام مَعلمة الإدخال PARAMETER_KEY_QP_OFFSET_RECTS من setParameters.

لدعم هذا المفتاح، يتم تقديم البنية التالية C2QpOffsetRectStruct:

struct C2QpOffsetRectStruct : C2Rect {
  int32_t qpOffset;

  DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
  C2FIELD(width, "width")
  C2FIELD(height, "height")
  C2FIELD(left, "left")
  C2FIELD(top, "top")
  C2FIELD(qpOffset, "qp-offset")
}

المكان:

  • top وleft: إحداثيات منطقة الاهتمام، على شكل مستطيل يتم توسيع منطقة الاهتمام لتتطابق مع حدود وحدة التحكم المنطقية. تمثّل القيمة الزاوية العلوية اليمنى لكل بكسل، بحيث يحدّد الزوج ((0,0), (16, 16)) مربّعًا كاملاً بحجم 16×16.

  • qpOffset: تمثّل كل قيمة في المصفوفة إزاحة QP لمنطقة rect المستهدَفة. ويتشابه تعريفها واستخدامها مع تعريف واستخدام قيمة kParamIndexQpOffsetMapBuffer.

خوارزمية التعيين

يعرض الجدول التالي عملية الربط بين المفاتيح العامة وإطار عمل الفيديو:

المفاتيح العامة أو واجهات برمجة التطبيقات عمليات الربط في إطار الفيديو
PARAMETER_KEY_QP_OFFSET_MAP يتم تمرير القيمة إلى kParamIndexQpOffsetMapBuffer كعنصر C2InfoBuffer.
PARAMETER_KEY_QP_OFFSET_RECTS يتم تحويل القيمة من String إلى Struct C2QpOffsetRectStruct وتمريرها إلى C2_PARAMKEY_QP_OFFSET_RECTS.

معالجة الأخطاء

يجب أن يتعامل تطبيق الشركة المصنّعة للجهاز الأصلي مع حالات الخطأ التالية:

حالة الخطأ مثال التعامل مع الجهاز
يتم استخدام كل من مفتاح المورّد والمفتاح الموحّد لتفعيل ميزة "الإعداد عن بُعد". يتصل المستخدم بكل من setFeatureEnabled(FEATURE_ROI) ومفتاح البائع لتفعيل RoI. يجب تفعيل ميزة "عائد الاستثمار".
إزاحة QP ضِمن النطاق ولكن لا تتوافق مع مورّدي نظام التشغيل على الشريحة. يضبط المستخدم إزاحة QP على 12، ولكنّ نظام التشغيل على الشريحة لا يتيح إزاحة QP إلا حتى 10. يتم ترك نطاق إزاحة QP المتوافق كأفضل جهد. يتم تحديد النطاق للقيمة ضمن النطاق المسموح به في نظام التشغيل على الشريحة.
يتم ضبط إعدادات متعددة لعائد الاستثمار (سواء كان مفتاحًا موحّدًا أو مفتاحًا خاصًا بمورّد معيّن) على إطار واحد. يستخدم المستخدم كلاً من المفتاح الموحّد ومفتاح المورّد للإطار 1. إذا كان ذلك متاحًا، يحتفظ إطار العمل بأول إعداد موحّد rect أو أول إعداد موحّد QP_map أو كليهما. في كل فئة، لا يرسل إطار العمل سوى إعداد موحّد واحد إلى نظام التشغيل على الشريحة، وإذا كان الإعداد الموحّد متاحًا، يجب أن يتجاهل نظام التشغيل على الشريحة إعدادات المورّد. في حال إرسال إعدادات متعددة إلى نظام على شريحة (SoC)، على مورّد نظام على شريحة الاحتفاظ بإعداد واحد فقط لمنطقة الاهتمام وتجاهل بقية الإعدادات.

يتم الاحتفاظ بالإعدادات بترتيب الأولوية التالي:

  1. موحَّد rect
  2. موحَّد QP_map
  3. المورّد rect
  4. المورّد QP_map