הסבר על המבנה של audio_stream_out

הסבר על המבנה של audio_stream_out

#include < audio.h >

שדות נתונים

struct audio_stream   נפוץ
 
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, תהליך הניקוז מסתיים זמן קצר לפני שהנתונים של הטראק הנוכחי מושמעים, כדי לתת ל-framework זמן לבצע מעבר לטראק ללא הפסקה.

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)

לקבל את השעה המקומית שבה תוצג הכתיבה הבאה ל-audio driver. היחידות הן מיקרו-שניות, וה-epoch נקבע על ידי ה-HAL המקומי של האודיו.

ההגדרה מופיעה בשורה 324 בקובץ audio.h .

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 ואילך בלבד.

ההגדרה מופיעה בשורה 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)

הגדרת פונקציית ה-callback לצורך קבלת הודעה על השלמת הכתיבה והניקוז ללא חסימה. קריאה לפונקציה הזו מחייבת שכל הקריאות הבאות ל- 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. אם לפחות פריים אחד נכתב בהצלחה לפני השגיאה, מומלץ שהדרייבר יחזיר את מספר הבייטים (הקצר) שהועברו בהצלחה, ולאחר מכן יחזיר שגיאה בקריאה הבאה.

אם הקריאה ל- set_callback()‎ בוצעה בעבר כדי להפעיל מצב ללא חסימה, אסור ל- write()‎ לחסום. הוא צריך לכתוב רק את מספר הבייטים שמתאימים כרגע למאגר של התוכנה או החומרה, ואז להחזיר את מספר הבייטים הזה. אם הוא קטן מגודל הכתיבה המבוקש, צריך לקרוא לפונקציית הקריאה החוזרת כשיהיה מקום פנוי נוסף במאגר הנתונים הזמני של ההתקן או של מנהל ההתקן.

ההגדרה מופיעה בשורה 311 בקובץ audio.h .


התיעוד של המבנה הזה נוצר מהקובץ הבא:
  • hardware/libhardware/include/hardware/ audio.h