يقدّم نظام التشغيل 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) الاحتفاظ
بإعداد واحد فقط لنقطة العائد وتجاهل بقية الإعدادات.يتم الاحتفاظ بالإعدادات بترتيب الأولوية التالي:
|