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