停止directshow源过滤器时Flash崩溃

时间:2010-10-04 08:29:53

标签: c++ flash crash directshow

这是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过滤器存在此问题,如何修复?

2 个答案:

答案 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()

这可以解决您的问题。