يوفِّر Android 13 إصدارًا ثابتًا قابلاً للضبط من قِبل المورّد.
تُسمى libtonemap
، وهي تحدد عمليات تعيين الدرجات اللونية وتتم مشاركتها
من خلال عملية SurfaceFlinger وتطبيقات Device Composer (HWC).
تتيح هذه الميزة للمصنّعين الأصليين للأجهزة تحديد ومشاركة درجات لون العرض.
بين إطار العمل والمورِّدين، ما يقلّل من عدم تطابق الأسلوب
التعيين.
قبل الإصدار 13 من نظام Android، يجب ربط درجات اللون الخاصة بالشاشة عدم مشاركة العمليات بين HWC وSurfaceFlinger والتطبيقات. حسب في مسار العرض، فيما يخص محتوى HDR، أدى ذلك إلى عدم تطابق في جودة الصور الذي تم فيه ربط محتوى النطاق عالي الديناميكية بمساحات الإخراج بطرق مختلفة. هذا النمط ملموسة في سيناريوهات مثل تدوير الشاشة، حيث يتم تركيب التغييرات في الاستراتيجية بين وحدة معالجة الرسومات ووحدة معالجة البيانات (DPU)، والاختلافات في العرض السلوك بين TextureView وSurfaceView.
تصف هذه الصفحة تفاصيل الواجهة والتخصيص والتحقق من صحة واجهة برمجة التطبيقات
مكتبة libtonemap
.
واجهة مع مكتبة تحديد النغمات
libtonemap
تطبيقات تدعم وحدة المعالجة المركزية (CPU) وأدوات تظليل SkSL، والتي يمكن
من خلال SurfaceFlinger لتكوين الواجهة الخلفية لوحدة معالجة الرسومات أو من خلال HWC
إنشاء جدول بحث لتعيين الدرجات اللونية (LUT). نُقْطِةِ التَّدْخُلْ إِلَى libtonemap
هي android::tonemap::getToneMapper()
، وتعرض كائنًا
لتنفيذ واجهة ToneMapper
.
تتيح واجهة ToneMapper
الإمكانيات التالية:
إنشاء جدول بحث لتحديد النغمات
الواجهة
ToneMapper::lookupTonemapGain
هي وحدة معالجة مركزية (CPU). تنفيذ أداة التظليل المحددة فيlibtonemap_LookupTonemapGain()
. هذا النمط من خلال اختبارات الوحدة في إطار العمل، ويمكن للشركاء استخدامها المساعدة في إنشاء جدول بحث لتحديد الدرجات ضمن مسار الألوانتستخدم
libtonemap_LookupTonemapGain()
قيم اللون المطلقة، الفراغ الخطي غير الطبيعي، في كل من النموذج اللوني أحمر أخضر أزرق وفي س ص ع، ويكون ناتج قيمة عائمة تصف مقدار ضرب ألوان الإدخال في المساحة الخطية.إنشاء أداة تظليل SkSL
تعرض الواجهة
ToneMapper::generateTonemapGainShaderSkSL()
سلسلة تظليل SkSL، وفقًا لمساحة بيانات المصدر والوجهة. تعد أداة تظليل SkSL بعملية تنفيذ Skia لـRenderEngine
، مكون التركيب السريع بوحدة معالجة الرسومات في SurfaceFlinger. تُعد أداة التظليل أيضًا متصلًا بـlibhwui
، حتى يمكن تنفيذ تعيين تدرج الألوان من نطاق HDR إلى نطاق SDR بكفاءة في "TextureView
". نظرًا لأن السلسلة التي تم إنشاؤها مضمّنة في أدوات تظليل SkSL الأخرى التي يستخدمها Skia، يجب أن يتقيد برنامج التظليل بالقواعد التالية:- يجب أن تحتوي سلسلة أداة التظليل على نقطة دخول تحمل
توقيع
float libtonemap_LookupTonemapGain(vec3 linearRGB, vec3 xyz)
، حيث يتمlinearRGB
هي قيمة الوحدات المطلقة لوحدات البكسل RGB في المساحة الخطية. وxyz
تم تحويلlinearRGB
إلى XYZ. - يجب أن تسبق أي طرق مساعدة تستخدمها سلسلة أداة التظليل
السلسلة
libtonemap_
حتى لا تتعارض تعريفات أداة تظليل إطار العمل. وبالمثل، يجب أن تبدأ زيّ الإدخال بـin_libtonemap_
.
- يجب أن تحتوي سلسلة أداة التظليل على نقطة دخول تحمل
توقيع
إنشاء أزياء SkSL
تعرض الواجهة
ToneMapper::generateShaderSkSLUniforms()
بعد ذلك، استنادًا إلى بيانات وصفيةstruct
تصف بيانات وصفية من مختلف تقنية HDR المعايير وشروط العرض:يشير ذلك المصطلح إلى قائمة بالزيّ الموحّدة المرتبطة بأداة تظليل SkSL.
القيمتان المنتظمتان
in_libtonemap_displayMaxLuminance
in_libtonemap_inputMaxLuminance
تستخدم أدوات تظليل إطار العمل هذه القيم. عند تغيير حجم الإدخال إلىlibtonemap
، وتسوية المخرجات السارية.
عملية إنشاء الزي الرسمي حاليًا غير مرتبطة بالمدخلات مساحة بيانات المخرجات.
التخصيص
ينتج عن التنفيذ المرجعي لمكتبة libtonemap
نتائج مقبولة. ومع ذلك،
نظرًا لأن خوارزمية تعيين النبرة المستخدمة في تركيب وحدة معالجة الرسومات قد تختلف عن
التي تستخدمها تركيبة DPU، فاستخدام تطبيق المرجع قد يتسبّب في
الوميض في بعض الحالات مثل حركة التدوير. يمكن للتخصيص أن
لحل هذه المشكلات المتعلقة بجودة الصور الخاصة بالبائعين.
ننصح المصنّعين الأصليين للأجهزة بشدة بإلغاء تنفيذ libtonemap
تحدّد الفئة الفرعية ToneMapper
الخاصة بها، والتي يتم إرجاعها من خلال getToneMapper()
.
عند تخصيص آلية التنفيذ، على الشركاء تنفيذ أحد الإجراءات التالية:
التالي:
- تعديل تنفيذ
libtonemap
مباشرةً - تحديد مكتبته الثابتة الخاصة به، وتجميع المكتبة كقائمة مستقلة،
استبدال ملف
.a
في مكتبةlibtonemap
بالملف الذي تم إنشاؤه من الملف المخصّص المكتبة.
لا يحتاج المورّدون إلى تعديل أي رمز نواة، ولكن يجب على المورّدين المتعددين توصيل تفاصيل حول خوارزميات تعيين تناغم DPU التنفيذ.
التحقُّق
اتّبِع الخطوات التالية للتحقّق من صحة عملية التنفيذ:
تشغيل فيديوهات HDR على الشاشة بأي من معايير HDR التي يتوافق معها نظام العرض مثل HLG أو HDR10 أو HDR10+ أو DolbyVision
يمكنك تفعيل إعدادات تركيب وحدة معالجة الرسومات لضمان عدم ظهور وميض واضح للمستخدم.
استخدِم الأمر
adb
التالي لتبديل تركيب وحدة معالجة الرسومات:adb shell service call SurfaceFlinger 1008 i32 <0 to enable HWC composition, 1 to force GPU composition>
المشاكل الشائعة
ويمكن أن تحدث المشاكل التالية مع عملية التنفيذ هذه:
يحدث التباين عندما يكون هدف العرض الذي تستخدمه تركيبة وحدة معالجة الرسومات أقل الدقة من القيمة المعتادة لمحتوى HDR. على سبيل المثال، يمكن أن تحدث هذه المشكلة عندما يكون تنفيذ HWC متوافقًا مع تنسيقات 10 بت غير واضحة النطاق عالي الديناميكية، مثل RGBA1010102 أو P010، إلا أنه يتطلب كتابة تركيبة وحدة معالجة الرسومات على شكل 8 بت مثل RGBA8888 لدعم ألفا.
ينتج التحول الدقيق في الألوان عن الاختلافات في التحديد الكمي إذا كانت وحدة معالجة البيانات (DPU) يعمل بدقة مختلفة عن وحدة معالجة الرسومات.
ترتبط كل مشكلة من هذه المشكلات بالاختلافات النسبية في الدقة الأجهزة الأساسية. ويعتبر الحل النموذجي هو التأكد من وجود فرق في مسارات الدقة المنخفضة، مما يجعل أي اختلافات في الدقة أقل بشرية ملموسة.