Android 8.1 और उसके बाद के वर्शन में, रंग मैनेजमेंट की सुविधा शामिल है. इसका इस्तेमाल, डिसप्ले टेक्नोलॉजी के हिसाब से एक जैसा अनुभव देने के लिए किया जा सकता है. Android पर चलने वाले ऐप्लिकेशन, डिसप्ले डिवाइस का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, वाइड-गैमेट डिसप्ले की सभी सुविधाओं को ऐक्सेस कर सकते हैं.
Android के पिछले वर्शन में, रंग मैनेजमेंट की सुविधा शामिल नहीं थी. इसके बजाय, कॉन्टेंट और डिसप्ले के काम करने पर भरोसा किया जाता था. अक्सर, टीवी इंडस्ट्री से इस लक्ष्य को हासिल करने में मदद मिलती थी. हालांकि, डिसप्ले की नई टेक्नोलॉजी की मदद से, ज़्यादा रंगों वाले डिसप्ले बनाए जा सकते हैं. हालांकि, ये डिसप्ले मौजूदा कॉन्टेंट को उम्मीद के मुताबिक नहीं दिखाते. Android 8.1 और इसके बाद के वर्शन वाले डिवाइसों पर, ऐप्लिकेशन से वाइड-गैमट वाला कॉन्टेंट देखा जा सकता है. इसके लिए, डिवाइस में वाइड-गैमट डिसप्ले (जैसे, ऐक्टिव-मैट्रिक्स ऑर्गैनिक लाइट-इमिटिंग डायोड या AMOLED, कुछ एलसीडी) होना ज़रूरी है.
डिवाइस के लिए सहायता उपलब्ध है या नहीं
Android 8.1 या इसके बाद के वर्शन पर चलने वाले, वाइड-कलर डिसप्ले वाले डिवाइसों पर, कलर मैनेजमेंट (वाइड-कलर) की सुविधा काम करनी चाहिए. इस सुविधा को चालू करने से पहले, पक्का करें कि आपका डिवाइस इन ज़रूरी शर्तों को पूरा करता हो:
- डिवाइस का डिसप्ले, हार्डवेयर की ज़रूरी शर्तों को पूरा करता हो. इनमें, बेहतर डिसप्ले शामिल है, जो Display-P3 कलरस्पेस के साथ काम करता हो. अगर डिसप्ले इस ज़रूरी शर्त को पूरा नहीं करता है, तो कलर मैनेजमेंट की सुविधा चालू न करें. सीपीयू और जीपीयू पर पड़ने वाले असर को कम करने के लिए, डिसप्ले पाइपलाइन में एक्सटेंडेड एसआरजीबी और HDR10 की सुविधा का होना ज़रूरी है.
- डिवाइस में फ़ैक्ट्री कैलिब्रेशन की प्रोसेस काम करती है. यह प्रोसेस, डिवाइस पर सेव किए गए कैलिब्रेशन डेटा को जनरेट करती है. इससे डिसप्ले के व्यवहार में, मैन्युफ़ैक्चरिंग में होने वाले अंतर को अडजस्ट किया जा सकता है. कैलिब्रेशन डेटा की मदद से, डिसप्ले पर कम से कम sRGB कॉन्टेंट और D65 और D73 वाइट पॉइंट सही तरीके से दिखने चाहिए.
अगर ये ज़रूरी शर्तें पूरी की जाती हैं, तो डिवाइस के लिए कलर मैनेजमेंट की सुविधा चालू की जा सकती है.
कलर मैनेजमेंट लागू करना
कलर मैनेजमेंट लागू करने के लिए, सबसे पहले हार्डवेयर कंपोजर 2 (HWC2) ड्राइवर को अपडेट करें. इससे, कलर मोड को समझने और उन मोड को हार्डवेयर पर लागू करने में मदद मिलती है.
खास तौर पर, HWC2 कंपोजर को HWCDisplay::GetColorModes
का इस्तेमाल करके, Display-P3 और sRGB कलर मोड की जानकारी देनी होगी.
इसके बाद, OpenGL कलर स्पेस को HAL डेटा स्पेस में बदलने के लिए, ज़रूरी OpenGL एक्सटेंशन और लाइब्रेरी की सहायता चालू करें. ज़रूरी OpenGL एक्सटेंशन में ये शामिल हैं:
-
EGL_EXT_pixel_format_float
. ऐप्लिकेशन को 16-बिट फ़्लोट कलर कॉम्पोनेंट के साथ, दिखाए जा सकने वाले EGLSurfaces बनाने की अनुमति देता है. प्राथमिकता: ज़्यादा (यह उम्मीद की जाती है कि यह वाइड-कलर वाले ऐप्लिकेशन के लिए डिफ़ॉल्ट पिक्सल फ़ॉर्मैट है). इसके लिए, ड्राइवर की सहायता ज़रूरी है. -
EGL_KHR_gl_colorspace
. जिन ऐप्लिकेशन को डिसप्ले डिवाइसों पर sRGB रेंडरिंग को आसानी से हासिल करने के लिए, sRGB फ़ॉर्मैट के डिफ़ॉल्ट फ़्रेमबफ़र का इस्तेमाल करना है उनके लिए, यह एक्सटेंशन EGLSurfaces बनाने की अनुमति देता है. ये ऐसे EGLSurfaces होंगे जिन्हें sRGB में रेंडर किया जाएगा. इसके लिए, OpenGL के ऐसे कॉन्टेक्स्ट का इस्तेमाल किया जाएगा जिनमें यह सुविधा काम करती है. sRGB के काम करने के तरीके के लिए, ड्राइवर की सहायता ज़रूरी है.
Android, ये वैकल्पिक एक्सटेंशन भी उपलब्ध कराता है:
-
EGL_EXT_colorspace_scrgb_linear
. यह एक्सटेंशन, scRGB नाम का एक नया कलर स्पेस विकल्प उपलब्ध कराता है. ऐप्लिकेशन, EGLSurface बनाते समय इसे चुन सकते हैं. scRGB कलर स्पेस, sRGB के जैसे ही व्हाइट पॉइंट और कलर प्राइमरी के साथ, एक लीनियर डिसप्ले रेफ़रंस स्पेस तय करता है. इसलिए, यह sRGB के साथ बैकवर्ड कम्पैटिबल है. इसके लिए, ड्राइवर की मदद की ज़रूरत नहीं होती. इसे Android EGL रैपर में लागू किया जा सकता है. इस एक्सटेंशन का इस्तेमाल करने के लिए, 16-बिट फ़्लोटिंग पॉइंट (FP16) की सुविधा का होना ज़रूरी है. -
EGL_EXT_gl_colorspace_display_p3
औरEGL_EXT_gl_colorspace_display_p3_linear
. जिन ऐप्लिकेशन को डिसप्ले डिवाइसों पर sRGB रेंडरिंग को आसानी से हासिल करने के लिए, Display-P3 फ़ॉर्मैट के डिफ़ॉल्ट फ़्रेमबफ़र का इस्तेमाल करना है उनके लिए, यह एक्सटेंशन EGLSurfaces बनाने की अनुमति देता है. इन EGLSurfaces को Display-P3 में रेंडर किया जाएगा. इसके लिए, OpenGL कॉन्टेक्स्ट की ज़रूरत होगी. इसे EGL ड्राइवर रैपर में लागू किया जा सकता है. -
VK_EXT_swapchain_colorspace
(Vulkan). इससे ऐप्लिकेशन, स्वैप चेन को उस कलर स्पेस के साथ टैग कर सकते हैं जिसका इस्तेमाल किया जा रहा है. इसमें कई सामान्य कलर स्पेस शामिल हैं, जैसे कि DCI-P3, Display-P3, AdobeRGB, और BT2020.
पसंद के मुताबिक बनाएं
कलर मैनेजमेंट की सुविधा को अपनी पसंद के मुताबिक बनाया जा सकता है. इसके लिए, DCI-P3, AdobeRGB, Rec709, और Rec2020 जैसे अलग-अलग कलर स्टैंडर्ड के लिए सहायता शामिल करें. पसंद के मुताबिक बनाने के अन्य तरीकों में ये शामिल हैं:
- डिसप्ले लाइन में रंग बदलने के लिए हार्डवेयर की सहायता. हार्डवेयर में कई कलर ट्रांसफ़ॉर्म की सुविधा चालू करता है.
- एक से ज़्यादा लेयर पर, अलग-अलग कलर ट्रांसफ़ॉर्म की सुविधा (उदाहरण के लिए, कुछ लेयर sRGB और कुछ एक्सटेंडेड-sRGB हो सकती हैं. हर लेयर की अपनी कलर पाइपलाइन होती है). जब एक से ज़्यादा कलर स्पेस दिखते हैं, तो कुछ कलर स्पेस को डिसप्ले के कलर स्पेस में बदलना पड़ता है. आम तौर पर, डिसप्ले इंजन से यह ट्रांसफ़ॉर्मेशन सबसे बेहतर तरीके से मिलता है. ऐसा न होने पर, Android को जीपीयू कंपज़िशन करना होगा.
टेस्ट करना
कलर मैनेजमेंट की जांच करने के लिए, 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_*