quartz: Reorder some functions to avoid forward declarations.

Francois Gouget fgouget at free.fr
Wed Jan 7 05:35:31 CST 2009


---
 dlls/quartz/pin.c |  413 +++++++++++++++++++++++++++--------------------------
 dlls/quartz/pin.h |   13 --
 2 files changed, 209 insertions(+), 217 deletions(-)

diff --git a/dlls/quartz/pin.c b/dlls/quartz/pin.c
index 2d63064..00165e5 100644
--- a/dlls/quartz/pin.c
+++ b/dlls/quartz/pin.c
@@ -142,11 +142,6 @@ out:
     return hr;
 }
 
-static inline InputPin *impl_from_IMemInputPin( IMemInputPin *iface )
-{
-    return (InputPin *)((char*)iface - FIELD_OFFSET(InputPin, lpVtblMemInput));
-}
-
 
 static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc)
 {
@@ -159,205 +154,6 @@ static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc)
     pDest->pFilter = pSrc->pFilter;
 }
 
-/* Function called as a helper to IPin_Connect */
-/* specific AM_MEDIA_TYPE - it cannot be NULL */
-/* NOTE: not part of standard interface */
-static HRESULT OutputPin_ConnectSpecific(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
-{
-    OutputPin *This = (OutputPin *)iface;
-    HRESULT hr;
-    IMemAllocator * pMemAlloc = NULL;
-    ALLOCATOR_PROPERTIES actual; /* FIXME: should we put the actual props back in to This? */
-
-    TRACE("(%p, %p)\n", pReceivePin, pmt);
-    dump_AM_MEDIA_TYPE(pmt);
-
-    /* FIXME: call queryacceptproc */
-
-    This->pin.pConnectedTo = pReceivePin;
-    IPin_AddRef(pReceivePin);
-    CopyMediaType(&This->pin.mtCurrent, pmt);
-
-    hr = IPin_ReceiveConnection(pReceivePin, iface, pmt);
-
-    /* get the IMemInputPin interface we will use to deliver samples to the
-     * connected pin */
-    if (SUCCEEDED(hr))
-    {
-        This->pMemInputPin = NULL;
-        hr = IPin_QueryInterface(pReceivePin, &IID_IMemInputPin, (LPVOID)&This->pMemInputPin);
-
-        if (SUCCEEDED(hr) && !This->custom_allocator)
-        {
-            hr = IMemInputPin_GetAllocator(This->pMemInputPin, &pMemAlloc);
-
-            if (hr == VFW_E_NO_ALLOCATOR)
-                /* Input pin provides no allocator, use standard memory allocator */
-                hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (LPVOID*)&pMemAlloc);
-
-            if (SUCCEEDED(hr))
-                hr = IMemAllocator_SetProperties(pMemAlloc, &This->allocProps, &actual);
-
-            if (SUCCEEDED(hr))
-                hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, pMemAlloc, This->readonly);
-
-            if (pMemAlloc)
-                IMemAllocator_Release(pMemAlloc);
-        }
-        else if (SUCCEEDED(hr))
-        {
-            if (This->alloc)
-            {
-                hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, This->alloc, This->readonly);
-            }
-            else
-                hr = VFW_E_NO_ALLOCATOR;
-        }
-
-        /* break connection if we couldn't get the allocator */
-        if (FAILED(hr))
-        {
-            if (This->pMemInputPin)
-                IMemInputPin_Release(This->pMemInputPin);
-            This->pMemInputPin = NULL;
-
-            IPin_Disconnect(pReceivePin);
-        }
-    }
-
-    if (FAILED(hr))
-    {
-        IPin_Release(This->pin.pConnectedTo);
-        This->pin.pConnectedTo = NULL;
-        FreeMediaType(&This->pin.mtCurrent);
-    }
-
-    TRACE(" -- %x\n", hr);
-    return hr;
-}
-
-static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData,
-                             QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, InputPin * pPinImpl)
-{
-    TRACE("\n");
-
-    /* Common attributes */
-    pPinImpl->pin.refCount = 1;
-    pPinImpl->pin.pConnectedTo = NULL;
-    pPinImpl->pin.fnQueryAccept = pQueryAccept;
-    pPinImpl->pin.pUserData = pUserData;
-    pPinImpl->pin.pCritSec = pCritSec;
-    Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
-    ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
-
-    /* Input pin attributes */
-    pPinImpl->fnSampleProc = pSampleProc;
-    pPinImpl->fnCleanProc = pCleanUp;
-    pPinImpl->pAllocator = pPinImpl->preferred_allocator = allocator;
-    if (pPinImpl->preferred_allocator)
-        IMemAllocator_AddRef(pPinImpl->preferred_allocator);
-    pPinImpl->tStart = 0;
-    pPinImpl->tStop = 0;
-    pPinImpl->dRate = 1.0;
-    pPinImpl->pin.lpVtbl = InputPin_Vtbl;
-    pPinImpl->lpVtblMemInput = &MemInputPin_Vtbl;
-    pPinImpl->flushing = pPinImpl->end_of_stream = 0;
-
-    return S_OK;
-}
-
-static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO * pPinInfo, const ALLOCATOR_PROPERTIES * props, LPVOID pUserData,
-                              QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, OutputPin * pPinImpl)
-{
-    TRACE("\n");
-
-    /* Common attributes */
-    pPinImpl->pin.lpVtbl = OutputPin_Vtbl;
-    pPinImpl->pin.refCount = 1;
-    pPinImpl->pin.pConnectedTo = NULL;
-    pPinImpl->pin.fnQueryAccept = pQueryAccept;
-    pPinImpl->pin.pUserData = pUserData;
-    pPinImpl->pin.pCritSec = pCritSec;
-    Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
-    ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
-
-    /* Output pin attributes */
-    pPinImpl->pMemInputPin = NULL;
-    pPinImpl->pConnectSpecific = OutputPin_ConnectSpecific;
-    /* If custom_allocator is set, you will need to specify an allocator
-     * in the alloc member of the struct before an output pin can connect
-     */
-    pPinImpl->custom_allocator = 0;
-    pPinImpl->alloc = NULL;
-    pPinImpl->readonly = FALSE;
-    if (props)
-    {
-        pPinImpl->allocProps = *props;
-        if (pPinImpl->allocProps.cbAlign == 0)
-            pPinImpl->allocProps.cbAlign = 1;
-    }
-    else
-        ZeroMemory(&pPinImpl->allocProps, sizeof(pPinImpl->allocProps));
-
-    return S_OK;
-}
-
-HRESULT InputPin_Construct(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, IPin ** ppPin)
-{
-    InputPin * pPinImpl;
-
-    *ppPin = NULL;
-
-    if (pPinInfo->dir != PINDIR_INPUT)
-    {
-        ERR("Pin direction(%x) != PINDIR_INPUT\n", pPinInfo->dir);
-        return E_INVALIDARG;
-    }
-
-    pPinImpl = CoTaskMemAlloc(sizeof(*pPinImpl));
-
-    if (!pPinImpl)
-        return E_OUTOFMEMORY;
-
-    if (SUCCEEDED(InputPin_Init(InputPin_Vtbl, pPinInfo, pSampleProc, pUserData, pQueryAccept, pCleanUp, pCritSec, allocator, pPinImpl)))
-    {
-        *ppPin = (IPin *)pPinImpl;
-        return S_OK;
-    }
-
-    CoTaskMemFree(pPinImpl);
-    return E_FAIL;
-}
-
-HRESULT OutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, long outputpin_size, const PIN_INFO * pPinInfo, ALLOCATOR_PROPERTIES *props, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, IPin ** ppPin)
-{
-    OutputPin * pPinImpl;
-
-    *ppPin = NULL;
-
-    if (pPinInfo->dir != PINDIR_OUTPUT)
-    {
-        ERR("Pin direction(%x) != PINDIR_OUTPUT\n", pPinInfo->dir);
-        return E_INVALIDARG;
-    }
-
-    assert(outputpin_size >= sizeof(OutputPin));
-
-    pPinImpl = CoTaskMemAlloc(outputpin_size);
-
-    if (!pPinImpl)
-        return E_OUTOFMEMORY;
-
-    if (SUCCEEDED(OutputPin_Init(OutputPin_Vtbl, pPinInfo, props, pUserData, pQueryAccept, pCritSec, pPinImpl)))
-    {
-        *ppPin = (IPin *)(&pPinImpl->pin.lpVtbl);
-        return S_OK;
-    }
-
-    CoTaskMemFree(pPinImpl);
-    return E_FAIL;
-}
-
 /*** Common pin functions ***/
 
 ULONG WINAPI IPinImpl_AddRef(IPin * iface)
@@ -735,6 +531,11 @@ static const IPinVtbl InputPin_Vtbl =
 
 /*** IMemInputPin implementation ***/
 
+static inline InputPin *impl_from_IMemInputPin( IMemInputPin *iface )
+{
+    return (InputPin *)((char*)iface - FIELD_OFFSET(InputPin, lpVtblMemInput));
+}
+
 HRESULT WINAPI MemInputPin_QueryInterface(IMemInputPin * iface, REFIID riid, LPVOID * ppv)
 {
     InputPin *This = impl_from_IMemInputPin(iface);
@@ -858,6 +659,8 @@ static const IMemInputPinVtbl MemInputPin_Vtbl =
     MemInputPin_ReceiveCanBlock
 };
 
+/*** OutputPin implementation ***/
+
 HRESULT WINAPI OutputPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
 {
     OutputPin *This = (OutputPin *)iface;
@@ -1260,6 +1063,7 @@ HRESULT OutputPin_DeliverDisconnect(OutputPin * This)
     return hr;
 }
 
+/*** PullPin implementation ***/
 
 static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PULL pSampleProc, LPVOID pUserData,
                             QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, REQUESTPROC pCustomRequest, STOPPROCESSPROC pDone, LPCRITICAL_SECTION pCritSec, PullPin * pPinImpl)
@@ -1876,3 +1680,204 @@ static const IPinVtbl PullPin_Vtbl =
     PullPin_EndFlush,
     PullPin_NewSegment
 };
+
+/*** The Construct functions ***/
+
+/* Function called as a helper to IPin_Connect */
+/* specific AM_MEDIA_TYPE - it cannot be NULL */
+/* NOTE: not part of standard interface */
+static HRESULT OutputPin_ConnectSpecific(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
+{
+    OutputPin *This = (OutputPin *)iface;
+    HRESULT hr;
+    IMemAllocator * pMemAlloc = NULL;
+    ALLOCATOR_PROPERTIES actual; /* FIXME: should we put the actual props back in to This? */
+
+    TRACE("(%p, %p)\n", pReceivePin, pmt);
+    dump_AM_MEDIA_TYPE(pmt);
+
+    /* FIXME: call queryacceptproc */
+
+    This->pin.pConnectedTo = pReceivePin;
+    IPin_AddRef(pReceivePin);
+    CopyMediaType(&This->pin.mtCurrent, pmt);
+
+    hr = IPin_ReceiveConnection(pReceivePin, iface, pmt);
+
+    /* get the IMemInputPin interface we will use to deliver samples to the
+     * connected pin */
+    if (SUCCEEDED(hr))
+    {
+        This->pMemInputPin = NULL;
+        hr = IPin_QueryInterface(pReceivePin, &IID_IMemInputPin, (LPVOID)&This->pMemInputPin);
+
+        if (SUCCEEDED(hr) && !This->custom_allocator)
+        {
+            hr = IMemInputPin_GetAllocator(This->pMemInputPin, &pMemAlloc);
+
+            if (hr == VFW_E_NO_ALLOCATOR)
+                /* Input pin provides no allocator, use standard memory allocator */
+                hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, &IID_IMemAllocator, (LPVOID*)&pMemAlloc);
+
+            if (SUCCEEDED(hr))
+                hr = IMemAllocator_SetProperties(pMemAlloc, &This->allocProps, &actual);
+
+            if (SUCCEEDED(hr))
+                hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, pMemAlloc, This->readonly);
+
+            if (pMemAlloc)
+                IMemAllocator_Release(pMemAlloc);
+        }
+        else if (SUCCEEDED(hr))
+        {
+            if (This->alloc)
+            {
+                hr = IMemInputPin_NotifyAllocator(This->pMemInputPin, This->alloc, This->readonly);
+            }
+            else
+                hr = VFW_E_NO_ALLOCATOR;
+        }
+
+        /* break connection if we couldn't get the allocator */
+        if (FAILED(hr))
+        {
+            if (This->pMemInputPin)
+                IMemInputPin_Release(This->pMemInputPin);
+            This->pMemInputPin = NULL;
+
+            IPin_Disconnect(pReceivePin);
+        }
+    }
+
+    if (FAILED(hr))
+    {
+        IPin_Release(This->pin.pConnectedTo);
+        This->pin.pConnectedTo = NULL;
+        FreeMediaType(&This->pin.mtCurrent);
+    }
+
+    TRACE(" -- %x\n", hr);
+    return hr;
+}
+
+static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData,
+                             QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, InputPin * pPinImpl)
+{
+    TRACE("\n");
+
+    /* Common attributes */
+    pPinImpl->pin.refCount = 1;
+    pPinImpl->pin.pConnectedTo = NULL;
+    pPinImpl->pin.fnQueryAccept = pQueryAccept;
+    pPinImpl->pin.pUserData = pUserData;
+    pPinImpl->pin.pCritSec = pCritSec;
+    Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
+    ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
+
+    /* Input pin attributes */
+    pPinImpl->fnSampleProc = pSampleProc;
+    pPinImpl->fnCleanProc = pCleanUp;
+    pPinImpl->pAllocator = pPinImpl->preferred_allocator = allocator;
+    if (pPinImpl->preferred_allocator)
+        IMemAllocator_AddRef(pPinImpl->preferred_allocator);
+    pPinImpl->tStart = 0;
+    pPinImpl->tStop = 0;
+    pPinImpl->dRate = 1.0;
+    pPinImpl->pin.lpVtbl = InputPin_Vtbl;
+    pPinImpl->lpVtblMemInput = &MemInputPin_Vtbl;
+    pPinImpl->flushing = pPinImpl->end_of_stream = 0;
+
+    return S_OK;
+}
+
+static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO * pPinInfo, const ALLOCATOR_PROPERTIES * props, LPVOID pUserData,
+                              QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, OutputPin * pPinImpl)
+{
+    TRACE("\n");
+
+    /* Common attributes */
+    pPinImpl->pin.lpVtbl = OutputPin_Vtbl;
+    pPinImpl->pin.refCount = 1;
+    pPinImpl->pin.pConnectedTo = NULL;
+    pPinImpl->pin.fnQueryAccept = pQueryAccept;
+    pPinImpl->pin.pUserData = pUserData;
+    pPinImpl->pin.pCritSec = pCritSec;
+    Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo);
+    ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
+
+    /* Output pin attributes */
+    pPinImpl->pMemInputPin = NULL;
+    pPinImpl->pConnectSpecific = OutputPin_ConnectSpecific;
+    /* If custom_allocator is set, you will need to specify an allocator
+     * in the alloc member of the struct before an output pin can connect
+     */
+    pPinImpl->custom_allocator = 0;
+    pPinImpl->alloc = NULL;
+    pPinImpl->readonly = FALSE;
+    if (props)
+    {
+        pPinImpl->allocProps = *props;
+        if (pPinImpl->allocProps.cbAlign == 0)
+            pPinImpl->allocProps.cbAlign = 1;
+    }
+    else
+        ZeroMemory(&pPinImpl->allocProps, sizeof(pPinImpl->allocProps));
+
+    return S_OK;
+}
+
+HRESULT InputPin_Construct(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PUSH pSampleProc, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, IPin ** ppPin)
+{
+    InputPin * pPinImpl;
+
+    *ppPin = NULL;
+
+    if (pPinInfo->dir != PINDIR_INPUT)
+    {
+        ERR("Pin direction(%x) != PINDIR_INPUT\n", pPinInfo->dir);
+        return E_INVALIDARG;
+    }
+
+    pPinImpl = CoTaskMemAlloc(sizeof(*pPinImpl));
+
+    if (!pPinImpl)
+        return E_OUTOFMEMORY;
+
+    if (SUCCEEDED(InputPin_Init(InputPin_Vtbl, pPinInfo, pSampleProc, pUserData, pQueryAccept, pCleanUp, pCritSec, allocator, pPinImpl)))
+    {
+        *ppPin = (IPin *)pPinImpl;
+        return S_OK;
+    }
+
+    CoTaskMemFree(pPinImpl);
+    return E_FAIL;
+}
+
+HRESULT OutputPin_Construct(const IPinVtbl *OutputPin_Vtbl, long outputpin_size, const PIN_INFO * pPinInfo, ALLOCATOR_PROPERTIES *props, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, LPCRITICAL_SECTION pCritSec, IPin ** ppPin)
+{
+    OutputPin * pPinImpl;
+
+    *ppPin = NULL;
+
+    if (pPinInfo->dir != PINDIR_OUTPUT)
+    {
+        ERR("Pin direction(%x) != PINDIR_OUTPUT\n", pPinInfo->dir);
+        return E_INVALIDARG;
+    }
+
+    assert(outputpin_size >= sizeof(OutputPin));
+
+    pPinImpl = CoTaskMemAlloc(outputpin_size);
+
+    if (!pPinImpl)
+        return E_OUTOFMEMORY;
+
+    if (SUCCEEDED(OutputPin_Init(OutputPin_Vtbl, pPinInfo, props, pUserData, pQueryAccept, pCritSec, pPinImpl)))
+    {
+        *ppPin = (IPin *)(&pPinImpl->pin.lpVtbl);
+        return S_OK;
+    }
+
+    CoTaskMemFree(pPinImpl);
+    return E_FAIL;
+}
diff --git a/dlls/quartz/pin.h b/dlls/quartz/pin.h
index 3a9719c..df0f4fd 100644
--- a/dlls/quartz/pin.h
+++ b/dlls/quartz/pin.h
@@ -189,19 +189,6 @@ HRESULT OutputPin_SendSample(OutputPin * This, IMediaSample * pSample);
 HRESULT OutputPin_DeliverDisconnect(OutputPin * This);
 HRESULT OutputPin_DeliverNewSegment(OutputPin * This, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
 
-/**********************************/
-/*** MemInputPin Implementation ***/
-
-HRESULT WINAPI MemInputPin_QueryInterface(IMemInputPin * iface, REFIID riid, LPVOID * ppv);
-ULONG   WINAPI MemInputPin_AddRef(IMemInputPin * iface);
-ULONG   WINAPI MemInputPin_Release(IMemInputPin * iface);
-HRESULT WINAPI MemInputPin_GetAllocator(IMemInputPin * iface, IMemAllocator ** ppAllocator);
-HRESULT WINAPI MemInputPin_NotifyAllocator(IMemInputPin * iface, IMemAllocator * pAllocator, BOOL bReadOnly);
-HRESULT WINAPI MemInputPin_GetAllocatorRequirements(IMemInputPin * iface, ALLOCATOR_PROPERTIES * pProps);
-HRESULT WINAPI MemInputPin_Receive(IMemInputPin * iface, IMediaSample * pSample);
-HRESULT WINAPI MemInputPin_ReceiveMultiple(IMemInputPin * iface, IMediaSample ** pSamples, long nSamples, long *nSamplesProcessed);
-HRESULT WINAPI MemInputPin_ReceiveCanBlock(IMemInputPin * iface);
-
 /* Pull Pin */
 HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
 HRESULT WINAPI PullPin_Disconnect(IPin * iface);
-- 
1.5.6.5




More information about the wine-patches mailing list