- HOME
- Post in | media/directshow
- Post at | 2015. 3. 20. 14:50 | by 밀크빵.
- View comment
[DirectShow] FORMAT_VideoInfo2
Video Renderer와 연결은 되고 영상 출력이 되지 않았다
현재 작업중인 필터에서 output핀 타입을 input핀 타입과 동일하게 만들어서 영상을 출력하고 있었는데
변환 필터에서 Input으로 받은 FormatType이 VideoInfo2일 때
출력 핀의 미디어 FormatType도 videoInfo2 이면 영상 출력이 되지 않았다
처음에는 단순히 Input FormatType이 VideoInfo2일 때 필터 연결을 해서 발생한 문제인줄 알았는데,
Input Format Type이 VideoInfo2이더라도, output의 mtOut->FormatType() 을 체크하지 않으면
Format Type이 videoInfo로 변환되고 정상적으로 출력 되었다
HRESULT CEZrgb24::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_VideoInfo2)//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; } |
- Input 포맷 타입은 FORMAT_VIDEOINFO2
- Output 포맷 타입은 FORMAT_VIDEOINFO
videoInfo 타입과 videoInfo2 타입이 무엇인지 확인해보았다
videoInfo2
https://msdn.microsoft.com/en-us/library/windows/desktop/dd407324(v=vs.85).aspx
VMR-7, VMR9 은 VIDEOINFOHEADER2를 즉시 제공한다 VMR 에 접속할 때 최상의 포맷을 제시한다. 이전 Video Renderer filter는 VIDEOINFOHEADER2를 지원하지 않는다. Video Renderer filter에서 VIDEOINFOHEADER2를 사용하기 위해서는 Overlay Mixer를 그래프 안에 삽입해야 한다.
1. decoder filter의 output 핀에 미디어 타입을 나열한다(EnumMediaType 메소드 이용) 2. 나열된 배열에서 첫 번째 미디어 타입을 확인한다 3. 포맷 타입이 FORMAT_VideoInfo2일 경우 output pin을 Overlay Mixer에 접속한다 그리고 나서 Overlay Mixer 는 video renderer에 접속 한다
|
내용을 읽어보니까 그냥 Video Renderer Filter에서 videoInfo2 타입을 사용을 하려면
overlay Mixer 필터를 통해서 영상을 출력하라는 것 같다
아니면 VMR9을 쓰던가
하….
근데 VideoInfo2로 Overlay Mixer 연결도 안되고,
Video Mixing Renderer9으로 연결하면 연결은 되는데 화면이 안나온다
'media > directshow' 카테고리의 다른 글
[DirectShow] SetProperties()에서 E_FAIL 발생 (0) | 2015.03.20 |
---|