اندروید ۸.۱ و بالاتر از مدیریت رنگ پشتیبانی میکنند که میتواند برای ارائه یک تجربه سازگار در فناوریهای نمایشگر مورد استفاده قرار گیرد. برنامههایی که روی اندروید اجرا میشوند میتوانند به قابلیتهای کامل یک نمایشگر با طیف رنگی گسترده دسترسی داشته باشند تا بیشترین بهره را از یک دستگاه نمایشگر ببرند.
نسخههای قبلی اندروید شامل پشتیبانی از مدیریت رنگ نبودند و در عوض به سازگاری محتوا و نمایشگرها متکی بودند (هدفی که اغلب توسط صنعت تلویزیون پشتیبانی میشود). با این حال، فناوریهای نمایشگر اخیر امکان نمایش نمایشگرهایی با گاموت بسیار بزرگتر را فراهم میکنند که محتوای موجود را آنطور که انتظار میرود نمایش نمیدهند. با اندروید ۸.۱ و بالاتر، دستگاههایی که از نمایشگر با گاموت وسیع (به عنوان مثال، دیود ساطع کننده نور ارگانیک با ماتریس فعال یا AMOLED، برخی از LCDها) استفاده میکنند، میتوانند محتوای با گاموت وسیع را از برنامهها مشاهده کنند.
پشتیبانی دستگاه را تعیین کنید
دستگاههایی که نمایشگرهای رنگی عریض دارند و اندروید ۸.۱ یا بالاتر روی آنها نصب است، باید از مدیریت رنگ (رنگ عریض) پشتیبانی کنند. قبل از فعال کردن این ویژگی، مطمئن شوید که دستگاه شرایط زیر را دارد:
- نمایشگر دستگاه، الزامات سختافزاری را برآورده میکند، که شامل یک نمایشگر با مشخصات خوب و پشتیبانی از فضای رنگی Display-P3 میشود. اگر نمایشگر این الزام را برآورده نمیکند، مدیریت رنگ را فعال نکنید. برای کاهش تأثیر CPU و GPU، پشتیبانی از sRGB توسعهیافته و HDR10 در خط تولید نمایشگر مطلوب است.
- دستگاه از یک فرآیند کالیبراسیون کارخانهای پشتیبانی میکند که دادههای کالیبراسیون (ذخیرهشده در دستگاه) را برای تنظیم واریانس تولید در رفتار نمایشگر تولید میکند. حداقل، دادههای کالیبراسیون باید به نمایشگر اجازه دهند محتوای sRGB و نقاط سفید D65 و D73 را به طور دقیق نمایش دهد.
اگر این الزامات برآورده شوند، میتوانید ویژگی مدیریت رنگ را برای دستگاه فعال کنید.
پیادهسازی مدیریت رنگ
برای پیادهسازی مدیریت رنگ، ابتدا درایور Hardware Composer 2 (HWC2) را بهروزرسانی کنید تا حالتهای رنگی را درک کرده و آن حالتها را روی سختافزار اعمال کند. بهطور خاص، آهنگساز HWC2 باید حالتهای رنگی Display-P3 و sRGB را با استفاده از HWCDisplay::GetColorModes گزارش دهد.
در مرحله بعد، افزونههای OpenGL و پشتیبانی کتابخانهای لازم برای ترجمه فضاهای رنگی OpenGL به فضاهای داده HAL را فعال کنید. افزونههای OpenGL مورد نیاز عبارتند از:
-
EGL_EXT_pixel_format_float. به برنامهها اجازه میدهد تا سطوح EGLSurface قابل ارائهای با اجزای رنگ شناور ۱۶ بیتی ایجاد کنند. اولویت: بالا (انتظار میرود این فرمت پیکسل پیشفرض برای برنامههای آگاه از رنگهای گسترده باشد). نیاز به پشتیبانی درایور دارد. -
EGL_KHR_gl_colorspace. برای برنامههایی که میخواهند از فریمبافرهای پیشفرض فرمت sRGB استفاده کنند تا رندر sRGB را برای دستگاههای نمایشگر آسانتر کنند، این افزونه امکان ایجاد EGLSurfaces را فراهم میکند که توسط زمینههای OpenGL که از این قابلیت پشتیبانی میکنند، در sRGB رندر میشوند. برای رفتار sRGB به پشتیبانی درایور نیاز دارد.
اندروید همچنین افزونههای اختیاری زیر را ارائه میدهد:
-
EGL_EXT_colorspace_scrgb_linear. این افزونه یک گزینه فضای رنگی جدید، scRGB، را ارائه میدهد که برنامهها میتوانند هنگام ایجاد یک EGLSurface آن را انتخاب کنند. فضای رنگی scRGB یک فضای ارجاع شده به نمایشگر خطی را با همان نقاط سفید و رنگهای اولیه sRGB تعریف میکند (و بنابراین با sRGB سازگار است). این مورد نیازی به پشتیبانی درایور ندارد و میتواند در بستهبندی EGL اندروید پیادهسازی شود. برای مفید بودن، این افزونه نیاز به پشتیبانی از ممیز شناور ۱۶ بیتی (FP16) دارد. -
EGL_EXT_gl_colorspace_display_p3وEGL_EXT_gl_colorspace_display_p3_linear. برای برنامههایی که میخواهند از فریمبافرهای پیشفرض فرمت Display-P3 استفاده کنند تا رندر sRGB را برای دستگاههای نمایشگر آسانتر کنند، این افزونه امکان ایجاد EGLSurfaces را فراهم میکند که توسط زمینههای OpenGL که از این قابلیت پشتیبانی میکنند، در Display-P3 رندر میشوند. این قابلیت را میتوان در بستهبندی درایور EGL پیادهسازی کرد. -
VK_EXT_swapchain_colorspace(Vulkan). برنامهها را قادر میسازد تا زنجیرههای تعویض را با فضای رنگی که استفاده میکنند، برچسبگذاری کنند. شامل تعدادی از فضاهای رنگی رایج مانند DCI-P3، Display-P3، AdobeRGB و BT2020 است.
سفارشیسازی
شما میتوانید ویژگی مدیریت رنگ را با پشتیبانی از استانداردهای رنگی متنوعی مانند DCI-P3، AdobeRGB، Rec709 و Rec2020 سفارشی کنید. سایر تنظیمات عبارتند از:
- پشتیبانی سختافزاری برای تبدیل رنگ در خط تولید نمایشگر. پشتیبانی از تبدیلهای رنگی چندگانه را در سختافزار فعال میکند.
- پشتیبانی از تبدیل رنگ مستقل در چندین لایه (برای مثال، برخی از لایهها میتوانند sRGB و برخی دیگر extended-sRGB باشند که هر کدام خط لوله رنگی مخصوص به خود را دارند). وقتی بیش از یک فضای رنگی قابل مشاهده است، برخی از فضاهای رنگی باید به فضای رنگی نمایشگر تبدیل شوند. در حالت ایدهآل، این تبدیل بهتر است توسط موتور نمایشگر ارائه شود (در غیر این صورت اندروید باید ترکیب GPU را انجام دهد).
آزمایش
برای آزمایش مدیریت رنگ، از منابع زیر در opengl/tests استفاده کنید:
-
gl2_basicیک دموی ساده OpenGL است که فضای رنگی Display-P3 را درخواست میکند. - تستهای
EGL_testبرای پشتیبانی از افزونهها و پیکربندیهای لازم (10:10:10:2 و FP16). -
test_wide_colorیک سطح را به همان روشی که SurfaceFlinger ایجاد میکند، ایجاد میکند (برای مثال، پیکربندی، فضای رنگی و فرمت پیکسل).
پیادهسازی مرجع
برای پیادهسازی مرجع، به frameworks/native مراجعه کنید. برای هدرها، به:
-
system/core/include/system/graphics.h -
system/core/include/system/graphics-base.h-
HAL_DATASPACE_* -
HAL_COLOR_MODE_*
-