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_out पॉइंटर पर audio_stream को तब कास्ट करेंगे, जब यह पता हो कि 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 है, तो मौजूदा ट्रैक का पूरा डेटा चलने से पहले ही ड्रेन पूरा हो जाता है. इससे फ़्रेमवर्क को गैपलेस ट्रैक स्विच करने का समय मिल जाता है.
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) |
बिना ब्लॉक किए लिखने और डेटा निकालने की प्रोसेस पूरी होने की सूचना देने के लिए, कॉलबैक फ़ंक्शन सेट करें. इस फ़ंक्शन को कॉल करने का मतलब है कि आने वाले समय में, write() और drain() का इस्तेमाल, बिना ब्लॉक किए किया जाना चाहिए. साथ ही, काम पूरा होने का सिग्नल देने के लिए कॉलबैक का इस्तेमाल किया जाना चाहिए.
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