অ্যান্ড্রয়েড ৮.১ এবং এর পরবর্তী সংস্করণগুলোতে কালার ম্যানেজমেন্টের সুবিধা রয়েছে, যা বিভিন্ন ডিসপ্লে প্রযুক্তিতে একটি সামঞ্জস্যপূর্ণ অভিজ্ঞতা প্রদান করতে ব্যবহার করা যেতে পারে। অ্যান্ড্রয়েডে চালিত অ্যাপগুলো একটি ডিসপ্লে ডিভাইস থেকে সেরা ফলাফল পেতে ওয়াইড-গ্যামুট ডিসপ্লের সম্পূর্ণ সক্ষমতা ব্যবহার করতে পারে।
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলোতে কালার ম্যানেজমেন্ট সাপোর্ট ছিল না এবং এর পরিবর্তে কন্টেন্ট ও ডিসপ্লের সামঞ্জস্যের উপর নির্ভর করা হতো (টিভি ইন্ডাস্ট্রির সহায়তায় এই লক্ষ্যটি প্রায়শই পূরণ হতো)। তবে, সাম্প্রতিক ডিসপ্লে প্রযুক্তিগুলো অনেক বড় গ্যামুট ডিসপ্লে ব্যবহারের সুযোগ করে দিয়েছে, যেগুলো বিদ্যমান কন্টেন্টকে প্রত্যাশা অনুযায়ী প্রদর্শন করে না। অ্যান্ড্রয়েড ৮.১ এবং এর পরবর্তী সংস্করণগুলোতে, যেসব ডিভাইস ওয়াইড-গ্যামুট ডিসপ্লে ব্যবহার করে (যেমন, অ্যাক্টিভ-ম্যাট্রিক্স অর্গানিক লাইট-এমিটিং ডায়োড বা অ্যামোলেড, কিছু এলসিডি), সেগুলো অ্যাপ থেকে ওয়াইড-গ্যামুট কন্টেন্ট দেখতে পারে।
ডিভাইস সমর্থন নির্ধারণ করুন
অ্যান্ড্রয়েড ৮.১ বা তার উচ্চতর সংস্করণে চালিত ওয়াইড-কালার ডিসপ্লেযুক্ত ডিভাইসগুলিতে কালার ম্যানেজমেন্ট (ওয়াইড-কালার) সাপোর্ট থাকা উচিত। এই ফিচারটি চালু করার আগে, নিশ্চিত করুন যে ডিভাইসটি নিম্নলিখিত শর্তগুলো পূরণ করে:
- ডিভাইসের ডিসপ্লেকে হার্ডওয়্যারের প্রয়োজনীয়তা পূরণ করতে হবে, যার মধ্যে Display-P3 কালারস্পেস সমর্থনকারী একটি সু-বৈশিষ্ট্যযুক্ত ডিসপ্লে অন্তর্ভুক্ত। যদি ডিসপ্লেটি এই প্রয়োজনীয়তা পূরণ না করে, তবে কালার ম্যানেজমেন্ট সক্রিয় করবেন না। সিপিইউ এবং জিপিইউ-এর উপর প্রভাব কমাতে, ডিসপ্লে পাইপলাইনে এক্সটেন্ডেড sRGB এবং HDR10-এর সমর্থন থাকা বাঞ্ছনীয়।
- ডিভাইসটি একটি ফ্যাক্টরি ক্যালিব্রেশন প্রক্রিয়া সমর্থন করে, যা ডিসপ্লের আচরণে উৎপাদনগত ভিন্নতা সমন্বয় করার জন্য ক্যালিব্রেশন ডেটা (ডিভাইসে সংরক্ষিত) তৈরি করে। ন্যূনতমভাবে, ক্যালিব্রেশন ডেটা ডিসপ্লেটিকে sRGB কন্টেন্ট এবং D65 ও D73 হোয়াইট পয়েন্ট সঠিকভাবে প্রদর্শন করতে সক্ষম করবে।
এই শর্তগুলো পূরণ হলে, আপনি ডিভাইসটির জন্য কালার ম্যানেজমেন্ট ফিচারটি চালু করতে পারবেন।
রঙ ব্যবস্থাপনা বাস্তবায়ন করুন
কালার ম্যানেজমেন্ট বাস্তবায়ন করতে, প্রথমে হার্ডওয়্যার কম্পোজার ২ (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 আচরণের ড্রাইভার সমর্থন প্রয়োজন।
অ্যান্ড্রয়েড নিম্নলিখিত ঐচ্ছিক এক্সটেনশনগুলিও প্রদান করে:
-
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। যে অ্যাপগুলো ডিসপ্লে ডিভাইসে আরও সহজে sRGB রেন্ডারিং করার জন্য Display-P3 ফরম্যাটের ডিফল্ট ফ্রেমবাফার ব্যবহার করতে চায়, তাদের জন্য এই এক্সটেনশনটি এমন EGLSurface তৈরি করার সুযোগ দেয়, যা এই সক্ষমতা সমর্থনকারী OpenGL কনটেক্সট দ্বারা Display-P3 ফরম্যাটে রেন্ডার করা হবে। এটি EGL ড্রাইভার র্যাপারে প্রয়োগ করা যেতে পারে। -
VK_EXT_swapchain_colorspace(ভুলকান)। এটি অ্যাপগুলোকে তাদের ব্যবহৃত কালার স্পেস দিয়ে সোয়াপ চেইন ট্যাগ করতে সক্ষম করে। এর মধ্যে DCI-P3, Display-P3, AdobeRGB, এবং BT2020-এর মতো বেশ কিছু প্রচলিত কালার স্পেস অন্তর্ভুক্ত রয়েছে।
কাস্টমাইজেশন
আপনি DCI-P3, AdobeRGB, Rec709, এবং Rec2020-এর মতো বিভিন্ন কালার স্ট্যান্ডার্ডের সাপোর্ট অন্তর্ভুক্ত করে কালার ম্যানেজমেন্ট ফিচারটি কাস্টমাইজ করতে পারেন। অন্যান্য কাস্টমাইজেশনগুলোর মধ্যে রয়েছে:
- ডিসপ্লে পাইপলাইনে রঙ রূপান্তরের জন্য হার্ডওয়্যার সমর্থন। হার্ডওয়্যারে একাধিক রঙ রূপান্তরের সুবিধা দেয়।
- একাধিক লেয়ারে স্বাধীন কালার ট্রান্সফর্মের জন্য সাপোর্ট (উদাহরণস্বরূপ, কিছু লেয়ার sRGB এবং অন্যগুলো এক্সটেন্ডেড-sRGB হতে পারে, এবং প্রতিটির নিজস্ব কালার পাইপলাইন থাকবে)। যখন একাধিক কালার স্পেস দৃশ্যমান থাকে, তখন কিছু কালার স্পেসকে ডিসপ্লের কালার স্পেসে রূপান্তর করার প্রয়োজন হয়। আদর্শগতভাবে, এই ট্রান্সফর্মটি ডিসপ্লে ইঞ্জিন দ্বারা সম্পন্ন হওয়াই শ্রেয় (অন্যথায় অ্যান্ড্রয়েডকে GPU কম্পোজিশন সম্পাদন করতে হয়)।
পরীক্ষা
কালার ম্যানেজমেন্ট পরীক্ষা করার জন্য, opengl/tests এ নিম্নলিখিত রিসোর্সগুলি ব্যবহার করুন:
-
gl2_basicহলো একটি সাধারণ OpenGL ডেমো যা Display-P3 কালারস্পেসের জন্য অনুরোধ করে। -
EGL_testপ্রয়োজনীয় এক্সটেনশন এবং কনফিগারেশন সমর্থনের (10:10:10:2 এবং FP16) জন্য পরীক্ষা করে। -
test_wide_colorSurfaceFlinger-এর মতোই একটি সারফেস তৈরি করে (যেমন, কনফিগারেশন, কালার স্পেস এবং পিক্সেল ফরম্যাট)।
রেফারেন্স বাস্তবায়ন
রেফারেন্স ইমপ্লিমেন্টেশনের জন্য frameworks/native দেখুন। হেডারগুলির জন্য দেখুন:
-
system/core/include/system/graphics.h -
system/core/include/system/graphics-base.h-
HAL_DATASPACE_* -
HAL_COLOR_MODE_*
-