অ্যান্ড্রয়েড ১৩ থেকে শুরু করে, হার্ডওয়্যার কম্পোজার (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-এর উপর সিরিয়ালাইজড কমান্ডের পরিবর্তে জোরালোভাবে টাইপ করা পার্সেলযোগ্য ধরণের উপর ভিত্তি করে সংজ্ঞায়িত করে। এটি কমান্ডের জন্য একটি স্থিতিশীল ইন্টারফেস এবং সিস্টেম কীভাবে কমান্ড পেলোডকে ব্যাখ্যা করে তার আরও পাঠযোগ্য সংজ্ঞা প্রদান করে।
executeCommands5 পদ্ধতিটি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 চালান।