การอ้างอิงโครงสร้าง audio_stream_out
#include < audio.h >
เขตข้อมูล | |
โครงสร้าง audio_stream | ทั่วไป |
uint32_t(* | get_latency ) (สร้าง struct audio_stream_out * สตรีม) |
อินท์(* | set_volume )(struct audio_stream_out *สตรีม, ลอยไปทางซ้าย, ลอยไปทางขวา) |
ssize_t(*) | เขียน )(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
อินท์(* | get_render_position ) (const struct audio_stream_out * สตรีม, uint32_t * dsp_frames) |
อินท์(* | get_next_write_timestamp ) (const struct audio_stream_out * สตรีม, int64_t * การประทับเวลา) |
อินท์(* | set_callback ) (struct audio_stream_out * สตรีม, การโทรกลับ stream_callback_t , เป็นโมฆะ * คุกกี้) |
อินท์(* | หยุดชั่วคราว )(struct audio_stream_out *stream) |
อินท์(* | ดำเนินการต่อ )(struct audio_stream_out *stream) |
อินท์(* | ท่อระบายน้ำ ) (struct audio_stream_out * สตรีม, ประเภท audio_drain_type_t ) |
อินท์(* | ล้าง )(struct audio_stream_out *stream) |
อินท์(* | get_presentation_position )(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
คำอธิบายโดยละเอียด
audio_stream_out เป็นอินเทอร์เฟซนามธรรมสำหรับฮาร์ดแวร์เอาต์พุตเสียง
โดยให้ข้อมูลเกี่ยวกับคุณสมบัติต่างๆ ของไดรเวอร์ฮาร์ดแวร์เอาต์พุตเสียง
เอกสารภาคสนาม
struct audio_stream ทั่วไป |
วิธีการทั่วไปในการสตรีมเสียงออก นี่ จะต้อง เป็นสมาชิกคนแรกของ audio_stream_out เนื่องจากผู้ใช้โครงสร้างนี้จะส่งตัวชี้ audio_stream ไปยัง audio_stream_out ในบริบทที่ทราบว่า audio_stream อ้างอิงถึง audio_stream_out
int (* ท่อระบายน้ำ) (struct audio_stream_out * สตรีม, ประเภท audio_drain_type_t ) |
ร้องขอการแจ้งเตือนเมื่อมีการเล่นข้อมูลที่บัฟเฟอร์โดยไดรเวอร์/ฮาร์ดแวร์ หากก่อนหน้านี้ set_callback() ถูกเรียกเพื่อเปิดใช้งานโหมดที่ไม่ปิดกั้น ท่อระบายน้ำ () จะต้องไม่ปิดกั้น แต่ควรกลับมาอย่างรวดเร็วแทน และการแจ้งเตือนความสมบูรณ์ของท่อระบายน้ำจะได้รับแจ้งผ่านการเรียกกลับ หากไม่ได้เรียก set_callback() ท่อ ระบายน้ำ () จะต้องบล็อกจนกว่าจะเสร็จสิ้น หาก type==AUDIO_DRAIN_ALL ระบบระบายจะเสร็จสมบูรณ์เมื่อมีการเล่นข้อมูลที่เขียนไว้ก่อนหน้านี้ทั้งหมด หาก type==AUDIO_DRAIN_EARLY_NOTIFY การระบายจะเสร็จสมบูรณ์ในไม่ช้าก่อนที่ข้อมูลทั้งหมดสำหรับแทร็กปัจจุบันจะเล่น เพื่อให้มีเวลาสำหรับเฟรมเวิร์กในการดำเนินการสลับแทร็กแบบไม่มีช่องว่าง
ท่อระบายน้ำจะต้องกลับมาทันทีเมื่อหยุด () และ ล้าง () โทร
การใช้งานฟังก์ชันนี้จำเป็นสำหรับการเล่นแบบออฟโหลด
int(* ล้าง) (struct audio_stream_out * สตรีม) |
uint32_t(* get_latency)(const struct audio_stream_out *สตรีม) |
int (* get_next_write_timestamp) (const struct audio_stream_out * สตรีม, int64_t * การประทับเวลา) |
int(* get_presentation_position)(const struct audio_stream_out *stream, uint64_t *frames, struct timespec *timestamp) |
ส่งกลับการนับล่าสุดของจำนวนเฟรมเสียงที่แสดงต่อผู้สังเกตการณ์ภายนอก นี่ไม่รวมเฟรมที่ถูกเขียนแต่ยังอยู่ในขั้นตอนการทำงาน การนับจะไม่รีเซ็ตเป็นศูนย์เมื่อเอาต์พุตเข้าสู่โหมดสแตนด์บาย ส่งคืนค่า CLOCK_MONOTONIC ณ จำนวนการนำเสนอนี้ด้วย จำนวนที่ส่งคืนคาดว่าจะเป็น 'ล่าสุด' แต่ไม่จำเป็นต้องเป็นค่าล่าสุดที่เป็นไปได้ อย่างไรก็ตาม เวลาที่เกี่ยวข้องควรสอดคล้องกับจำนวนที่ส่งคืน ตัวอย่าง: สมมติว่ามีการนำเสนอเฟรม N+M โดยที่ M คือตัวเลข 'น้อย' จากนั้น อนุญาตให้ส่งคืน N แทน N+M และการประทับเวลาควรสอดคล้องกับ N แทนที่จะเป็น N+M คำว่า 'ล่าสุด' และ 'เล็ก' ไม่ได้ถูกกำหนดไว้ สะท้อนถึงคุณภาพของการนำไปปฏิบัติ
3.0 และสูงกว่าเท่านั้น
int(* get_render_position)(const struct audio_stream_out *สตรีม, uint32_t *dsp_frames) |
int(* หยุดชั่วคราว) (struct audio_stream_out * สตรีม) |
แจ้งเตือนไปยังไดรเวอร์เสียงเพื่อหยุดการเล่น อย่างไรก็ตาม บัฟเฟอร์ที่อยู่ในคิวจะยังคงอยู่โดยฮาร์ดแวร์ มีประโยชน์สำหรับการดำเนินการหยุดชั่วคราว/ดำเนินการต่อ การใช้งานที่ว่างเปล่าหากไม่ได้รับการสนับสนุน อย่างไรก็ตาม ควรนำไปใช้กับฮาร์ดแวร์ที่มีเวลาแฝงที่ไม่สำคัญ ในสถานะหยุดชั่วคราว ฮาร์ดแวร์เสียงอาจยังคงใช้พลังงานอยู่ ผู้ใช้อาจพิจารณาการโทรระงับหลังจากหมดเวลา
การใช้งานฟังก์ชันนี้จำเป็นสำหรับการเล่นแบบออฟโหลด
int(* เรซูเม่) (struct audio_stream_out * สตรีม) |
int (* set_callback) (struct audio_stream_out * สตรีม, การโทรกลับ stream_callback_t , เป็นโมฆะ * คุกกี้) |
ตั้งค่าฟังก์ชันการโทรกลับเพื่อแจ้งเสร็จสิ้นการเขียนและระบายแบบไม่บล็อก การเรียกใช้ฟังก์ชันนี้หมายความว่า การเขียน () และ ท่อระบายน้ำ () ในอนาคตทั้งหมดจะต้องไม่ถูกบล็อกและใช้การโทรกลับเพื่อส่งสัญญาณให้เสร็จสิ้น
int(* set_volume)(struct audio_stream_out *stream, ลอยไปทางซ้าย, ลอยไปทางขวา) |
ssize_t(* เขียน)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
เขียนบัฟเฟอร์เสียงไปยังไดรเวอร์ ส่งกลับจำนวนไบต์ที่เขียน หรือสถานะติดลบ_t หากมีการเขียนอย่างน้อยหนึ่งเฟรมสำเร็จก่อนที่จะเกิดข้อผิดพลาด ขอแนะนำให้ไดรเวอร์ส่งคืนจำนวนไบต์ที่สำเร็จ (แบบสั้น) แล้วส่งคืนข้อผิดพลาดในการเรียกครั้งต่อไป
หากก่อนหน้านี้ set_callback() ถูกเรียกให้เปิดใช้งานโหมดที่ไม่ปิดกั้น การเขียน () จะไม่ได้รับอนุญาตให้บล็อก จะต้องเขียนเฉพาะจำนวนไบต์ที่พอดีกับบัฟเฟอร์ไดรเวอร์/ฮาร์ดแวร์ในปัจจุบัน จากนั้นจึงส่งคืนจำนวนไบต์นี้ หากน้อยกว่าขนาดการเขียนที่ร้องขอ จะต้องเรียกใช้ฟังก์ชันการเรียกกลับเมื่อมีเนื้อที่ว่างเพิ่มเติมในบัฟเฟอร์ไดรเวอร์/ฮาร์ดแวร์
เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้:
- ฮาร์ดแวร์ / libhardware / รวม / ฮาร์ดแวร์ / audio.h