连续签到天数:1天 | 签到总天数:256天 | 签到总奖励:6406金币 |
|
本帖最后由 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的宏定义
- 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;
- }
复制代码
- void handleA2DPUserEqBankUpdate(void)
- {
- user_eq_bank_t *PEQ = NULL;
- PEQ = sinkAudioGetPEQ();
- //if(PEQ && (PEQ->bands[0].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[index].filter;
- break;
- case eq_param_type_cutoff_freq:
- param.value = PEQ->bands[index].freq;
- break;
- case eq_param_type_gain:
- param.value = PEQ->bands[index].gain;
- break;
- case eq_param_type_q:
- param.value = PEQ->bands[index].Q;
- break;
- default:
- break;
- }
- AudioSetUserEqParameter(sinkAudioGetRoutedAudioTask(), ¶m);
- }
- AudioApplyUserEqParameters(sinkAudioGetRoutedAudioTask(), TRUE); //修改这里
- }
- }
- }
复制代码
附件为测试固件,qcc3034。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册 
×
|