2012-10-23 3 views
1

내 DirectShow 필터 그래프에서 ColorConverterDMO를 사용하여 UYVY에서 RGB32로 변환하려고하지만 입력 핀에 연결하는 데 특히 비협조적입니다.DirectShow ColorConverterDMO 필터는 광고하는 입력 형식을 허용하지 않습니까?

예를 들어 입력 핀의 미디어 유형을 나열한 다음 각 미디어 유형에 대해 해당 미디어 유형의 핀 QueryAccept()을 호출하면 S_FALSE를 반환합니다. 무슨 일 이니? 입력 핀을 소스 필터의 출력 핀에 연결할 수 있도록 필터를 얻으려면 어떻게해야합니까?

다음은 필터를 만드는 예제이며 광고하는 미디어 유형을 받아들이지 않는 예제 코드입니다. 이 코드에서 QueryAccept 호출은 항상 S_FALSE를 반환합니다.

도움이 될 것입니다. 감사합니다.

// create filter and put it in the graph 
CComPtr<IBaseFilter> colorConvert; 
CComPtr<IPin> colorOut, colorIn; 
CComPtr<IDMOWrapperFilter> colorConvertIface; 

if(FAILED(hr = CoCreateInstance(CLSID_DMOWrapperFilter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&colorConvert))) 
    return hr; 

if(FAILED(hr = colorConvert->QueryInterface(IID_IDMOWrapperFilter, (void **)&colorConvertIface))) 
    return hr; 

if(FAILED(hr = colorConvertIface->Init(CLSID_CColorConvertDMO, DMOCATEGORY_VIDEO_EFFECT))) 
    return hr; 

if(FAILED(hr = g_pGB->AddFilter(colorConvert, _T("Converter")))) 
    return hr; 

if(FAILED(hr = colorConvert->FindPin(L"in0", &colorIn))) 
    return hr; 

if(FAILED(hr = colorConvert->FindPin(L"out0", &colorOut))) 
    return hr; 

// try to get a little info about the frame input source's output pin offering... 
CComPtr<IEnumMediaTypes> pMediaTypeEnum; 
AM_MEDIA_TYPE *pMediaType; 
hr = colorIn->EnumMediaTypes(&pMediaTypeEnum); 
int cnt = 1; 
while (pMediaTypeEnum->Next(1, &pMediaType, &fetched) == S_OK) 
{ 
    TCHAR str[100]; 
    _stprintf(str, _T("Input Media Type [%d]:"), cnt++); 
    DisplayType(str, pMediaType); 

    hr = colorIn->QueryAccept(pMediaType); 
    if (hr == S_FALSE) 
    { 
     //WHY?? You just told me you accepted this type!?! 
    } 

    DeleteMediaType(pMediaType); 
} 
pMediaTypeEnum.Release(); 

답변

0

Color Converter DMO/DSP는 DirectShow의 구성 요소가 아닙니다. Windows Media에 속하며 DMO Wrapper Filter을 통해 DirectShow 파이프 라인에 (잠재적으로) 연결될 수 있지만 의도 한 시나리오가 테스트를 거친 적이 없었던 것으로 판단됩니다.

나는 다른 DMO 용 샘플 코드를 가지고 있으며, DirectShow : Using Vista Video Resizer DSP in DirectShow, via DMO Wrapper Filter에서 효과가있다. 나는 색상 변환 DMO가 유사한 방식으로 실행되도록 관리하는 사람을 읽었다는 인상을 받고 있습니다.이 경우 코드 스 니펫이 도움이 될 수 있습니다.