ভূতুরে ওয়ালপেপার ডিবাঙ্ক

তানভীর রানা রাব্বি


হোলা, সইও ওত্রা বেজ। সো কিছু দিন যাবৎ একটা ওয়ালপেপার নিয়ে সোশাল মিডিয়াতে বেশ মাতামাতি হচ্ছে। মুলত ৩১ শে মে বিখ্যাত লিকার Ice Universe এর একটা টুইটের মাধ্যমে জিনিসটা ভাইরাল হয়। এখান থেকে দেখে আসতে পারে ।[https://twitter.com/Univers.../status/1266943909499826176...] তো এখন কথা হচ্ছে আসলে ব্যাপারটা কি? বিসিবিতে এ নিয়ে বেশ কয়েকটা পোস্ট দেখেছি। ইনফ্যাক্ট আমি নিজে দেখার পর ট্রাই করেছি কিন্তু আমার ফোনে [OnePlus 8 Pro] কোনো প্রবলেম হয় নি। কিন্তু টুইটারে কমেন্ট দেখে আই ওয়াজ লাঈক, “আ কিওরা ডিআব্লোস”। প্রথম দিকে ভাবলাম ফেইক হবে কিন্তু Ice Universe তো এমন করার কথা না! তো ডিগিং চললো। গ্রুপে অনেকে বললো ডিসপ্লে প্যানেল AMOLED হলে হচ্ছে, সেগুলা ডিবাঙ্ক করার চেষ্টা করলাম। কিন্তু নিজেও কনফিউজড্ ছিলাম। তারপর এর পেছনের মুল কারণ খুজে পেলাম। তো চলুন এটাকে ভালোমত তেল দিয়ে তারপর এক্সপোস করা যাক। আজকের লেখা ব্লগ চাইপের হচ্ছে আই নো।

সমস্যাটা কি সত্য?

হ্যাঁ, সমস্যা আসলেই সত্য। কিন্তু এর পেছনের কারণ হচ্ছে এন্ড্রয়েডের গুগল কালার ইঞ্জিন, ডিসপ্লে প্যানেলের পিক্সেল বার্নিং, হ্যান ত্যান না। সম্পূর্ণ সফটওয়্যারের কালার প্রসেসিং ইস্যু (তাই বলে শুধু GPU এর না)। স্যামসাং আর গুগল (পিক্সেল) পার্টিকুলারলি তাদের ফোনের এন্ড্রয়েডে গুগলের কালার ইঞ্জিন ব্যবহার করে। সেজন্য সেসব ডিভাইসে প্রবলেম হয়েছে। তাছাড়া গুগলের কালার ইঞ্জিন যেসব কম্পানির ফোন ব্যবহার করে সেগুলাতেই প্রবলেম হবে। আর আমার ডিভাইসে সহ আমার টেস্ট করা ফোনে কাজ করে নি কেন? প্রথমত OnePlus কিন্তু CyanogenMod কাস্টম রম থেকে ইনসপাইয়ার্ড আর সেখানকার ডেভেলপারকে নিয়ে করা। CyanogenMod এর মত OnePlus এরও কালার ইঞ্জিন মডিফাই করা, সেজন্য কোনো প্রবলেম হয় নি। আমি iPhone XR এ টেস্ট করেছি, যেহেতু সেটা iOS, সেটায় সে সমস্যা হয় নি। আবার Huawei Mate 20 Pro তে ট্রাই করেছি, হয়তো EMUI এরও কালার ইঞ্জিন আলাদা তই কিছু হয় নি। কিন্তু যখনই স্যামস্যাং ফোনে দেওয়া হয়েছে [নোট ১০] তখনই শুরু হয়েছে, কালার রি-ক্রিয়েটিং লুপ। যাইহোক, তো দেখা যাক এর পেছনের সবকিছু। তবে তার আগে ওয়ালপেপার সম্পর্কে জেনে আসি।

ওয়ালপেপার

ভাইরাল হওয়া ওয়ালপেপারটি কিন্তু ডিজিটালি জেনারেটেড কোনো ওয়ালপেপার না। এটা আসলে Nikon D850 এ তোলা Glacier National Park এর Saint Mary Lake এর একটা ছবি থেকে ক্রপ করে নেওয়া। কমেন্টে ছবি পেয়ে যাবেন। এটা সেট করার ফলে ক্রাশ করার কারণ ধীরে ধীরে ব্যাখ্যা করা যাক।

কালার

প্রথমে এতটু কালার নিয়ে কথা বলা যাক। আমার আসলে খালি চোখে যেটুকু কালার দেখি সেটার একটা গ্রাফ স্পেস, কমেন্ট বক্সে দেখতে পাবেন। সেখানে কালার করা অংশটুকুই আমাদের দেখা সব কালার। এখন জনপ্রিয় একটা কালার মডেল হচ্ছে RGB (Red, Green, Blue; যেহেতু এই তিনটা রং দিয়েই সব রং তৈরি করা সম্ভব)। আর সকল ইলেকট্রনিক্স ডিভাইস সহ প্রচলিত ফটোগ্রাফি ডিভাইস এই RGB কালার মডেল ব্যবহার করেই কাজ করে। তো এই RGB কালার মডেলের আবার কয়েকটা কালার প্রোফাইল আছে। যেটাকে ICC (International Color Consortium) প্রোফাইলও বলা হয়। এই কালার প্রোফাইল মুলতে তথ্যের ডেটা যেটা ডিভাইসের কালার ইনপুট-আউটপুট নিয়ন্ত্রণ করে। RGB তে প্রচলিত ২০ টির মত কালার প্রোফাইল আছে। কিন্তু আজকে আমরা কথা বলবো sRGB আর ProPhoto RGB নিয়ে, দুট সহ আরো কালার প্রোফাইলের কালার স্পেস কমেন্টের ছবিতে উল্লেখ করা আছে।

কালার প্রসেসিং

এখন আসি এসবের কাজ কি? তো Android সহ অনেক ডিভাইস প্রাইমারিলি sRGB ই ব্যবহার করে, ওয়েবে থাকা সব মিডিয়াও sRGB তেই দেখি। যার কালার স্পেস কমেন্টে দেখতে পারবেন। তো যখন আমার কোনো sRGB কালার প্রোফাইলে কোনোকিছু দেখি তখন সেটা ঔ স্পেসে অবস্থিত কালার দিয়েই তৈরি। আমাদের ডিসপ্লে তে প্রদর্শিত ছবি মুলত অনেকগুলো পিক্সেলের সমন্বয়ে গঠিত, প্রতিটা পিক্সেলে একসাথে একটা কালারই শো করতে পারে। তো যখন আমার Android ফোনে কোনো ফটো দেখি, তখন একটা পিক্সেলের কথা ধরলে, সেটা তখন sRGB কালার স্পেসের যেকোনো একটা কালার দেখাবে। এভাবেই মুলতে ডিসপ্লেতে কালার শো করে ফোন। অর্থাৎ যেহেতু Android শুধু sRGB কালার দেখাতে পারে, তো যখন কোনো ছবি দেখানো হয় তখন কালার ইঞ্জিন সেই হিসেবে ফোনের ডিসপ্লের পিক্সেলগুলোকে কালার শো করতে বলে যার ফলে একটা পূর্ণাঙ্গ ছবি দেখতে পারেন।

সমস্যা কোথায়?

এবার বলতে পারেন, সমস্যা কোথায়? সমস্যাটা আসলে ছবিতে। যে মুল ছবিটা তুলেছে সে আসলে ছবিটা আরো স্যাচুরেটেড করতে কালার প্রোফাইল sRGB থেকে ProPhoto RGB এ পরিবর্তন করেছে। কমেন্টের ছবি দেখলে বুঝতে পারবেন ProPhoto RGB কালার স্পেস অনেক বড়। তো সেটা আরো বেশি কালার দেখাতে পারবে যেটা sRGB পারে না। তো দেখা গেছে যে ProPhoto RGB কালার প্রোফাইলের ছবি sRGB তে প্রসেসে প্রবলেম হয়। কিন্তু Android কে এমন ভাবে প্রোগ্রাম করা হয়েছে যে এটা যেকোনো কালার প্রোফাইলের কালারই শো করতে পারে। এর জন্য সে সেই কালার প্রোফাইলকে sRGB তে কনভার্ট করে নেয়। মানে ProPhoto RGB কে Android শো করতে পারে sRGB তে কনভার্ট করে। এখন প্রশ্ন হতে পারে, তাহলে প্রবলেম কোথায়? এই ওয়ালপেপার ফটোর ক্ষেত্রে প্রবলেমটা আসলে কনভার্সনের সময়। চলুন একটু গভীরে যাই। Davide Bianco (@HrX2003) এ তথ্য মতে এই ওয়ালপেপার সেট করার ফলে ফোন ক্রাস করার জন্য দায়ী একটা মাত্র পিক্সেল (ছবি কমেন্ট বক্সে)। গুগল কালার ইঞ্জিন এই পিক্সেলের কালার sRGB তে কনভার্ট করার সময়েই ঝামেলায় পরে। কারণ ওই পিক্সেলে থাকা কালারে Luminance (নির্দিষ্ট দিকে প্রতি ইউনিট ক্ষেত্রফল থেকে নির্গত হওয়া আলোর তীব্রতা)। Luminance ব্যাপারটার জন্য মানুষের চোখ রেড কালার টোন থেকে গ্রিন কালার টোন ভালো দেখি আবার ব্লু থেকে রেড কালার টোন বেশি দেখে। তো গুগল কালার ইঞ্জিনের চালিত Android পিক্সেলের luminance ঠিক হয় নিচের ফরমুলা দিয়ে
0.2126×রেড+0.7152×গ্রিন+0.0722×ব্লু
যেহেতু প্রতিটি RGB পিক্সেল ডিভাইসে 8(আট)-বিটের লুমিন্যান্স ভ্যালু 0 থেকে 255 এ মধ্যে হতে পারবে। তো এখাতে রেড, গ্রিন, ব্লু এর প্রত্যেকটির সর্বোচ্চ ভ্যালু 255 পর্যন্ত হতে পারবে। আমার যে পিক্সেল (ছবি কমেন্টে) কে এতক্ষণ দোয়ারোপ করছিলাম সেটা আসলে রেড, গ্রিন, ব্লু তিনটারই হাই ভ্যালুতে ইউজ করে। হিসেব মতে ঔ পার্টিকুলার পিক্সেলটির রেড ভ্যালু=255, গ্রিন=255, ব্লু=243. তো আমার যদি আগের সমিকরণে বসাই তাহলে। দেখবো,
0.2126×রেড+0.7152×গ্রিন+0.0722×ব্লু
=> 0.2126×255+0.7152×255+0.0722×243
=> 254.1336
কিন্তু দেখা যাচ্ছে 254.1336>255, তো সমস্যা হবার কথা না, কারণ 8(আট)-বিটের লুমিন্যান্স ভ্যালুর মধ্যে আছে। তবে এখানেই আসলে গুগল কালার ইঞ্জিনের বাগ। গুগল কালার ইঞ্জিনের এই কনভারশনের প্রাপ্ত পিক্সেলটির luminance কে পাকনাকি করে 0.2126×255 = 54.213 না ধরে, ধরে 55, 0.7152×255 = 182.376 না ধরে, ধরে 183 এবং 0.0722×243 = 17.5446 না ধরে, ধরে 18. এখন এ তিনটাকে যোগ করলে, 55+183+18 = 256 হয় যেটা 255 থেকে বড়, এখানেই ঘটনা ঘটে। তখন সেটা error হয়ে যায়। যার ফলে ডিভাইস সেই পিক্সেলে বারেবারে সেই কালারটি শো করতে যায় কিন্তু যায় কিন্তু প্রতিবারে সেই error এর মুখোমুখি হয়ে পরে যার ফলে একটা লুপের মধ্যে পরে যায়, অর্থাৎ বার বার রেন্ডর করতে গিয়ে ফেইল্ড। এতে সেইফ মোড, ক্রাসের মত ঘটনা ঘটে। তখন রম ফ্ল্যাস বা ফ্যাক্টরি রিসেট করা ছাড়া কোনো উপায় থাকে না।

কোনোভাবে সমস্যায় পরলে সমাধান

সমাধান হলো ফ্যাক্টরি রিসেট। রিকোভারি থেকে রিসেট দিতে পারবেন। অথবা ADB দিয়ে, বা অন্য কিছু দিয়ে রম/ওএস ফ্ল্যাস করলেই হবে। শুধু আপনার ফোনে থাকা ডেটা পাবেন না। তাছাড়া কোনো প্রবলেম হবে না। মনে রাখবেন, এটা শুধু মাত্রই সফটওয়্যারজনীত প্রবলেম, AMOLED, OLED প্যানেল হলে হবে, পৃরে যাবে, নষ্ট হয়ে যাবে সেটা মোটেই সত্য না। আর ডিসপ্লে নষ্ট হয়ে যাবে না একদমই।

আমি ছবিটি ব্যবহার করবোই-করবোই-করবোই

করেন, তাতে আমার কি!! ওয়েট, প্রথমত বলি বিশেষ করে স্যামস্যাং আর পিক্সেল ইউজাররা দুরে থাকুন কারণ এরা AOSP র সাথে গুগল কালার ইঞ্জিন ব্যবহার করে। অন্য কোন কম্পানি আর করে সেটা আমার আজানা। তবে আপনার ট্রাই করবেন না। তবে যদি খুব ইচ্ছা হয় তাহলে এর সমাধান আছে।
১. যোকোন ফোটো এডিটিং প্রোগ্রামে ছবিটা নিয়ে কালার প্রোফাইল sRGB করে দিয়ে ব্যবহার করেন।
২. যেকোনো সোশাল সাইটে আপলোড করুন, তারপর সেটা ডাউনলোড করুন। তারপর সেটা ব্যবহার করুন। কারণ তখন সেসব সাইট গুলো অটোমেটিক ফটোটাকে sRGB তে কনভার্ট করে নিবে। পরে সেটা ডাউনলোড করে সেট করলে কোনো প্রবলেম হবে না।
৩. ফোনের গ্যালারিতে ছবিটা নিয়ে একটা স্ক্রিনসর্ট মেরে তারপর সেটাকে সেট করুন। কেননা, স্ক্রিনসর্ট নিলে নতুন একটু ছবি তৈরি করবে যেটা sRGB তে হবে আর সেই পিক্সেল ইস্যুটি আর তৈরি হবে না।
এখন অনেকে প্রশ্ন করতে পারেন, গ্যালারিতে ওপেন করলে কিছু হয় না কিন্তু ওয়ালপেপার দিলে হবে কেন? এর উত্তর হচ্ছে, গ্যালারি একটা অ্যাপ (ফার্স্ট পার্টি হোক বা থার্ড পার্টি হোক) সেটার কালার প্রসেসিং আলাদা। কিন্তু যখন ওয়ালপেপার হিসেবে সেট করেন তখন সেটা Android মেইন ওএস ইটসেল্ফ রেন্ডার করে, সেজন্যই প্রবলেমটাই হয়।
তো এটাই ছিলো। কোনো প্রশ্ন থাকলে টুক করে কমেন্ট বক্সে করে ফেলুন। আর করোনাভাইরাস প্রতিরোধে বাসায় থাকুন, নিজে সেইফ থাকুন অন্যদেরকে সেইফ রাখুন।
Adios!

তানভীর রানা রাব্বি,
ব্যাঙের ছাতার বিজ্ঞান 

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন