হটপ্লাগ পরিচালনা

ডিসপ্লে ক্ষমতাগুলি (যেমন ডিসপ্লে মোড এবং সমর্থিত এইচডিআর প্রকারগুলি) বাহ্যিকভাবে সংযুক্ত ডিসপ্লে (এইচডিএমআই বা ডিসপ্লেপোর্ট সহ), যেমন অ্যান্ড্রয়েড টিভি সেট-টপ-বক্স (এসটিবি) এবং ওভার-দ্য-টপ (OTT) রয়েছে এমন ডিভাইসগুলিতে গতিশীলভাবে পরিবর্তন করতে পারে। ডিভাইস এই পরিবর্তনটি HDMI হটপ্লাগ সিগন্যালের ফলে ঘটতে পারে, যেমন ব্যবহারকারী যখন একটি ডিসপ্লে থেকে অন্য ডিসপ্লেতে স্যুইচ করে বা সংযুক্ত ডিসপ্লে ছাড়াই ডিভাইস বুট করে। অ্যান্ড্রয়েড 12 এবং উচ্চতর হটপ্লাগিং এবং গতিশীল ডিসপ্লে ক্ষমতাগুলি পরিচালনা করার জন্য কাঠামোর পরিবর্তনগুলি অন্তর্ভুক্ত করে।

এই পৃষ্ঠাটি ডিসপ্লে হটপ্লাগগুলির পরিচালনা এবং কম্পোজার HAL বাস্তবায়নে প্রদর্শন ক্ষমতার পরিবর্তনগুলি বর্ণনা করে। অতিরিক্তভাবে এটি আলোচনা করে কিভাবে সম্পর্কিত ফ্রেমবাফার পরিচালনা করা যায় এবং এই পরিস্থিতিতে রেসের অবস্থা প্রতিরোধ করা যায়।

ডিসপ্লে ক্ষমতা আপডেট করুন

এই বিভাগটি বর্ণনা করে যে কীভাবে Android ফ্রেমওয়ার্ক কম্পোজার HAL দ্বারা শুরু করা ডিসপ্লে ক্ষমতার পরিবর্তনগুলি পরিচালনা করে৷

অ্যান্ড্রয়েড ডিসপ্লে ক্ষমতার পরিবর্তনগুলি সঠিকভাবে পরিচালনা করতে পারে তার আগে, OEM কে অবশ্যই কম্পোজার HAL প্রয়োগ করতে হবে যাতে এটি প্রদর্শনের ক্ষমতাগুলির যে কোনও পরিবর্তনের কাঠামোকে অবহিত করতে onHotplug(display, connection=CONNECTED) ব্যবহার করে। এটি প্রয়োগ করার পরে, অ্যান্ড্রয়েড নিম্নোক্তভাবে প্রদর্শনের ক্ষমতার পরিবর্তনগুলি পরিচালনা করে:

  1. প্রদর্শন ক্ষমতার পরিবর্তন শনাক্ত করার পরে, ফ্রেমওয়ার্ক একটি onHotplug(display, connection=CONNECTED) বিজ্ঞপ্তি পায়।
  2. বিজ্ঞপ্তি প্রাপ্তির পর, ফ্রেমওয়ার্ক তার প্রদর্শনের অবস্থা ড্রপ করে এবং getActiveConfig , getDisplayConfigs , getDisplayAttribute , getColorModes , getHdrCapabilities , এবং getDisplayCapabilities পদ্ধতিগুলি ব্যবহার করে HAL থেকে নতুন ক্ষমতার সাথে এটিকে পুনরায় তৈরি করে৷
  3. ফ্রেমওয়ার্ক একটি নতুন ডিসপ্লে অবস্থা পুনরায় তৈরি করার পরে, এটি এই ধরনের ইভেন্টের জন্য শুনছে এমন অ্যাপগুলিতে onDisplayChanged কলব্যাক পাঠায়।

ফ্রেমওয়ার্ক পরবর্তী onHotplug(display, connection=CONNECTED) ইভেন্টগুলিতে ফ্রেমবাফারগুলিকে পুনরায় বরাদ্দ করে। নতুন ফ্রেমবাফারের বরাদ্দের সময় ব্যর্থতা এড়াতে ফ্রেমবাফার মেমরি কীভাবে সঠিকভাবে পরিচালনা করবেন সে সম্পর্কে আরও তথ্যের জন্য ক্লায়েন্ট ফ্রেমবাফার ব্যবস্থাপনা দেখুন।

সাধারণ সংযোগের পরিস্থিতি পরিচালনা করুন

প্রাথমিক ডিসপ্লে সংযুক্ত এবং সংযোগ বিচ্ছিন্ন হলে কীভাবে আপনার বাস্তবায়নে বিভিন্ন সংযোগের পরিস্থিতি সঠিকভাবে পরিচালনা করবেন তা এই বিভাগে কভার করে।

মোবাইল ডিভাইসের জন্য তৈরি করা হয়েছে, অ্যান্ড্রয়েড ফ্রেমওয়ার্কের সংযোগ বিচ্ছিন্ন প্রাথমিক প্রদর্শনের জন্য অন্তর্নির্মিত সমর্থন নেই। পরিবর্তে HAL-কে অবশ্যই প্রাথমিক ডিসপ্লেটিকে একটি প্লেসহোল্ডার ডিসপ্লে দিয়ে প্রতিস্থাপন করতে হবে যখন একটি প্রাথমিক ডিসপ্লে শারীরিকভাবে সংযোগ বিচ্ছিন্ন হয়ে গেলে ফ্রেমওয়ার্কের সাথে তার মিথস্ক্রিয়ায়।

STBs এবং টিভি ডঙ্গলগুলিতে নিম্নলিখিত পরিস্থিতিগুলি ঘটতে পারে যেগুলিতে বাহ্যিকভাবে সংযুক্ত ডিসপ্লে রয়েছে যা সংযোগ বিচ্ছিন্ন হতে পারে৷ এই পরিস্থিতিতে সমর্থন বাস্তবায়ন করতে, নীচের টেবিলের তথ্য ব্যবহার করুন:

দৃশ্যকল্প হ্যান্ডলিং
বুট করার সময় কোনো সংযুক্ত ডিসপ্লে নেই
  • কম্পোজার HAL থেকে ফ্রেমওয়ার্কে একটি onHotplug(display, connection=CONNECTED) সংকেত পাঠান।
  • কম্পোজার এইচএএল-এর ভিতরে ফিজিক্যাল ডিসপ্লে স্টেটকে প্লেসহোল্ডার ডিসপ্লে স্টেট দিয়ে প্রতিস্থাপন করুন।
প্রাথমিক প্রদর্শন শারীরিকভাবে সংযুক্ত করা হয়
  • কম্পোজার HAL থেকে ফ্রেমওয়ার্কে আরেকটি onHotplug(display, connection=CONNECTED) ইভেন্ট পাঠান।

    এর ফলে ফ্রেমওয়ার্ক সমস্ত প্রদর্শন ক্ষমতা পুনরায় লোড করে।

প্রাথমিক প্রদর্শন শারীরিকভাবে সংযোগ বিচ্ছিন্ন করা হয়েছে
  • কম্পোজার HAL থেকে ফ্রেমওয়ার্কে আরেকটি onHotplug(display, connection=CONNECTED) ইভেন্ট পাঠান।
  • কম্পোজার এইচএএল-এর ভিতরে ফিজিক্যাল ডিসপ্লে স্টেটকে প্লেসহোল্ডার ডিসপ্লে স্টেট দিয়ে প্রতিস্থাপন করুন। প্লেসহোল্ডার ডিসপ্লেতে অবশ্যই একটি একক ডিসপ্লে মোড থাকতে হবে, যাতে ফ্রেমওয়ার্ক অ্যাপগুলিতে onDisplayChanged কলব্যাক পাঠায় (কারণ সমর্থিত মোডের সেট পরিবর্তিত হয়েছে)। এই একক ডিসপ্লে মোডটি সংযোগ বিচ্ছিন্ন করার আগে শারীরিক প্রদর্শনের শেষ সক্রিয় মোডের সাথে মেলে, যাতে অ্যাপগুলি কনফিগারেশন পরিবর্তন ইভেন্টগুলি না পায়৷

রেসের অবস্থা প্রতিরোধ করতে ক্রমিক কনফিগার আইডি ব্যবহার করুন

কম্পোজার এইচএএল সমর্থিত ডিসপ্লে কনফিগারেশনগুলি setActiveConfig বা setActiveConfigWithConstraints কলিং ফ্রেমওয়ার্কের সাথে আপডেট করলে রেসের পরিস্থিতি দেখা দিতে পারে। সমাধান হল অনুক্রমিক আইডি ব্যবহার করতে এবং এই সমস্যা প্রতিরোধ করার জন্য কম্পোজার HAL বাস্তবায়ন করা।

এই বিভাগটি বর্ণনা করে যে কীভাবে রেসের পরিস্থিতি ঘটতে পারে, তারপরে কম্পোজার এইচএএল কীভাবে প্রয়োগ করা যায় তার বিশদ বিবরণ দেয় যাতে এটি এই ধরনের পরিস্থিতি প্রতিরোধ করতে অনুক্রমিক আইডি ব্যবহার করে।

ইভেন্টের নিম্নলিখিত ক্রম বিবেচনা করুন, যখন নতুন, ক্রমিক আইডিগুলি নতুন ডিসপ্লে কনফিগারেশনে বরাদ্দ করা হয় না, একটি রেসের অবস্থার সৃষ্টি করে:

  1. সমর্থিত প্রদর্শন কনফিগার আইডি হল:

    • id=1 , 1080x1920 60 Hz
    • id=2 , 1080x1920 50 Hz
  2. ফ্রেমওয়ার্ক setActiveConfig(display, config=1) কল করে।

  3. একইসাথে, কম্পোজার এইচএএল ডিসপ্লে কনফিগারেশনের পরিবর্তন প্রক্রিয়া করে এবং এর অভ্যন্তরীণ অবস্থাকে ডিসপ্লে কনফিগারেশনের একটি নতুন সেটে আপডেট করে, যা নিম্নরূপ দেখানো হয়েছে:

    • id=1 , 2160x3840 60 Hz
    • id=2 , 2160x3840 50 Hz
    • id=3 , 1080x1920 60 Hz
    • id=4 , 1080x1920 50 Hz
  4. কম্পোজার HAL ফ্রেমওয়ার্কে একটি onHotplug ইভেন্ট পাঠায়, যাতে সমর্থিত মোডের সেট পরিবর্তিত হয়েছে তা জানানোর জন্য।

  5. কম্পোজার HAL setActiveConfig(display, config=1) (ধাপ 2 থেকে) পায়।

  6. HAL ব্যাখ্যা করে যে ফ্রেমওয়ার্ক 2160x3840 60 Hz এ কনফিগার পরিবর্তনের অনুরোধ করেছে, যদিও বাস্তবে 1080x1920 60 Hz কাঙ্ক্ষিত ছিল।

অনুক্রমিক আইডি অ্যাসাইনমেন্ট ব্যবহার করে প্রক্রিয়াটি এখানে কাঙ্ক্ষিত কনফিগার পরিবর্তনের ভুল ব্যাখ্যা দিয়ে শেষ হয়।

অনুক্রমিক আইডি ব্যবহার করতে কম্পোজার HAL কনফিগার করুন

এই ধরনের রেস অবস্থা এড়াতে, OEM কে অবশ্যই নিম্নোক্তভাবে কম্পোজার HAL বাস্তবায়ন করতে হবে:

  • যখন কম্পোজার এইচএএল সমর্থিত ডিসপ্লে কনফিগারেশন আপডেট করে, তখন এটি নতুন ডিসপ্লে কনফিগারেশনে নতুন, অনুক্রমিক আইডি বরাদ্দ করে।
  • যখন ফ্রেমওয়ার্ক একটি অবৈধ কনফিগার আইডি সহ setActiveConfig বা setActiveConfigWithConstraints কল করে, তখন কম্পোজার HAL কলটি উপেক্ষা করে।

এই পদক্ষেপগুলি নিম্নোক্ত আলোচনায় দেখানো হিসাবে জাতি পরিস্থিতি প্রতিরোধ করতে কাজ করে।

নতুন ডিসপ্লে কনফিগারেশনে যখন নতুন, অনুক্রমিক আইডি বরাদ্দ করা হয় তখন ইভেন্টের নিম্নলিখিত ক্রমটি বিবেচনা করুন:

  1. সমর্থিত প্রদর্শন কনফিগার আইডি হল:

    • id=1 , 1080x1920 60 Hz
    • id=2 , 1080x1920 50 Hz
  2. ফ্রেমওয়ার্ক setActiveConfig(display, config=1) কল করে।

  3. যখন ডিসপ্লে কনফিগারেশনের পরিবর্তন প্রক্রিয়া করা হয়, তখন পরবর্তী অব্যবহৃত পূর্ণসংখ্যা থেকে শুরু করে কনফিগার আইডিগুলির পরবর্তী সেট বরাদ্দ করা হয়, যা নিম্নরূপ দেখানো হয়েছে:

    • id=3 , 2160x3840 60 Hz

    • id=4 , 2160x3840 50 Hz

    • id=5 , 1080x1920 60 Hz

    • id=6 , 1080x1920 50 Hz

  4. কম্পোজার HAL ফ্রেমওয়ার্কে একটি onHotplug ইভেন্ট পাঠায়, যাতে সমর্থিত মোডের সেট পরিবর্তিত হয়েছে তা জানানোর জন্য।

  5. কম্পোজার HAL setActiveConfig(display, config=1) (ধাপ 2 থেকে) পায়।

  6. আইডিটি আর বৈধ না থাকায় কম্পোজার HAL কলটি উপেক্ষা করে৷

  7. ফ্রেমওয়ার্কটি ধাপ 4 থেকে onHotplug ইভেন্ট গ্রহণ করে এবং প্রক্রিয়া করে। এটি getDisplayConfigs এবং getDisplayAttribute ফাংশন ব্যবহার করে কম্পোজার HAL-এ কল করে। এই ফাংশনগুলির সাহায্যে ফ্রেমওয়ার্ক পছন্দসই রেজোলিউশনের জন্য নতুন আইডি (5) সনাক্ত করে এবং 1080x1920 এবং 60 Hz এর রিফ্রেশ হার।

  8. ফ্রেমওয়ার্ক 5 এর একটি আপডেট আইডি সহ আরেকটি setActiveConfig ইভেন্ট পাঠায়।

  9. কম্পোজার HAL ধাপ 5 থেকে setActiveConfig(display, config=5) পায়।

  10. HAL সঠিকভাবে ব্যাখ্যা করে যে ফ্রেমওয়ার্ক 1080x1920 60 Hz এ কনফিগার পরিবর্তনের অনুরোধ করেছে।

উপরের উদাহরণে যেমন দেখানো হয়েছে, অনুক্রমিক আইডি অ্যাসাইনমেন্ট ব্যবহার করে প্রক্রিয়া নিশ্চিত করে যে রেসের অবস্থা প্রতিরোধ করা হয়েছে এবং সঠিক প্রদর্শন কনফিগার পরিবর্তন আপডেট করা হয়েছে।