您好!
客户使用具有适用于 Tiva 的蓝皮协议栈1.2R 的 CC2564MODA。
http://www.ti.com/tool/CC256XM4BTBLESW
它们处于蓝牙列表的最后阶段、但以下两种格式的测试失败。
A2DP/SNK/CC/BV-01-1
A2DP/SNK/CC/BV-02-1.
他们的软件基于我们 SDK 中的 A2DP 演示。
我想我们的软件应该能够顺利通过这些测试。
故障的潜在原因是什么?
这是客户的停产问题。
谢谢、此致、
田志郎一郎
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
客户使用具有适用于 Tiva 的蓝皮协议栈1.2R 的 CC2564MODA。
http://www.ti.com/tool/CC256XM4BTBLESW
它们处于蓝牙列表的最后阶段、但以下两种格式的测试失败。
A2DP/SNK/CC/BV-01-1
A2DP/SNK/CC/BV-02-1.
他们的软件基于我们 SDK 中的 A2DP 演示。
我想我们的软件应该能够顺利通过这些测试。
故障的潜在原因是什么?
这是客户的停产问题。
谢谢、此致、
田志郎一郎
尊敬的 Vince:
我有客户提供的其他信息。
试验室说:
-播放正常音频格式没有问题
-这些失败的格式(在我的第一个帖子中附带)与正常音频格式不同,不播放音乐。
我在 SDK 中查看了 Bluetopia 子频带编解码器 API 文档(SubbandCodecAPI.pdf)、并确认 SBC_Decode_Data API 支持所有参数。
但我不确定 A2DPDemo 示例代码中是否支持所有参数。
我可以在 A2DPDemo.c 中找到以下配置。 代码似乎指定了采样率、通道模式和解码格式(SBC)。
静态 AUD_Stream_Format_t AudioSNKSupportedFormats[]= { {44100、2、0}、 {48000、2、 0}、 {48000、1、0}、 {44100、 1、0} };
在哪里可以找到代码指定子频段、分配方法和块大小?
A2DPDemo 是否支持这两种格式?
谢谢、此致、
田志郎一郎
尊敬的 Vince:
问题是由根导致的。
无论 SBC 格式如何、A2DPDemo 代码都会将音频样本数指定为128。
在 AudioDecoder.c 中:
/*以下定义为 每个 SBC 帧生成的*//*音频样本数。*/ #define NUM_AUDIO_SAMESS_PER_SBC_FRAME128
但对于某些 SBC 格式、音频样本数为64。 代码从这里的 while 循环退出。
在 AudioDecoder.c、Decode()函数中:
/*确保有足够的空间容纳 来自单个 SBC 帧的样本*/*。// if (DecodedData.ChannelDataSize < NUM_AUDIO_SABLE_PER_SBC_FRAME){ break; }
为了实现正确操作、必须根据解码的 SBC 格式(64或128)调整 NUM_AUDIO_SAMLES_PER_SBC_FRAME。
我知道 Bluetopia 符合 QDID42849标准、并且支持所有 SBC 格式。
客户抱怨 A2DPDemo 本身不支持所有 SBC 格式。
Bluetopia 是否有任何原因无法提供他们获得 QDID 的确切代码?
谢谢、此致、
田志郎一郎
您能否确认这是 A2DP 还是 A3DP?
此外、配置文件可能不支持其 ICS 产品 测试计划测试的所有 SBC 格式。 他们是否再次将 IC 与我们的 QDID 中的 IC 进行了比较? 首先检查这一点很重要。
我与我们的第三方 Cloud2gnd 进行了交谈、后者支持 Bluetopia 栈和配置文件自定义等、他们认为演示代码是用于获得认证的代码、并希望查看是否有其他演示版本可用。
此致、
特拉维斯
Tashiro-san、
我曾与 Cld2gnd 讨论过、Stonestreet One 用于认证的确切演示代码并不明显。 他们回顾了该主题、可能没有足够的信息来得出问题的根本原因、但建议是查看故障案例、或许可以指定更大的缓冲区大小、或者可以使用大小可变的 NUM_AUDIO_SAMLE_PER_SBC_FRAME 来解决此问题。 如果客户无法解决问题、他们可以联系 Cld2gnd 并与他们签订合同来解决问题。
客户是否进行了任何其他测试?
谢谢、
特拉维斯
您好、Travis、
感谢您与 Cld2gnd 合作。
我不知道为什么他们无法根据此主题提供的信息得出问题的根本原因。
代码在此中断、因为 DecodedData.ChannelDataSize 保持为64、NUM_AUDIO_SAMESS_PER_SBC_FRAME 为128。
(以下所有代码均位于 AudioDecoder.c 中)
/*确保有足够的空间容纳 来自单个 SBC 帧的样本*/*。// if (DecodedData.ChannelDataSize < NUM_AUDIO_SABLE_PER_SBC_FRAME){ break; }
DecodedData.ChannelDataSize 计算如下
//计算音频样本的可用空间量。 if (PlaybackContext.OutIndex > PlaybackContext.InIndex){ DecodedData.ChannelDataSize =(unsigned int)(PlaybackContext.OutIndex - PlaybackContext.InIndex); } 否则{ DecodedData.ChannelDataSize =(unsigned int)(audio_buffer_size - PlaybackContext.InIndex); }
和 PlaybackContext.InIndex 在此处更新
//调整刚才添加的音频样本的索引。 PlaybackContext.InIndex += DecodedData.LeftChannelDataLength;
大多数 SBC 格式的 DecodedData.LeftChannelDataLength 为128、这就是 NUM_AUDIO_SAMESS_PER_SBC_FRAME 默认为128的原因。
但是、对于这些失败的 SBC 参数、DecodedData.LeftChannelDataLength 为64、而不是128。
这使得 DecodedData.ChannelDataSize=64的末尾、因为 AUDIO_Buffer_size 是128 * 8。
更正确的是、解码15个 SBC 帧后、剩余 DecodedData.ChannelDataSize 为64。
(128 * 8)–(64 * 15)= 64
/*每个 SBC 帧将生成128个左侧样本和128个右侧样本。 // //*设置缓冲区以容纳8个解码的 SBC 帧。*/ #define AUDIO_buffer_size(128 * 8)
谢谢、此致、
田志郎一郎
您好、Koichiro、
我认为、只有当您的音频缓冲器与 NUM_AUDIO_SABLE_PER_SBC_FRAME 的倍数绑定、并且您正在执行更多的缓冲器动态内存分配时、此检查才有效。 由于缓冲区硬编码为128 * 8、并且在编译时创建、因此该检查失去了一些意义。
由于缓冲区已经考虑了128的最大大小、因此我认为最简单的更改就是取消检查。
我的理解是、您已经完成了这项工作、该示例现在正在工作、因此应该可以解决这个问题。
BR、
Vince