Gabriel Ivăncescu : qedit: Store the filename instead of querying the filter for it.

Alexandre Julliard julliard at winehq.org
Fri Apr 24 15:11:38 CDT 2020


Module: wine
Branch: master
Commit: 2e6f5e6784442fa0aabe12f1c8192fd6c492b0fe
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=2e6f5e6784442fa0aabe12f1c8192fd6c492b0fe

Author: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Date:   Thu Apr 23 14:45:44 2020 -0500

qedit: Store the filename instead of querying the filter for it.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/qedit/mediadet.c       | 35 ++++++++++++++++-------------------
 dlls/qedit/tests/mediadet.c |  4 ++--
 2 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/dlls/qedit/mediadet.c b/dlls/qedit/mediadet.c
index 22df05647e..d63825c629 100644
--- a/dlls/qedit/mediadet.c
+++ b/dlls/qedit/mediadet.c
@@ -41,6 +41,7 @@ typedef struct MediaDetImpl {
     IGraphBuilder *graph;
     IBaseFilter *source;
     IBaseFilter *splitter;
+    WCHAR *filename;
     LONG num_streams;
     LONG cur_stream;
     IPin *cur_pin;
@@ -66,6 +67,9 @@ static void MD_cleanup(MediaDetImpl *This)
     This->splitter = NULL;
     if (This->graph) IGraphBuilder_Release(This->graph);
     This->graph = NULL;
+    if (This->filename)
+        free(This->filename);
+    This->filename = NULL;
     This->num_streams = -1;
     This->cur_stream = 0;
 }
@@ -525,9 +529,6 @@ static HRESULT WINAPI MediaDet_get_StreamLength(IMediaDet* iface, double *pVal)
 static HRESULT WINAPI MediaDet_get_Filename(IMediaDet* iface, BSTR *pVal)
 {
     MediaDetImpl *This = impl_from_IMediaDet(iface);
-    IFileSourceFilter *file;
-    LPOLESTR name;
-    HRESULT hr;
 
     TRACE("(%p)\n", This);
 
@@ -537,35 +538,24 @@ static HRESULT WINAPI MediaDet_get_Filename(IMediaDet* iface, BSTR *pVal)
     *pVal = NULL;
     /* MSDN says it should return E_FAIL if no file is open, but tests
        show otherwise.  */
-    if (!This->source)
+    if (!This->filename)
         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);
+    *pVal = SysAllocString(This->filename);
     if (!*pVal)
         return E_OUTOFMEMORY;
 
     return S_OK;
 }
 
-static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal)
+static HRESULT WINAPI MediaDet_put_Filename(IMediaDet *iface, BSTR filename)
 {
     MediaDetImpl *This = impl_from_IMediaDet(iface);
     IGraphBuilder *gb;
     IBaseFilter *bf;
     HRESULT hr;
 
-    TRACE("(%p)->(%s)\n", This, debugstr_w(newVal));
+    TRACE("detector %p, filename %s.\n", This, debugstr_w(filename));
 
     if (This->graph)
     {
@@ -578,12 +568,19 @@ static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal)
     if (FAILED(hr))
         return hr;
 
-    if (FAILED(hr = IGraphBuilder_AddSourceFilter(gb, newVal, L"Source", &bf)))
+    if (FAILED(hr = IGraphBuilder_AddSourceFilter(gb, filename, L"Source", &bf)))
     {
         IGraphBuilder_Release(gb);
         return hr;
     }
 
+    if (!(This->filename = wcsdup(filename)))
+    {
+        IBaseFilter_Release(bf);
+        IGraphBuilder_Release(gb);
+        return E_OUTOFMEMORY;
+    }
+
     This->graph = gb;
     This->source = bf;
     hr = find_splitter(This);
diff --git a/dlls/qedit/tests/mediadet.c b/dlls/qedit/tests/mediadet.c
index 6decda8557..32861476dd 100644
--- a/dlls/qedit/tests/mediadet.c
+++ b/dlls/qedit/tests/mediadet.c
@@ -636,7 +636,7 @@ static void test_put_filter(void)
 
     filename = (BSTR)0xdeadbeef;
     hr = IMediaDet_get_Filename(detector, &filename);
-    todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+    ok(hr == S_OK, "Got hr %#x.\n", hr);
     ok(!filename, "Got filename %s.\n", debugstr_w(filename));
 
     ref = IMediaDet_Release(detector);
@@ -666,7 +666,7 @@ static void test_put_filter(void)
     filename = (BSTR)0xdeadbeef;
     hr = IMediaDet_get_Filename(detector, &filename);
     ok(hr == S_OK, "Got hr %#x.\n", hr);
-    todo_wine ok(!filename, "Got filename %s.\n", debugstr_w(filename));
+    ok(!filename, "Got filename %s.\n", debugstr_w(filename));
 
     count = 0xdeadbeef;
     hr = IMediaDet_get_OutputStreams(detector, &count);




More information about the wine-cvs mailing list