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.

[参考译文] C55x-AUDIOFRAMEWORK:调用 ASRC_genOutInterpCoefs16b 时内存损坏()

Guru**** 2602655 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/647255/c55x-audioframework-memory-corruption-when-calling-asrc_genoutinterpcoefs16b

器件型号:C55x-AUDIOFRAMEWORK

我们注意到,调用 ASRC_genOutInterpCoefs16b()后,可能会出现内存损坏。 该函数有时会写入 pbAsrcOutFifo 缓冲区之外、并破坏缓冲区后面的存储器。 该函数位于 ASRC_dly_fix_lib.lib 中、我们没有该函数的源代码。  

我们希望 ASRC_dly_fix_lib.lib 的源代码能够帮助调试该问题、或者/以及一些有关如何找出发生这种情况的原因的建议。 我找不到库文件的版本、但.lib 的 md5sum 是  

$ md5sum ASRC_dly_fix_lib.lib

d83852f1866db84b3e896c3000441c ASRC_dly_fix_lib.lib

/Olov Brändström Google Inc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Olov、

    我们的团队需要一些时间来收集实验室中的数据。 请给我们几天时间、我们将会与您联系。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    奥洛夫

    遗憾的是、库代码无法公开共享。
    我将与一些同事一起探讨调试的最佳方法。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    奥洛夫

    同事的一些反馈:
    输出缓冲器的大小是否合适? 您是否需要更多内存来适应插值?
    假设缓冲区大小合适、您能否转储输出样本数量的变量并检查该变量的值意外大是否会导致缓冲区溢出? 如果看到较大的值,则可能能够确定导致该值的原因。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ASRC_genOutInterpCoefs16b ()中使用的输出缓冲器是中的缓冲器之一,大小为 ASRC_OUT_FIFO_BLK_SIZE (这部分代码是来自连接的音频框架的未修改文件。 这很难调试、因为它每周会发生几次、如果我们在调试中构建、似乎不会发生。

    我们注意到,如果 ASRC_genOutInterpCoefs16b()向缓冲区写入192 (2*96)个浮点值(大于 ASRC_OUT_FIFO_BLK_SIZE),则会发生崩溃,因此我们在块外写入。 我们通过扩展 pbAsrcOutFifo 来避免崩溃、从而在"安全"内存中发生内存损坏。 但我们需要找到真正的解决方案。

    例如、我们可能会遇到性能问题、有时会导致我们按错误的顺序或不按时间调用 ASRC_dly_fix_lib 中的函数。 但是、由于我不了解 ASRC_dly_fix_lib 的工作方式、因此我不知道这种情况是否可能发生。

    "输出样本数"的变量是多少? 我想这是调用 ASRC_rdNumOutSamps()的第二个参数? 根据我们的转储、该值在崩溃前为48。