这是callstack:
0480b000()
vcam.ax!CSourceStream :: DoBufferProcessingLoop()+ 0xe1 bytes
vcam.ax!CSourceStream :: ThreadProc()+ 0x13e bytes
vcam.ax!CAMThread :: InitialThreadProc()+ 0x51 bytes
KERNEL32.DLL!7c80b713()
callstack来自这个帖子:
0 > 0x000015b8 Worker Thread CAMThread::InitialThreadProc 0480b000 Normal 0
反汇编代码:
017D0B5B push edx
017D0B5C mov eax,dword ptr [ecx+8]
017D0B5F call eax
017D0B61 cmp esi,esp
017D0B63 call @ILT+2525(__RTC_CheckEsp) (17C49E2h)
017D0B68 cmp dword ptr [ebp-2Ch],0
017D0B6C je CSourceStream::DoBufferProcessingLoop+10Ah (17D0B8Ah)
017D0B6E mov eax,dword ptr [ebp-2Ch]
第017D0B5F call eax
行
大多数directshow过滤器存在此问题,如何修复?
答案 0 :(得分:0)
我相信vcam.ax的源代码是here,所以最好的选择是在本地编译源代码然后附加到调试器中崩溃的进程。然后你可以在DoBufferProcessingLoop()实现中放置一个断点,重新创建崩溃,你应该能够找出崩溃的原因。
答案 1 :(得分:0)
我使用了vcom.ax并遇到了与你相同的问题。我通过以下步骤解决它。
在以下函数的第一行添加CAutoLock cAutoLock(&m_cSharedState);
:
CVCamStream::CVCamStream() //constructor
CVCamStream::~CVCamStream() //distructor
HRESULT CVCamStream::FillBuffer(IMediaSample *pms)
HRESULT CVCamStream::OnThreadCreate()
这可以解决您的问题。