হার্ডওয়্যার কম্পোজার এইচএএল-এর জন্য এআইডিএল

অ্যান্ড্রয়েড ১৩ থেকে শুরু করে, হার্ডওয়্যার কম্পোজার (HWC) HAL কে AIDL তে সংজ্ঞায়িত করা হয়েছে। android.hardware.graphics.composer@2.1 থেকে android.hardware.graphics.composer@2.4 পর্যন্ত HIDL সংস্করণগুলি অবচিত।

এই পৃষ্ঠায় HWC-এর জন্য AIDL এবং HIDL HAL-এর মধ্যে পার্থক্য এবং AIDL HAL কীভাবে বাস্তবায়ন ও পরীক্ষা করতে হয় তা বর্ণনা করা হয়েছে।

যেহেতু AIDL সুবিধা প্রদান করে, তাই বিক্রেতারা HIDL সংস্করণের পরিবর্তে Android 13 থেকে AIDL কম্পোজার HAL বাস্তবায়ন করতে পারেন। আরও তথ্যের জন্য, বাস্তবায়ন বিভাগটি দেখুন।

AIDL এবং HIDL HAL-এর মধ্যে পার্থক্য

নতুন AIDL কম্পোজার HAL, যার নাম android.hardware.graphics.composer3 , IComposer.aidl এ সংজ্ঞায়িত করা হয়েছে। APIটি HIDL HAL android.hardware.graphics.composer@2.4 এর অনুরূপ, তবে এতে নিম্নলিখিত পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে:

  • পার্সেলযোগ্য কমান্ডের পক্ষে দ্রুত বার্তা সারি (FMQ) অপসারণ।

    AIDL HAL কমান্ড ইন্টারফেসকে HIDL-এ FMQ-এর উপর সিরিয়ালাইজড কমান্ডের পরিবর্তে জোরালোভাবে টাইপ করা পার্সেলযোগ্য ধরণের উপর ভিত্তি করে সংজ্ঞায়িত করে। এটি কমান্ডের জন্য একটি স্থিতিশীল ইন্টারফেস এবং সিস্টেম কীভাবে কমান্ড পেলোডকে ব্যাখ্যা করে তার আরও পাঠযোগ্য সংজ্ঞা প্রদান করে।

    executeCommands 5 পদ্ধতিটি IComposerClient.aidl এ সংজ্ঞায়িত করা হয়েছে:

    CommandResultPayload[] executeCommands(in DisplayCommand[] commands);
    

    প্রতিটি কমান্ড হল DisplayCommand.aidl এ সংজ্ঞায়িত একটি জোরালোভাবে টাইপ করা parceable টাইপ। কমান্ড প্রতিক্রিয়া হল CommandResultPayload.aidl এ সংজ্ঞায়িত জোরালোভাবে টাইপ করা parceables।

  • কোনও সক্রিয় ক্লায়েন্ট এই পদ্ধতি ব্যবহার না করায় IComposerClient.getClientTargetSupport অপসারণ করা হচ্ছে।

  • ASurfaceTransaction_setColor দ্বারা সংজ্ঞায়িত, Android-এ উপরের গ্রাফিক্স স্ট্যাকের সাথে সারিবদ্ধ করার জন্য বাইটের পরিবর্তে ফ্লোট হিসাবে রঙের উপস্থাপনা।

  • HDR কন্টেন্ট নিয়ন্ত্রণের জন্য নতুন ক্ষেত্র সংযোজন।

    AIDL HAL-তে, মিশ্র SDR/HDR স্তর স্ট্যাকগুলি যখন একই সময়ে একটি HDR স্তর স্ক্রিনে থাকে তখন SDR স্তরগুলির নির্বিঘ্নে ডিমিং সমর্থন করে।

    LayerCommand এর brightness ক্ষেত্রটি SurfaceFlinger-কে প্রতি স্তরের উজ্জ্বলতা নির্দিষ্ট করতে দেয়। এটি HWC-কে গামা স্থানের পরিবর্তে রৈখিক আলোর স্থানে স্তরের বিষয়বস্তু কমাতে সক্ষম করে।

    ClientTargetPropertyWithBrightness এর brightness ক্ষেত্রটি HWC-কে ক্লায়েন্ট কম্পোজিশনের জন্য উজ্জ্বলতার স্থান নির্দিষ্ট করতে দেয় এবং RenderEngine ক্লায়েন্ট কম্পোজিশনে SDR স্তরগুলিকে ম্লান করতে হবে কিনা তা নির্দেশ দেয়।

    RenderEngine যখন কন্টেন্ট কম করে তখন dimmingStage ফিল্ড HWC কে কনফিগার করতে দেয়। এটি বিক্রেতা-সংজ্ঞায়িত ColorModes মিটমাট করে যারা তাদের রঙের পাইপলাইনে বিক্রেতা-সংজ্ঞায়িত কনট্রাস্ট বর্ধন সক্ষম করার জন্য গামা স্পেসে কম করতে পছন্দ করতে পারে।

  • স্ক্রিন সাজসজ্জার জন্য Composition.aidl এ একটি কম্পোজিশন টাইপ, DISPLAY_DECORATION , যোগ করা হয়েছে।

    কিছু ডিভাইসে আলফা মাস্কের অঙ্কন অপ্টিমাইজ করার জন্য ডেডিকেটেড হার্ডওয়্যার থাকে যা ডিসপ্লেতে গোলাকার কোণ এবং কাটআউটগুলিকে মসৃণ করে। এই ধরণের হার্ডওয়্যারযুক্ত ডিভাইসগুলিকে IComposerClient.getDisplayDecorationSupport বাস্তবায়ন করতে হবে এবং DisplayDecorationSupport.aidl এ সংজ্ঞায়িত একটি DisplayDecorationSupport কাঠামো প্রদান করতে হবে। এই কাঠামোটি ডিভাইসের জন্য প্রয়োজনীয় PixelFormat এবং AlphaInterpretation এনামগুলি বর্ণনা করে। এই বাস্তবায়নের পরে, সিস্টেম UI আলফা মাস্ক স্তরটিকে DISPLAY_DECORATION হিসাবে চিহ্নিত করে, একটি কম্পোজিশন টাইপ যা ডেডিকেটেড হার্ডওয়্যারের সুবিধা নেয়।

  • DisplayCommand.aidl এ একটি expectedPresentTime ফিল্ড যোগ করা।

    expectedPresentTime ফিল্ডটি SurfaceFlinger কে বর্তমান কন্টেন্ট কখন স্ক্রিনে প্রদর্শিত হবে তার জন্য প্রত্যাশিত বর্তমান সময় সেট করতে দেয়। এই বৈশিষ্ট্যের সাহায্যে, SurfaceFlinger বাস্তবায়নের জন্য আগে থেকেই একটি present কমান্ড পাঠায়, যা এটিকে কম্পোজিশনের আরও বেশি কাজ পাইপলাইন করতে দেয়।

  • বুট ডিসপ্লে কনফিগারেশন নিয়ন্ত্রণ করতে নতুন API সংযোজন।

    BOOT_DISPLAY_CONFIG ব্যবহার করে, বিক্রেতারা বুট ডিসপ্লে কনফিগারেশন সমর্থিত কিনা তা নির্দিষ্ট করতে পারেন। setBootDisplayConfig , clearBootDisplayConfig , এবং getPreferredBootDisplayConfig পদ্ধতিগুলি নিম্নরূপ BOOT_DISPLAY_CONFIG ব্যবহার করে:

    • setBootDisplayConfig ব্যবহার করে, ফ্রেমওয়ার্কটি বিক্রেতাদের বুট টাইম ডিসপ্লে কনফিগারেশন সম্পর্কে অবহিত করে। বিক্রেতাদের বুট ডিসপ্লে কনফিগারেশনে ক্যাশে করতে হবে এবং পরবর্তী রিবুটে এই কনফিগারেশনে বুট করতে হবে। যদি ডিভাইসটি এই কনফিগারেশনে বুট করতে অক্ষম হয়, তাহলে বিক্রেতাকে এমন একটি কনফিগারেশন খুঁজে বের করতে হবে যা এই কনফিগারেশনের রেজোলিউশন এবং রিফ্রেশ রেটের সাথে মেলে। যদি এই ধরনের কোনও কনফিগারেশন না থাকে, তাহলে বিক্রেতাকে তাদের পছন্দের ডিসপ্লে কনফিগারেশন ব্যবহার করতে হবে।

    • clearBootDisplayConfig ব্যবহার করে, ফ্রেমওয়ার্কটি বিক্রেতাদের বুট ডিসপ্লে কনফিগারেশন সাফ করতে এবং পরবর্তী রিবুটের সময় তাদের পছন্দের ডিসপ্লে কনফিগারেশন বুট করতে বলে।

    • getPreferredBootDisplayConfig ব্যবহার করে, ফ্রেমওয়ার্কটি বিক্রেতার পছন্দের বুট মোড জিজ্ঞাসা করে।

    যখন বুট ডিসপ্লে কনফিগারেশন সমর্থিত না হয়, তখন এই পদ্ধতিগুলি UNSUPPORTED এর মান প্রদান করে।

  • ডিসপ্লে নিষ্ক্রিয় টাইমার নিয়ন্ত্রণ করতে নতুন API যোগ করা:

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

    • IComposerCallback.onVsyncIdle কলব্যাক ব্যবহার করে প্ল্যাটফর্মকে নির্দেশ করা হয় যে ডিসপ্লেটি নিষ্ক্রিয় এবং vsync ক্যাডেন্স পরিবর্তিত হয়েছে। প্ল্যাটফর্মটি তার vsync মডেলটি রিসেট করে এই কলব্যাকের প্রতিক্রিয়া জানায়। এটি পরবর্তী ফ্রেমে একটি vsync রিসিঙ্ককে জোর করে, এবং নতুন vsync ক্যাডেন্স শিখে।

বাস্তবায়ন

অ্যান্ড্রয়েড ১৩-এর জন্য বিক্রেতাদের AIDL HAL বাস্তবায়ন করার প্রয়োজন নেই। তবে, AIDL কম্পোজার HAL-এর কার্যকারিতা এবং API ব্যবহার করার জন্য বিক্রেতাদের HIDL সংস্করণের পরিবর্তে AIDL কম্পোজার HAL বাস্তবায়ন করতে উৎসাহিত করা হচ্ছে।

অ্যান্ড্রয়েড এমুলেটরগুলিতে AIDL HWC HAL-এর জন্য একটি রেফারেন্স বাস্তবায়ন অন্তর্ভুক্ত রয়েছে।

পরীক্ষামূলক

আপনার বাস্তবায়ন পরীক্ষা করতে, VtsHalGraphicsComposer3_TargetTest চালান।