কনফিগারযোগ্য অডিও নীতি ইঞ্জিন

অ্যান্ড্রয়েড 14-এ, অ্যান্ড্রয়েড অটোমোটিভ অপারেটিং সিস্টেম (AAOS) প্রাথমিক অডিও জোনের মধ্যে কনফিগারযোগ্য অডিও নীতি (CAP) ইঞ্জিন কার অডিও পরিচালনার সুবিধা দেয়। বিশেষভাবে, CAP ইঞ্জিন AAOS কে শুধুমাত্র অডিও রাউটিং, শুধুমাত্র অডিও ভলিউম, অথবা একই সাথে রাউটিং এবং ভলিউম উভয় নিয়ন্ত্রণ করতে দেয়। আচরণ নিয়ন্ত্রণ করতে নিম্নলিখিত পতাকা ব্যবহার করা যেতে পারে:

  • CAP ভলিউম ব্যবস্থাপনা সক্ষম করতে useCoreAudioVolume পতাকা ব্যবহার করুন। যখন এই মানটি true হয়, গাড়ি অডিও পরিষেবা ভলিউম গ্রুপগুলি পরিচালনা করতে অডিও ম্যানেজার API ব্যবহার করে৷

  • CAP অডিও রাউটিং ব্যবস্থাপনা সক্ষম করতে useCoreAudioRouting পতাকা ব্যবহার করুন। এই মানটি true হলে, গাড়ির অডিও পরিষেবা অডিও রাউটিং পরিচালনা করতে কনফিগারযোগ্য অডিও নীতি রাউটিং ব্যবহার করে৷

অডিও পলিসি ইঞ্জিন ডিফল্ট অডিও পলিসি ইঞ্জিন আকারে ডিফল্টরূপে অ্যান্ড্রয়েডে সমর্থিত।

পটভূমি

CAP ইঞ্জিনটি ইন্টেলের প্যারামিটার ফ্রেমওয়ার্কের উপর ভিত্তি করে তৈরি, যা প্যারামিটার পরিচালনার জন্য একটি প্লাগইন-ভিত্তিক এবং নিয়ম-ভিত্তিক কাঠামো। বিশেষ করে অ্যান্ড্রয়েড অডিও পরিচালনার জন্য, CAP ইঞ্জিন নিম্নলিখিতগুলি নির্দিষ্ট করার জন্য XML ফাইলের নিয়মগুলি সংজ্ঞায়িত করার ক্ষমতা চালু করেছে:

  • অডিও পণ্য কৌশল
  • অডিও আউটপুট ডিভাইস নির্বাচনের নিয়ম
  • অডিও ইনপুট ডিভাইস নির্বাচনের নিয়ম
  • ভলিউম পরিচালনার নিয়ম এবং ভলিউম টেবিল সহ নিঃশব্দ

Android 16 এর আগে CAP আরম্ভ

নিম্নলিখিত চিত্রটি Android 6 এর মতো কনফিগারযোগ্য অডিও নীতি ইঞ্জিন কনফিগারেশন পরিচালনার একটি উচ্চ-স্তরের ওভারভিউ দেখায়:

Android 16-এর আগে CAP ইঞ্জিন আর্কিটেকচার

চিত্র 1. Android 6 হিসাবে CAP ইঞ্জিন কনফিগারেশন পরিচালনা।

চিত্রে দেখানো হিসাবে, CAP ইঞ্জিন কনফিগারেশনটি vendor পার্টিশনে audio_policy_engine_configuration.xml ফাইল থেকে তথ্য পার্স করে অডিও নীতি পরিষেবা দ্বারা প্রাপ্ত হয়। CAP ইঞ্জিন কনফিগারেশন ফাইল প্রয়োজনীয় তথ্য পেতে audio_policy_engine_configuration.xsd এ সংজ্ঞায়িত স্কিমা ব্যবহার করে। audio_policy_engine_configuration.xml স্বয়ংচালিত জন্য একটি উদাহরণ. অন্যান্য ফর্ম ফ্যাক্টরগুলির জন্য অনুরূপ উদাহরণ ফ্রেমওয়ার্ক/av/services/audiopolicy/engineconfigurable/config/example/ ফোল্ডারে রয়েছে।

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

Android 16-এর আগে CAP ইঞ্জিন লোড পাথ

চিত্র 2. অডিও নীতি পরিষেবার মধ্যে লোড করা CAP তথ্য।

অ্যান্ড্রয়েড 15 এবং তার নিচের সংস্করণে CAP কাঠামো ফাইল

কাঠামো এবং সেটিংস পেতে, অডিও নীতি পরিষেবা ParameterFrameworkConfigurationPolicy.xml পলিসি.xml ফাইলটি পড়ে। এটি কাঠামোর বিবরণ ফাইল অবস্থানের মাধ্যমে কাঠামোর তথ্য উল্লেখ করে:

<StructureDescriptionFileLocation Path="Structure/Policy/PolicyClass.xml"/>

এটি ফাইলের গঠন তথ্য নির্দেশ করে:

/vendor/etc/parameter-framework/Structure/Policy/PolicyClass.xml

অ্যান্ড্রয়েডে একটি কঙ্কালের কাঠামো সরবরাহ করা হয়েছে। কাঠামোর তথ্যের জন্য পণ্যের কৌশল কাঠামোর তথ্য প্রয়োজন, তাই Android buildStrategiesStructureFile.py জেনারেশন টুল প্রদান করে, যা উপলব্ধ পণ্য কৌশল XML ফাইল থেকে তথ্য তৈরি করতে পারে। এটি নিম্নরূপ genrule ডিফল্ট buildstrategiesstructurerule মাধ্যমে উল্লেখ করা যেতে পারে:

genrule {
    name: "buildstrategiesstructure_gen",
    defaults: ["buildstrategiesstructurerule"],
    srcs: [
        ":audio_policy_engine_configuration_files",
    ],
}

যেখানে audio_policy_engine_configuration_files হল অডিও নীতি ইঞ্জিন কনফিগারেশন ফাইল। অটোমোটিভের জন্য এই উদাহরণটি স্বয়ংচালিত ফোল্ডারে অডিও নীতি কনফিগারেশন ফাইলগুলি উল্লেখ করে। অন্যান্য উদাহরণগুলি দেখায় কিভাবে একটি বিল্ড কনফিগার করতে হয় যাতে ডিভাইসের ভেন্ডর পার্টিশনে ফাইলগুলি পুশ করা যায়।

অ্যান্ড্রয়েড 15 এবং তার নিচের সংস্করণে CAP সেটিংস ফাইল

কাঠামোর অনুরূপ, সেটিং তথ্য, যা প্যারামিটারের নিয়ম এবং মান উপস্থাপন করে, ParameterFrameworkConfigurationPolicy.xml পলিসি.xml ফাইলে উল্লেখ করা হয়েছে:

<SettingsConfiguration>
  <ConfigurableDomainsFileLocation Path="Settings/Policy/PolicyConfigurableDomains.xml"/>
</SettingsConfiguration>

অডিও পলিসি ইঞ্জিন কনফিগারেশন এবং প্যারামিটার ফ্রেমওয়ার্ক ফাইল ব্যবহার করে এই তথ্য তৈরি করতে Android বিল্ড টুলও প্রদান করে। আরও তথ্যের জন্য কনফিগারেশন দেখুন।

AIDL অডিও HAL CAP আরম্ভ

Android 16 থেকে শুরু করে, AIDL অডিও HAL API সংজ্ঞাটি অডিও পলিসি ইঞ্জিন কনফিগারেশন, AudioHalCapConfiguration.aidl সহ প্রসারিত হয়েছে। নিম্নলিখিত চিত্রটি Android 16 হিসাবে CAP ইঞ্জিন কনফিগারেশন পরিচালনার একটি উচ্চ-স্তরের ওভারভিউ দেখায়:

CAP ইঞ্জিন aidl আর্কিটেকচার

চিত্র 3. Android 16 অনুযায়ী CAP ইঞ্জিন কনফিগারেশন ব্যবস্থাপনা।

অডিও নীতি পরিষেবা ডিভাইসের বিক্রেতা পার্টিশনে XML ফাইল থেকে তথ্য পার্স করার পরিবর্তে সরাসরি AIDL অডিও HAL API ব্যবহার করে CAP ইঞ্জিনের তথ্য পায়।

এই কনফিগারেশনে, প্যারামিটার ফ্রেমওয়ার্কের কাঠামো এখনও অডিও সার্ভারের পাশে CAP ইঞ্জিন দ্বারা লোড করা হয়।

CAP ইঞ্জিন aidl লোড পাথ

চিত্র 4. CAP ইঞ্জিন গঠন।

সমস্ত ক্ষেত্রে, কনফিগারেশনে অবশ্যই পণ্যের কৌশল, ভলিউম গ্রুপ এবং মানদণ্ডের সাথে সম্পর্কিত তথ্য সম্পূর্ণরূপে উল্লেখ করতে হবে।

নিম্নলিখিত চিত্রটি AIDL অডিও HAL APIগুলির একটি উচ্চ-স্তরের ওভারভিউ দেখায় যা অডিও নীতি পরিষেবা দ্বারা CAP ইঞ্জিন কনফিগারেশন প্রাপ্ত করার জন্য ব্যবহৃত হয়:

CAP ইঞ্জিন AIDL APIS চিত্র 5. AIDL অডিও HAL APIs।

এই সেটআপে, অডিও নীতি পরিষেবা AIDL অডিও HAL থেকে নিম্নলিখিত তথ্য পায়:

  • কনফিগারেশন
  • কৌশল
  • ভলিউম
  • মানদণ্ড
  • সেটিংস

ডিফল্ট AIDL অডিও HAL লোডার

HIDL থেকে AIDL-এ রূপান্তর মসৃণ করতে, ডিফল্ট অডিও AIDL অডিও HAL একটি XML CAP ইঞ্জিন লোডার প্রদান করে। বিক্রেতারা ডিফল্ট অডিও HAL সহ তাদের অডিও HAL প্রসারিত করে বা libaudioserviceexampleimpl লাইব্রেরি উল্লেখ করে সরাসরি এই লোডারটি ব্যবহার করতে পারে।

ডিফল্ট AIDL অডিও HAL লোডার নিম্নলিখিত তথ্য পেতে audio_policy_engine_configuration.xml ব্যবহার করে:

  • কনফিগারেশন
  • কৌশল
  • ভলিউম
  • মানদণ্ড

গঠন তথ্য PolicyConfigurableDomains.xml ফাইল থেকে প্রাপ্ত করা হয়. আগের মেকানিজম থেকে মূল পার্থক্য হল যে অডিও পলিসি সার্ভিসে প্যারামিটার ফ্রেমওয়ার্কের পরিবর্তে এআইডিএল অডিও এইচএএল দ্বারা কাঠামোর তথ্যও পাওয়া যায়।

অডিও নীতি ইঞ্জিন কনফিগারেশন থেকে তথ্য ব্যবহার করে কনফিগারযোগ্য ডোমেন তৈরি করতে বিক্রেতারা domaingeneratorpolicyrule টুল ব্যবহার করতে পারে। স্বয়ংচালিত কাটলফিশ ভার্চুয়াল ডিভাইসের উদাহরণ রেফারেন্স হিসাবে ব্যবহার করা যেতে পারে।

এআইডিএল কনফিগারেশনে গঠন

অ্যান্ড্রয়েড 16 এবং উচ্চতর সংস্করণে, অডিও নীতি পরিষেবা ParameterFrameworkConfigurationCap.xml xml ফাইলটি পড়ার এবং পার্স করার মাধ্যমে কাঠামোর তথ্য পায়। বিশেষ করে এটি গঠন বিবরণ ফাইল থেকে তথ্য পায়:

<StructureDescriptionFileLocation Path="Structure/Policy/CapClass.xml"/>

ফ্রেমওয়ার্ক প্রয়োজনীয় তথ্য সহ প্রয়োজনীয় ফাইলগুলিকে /etc/parameter-framework/ ফোল্ডারে ফেলে দেয়।

কাঠামোটি সেই প্যারামিটারগুলিকে প্রতিনিধিত্ব করে যা নিয়ন্ত্রণ করা উচিত, তাই সেগুলি কনফিগারেশন বা ডোমেনে উল্লেখ করা উচিত। এই জন্য, এআইডিএল ইঞ্জিন কনফিগার পরামিতিগুলির জন্য একটি পূর্বনির্ধারিত নাম ব্যবহার করা উচিত। পণ্যের কৌশলগুলির জন্য, কাঠামোগুলি CapProductStrategies.xml এ কনফিগার করা হয়েছে।

ডিফল্ট পণ্য কৌশল

ডিফল্ট ইঞ্জিনে প্রদত্ত ডিফল্ট দিয়ে শুরু করে, পণ্য কৌশলগুলি STRATEGY_ উপসর্গ দিয়ে শুরু হয়:

  • STRATEGY_PHONE
  • STRATEGY_SONIFICATION
  • STRATEGY_ENFORCED_AUDIBLE
  • STRATEGY_ACCESSIBILITY
  • STRATEGY_SONIFICATION_RESPECTFUL
  • STRATEGY_MEDIA
  • STRATEGY_DTMF
  • STRATEGY_CALL_ASSISTANT
  • STRATEGY_TRANSMITTED_THROUGH_SPEAKER

এই বিন্যাসটি ডিফল্ট কৌশলগুলি ব্যবহার করা ডিভাইসগুলির জন্য HIDL থেকে AIDL-এ রূপান্তর উপশম করার জন্য প্রদান করা হয়েছিল৷ এই বিন্যাস পরিবর্তনের বিদ্যমান ফাইলগুলির জন্য কিছু প্রভাব রয়েছে (উদাহরণস্বরূপ, PfW, XML) যা ইঞ্জিন কনফিগার করতে ব্যবহৃত হয়। বিশেষ করে, নতুন নাম ব্যবহার করার জন্য সমস্ত পণ্য কৌশল রেফারেন্স পরিবর্তন করা উচিত, উদাহরণস্বরূপ :

নন-এআইডিএল কনফিগারেশন প্যারামিটারের নাম
/Policy/policy/product_strategies/ media /device_address
/Policy/policy/product_strategies/ media /selected_output_devices/mask
AIDL কনফিগারেশন প্যারামিটার নাম
/Policy/policy/product_strategies/ STRATEGY_MEDIA /device_address
/Policy/policy/product_strategies/ STRATEGY_MEDIA /selected_output_devices/mask
OEM-সংজ্ঞায়িত পণ্য কৌশল

কনফিগারযোগ্য ইঞ্জিন OEM-এর জন্য পণ্য কৌশলের সংজ্ঞা পরিবর্তন করার ক্ষমতা প্রদান করে। এটিকে সমর্থন করার জন্য, পণ্য কৌশল ফাইল CapProductStrategies.xml এছাড়াও vx_1000 থেকে vx_1039 পর্যন্ত 40টি বিক্রেতার প্রসারিত পণ্য কৌশল প্রদান করে। সমস্ত বিক্রেতা এক্সটেনশন অবশ্যই vx_ উপসর্গ দিয়ে শুরু করতে হবে এবং AIDL অডিও HAL পণ্য কৌশল সংজ্ঞাতে পণ্য কৌশল আইডি প্রতিনিধিত্ব করে এমন একটি সংখ্যার সাথে অনুসরণ করতে হবে। বাকি সংজ্ঞাগুলি (উদাহরণস্বরূপ, অডিও অ্যাট্রিবিউট গ্রুপ, নাম) অডিও HAL ইঞ্জিন কনফিগারেশনে AudioHALProductStrategy অবজেক্ট থেকে প্রাপ্ত হয়।

একইভাবে ডিফল্ট পণ্যের কৌশলগুলির মতো, বিক্রেতার সংজ্ঞায়িত OEM-এর রেফারেন্সগুলিও নন-এআইডিএল কনফিগারেশন এবং এআইডিএল কনফিগারেশনের মধ্যে মানিয়ে নিতে হবে, উদাহরণস্বরূপ:

নন-এআইডিএল কনফিগারেশন প্যারামিটারের নাম
/Policy/policy/product_strategies/ oem_extension_strategy /device_address
/Policy/policy/product_strategies/ oem_extension_strategy /selected_output_devices/mask
AIDL কনফিগারেশন প্যারামিটার নাম
/Policy/policy/product_strategies/ vx_1037 /device_address
/Policy/policy/product_strategies/ vx_1037 /selected_output_devices/mask

পণ্য কৌশল

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

  • ব্যবহারের ধরন বর্ণনা করে যে কেন একটি শব্দ বাজানো হচ্ছে (অর্থাৎ মিডিয়া, বিজ্ঞপ্তি, কল)।
  • বিষয়বস্তুর প্রকারের প্রকারগুলি বর্ণনা করে যে কী বাজানো হচ্ছে (যেমন, সঙ্গীত, বক্তৃতা, ভিডিও, সোনিফিকেশন)।
  • ফ্ল্যাগের ধরনগুলি স্ট্রীমের ক্ষেত্রে বিভিন্ন আচরণ বা অনুরোধকে সংজ্ঞায়িত করে।
  • ট্যাগ প্রকার ভেন্ডর স্ট্রিং মানের যেকোন ইচ্ছামত তালিকা সমর্থন করে।
    • প্রতিটি স্ট্রিং অবশ্যই VX_ দিয়ে শুরু করতে হবে এবং একটি আলফানিউমেরিক স্ট্রিং অনুসরণ করবে (উদাহরণস্বরূপ, VX_OEM , VX_NAVIGATION )
<ProductStrategy name="music" id="1008">
    <AttributesGroup streamType="AUDIO_STREAM_MUSIC" volumeGroup="media">
        <Attributes> <Usage value="AUDIO_USAGE_MEDIA"/> </Attributes>
        <Attributes> <Usage value="AUDIO_USAGE_GAME"/> </Attributes>
        <!-- Default product strategy has empty attributes -->
        <Attributes></Attributes>
    </AttributesGroup>
</ProductStrategy>

এই উদ্ধৃতিটি গাড়ির এমুলেটরগুলিতে ব্যবহৃত পণ্য কৌশলের একটি উদাহরণ দেখায়। এটিতে যথাক্রমে অডিও ব্যবহার মিডিয়া এবং গেম সহ দুটি অডিও বৈশিষ্ট্য রয়েছে। এই পণ্যের কৌশলটি গাড়ির অডিও পরিষেবাতে ব্যবহৃত MUSIC অডিও প্রসঙ্গের সাথে মেলে, কিন্তু এই ধরনের মিলের কোনো প্রয়োজন নেই। অ্যান্ড্রয়েডের সাথে CAP ব্যবহার করে OEM-এর জন্য একটি প্রধান ইউটিলিটি হল আরও নমনীয় অডিও গ্রুপিং সংজ্ঞার জন্য অনুমতি দেওয়া।

ভলিউম গ্রুপ

অতিরিক্তভাবে, প্রতিটি অডিও অ্যাট্রিবিউট গ্রুপের একটি সংশ্লিষ্ট ভলিউম গ্রুপ থাকতে হবে। এই ভলিউম গ্রুপটি অডিও অ্যাট্রিবিউট গ্রুপের সাথে সম্পর্কিত যেকোনও স্ট্রীম মেলে অডিও অ্যাট্রিবিউটের সাথে যুক্ত। পণ্য কৌশল বিভাগে উদাহরণ সঙ্গীত পণ্য কৌশল ভলিউম গ্রুপ media আছে, এবং মিডিয়া ভলিউম গ্রুপের সংজ্ঞা নিম্নরূপ:

<volumeGroup>
    <name>media</name>
    <indexMin>0</indexMin>
    <indexMax>40</indexMax>
    <volume deviceCategory="DEVICE_CATEGORY_SPEAKER">
        <point>0,-2400</point>
        <point>33,-1600</point>
        <point>66,-800</point>
        <point>100,0</point>
    </volume>
</volumeGroup>

এই সংজ্ঞায় ভলিউম গ্রুপে রয়েছে:

  • গ্রুপের নাম
  • গ্রুপ ন্যূনতম সূচক
  • গ্রুপ সর্বোচ্চ সূচক
  • ভলিউম গ্রুপ বক্ররেখা

ভলিউম গ্রুপ বক্ররেখায় ভলিউম গ্রুপ সূচক এবং মিলিবেলে ভলিউম বৃদ্ধির মধ্যে পয়েন্টওয়াইজ ম্যাপিং থাকে। প্রদত্ত পয়েন্টগুলি ভলিউম পরিচালনা করার সময় সর্বোত্তম ম্যাচিং লাভকে রৈখিকভাবে ইন্টারপোলেট করতে ব্যবহৃত হয়। প্রতিটি ভলিউম গ্রুপ বক্ররেখা একটি ডিভাইস টাইপ বিভাগের সাথে যুক্ত (উদাহরণস্বরূপ, হেডসেট, স্পিকার, বাহ্যিক মিডিয়া)।

ভলিউম গ্রুপ অডিও অ্যাট্রিবিউট গ্রুপের অংশ স্ট্রিমগুলির ভলিউম পরিচালনা করে। উদাহরণস্বরূপ, যখন সঙ্গীত বা গেম সমন্বিত অডিও বৈশিষ্ট্য সহ একটি স্ট্রীম শুরু হয়, তখন মিডিয়া ভলিউম গ্রুপের জন্য শেষ সেট ভলিউম সূচক ব্যবহার করা হয়। এই ক্ষেত্রে, নির্বাচিত ডিভাইসের উপর ভিত্তি করে সংশ্লিষ্ট ডিভাইস বিভাগ বক্ররেখা নির্বাচন করা হয় এবং স্ট্রীম শুরু হলে সংশ্লিষ্ট লাভ সেট করা হয়।

কনফিগারেশন

CAP ইঞ্জিনে, কনফিগারেশনগুলি শর্ত বা নিয়মগুলিকে সংজ্ঞায়িত করার জন্য ব্যবহার করা হয় যা অডিওটি কীভাবে আচরণ করা উচিত তা নির্ধারণ করে। এই কনফিগারেশনগুলি অডিও সিস্টেমের বর্তমান অবস্থার উপর নির্ভর করে প্রয়োগ করার জন্য উপযুক্ত নিয়ম নির্বাচন করার জন্য রান টাইমে মূল্যায়ন করা হয়।

চিত্র 5-এ দেখানো হিসাবে, API-এ একাধিক ডোমেন রয়েছে, প্রতিটি ডোমেনের লক্ষ্য হল লজিককে ছোট রাউটিং সমস্যার সমাধান করার জন্য বিভক্ত করা (উদাহরণস্বরূপ, ডিভাইস 1, ডিভাইস 2)।

প্রতিটি ডোমেনের কনফিগারেশন রয়েছে এবং প্রতিটি কনফিগারেশনের নিয়মের একটি সেট রয়েছে। AudioPolicyManager দ্বারা প্রদত্ত মানদণ্ডের ভিত্তিতে নিয়মগুলি প্রতিষ্ঠিত হয়:

  • অডিও মোড
  • উপলব্ধ ইনপুট এবং আউটপুট ডিভাইস
  • উপলব্ধ ইনপুট এবং আউটপুট ডিভাইস ঠিকানা
  • জন্য ব্যবহার করুন
    • মিডিয়া
    • যোগাযোগ
    • রেকর্ডিং
    • ডক
    • সিস্টেম
    • এইচডিএমআই সিস্টেম অডিও
    • এনকোড করা চারপাশে
    • কম্পন রিং

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

নিম্নলিখিত কোডটি একটি প্যারামিটার ফ্রেমওয়ার্ক ফাইলের একটি উদ্ধৃতি উদাহরণ দেখায়, যা কনফিগারযোগ্য ডোমেনগুলি কনফিগার করার জন্য প্রয়োজনীয় XML ফাইল তৈরি করতে ব্যবহার করা যেতে পারে:


supDomain: DeviceForProductStrategies
  supDomain: Music
    domain: SelectedDevice
      conf: BluetoothA2dp
        ForceUseForMedia IsNot NO_BT_A2DP
        ForceUseForCommunication IsNot BT_SCO
        AvailableOutputDevices Includes BLUETOOTH_A2DP
        component:/Policy/policy/product_strategies/vx_1000/selected_output_devices/mask
          bluetooth_a2dp = 1
          bus = 0
      conf: Bus
        AvailableOutputDevices Includes Bus
        AvailableOutputDevicesAddresses Includes BUS00_MEDIA
        component: /Policy/policy/product_strategies/vx_1000/selected_output_devices/mask
          bluetooth_a2dp = 0
          bus = 1
      conf: Default
        component: /Policy/policy/product_strategies/vx_1000/selected_output_devices/mask
          bluetooth_a2dp = 0
          bus = 0

ডোমেন DeviceForProductStrategies সংজ্ঞায়িত করে কিভাবে পণ্য কৌশল ডিভাইস নির্বাচন পরিচালনা করার সময় বিভিন্ন নিয়ম প্রয়োগ করা উচিত। নীল অংশগুলি সেই নিয়মগুলি বর্ণনা করে যা বিবেচনা করা উচিত এবং সবুজ অংশটি প্রয়োগ করা কনফিগারেশন। এই বিশেষ উদাহরণে নিম্নলিখিত কনফিগারেশন রয়েছে:

  • সঙ্গীত পণ্য কৌশলের জন্য ব্লুটুথ A2DP ডিভাইস নির্বাচন করুন (আইডি 1000, vx_1000 )
    • মিডিয়ার জন্য ব্যবহার করা হলে, A2DP বাদ দেয় না
    • যোগাযোগের জন্য ব্যবহার করা হলে, BT SCO নয়
    • উপলব্ধ ডিভাইস থাকলে, BT A2DP অন্তর্ভুক্ত করুন
  • বাস ডিভাইস নির্বাচন করুন
    • যদি বাস ডিভাইস পাওয়া যায়
    • ঠিকানা যদি BUS00_MEDIA হয়
  • অন্যথায় ডিফল্ট আউটপুট ডিভাইস নির্বাচন করুন

সংশ্লিষ্ট কনফিগারযোগ্য নীতি ইঞ্জিন XML ফাইল তৈরি করতে, নিম্নলিখিত ধাপগুলি ব্যবহার করে একটি বিল্ড নিয়ম সংজ্ঞায়িত করে বিল্ড সিস্টেমের মাধ্যমে প্যারামিটার-ফ্রেমওয়ার্ক (PFW) ফাইলগুলি চালান:

  1. Android.bp ফাইলে, ফাইলের জন্য একটি ফাইলগ্রুপ তৈরি করুন:

    filegroup {
        name: ":device_for_product_strategies.pfw",
        srcs: ["engine/parameter-framework/Settings/device_for_product_strategyies.pfw"],
    }
    
  2. অন্যান্য PfW ফাইলগুলিতে ফাইল যুক্ত করুন (যদি থাকে)।

    filegroup {
        name: "edd_files",
        srcs: [
            ":device_for_input_source.pfw",
            ":volumes.pfw",
            ":device_for_product_strategyies.pfw",
        ],
    }
    
  3. সংশ্লিষ্ট ডোমেন প্রজন্মের নিয়ম তৈরি করুন:

    genrule {
        name: "domaingeneratorpolicyrule_gen",
        defaults: ["domaingeneratorpolicyrule"],
        srcs: [
            ":audio_policy_engine_criterion_types",
            ":audio_policy_pfw_structure_files",
            ":audio_policy_pfw_toplevel",
            ":edd_files",
        ],
    }
    

    যেখানে domaingeneratorpolicyrule হল PolicyConfigurableDomains.xml ফাইল তৈরি করার জন্য ফ্রেমওয়ার্ক দ্বারা প্রদত্ত একটি প্রজন্মের নিয়ম । ডোমেইন জেনারেশনের নিয়মে অন্তর্ভুক্ত অন্যান্য সোর্স ফাইল ( scrs ) নিম্নরূপ:

    উৎস বর্ণনা
    audio_policy_pfw_toplevel শীর্ষ-স্তরের প্যারামিটার-ফ্রেমওয়ার্ক কনফিগারেশন ফাইল।
    audio_policy_pfw_structure_files ডোমেন জেনারেশন স্ট্রাকচার ফাইল, যা কনফিগারেশন ফাইল তৈরি করতে ব্যবহৃত হয়।
    audio_policy_engine_criterion_types মানদণ্ডের ধরন XML ফাইল, প্রজন্মের সময় ব্যবহৃত মানদণ্ড বর্ণনা করে।
    edd_files একক ডোমেন ফাইলের তালিকা (প্রতিটিতে একটি একক <ConfigurableDomain> ট্যাগ রয়েছে)।

বিল্ডে প্রজন্মের নিয়ম চালানোর পরে, সমস্ত ডোমেনগুলির সাথে PolicyConfigurableDomains.xml তৈরি করা হয়। নিম্নলিখিত নিয়মগুলি PfW উদাহরণ ব্যবহার করে তৈরি করা ফাইল থেকে একটি উদ্ধৃতি দেখায়:

---ConfigurableDomain Name="DeviceForProductStrategies.Music.SelectedDevice"---
<Configurations>
  <Configuration Name="BluetoothA2dp">
    <CompoundRule Type="All">
      <SelectionCriterionRule SelectionCriterion="ForceUseForMedia" MatchesWhen="IsNot" Value="NO_BT_A2DP"/>
      <SelectionCriterionRule SelectionCriterion="ForceUseForCommunication" MatchesWhen="IsNot" Value="BT_SCO"/>
      <SelectionCriterionRule SelectionCriterion="AvailableOutputDevices" MatchesWhen="Includes" Value="BLUETOOTH_A2DP"/>
    </CompoundRule>
  </Configuration>
  <Configuration Name="Bus">
    <CompoundRule Type="All">
      <SelectionCriterionRule SelectionCriterion="AvailableOutputDevices" MatchesWhen="Includes" Value="BUS"/>
      <SelectionCriterionRule SelectionCriterion="AvailableOutputDevicesAddresses" MatchesWhen="Includes" Value="BUS00_MEDIA"/>
    </CompoundRule>
  </Configuration>
  <Configuration Name="Default">
    <CompoundRule Type="All"/>
  </Configuration>
</Configurations>

CAP ডিবাগিং

আপনি CAP কনফিগারেশন ডাম্প করতে remote-process ব্যবহার করতে পারেন:

adb root && adb remount
adb shell remote-process unix:///dev/socket/audioserver/policy_debug dumpDomains

এটি প্রযোজ্য শর্ত সহ সমস্ত ডোমেন এবং কনফিগারেশন দেখায়। নীচে ব্লুটুথ A2DP, বাস ডিভাইস এবং ডিফল্ট কনফিগারেশন ব্যবহার করে Cuttlefish স্বয়ংচালিত ডিভাইস থেকে একটি উদ্ধৃতি দেখায়। কনফিগারেশন দেখুন:

- ConfigurableDomain: DeviceForProductStrategies.Music.SelectedDevice =
 {Sequence aware: no, Last applied configuration: Bus}
  - Configuration: BluetoothA2dp
    - CompoundRule = All
      - SelectionCriterionRule = ForceUseForMedia IsNot NO_BT_A2DP
      - SelectionCriterionRule = ForceUseForCommunication IsNot BT_SCO
      - SelectionCriterionRule = AvailableOutputDevices Includes BLUETOOTH_A2DP
  - Configuration: Bus
    - CompoundRule = All
      - SelectionCriterionRule = AvailableOutputDevices Includes BUS
      - SelectionCriterionRule = AvailableOutputDevicesAddresses Includes BUS00_MEDIA_CARD_0_DEV_0
  - Configuration: Default
    - CompoundRule = All

CAP প্যারামিটার ফ্রেমওয়ার্ক ডিবাগ করার জন্য উপলব্ধ অন্যান্য কমান্ডের আরও তথ্যের জন্য এই টুলটি ব্যবহার করুন:

adb shell remote-process unix:///dev/socket/audioserver/policy_debug help

টুলটি ব্যবহার করার জন্য, OEM নির্মাতাদের অবশ্যই ডিভাইসে টিউন করার অনুমতি দিতে হবে। ডিভাইস টিউনিংয়ের অনুমতি দেয় কিনা তা যাচাই করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

adb shell cat /system/etc/parameter-framework/ParameterFrameworkConfigurationCap.xml

অ্যান্ড্রয়েড 15 এবং তার চেয়ে কম সময়ে, ফাইলটি ভিন্ন হতে পারে, তাই নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

adb shell cat /system/etc/parameter-framework/ParameterFrameworkConfigurationPolicy.xml

ফাইলটিতে সংশ্লিষ্ট সার্ভার পোর্টের সাথে TuningAllowed="true" থাকা উচিত:

<?xml version="1.0" encoding="UTF-8"?>
<ParameterFrameworkConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    SystemClassName="Policy" TuningAllowed="true" ServerPort="unix:///dev/socket/audioserver/policy_debug">
    <SubsystemPlugins>
        <Location Folder="">
            <Plugin Name="libpolicy-subsystem.so"/>
        </Location>
    </SubsystemPlugins>
    <StructureDescriptionFileLocation Path="Structure/Policy/CapClass.xml"/>
</ParameterFrameworkConfiguration>

এই ফাইলটি বিল্ড ইমেজের ধরন অনুযায়ী স্বয়ংক্রিয়ভাবে তৈরি করা হয় (বা লিগ্যাসি বিল্ডের জন্য রিলিজ বা ডিবাগের জন্য একটি ভিন্ন ফাইল ব্যবহার করুন)। একটি রিলিজ বিল্ড একটি সকেট পোর্ট ছাড়াই TuningAllowed কে false সেট করে (রিলিজ বিল্ডে এর জন্য সকেট নিষিদ্ধ)। ইঞ্জিনিয়ারিং এবং userdebug বিল্ড ব্যবহার করা সকেট পোর্টের সাথে এটিকে true হিসাবে সেট করে। মনে রাখবেন যে এটি audio_policy_pfw_toplevel দ্বারা উল্লেখ করা ফাইল। রিমোট-প্রসেস টুলটিকে অবশ্যই ডিভাইসের মেক বা বিল্ড ফাইলে অন্তর্ভুক্ত করতে হবে:

# Tool used for debug Parameter Framework (only for eng and userdebug builds)
PRODUCT_PACKAGES_DEBUG += remote-process

সকেটগুলিকে অনুমতি দেওয়ার জন্য সংশ্লিষ্ট SELinux নীতিও অন্তর্ভুক্ত করা আবশ্যক। এটি শুধুমাত্র ডিবাগ মোডের জন্য কাজ করে কারণ রিলিজ মোড স্পষ্টভাবে সকেটগুলিকে অনুমোদন করে না:

BOARD_SEPOLICY_DIRS += frameworks/av/services/audiopolicy/engineconfigurable/sepolicy

Android 16-এ CAP মাইগ্রেশন

AIDL অডিও HAL CAP ইঞ্জিন এবং পূর্ববর্তী সংস্করণগুলির দ্বারা আনা বড় পরিবর্তনগুলির পরিপ্রেক্ষিতে, বিভিন্ন ডিভাইসের রূপান্তর পরিস্থিতি রয়েছে যা আপনার বিবেচনা করা উচিত। এই বিভাগটি সবচেয়ে বিশিষ্ট ট্রানজিশন পরিস্থিতি কভার করে এবং CAP ইঞ্জিন কনফিগারেশন সক্ষম করার জন্য কাজের জন্য সুপারিশ দেয়।

দৃশ্যকল্প 1: Android 16 বা উচ্চতর ব্যবহার করে নতুন ডিভাইস, ডিভাইস CAP কনফিগারেশনের জন্য কোনো পূর্ববর্তী উৎস নেই

একটি নতুন ডিভাইস অবশ্যই vendor পার্টিশনে Android 16 বা উচ্চতর কোড সহ লঞ্চ করতে হবে। এর মানে, এটি অবশ্যই AIDL অডিও HAL ইন্টারফেসের মাধ্যমে কনফিগারযোগ্য অডিও নীতি ইঞ্জিন কনফিগারেশন প্রকাশ করবে। ডিভাইস ক্যাপ ইঞ্জিন কনফিগারেশন উদাহরণ থেকে অনুলিপি করা উচিত. vendor পার্টিশনে কোন PfW CAP ডোমেন সংজ্ঞা থাকা উচিত নয়।

ডিভাইসের জন্য ব্যবহৃত সিস্টেম ইমেজ Android 16 বা উচ্চতর। অডিও সার্ভিস ফ্রেমওয়ার্ক AIDL অডিও HAL ইন্টারফেসের মাধ্যমে CAP কনফিগারেশন আবিষ্কার করে, তাই এটি সিস্টেম ইমেজ থেকে PfW CAP ডোমেন সংজ্ঞা ব্যবহার করে PfW শুরু করে এবং AIDL এর মাধ্যমে প্রাপ্ত ডিভাইস CAP কনফিগারেশন লোড করে।

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

দৃশ্যকল্প 2: CAP ব্যবহার করে আগের ডিভাইস থেকে Android 16 বা উচ্চতর ব্যবহার করে নতুন ডিভাইস

একটি নতুন ডিভাইস অবশ্যই vendor পার্টিশনে Android 16 বা উচ্চতর কোড সহ লঞ্চ করতে হবে। যাইহোক, যেহেতু OEM-এর একটি ব্যবহারযোগ্য ডিভাইস CAP ইঞ্জিন কনফিগারেশন রয়েছে, তাই OEM এটিকে একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে চাইবে (বা সম্পূর্ণরূপে পুনরায় ব্যবহার করুন)। CAP কনফিগারেশনের AIDL সংস্করণে Android 15 এবং নিম্ন সংস্করণের তুলনায় কিছু পরিবর্তন রয়েছে, তাই বিক্রেতাকে অবশ্যই বিদ্যমান কনফিগারেশনটিকে AIDL-এ রূপান্তর করতে হবে। প্রয়োজনীয় পরিবর্তনের জন্য Android 16 এবং নিম্ন সংস্করণের মধ্যে পরিবর্তনের জন্য পণ্য কৌশলগুলিতে আলোচনা দেখুন। সাধারণভাবে, অডিও ফ্রেমওয়ার্ক সিএপি কনফিগারেশনটি আবিষ্কার করে এবং লোড করে যেভাবে দৃশ্যকল্প 1-এ।

দৃশ্যকল্প 3: CAP সহ বিদ্যমান ডিভাইস শুধুমাত্র সিস্টেম পার্টিশনে Android 16-এ আপডেট হচ্ছে

এই পরিস্থিতিতে, vendor পার্টিশনে Android 15 এবং ডিভাইস CAP কনফিগারেশনের নিম্ন সংস্করণ এবং PfW CAP ডোমেন সংজ্ঞা রয়েছে। vendor পার্টিশনটি স্পর্শ করা হয়নি, তাই এটি এখনও HIDL HAL ব্যবহার করে। ফ্রেমওয়ার্কটি অ্যান্ড্রয়েড 15 এবং নিম্নতর পরিস্থিতি অনুসরণ করে এবং vendor পার্টিশন থেকে সমস্ত CAP সম্পর্কিত কনফিগারেশন লোড করে।

দৃশ্যকল্প 4: বিদ্যমান ডিভাইস Android 15-এ CAP সহ মুক্তি পেয়েছে

অ্যান্ড্রয়েড 15 এ AIDL-এ CAP সমর্থিত ছিল না, তাই কিছু বিক্রেতা AIDL অডিও HAL এবং CAP সহ নতুন ডিভাইস প্রকাশ করেছে, যা অডিও ফ্রেমওয়ার্ক দ্বারা লোড করা হয়েছিল। এই হাইব্রিড মোডটি অনানুষ্ঠানিক ছিল, কিন্তু অ্যান্ড্রয়েড 16-এ অন্তর্ভুক্ত করা হয়েছে৷ মনে রাখবেন যে এই মোডটি অবশ্যই Android 16-এ নতুন ডিভাইস প্রকাশের জন্য ব্যবহার করা উচিত নয়, বরং Android 15 বিক্রেতার সাথে বিদ্যমান ডিভাইসগুলিকে Android 16 ( system পার্টিশন আপডেট) এ আপডেট করা সক্ষম করতে ব্যবহার করা উচিত৷

অডিও ফ্রেমওয়ার্ক CAP কনফিগারেশন ছাড়া AIDL অডিও HAL অডিও কনফিগারেশন আবিষ্কার করে। CAP কনফিগারেশনের জন্য, অডিও নীতি পরিষেবা (অডিও ফ্রেমওয়ার্ক) vendor পার্টিশন থেকে CAP কনফিগারেশন লোড করার জন্য ফিরে আসে। এই ক্ষেত্রে, PfW CAP ডোমেন সংজ্ঞা এবং ডিভাইস CAP কনফিগারেশন উভয়ই vendor পার্টিশন থেকে লোড করতে হবে।

CAP মাইগ্রেশন সারাংশ

নিম্নলিখিত সারণী সামঞ্জস্যপূর্ণ সিস্টেম এবং বিক্রেতা কনফিগারেশন এবং CAP কনফিগারেশনের প্রয়োজনীয়তাগুলিকে সংক্ষিপ্ত করে:

সিস্টেম পার্টিশন দৃশ্যকল্প বিক্রেতা পার্টিশন কোড সংস্করণ কোর অডিও HAL প্রকার PfW CAP ডোমেনের সংজ্ঞা অবস্থান ডিভাইস ক্যাপ কনফিগারেশন
অ্যান্ড্রয়েড 15 4 Android 14 বা তার কম এইচআইডিএল vendor HIDL সংস্করণ
অ্যান্ড্রয়েড 16 3 Android 14 বা তার কম এইচআইডিএল vendor HIDL সংস্করণ
অ্যান্ড্রয়েড 16 4 অ্যান্ড্রয়েড 15 এআইডিএল vendor HIDL সংস্করণ
অ্যান্ড্রয়েড 16 2 অ্যান্ড্রয়েড 16 এআইডিএল system HIDL থেকে AIDL সংস্করণ রূপান্তরিত
অ্যান্ড্রয়েড 16 1 অ্যান্ড্রয়েড 16 এআইডিএল system উদাহরণ থেকে এআইডিএল সংস্করণ