audio_stream_out مرجع ساختار
#include < audio.h >
فیلدهای داده | |
ساخت 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(* | نوشتن )(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(* | مکث )( ساخت audio_stream_out *stream) |
int(* | رزومه )(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 مشترک |
روش های رایج پخش صدا این باید اولین عضو 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() نباید مسدود شود، در عوض باید به سرعت برگردد و اتمام تخلیه از طریق callback اطلاع داده می شود. اگر set_callback() فراخوانی نشده باشد، drain() باید تا تکمیل مسدود شود. اگر نوع ==AUDIO_DRAIN_ALL، تخلیه زمانی کامل می شود که تمام داده های نوشته شده قبلی پخش شود. اگر نوع ==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+M، N را برگردانیم، و مهر زمانی باید به جای N+M با N مطابقت داشته باشد. اصطلاحات "اخیر" و "کوچک" تعریف نشده اند. آنها کیفیت اجرا را منعکس می کنند.
فقط 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 قبلا برای فعال کردن حالت غیر مسدود فراخوانی شده باشد ، نوشتن () مجاز به مسدود کردن نیست. باید فقط تعداد بایت هایی را بنویسد که در حال حاضر در بافر درایور/سخت افزار قرار دارند و سپس این تعداد بایت را برگرداند. اگر این اندازه کمتر از اندازه نوشتن درخواستی باشد، زمانی که فضای بیشتری در بافر درایور/سختافزار در دسترس است، باید تابع تماس را فراخوانی کرد.
مستندات این ساختار از فایل زیر تولید شده است:
- hardware/libhardware/include/hardware/ audio.h