Tham chiếu cấu trúc audio_stream_out
#include <
audio.h
>
Trường dữ liệu |
|
struct audio_stream | common |
uint32_t(* | get_latency )(const struct audio_stream_out *stream) |
int(* | set_volume )(struct audio_stream_out *stream, float left, float right) |
ssize_t(* | write )(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
int(* | get_render_position )(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* | get_next_write_timestamp )(const struct audio_stream_out *stream, int64_t *timestamp) |
int(* | set_callback )(struct audio_stream_out *stream, stream_callback_t callback, void *cookie) |
int(* | tạm dừng )(struct audio_stream_out *stream) |
int(* | tiếp tục )(struct audio_stream_out *stream) |
int(* | drain )(struct audio_stream_out *stream, audio_drain_type_t type) |
int(* | flush )(struct audio_stream_out *stream) |
int(* | get_presentation_position )(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Nội dung mô tả chi tiết
audio_stream_out là giao diện trừu tượng cho phần cứng đầu ra âm thanh.
Tệp này cung cấp thông tin về nhiều thuộc tính của trình điều khiển phần cứng đầu ra âm thanh.
Tài liệu về trường
struct audio_stream common |
Các phương thức phổ biến của luồng âm thanh. này phải là thành viên đầu tiên của audio_stream_out vì người dùng cấu trúc này sẽ truyền audio_stream đến con trỏ audio_stream_out trong ngữ cảnh mà bạn biết audio_stream tham chiếu đến audio_stream_out .
int(* drain)(struct audio_stream_out *stream, audio_drain_type_t type) |
Yêu cầu thông báo khi dữ liệu được trình điều khiển/phần cứng lưu vào bộ đệm đã được phát. Nếu trước đó bạn đã gọi set_callback() để bật chế độ không chặn, thì drain() không được chặn, thay vào đó, hàm này phải trả về nhanh chóng và thông báo về việc hoàn tất quá trình rút qua lệnh gọi lại. Nếu bạn chưa gọi set_callback() , thì drain() phải chặn cho đến khi hoàn tất. Nếu type==AUDIO_DRAIN_ALL, quá trình xả sẽ hoàn tất khi tất cả dữ liệu đã ghi trước đó đã được phát. Nếu type==AUDIO_DRAIN_EARLY_NOTIFY, quá trình rút cạn sẽ hoàn tất ngay trước khi tất cả dữ liệu cho bản nhạc hiện tại phát xong để cho phép khung thực hiện chuyển đổi bản nhạc không có khoảng trống.
Drain phải trả về ngay lập tức khi gọi stop() và flush()
Bạn bắt buộc phải triển khai hàm này để phát nội dung được tải xuống.
int(* flush)(struct audio_stream_out *stream) |
uint32_t(* get_latency)(const struct audio_stream_out *stream) |
int(* get_next_write_timestamp)(const struct audio_stream_out *stream, int64_t *timestamp) |
int(* get_presentation_position)(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
Trả về số lượng khung âm thanh gần đây được trình bày cho một đối tượng tiếp nhận bên ngoài. Chỉ số này không bao gồm các khung đã được ghi nhưng vẫn đang trong quy trình. Số lượng không được đặt lại về 0 khi đầu ra chuyển sang chế độ chờ. Ngoài ra, hàm này còn trả về giá trị của CLOCK_MONOTONIC tính đến số lần trình bày này. Số lượng được trả về dự kiến sẽ là "gần đây", nhưng không cần phải là giá trị gần đây nhất có thể. Tuy nhiên, thời gian liên kết phải tương ứng với số lượng được trả về. Ví dụ: giả sử đã hiển thị N+M khung, trong đó M là một số "nhỏ". Sau đó, bạn có thể trả về N thay vì N+M và dấu thời gian phải tương ứng với N thay vì N+M. Các thuật ngữ "gần đây" và "nhỏ" chưa được xác định. Các chỉ số này phản ánh chất lượng của quá trình triển khai.
Chỉ phiên bản 3.0 trở lên.
int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pause)(struct audio_stream_out *stream) |
Thông báo cho trình điều khiển âm thanh để dừng phát, tuy nhiên, phần cứng sẽ giữ lại các vùng đệm đã xếp hàng. Hữu ích khi triển khai tính năng tạm dừng/tiếp tục. Tuy nhiên, bạn nên triển khai phương thức triển khai trống nếu không được hỗ trợ cho phần cứng có độ trễ không đáng kể. Ở trạng thái tạm dừng, phần cứng âm thanh vẫn có thể đang sử dụng nguồn điện. Người dùng có thể cân nhắc gọi lệnh tạm ngưng sau khi hết thời gian chờ.
Bạn bắt buộc phải triển khai hàm này để phát nội dung được tải xuống.
int(* resume)(struct audio_stream_out *stream) |
int(* set_callback)(struct audio_stream_out *stream, stream_callback_t callback, void *cookie) |
int(* set_volume)(struct audio_stream_out *stream, float left, float right) |
Sử dụng phương thức này trong trường hợp việc trộn âm thanh được thực hiện trong phần cứng. Phương thức này đóng vai trò là giao diện trực tiếp với phần cứng, cho phép bạn trực tiếp đặt âm lượng thay vì thông qua khung. Phương thức này có thể tạo ra nhiều đầu ra PCM hoặc bộ mã hoá và giải mã tăng tốc phần cứng, chẳng hạn như MP3 hoặc AAC.
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
Ghi vùng đệm âm thanh vào trình điều khiển. Trả về số byte đã ghi hoặc một status_t âm. Nếu ít nhất một khung đã được ghi thành công trước khi xảy ra lỗi, thì trình điều khiển nên trả về số byte (ngắn) thành công đó rồi trả về lỗi trong lệnh gọi tiếp theo.
Nếu trước đó bạn đã gọi set_callback() để bật chế độ không chặn, thì write() không được phép chặn. Hàm này chỉ được ghi số byte hiện vừa với bộ đệm trình điều khiển/phần cứng, sau đó trả về số byte này. Nếu kích thước này nhỏ hơn kích thước ghi được yêu cầu, thì hàm gọi lại phải được gọi khi có thêm dung lượng trong vùng đệm trình điều khiển/phần cứng.
Tài liệu cho cấu trúc này được tạo từ tệp sau:
- hardware/libhardware/include/hardware/ audio.h