<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                AudioFlinger駐留于MediaServer進程中。回顧一下它的代碼,如下所示: **Main_MediaServer.cpp** ~~~ int main(int argc, char** argv) { sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager>sm = defaultServiceManager(); .... //很好,AF和APS都駐留在這個進程 AudioFlinger::instantiate(); AudioPolicyService::instantiate(); .... ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); } ~~~ 1. AudioFlinger的構造 **AudioFlinger.cpp** ~~~ void AudioFlinger::instantiate() { defaultServiceManager()->addService( //把AF添加到ServiceManager中 String16("media.audio_flinger"), new AudioFlinger()); } ~~~ 再來看它的構造函數: **AudioFlinger.cpp** ~~~ AudioFlinger::AudioFlinger(): BnAudioFlinger(), mAudioHardware(0), //代表Audio硬件的HAL對象 mMasterVolume(1.0f),mMasterMute(false), mNextThreadId(0) { mHardwareStatus= AUDIO_HW_IDLE; //創建代表Audio硬件的HAL對象 mAudioHardware = AudioHardwareInterface::create(); mHardwareStatus = AUDIO_HW_INIT; if(mAudioHardware->initCheck() == NO_ERROR) { //設置系統初始化的一些值,有一部分通過Audio HAL設置到硬件中 setMode(AudioSystem::MODE_NORMAL); setMasterVolume(1.0f); setMasterMute(false); } } ~~~ AudioHardwareInterface是Android對代表Audio硬件的封裝,屬于HAL層。HAL層的具體功能,由各個硬件廠商根據所選硬件的情況來實現,多以動態庫的形式提供。這里,簡單分析一下Audio HAL的接口,至于其具體實現就不做過多的探討了。 2. AudioHardwareInterface介紹 AudioHardwareInterface接口的定義在AudioHardwareInterface.h中。先看看它。 **AudioHardwareInterface.h::AudioHardwareInterface聲明** ~~~ class AudioHardwareInterface { public: virtual ~AudioHardwareInterface() {} //用于檢查硬件是否初始化成功,返回的錯誤碼定義在include/utils/Errors.h virtual status_t initCheck() =0; //設置通話音量,范圍從0到1.0 virtual status_t setVoiceVolume(float volume) = 0; /* 設置除通話音量外的其他所有音頻流類型的音量,范圍從0到1.0,如果硬件不支持的話, 這個功能會由軟件層的混音器完成 */ virtual status_t setMasterVolume(float volume) = 0; /* 設置模式,NORMAL的狀態為普通模式,RINGTONE表示來電模式(這時聽到的聲音是來電鈴聲) IN_CALL表示通話模式(這時聽到的聲音是手機通話過程中的語音) */ virtual status_t setMode(intmode) = 0; // 和麥克相關 virtual status_t setMicMute(bool state) = 0; virtual status_t getMicMute(bool* state) = 0; // 設置/獲取配置參數,采用key/value的組織方式 virtual status_t setParameters(const String8& keyValuePairs) = 0; virtual String8 getParameters(const String8& keys) = 0; // 根據傳入的參數得到輸入緩沖的大小,返回0表示其中某個參數的值Audio HAL不支持 virtualsize_t getInputBufferSize(uint32_tsampleRate, int format, int channelCount) = 0; /*下面這幾個函數非常重要 */ /* openOutputStream:創建音頻輸出流對象(相當于打開音頻輸出設備) AF可以往其中write數據,指針型參數將返回該音頻輸出流支持的類型、聲道數、采樣率等 */ virtual AudioStreamOut* openOutputStream( uint32_tdevices, int *format=0, uint32_t*channels=0, uint32_t*sampleRate=0, status_t*status=0) = 0; //關閉音頻輸出流 virtual void closeOutputStream(AudioStreamOut* out) = 0; /* 創建音頻輸入流對象(相當于打開音頻輸入設備),AF可以read數據*/ virtual AudioStreamIn* openInputStream( uint32_tdevices, int *format, uint32_t*channels, uint32_t *sampleRate, status_t*status, AudioSystem::audio_in_acoustics acoustics) = 0; virtual void closeInputStream(AudioStreamIn* in) =0; //關閉音頻輸入流 virtual status_t dumpState(int fd, const Vector<String16>&args) = 0; //靜態create函數,使用設計模式中的工廠模式,具體返回的對象由廠商根據硬件的情況決定 staticAudioHardwareInterface* create(); ...... }; ~~~ 根據上面的代碼,可以得出以下結論: - AudioHardwareInterface管理音頻輸出設備對象(AudioStreamOut)和音頻輸入設備對象(AudioStreamIn)的創建。 - 通過AudioHardwareInterface可設置音頻系統的一些參數。 圖7-6表示AudioHardwareInterface和音頻輸入輸出對象之間的關系以及它們的派生關系: :-: ![](http://img.blog.csdn.net/20150802160531741?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 圖7-6 AudioHardwareInterface關系圖 從圖7-6中還可看出: * 音頻輸出/輸入對象均支持設置參數(由setParameters完成)。 >[info] **說明**:AudioHardwareInterface最重要的功能是創建AudioStreamOut 和AudioStreamIn,它們分別代表音頻輸出設備和音頻輸入設備。從這個角度說,是AudioHardwareInterface管理著系統中所有的音頻設備。Android引入的HAL層,大大簡化了應用層的工作,否則不管是使用libasound(AlSA提供的用戶空間庫)還是ioctl來控制音頻設備,都會非常麻煩。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看