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

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

التنفيذ

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

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

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

المفاتيح في برنامج الترميز 2

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

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

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