找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 14742|回复: 10

[QCC3系列] qcc3031如果动态切换spdif和I2S输出?

[复制链接]
连续签到天数:1天
签到总天数:123天
签到总奖励:1888金币
发表于 2020-9-20 14:39:56 | 显示全部楼层 |阅读模式
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
连续签到天数:1天
签到总天数:426天
签到总奖励:4131金币
发表于 2020-9-21 09:27:46 | 显示全部楼层
最近也在搞这个,没有什么头绪
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:2天
签到总奖励:10金币
发表于 2020-9-21 10:44:55 | 显示全部楼层
大概原理是:SPDIF chain stop-->SPDIF chain destory-->Power Off DSP-->Power On DSP-->I2S chain connect-->I2S chain start
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:1170天
签到总奖励:45846金币
发表于 2020-9-21 17:38:15 | 显示全部楼层
本帖最后由 basketcase 于 2020-9-23 15:45 编辑

QCC3031我记得是sink的吧,给你参考一下

  1. void sinkAudioDestroyRoutedAudioInstance(void)
  2. {
  3.         if(AUDIO_GDATA.routed_audio_instance)
  4.         {
  5.                 AudioDisconnectInstance(AUDIO_GDATA.routed_audio_instance);
  6.             AUDIO_GDATA.routed_audio_instance = NULL;
  7.         }
  8.    
  9. }
复制代码
有人私信我说这个函数缺失,补上去,因为实在是年代久远了,我都忘记是我加上去的还是自带的了




  1.     gMultiChannelConfig->mapping[0].endpoint.type = audio_output_type_spdif;  /* audio_output_type_i2s */
  2.     gMultiChannelConfig->mapping[1].endpoint.type = audio_output_type_spdif;

  3.     /* get the status of the a2dp links */
  4.     getA2dpStreamData(a2dp_primary,   &a2dpSinkPri, &a2dpStatePri);
  5.    
  6.     if((sinkAudioGetRoutedAudioSink() == a2dpSinkPri)&&(a2dpStatePri == a2dp_stream_streaming))
  7.     {
  8.         sinkAudioDestroyRoutedAudioInstance();
  9.         audioRouteSpecificA2dpSource(audio_source_a2dp_1);
  10.     }
复制代码
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:123天
签到总奖励:1888金币
 楼主| 发表于 2020-9-21 20:03:01 | 显示全部楼层
basketcase 发表于 2020-9-21 17:38
QCC3031我记得是sink的吧,给你参考一下


这里吗? 不好意思,比较菜,没看出来是切换输出方式的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:1170天
签到总奖励:45846金币
发表于 2020-9-21 20:47:32 | 显示全部楼层
本帖最后由 basketcase 于 2020-9-21 20:50 编辑
btdev 发表于 2020-9-21 20:03
这里吗? 不好意思,比较菜,没看出来是切换输出方式的。

这里是两个手机同时连上的时候切换手机的,切换输出的配置在gMultiChannelConfig这里。你要换成什么通道就改audio_output_type_spdif这个就行了。可能还要考虑两个手机同时连接的情况,不过这个优化一下就行了。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:426天
签到总奖励:4131金币
发表于 2020-9-22 17:29:06 | 显示全部楼层
把音频挂起来的时候会panic
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:123天
签到总奖励:1888金币
 楼主| 发表于 2020-9-22 18:25:25 | 显示全部楼层
似火年华 发表于 2020-9-22 17:29
把音频挂起来的时候会panic

有啥好方法。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:426天
签到总奖励:4131金币
发表于 2020-9-23 10:24:46 | 显示全部楼层
void sinkAudioReconnect(void)
{
        a2dp_stream_state a2dpStatePri;
        Sink a2dpSinkePri = 0;
        getA2dpStreamData(a2dp_primary, &a2dpSinkePri, &a2dpStatePri);
    if(sinkAudioGetRoutedAudioSink() == a2dpSinkePri)
        {
                audioDisconnectRoutedAudio();
                audioRouteSpecificA2dpSource(audio_source_a2dp_1);
        }
}
我一调用这个函数就会panic,函数是自己写的
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:2天
签到总天数:225天
签到总奖励:7353金币
发表于 2020-10-1 09:35:46 | 显示全部楼层
楼主辛苦了,感谢分享。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-26 07:12 , Processed in 0.217722 second(s), 20 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表