ข้อมูลอ้างอิงเกี่ยวกับโครงสร้าง audio_stream_out

ข้อมูลอ้างอิงเกี่ยวกับโครงสร้าง 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 เป็นอินเทอร์เฟซการแยกแยะสำหรับฮาร์ดแวร์เอาต์พุตเสียง

ซึ่งจะให้ข้อมูลเกี่ยวกับพร็อพเพอร์ตี้ต่างๆ ของไดรเวอร์ฮาร์ดแวร์เอาต์พุตเสียง

คําจํากัดความที่บรรทัด 276 ของไฟล์ audio.h .

เอกสารประกอบในสนาม

struct audio_stream common

วิธีการทั่วไปของสตรีมเสียงออก ข้อมูลนี้ ต้อง เป็นสมาชิกแรกของ audio_stream_out เนื่องจากผู้ใช้โครงสร้างนี้จะแคสต์ audio_stream ไปยัง audio_stream_out พอยน์เตอร์ในบริบทที่ทราบว่า audio_stream อ้างอิงถึง audio_stream_out

คําจํากัดความที่บรรทัด 282 ของไฟล์ audio.h .

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()

การใช้ฟังก์ชันนี้เป็นสิ่งที่จำเป็นสำหรับการเล่นแบบออฟโหลด

คําจํากัดความที่บรรทัด 372 ของไฟล์ audio.h .

int(* flush)(struct audio_stream_out *stream)

แจ้งให้โปรแกรมควบคุมเสียงล้างข้อมูลที่รอดำเนินการ สตรีมต้องหยุดชั่วคราวแล้วก่อนที่จะเรียกใช้ flush()

การใช้ฟังก์ชันนี้เป็นสิ่งที่จำเป็นสำหรับการเล่นแบบออฟโหลด

คําจํากัดความที่บรรทัด 380 ของไฟล์ audio.h .

uint32_t(* get_latency)(const struct audio_stream_out *stream)

แสดงผลเวลาในการตอบสนองโดยประมาณของไดรเวอร์ฮาร์ดแวร์เสียงเป็นมิลลิวินาที

คําจํากัดความที่บรรทัด 287 ของไฟล์ audio.h .

int(* get_next_write_timestamp)(const struct audio_stream_out *stream, int64_t *timestamp)

รับเวลาท้องถิ่นที่การเขียนครั้งถัดไปไปยังไดรเวอร์เสียงจะแสดง หน่วยคือไมโครวินาที โดยที่ HAL เสียงในเครื่องจะเป็นตัวกำหนดจุดเริ่มต้น

คําจํากัดความที่บรรทัด 324 ของไฟล์ audio.h .

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 ขึ้นไปเท่านั้น

คําจํากัดความที่บรรทัด 398 ของไฟล์ audio.h .

int(* get_render_position)(const struct audio_stream_out *stream, uint32_t *dsp_frames)

คําจํากัดความที่บรรทัด 317 ของไฟล์ audio.h .

int(* pause)(struct audio_stream_out *stream)

แจ้งให้โปรแกรมควบคุมเสียงหยุดเล่น แต่ฮาร์ดแวร์จะเก็บบัฟเฟอร์ที่จัดคิวไว้ มีประโยชน์ในการใช้งานการหยุดชั่วคราว/ทำงานต่อ การติดตั้งใช้งานแบบว่างหากระบบไม่รองรับ แต่ควรติดตั้งใช้งานสำหรับฮาร์ดแวร์ที่เวลาในการตอบสนองไม่มาก ในสถานะหยุดชั่วคราว ฮาร์ดแวร์เสียงอาจยังใช้พลังงานอยู่ ผู้ใช้อาจพิจารณาเรียกใช้การระงับหลังจากหมดเวลา

การใช้ฟังก์ชันนี้เป็นสิ่งที่จำเป็นสำหรับการเล่นแบบออฟโหลด

คําจํากัดความที่บรรทัด 345 ของไฟล์ audio.h .

int(* resume)(struct audio_stream_out *stream)

แจ้งให้โปรแกรมควบคุมเสียงเล่นต่อหลังจากหยุดชั่วคราว แสดงข้อผิดพลาดหากเรียกใช้โดยไม่มีช่วงพักที่ตรงกัน

การใช้ฟังก์ชันนี้เป็นสิ่งที่จำเป็นสำหรับการเล่นแบบออฟโหลด

คําจํากัดความที่บรรทัด 353 ของไฟล์ audio.h .

int(* set_callback)(struct audio_stream_out *stream, stream_callback_t callback, void *cookie)

ตั้งค่าฟังก์ชันการเรียกกลับเพื่อแจ้งให้ทราบเมื่อการเขียนแบบไม่บล็อกและการเรียกใช้ข้อมูลจนหมดเสร็จสมบูรณ์ การเรียกใช้ฟังก์ชันนี้หมายความว่าการดำเนินการ write() และ drain() ในอนาคตทั้งหมดจะต้องเป็นแบบไม่บล็อกและใช้การเรียกกลับเพื่อส่งสัญญาณการทำงานเสร็จสมบูรณ์

คําจํากัดความที่บรรทัด 333 ของไฟล์ audio.h .

int(* set_volume)(struct audio_stream_out *stream, float left, float right)

ใช้วิธีนี้ในกรณีที่มีการผสมเสียงในฮาร์ดแวร์ วิธีนี้เป็นอินเทอร์เฟซโดยตรงกับฮาร์ดแวร์ ซึ่งช่วยให้คุณตั้งค่าระดับเสียงได้โดยตรงแทนที่จะผ่านเฟรมเวิร์ก วิธีนี้อาจสร้างเอาต์พุต PCM หลายรายการหรือตัวแปลงรหัสที่เร่งด้วยฮาร์ดแวร์ เช่น MP3 หรือ AAC

คําจํากัดความที่บรรทัด 296 ของไฟล์ audio.h .

ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes)

เขียนบัฟเฟอร์เสียงไปยังไดรเวอร์ แสดงผลจำนวนไบต์ที่เขียนหรือ status_t เชิงลบ หากเขียนเฟรมอย่างน้อย 1 เฟรมได้สําเร็จก่อนเกิดข้อผิดพลาด เราขอแนะนําให้ไดรเวอร์แสดงจํานวนไบต์ (สั้น) ที่เขียนได้สําเร็จ แล้วแสดงข้อผิดพลาดในการเรียกใช้ครั้งถัดไป

หากเรียกใช้ set_callback() ก่อนหน้านี้เพื่อเปิดใช้โหมดที่ไม่มีการบล็อก ระบบจะไม่อนุญาตให้ write() บล็อก โดยจะต้องเขียนเฉพาะจำนวนไบต์ที่พอดีกับบัฟเฟอร์ของไดรเวอร์/ฮาร์ดแวร์ในขณะนี้ แล้วแสดงผลจำนวนไบต์นี้ หากค่านี้น้อยกว่าขนาดการเขียนที่ขอ ระบบจะต้องเรียกใช้ฟังก์ชัน Callback เมื่อมีพื้นที่ว่างมากขึ้นในบัฟเฟอร์ของไดรเวอร์/ฮาร์ดแวร์

คําจํากัดความที่บรรทัด 311 ของไฟล์ audio.h .


เอกสารประกอบสำหรับโครงสร้างนี้สร้างขึ้นจากไฟล์ต่อไปนี้
  • hardware/libhardware/include/hardware/ audio.h