diff --git a/sys/dshowsrcwrapper/gstdshowfakesink.cpp b/sys/dshowsrcwrapper/gstdshowfakesink.cpp index c524c7c082..3c5fca82c1 100644 --- a/sys/dshowsrcwrapper/gstdshowfakesink.cpp +++ b/sys/dshowsrcwrapper/gstdshowfakesink.cpp @@ -46,12 +46,19 @@ STDMETHODIMP HRESULT CDshowFakeSink::CheckMediaType (const CMediaType * pmt) { - if (pmt != NULL) { - if (*pmt == m_MediaType) - return S_OK; - } + if (!IsEqualGUID(pmt->majortype, m_MediaType.majortype) || + !IsEqualGUID(pmt->subtype, m_MediaType.subtype) || + !IsEqualGUID(pmt->formattype, m_MediaType.formattype) || + (pmt->cbFormat != m_MediaType.cbFormat)) + return S_FALSE; - return S_FALSE; + VIDEOINFOHEADER *info1 = (VIDEOINFOHEADER*)pmt->pbFormat; + VIDEOINFOHEADER *info2 = (VIDEOINFOHEADER*)m_MediaType.pbFormat; + + if (memcmp(&info1->bmiHeader, &info2->bmiHeader, sizeof(BITMAPINFOHEADER))) + return S_FALSE; + + return S_OK; } HRESULT CDshowFakeSink::DoRenderSample (IMediaSample * pMediaSample) diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp index e4ade97e72..9b478db5dd 100644 --- a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp +++ b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp @@ -682,6 +682,12 @@ gst_dshowvideosrc_set_caps (GstBaseSrc * bsrc, GstCaps * caps) src->filter_graph->Disconnect (input_pin); } + hres = src->pVSC->SetFormat(pin_mediatype->mediatype); + if (FAILED (hres)) { + GST_ERROR ("Failed to set capture pin format (error=0x%x)", hres); + goto error; + } + hres = src->filter_graph->ConnectDirect (pin_mediatype->capture_pin, input_pin, pin_mediatype->mediatype); input_pin->Release ();