Mercurial > mplayer.hg
changeset 25065:54dba785e683
New media format negotiation code:
loop through all available formats trying to
establish connection between pins.
Negotiation stops either when all formats are rejected
(error reported in this case) or when connection is
established (which can happen only when current media
format is accepted by both of the pins).
author | voroshil |
---|---|
date | Sun, 18 Nov 2007 11:13:28 +0000 |
parents | f9a966f36dae |
children | 89c42f6f6e89 |
files | stream/tvi_dshow.c |
diffstat | 1 files changed, 14 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/stream/tvi_dshow.c Sun Nov 18 10:55:51 2007 +0000 +++ b/stream/tvi_dshow.c Sun Nov 18 11:13:28 2007 +0000 @@ -1390,18 +1390,30 @@ 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); + 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; } - OLE_RELEASE_SAFE(pSG); hr = OLE_CALL_ARGS(pCapturePin, ConnectionMediaType, pmt); if(FAILED(hr))