[PATCH v4 2/9] qedit: Move GetSplitter up and rename it.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Tue Apr 21 07:19:26 CDT 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/qedit/mediadet.c | 220 +++++++++++++++++++++---------------------
1 file changed, 110 insertions(+), 110 deletions(-)
diff --git a/dlls/qedit/mediadet.c b/dlls/qedit/mediadet.c
index 4f84deb..52090b8 100644
--- a/dlls/qedit/mediadet.c
+++ b/dlls/qedit/mediadet.c
@@ -104,6 +104,115 @@ static HRESULT get_filter_info(IMoniker *moniker, GUID *clsid, VARIANT *var)
return hr;
}
+static HRESULT get_splitter(MediaDetImpl *This)
+{
+ IFileSourceFilter *file;
+ LPOLESTR name;
+ AM_MEDIA_TYPE mt;
+ GUID type[2];
+ IFilterMapper2 *map;
+ IEnumMoniker *filters;
+ IMoniker *mon;
+ VARIANT var;
+ GUID clsid;
+ IBaseFilter *splitter;
+ IEnumPins *pins;
+ IPin *source_pin, *splitter_pin;
+ HRESULT hr;
+
+ hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IFilterMapper2, (void **) &map);
+ if (FAILED(hr))
+ return hr;
+
+ hr = IBaseFilter_QueryInterface(This->source, &IID_IFileSourceFilter,
+ (void **) &file);
+ if (FAILED(hr))
+ {
+ IFilterMapper2_Release(map);
+ return hr;
+ }
+
+ hr = IFileSourceFilter_GetCurFile(file, &name, &mt);
+ IFileSourceFilter_Release(file);
+ CoTaskMemFree(name);
+ if (FAILED(hr))
+ {
+ IFilterMapper2_Release(map);
+ return hr;
+ }
+ type[0] = mt.majortype;
+ type[1] = mt.subtype;
+ CoTaskMemFree(mt.pbFormat);
+
+ hr = IFilterMapper2_EnumMatchingFilters(map, &filters, 0, TRUE,
+ MERIT_UNLIKELY, FALSE, 1, type,
+ NULL, NULL, FALSE, TRUE,
+ 0, NULL, NULL, NULL);
+ IFilterMapper2_Release(map);
+ if (FAILED(hr))
+ return hr;
+
+ hr = E_NOINTERFACE;
+ while (IEnumMoniker_Next(filters, 1, &mon, NULL) == S_OK)
+ {
+ hr = get_filter_info(mon, &clsid, &var);
+ IMoniker_Release(mon);
+ if (FAILED(hr))
+ continue;
+
+ hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IBaseFilter, (void **) &splitter);
+ if (FAILED(hr))
+ {
+ VariantClear(&var);
+ continue;
+ }
+
+ hr = IGraphBuilder_AddFilter(This->graph, splitter, V_BSTR(&var));
+ VariantClear(&var);
+ This->splitter = splitter;
+ if (FAILED(hr))
+ goto retry;
+
+ hr = IBaseFilter_EnumPins(This->source, &pins);
+ if (FAILED(hr))
+ goto retry;
+ IEnumPins_Next(pins, 1, &source_pin, NULL);
+ IEnumPins_Release(pins);
+
+ hr = IBaseFilter_EnumPins(splitter, &pins);
+ if (FAILED(hr))
+ {
+ IPin_Release(source_pin);
+ goto retry;
+ }
+ if (IEnumPins_Next(pins, 1, &splitter_pin, NULL) != S_OK)
+ {
+ IEnumPins_Release(pins);
+ IPin_Release(source_pin);
+ goto retry;
+ }
+ IEnumPins_Release(pins);
+
+ hr = IPin_Connect(source_pin, splitter_pin, NULL);
+ IPin_Release(source_pin);
+ IPin_Release(splitter_pin);
+ if (SUCCEEDED(hr))
+ break;
+
+retry:
+ IBaseFilter_Release(splitter);
+ This->splitter = NULL;
+ }
+
+ IEnumMoniker_Release(filters);
+ if (FAILED(hr))
+ return hr;
+
+ return S_OK;
+}
+
/* MediaDet inner IUnknown */
static HRESULT WINAPI MediaDet_inner_QueryInterface(IUnknown *iface, REFIID riid, void **ppv)
{
@@ -406,115 +515,6 @@ static HRESULT WINAPI MediaDet_get_Filename(IMediaDet* iface, BSTR *pVal)
return S_OK;
}
-static HRESULT GetSplitter(MediaDetImpl *This)
-{
- IFileSourceFilter *file;
- LPOLESTR name;
- AM_MEDIA_TYPE mt;
- GUID type[2];
- IFilterMapper2 *map;
- IEnumMoniker *filters;
- IMoniker *mon;
- VARIANT var;
- GUID clsid;
- IBaseFilter *splitter;
- IEnumPins *pins;
- IPin *source_pin, *splitter_pin;
- HRESULT hr;
-
- hr = CoCreateInstance(&CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
- &IID_IFilterMapper2, (void **) &map);
- if (FAILED(hr))
- return hr;
-
- hr = IBaseFilter_QueryInterface(This->source, &IID_IFileSourceFilter,
- (void **) &file);
- if (FAILED(hr))
- {
- IFilterMapper2_Release(map);
- return hr;
- }
-
- hr = IFileSourceFilter_GetCurFile(file, &name, &mt);
- IFileSourceFilter_Release(file);
- CoTaskMemFree(name);
- if (FAILED(hr))
- {
- IFilterMapper2_Release(map);
- return hr;
- }
- type[0] = mt.majortype;
- type[1] = mt.subtype;
- CoTaskMemFree(mt.pbFormat);
-
- hr = IFilterMapper2_EnumMatchingFilters(map, &filters, 0, TRUE,
- MERIT_UNLIKELY, FALSE, 1, type,
- NULL, NULL, FALSE, TRUE,
- 0, NULL, NULL, NULL);
- IFilterMapper2_Release(map);
- if (FAILED(hr))
- return hr;
-
- hr = E_NOINTERFACE;
- while (IEnumMoniker_Next(filters, 1, &mon, NULL) == S_OK)
- {
- hr = get_filter_info(mon, &clsid, &var);
- IMoniker_Release(mon);
- if (FAILED(hr))
- continue;
-
- hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER,
- &IID_IBaseFilter, (void **) &splitter);
- if (FAILED(hr))
- {
- VariantClear(&var);
- continue;
- }
-
- hr = IGraphBuilder_AddFilter(This->graph, splitter, V_BSTR(&var));
- VariantClear(&var);
- This->splitter = splitter;
- if (FAILED(hr))
- goto retry;
-
- hr = IBaseFilter_EnumPins(This->source, &pins);
- if (FAILED(hr))
- goto retry;
- IEnumPins_Next(pins, 1, &source_pin, NULL);
- IEnumPins_Release(pins);
-
- hr = IBaseFilter_EnumPins(splitter, &pins);
- if (FAILED(hr))
- {
- IPin_Release(source_pin);
- goto retry;
- }
- if (IEnumPins_Next(pins, 1, &splitter_pin, NULL) != S_OK)
- {
- IEnumPins_Release(pins);
- IPin_Release(source_pin);
- goto retry;
- }
- IEnumPins_Release(pins);
-
- hr = IPin_Connect(source_pin, splitter_pin, NULL);
- IPin_Release(source_pin);
- IPin_Release(splitter_pin);
- if (SUCCEEDED(hr))
- break;
-
-retry:
- IBaseFilter_Release(splitter);
- This->splitter = NULL;
- }
-
- IEnumMoniker_Release(filters);
- if (FAILED(hr))
- return hr;
-
- return S_OK;
-}
-
static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal)
{
MediaDetImpl *This = impl_from_IMediaDet(iface);
@@ -543,7 +543,7 @@ static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal)
This->graph = gb;
This->source = bf;
- hr = GetSplitter(This);
+ hr = get_splitter(This);
if (FAILED(hr))
return hr;
--
2.21.0
More information about the wine-devel
mailing list