مرجع بنية 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 هي واجهة تجريدية لأجهزة إخراج الصوت.
يوفّر هذا القسم معلومات عن السمات المختلفة لبرنامج تشغيل أجهزة إخراج الصوت.
مستندات الحقل
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) |
عرض عدد اللقطات الأخيرة لعدد لقطات الصوت التي تم عرضها على مراقب خارجي ولا يشمل ذلك اللقطات التي تمّت كتابتها ولكنّها لا تزال في قناة الإصدار. لا تتم إعادة ضبط العدد على الصفر عندما يدخل الإخراج في وضع الاستعداد. تعرض أيضًا قيمة 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) |
استخدِم هذه الطريقة في الحالات التي يتم فيها مزج الصوت في الجهاز. تُعدّ هذه الطريقة واجهة مباشرة مع الأجهزة، ما يتيح لك ضبط مستوى الصوت مباشرةً بدلاً من استخدام إطار العمل. قد تؤدي هذه الطريقة إلى إنشاء عدة نواتج PCM أو برامج ترميز مُسرَّعة بالأجهزة، مثل MP3 أو AAC.
ssize_t(* write)(struct audio_stream_out *stream, const void *buffer, size_t bytes) |
كتابة ذاكرة التخزين المؤقت للصوت إلى برنامج تشغيل الصوت تعرِض عدد وحدات البايت التي تمّ كتابتها، أو قيمة سالبة لـ status_t. إذا تمّت كتابة إطار واحد على الأقلّ بنجاح قبل حدوث الخطأ، يُنصح بأن يعرض برنامج التشغيل عدد البايتات (القصير) الناجح ثم يعرض خطأ في الطلب اللاحق.
إذا سبق أن تم استدعاء دالة set_callback() لتفعيل وضع عدم الحظر، لا يُسمح بحظر دالة write() . يجب أن يكتب فقط عدد وحدات البايت التي تتناسب حاليًا مع وحدة تخزين المؤقت للبرنامج أو الجهاز، ثم يعرض عدد وحدات البايت هذا. إذا كان هذا الحجم أقل من حجم الكتابة المطلوب، يجب استدعاء وظيفة ردّ الاتصال عندما تتوفّر مساحة أكبر في مخزن الوسائط للسائق أو الجهاز.
تم إنشاء مستندات هذه البنية من الملف التالي:
- hardware/libhardware/include/hardware/ audio.h