ডিসপ্লে ক্ষমতা (যেমন ডিসপ্লে মোড এবং সমর্থিত HDR প্রকার) অ্যান্ড্রয়েড টিভি সেট-টপ-বক্স (STB) এবং ওভার-দ্য-টপ (OTT) ডিভাইসের মতো বাহ্যিকভাবে সংযুক্ত ডিসপ্লে (HDMI বা DisplayPort সহ) ডিভাইসগুলিতে গতিশীলভাবে পরিবর্তিত হতে পারে। এই পরিবর্তনটি HDMI হটপ্লাগ সিগন্যালের ফলে ঘটতে পারে, যেমন যখন ব্যবহারকারী এক ডিসপ্লে থেকে অন্য ডিসপ্লেতে স্যুইচ করে বা সংযুক্ত ডিসপ্লে ছাড়াই ডিভাইসটি বুট করে। অ্যান্ড্রয়েড 12 এবং উচ্চতর সংস্করণে হটপ্লাগিং এবং গতিশীল ডিসপ্লে ক্ষমতা পরিচালনা করার জন্য কাঠামোতে পরিবর্তন অন্তর্ভুক্ত রয়েছে।
এই পৃষ্ঠাটি কম্পোজার HAL বাস্তবায়নে ডিসপ্লে হটপ্লাগ পরিচালনা এবং ডিসপ্লে ক্ষমতার পরিবর্তন সম্পর্কে বর্ণনা করে। এছাড়াও এটি সম্পর্কিত ফ্রেমবাফার পরিচালনা এবং এই পরিস্থিতিতে রেস পরিস্থিতি প্রতিরোধ করার পদ্ধতি নিয়ে আলোচনা করে।
প্রদর্শন ক্ষমতা আপডেট করুন
এই বিভাগটি বর্ণনা করে যে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক কীভাবে কম্পোজার এইচএএল দ্বারা শুরু করা ডিসপ্লে ক্ষমতার পরিবর্তনগুলি পরিচালনা করে।
অ্যান্ড্রয়েড ডিসপ্লে ক্ষমতার পরিবর্তনগুলি সঠিকভাবে পরিচালনা করার আগে, OEM-কে অবশ্যই Composer HAL বাস্তবায়ন করতে হবে যাতে এটি onHotplug(display, connection=CONNECTED) ব্যবহার করে প্রদর্শন ক্ষমতার যেকোনো পরিবর্তনের ফ্রেমওয়ার্ককে অবহিত করে। এটি বাস্তবায়নের পরে, অ্যান্ড্রয়েড নিম্নলিখিতভাবে প্রদর্শন ক্ষমতার পরিবর্তনগুলি পরিচালনা করে:
- ডিসপ্লে ক্ষমতার পরিবর্তন শনাক্ত করার পর, ফ্রেমওয়ার্কটি একটি
onHotplug(display, connection=CONNECTED)বিজ্ঞপ্তি পায়। - বিজ্ঞপ্তি পাওয়ার পর, ফ্রেমওয়ার্কটি তার ডিসপ্লে স্টেটটি বাদ দেয় এবং
getActiveConfig,getDisplayConfigs,getDisplayAttribute,getColorModes,getHdrCapabilitiesএবংgetDisplayCapabilitiesপদ্ধতি ব্যবহার করে HAL থেকে নতুন ক্ষমতা দিয়ে এটি পুনরায় তৈরি করে। - ফ্রেমওয়ার্কটি একটি নতুন ডিসপ্লে অবস্থা পুনরায় তৈরি করার পরে, এটি এমন ইভেন্টগুলির জন্য শোনার জন্য অ্যাপগুলিতে
onDisplayChangedকলব্যাক পাঠায়।
ফ্রেমওয়ার্কটি পরবর্তী onHotplug(display, connection=CONNECTED) ইভেন্টগুলিতে ফ্রেমবাফারগুলিকে পুনরায় বরাদ্দ করে। নতুন ফ্রেমবাফার বরাদ্দের সময় ব্যর্থতা এড়াতে ফ্রেমবাফার মেমরি কীভাবে সঠিকভাবে পরিচালনা করবেন সে সম্পর্কে আরও তথ্যের জন্য ক্লায়েন্ট ফ্রেমবাফার ব্যবস্থাপনা দেখুন।
সাধারণ সংযোগ পরিস্থিতি পরিচালনা করুন
এই বিভাগে প্রাথমিক প্রদর্শন সংযুক্ত এবং সংযোগ বিচ্ছিন্ন থাকাকালীন আপনার বাস্তবায়নে বিভিন্ন সংযোগ পরিস্থিতি কীভাবে সঠিকভাবে পরিচালনা করবেন তা আলোচনা করা হয়েছে।
মোবাইল ডিভাইসের জন্য তৈরি হওয়ায়, অ্যান্ড্রয়েড ফ্রেমওয়ার্কটিতে সংযোগ বিচ্ছিন্ন প্রাথমিক ডিসপ্লের জন্য অন্তর্নির্মিত সমর্থন নেই। পরিবর্তে, যখন একটি প্রাথমিক ডিসপ্লে শারীরিকভাবে সংযোগ বিচ্ছিন্ন থাকে, তখন HAL-কে ফ্রেমওয়ার্কের সাথে তার মিথস্ক্রিয়ায় প্রাথমিক ডিসপ্লেটিকে একটি প্লেসহোল্ডার ডিসপ্লে দিয়ে প্রতিস্থাপন করতে হবে।
STB এবং টিভি ডঙ্গলে নিম্নলিখিত পরিস্থিতিগুলি ঘটতে পারে যেখানে বহিরাগতভাবে সংযুক্ত ডিসপ্লে থাকে এবং সংযোগ বিচ্ছিন্ন করা যেতে পারে। এই পরিস্থিতিগুলির জন্য সমর্থন বাস্তবায়ন করতে, নিম্নলিখিত টেবিলের তথ্য ব্যবহার করুন:
| দৃশ্যকল্প | হ্যান্ডলিং |
|---|---|
| বুট করার সময় কোনও সংযুক্ত ডিসপ্লে নেই |
|
| প্রাথমিক প্রদর্শনটি শারীরিকভাবে সংযুক্ত |
|
| প্রাথমিক ডিসপ্লেটি শারীরিকভাবে সংযোগ বিচ্ছিন্ন করা হয়েছে |
|
নন-এইচডিএমআই সংযোগ বিষয়বস্তু
অ্যান্ড্রয়েড টিভি শুধুমাত্র নিম্নলিখিত রেজোলিউশন সমর্থন করে:
- ৭২০x১২৮০
- ১০৮০x১৯২০
- ২১৬০x৩৮৪০
- ৪৩২০x৭৬৮০
যখন একটি STB বা টিভি ডঙ্গল একটি অসমর্থিত রেজোলিউশন প্রদর্শন করার চেষ্টা করে, যেমন 480i একটি CVBS সংযোগের মাধ্যমে, তখন ব্যবহারকারীর কাছে একটি ত্রুটি বার্তা উপস্থিত হয়।
যদি STB বা টিভি ডংলে HDMI এবং নন-HDMI উভয় সংযোগ থাকে, তাহলে HDMI সংযোগটি প্রাথমিক প্রদর্শন এবং নন-HDMI সংযোগটি নিষ্ক্রিয় থাকে। ফলস্বরূপ, নন-HDMI সংযোগটি সংযুক্ত থাকা অবস্থায় যদি HDMI সংযোগটি বিচ্ছিন্ন থাকে, তাহলে SurfaceFlinger-এ একটি ইভেন্ট পাঠানো হয় এবং নন-HDMI প্রদর্শনের ক্ষমতাগুলি getDisplayAttribute এবং অন্যান্য IComposerClient API (যেমন getHdrCapabilities ) এর মাধ্যমে প্রতিফলিত করতে হবে।
রেসের পরিস্থিতি প্রতিরোধ করতে ক্রমিক কনফিগারেশন আইডি ব্যবহার করুন
যদি কম্পোজার HAL সমর্থিত ডিসপ্লে কনফিগারেশনগুলিকে setActiveConfig বা setActiveConfigWithConstraints কলিং ফ্রেমওয়ার্কের সাথে একই সাথে আপডেট করে, তাহলে রেস কন্ডিশন তৈরি হতে পারে। সমাধান হল সিক্যুয়াল আইডি ব্যবহার করে এই সমস্যা প্রতিরোধ করার জন্য কম্পোজার HAL বাস্তবায়ন করা।
এই বিভাগে বর্ণনা করা হয়েছে কিভাবে রেস কন্ডিশন ঘটতে পারে, তারপরে কম্পোজার HAL কীভাবে বাস্তবায়ন করতে হয় তার বিশদ বিবরণ দেওয়া হয়েছে যাতে এটি এই ধরনের কন্ডিশন প্রতিরোধ করার জন্য ক্রমিক আইডি ব্যবহার করে।
যখন নতুন, ক্রমিক আইডি নতুন ডিসপ্লে কনফিগারেশনে বরাদ্দ করা হয় না, যার ফলে রেস কন্ডিশন তৈরি হয়, তখন নিম্নলিখিত ইভেন্টগুলির ক্রম বিবেচনা করুন:
সমর্থিত ডিসপ্লে কনফিগারেশন আইডিগুলি হল:
- আইডি=১ , ১০৮০x১৯২০ ৬০ হার্জ
- আইডি=২ , ১০৮০x১৯২০ ৫০ হার্জ
ফ্রেমওয়ার্কটি
setActiveConfig(display, config=1)কল করে।একই সাথে, কম্পোজার HAL ডিসপ্লে কনফিগারেশনের পরিবর্তন প্রক্রিয়া করে এবং এর অভ্যন্তরীণ অবস্থাকে একটি নতুন ডিসপ্লে কনফিগারেশন সেটে আপডেট করে, যা নিম্নরূপ দেখানো হয়েছে:
- আইডি=১ , ২১৬০x৩৮৪০ ৬০ হার্জ
- আইডি=২ , ২১৬০x৩৮৪০ ৫০ হার্জ
- আইডি=৩ , ১০৮০x১৯২০ ৬০ হার্জ
- আইডি=৪ , ১০৮০x১৯২০ ৫০ হার্জ
কম্পোজার HAL ফ্রেমওয়ার্কে একটি
onHotplugইভেন্ট পাঠায়, যাতে জানানো হয় যে সমর্থিত মোডের সেট পরিবর্তিত হয়েছে।কম্পোজার HAL
setActiveConfig(display, config=1)পায় (ধাপ ২ থেকে)।HAL ব্যাখ্যা করে যে ফ্রেমওয়ার্কটি 2160x3840 60 Hz এ কনফিগারেশন পরিবর্তনের অনুরোধ করেছে, যদিও বাস্তবে 1080x1920 60 Hz নির্বাচন করা হয়েছিল।
নন-সিক্যুয়েনশিয়াল আইডি অ্যাসাইনমেন্ট ব্যবহারের প্রক্রিয়াটি নির্বাচিত কনফিগারেশন পরিবর্তনের ভুল ব্যাখ্যা দিয়ে এখানেই শেষ হয়।
সিক্যুয়াল আইডি ব্যবহার করার জন্য কম্পোজার HAL কনফিগার করুন
এই ধরনের রেস পরিস্থিতি এড়াতে, OEM-কে নিম্নরূপ কম্পোজার HAL বাস্তবায়ন করতে হবে:
- যখন কম্পোজার HAL সমর্থিত ডিসপ্লে কনফিগারেশনগুলি আপডেট করে, তখন এটি নতুন ডিসপ্লে কনফিগারেশনগুলিতে নতুন, ক্রমিক আইডি বরাদ্দ করে।
- যখন ফ্রেমওয়ার্কটি একটি অবৈধ কনফিগারেশন আইডি সহ
setActiveConfigবাsetActiveConfigWithConstraintsকল করে, তখন কম্পোজার HAL কলটি উপেক্ষা করে।
এই পদক্ষেপগুলি জাতিগত পরিস্থিতি প্রতিরোধে কাজ করে, যেমনটি নিম্নলিখিত আলোচনায় দেখানো হয়েছে।
নতুন ডিসপ্লে কনফিগারেশনে নতুন, ক্রমিক আইডি বরাদ্দ করা হলে, নিম্নলিখিত ইভেন্টের ক্রম বিবেচনা করুন:
সমর্থিত ডিসপ্লে কনফিগারেশন আইডিগুলি হল:
- আইডি=১ , ১০৮০x১৯২০ ৬০ হার্জ
- আইডি=২ , ১০৮০x১৯২০ ৫০ হার্জ
ফ্রেমওয়ার্কটি
setActiveConfig(display, config=1)কল করে।যখন ডিসপ্লে কনফিগারেশনের পরিবর্তন প্রক্রিয়া করা হয়, তখন পরবর্তী অব্যবহৃত পূর্ণসংখ্যা থেকে শুরু করে পরবর্তী কনফিগারেশন আইডি সেট বরাদ্দ করা হয়, যা নিম্নরূপ দেখানো হয়েছে:
আইডি=৩ , ২১৬০x৩৮৪০ ৬০ হার্জ
আইডি=৪ , ২১৬০x৩৮৪০ ৫০ হার্জ
আইডি=৫ , ১০৮০x১৯২০ ৬০ হার্জ
আইডি=৬ , ১০৮০x১৯২০ ৫০ হার্জ
কম্পোজার HAL ফ্রেমওয়ার্কে একটি
onHotplugইভেন্ট পাঠায়, যাতে জানানো হয় যে সমর্থিত মোডের সেট পরিবর্তিত হয়েছে।কম্পোজার HAL
setActiveConfig(display, config=1)পায় (ধাপ ২ থেকে)।আইডিটি আর বৈধ না থাকায় কম্পোজার HAL কলটি উপেক্ষা করে।
ফ্রেমওয়ার্কটি ধাপ ৪ থেকে
onHotplugইভেন্টটি গ্রহণ করে এবং প্রক্রিয়া করে। এটিgetDisplayConfigsএবংgetDisplayAttributeফাংশন ব্যবহার করে কম্পোজার HAL-এ কল করে। এই ফাংশনগুলির সাহায্যে ফ্রেমওয়ার্কটি নির্বাচিত রেজোলিউশন এবং রিফ্রেশ রেটের জন্য নতুন ID (5) সনাক্ত করে 1080x1920 এবং 60 Hz।ফ্রেমওয়ার্কটি ৫ এর আপডেটেড আইডি সহ আরেকটি
setActiveConfigইভেন্ট পাঠায়।কম্পোজার HAL ধাপ ৫ থেকে
setActiveConfig(display, config=5)গ্রহণ করে।HAL সঠিকভাবে ব্যাখ্যা করে যে ফ্রেমওয়ার্কটি 1080x1920 60 Hz এ কনফিগারেশন পরিবর্তনের অনুরোধ করেছে।
পূর্ববর্তী উদাহরণে দেখানো হয়েছে, ক্রমিক আইডি অ্যাসাইনমেন্ট ব্যবহার করে প্রক্রিয়াটি যাচাই করে যে রেস কন্ডিশন প্রতিরোধ করা হয়েছে এবং সঠিক ডিসপ্লে কনফিগারেশন পরিবর্তন আপডেট করা হয়েছে।