From 7d2d5a25cbe9a3722f183991729e694d5978905c Mon Sep 17 00:00:00 2001 From: Dan Hipschman Date: Tue, 8 Apr 2008 16:52:50 -0700 Subject: [PATCH] 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 34707fac18c..d4db2a4a82f 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 5ee064ec64c..062c105490d 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 + +#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 867d8689b10..3e6e48f464e 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"); -- 2.11.4.GIT