[MSDVBNP]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 1 Apr 2010 19:20:12 +0000 (19:20 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Thu, 1 Apr 2010 19:20:12 +0000 (19:20 +0000)
- Remove DebugBreak
- Implement IPin::Connect, IPin::ReceiveConnection, IPin::Disconnect, IPin::ConnectedTo
- Remove spaces
- DVBT Network Provider can now connect tv tuner in ReactOS

svn path=/trunk/; revision=46646

reactos/dll/directx/msdvbnp/msdvbnp.cpp
reactos/dll/directx/msdvbnp/networkprovider.cpp
reactos/dll/directx/msdvbnp/pin.cpp

index 2da8108..b67f232 100644 (file)
@@ -122,7 +122,7 @@ DllGetClassObject(
 {
     UINT i;
     HRESULT hres = E_OUTOFMEMORY;
-    IClassFactory * pcf = NULL;        
+    IClassFactory * pcf = NULL;
 
     if (!ppv)
         return E_INVALIDARG;
@@ -138,7 +138,7 @@ DllGetClassObject(
         }
     }
 
-    if (!pcf) 
+    if (!pcf)
     {
         return CLASS_E_CLASSNOTAVAILABLE;
     }
index 7dea366..0ac050d 100644 (file)
@@ -201,7 +201,6 @@ CNetworkProvider::QueryInterface(
     swprintf(Buffer, L"CNetworkProvider::QueryInterface: NoInterface for %s !!!\n", lpstr);
     OutputDebugStringW(Buffer);
     CoTaskMemFree(lpstr);
-    DebugBreak();
 
     return E_NOINTERFACE;
 }
index e2acef0..b53ba43 100644 (file)
@@ -51,7 +51,7 @@ public:
     HRESULT STDMETHODCALLTYPE EndFlush();
     HRESULT STDMETHODCALLTYPE NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
 
-    CPin(IBaseFilter * ParentFilter) : m_Ref(0), m_ParentFilter(ParentFilter){};
+    CPin(IBaseFilter * ParentFilter);
     virtual ~CPin(){};
 
     static LPCWSTR PIN_ID;
@@ -59,11 +59,31 @@ public:
 protected:
     LONG m_Ref;
     IBaseFilter * m_ParentFilter;
+    AM_MEDIA_TYPE m_MediaType;
+    IPin * m_Pin;
 };
 
 
 LPCWSTR CPin::PIN_ID = L"Antenna Out";
 
+
+CPin::CPin(
+    IBaseFilter * ParentFilter) : m_Ref(0),
+                                  m_ParentFilter(ParentFilter),
+                                  m_Pin(0)
+{
+    m_MediaType.majortype = KSDATAFORMAT_TYPE_BDA_ANTENNA;
+    m_MediaType.subtype = MEDIASUBTYPE_None;
+    m_MediaType.formattype = FORMAT_None;
+    m_MediaType.bFixedSizeSamples = true;
+    m_MediaType.bTemporalCompression = false;
+    m_MediaType.lSampleSize = sizeof(CHAR);
+    m_MediaType.pUnk = NULL;
+    m_MediaType.cbFormat = 0;
+    m_MediaType.pbFormat = NULL;
+}
+
+
 HRESULT
 STDMETHODCALLTYPE
 CPin::QueryInterface(
@@ -100,36 +120,97 @@ HRESULT
 STDMETHODCALLTYPE
 CPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
 {
+    HRESULT hr;
     OutputDebugStringW(L"CPin::Connect called\n");
-    return E_NOTIMPL;
+
+    if (pmt)
+    {
+        hr = pReceivePin->QueryAccept(pmt);
+        if (FAILED(hr))
+        {
+            OutputDebugStringW(L"CPin::Connect QueryAccept failed\n");
+            return hr;
+        }
+    }
+    else
+    {
+        // query accept
+        hr = pReceivePin->QueryAccept(&m_MediaType);
+        if (FAILED(hr))
+        {
+            OutputDebugStringW(L"CPin::Connect QueryAccept pmt default failed\n");
+            return hr;
+        }
+
+         pmt = &m_MediaType;
+    }
+
+    // receive connection;
+    hr = pReceivePin->ReceiveConnection((IPin*)this, pmt);
+    if (SUCCEEDED(hr))
+    {
+        // increment reference count
+        pReceivePin->AddRef();
+        m_Pin = pReceivePin;
+        OutputDebugStringW(L"CPin::Connect success\n");
+    }
+
+    return hr;
 }
 
 HRESULT
 STDMETHODCALLTYPE
 CPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt)
 {
-    OutputDebugStringW(L"CPin::ReceiveConnection called\n");
-    return E_NOTIMPL;
+    return E_UNEXPECTED;
 }
+
 HRESULT
 STDMETHODCALLTYPE
 CPin::Disconnect( void)
 {
-    OutputDebugStringW(L"CPin::Disconnect called\n");
-    return E_NOTIMPL;
+#ifdef MSDVBNP_TRACE
+   OutputDebugStringW(L"CPin::Disconnect\n");
+#endif
+
+    if (!m_Pin)
+    {
+        // pin was not connected
+        return S_FALSE;
+    }
+
+    m_Pin->Release();
+    m_Pin = NULL;
+
+    return S_OK;
 }
 HRESULT
 STDMETHODCALLTYPE
 CPin::ConnectedTo(IPin **pPin)
 {
-    OutputDebugStringW(L"CPin::ConnectedTo called\n");
+#ifdef MSDVBNP_TRACE
+   OutputDebugStringW(L"CPin::ConnectedTo\n");
+#endif
+
+    if (!pPin)
+        return E_POINTER;
+
+    if (m_Pin)
+    {
+        // increment reference count
+        m_Pin->AddRef();
+        *pPin = m_Pin;
+        return S_OK;
+    }
+
+    *pPin = NULL;
     return VFW_E_NOT_CONNECTED;
 }
 HRESULT
 STDMETHODCALLTYPE
 CPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
 {
-    OutputDebugStringW(L"CPin::ConnectionMediaType called\n");
+    OutputDebugStringW(L"CPin::ConnectionMediaType NotImplemented\n");
     return E_NOTIMPL;
 }
 HRESULT
@@ -170,7 +251,7 @@ HRESULT
 STDMETHODCALLTYPE
 CPin::QueryAccept(const AM_MEDIA_TYPE *pmt)
 {
-    OutputDebugStringW(L"CPin::QueryAccept called\n");
+    OutputDebugStringW(L"CPin::QueryAccept NotImplemented\n");
     return E_NOTIMPL;
 }
 HRESULT
@@ -200,35 +281,35 @@ HRESULT
 STDMETHODCALLTYPE
 CPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
 {
-    OutputDebugStringW(L"CPin::QueryInternalConnections called\n");
+    OutputDebugStringW(L"CPin::QueryInternalConnections NotImplemented\n");
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CPin::EndOfStream( void)
 {
-    OutputDebugStringW(L"CPin::EndOfStream called\n");
+    OutputDebugStringW(L"CPin::EndOfStream NotImplemented\n");
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CPin::BeginFlush( void)
 {
-    OutputDebugStringW(L"CPin::BeginFlush called\n");
+    OutputDebugStringW(L"CPin::BeginFlush NotImplemented\n");
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CPin::EndFlush( void)
 {
-    OutputDebugStringW(L"CPin::EndFlush called\n");
+    OutputDebugStringW(L"CPin::EndFlush NotImplemented\n");
     return E_NOTIMPL;
 }
 HRESULT
 STDMETHODCALLTYPE
 CPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
 {
-    OutputDebugStringW(L"CPin::NewSegment called\n");
+    OutputDebugStringW(L"CPin::NewSegment NotImplemented\n");
     return E_NOTIMPL;
 }