2012-07-29 5 views
0

이 예기치 않은 동작을한다. 나는 적절한 인터페이스를 사용하여이 DMO 포장했습니다!그래프에 DMO를 필터로서 삽입했을 때, 특정의 DMO를 내 DirectShow 그래프에 삽입하려고하고있는 경우,

ATL::CComPtr<IBaseFilter>   spDMOWrapper; 
ATL::CComPtr<IDMOWrapperFilter> spDMOWrapperEx; 

if(FAILED(hr = spDMOWrapper.CoCreateInstance(CLSID_DMOWrapperFilter))) 
    return hr; 
if(FAILED(hr = spDMOWrapper.QueryInterface(&spDMOWrapperEx))) 
    return hr; 

IDMOWrapperFilter->Init(SomeDMO) 

connecting pins and so on 

if(FAILED(hr = pGraph->AddFilter(spDMOWrapper, L"WM DMO Video Encoder"))) 
     return hr; 

다음과 같은 문제가 동일한 입력에 무작위로 발생을

qasf.dll을 CMediaWrapperFilter는 :: NewSample는()를 사용하여 내 샘플의 타임 스탬프를 재 - 초기화 DMO에서 구현 된 "Flush"기능.

나는 흥분된 일이 무엇인지 잘 모르겠다.하지만 짧은 클립에서 말할 수있는 한 틈이 없다. DMO는 잘 작동한다. 너희들이 호출 스택을 검사 할 경우이 문제를 해결하는 것 외에도

DMO::Compression::Mainconcept::H264Encoder::Flush() Line 1165 C++ 
    qasf.dll!CMediaWrapperFilter::NewSample() + 0x48 bytes 
    qasf.dll!CWrapperInputPin::Receive() + 0x16 bytes 
    Filters::Helpers::CPipeOutT<Filters::Helpers::CGenericPipe>::Deliver(IMediaSample * pSample) Line 383 + 0x20 bytes C++ 
    Filters::Helpers::CPipeInT<Filters::Helpers::CGenericPipe,Filters::Helpers::CGenericInputPin>::Receive(IMediaSample * pSample) Line 178 + 0x23 bytes C++ 
    CBaseOutputPin::Deliver(IMediaSample * pSample) Line 2695 + 0x20 bytes C++ 

, 인스턴트 메신저 CMediaWrapperFilter을하는 이유에 더 많은 관심을 그가 샘플의 타임 스탬프를 제로로 필요하다고 생각.

도움 주셔서 감사합니다.

답변

0

이것은 DMO Wrapper Filter의 동작입니다. 스트리밍 할 때, 기본이되는 DMO가 출력을 생성하지 않고, 새로운 입력을 받아들이지 않는 경우, 필터는 DMO를 플래시 해, 스트리밍 에러를 나타냅니다.