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

অ্যান্ড্রয়েড 13 থেকে শুরু করে, হার্ডওয়্যার কম্পোজার (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 বাস্তবায়ন করতে উৎসাহিত করা হয়। আরও তথ্যের জন্য বাস্তবায়ন বিভাগ দেখুন।

এআইডিএল এবং এইচআইডিএল এইচএএল-এর মধ্যে পার্থক্য

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

  • পার্সেলেবল কমান্ডের পক্ষে ফাস্ট মেসেজ কিউ (FMQ) অপসারণ।

    এআইডিএল এইচএএল এইচআইডিএল-এ এফএমকিউ-এর উপর সিরিয়ালাইজড কমান্ডের বিপরীতে দৃঢ়ভাবে টাইপ করা পার্সেলেবল প্রকারের উপর ভিত্তি করে কমান্ড ইন্টারফেসকে সংজ্ঞায়িত করে। এটি কমান্ডের জন্য একটি স্থিতিশীল ইন্টারফেস এবং কমান্ড পেলোডকে কীভাবে ব্যাখ্যা করা হয় তার আরও পাঠযোগ্য সংজ্ঞা প্রদান করে।

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

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

    যেখানে প্রতিটি কমান্ড একটি দৃঢ়ভাবে টাইপ করা পার্সেলেবল টাইপ যা DisplayCommand.aidl এ সংজ্ঞায়িত করা হয়েছে। কমান্ডের প্রতিক্রিয়া হল CommandResultPayload.aidl এ সংজ্ঞায়িত দৃঢ়ভাবে টাইপ করা পার্সেবল।

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

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

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

    এআইডিএল এইচএএল-এ, মিশ্র SDR/HDR স্তরের স্ট্যাকগুলি SDR স্তরগুলির নিরবচ্ছিন্ন আবরণকে সমর্থন করে যখন একটি HDR স্তর একই সাথে পর্দায় থাকে।

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

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

    dimmingStage ক্ষেত্র HWC-কে কনফিগার করতে দেয় যখন RenderEngine বিষয়বস্তু ম্লান করা উচিত। এটি বিক্রেতা-সংজ্ঞায়িত ColorModes মিটমাট করে, যা তাদের রঙের পাইপলাইনে বিক্রেতা-সংজ্ঞায়িত বৈপরীত্য বর্ধনের অনুমতি দিতে গামা স্পেসে আবছা করতে পছন্দ করতে পারে।

  • স্ক্রীন সজ্জার জন্য Composition.aidl এ একটি নতুন রচনা প্রকার DISPLAY_DECORATION সংযোজন৷

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

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

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

  • বুট ডিসপ্লে কনফিগারেশন নিয়ন্ত্রণ করতে নতুন 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 ক্যাডেন্স শেখে।

বাস্তবায়ন

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

AIDL HWC HAL-এর জন্য একটি রেফারেন্স বাস্তবায়ন Android এমুলেটরগুলিতে প্রয়োগ করা হয়েছে।

টেস্টিং

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