ข้อมูลอ้างอิงเกี่ยวกับโครงสร้าง audio_stream_out
#include <
audio.h
>
ฟิลด์ข้อมูล |
|
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(* | pause )(struct audio_stream_out *stream) |
int(* | resume )(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) |
คำอธิบายโดยละเอียด
audio_stream_out เป็นอินเทอร์เฟซการแยกแยะสำหรับฮาร์ดแวร์เอาต์พุตเสียง
ซึ่งจะให้ข้อมูลเกี่ยวกับพร็อพเพอร์ตี้ต่างๆ ของไดรเวอร์ฮาร์ดแวร์เอาต์พุตเสียง
เอกสารประกอบในสนาม
struct audio_stream common |
วิธีการทั่วไปของสตรีมเสียงออก ข้อมูลนี้ ต้อง เป็นสมาชิกแรกของ audio_stream_out เนื่องจากผู้ใช้โครงสร้างนี้จะแคสต์ audio_stream ไปยัง audio_stream_out พอยน์เตอร์ในบริบทที่ทราบว่า audio_stream อ้างอิงถึง audio_stream_out
int(* drain)(struct audio_stream_out *stream, audio_drain_type_t type) |
ขอการแจ้งเตือนเมื่อเล่นข้อมูลที่แคชไว้โดยไดรเวอร์/ฮาร์ดแวร์ หากมีการเรียกใช้ set_callback() ก่อนหน้านี้เพื่อเปิดใช้โหมดที่ไม่มีการบล็อก ระบบจะไม่บล็อก drain() แต่ควรแสดงผลอย่างรวดเร็วและระบบจะแจ้งให้ทราบผ่านคอลแบ็กเมื่อการเรียกใช้เสร็จสมบูรณ์ หากไม่ได้เรียกใช้ set_callback() drain() ต้องบล็อกจนกว่าจะเสร็จสมบูรณ์ หาก type==AUDIO_DRAIN_ALL การระบายจะเสร็จสมบูรณ์เมื่อเล่นข้อมูลที่เขียนไว้ก่อนหน้านี้ทั้งหมดแล้ว หาก type==AUDIO_DRAIN_EARLY_NOTIFY การเรียกเก็บเงินจะเสร็จสมบูรณ์ไม่นานก่อนที่ข้อมูลทั้งหมดของแทร็กปัจจุบันจะเล่นเพื่อให้เฟรมเวิร์กมีเวลาสลับแทร็กแบบไม่มีช่องว่าง
การเรียกใช้ drain ต้องแสดงผลทันทีเมื่อเรียกใช้ stop() และ flush()
การใช้ฟังก์ชันนี้เป็นสิ่งที่จำเป็นสำหรับการเล่นแบบออฟโหลด
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) |
แสดงผลจํานวนเฟรมเสียงล่าสุดที่แสดงต่อผู้สังเกตการณ์ภายนอก โดยไม่รวมเฟรมที่เขียนแล้วแต่ยังอยู่ในไปป์ไลน์ ระบบจะไม่รีเซ็ตการนับเป็น 0 เมื่อเอาต์พุตเข้าสู่โหมดสแตนด์บาย และจะแสดงค่า CLOCK_MONOTONIC ณ เวลานับการแสดงนี้ด้วย จำนวนที่แสดงผลควรเป็น "ล่าสุด" แต่ไม่จำเป็นต้องเป็นค่าล่าสุดที่เป็นไปได้ อย่างไรก็ตาม เวลาที่เกี่ยวข้องควรสอดคล้องกับจำนวนที่แสดง ตัวอย่างเช่น สมมติว่าระบบแสดงเฟรม N+M เฟรม โดยที่ M เป็นจํานวน "น้อย" ในกรณีนี้ คุณสามารถแสดงผล N แทน N+M และการประทับเวลาควรสอดคล้องกับ N ไม่ใช่ N+M ไม่ได้กําหนดคําว่า "ล่าสุด" และ "เล็ก" ซึ่งแสดงถึงคุณภาพของการติดตั้งใช้งาน
3.0 ขึ้นไปเท่านั้น
int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames) |
int(* pause)(struct audio_stream_out *stream) |
แจ้งให้โปรแกรมควบคุมเสียงหยุดเล่น แต่ฮาร์ดแวร์จะเก็บบัฟเฟอร์ที่จัดคิวไว้ มีประโยชน์ในการใช้งานการหยุดชั่วคราว/ทำงานต่อ การติดตั้งใช้งานแบบว่างหากระบบไม่รองรับ แต่ควรติดตั้งใช้งานสำหรับฮาร์ดแวร์ที่เวลาในการตอบสนองไม่มาก ในสถานะหยุดชั่วคราว ฮาร์ดแวร์เสียงอาจยังใช้พลังงานอยู่ ผู้ใช้อาจพิจารณาเรียกใช้การระงับหลังจากหมดเวลา
การใช้ฟังก์ชันนี้เป็นสิ่งที่จำเป็นสำหรับการเล่นแบบออฟโหลด
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) |
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
เขียนบัฟเฟอร์เสียงไปยังไดรเวอร์ แสดงผลจำนวนไบต์ที่เขียนหรือ status_t เชิงลบ หากเขียนเฟรมอย่างน้อย 1 เฟรมได้สําเร็จก่อนเกิดข้อผิดพลาด เราขอแนะนําให้ไดรเวอร์แสดงจํานวนไบต์ (สั้น) ที่เขียนได้สําเร็จ แล้วแสดงข้อผิดพลาดในการเรียกใช้ครั้งถัดไป
หากเรียกใช้ set_callback() ก่อนหน้านี้เพื่อเปิดใช้โหมดที่ไม่มีการบล็อก ระบบจะไม่อนุญาตให้ write() บล็อก โดยจะต้องเขียนเฉพาะจำนวนไบต์ที่พอดีกับบัฟเฟอร์ของไดรเวอร์/ฮาร์ดแวร์ในขณะนี้ แล้วแสดงผลจำนวนไบต์นี้ หากค่านี้น้อยกว่าขนาดการเขียนที่ขอ ระบบจะต้องเรียกใช้ฟังก์ชัน Callback เมื่อมีพื้นที่ว่างมากขึ้นในบัฟเฟอร์ของไดรเวอร์/ฮาร์ดแวร์
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้
- hardware/libhardware/include/hardware/ audio.h