Вспышка падает при остановке DirectShow исходного фильтра - PullRequest
1 голос
/ 04 октября 2010

Вот стек вызовов:

0480b000 ()
vcam.ax! CSourceStream :: DoBufferProcessingLoop () + 0xe1 байт
vcam.ax! CSourceStream :: ThreadProc () + 0x13eбайт
vcam.ax! CAMThread :: InitialThreadProc () + 0x51 байт
kernel32.dll! 7c80b713 ()

Сеанс вызова из этого потока:

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 голосов
/ 11 января 2012

Я использовал vcom.ax и столкнулся с той же проблемой, что и у вас. Я решаю это следующим шагом. Добавьте CAutoLock cAutoLock(&m_cSharedState); в первой строке следующей функции:

  • CVCamStream::CVCamStream() //constructor
  • CVCamStream::~CVCamStream() //distructor
  • HRESULT CVCamStream::FillBuffer(IMediaSample *pms)
  • HRESULT CVCamStream::OnThreadCreate()

Это может решить вашу проблему.

0 голосов
/ 09 октября 2010

Я считаю, что исходный код vcam.ax здесь , поэтому, вероятно, лучший вариант - это скомпилировать исходный код локально, а затем подключиться к процессу, который завершается сбоем в отладчике. Затем вы можете поместить точку останова в реализацию DoBufferProcessingLoop (), воссоздать сбой, и вы сможете выяснить, почему вы отказываете.

...