修复 qcc3034 gaia eq修改无法保存的bug
本帖最后由 jjr 于 2022-9-4 12:12 编辑bug原因分析和解决办法参考这个帖子,
https://www.52bluetooth.com/forum.php?mod=viewthread&tid=84914&extra=page%3D1
之前帖子只是分析了bug参数的原因和可能修复的方法,这里说明下具体方法。
采用方法1修复,方法2过于复杂(因为gaia的数据和eq的数据格式不同,需要转换)
默认代码eq已经做了关机保存动作,需要实时保存的将关机的保存动作放入gaia 修改eq的地方即可。
1. 开启ENABLE_GAIA和ENABLE_GAIA_PERSISTENT_USER_EQ_BANK的宏定义
**** Hidden Message *****
static bool audioRouteSource(audio_sources source)
{
bool routing_success = FALSE;
if(isAudioRoutingPermitted(source))
{
switch (source)
{
case audio_source_FM:
routing_success = audioRouteFMIfAvailable();
break;
case audio_source_ANALOG:
routing_success = audioRouteAnalogIfAvailable();
break;
case audio_source_SPDIF:
routing_success = audioRouteSpdifIfAvailable();
break;
case audio_source_I2S:
routing_success = audioRouteI2SIfAvailable();
break;
case audio_source_USB:
routing_success = audioRouteUsbIfAvailable();
break;
case audio_source_a2dp_1:
case audio_source_a2dp_2:
routing_success = audioRouteA2dpIfAvailable(source);
break;
case audio_source_ba:
routing_success = audioRouteBaIfAvailable();
break;
case audio_source_none:
default:
break;
}
AUD_DEBUG(("AUD: audioRouteSource source = %d routed = %d\n", source, routing_success));
}
if(routing_success) //这里是添加的
MessageSendLater(&theSink.task, AUDIO_DSP_READY_FOR_DATA, 0, 0);
/* Disconnect any currently routed sources in case requested source didn't make it.*/
if ((routing_success == FALSE) && (sinkAudioIsAudioRouted()))
{
AUD_DEBUG(("AUD: Nothing to route, disconnecting\n"));
audioSuspendDisconnectAudioSource();
updateVolumeBasedOnRoutedSources();
}
displayUpdateAudioSourceText(sinkAudioGetRoutedAudioSource());
/* indicate whether audio was successfully routed or not */
return routing_success;
}**** Hidden Message *****
void handleA2DPUserEqBankUpdate(void)
{
user_eq_bank_t *PEQ = NULL;
PEQ = sinkAudioGetPEQ();
//if(PEQ && (PEQ->bands.Q != 0))
if(PEQ) //修改这里
{
uint16 index = 0;
eq_param_type_t param_type = 0;
audio_plugin_user_eq_param_t param;
param.id.bank = 1;
param.id.band = 0;
param.id.param_type = 0;
param.value = MAX_EQ_BANDS; /* Number of Banks */
AudioSetUserEqParameter(sinkAudioGetRoutedAudioTask(), ¶m);
param.id.param_type = 1;
param.value = PEQ->preGain;/* Master Gain */
AudioSetUserEqParameter(sinkAudioGetRoutedAudioTask(), ¶m);
for(index = 0; index < MAX_EQ_BANDS; index++)
{
param.id.bank = 1;
param.id.band = index + 1;
for (param_type = 0; param_type < eq_param_max_param_types; param_type++)
{
param.id.param_type = param_type;
switch (param_type)
{
case eq_param_type_filter:
param.value = PEQ->bands.filter;
break;
case eq_param_type_cutoff_freq:
param.value = PEQ->bands.freq;
break;
case eq_param_type_gain:
param.value = PEQ->bands.gain;
break;
case eq_param_type_q:
param.value = PEQ->bands.Q;
break;
default:
break;
}
AudioSetUserEqParameter(sinkAudioGetRoutedAudioTask(), ¶m);
}
AudioApplyUserEqParameters(sinkAudioGetRoutedAudioTask(), TRUE); //修改这里
}
}
}
附件为测试固件,qcc3034。
感谢分享! 感谢分享。 学习学习! 按照楼主的方法 gaia 修改eq的bug终于解决了,非常感谢!但是自己尝试实时保存gaia设置的eq,实现直接断电后也可以保存,但是没有成功。楼主能否帮忙解决一下,感谢!!! wujianwei369 发表于 2022-9-5 14:12
按照楼主的方法 gaia 修改eq的bug终于解决了,非常感谢!但是自己尝试实时保存gaia设置的eq,实现直接断电 ...
这个是保存参数的函数,在gaia 写eq的时候调用即可。放这个下面试试。
感谢分享! 好牛呀 paylaşım için teşekkür ederim.. Quá tuyệt!