audio 设备切换

这篇博客详细分析了Android设备中音频设备从speaker切换到耳机的操作过程,包括log日志解析,涉及到音频服务、AudioPolicyManager、AudioFlinger等组件在设备切换时的角色。主要步骤包括:播放mp3、停止speaker播放、插入耳机后的设备状态变更,并深入到HAL层的log分析设备切换的具体调用流程。
摘要由CSDN通过智能技术生成

1.打开声音的应用程序。例如:播放mp3,fm

1.1speaker播放mp3,而且是之前一直用的是speaker播放mp3

这段log针对hal层,c++。

--------- beginning of /dev/log/main
I/OdekakeDcfFile(  278): Invalid content
I/AudioService(  747):  AudioFocus  requestAudioFocus() from android.media.AudioManager@41437cd8com.sonyericsson.music.proxyservice.worker.Worker$AudioFocusHandler$1@4143c278
I/OdekakeDcfFile(  278): Invalid content
E/MediaPlayer( 4251): Uri is  <URL suppressed>
I/OdekakeDcfFile(  278): Invalid content
I/OdekakeDcfFile(  278): Invalid content
I/AudioService(  747):   Remote Control   registerMediaButtonIntent() for PendingIntent{427cf8e8: PendingIntentRecord{414176b8 com.sonyericsson.music broadcastIntent}}
I/SemcMusicPlayer( 4251): wakeLock isHeld: true
--------- beginning of /dev/log/system
E/NotificationService(  747): Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null])
I/SemcMusicPlayer( 4251): Received a CallState event. State: 0
I/OdekakeDcfFile(  278): Invalid content
D/QCUtilClass(  266): extended extractor not needed, return default
E/AwesomePlayer(  266): LPAPlayer::Clip duration setting of less than 30sec not supported, defaulting to 60sec
I/OdekakeDcfFile(  278): Invalid content
V/MusicFXControlPanelReceiver( 4577): onReceive
V/MusicFXControlPanelReceiver( 4577): Action: android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION
V/MusicFXControlPanelReceiver( 4577): Package name: com.sonyericsson.music
V/MusicFXControlPanelReceiver( 4577): Audio session: 88
V/MusicFXControlPanelEffect( 4577): openSession(android.app.ReceiverRestrictedContext@40f22fc8, com.sonyericsson.music, 88)
E/AwesomePlayer(  266): LPAPlayer::Clip duration setting of less than 30sec not supported, defaulting to 60sec
V/AudioPolicyManagerALSA(  266): getOutput() stream 3, samplingRate 0, format 0, channelMask 3, flags 0
V/AudioPolicyManagerALSA(  266): getOutput() returns output 2
V/AudioPolicyManagerALSA(  266): getOutput() stream 3, samplingRate 0, format 0, channelMask 3, flags 0
V/AudioPolicyManagerALSA(  266): getOutput() returns output 2
V/AudioPolicyManagerALSA(  266): getOutput() stream 3, samplingRate 44100, format 1, channelMask 3, flags 8
V/AudioPolicyManagerALSA(  266): getOutput() returns output 2
V/AudioPolicyManagerALSA(  266): getOutput() stream 3, samplingRate 0, format 0, channelMask 3, flags 0
V/AudioPolicyManagerALSA(  266): getOutput() returns output 2
V/AudioPolicyManagerALSA(  266): startOutput() output 2, stream 3, session 88
V/AudioPolicyManagerALSA(  266): getNewDevice() selected device 2
V/AudioPolicyManagerALSA(  266): setOutputDevice() output 2 device 0002 delayMs 0
E/AudioPolicyManagerALSA(  266): xiayu setOutputDevice() output 2 device 0002 delayMs 0 //以下是堆栈信息
D/CallStack(  266): #00  pc 0000b858  /system/lib/hw/audio_policy.msm8960.so (android_audio_legacy::AudioPolicyManager::setOutputDevice(int, unsigned int, bool, int)+79)
D/CallStack(  266): #01  pc 0000bd0e  /system/lib/hw/audio_policy.msm8960.so (android_audio_legacy::AudioPolicyManager::startOutput(int, android_audio_legacy::AudioSystem::stream_type, int)+289)
D/CallStack(  266): #02  pc 0000a2a8  /system/lib/hw/audio_policy.msm8960.so
D/CallStack(  266): #03  pc 000450ce  /system/lib/libaudioflinger.so (android::AudioPolicyService::startOutput(int, audio_stream_type_t, int)+31)
D/CallStack(  266): #04  pc 0004ce9a  /system/lib/libmedia.so (android::AudioSystem::startOutput(int, audio_stream_type_t, int)+23)
D/CallStack(  266): #05  pc 0003cb10  /system/lib/libaudioflinger.so (android::AudioFlinger::PlaybackThread::Track::start(android::AudioSystem::sync_event_t, int)+85)
D/CallStack(  266): #06  pc 0003342c  /system/lib/libaudioflinger.so (android::AudioFlinger::TrackHandle::start()+9)
D/CallStack(  266): #07  pc 0004535c  /system/lib/libmedia.so (android::AudioTrack::start()+199)
D/CallStack(  266): #08  pc 000708c0  /system/lib/libstagefright.so (android::AudioPlayer::start(bool)+515)
D/CallStack(  266): #09  pc 00073782  /system/lib/libstagefright.so (android::AwesomePlayer::startAudioPlayer_l(bool)+53)
D/CallStack(  266): #10  pc 000747fa  /system/lib/libstagefright.so (android::AwesomePlayer::play_l()+1057)
D/CallStack(  266): #11  pc 00074bde  /system/lib/libstagefright.so (android::AwesomePlayer::play()+45)
D/CallStack(  266): #12  pc 00034b28  /system/lib/libmediaplayerservice.so (android::MediaPlayerService::Client::start()+29)
D/CallStack(  266): #13  pc 000509be  /system/lib/libmedia.so (android::BnMediaPlayer::onTransact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+513)
D/CallStack(  266): #14  pc 0001435e  /system/lib/libbinder.so (android::BBinder::transact(unsigned int, android::Parcel const&, android::Parcel*, unsigned int)+57)
D/CallStack(  266): #15  pc 00016f5a  /system/lib/libbinder.so (android::IPCThreadState::executeCommand(int)+513)
D/CallStack(  266): #16  pc 000173a8  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+183)
D/CallStack(  266): #17  pc 0001b184  /system/lib/libbinder.so
D/CallStack(  266): #18  pc 00011264  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+111)
D/CallStack(  266): #19  pc 00010dca  /system/lib/libutils.so
D/CallStack(  266): #20  pc 0000e4b8  /system/lib/libc.so (__thread_entry+72)
D/CallStack(  266): #21  pc 0000dba4  /system/lib/libc.so (pthread_create+160)
V/AudioPolicyManagerALSA(  266): setOutputDevice() prevDevice 0002
V/AudioPolicyManagerALSA(  266): setOutputDevice() setting same device 0002 or null device for output 2 //
因为设备没有变化,所以直接返回,路由也不用改变了。
D/alsa_ucm(  266): snd_use_case_set(): uc_mgr 0x41f17578 identifier _enadev value xLoud Speaker
D/alsa_ucm(  266): snd_use_case_set(): uc_mgr 0x41f17578 identifier _verb value HiFi
D/alsa_ucm(  266): Set mixer controls for xLoud Speaker enable 1
D/alsa_ucm(  266): acdb_id 520 cap 1 enable 1
D/ACDB-LOADER(  266): ACDB -> send_audio_cal, acdb_id = 520, path =  0
D/ACDB-LOADER(  266): ACDB -> send_adm_topology
D/ACDB-LOADER(  266): ACDB -> ACDB_CMD_GET_AUDPROC_COMMON_TOPOLOGY_ID
D/ACDB-LOADER(  266): ACDB -> send_audtable
D/ACDB-LOADER(  266): ACDB -> ACDB_CMD_GET_AUDPROC_COMMON_TABLE
D/ACDB-LOADER(  266): ACDB -> AUDIO_SET_AUDPROC_CAL
D/ACDB-LOADER(  266): ACDB -> send_audvoltable
D/ACDB-LOADER(  266): ACDB -> ACDB_CMD_GET_AUDPROC_GAIN_DEP_VOLTBL_STEP_COPP
D/ACDB-LOADER(  266): ACDB -> AUDIO_SET_AUDPROC_VOL_CAL
D/ACDB-LOADER(  266): ACDB -> AUDIO_SET_AFE_CAL
D/alsa_ucm(  266): Setting mixer control: SLIM_0_RX Channels, value: Two
D/alsa_ucm(  266): Setting mixer control: RX3 MIX1 INP1, value: RX1
D/MediaPlayer( 4251): mContextLock Held Seek_To
D/MediaPlayer( 4251): seekTo() mUri is <URL suppressed>
D/alsa_ucm(  266): Setting mixer control: RX3 MIX1 INP2, value: RX2
D/alsa_ucm(  266): Setting mixer control: LINEOUT1 Volume, value: 100
D/alsa_ucm(  266): Setting mixer control: SLIM TX3 MUX, value: RMIX3
D/alsa_ucm(  266): Setting mixer control: SLIM TX5 MUX, value: RMIX3
D/alsa_ucm(  266): Setting mixer control: RX3 Digital Volume, value: 68
D/alsa_ucm(  266): Set mixer controls for HiFi enable 1
D/alsa_ucm(  266): Setting mixer control: SLIMBUS_0_RX Audio Mixer MultiMedia1, value: 1
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
D/BluetoothA2dpService(  747): uri is <URI SUPPRESSED> mUri is <URI SUPPRESSED>
D/BluetoothA2dpService(  747): PlaySatus is 3
D/BluetoothA2dpService(  747): Metadata received
D/BluetoothA2dpService(  747): Duration 223242
D/BluetoothA2dpService(  747): position 36467
D/BluetoothA2dpService(  747): playstate is 3
D/BluetoothA2dpService(  747): Update for same Uri, ignoring
D/MediaPlayer( 4251): mContextLock Held PLAYER_PLAY
D/MediaPlayer( 4251): start() mUri is <URL suppressed>
D/BluetoothA2dpService(  747): uri is <URI SUPPRESSED> mUri is <URI SUPPRESSED>
D/BluetoothA2dpService(  747): PlaySatus is 1
D/BluetoothA2dpService(  747): Metadata received
D/BluetoothA2dpService(  747): Duration 223242
D/BluetoothA2dpService(  747): position 36598
D/BluetoothA2dpService(  747): playstate is 1
D/BluetoothA2dpService(  747): Update for same Uri, ignoring
I/SemcMusicPlayer( 4251): wakeLock isHeld: true
D/MediaPlayer( 4617): mContextLock Released
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
E/NotificationService(  747): Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null])
D/MediaPlayer( 4617): mContextLock Released
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
D/MediaPlayer( 4251): mContextLock Held Seek_Complete
D/BluetoothA2dpService(  747): uri is <URI SUPPRESSED> mUri is <URI SUPPRESSED>
D/BluetoothA2dpService(  747): PlaySatus is 1
D/BluetoothA2dpService(  747): Metadata received
D/BluetoothA2dpService(  747): Duration 223242
D/BluetoothA2dpService(  747): position 36624
D/BluetoothA2dpService(  747): playstate is 1
D/BluetoothA2dpService(  747): Update for same Uri, ignoring
D/MediaPlayer( 4617): mContextLock Released
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
D/MediaPlayer( 4617): mContextLock Released
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
D/MediaPlayer( 4617): mContextLock Released
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
D/Preeffect(  266): Clear Stereo Off(0x80000001) for Speaker
D/MediaPlayer( 4617): mContextLock Released
D/Preeffect(  266): PRE_PARAM_CA_CHSEP Clear Stereo Off(0x80000001)
E/NotificationService(  747): Ignoring notification with icon==0: Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 kind=[null])
W/ContextImpl(  747): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1076 com.quicinc.cne.NsrmBackgroundEventHdlr.fireIntent:314 com.quicinc.cne.NsrmBackgroundEventHdlr.pollBackgroundEvents:407 com.quicinc.cne.NsrmBackgroundEventHdlr.access$600:41 com.quicinc.cne.NsrmBackgroundEventHdlr$3.run:251  
W/ContextImpl(  747): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1076 com.quicinc.cne.NsrmBackgroundEventHdlr.fireIntent:314 com.quicinc.cne.NsrmBackgroundEventHdlr.pollBackgroundEvents:415 com.quicinc.cne.NsrmBackgroundEventHdlr.access$600:41 com.quicinc.cne.NsrmBackgroundEventHdlr$3.run:251  
I/EventLogService( 1494): Aggregate from 91212127 (log), 91212127 (data)
D/dalvikvm( 1494): GC_CONCURRENT freed 455K, 75% free 2783K/10884K, paused 16ms+1ms, total 60ms

1.2stop speaker 播放mp3

--------- beginning of /dev/log/main
V/AudioPolicyManagerALSA(  266): stopOutput() output 2, stream 3, session 102
V/AudioPolicyManagerALSA(  266): getNewDevice() selected device 0
V/AudioPolicyManagerALSA(  266): setOutputDevice() output 2 device 0000 delayMs 276
E/AudioPolicyManagerALSA(  266): xiayu setOutputDevice() output 2 device 0000 delayMs 276//以下是堆栈
--------- beginning of /dev/log/system
I/ActivityManager(  747): No longer want com.sonyericsson.extras.liveware (pid 4858): empty for 1802s
I/SemcMusicPlayer( 4251): wakeLock isHeld: false
D/CallStack(  266): #00  pc 0000b858  /system/lib/hw/audio_policy.msm8960.so (android_audio_legacy::AudioPolicyManager::setOutputDevice(int, unsigned int, bool, int)+79)
D/CallStack(  266): #01  pc 0000bf44  /system/lib/hw/audio_policy.msm8960.so (android_audio_legacy::AudioPolicyManager::stopOutput(int, android_audio_legacy::AudioSystem::stream_type, int)+191)
D/CallStack(  266): #02  pc 0000a2b6  /system/lib/hw/audio_policy.msm8960.so
D/CallStack(  266): #03  pc 00045098  /system/lib/libaudioflinger.so (android::AudioPolicyService::stopOutput(int, audio_stream_type_t, int)+31)
D/CallStack(  266): #04  pc 0004ce76  /system/lib/libmedia.so (android::AudioSystem::stopOutput(int, audio_stream_ty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值