解决开机打印“03-07 12:02:23.039 E/AudioHardwareMSM8660( 130): unknown stream”的问题。

原创 2012年03月29日 20:39:01

./hardware/qcom/media/audio/msm8660/AudioPolicyManager.cpp

 759 void AudioPolicyManager::setOutputDevice(audio_io_handle_t output, uint32_t device, bool force, int delayMs)

 760 {  //设置输出设备  DEVICE_OUT_AUX_DIGITAL = 0x400,

。。。。。。。

783     // Doing this check here allows the caller to call setOutputDevice() without conditions

 784     if ((device == 0 || device == prevDevice) && !force) {

 785         LOGV("setOutputDevice() setting same device %x or null device for output %d", device, output);

 786         return;

 787     }

// setParameters会调用doRouting遍历路由,将DEVICE_OUT_AUX_DIGITAL映射为SND_DEVICE_HDMI

840     mpClientInterface->setParameters(mHardwareOutput, param.toString(), delayMs);

 841     // update stream volumes according to new device

843     AudioPolicyManagerBase::applyStreamVolumes(output, device, delayMs);

 

}

 

hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp

2182 void AudioPolicyManagerBase::applyStreamVolumes(audio_io_handle_t output, uint32_t device, int delayMs, bool force)

2183 { //11种流类型设置音量

2184     LOGV("applyStreamVolumes() for output %d and device %x", output, device);

2185

2186     for (int stream = 0; stream < AudioSystem::NUM_STREAM_TYPES; stream++) {

2187         checkAndSetVolume(stream, mStreams[stream].mIndexCur, output, device, delayMs, force);

2188     }

2189 }

2190

 

./hardware/qcom/media/audio/msm8660/AudioPolicyManager.cpp

883 status_t AudioPolicyManager::checkAndSetVolume(int stream, int index, audio_io_handle_t output, uint32_t device, int delayMs, bool force)

 884 {

901     float volume = computeVolume(stream, index, output, device);

 902     // do not set volume if the float value did not change

 903     if ((volume != mOutputs.valueFor(output)->mCurVolume[stream]) || (stream == AudioSystem::VOICE_CALL) || (stream == AudioSystem::FM) || force) {

 905         mOutputs.valueFor(output)->mCurVolume[stream] = volume;

907         if (stream == AudioSystem::VOICE_CALL ||

 908             stream == AudioSystem::DTMF ||

 909             stream == AudioSystem::BLUETOOTH_SCO) {

 910             float voiceVolume = -1.0;

 911             // offset value to reflect actual hardware volume that never reaches 0

 912             // 1% corresponds roughly to first step in VOICE_CALL stream volume setting (see AudioService.java)

 913             volume = 0.01 + 0.99 * volume;

 914             if (stream == AudioSystem::VOICE_CALL) {

 915                 voiceVolume = (float)index/(float)mStreams[stream].mIndexMax;

 916             } else if (stream == AudioSystem::BLUETOOTH_SCO) {

 917                 voiceVolume = 1.0;

 918             }

 919             if (voiceVolume >= 0 && output == mHardwareOutput) {

 920                

 921                 mpClientInterface->setVoiceVolume(voiceVolume, delayMs);

 922             }

 923         }

 934         mpClientInterface->setStreamVolume((AudioSystem::stream_type)stream, volume, output, delayMs);

 935     }

 936

然后经过AudioPolicyService AudioSystem AudioFlinger ,最终调用到AudioHardwareMSM8660,具体见3.

 

 

1221 status_t AudioHardware::setVoiceVolume(float v)

1222 {

1223     int session_id = 0;

1224     if (v < 0.0) {

1225         LOGW("setVoiceVolume(%f) under 0.0, assuming 0.0\n", v);

1226         v = 0.0;

1227     } else if (v > 1.0) {

1228         LOGW("setVoiceVolume(%f) over 1.0, assuming 1.0\n", v);

1229         v = 1.0;

1230     }

1233     if(isStreamOnAndActive(VOICE_CALL)) {

1234         session_id = voice_session_id;

1235     } else if (isStreamOnAndActive(VOIP_CALL)) {

1236         session_id = voip_session_id;

1237     } else { //由于VOICE_CALL并没有active,(在遍历路由时决定是否active)所以。。。

1238         LOGE(" unknown stream ");

1239         return -1;

1240     }

 

1254 }

 

在设置输出设备为DEVICE_OUT_AUX_DIGITAL时,会对11种流类型设置音量,其中对VOICE_CALL类型设置音量时,由于系统没有VOICE_CALL,没有active,所以打印“unknown stream

AudioPolicyManager::getDeviceForStrategy

getStrategy根据StreamType得到Strategy,AudioPolicyManager再从mOutputRoutes里查出Strategy和前面得到的Strategy相等的Route...
  • Damon_X
  • Damon_X
  • 2016年06月14日 09:48
  • 1016

Android警告错误搜集

7.close() was never explicitly called on database onDestroy的时候调用close()方法 6.No resource identifier f...
  • ximen250
  • ximen250
  • 2013年01月11日 11:53
  • 22163

Android Audio代码分析7 - stream type

在看AudioTrack代码的时候,我们看到,要创建一个AudioTrack对象,需要指定一个StreamType。 今天我们只把stream type相关的代码抽取出来,详细看看stream ty...
  • njuitjf
  • njuitjf
  • 2011年10月07日 22:53
  • 8198

面试题2:byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?class Demo2 { public static void main(String[] args) { ...
  • xielting
  • xielting
  • 2015年05月30日 11:02
  • 2581

面试题:byte b = 130;有没有问题?

byte b = 130;有没有问题?,(有)。如果我想让赋值正确,可以怎么做(强制类型转换,截取最低一个字节)?结果是多少呢? 源代码: class Test { public static ...
  • u012110719
  • u012110719
  • 2015年05月30日 10:44
  • 2954

Lamp环境下编写PHP代码时出现错误:Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0

Lamp环境下编写PHP代码时出现错误:Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 ...
  • chenyanggo
  • chenyanggo
  • 2012年04月04日 22:30
  • 6870

git 一些常见问题

问题:Auto packing the repository in background for optimum performance. See "git help gc" for manual h...
  • dxk539687357
  • dxk539687357
  • 2017年01月20日 10:04
  • 2649

nios ide 编译出错java.net.MalformedURLException unknown protocol e解决方法

Build出错 nios ii ide system setting files creationfailed for creation project System settings fil...
  • kobesdu
  • kobesdu
  • 2015年09月08日 08:56
  • 1481

Java输入输出 Stream

1.什么是IO       Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。...
  • lichongya
  • lichongya
  • 2015年12月17日 19:11
  • 1297

通过PassManager 写MachineFunctionpass

简介: 最近在做和llvm后端有关的项目,研究了一下llvm的Pass manager. 大家比较熟悉的是llvm里有几种形式,具体的参照官方的文档. http://llvm.org/doc...
  • dongjideyu
  • dongjideyu
  • 2018年02月02日 17:21
  • 43
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决开机打印“03-07 12:02:23.039 E/AudioHardwareMSM8660( 130): unknown stream”的问题。
举报原因:
原因补充:

(最多只允许输入30个字)