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

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

التنفيذ

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

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

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

المفاتيح في Codec2

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

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

  • في السيناريو الديناميكي، يمكن أن تتغيّر أنواع إعدادات عائد الاستثمار بشكل ديناميكي.

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

kParamIndexQpOffsetMapBuffer

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

kParamIndexQpOffsetMapBuffer هي صفيف بايت في C2InfoBuffer، مع السمات التالية:

  • الطول: عدد الوحدات التي تبلغ مساحتها 16×16 في إطار واحد

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

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

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) و مفتاح المورّد لتفعيل عائد الاستثمار. يجب تفعيل ميزة "عائد الاستثمار".
يقع إزاحة QP ضمن النطاق، ولكنّه غير متوافق مع مورّدي شرائح SoC. يضبط المستخدم قيمة QP offset على 12، ولكن لا تتيح وحدة المعالجة المركزية سوى قيمة QP offset تصل إلى 10. يتم ترك نطاق إزاحة QP المتوافق على أنّه أقصى جهد. تتم تثبيت القيمة على النطاق المسموح به لوحدة المعالجة المركزية.
يتم ضبط إعدادات متعددة لعائد الاستثمار (سواء كان مفتاحًا موحّدًا أو مفتاحًا خاصًا بالمورّد) على إطار واحد. يستخدم المستخدم المفتاح العادي ومفتاح المورّد للإطار 1. يحتفظ إطار العمل بأول إعداد rect مُعَدَّل أو أول إعداد QP_map مُعَدَّل، أو كليهما، إذا كانا متاحَين. في كل فئة، يُرسِل إطار العمل ملفًا واحدًا فقط منملف الضبط المُعَدَّل إلى SoC، وإذا كان ملف الضبط المُعَدَّل متوفّرًا، يجب أن يتجاهل تنفيذ SoC إعدادات المورّد. إذا تم إرسال إعدادات متعددة إلى وحدة المعالجة المركزية (SoC)، على مورّد وحدة المعالجة المركزية (SoC) الاحتفاظ بإعداد واحد فقط لنقطة العائد وتجاهل بقية الإعدادات.

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

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