Module: wine Branch: master Commit: 7d2d5a25cbe9a3722f183991729e694d5978905c URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d2d5a25cbe9a3722f18399172...
Author: Dan Hipschman dsh@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");