quartz: Print the debug string and not the pointer to it.
[wine] / dlls / quartz / main.c
index 1e73979..4fec30d 100644 (file)
@@ -2,9 +2,6 @@
  *
  * Copyright 2002 Lionel Ulmer
  *
- * This file contains the (internal) driver registration functions,
- * driver enumeration APIs and DirectDraw creation functions.
- *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
 #include "wine/debug.h"
 
 #include "quartz_private.h"
+#include "wine/unicode.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(quartz);
 
+extern HRESULT WINAPI QUARTZ_DllGetClassObject(REFCLSID, REFIID, LPVOID *) DECLSPEC_HIDDEN;
+extern HRESULT WINAPI QUARTZ_DllCanUnloadNow(void) DECLSPEC_HIDDEN;
+extern BOOL WINAPI QUARTZ_DllMain(HINSTANCE, DWORD, LPVOID) DECLSPEC_HIDDEN;
+
 static DWORD dll_ref = 0;
 
 /* For the moment, do nothing here. */
 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 {
-    switch(fdwReason) {
-        case DLL_PROCESS_ATTACH:
-            DisableThreadLibraryCalls(hInstDLL);
-           break;
-       case DLL_PROCESS_DETACH:
-           break;
-    }
-    return TRUE;
+    if (fdwReason == DLL_PROCESS_DETACH)
+        video_unregister_windowclass();
+    return QUARTZ_DllMain( hInstDLL, fdwReason, lpv );
+}
+
+HRESULT SeekingPassThru_create(IUnknown *pUnkOuter, LPVOID *ppObj)
+{
+    return PosPassThru_Construct(pUnkOuter,ppObj); /* from strmbase */
 }
 
 /******************************************************************************
@@ -60,6 +62,7 @@ struct object_creation_info
 
 static const struct object_creation_info object_creation[] =
 {
+    { &CLSID_SeekingPassThru, SeekingPassThru_create },
     { &CLSID_FilterGraph, FilterGraph_create },
     { &CLSID_FilterGraphNoThread, FilterGraphNoThread_create },
     { &CLSID_FilterMapper, FilterMapper_create },
@@ -69,11 +72,14 @@ static const struct object_creation_info object_creation[] =
     { &CLSID_AviSplitter, AVISplitter_create },
     { &CLSID_MPEG1Splitter, MPEGSplitter_create },
     { &CLSID_VideoRenderer, VideoRenderer_create },
+    { &CLSID_NullRenderer, NullRenderer_create },
+    { &CLSID_VideoRendererDefault, VideoRendererDefault_create },
     { &CLSID_DSoundRender, DSoundRender_create },
+    { &CLSID_AudioRender, DSoundRender_create },
     { &CLSID_AVIDec, AVIDec_create },
-    { &CLSID_SystemClock, &QUARTZ_CreateSystemClock },
-    { &CLSID_ACMWrapper, &ACMWrapper_create },
-    { &CLSID_WAVEParser, &WAVEParser_create }
+    { &CLSID_SystemClock, QUARTZ_CreateSystemClock },
+    { &CLSID_ACMWrapper, ACMWrapper_create },
+    { &CLSID_WAVEParser, WAVEParser_create }
 };
 
 static HRESULT WINAPI
@@ -89,6 +95,7 @@ DSCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
        return S_OK;
     }
 
+    *ppobj = NULL;
     WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
     return E_NOINTERFACE;
 }
@@ -166,36 +173,29 @@ static const IClassFactoryVtbl DSCF_Vtbl =
 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 {
     unsigned int i;
-    IClassFactoryImpl *factory;
-    
-    TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
-    
-    if ( !IsEqualGUID( &IID_IClassFactory, riid )
-        && ! IsEqualGUID( &IID_IUnknown, riid) )
-       return E_NOINTERFACE;
 
-    for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
-    {
-       if (IsEqualGUID(object_creation[i].clsid, rclsid))
-           break;
-    }
+    TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
 
-    if (i == sizeof(object_creation)/sizeof(object_creation[0]))
+    if (IsEqualGUID( &IID_IClassFactory, riid ) || IsEqualGUID( &IID_IUnknown, riid))
     {
-       FIXME("%s: no class found.\n", debugstr_guid(rclsid));
-       return CLASS_E_CLASSNOTAVAILABLE;
+        for (i=0; i < sizeof(object_creation)/sizeof(object_creation[0]); i++)
+        {
+            if (IsEqualGUID(object_creation[i].clsid, rclsid))
+            {
+                IClassFactoryImpl *factory = CoTaskMemAlloc(sizeof(*factory));
+                if (factory == NULL) return E_OUTOFMEMORY;
+
+                factory->ITF_IClassFactory.lpVtbl = &DSCF_Vtbl;
+                factory->ref = 1;
+
+                factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
+
+                *ppv = &factory->ITF_IClassFactory;
+                return S_OK;
+            }
+        }
     }
-
-    factory = CoTaskMemAlloc(sizeof(*factory));
-    if (factory == NULL) return E_OUTOFMEMORY;
-
-    factory->ITF_IClassFactory.lpVtbl = &DSCF_Vtbl;
-    factory->ref = 1;
-
-    factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
-
-    *ppv = &(factory->ITF_IClassFactory);
-    return S_OK;
+    return QUARTZ_DllGetClassObject( rclsid, riid, ppv );
 }
 
 /***********************************************************************
@@ -203,7 +203,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
  */
 HRESULT WINAPI DllCanUnloadNow(void)
 {
-    return dll_ref != 0 ? S_FALSE : S_OK;
+    if (dll_ref) return S_FALSE;
+    return QUARTZ_DllCanUnloadNow();
 }
 
 
@@ -219,6 +220,49 @@ static const struct {
     { { 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0} }, NULL }
 };
 
+/***********************************************************************
+ *              proxies
+ */
+HRESULT CALLBACK ICaptureGraphBuilder_FindInterface_Proxy( ICaptureGraphBuilder *This,
+                                                           const GUID *pCategory,
+                                                           IBaseFilter *pf,
+                                                           REFIID riid,
+                                                           void **ppint )
+{
+    return ICaptureGraphBuilder_RemoteFindInterface_Proxy( This, pCategory, pf,
+                                                           riid, (IUnknown **)ppint );
+}
+
+HRESULT __RPC_STUB ICaptureGraphBuilder_FindInterface_Stub( ICaptureGraphBuilder *This,
+                                                            const GUID *pCategory,
+                                                            IBaseFilter *pf,
+                                                            REFIID riid,
+                                                            IUnknown **ppint )
+{
+    return ICaptureGraphBuilder_FindInterface( This, pCategory, pf, riid, (void **)ppint );
+}
+
+HRESULT CALLBACK ICaptureGraphBuilder2_FindInterface_Proxy( ICaptureGraphBuilder2 *This,
+                                                            const GUID *pCategory,
+                                                            const GUID *pType,
+                                                            IBaseFilter *pf,
+                                                            REFIID riid,
+                                                            void **ppint )
+{
+    return ICaptureGraphBuilder2_RemoteFindInterface_Proxy( This, pCategory, pType,
+                                                            pf, riid, (IUnknown **)ppint );
+}
+
+HRESULT __RPC_STUB ICaptureGraphBuilder2_FindInterface_Stub( ICaptureGraphBuilder2 *This,
+                                                             const GUID *pCategory,
+                                                             const GUID *pType,
+                                                             IBaseFilter *pf,
+                                                             REFIID riid,
+                                                             IUnknown **ppint )
+{
+    return ICaptureGraphBuilder2_FindInterface( This, pCategory, pType, pf, riid, (void **)ppint );
+}
+
 /***********************************************************************
  *              qzdebugstr_guid (internal)
  *
@@ -235,26 +279,6 @@ const char * qzdebugstr_guid( const GUID * id )
     return debugstr_guid(id);
 }
 
-/***********************************************************************
- *              qzdebugstr_State (internal)
- *
- * Gives a text version of the FILTER_STATE enumeration
- */
-const char * qzdebugstr_State(FILTER_STATE state)
-{
-    switch (state)
-    {
-    case State_Stopped:
-        return "State_Stopped";
-    case State_Running:
-        return "State_Running";
-    case State_Paused:
-        return "State_Paused";
-    default:
-        return "State_Unknown";
-    }
-}
-
 LONG WINAPI AmpFactorToDB(LONG ampfactor)
 {
     FIXME("(%d) Stub!\n", ampfactor);
@@ -275,17 +299,15 @@ LONG WINAPI DBToAmpFactor(LONG db)
  */
 DWORD WINAPI AMGetErrorTextA(HRESULT hr, LPSTR buffer, DWORD maxlen)
 {
-    int len;
-    static const char format[] = "Error: 0x%x";
-    char error[MAX_ERROR_TEXT_LEN];
+    DWORD res;
+    WCHAR errorW[MAX_ERROR_TEXT_LEN];
 
-    FIXME("(%x,%p,%d) stub\n", hr, buffer, maxlen);
+    TRACE("(%x,%p,%d)\n", hr, buffer, maxlen);
+    if (!buffer)
+        return 0;
 
-    if (!buffer) return 0;
-    wsprintfA(error, format, hr);
-    if ((len = lstrlenA(error)) >= maxlen) return 0; 
-    lstrcpyA(buffer, error);
-    return len;
+    res = AMGetErrorTextW(hr, errorW, sizeof(errorW)/sizeof(*errorW));
+    return WideCharToMultiByte(CP_ACP, 0, errorW, res, buffer, maxlen, 0, 0);
 }
 
 /***********************************************************************
@@ -293,7 +315,7 @@ DWORD WINAPI AMGetErrorTextA(HRESULT hr, LPSTR buffer, DWORD maxlen)
  */
 DWORD WINAPI AMGetErrorTextW(HRESULT hr, LPWSTR buffer, DWORD maxlen)
 {
-    int len;
+    unsigned int len;
     static const WCHAR format[] = {'E','r','r','o','r',':',' ','0','x','%','l','x',0};
     WCHAR error[MAX_ERROR_TEXT_LEN];
 
@@ -301,7 +323,7 @@ DWORD WINAPI AMGetErrorTextW(HRESULT hr, LPWSTR buffer, DWORD maxlen)
 
     if (!buffer) return 0;
     wsprintfW(error, format, hr);
-    if ((len = lstrlenW(error)) >= maxlen) return 0; 
+    if ((len = strlenW(error)) >= maxlen) return 0;
     lstrcpyW(buffer, error);
     return len;
 }