Trong âm thanh Android, audio_devices_t
được dùng để biểu thị loại thiết bị âm thanh. Phương thức này thường được dùng trong mã nguồn âm thanh dưới dạng một trường bit để lọc hoặc chọn một hay nhiều thiết bị được chỉ định. Trước Android 11, có giới hạn là 30 loại thiết bị đầu vào/đầu ra âm thanh và không có khe cắm dự phòng để thêm các loại thiết bị âm thanh mới. Chúng tôi đã xoá giới hạn về số lượng loại thiết bị âm thanh để cho phép thêm các loại thiết bị âm thanh mới.
Để xoá giới hạn về số lượng loại thiết bị âm thanh, các loại thiết bị âm thanh hiện là các giá trị được liệt kê thay vì mặt nạ bit.
Tất cả các loại thiết bị âm thanh hiện có vẫn được giữ nguyên. AUDIO_DEVICE_BIT_IN
vẫn được dùng để phân biệt thiết bị đầu vào hoặc đầu ra. Khi bạn thêm các loại thiết bị âm thanh mới, chúng sẽ là các giá trị được liệt kê trong khoảng trống giữa các giá trị hiện có.
Các OEM không nên dùng audio_devices_t
làm mặt nạ bit, vì điều đó có thể gây ra kết quả không mong muốn khi các loại thiết bị âm thanh được liệt kê mới được thêm vào.
Ví dụ và nguồn
Trước Android 11, có 2 cách sử dụng phổ biến các loại thiết bị âm thanh dưới dạng mặt nạ bit.
- Sử dụng giá trị
audio_devices_t
để biểu thị nhiều thiết bị âm thanh. - Kiểm tra xem giá trị
audio_devices_t
có chứa các loại thiết bị âm thanh thuộc một danh mục cụ thể hay không.
Để biểu thị nhiều loại thiết bị âm thanh, một lớp có tên là DeviceTypeSet
trong
/libaudiofoundation/include/media/AudioContainers.h
được dùng, đây là một vùng chứa std::set
của audio_devices_t
. Lớp này được khai báo trong thư viện
libaudiofoundation
do nhà cung cấp cung cấp. Để biểu thị nhiều loại thiết bị âm thanh trong mã C, bạn có thể dùng một mảng hoặc danh sách audio_devices_t
.
Để kiểm tra xem một loại thiết bị có thuộc một danh mục cụ thể hay không, hãy dùng các hàm trợ giúp audio_is_.*_device
trong
/system/media/audio/include/system/audio.h
.
Đối với trường hợp có nhiều loại thiết bị âm thanh, hãy sử dụng các hàm trợ giúp trong libaudiofoundation
. Ví dụ: sử dụng areAllOfSameDeviceType (DeviceTypeSet, std::function
trong
AudioContainers.h
để kiểm tra xem tất cả các loại thiết bị âm thanh đã cho có cùng loại hay không.
Triển khai
Các OEM cần xoá biểu thị trường bit loại thiết bị âm thanh khỏi quá trình triển khai HAL âm thanh.
- Xoá tất cả bộ nhớ của thiết bị trên một trường bit.
Không nên dùng
audio_devices_t
để biểu thị nhiều loại thiết bị âm thanh. Thay vào đó, hãy dùng danh sách hoặc vectơ. - Ngừng sử dụng các thao tác bit để so sánh các loại thiết bị.
Trước Android 11, các loại thiết bị âm thanh có thể được dùng làm trường bit. Trong trường hợp đó, bạn nên dùng các thao tác trên bit để so sánh các loại thiết bị. Khi các loại thiết bị âm thanh mới, được liệt kê được thêm vào, các thao tác bit có thể gây ra kết quả không mong muốn. Thay vào đó, hãy sử dụng các hàm trợ giúp. Nếu chỉ có một loại thiết bị âm thanh, hãy sử dụng phương thức so sánh trực tiếp để so sánh hai giá trị. Để kiểm tra xem loại thiết bị âm thanh có thuộc một danh mục cụ thể hay không, hãy dùng các hàm trợ giúp trong
/system/media/audio/include/system/audio.h
. Ví dụ:audio_is_output_device(audio_devices_t device)
- Ngừng sử dụng các giá trị xác định trước cho các nhóm loại thiết bị âm thanh.
Có một số giá trị được xác định trước cho các nhóm loại thiết bị âm thanh,
AUDIO_DEVICE_OUT_ALL
, trongsystem/media/audio/include/system/audio-base-utils.h
. Tất cả các giá trị này đều được dành riêng nhưng có thể không được dùng nữa vì chúng sẽ không chính xác khi các loại thiết bị âm thanh được liệt kê mới được thêm vào. Có các nhóm loại thiết bị âm thanh mới được xác định trongaudio-base-utils.h
, là các mảng loại thiết bị âm thanh, chẳng hạn nhưAUDIO_DEVICE_OUT_ALL_ARRAY
. - Triển khai các phương thức
create_audio_patch()
vàrelease_audio_patch()
để định tuyến thay vìset_parameters
.Phương thức
set_parameters
sử dụng các loại thiết bị âm thanh làm trường bit, vì vậy, có thể xảy ra kết quả không mong muốn nếu bạn thêm các loại thiết bị âm thanh được liệt kê mới.Hiện tại, bạn cần có 2 loại bản vá âm thanh:
- Trộn các bản vá thiết bị để phát
- Thiết bị trộn các bản vá, để ghi âm
Trong các bản cập nhật tiếp theo, có thể bạn sẽ cần thêm các bản vá cho từng thiết bị.
Khi tạo một bản vá âm thanh, nếu bạn không chỉ định mã nhận dạng bản vá, thì HAL âm thanh phải tạo một mã nhận dạng bản vá riêng biệt có thể xác định bản vá âm thanh. Nếu không, HAL âm thanh sẽ dùng mã nhận dạng bản vá âm thanh đã cho để cập nhật bản vá âm thanh.
Nếu sử dụng HAL âm thanh cũ và trình bao bọc HIDL AOSP, thì HAL âm thanh cũ phải đặt phiên bản HAL chính thành 3.0.
Để bật tính năng bản vá âm thanh, HAL âm thanh phải đặt phiên bản HAL chính thành 3.0 trở lên. Hãy tham khảo
Device::supportsAudioPatches()
trong chế độ triển khai HIDL mặc định để biết thêm thông tin. Bạn cũng có thể tìm thấy thông tin này trên HAL âm thanh cho Cuttlefish.
Tuỳ chỉnh
Bạn không thể tắt tính năng này hoặc khôi phục quá trình tái cấu trúc thiết bị âm thanh trong khung cho phép thêm các loại thiết bị âm thanh.
Tất cả các loại thiết bị âm thanh được thêm vào đều cho phép biểu thị một loại thiết bị bằng một bit duy nhất được đặt, vì vậy, các chế độ triển khai HAL hiện tại vẫn hoạt động.
Nếu các loại thiết bị âm thanh mới được thêm vào và các OEM muốn sử dụng chúng, thì họ phải nâng cấp quá trình triển khai HAL âm thanh và chuyển sang HIDL phiên bản 6.0 trở lên. Bạn bắt buộc phải nâng cấp phiên bản HAL chính lên 3.0 và triển khai các phương thức create_audio_patch
và release_audio_patch
, vì việc sử dụng set_parameters
để định tuyến luồng có thể gây ra kết quả không mong muốn khi các loại thiết bị âm thanh mới được thêm vào.
Xác nhận kết quả
Công việc bắt buộc đối với OEM là cập nhật các quy trình triển khai HAL. Bạn có thể sử dụng VTS cho HAL âm thanh để xác thực xem quá trình triển khai có hoạt động như dự kiến hay không. Bạn có thể tìm thấy tất cả các kiểm thử trong các tệp VTS.