حد نوع الجهاز

في صوت Android، يتم استخدام audio_devices_t لتمثيل نوع جهاز الصوت. يتم استخدامه على نطاق واسع في كود مصدر الصوت كحقل بت لتصفية أو تحديد جهاز واحد أو أكثر من الأجهزة المحددة. قبل إصدار Android 11، كان هناك حد أقصى يبلغ 30 نوعًا من أجهزة إدخال/إخراج الصوت، ولا توجد فتحات احتياطية لإضافة أنواع جديدة من أجهزة الصوت. لقد قمنا بإزالة الحد الأقصى لعدد أنواع أجهزة الصوت للسماح بإضافة أنواع أجهزة صوتية جديدة.

لإزالة الحد الأقصى لعدد أنواع أجهزة الصوت، تم الآن تعداد أنواع أجهزة الصوت بدلاً من أقنعة البت.

يتم الاحتفاظ بجميع أنواع أجهزة الصوت الموجودة كما هي. لا يزال يتم استخدام AUDIO_DEVICE_BIT_IN للتمييز بين أجهزة الإدخال والإخراج. عند إضافة أنواع أجهزة صوتية جديدة، يتم تعدادها بالقيم في الفجوات بين القيم الموجودة.

لا ينبغي لمصنعي المعدات الأصلية استخدام audio_devices_t كقناع بت، لأن ذلك يمكن أن يسبب نتائج غير متوقعة عند إضافة أنواع أجهزة صوتية جديدة.

الأمثلة والمصادر

قبل Android 11، كان هناك استخدامان نموذجيان لأنواع أجهزة الصوت كأقنعة البت.

  • استخدام قيمة audio_devices_t لتمثيل أجهزة صوتية متعددة.
  • التحقق مما إذا كانت قيمة audio_devices_t تحتوي على أنواع أجهزة صوت من فئة محددة.

لتمثيل أنواع أجهزة صوتية متعددة، يتم استخدام فئة تسمى DeviceTypeSet في /libaudiofoundation/include/media/AudioContainers.h ، وهي حاوية std::set لـ audio_devices_t . تم الإعلان عن الفئة في مكتبة libaudiofoundation المتوفرة لدى البائع. لتمثيل أنواع أجهزة صوتية متعددة في كود C، يمكن استخدام مصفوفة أو قائمة من audio_devices_t .

للتحقق مما إذا كان نوع جهاز واحد ينتمي إلى فئة محددة، استخدم الوظائف المساعدة audio_is_.*_device في /system/media/audio/include/system/audio.h . بالنسبة لحالة أنواع أجهزة الصوت المتعددة، استخدم الوظائف المساعدة في libaudiofoundation . على سبيل المثال، استخدم areAllOfSameDeviceType (DeviceTypeSet, std::function ) areAllOfSameDeviceType (DeviceTypeSet, std::function ) في AudioContainers.h للتحقق مما إذا كانت جميع أنواع أجهزة الصوت المحددة من نفس النوع.

تطبيق

تحتاج الشركات المصنعة للمعدات الأصلية إلى إزالة تمثيل حقل بت نوع جهاز الصوت من تطبيق HAL الصوتي.

  1. قم بإزالة كافة مساحة تخزين الأجهزة في حقل صغير.

    لا ينبغي استخدام audio_devices_t لتمثيل أنواع متعددة من أجهزة الصوت. بدلاً من ذلك، استخدم قائمة أو متجهًا.

  2. توقف عن استخدام عمليات البت لمقارنات أنواع الأجهزة.

    قبل Android 11، كان من الممكن استخدام أنواع أجهزة الصوت كحقل بت. في هذه الحالة، من الشائع استخدام عمليات البت لمقارنات أنواع الأجهزة. عند إضافة أنواع أجهزة صوتية جديدة ومتعددة، قد تؤدي عمليات البت إلى نتائج غير متوقعة. بدلاً من ذلك، استخدم الوظائف المساعدة كبديل. إذا كان هناك نوع جهاز صوت واحد، فاستخدم المقارنة المباشرة لمقارنة القيمتين. للتحقق مما إذا كان نوع جهاز الصوت ينتمي إلى فئة محددة، استخدم الوظائف المساعدة في /system/media/audio/include/system/audio.h . على سبيل المثال، audio_is_output_device(audio_devices_t device) .

  3. توقف عن استخدام القيم المحددة مسبقًا لمجموعات من أنواع أجهزة الصوت.

    توجد بعض القيم المحددة مسبقًا لمجموعات أنواع أجهزة الصوت، AUDIO_DEVICE_OUT_ALL ، في system/media/audio/include/system/audio-base-utils.h . كل هذه القيم محفوظة ولكن قد يتم إهمالها لأنها لن تكون صحيحة عند إضافة أنواع أجهزة صوتية جديدة. هناك مجموعات جديدة من أنواع أجهزة الصوت المعرفة في audio-base-utils.h ، وهي عبارة عن مصفوفات من أنواع أجهزة الصوت، مثل AUDIO_DEVICE_OUT_ALL_ARRAY .

  4. قم بتنفيذ طريقتي create_audio_patch() و release_audio_patch() للتوجيه بدلاً من set_parameters .

    يستخدم الأسلوب set_parameters أنواع أجهزة الصوت كحقل بت، لذلك يمكن أن تكون هناك نتائج غير متوقعة إذا تمت إضافة أنواع أجهزة صوتية جديدة.

    حاليًا، هناك حاجة إلى نوعين من التصحيحات الصوتية:

    • مزيج لتصحيحات الجهاز، للتشغيل
    • جهاز لمزج التصحيحات للتسجيل

    في التحديثات اللاحقة، قد تكون هناك حاجة إلى تصحيحات إضافية من جهاز لآخر.

    عند إنشاء تصحيح صوتي، إذا لم يتم تحديد مقبض التصحيح، فإن طبقة توصيف الأجهزة (HAL) للصوت مطلوبة لإنشاء مقبض تصحيح فريد يمكنه التعرف على تصحيح الصوت. وبخلاف ذلك، يجب أن يستخدم HAL الصوتي مقبض تصحيح الصوت المحدد لتحديث تصحيح الصوت.

    في حالة استخدام طبقة HAL الصوتية القديمة ومجمّع AOSP HIDL، يجب أن تقوم طبقة HAL الصوتية القديمة بتعيين إصدار HAL الرئيسي على 3.0.

    لتمكين ميزة التصحيح الصوتي، يجب أن تقوم طبقة تصديق الأجهزة (HAL) الصوتية بتعيين إصدار HAL الرئيسي إلى 3.0 أو أعلى. راجع Device::supportsAudioPatches() في تطبيق HIDL الافتراضي لمزيد من المعلومات، والتي يمكن العثور عليها أيضًا في HAL الصوتي لـ Cuttlefish.

التخصيص

لا يمكن إيقاف تشغيل الميزة، أو إعادة هيكلة جهاز الصوت في الإطار الذي يجعل من الممكن إضافة أنواع أجهزة الصوت.

تسمح كافة أنواع الأجهزة الصوتية المضافة بتمثيل نوع الجهاز بمجموعة بت واحدة، لذلك لا تزال تطبيقات HAL الحالية تعمل.

إذا تمت إضافة أنواع أجهزة صوتية جديدة ورغب مصنعو المعدات الأصلية في استخدامها، فيجب عليهم ترقية تطبيق HAL الصوتي الخاص بهم والانتقال إلى الإصدار 6.0 من HIDL أو أعلى. من الضروري ترقية إصدار HAL الرئيسي إلى 3.0 وتنفيذ طريقتي create_audio_patch و release_audio_patch ، لأن استخدام set_parameters لتوجيه الدفق يمكن أن يسبب نتائج غير متوقعة عند إضافة أنواع أجهزة صوتية جديدة.

تصديق

العمل المطلوب لمصنعي المعدات الأصلية هو تحديث تطبيقات HAL الخاصة بهم. يمكن استخدام VTS للصوت HAL للتحقق من صحة ما إذا كان التنفيذ يعمل على النحو المنشود. يمكن العثور على جميع الاختبارات في ملفات VTS .