]> git.sesse.net Git - vlc/commitdiff
* modules/access/dshow/*: bug fixes.
authorGildas Bazin <gbazin@videolan.org>
Wed, 28 Jan 2004 16:46:52 +0000 (16:46 +0000)
committerGildas Bazin <gbazin@videolan.org>
Wed, 28 Jan 2004 16:46:52 +0000 (16:46 +0000)
modules/access/dshow/dshow.cpp
modules/access/dshow/filter.cpp

index e38d837889a934542ac7f5275d2c4bb021f2aab2..132e01f370e25b477bb4c43d4629376f157ace63 100644 (file)
@@ -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 <gbazin@netcourrier.com>
  *
@@ -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();
index 15070af70cda45077fbd97e53a67a80e6e33dfb5..fe9cf802f054a1f2bffa54a51f493385cf54ae7f 100644 (file)
@@ -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 <gbazin@netcourrier.com>
  *
@@ -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()
 {