ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2014年7月9日 星期三

notes : android and alsa conf

alsa 和 android 的介面好像是靠 一個 conf 決定的。
有些說是 alsa.conf ,有些說是 asound.conf
在 android 4.2,是 /usr/share/alsa/alsa.conf 裡指定了 /etc/asound.conf

這個系統是在 /etc/asound.conf

這個檔案是在 /rootfs/rootdir/etc/ 下。
這是一個 prebuild folder, 該 file 也是預先寫定。
在 build system 時,rootdir 的內容會被整個 copy 到最後 image 的 root/ 中。

也就是說,實際系統的 /etc/asound.conf 就是這裡來的。


android 设置Audio Path 根据 getStrategy(stream_type) 和 getDeviceForStrategy() 取出對應的输出、输入,
然後 call setOutputDevice(mHardwareOutput, newDevice)
他會 call alsa_default.cpp
然後 會用到 s_route, s_open 控制到底層。

s_open 利用 deviceName(handle, devices, mode)
依照 Devices 動態組合出path字串,
用 snd_pcm_open( ) 依照 asound.conf 設定檔的 pcm 裡的 controls

所以 logcat 時可以看到:
D/AudioHardwareALSA(  674): openOutputStream called for devices: 0x00000002
I/ALSAModule(  674): s_close AndroidPlayback
D/ALSAModule(  674): open called for devices 00000002 in mode 0, channel 2...
E/ALSAModule(  674): s_open: AndroidPlayback_Speaker_normal
E/ALSALib (  674): external/alsa-lib/src/control/setup.c:565:(add_elem) Cannot obtain info for CTL elem (MIXER,'Speaker Switch',0,0,0): No such file or directory
E/ALSAModule(  674): s_open: AndroidPlayback_Speaker
E/ALSALib (  674): external/alsa-lib/src/control/setup.c:565:(add_elem) Cannot obtain info for CTL elem (MIXER,'Speaker Switch',0,0,0): No such file or directory
E/ALSAModule(  674): s_open: AndroidPlayback
D/ALSAModule(  674): force handle channels to 2
D/ALSAModule(  674): Set 48000 , handl channel 2
D/ALSAModule(  674): Set PCM format to S16_LE (Signed 16 bit Little Endian)
D/ALSAModule(  674): Using 2 channels for stream.
D/ALSAModule(  674): Set stream sample rate to 48000 HZ
D/ALSAModule(  674): Buffer size: 4096
D/ALSAModule(  674): Latency: 85333
I/ALSAModule(  674): Initialized ALSA PLAYBACK device AndroidPlayback_Speaker_normal
Error 是因為我改了 codec kcontrol name...

沒有留言:

標籤

網誌存檔