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