jjr 发表于 2022-9-4 12:09:02

修复 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。

wujianwei369 发表于 2022-9-5 08:59:58

感谢分享!

忙忙碌碌 发表于 2022-9-5 09:07:14

感谢分享。

yaoziqiang 发表于 2022-9-5 11:43:36

学习学习!

wujianwei369 发表于 2022-9-5 14:12:52

按照楼主的方法 gaia 修改eq的bug终于解决了,非常感谢!但是自己尝试实时保存gaia设置的eq,实现直接断电后也可以保存,但是没有成功。楼主能否帮忙解决一下,感谢!!!

jjr 发表于 2022-9-5 14:47:44

wujianwei369 发表于 2022-9-5 14:12
按照楼主的方法 gaia 修改eq的bug终于解决了,非常感谢!但是自己尝试实时保存gaia设置的eq,实现直接断电 ...




这个是保存参数的函数,在gaia 写eq的时候调用即可。放这个下面试试。


mahaju 发表于 2022-9-8 09:14:11


感谢分享!

galaxyq 发表于 2022-9-17 13:51:47

好牛呀

elitend 发表于 2022-9-18 06:39:01

paylaşım için teşekkür ederim..

Viettel1211 发表于 2022-10-13 00:39:51

Quá tuyệt!
页: [1] 2 3 4
查看完整版本: 修复 qcc3034 gaia eq修改无法保存的bug