Android 8.1 ও তার পরের যেকোনও ভার্সনে কালার ম্যানেজমেন্টের সুবিধা আছে যা ডিসপ্লে টেকনোলজি জুড়ে একই ধরনের অভিজ্ঞতা প্রদান করতে ব্যবহার করা যেতে পারে। Android-এ চলমান অ্যাপ, ডিসপ্লে ডিভাইস থেকে সর্বাধিক সুবিধা পেতে, ওয়াইড-গ্যামাট ডিসপ্লের সম্পূর্ণ ক্ষমতা অ্যাক্সেস করতে পারে।
Android-এর আগের রিলিজগুলিতে কালার ম্যানেজমেন্টের সুবিধা ছিল না এবং পরিবর্তে কন্টেন্ট ও ডিসপ্লে মানানসই হওয়ার উপর নির্ভর করত (একটি লক্ষ্য যা প্রায়শই টিভি ইন্ডাস্ট্রি দ্বারা সাহায্য করা হয়)। তবে, সাম্প্রতিক ডিসপ্লে প্রযুক্তি অনেক বড় গ্যামট ডিসপ্লে দেখানোর অনুমতি দেয় যা প্রত্যাশিতভাবে বিদ্যমান কন্টেন্ট দেখায় না। Android 8.1 এবং এর পরবর্তী যেকোনও ভার্সন ব্যবহার করা ডিভাইসে, ওয়াইড-গ্যামাট ডিসপ্লে (যেমন, অ্যাক্টিভ-ম্যাট্রিক্স অর্গানিক লাইট-এমিটিং ডায়োড বা AMOLED, কিছু LCD) ব্যবহার করা ডিভাইস অ্যাপ থেকে ওয়াইড-গ্যামাট কন্টেন্ট দেখতে পাবে।
ডিভাইস কাজ করবে কিনা তা নির্ধারণ করা
Android 8.1 বা তার পরবর্তী ভার্সনে চলা ওয়াইড-কালার ডিসপ্লে সহ ডিভাইসে কালার ম্যানেজমেন্ট (ওয়াইড-কালার) কাজ করা উচিত। এই ফিচার চালু করার আগে, ডিভাইসটি নিম্নলিখিত প্রয়োজনীয়তা পূরণ করে কিনা তা নিশ্চিত করুন:
- ডিভাইসের ডিসপ্লে হার্ডওয়্যার সংক্রান্ত প্রয়োজনীয়তা পূরণ করে, যার মধ্যে Display-P3 কালারস্পেস সাপোর্ট করে এমন ভালভাবে-ক্যারেক্টারাইজ করা ডিসপ্লে অন্তর্ভুক্ত। ডিসপ্লে এই প্রয়োজনীয়তা পূরণ না করলে, কালার ম্যানেজমেন্ট চালু করবেন না। CPU ও GPU-এর উপর প্রভাব কমাতে, ডিসপ্লে পাইপলাইনে এক্সটেন্ডেড sRGB ও HDR10-এর জন্য সহায়তা থাকলে ভালো হয়।
- ডিভাইস ফ্যাক্টরি ক্যালিব্রেশন প্রসেস সাপোর্ট করে যা ডিসপ্লে আচরণে ম্যানুফ্যাকচারিং ভ্যারিয়েন্স অ্যাডজাস্ট করার জন্য ক্যালিব্রেশন ডেটা (ডিভাইসে স্টোর করা) তৈরি করে। ন্যূনতম, ক্যালিব্রেশন ডেটা ডিসপ্লেতে sRGB কন্টেন্ট এবং D65 ও D73 হোয়াইট পয়েন্ট সঠিকভাবে দেখানোর অনুমতি দেয়।
এইসব প্রয়োজনীয়তা পূরণ করা হলে, আপনি ডিভাইসের জন্য কালার ম্যানেজমেন্ট ফিচার চালু করতে পারবেন।
কালার ম্যানেজমেন্ট প্রয়োগ করা
কালার ম্যানেজমেন্ট প্রয়োগ করতে, প্রথমে
Hardware Composer 2 (HWC2) ড্রাইভার
আপডেট করুন, যাতে কালার মোড বোঝা যায় এবং সেইসব মোড হার্ডওয়্যারে প্রয়োগ করা যায়।
বিশেষত, HWC2 কম্পোজারকে HWCDisplay::GetColorModes ব্যবহার করে Display-P3 এবং sRGB
কালার মোড সম্পর্কে রিপোর্ট করতে হবে।
এরপরে, OpenGL কালার স্পেসকে HAL ডেটা স্পেসে ট্রান্সলেট করতে প্রয়োজনীয় OpenGL এক্সটেনশন ও লাইব্রেরি সহায়তা চালু করুন। প্রয়োজনীয় OpenGL এক্সটেনশন অন্তর্ভুক্ত:
-
EGL_EXT_pixel_format_float. অ্যাপকে ১৬-বিট ফ্লোট কালার কম্পোনেন্ট সহ প্রেজেন্টেবল EGLSurface তৈরি করার অনুমতি দেয়। অগ্রাধিকার: বেশি (আশা করা যায় যে এটি হল ওয়াইড-কালার সচেতন অ্যাপের ডিফল্ট পিক্সেল ফর্ম্যাট)। ড্রাইভারের সহায়তা প্রয়োজন। -
EGL_KHR_gl_colorspace. যেসব অ্যাপ ডিসপ্লে ডিভাইসে sRGB রেন্ডারিং আরও সহজে পাওয়ার জন্য sRGB ফর্ম্যাট ডিফল্ট ফ্রেমবাফার ব্যবহার করতে চায়, এই এক্সটেনশন সেসব EGLSurface তৈরি করতে দেয় যেগুলি সেইসব OpenGL কনটেক্সট দ্বারা sRGB-তে রেন্ডার করা হবে যেগুলি এই ক্ষমতা সমর্থন করে। sRGB আচরণের জন্য ড্রাইভার সাপোর্ট প্রয়োজন।
এছাড়াও, Android নিম্নলিখিত ঐচ্ছিক এক্সটেনশন প্রদান করে:
-
EGL_EXT_colorspace_scrgb_linear. এই এক্সটেনশন একটি নতুন কালার স্পেস বিকল্প, scRGB প্রদান করে, যা EGLSurface তৈরি করার সময় অ্যাপগুলি বেছে নিতে পারে। scRGB কালার স্পেস sRGB-এর মতো একই সাদা পয়েন্ট ও কালার প্রাইমারি সহ একটি লিনিয়ার ডিসপ্লে রেফার্ড স্পেসকে সংজ্ঞায়িত করে (এবং এইভাবে sRGB-এর সাথে ব্যাকওয়ার্ড কম্প্যাটিবল)। এর জন্য ড্রাইভার সাপোর্টের প্রয়োজন নেই এবং এটি Android EGL র্যাপারে প্রয়োগ করা যেতে পারে। উপযোগী হতে, এই এক্সটেনশনের জন্য ১৬-বিট ফ্লোটিং পয়েন্ট (FP16) সংক্রান্ত সহায়তা প্রয়োজন। -
EGL_EXT_gl_colorspace_display_p3এবংEGL_EXT_gl_colorspace_display_p3_linear। যেসব অ্যাপ ডিসপ্লে ডিভাইসে sRGB রেন্ডারিং আরও সহজে অর্জন করতে Display-P3 ফর্ম্যাট ডিফল্ট ফ্রেমবাফার ব্যবহার করতে চায়, এই এক্সটেনশনটি EGLSurfaces তৈরি করার অনুমতি দেয় যা সেই ক্ষমতাকে সমর্থন করে OpenGL কনটেক্সট দ্বারা Display-P3-তে রেন্ডার করা হবে। এটি EGL ড্রাইভার র্যাপারে প্রয়োগ করা যেতে পারে। -
VK_EXT_swapchain_colorspace(Vulkan). অ্যাপকে, তারা যে কালার স্পেস ব্যবহার করছে সেটি দিয়ে সোয়াপ চেনের ট্যাগ করার অনুমতি দেয়। এতে DCI-P3, Display-P3, AdobeRGB ও BT2020-এর মতো অনেক সাধারণ কালার স্পেস অন্তর্ভুক্ত।
কাস্টমাইজেশন
আপনি DCI-P3, AdobeRGB, Rec709 এবং Rec2020-এর মতো বিভিন্ন কালার স্ট্যান্ডার্ডের জন্য সহায়তা অন্তর্ভুক্ত করে কালার ম্যানেজমেন্ট ফিচার কাস্টমাইজ করতে পারবেন। অন্যান্য কাস্টমাইজেশনের মধ্যে এগুলি অন্তর্ভুক্ত:
- ডিসপ্লে পাইপলাইনে কালার কনভার্সনের জন্য হার্ডওয়্যার সহায়তা। হার্ডওয়্যারে একাধিক কালার ট্রান্সফর্মের জন্য সহায়তা চালু করে।
- একাধিক লেয়ারে স্বতন্ত্র কালার ট্রান্সফর্মের জন্য সহায়তা (যেমন, কিছু লেয়ার sRGB এবং অন্যান্য লেয়ার এক্সটেন্ডেড-sRGB হতে পারে, প্রতিটি লেয়ারের নিজস্ব কালার পাইপলাইন থাকে)। একাধিক কালার স্পেস দেখা গেলে, কিছু কালার স্পেসকে ডিসপ্লের কালার স্পেসে কনভার্ট করতে হবে। সাধারণত, এই ট্রান্সফর্ম ডিসপ্লে ইঞ্জিনের মাধ্যমে সবচেয়ে ভালোভাবে প্রদান করা হয় (অন্যথায় Android-কে GPU কম্পোজিশন পারফর্ম করতে হবে)।
পরীক্ষা করা
কালার ম্যানেজমেন্ট পরীক্ষা করতে, নিম্নলিখিত রিসোর্স ব্যবহার করুন
opengl/tests:
gl2_basicহল একটি সাধারণ OpenGL ডেমো যা Display-P3 কালারস্পেসের অনুরোধ করে।-
EGL_testপ্রয়োজনীয় এক্সটেনশন ও কনফিগারেশন সাপোর্ট (১০:১০:১০:২ ও FP16)-এর জন্য পরীক্ষা। test_wide_colorSurfaceFlinger-এর (যেমন, কনফিগারেশন, কালার স্পেস ও পিক্সেল ফর্ম্যাট) মতো একই পদ্ধতিতে সারফেস তৈরি করে।
রেফারেন্স প্রয়োগ করা
রেফারেন্স প্রয়োগের জন্য, frameworks/native দেখুন। হেডার
সম্পর্কে জানতে, এখানে দেখুন:
system/core/include/system/graphics.hsystem/core/include/system/graphics-base.hHAL_DATASPACE_*HAL_COLOR_MODE_*