تعيين درجات سطوع HDR إلى نطاق متوافق مع SDR

يوفِّر 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 التنفيذ.

التحقُّق

اتّبِع الخطوات التالية للتحقّق من صحة عملية التنفيذ:

  1. تشغيل فيديوهات HDR على الشاشة بأي من معايير HDR التي يتوافق معها نظام العرض مثل HLG أو HDR10 أو HDR10+ أو DolbyVision

  2. يمكنك تفعيل إعدادات تركيب وحدة معالجة الرسومات لضمان عدم ظهور وميض واضح للمستخدم.

    استخدِم الأمر 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) يعمل بدقة مختلفة عن وحدة معالجة الرسومات.

ترتبط كل مشكلة من هذه المشكلات بالاختلافات النسبية في الدقة الأجهزة الأساسية. ويعتبر الحل النموذجي هو التأكد من وجود فرق في مسارات الدقة المنخفضة، مما يجعل أي اختلافات في الدقة أقل بشرية ملموسة.