Dan Hipschman : qedit: Implement IMediaDet_get_Filename.

Alexandre Julliard julliard at winehq.org
Wed Apr 9 05:31:33 CDT 2008


Module: wine
Branch: master
Commit: 7d2d5a25cbe9a3722f183991729e694d5978905c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7d2d5a25cbe9a3722f183991729e694d5978905c

Author: Dan Hipschman <dsh at linux.ucla.edu>
Date:   Tue Apr  8 16:52:50 2008 -0700

qedit: Implement IMediaDet_get_Filename.

---

 dlls/qedit/Makefile.in      |    2 +-
 dlls/qedit/mediadet.c       |   42 ++++++++++++++++++++++++++++++++++++++++--
 dlls/qedit/tests/mediadet.c |   21 ++++++++++++++++++---
 3 files changed, 59 insertions(+), 6 deletions(-)

diff --git a/dlls/qedit/Makefile.in b/dlls/qedit/Makefile.in
index 34707fa..d4db2a4 100644
--- a/dlls/qedit/Makefile.in
+++ b/dlls/qedit/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = qedit.dll
-IMPORTS   = ole32 advapi32 kernel32
+IMPORTS   = oleaut32 ole32 advapi32 kernel32
 EXTRALIBS = -lstrmiids -luuid
 
 C_SRCS = \
diff --git a/dlls/qedit/mediadet.c b/dlls/qedit/mediadet.c
index 5ee064e..062c105 100644
--- a/dlls/qedit/mediadet.c
+++ b/dlls/qedit/mediadet.c
@@ -17,6 +17,15 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include <stdarg.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "ole2.h"
+
 #include "qedit_private.h"
 #include "wine/debug.h"
 
@@ -137,8 +146,37 @@ static HRESULT WINAPI MediaDet_get_StreamLength(IMediaDet* iface, double *pVal)
 static HRESULT WINAPI MediaDet_get_Filename(IMediaDet* iface, BSTR *pVal)
 {
     MediaDetImpl *This = (MediaDetImpl *)iface;
-    FIXME("(%p)->(%p): not implemented!\n", This, pVal);
-    return E_NOTIMPL;
+    IFileSourceFilter *file;
+    LPOLESTR name;
+    HRESULT hr;
+
+    TRACE("(%p)\n", This);
+
+    if (!pVal)
+        return E_POINTER;
+
+    *pVal = NULL;
+    /* MSDN says it should return E_FAIL if no file is open, but tests
+       show otherwise.  */
+    if (!This->source)
+        return S_OK;
+
+    hr = IBaseFilter_QueryInterface(This->source, &IID_IFileSourceFilter,
+                                    (void **) &file);
+    if (FAILED(hr))
+        return hr;
+
+    hr = IFileSourceFilter_GetCurFile(file, &name, NULL);
+    IFileSourceFilter_Release(file);
+    if (FAILED(hr))
+        return hr;
+
+    *pVal = SysAllocString(name);
+    CoTaskMemFree(name);
+    if (!*pVal)
+        return E_OUTOFMEMORY;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal)
diff --git a/dlls/qedit/tests/mediadet.c b/dlls/qedit/tests/mediadet.c
index 867d868..3e6e48f 100644
--- a/dlls/qedit/tests/mediadet.c
+++ b/dlls/qedit/tests/mediadet.c
@@ -93,6 +93,18 @@ static void test_mediadet(void)
     ok(hr == S_OK, "CoCreateInstance failed with %x\n", hr);
     ok(pM != NULL, "pM is NULL\n");
 
+    filename = NULL;
+    hr = IMediaDet_get_Filename(pM, &filename);
+    /* Despite what MSDN claims, this returns S_OK.  */
+    ok(hr == S_OK, "IMediaDet_get_Filename\n");
+    ok(filename == NULL, "IMediaDet_get_Filename\n");
+
+    filename = (BSTR) -1;
+    hr = IMediaDet_get_Filename(pM, &filename);
+    /* Despite what MSDN claims, this returns S_OK.  */
+    ok(hr == S_OK, "IMediaDet_get_Filename\n");
+    ok(filename == NULL, "IMediaDet_get_Filename\n");
+
     filename = SysAllocString(test_avi_filename);
     hr = IMediaDet_put_Filename(pM, filename);
     ok(hr == S_OK, "IMediaDet_put_Filename -> %x\n", hr);
@@ -104,11 +116,14 @@ static void test_mediadet(void)
 
     filename = NULL;
     hr = IMediaDet_get_Filename(pM, &filename);
-    todo_wine ok(hr == S_OK, "IMediaDet_get_Filename\n");
-    todo_wine ok(lstrcmpW(filename, test_avi_filename) == 0,
-                 "IMediaDet_get_Filename\n");
+    ok(hr == S_OK, "IMediaDet_get_Filename\n");
+    ok(lstrcmpW(filename, test_avi_filename) == 0,
+       "IMediaDet_get_Filename\n");
     SysFreeString(filename);
 
+    hr = IMediaDet_get_Filename(pM, NULL);
+    ok(hr == E_POINTER, "IMediaDet_get_Filename\n");
+
     hr = IMediaDet_put_CurrentStream(pM, 0);
     todo_wine ok(hr == S_OK, "IMediaDet_put_CurrentStream\n");
 




More information about the wine-cvs mailing list