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

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

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

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

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

android.hardware.graphics.composer3 নামের নতুন AIDL কম্পোজার HAL-টি 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 এ সংজ্ঞায়িত একটি স্ট্রংলি টাইপড পার্সেলযোগ্য টাইপ। কমান্ডের প্রতিক্রিয়াগুলো হলো CommandResultPayload.aidl এ সংজ্ঞায়িত স্ট্রংলি টাইপড পার্সেলযোগ্য টাইপ।

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

  • অ্যান্ড্রয়েডের আপার গ্রাফিক্স স্ট্যাকের সাথে সামঞ্জস্য রাখতে, ASurfaceTransaction_setColor দ্বারা সংজ্ঞায়িত রঙগুলোকে বাইটের পরিবর্তে ফ্লোট হিসেবে উপস্থাপন করা হয়।

  • HDR কন্টেন্ট নিয়ন্ত্রণের জন্য নতুন ফিল্ড যুক্ত করা হয়েছে।

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

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

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

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

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

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

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

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

  • বুট ডিসপ্লে কনফিগারেশন নিয়ন্ত্রণের জন্য নতুন এপিআই যুক্ত করা হয়েছে।

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

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

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

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

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

  • ডিসপ্লে আইডল টাইমার নিয়ন্ত্রণের জন্য নতুন এপিআই যুক্ত করা হয়েছে:

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

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

বাস্তবায়ন

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

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

পরীক্ষা

আপনার ইমপ্লিমেন্টেশন পরীক্ষা করতে, VtsHalGraphicsComposer3_TargetTest চালান।