diff --git a/stream/tvi_dshow.c b/stream/tvi_dshow.c index 87d80455e3..da8443c7f4 100644 --- a/stream/tvi_dshow.c +++ b/stream/tvi_dshow.c @@ -1390,19 +1390,31 @@ static HRESULT build_sub_graph(priv_t * priv, IBaseFilter * pCaptureFilter, set_buffer_preference(20,(WAVEFORMATEX*)(arpmt[nFormatProbed]->pbFormat),pCapturePin,pSGIn); } + for(nFormatProbed=0; arpmt[nFormatProbed]; nFormatProbed++) + { + DisplayMediaType("Probing format", arpmt[nFormatProbed]); hr = OLE_CALL_ARGS(pSG, SetMediaType, arpmt[nFormatProbed]); //set desired mediatype if(FAILED(hr)){ mp_msg(MSGT_TV,MSGL_DBG2,"tvi_dshow: SetMediaType(pSG) call failed. Error:0x%x\n", (unsigned int)hr); - break; + continue; } /* connecting filters together: VideoCapture --> SampleGrabber */ hr = OLE_CALL_ARGS(priv->pGraph, Connect, pCapturePin, pSGIn); if(FAILED(hr)){ mp_msg(MSGT_TV,MSGL_DBG2,"tvi_dshow: Unable to create pCapturePin<->pSGIn connection. Error:0x%x\n", (unsigned int)hr); - break; + continue; + } + break; } OLE_RELEASE_SAFE(pSG); + if(!arpmt[nFormatProbed]) + { + mp_msg(MSGT_TV, MSGL_WARN, "tvi_dshow: Unable to negotiate media format\n"); + hr = E_FAIL; + break; + } + hr = OLE_CALL_ARGS(pCapturePin, ConnectionMediaType, pmt); if(FAILED(hr)) {