我们的Mac应用程序在AUGraphInitialize()中崩溃,带有来自gdb的回溯
(gdb) bt
#0 0x7004dc2f in PowerMeter::PowerMeter ()
#1 0x70073583 in MatrixMixerCore::MatrixMixerCore ()
#2 0x700461ac in AUMatrixMixer::Initialize ()
#3 0x7000541b in AUBase::DoInitialize ()
#4 0x700a333d in AUMethodInitialize ()
#5 0x91e6056c in _AT_AudioUnitInitialize ()
#6 0x91e75072 in AudioUnitNodeInfo::Initialize ()
#7 0x91e76a62 in AudioUnitGraph::Initialize ()
#8 0x91e77ded in AUGraphInitialize ()
#9 0x008908b6 in CMyCoreAudioWrapper::Init (this=0xc800c80) at MyCoreAudioWrapper:829
...
#18 0x0000c9b7 in main (argc=4, argv=0xbffff8c4) at main.h:7
这种崩溃只发生在某些机器上,例如,2008年初Mac Pro,Lion, 而不是其他人,例如2012年底的Mac Mini,Mountain Lion。但我们没有 测试所有可能的操作环境的资源。
我已经把这个问题缩小了一点:
图中只有两个节点,一个MatrixMixer节点和一个Output节点。 如果我向MatrixMixer节点注册回调,则会发生崩溃, 但如果回调被注册到Output节点,则不会崩溃。
回调注册如下所示
AURenderCallbackStruct callback = {0};
callback.inputProc = MixerInputProc;
callback.inputProcRefCon = this;
result = AUGraphSetNodeInputCallback(m_Graph, m_matrixMixerNode, 0, &callback );
我还注意到,即使回调MixerInputProc()什么都不做,崩溃仍然会发生。
我尝试过的其他事情,但也没有奏效:
有没有人知道有关设置节点回调的怪癖,比如线程或内存要求?我想到的事情:
CoreAudioAPI邮件列表人员似乎完全忽略了我的问题所以我必须在这里使用我的最后一根稻草。
任何提示都将不胜感激!