[DirectShow] SetProperties()에서 E_FAIL 발생

변환 필터 제작 중

 

INPUT 핀 타입을 RGB에서 YUY2로 변경 하였다

Current Media Type

Majortype

MEDIATYPE_Video

Subtype

MEDIASUBTYPE_YUY2

formattype

FORMAT_VIDEOINFO2

 

 

기존 방식과 동일하게 input으로 받는 핀의 정보를 output 핀 형식과 동일하게 사용하려는데,

 

DecideBufferSize 함수에서

할당자를 설정하는 부분인 setProperties에서 계속 E_FAIL을 반환하여

Video Renderer Output 핀 연결이 되지 않았다

 

나랑 같은 문제여서 참고함

http://microsoft.public.win32.programmer.directx.video.narkive.com/8rcTkAL3/can-t-get-yv12-media-type-to-negotiate-in-transform-filter

 

CheckTransform 함수에서 Input , output 핀의 FormatLength를 체크 함?

이걸로 문제가 해결 됨… 왜지??

 

-       Old

HRESULT CheckTransForm(const CMediaType *mtIn, const CMediaType *mtOut)

{

    if (*mtIn == *mtOut)

   return S_OK;

 return E_FAIL;

} 

 

- Now

HRESULT CheckTransForm(const CMediaType *mtIn, const CMediaType *mtOut)

{

      HRESULT hr;

hr = CheckInputType(mtIn);

if (FAILED(hr))

return hr;


// format must be a VIDEOINFOHEADER

if (*mtOut->FormatType() != FORMAT_VideoInfo)

return E_INVALIDARG;


//formats must be big enough

if (mtIn->FormatLength() < sizeof(VIDEOINFOHEADER) || mtOut->FormatLength() < sizeof(VIDEOINFOHEADER))

return E_INVALIDARG;


return S_OK; 

}


'media > directshow' 카테고리의 다른 글

[DirectShow] FORMAT_VideoInfo2  (0) 2015.03.20