Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Thiết kế để giảm độ trễ

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Bản phát hành Android 4.1 đã giới thiệu những thay đổi về khung nội bộ để có đường dẫn đầu ra âm thanh có độ trễ thấp hơn . Có rất ít thay đổi về API máy khách công khai hoặc API HAL. Tài liệu này mô tả thiết kế ban đầu, đã tiếp tục phát triển theo thời gian. Hiểu rõ về thiết kế này sẽ giúp các nhà cung cấp OEM và SoC của thiết bị triển khai thiết kế một cách chính xác trên các thiết bị và chipset cụ thể của họ. Bài viết này không dành cho các nhà phát triển ứng dụng.

Tạo bản nhạc

Máy khách có thể tùy ý đặt bit AUDIO_OUTPUT_FLAG_FAST trong tham số audio_output_flags_t của hàm tạo AudioTrack C++ hoặc AudioTrack::set() . Hiện tại các khách hàng duy nhất làm như vậy là:

Việc triển khai AudioTrack C++ xem xét yêu cầu AUDIO_OUTPUT_FLAG_FAST và có thể tùy ý từ chối yêu cầu ở cấp độ máy khách. Nếu nó quyết định chuyển yêu cầu, nó sẽ làm như vậy bằng cách sử dụng bit TRACK_FAST của tham số track_flags_t của phương thức xuất xưởng IAudioTrack IAudioFlinger::createTrack() .

Máy chủ âm thanh AudioFlinger xem xét yêu cầu TRACK_FAST và có thể tùy chọn từ chối yêu cầu ở cấp độ máy chủ. Nó thông báo cho khách hàng biết yêu cầu có được chấp nhận hay không, thông qua bit CBLK_FAST của khối điều khiển bộ nhớ dùng chung.

Các yếu tố ảnh hưởng đến quyết định bao gồm:

  • Sự hiện diện của luồng trộn nhanh cho đầu ra này (xem bên dưới)
  • Theo dõi tỷ lệ mẫu
  • Sự hiện diện của một luồng máy khách để thực thi các trình xử lý gọi lại cho rãnh này
  • Theo dõi kích thước bộ đệm
  • Các vị trí theo dõi nhanh có sẵn (xem bên dưới)

Nếu yêu cầu của khách hàng được chấp nhận, nó được gọi là "theo dõi nhanh". Mặt khác, nó được gọi là "đường bình thường".

chủ đề trộn

Tại thời điểm AudioFlinger tạo luồng bộ trộn thông thường, nó sẽ quyết định có tạo luồng bộ trộn nhanh hay không. Cả bộ trộn bình thường và bộ trộn nhanh đều không được liên kết với một bản nhạc cụ thể mà là với một tập hợp các bản nhạc. Luôn có một luồng trộn bình thường. Chuỗi trộn nhanh, nếu có, sẽ phụ thuộc vào luồng trộn bình thường và hoạt động dưới sự kiểm soát của nó.

máy trộn nhanh

Đặc trưng

Chuỗi trộn nhanh cung cấp các tính năng sau:

  • Trộn hỗn hợp phụ của bộ trộn thông thường và tối đa 7 bản nhạc nhanh của khách hàng
  • Độ suy giảm trên mỗi bản nhạc

Các tính năng bị bỏ qua:

  • Chuyển đổi tỷ lệ mẫu trên mỗi bản nhạc
  • Mỗi hiệu ứng theo dõi
  • Mỗi hiệu ứng trộn

Giai đoạn = Stage

Bộ trộn nhanh chạy định kỳ, với khoảng thời gian khuyến nghị là từ hai đến ba mili giây (ms) hoặc khoảng thời gian cao hơn một chút là năm mili giây nếu cần để lập lịch trình ổn định. Con số này đã được chọn sao cho, chiếm toàn bộ đường dẫn bộ đệm, tổng thời gian chờ là 10 mili giây. Có thể có các giá trị nhỏ hơn nhưng có thể dẫn đến tăng mức tiêu thụ điện năng và khả năng xảy ra trục trặc tùy thuộc vào khả năng dự đoán lịch trình của CPU. Có thể có giá trị lớn hơn, lên đến 20 ms, nhưng dẫn đến tổng thời gian trễ bị suy giảm và do đó nên tránh.

lập kế hoạch

Bộ trộn nhanh chạy ở mức ưu tiên SCHED_FIFO cao. Nó cần rất ít thời gian của CPU, nhưng phải chạy thường xuyên và với độ trễ lịch trình thấp. Jitter thể hiện sự thay đổi trong thời gian chu kỳ: đó là sự khác biệt giữa thời gian chu kỳ thực tế so với thời gian chu kỳ dự kiến. Chạy quá muộn sẽ dẫn đến trục trặc do chạy quá mức. Chạy quá sớm sẽ dẫn đến trục trặc do kéo từ đường đua nhanh trước khi đường đua cung cấp dữ liệu.

chặn

Lý tưởng nhất là luồng trộn nhanh không bao giờ bị chặn, ngoại trừ tại HAL write() . Các trường hợp chặn khác trong bộ trộn nhanh được coi là lỗi. Đặc biệt, tránh được các mutexes. Thay vào đó, các thuật toán không chặn (còn được gọi là thuật toán không khóa) được sử dụng. Xem Tránh đảo ngược ưu tiên để biết thêm về chủ đề này.

Mối quan hệ với các thành phần khác

Bộ trộn nhanh có ít tương tác trực tiếp với khách hàng. Đặc biệt, nó không nhìn thấy các hoạt động ở cấp độ liên kết, nhưng nó truy cập vào khối điều khiển bộ nhớ dùng chung của máy khách.

Bộ trộn nhanh nhận lệnh từ bộ trộn bình thường thông qua hàng đợi trạng thái.

Khác với việc kéo dữ liệu theo dõi, tương tác với khách hàng thông qua bộ trộn thông thường.

Điểm chìm chính của bộ trộn nhanh là âm thanh HAL.

máy trộn bình thường

Đặc trưng

Tất cả các tính năng được kích hoạt:

  • Lên đến 32 bài hát
  • Độ suy giảm trên mỗi bản nhạc
  • Chuyển đổi tỷ lệ mẫu trên mỗi bản nhạc
  • Xử lý hiệu ứng

Giai đoạn = Stage

Khoảng thời gian được tính là bội số nguyên đầu tiên của khoảng thời gian bộ trộn nhanh >= 20 ms.

lập kế hoạch

Bộ trộn bình thường chạy ở mức ưu tiên SCHED_OTHER nâng cao.

chặn

Bộ trộn bình thường được phép chặn và thường làm như vậy ở các bộ chuyển đổi khác nhau cũng như tại một đường ống chặn để ghi hỗn hợp phụ của nó.

Mối quan hệ với các thành phần khác

Bộ trộn thông thường tương tác rộng rãi với thế giới bên ngoài, bao gồm các chuỗi liên kết, trình quản lý chính sách âm thanh, chuỗi bộ trộn nhanh và các bản nhạc của khách hàng.

Bồn rửa của máy trộn bình thường là một đường ống chặn đường 0 của máy trộn nhanh.

cờ

AUDIO_OUTPUT_FLAG_FAST bit là một gợi ý. Không có gì đảm bảo yêu cầu sẽ được thực hiện.

AUDIO_OUTPUT_FLAG_FAST là khái niệm cấp độ máy khách. Nó không xuất hiện trong máy chủ.

TRACK_FAST là khái niệm máy khách -> máy chủ.