ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2010年11月17日 星期三

Software Audio Driver Interface Stub,,

參考這個 : Android Build System 要是變更了 BoardConfig.mk,好像要.. make installclean 再作 make 否則好像沒效,BoardConfig.mk的修改不會進去.. .. 這樣更慘,有些 bin/ 下的 tool 不會重 build XD. 所以還是乖乖用 find 找出有用到的 module,一一touch 後再 mm ? Cleanup 好像是 m clean 如果要 clean 所有 build 出來的 binary 檔: m clobber ... 他說這個 command 就是把 out 這個 folder 刪掉 >_<
Audio 是在 framework/base/libs Android 有提供一個 AudioStub,讓 Hardware 的 Audio 還沒好的時候,可以用這個Stub 提供 Audio 需要的 Interface。 要使用這個 Stub,需要在 BoardConfig.mk 裡 Enabel BOARD_USES_GENERIC_AUDIO := true 這樣 framework/base/libs/audioflinger 的 Android.mk 就會 define. ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true) LOCAL_CFLAGS += -DGENERIC_AUDIO 這樣在 AudioHardwareInterface.cpp .. AudioHardwareInterface* AudioHardwareInterface::create() { AudioHardwareInterface* hw = 0; char value[PROPERTY_VALUE_MAX]; #ifdef GENERIC_AUDIO hw = new AudioHardwareGeneric(); #else 還有 AudioPolicyService.cpp .. AudioPolicyService::AudioPolicyService() : BnAudioPolicyService() , mpPolicyManager(NULL) { char value[PROPERTY_VALUE_MAX]; // start tone playback thread mTonePlaybackThread = new AudioCommandThread(String8("")); // start audio commands thread mAudioCommandThread = new AudioCommandThread(String8("ApmCommandThread")); #if (defined GENERIC_AUDIO) || (defined AUDIO_POLICY_TEST) mpPolicyManager = new AudioPolicyManagerBase(this); LOGV("build for GENERIC_AUDIO - using generic audio policy"); #else 改完build 還是會有一堆問題...例如...用 showcommands 看 GENERIC_AUDIO 好像沒 define.. 最後好像是 touch 所有的 audioglinger/ 下的 file 再重 build 才看到。
實際使用時,因為這次 AudioCodec hardware 還沒 ready,所以一旦access 到 codec 就會 down 機。 上面的 code 還是會 access 到 codec,所以要稍微修改一下,不嘗試 new AudioHardwareGeneric(),直接 new AudioHardwareStub( ): AudioHardwareInterface* AudioHardwareInterface::create() { /* * FIXME: This code needs to instantiate the correct audio device * interface. For now - we use compile-time switches. */ AudioHardwareInterface* hw = 0; char value[PROPERTY_VALUE_MAX]; #if 0 #ifdef GENERIC_AUDIO hw = new AudioHardwareGeneric(); #else // if running in emulation - use the emulator driver if (property_get("ro.kernel.qemu", value, 0)) { LOGD("Running in emulation - using generic audio driver"); hw = new AudioHardwareGeneric(); } else { LOGV("Creating Vendor Specific AudioHardware"); hw = createAudioHardware(); } #endif if (hw->initCheck() != NO_ERROR) { LOGW("Using stubbed audio hardware. No sound will be produced."); delete hw; hw = new AudioHardwareStub(); } #else hw = new AudioHardwareStub(); LOGW("Using stubbed audio hardware. No sound will be produced."); #endif // if 0
好像是因為 GENERIC_AUDIO 沒有 A2DP 的 support,所以也要把 bluetooth 的 A2DP profile disable.

沒有留言:

標籤

網誌存檔