कलर मैनेजमेंट

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 बनाने की अनुमति देता है. इन्हें OpenGL कॉन्टेक्स्ट के ज़रिए Display-P3 में रेंडर किया जाएगा. इसे 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 पर जाएं. हेडर के लिए, यहां जाएं: