From 961921060c9b63beaf80043d7ee0f4f3f74df413 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Mon, 4 Oct 2010 09:48:25 -0500 Subject: [PATCH] strmbase: Initial creation of static strmbase library for Quartz and Quartz filters. Move the Media Type Functions. --- configure | 1 + configure.ac | 1 + dlls/qcap/Makefile.in | 2 +- dlls/qcap/enummedia.c | 29 +------------- dlls/qcap/qcap_main.h | 4 +- dlls/quartz/Makefile.in | 2 +- dlls/quartz/enummedia.c | 49 ---------------------- dlls/quartz/quartz_private.h | 4 +- dlls/strmbase/Makefile.in | 6 +++ dlls/strmbase/mediatype.c | 78 ++++++++++++++++++++++++++++++++++++ include/wine/strmbase.h | 25 ++++++++++++ 11 files changed, 117 insertions(+), 84 deletions(-) create mode 100644 dlls/strmbase/Makefile.in create mode 100644 dlls/strmbase/mediatype.c create mode 100644 include/wine/strmbase.h diff --git a/configure b/configure index 025eda36a8a..a7350910d28 100755 --- a/configure +++ b/configure @@ -14884,6 +14884,7 @@ wine_fn_config_dll sti enable_sti sti wine_fn_config_test dlls/sti/tests sti_test wine_fn_config_dll storage.dll16 enable_win16 wine_fn_config_dll stress.dll16 enable_win16 +wine_fn_config_lib strmbase wine_fn_config_lib strmiids wine_fn_config_dll svrapi enable_svrapi wine_fn_config_dll sxs enable_sxs diff --git a/configure.ac b/configure.ac index 52fee5195ee..1a502dbbef4 100644 --- a/configure.ac +++ b/configure.ac @@ -2662,6 +2662,7 @@ WINE_CONFIG_DLL(sti,,[sti]) WINE_CONFIG_TEST(dlls/sti/tests) WINE_CONFIG_DLL(storage.dll16,enable_win16) WINE_CONFIG_DLL(stress.dll16,enable_win16) +WINE_CONFIG_LIB(strmbase) WINE_CONFIG_LIB(strmiids) WINE_CONFIG_DLL(svrapi) WINE_CONFIG_DLL(sxs) diff --git a/dlls/qcap/Makefile.in b/dlls/qcap/Makefile.in index f3b61ab65d9..a8675e2a091 100644 --- a/dlls/qcap/Makefile.in +++ b/dlls/qcap/Makefile.in @@ -1,5 +1,5 @@ MODULE = qcap.dll -IMPORTS = strmiids uuid ole32 gdi32 advapi32 +IMPORTS = strmiids strmbase uuid ole32 gdi32 advapi32 C_SRCS = \ capturegraph.c \ diff --git a/dlls/qcap/enummedia.c b/dlls/qcap/enummedia.c index a4d84b059e0..94b29073c53 100644 --- a/dlls/qcap/enummedia.c +++ b/dlls/qcap/enummedia.c @@ -32,37 +32,10 @@ #include "qcap_main.h" #include "wine/debug.h" +#include "wine/strmbase.h" WINE_DEFAULT_DEBUG_CHANNEL(qcap); -HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc) -{ - *pDest = *pSrc; - if (!pSrc->pbFormat) return S_OK; - if (!(pDest->pbFormat = CoTaskMemAlloc(pSrc->cbFormat))) - return E_OUTOFMEMORY; - memcpy(pDest->pbFormat, pSrc->pbFormat, pSrc->cbFormat); - return S_OK; -} - -static void FreeMediaType(AM_MEDIA_TYPE * pMediaType) -{ - CoTaskMemFree(pMediaType->pbFormat); - pMediaType->pbFormat = NULL; - - if (pMediaType->pUnk) - { - IUnknown_Release(pMediaType->pUnk); - pMediaType->pUnk = NULL; - } -} - -void DeleteMediaType(AM_MEDIA_TYPE * pMediaType) -{ - FreeMediaType(pMediaType); - CoTaskMemFree(pMediaType); -} - BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards) { diff --git a/dlls/qcap/qcap_main.h b/dlls/qcap/qcap_main.h index 2b75830f9a5..59a172fb99b 100644 --- a/dlls/qcap/qcap_main.h +++ b/dlls/qcap/qcap_main.h @@ -20,6 +20,8 @@ #ifndef _QCAP_MAIN_H_DEFINED #define _QCAP_MAIN_H_DEFINED +#include "wine/strmbase.h" + extern DWORD ObjectRefCount(BOOL increment); extern IUnknown * WINAPI QCAP_createAudioCaptureFilter(IUnknown *pUnkOuter, HRESULT *phr); @@ -50,8 +52,6 @@ typedef struct tagENUMEDIADETAILS HRESULT IEnumPinsImpl_Construct(const ENUMPINDETAILS * pDetails, IEnumPins ** ppEnum); HRESULT IEnumMediaTypesImpl_Construct(const ENUMMEDIADETAILS * pDetails, IEnumMediaTypes ** ppEnum); -HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc); -void DeleteMediaType(AM_MEDIA_TYPE * pmt); BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards); void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt); diff --git a/dlls/quartz/Makefile.in b/dlls/quartz/Makefile.in index 4ccc08c3fc8..fe61eaeb868 100644 --- a/dlls/quartz/Makefile.in +++ b/dlls/quartz/Makefile.in @@ -1,6 +1,6 @@ MODULE = quartz.dll IMPORTLIB = quartz -IMPORTS = strmiids uuid dsound msacm32 msvfw32 ole32 oleaut32 shlwapi rpcrt4 user32 gdi32 advapi32 +IMPORTS = strmiids strmbase uuid dsound msacm32 msvfw32 ole32 oleaut32 shlwapi rpcrt4 user32 gdi32 advapi32 EXTRADEFS = -DENTRY_PREFIX=QUARTZ_ -DPROXY_DELEGATION -DREGISTER_PROXY_DLL C_SRCS = \ diff --git a/dlls/quartz/enummedia.c b/dlls/quartz/enummedia.c index 60ff13a7b68..db78965f0e2 100644 --- a/dlls/quartz/enummedia.c +++ b/dlls/quartz/enummedia.c @@ -24,55 +24,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(quartz); -HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc) -{ - *pDest = *pSrc; - if (!pSrc->pbFormat) return S_OK; - if (!(pDest->pbFormat = CoTaskMemAlloc(pSrc->cbFormat))) - return E_OUTOFMEMORY; - memcpy(pDest->pbFormat, pSrc->pbFormat, pSrc->cbFormat); - if (pDest->pUnk) - IUnknown_AddRef(pDest->pUnk); - return S_OK; -} - -void FreeMediaType(AM_MEDIA_TYPE * pMediaType) -{ - if (pMediaType->pbFormat) - { - CoTaskMemFree(pMediaType->pbFormat); - pMediaType->pbFormat = NULL; - } - if (pMediaType->pUnk) - { - IUnknown_Release(pMediaType->pUnk); - pMediaType->pUnk = NULL; - } -} - -static AM_MEDIA_TYPE * CreateMediaType(AM_MEDIA_TYPE const * pSrc) -{ - AM_MEDIA_TYPE * pDest; - - pDest = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); - if (!pDest) - return NULL; - - if (FAILED(CopyMediaType(pDest, pSrc))) - { - CoTaskMemFree(pDest); - return NULL; - } - - return pDest; -} - -void DeleteMediaType(AM_MEDIA_TYPE * pMediaType) -{ - FreeMediaType(pMediaType); - CoTaskMemFree(pMediaType); -} - BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards) { TRACE("pmt1: "); diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h index 3e0dfe1ae5e..b6dfcfa0320 100644 --- a/dlls/quartz/quartz_private.h +++ b/dlls/quartz/quartz_private.h @@ -33,6 +33,7 @@ #include "wingdi.h" #include "winuser.h" #include "dshow.h" +#include "wine/strmbase.h" #include "wine/list.h" #define MEDIATIME_FROM_BYTES(x) ((LONGLONG)(x) * 10000000) @@ -77,9 +78,6 @@ HRESULT IEnumFiltersImpl_Construct(IBaseFilter ** ppFilters, ULONG nFilters, IEn extern const char * qzdebugstr_guid(const GUID * id); -HRESULT CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc); -void FreeMediaType(AM_MEDIA_TYPE * pmt); -void DeleteMediaType(AM_MEDIA_TYPE * pmt); BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards); void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt); HRESULT updatehres( HRESULT original, HRESULT new ); diff --git a/dlls/strmbase/Makefile.in b/dlls/strmbase/Makefile.in new file mode 100644 index 00000000000..105b5b605bd --- /dev/null +++ b/dlls/strmbase/Makefile.in @@ -0,0 +1,6 @@ +MODULE = strmbase + +C_SRCS = \ + mediatype.c + +@MAKE_IMPLIB_RULES@ diff --git a/dlls/strmbase/mediatype.c b/dlls/strmbase/mediatype.c new file mode 100644 index 00000000000..6de3e7a08fd --- /dev/null +++ b/dlls/strmbase/mediatype.c @@ -0,0 +1,78 @@ +/* + * Implementation of MedaType utility functions + * + * Copyright 2003 Robert Shearman + * Copyright 2010 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 + */ +#include + +#define COBJMACROS +#include "dshow.h" + +#include "wine/strmbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(strmbase); + +HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc) +{ + *pDest = *pSrc; + if (!pSrc->pbFormat) return S_OK; + if (!(pDest->pbFormat = CoTaskMemAlloc(pSrc->cbFormat))) + return E_OUTOFMEMORY; + memcpy(pDest->pbFormat, pSrc->pbFormat, pSrc->cbFormat); + if (pDest->pUnk) + IUnknown_AddRef(pDest->pUnk); + return S_OK; +} + +void WINAPI FreeMediaType(AM_MEDIA_TYPE * pMediaType) +{ + if (pMediaType->pbFormat) + { + CoTaskMemFree(pMediaType->pbFormat); + pMediaType->pbFormat = NULL; + } + if (pMediaType->pUnk) + { + IUnknown_Release(pMediaType->pUnk); + pMediaType->pUnk = NULL; + } +} + +AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const * pSrc) +{ + AM_MEDIA_TYPE * pDest; + + pDest = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); + if (!pDest) + return NULL; + + if (FAILED(CopyMediaType(pDest, pSrc))) + { + CoTaskMemFree(pDest); + return NULL; + } + + return pDest; +} + +void WINAPI DeleteMediaType(AM_MEDIA_TYPE * pMediaType) +{ + FreeMediaType(pMediaType); + CoTaskMemFree(pMediaType); +} diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h new file mode 100644 index 00000000000..885a9760a72 --- /dev/null +++ b/include/wine/strmbase.h @@ -0,0 +1,25 @@ +/* + * Header file for Wine's strmbase implementation + * + * Copyright 2003 Robert Shearman + * Copyright 2010 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 + */ + +HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE * pDest, const AM_MEDIA_TYPE *pSrc); +void WINAPI FreeMediaType(AM_MEDIA_TYPE * pMediaType); +AM_MEDIA_TYPE * WINAPI CreateMediaType(AM_MEDIA_TYPE const * pSrc); +void WINAPI DeleteMediaType(AM_MEDIA_TYPE * pMediaType);