From: Gildas Bazin Date: Wed, 28 Jan 2004 16:46:52 +0000 (+0000) Subject: * modules/access/dshow/*: bug fixes. X-Git-Tag: 0.7.1~292 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9b85c69d83c573e29884787af412540aaa6725cc;p=vlc * modules/access/dshow/*: bug fixes. --- diff --git a/modules/access/dshow/dshow.cpp b/modules/access/dshow/dshow.cpp index e38d837889..132e01f370 100644 --- a/modules/access/dshow/dshow.cpp +++ b/modules/access/dshow/dshow.cpp @@ -2,7 +2,7 @@ * dshow.cpp : DirectShow access module for vlc ***************************************************************************** * Copyright (C) 2002, 2003 VideoLAN - * $Id: dshow.cpp,v 1.25 2004/01/25 17:31:22 gbazin Exp $ + * $Id: dshow.cpp,v 1.26 2004/01/28 16:46:52 gbazin Exp $ * * Author: Gildas Bazin * @@ -414,17 +414,18 @@ static bool ConnectFilters( IFilterGraph *p_graph, IBaseFilter *p_filter, { IEnumPins *p_enumpins; IPin *p_output_pin; - ULONG i_fetched; if( S_OK != p_filter->EnumPins( &p_enumpins ) ) return false; - while( S_OK == p_enumpins->Next( 1, &p_output_pin, &i_fetched ) ) + while( S_OK == p_enumpins->Next( 1, &p_output_pin, NULL ) ) { if( S_OK == p_graph->ConnectDirect( p_output_pin, p_input_pin, 0 ) ) { + p_output_pin->Release(); p_enumpins->Release(); return true; } + p_output_pin->Release(); } p_enumpins->Release(); diff --git a/modules/access/dshow/filter.cpp b/modules/access/dshow/filter.cpp index 15070af70c..fe9cf802f0 100644 --- a/modules/access/dshow/filter.cpp +++ b/modules/access/dshow/filter.cpp @@ -2,7 +2,7 @@ * filter.c : DirectShow access module for vlc ***************************************************************************** * Copyright (C) 2002 VideoLAN - * $Id: filter.cpp,v 1.11 2004/01/26 18:24:17 gbazin Exp $ + * $Id: filter.cpp,v 1.12 2004/01/28 16:46:52 gbazin Exp $ * * Author: Gildas Bazin * @@ -777,18 +777,20 @@ STDMETHODIMP CaptureEnumPins::Next( ULONG cPins, IPin ** ppPins, msg_Dbg( p_input, "CaptureEnumPins::Next" ); #endif - *pcFetched = 0; + unsigned int i_fetched = 0; if( i_position < 1 && cPins > 0 ) { IPin *pPin = p_filter->CustomGetPin(); *ppPins = pPin; pPin->AddRef(); - *pcFetched = 1; + i_fetched = 1; i_position++; } - return *pcFetched == cPins ? NOERROR : S_FALSE; + if( pcFetched ) *pcFetched = i_fetched; + + return (i_fetched == cPins) ? S_OK : S_FALSE; }; STDMETHODIMP CaptureEnumPins::Skip( ULONG cPins ) { @@ -796,13 +798,14 @@ STDMETHODIMP CaptureEnumPins::Skip( ULONG cPins ) msg_Dbg( p_input, "CaptureEnumPins::Skip" ); #endif - if( cPins > 1 ) + i_position += cPins; + + if( i_position > 1 ) { return S_FALSE; } - i_position += cPins; - return NOERROR; + return S_OK; }; STDMETHODIMP CaptureEnumPins::Reset() {