From a01d6be69fb33d91eae1d03bcac3ae6eb1095870 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 27 Apr 2012 13:47:39 -0500 Subject: [PATCH] strmbase: Implement BasicAudio. --- dlls/strmbase/Makefile.in | 1 + dlls/strmbase/audio.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++ include/wine/strmbase.h | 16 +++++++++ 3 files changed, 103 insertions(+) create mode 100644 dlls/strmbase/audio.c diff --git a/dlls/strmbase/Makefile.in b/dlls/strmbase/Makefile.in index f89c2c0d29a..3ac7c5611e2 100644 --- a/dlls/strmbase/Makefile.in +++ b/dlls/strmbase/Makefile.in @@ -1,6 +1,7 @@ MODULE = libstrmbase.a C_SRCS = \ + audio.c \ dispatch.c \ dllfunc.c \ enumpins.c \ diff --git a/dlls/strmbase/audio.c b/dlls/strmbase/audio.c new file mode 100644 index 00000000000..be995830054 --- /dev/null +++ b/dlls/strmbase/audio.c @@ -0,0 +1,86 @@ +/* + * Generic Implementation of strmbase audio classes + * + * Copyright 2012 Aric Stewart, CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS + +#include +#include "dshow.h" +#include "uuids.h" +#include "vfwmsgs.h" +#include "wine/debug.h" +#include "wine/unicode.h" +#include "wine/strmbase.h" + +WINE_DEFAULT_DEBUG_CHANNEL(strmbase); + +static inline BasicAudio *impl_from_IBasicAudio(IBasicAudio *iface) +{ + return CONTAINING_RECORD(iface, BasicAudio, IBasicAudio_iface); +} + +HRESULT WINAPI BasicAudio_Init(BasicAudio *pBasicAudio, const IBasicAudioVtbl *lpVtbl) +{ + pBasicAudio->IBasicAudio_iface.lpVtbl = lpVtbl; + BaseDispatch_Init(&pBasicAudio->baseDispatch, &IID_IBasicAudio); + + return S_OK; +} + +HRESULT WINAPI BasicAudio_Destroy(BasicAudio *pBasicAudio) +{ + return BaseDispatch_Destroy(&pBasicAudio->baseDispatch); +} + +HRESULT WINAPI BasicAudioImpl_GetTypeInfoCount(IBasicAudio *iface, UINT *pctinfo) +{ + BasicAudio *This = impl_from_IBasicAudio(iface); + + return BaseDispatchImpl_GetTypeInfoCount(&This->baseDispatch, pctinfo); +} + +HRESULT WINAPI BasicAudioImpl_GetTypeInfo(IBasicAudio *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) +{ + BasicAudio *This = impl_from_IBasicAudio(iface); + + return BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, &IID_NULL, iTInfo, lcid, ppTInfo); +} + +HRESULT WINAPI BasicAudioImpl_GetIDsOfNames(IBasicAudio *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) +{ + BasicAudio *This = impl_from_IBasicAudio(iface); + + return BaseDispatchImpl_GetIDsOfNames(&This->baseDispatch, riid, rgszNames, cNames, lcid, rgDispId); +} + +HRESULT WINAPI BasicAudioImpl_Invoke(IBasicAudio *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr) +{ + BasicAudio *This = impl_from_IBasicAudio(iface); + HRESULT hr = S_OK; + ITypeInfo *pTypeInfo; + + hr = BaseDispatchImpl_GetTypeInfo(&This->baseDispatch, riid, 1, lcid, &pTypeInfo); + if (SUCCEEDED(hr)) + { + hr = ITypeInfo_Invoke(pTypeInfo, &This->IBasicAudio_iface, dispIdMember, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr); + ITypeInfo_Release(pTypeInfo); + } + + return hr; +} diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 3e749a589fd..da6475da218 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -635,6 +635,22 @@ HRESULT WINAPI BaseRendererImpl_ClearPendingSample(BaseRenderer *iface); HRESULT WINAPI BaseRenderer_Init(BaseRenderer *This, const IBaseFilterVtbl *Vtbl, IUnknown *pUnkOuter, const CLSID *pClsid, DWORD_PTR DebugInfo, const BaseRendererFuncTable* pBaseFuncsTable); +#ifdef __IBasicAudio_FWD_DEFINED__ +typedef struct tagBasicAudio +{ + IBasicAudio IBasicAudio_iface; + BaseDispatch baseDispatch; +} BasicAudio; + +HRESULT WINAPI BasicAudio_Init(BasicAudio *This, const IBasicAudioVtbl *Vtbl); +HRESULT WINAPI BasicAudio_Destroy(BasicAudio *pBasicAudio); + +HRESULT WINAPI BasicAudioImpl_GetTypeInfoCount(IBasicAudio *iface, UINT*pctinfo); +HRESULT WINAPI BasicAudioImpl_GetTypeInfo(IBasicAudio *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); +HRESULT WINAPI BasicAudioImpl_GetIDsOfNames(IBasicAudio *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); +HRESULT WINAPI BasicAudioImpl_Invoke(IBasicAudio *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExepInfo, UINT *puArgErr); +#endif + /* Dll Functions */ BOOL WINAPI STRMBASE_DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv); HRESULT WINAPI STRMBASE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv); -- 2.11.4.GIT