android播放视频时在立体声与单声道之间切换无变化原因分析及解决
程序员文章站
2023-11-12 10:09:28
部分客户客户使用第三方视频播放器,有立体声与单声道之间切换,发现切换后无作用 原因是由于在hal层默认没有处理上层发的stereo 转mono的命令,所以会没有效果, 可按...
部分客户客户使用第三方视频播放器,有立体声与单声道之间切换,发现切换后无作用
原因是由于在hal层默认没有处理上层发的stereo 转mono的命令,所以会没有效果,
可按如下修改,添加相关处理:
1修改audiomtkhardware.cpp
添加:static string8 keysetstereo2monomode = string8("enablestereooutput");
2.修改status_t audiomtkhardware::setparameters(const string8 &keyvaluepairs)
在exit_setparameters:
之前添加:
if (param.getint(keysetstereo2monomode, value) == no_error) {
alogd("setparameters(): %s value=%d", keyvaluepairs.string(),value);
((audiomtkstreammanager*)maudiomtkstreammanager)->forcesterer2mono(value);
}
3.修改audiomtkstreammanager.h
添加public方法定义:
status_t forcesterer2mono(bool flag);
status_t audiomtkstreammanager::forcesterer2mono(bool flag)
{
// force all stream to standby
alogd("forcesterer2mono = %d",flag);
if (mstreamoutvector.size()) {
for (size_t i = 0; i < mstreamoutvector.size() ; i++) {
audiomtkstreamout *ptempout = (audiomtkstreamout *)mstreamoutvector.valueat(i);
ptempout->setstereotomonoflagforce(flag);
}
}
return no_error;
}
4.修改audiomtkstreamout.h
t添加定义:
status_t setstereotomonoflagforce(bool flag);
status_t audiomtkstreamout::setstereotomonoflagforce(bool flag)
{
alogd("setstereotomonoflagforce = %d",flag);
msterotomono = flag;
return no_error;
}
原因是由于在hal层默认没有处理上层发的stereo 转mono的命令,所以会没有效果,
可按如下修改,添加相关处理:
1修改audiomtkhardware.cpp
添加:static string8 keysetstereo2monomode = string8("enablestereooutput");
2.修改status_t audiomtkhardware::setparameters(const string8 &keyvaluepairs)
在exit_setparameters:
之前添加:
复制代码 代码如下:
if (param.getint(keysetstereo2monomode, value) == no_error) {
alogd("setparameters(): %s value=%d", keyvaluepairs.string(),value);
((audiomtkstreammanager*)maudiomtkstreammanager)->forcesterer2mono(value);
}
3.修改audiomtkstreammanager.h
添加public方法定义:
复制代码 代码如下:
status_t forcesterer2mono(bool flag);
status_t audiomtkstreammanager::forcesterer2mono(bool flag)
{
// force all stream to standby
alogd("forcesterer2mono = %d",flag);
if (mstreamoutvector.size()) {
for (size_t i = 0; i < mstreamoutvector.size() ; i++) {
audiomtkstreamout *ptempout = (audiomtkstreamout *)mstreamoutvector.valueat(i);
ptempout->setstereotomonoflagforce(flag);
}
}
return no_error;
}
4.修改audiomtkstreamout.h
t添加定义:
复制代码 代码如下:
status_t setstereotomonoflagforce(bool flag);
status_t audiomtkstreamout::setstereotomonoflagforce(bool flag)
{
alogd("setstereotomonoflagforce = %d",flag);
msterotomono = flag;
return no_error;
}