It is unlikely that using strcpy() instead of memcpy() amounts to an optimization.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/pin.c | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-)
diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c index ef22a57..f3ce7d0 100644 --- a/dlls/strmbase/pin.c +++ b/dlls/strmbase/pin.c @@ -143,17 +143,6 @@ out: return hr; }
-static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc) -{ - /* Tempting to just do a memcpy, but the name field is - 128 characters long! We will probably never exceed 10 - most of the time, so we are better off copying - each field manually */ - strcpyW(pDest->achName, pSrc->achName); - pDest->dir = pSrc->dir; - pDest->pFilter = pSrc->pFilter; -} - static void dump_AM_MEDIA_TYPE(const AM_MEDIA_TYPE * pmt) { if (!pmt) @@ -270,14 +259,14 @@ HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt return hr; }
-HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin * iface, PIN_INFO * pInfo) +HRESULT WINAPI BasePinImpl_QueryPinInfo(IPin *iface, PIN_INFO *info) { BasePin *This = impl_from_IPin(iface);
- TRACE("(%p)->(%p)\n", This, pInfo); + TRACE("(%p)->(%p)\n", This, info);
- Copy_PinInfo(pInfo, &This->pinInfo); - IBaseFilter_AddRef(pInfo->pFilter); + memcpy(info, &This->pinInfo, sizeof(*info)); + IBaseFilter_AddRef(info->pFilter);
return S_OK; } @@ -766,7 +755,7 @@ HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(BasePin* iface, IPin * pRecei return hr; }
-static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO * pPinInfo, const BaseOutputPinFuncTable* vtbl, LPCRITICAL_SECTION pCritSec, BaseOutputPin * pPinImpl) +static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO *info, const BaseOutputPinFuncTable *vtbl, LPCRITICAL_SECTION pCritSec, BaseOutputPin *pPinImpl) { TRACE("(%p)\n", pPinImpl);
@@ -778,7 +767,7 @@ static HRESULT OutputPin_Init(const IPinVtbl *OutputPin_Vtbl, const PIN_INFO * p pPinImpl->pin.tStart = 0; pPinImpl->pin.tStop = 0; pPinImpl->pin.dRate = 1.0; - Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo); + memcpy(&pPinImpl->pin.pinInfo, info, sizeof(*info)); pPinImpl->pin.pFuncsTable = &vtbl->base; ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
@@ -1149,7 +1138,7 @@ static const IMemInputPinVtbl MemInputPin_Vtbl = MemInputPin_ReceiveCanBlock };
-static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPinInfo, +static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO *info, const BaseInputPinFuncTable* vtbl, LPCRITICAL_SECTION pCritSec, IMemAllocator *allocator, BaseInputPin * pPinImpl) { @@ -1162,7 +1151,7 @@ static HRESULT InputPin_Init(const IPinVtbl *InputPin_Vtbl, const PIN_INFO * pPi pPinImpl->pin.tStart = 0; pPinImpl->pin.tStop = 0; pPinImpl->pin.dRate = 1.0; - Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo); + memcpy(&pPinImpl->pin.pinInfo, info, sizeof(*info)); ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE)); pPinImpl->pin.pFuncsTable = &vtbl->base;
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/pin.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/dlls/quartz/pin.c b/dlls/quartz/pin.c index 5197d5c..043d519 100644 --- a/dlls/quartz/pin.c +++ b/dlls/quartz/pin.c @@ -138,18 +138,6 @@ out: return hr; }
- -static void Copy_PinInfo(PIN_INFO * pDest, const PIN_INFO * pSrc) -{ - /* Tempting to just do a memcpy, but the name field is - 128 characters long! We will probably never exceed 10 - most of the time, so we are better off copying - each field manually */ - strcpyW(pDest->achName, pSrc->achName); - pDest->dir = pSrc->dir; - pDest->pFilter = pSrc->pFilter; -} - static HRESULT deliver_endofstream(IPin* pin, LPVOID unused) { return IPin_EndOfStream( pin ); @@ -179,7 +167,7 @@ static HRESULT deliver_newsegment(IPin *pin, LPVOID data)
/*** PullPin implementation ***/
-static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, const PIN_INFO * pPinInfo, SAMPLEPROC_PULL pSampleProc, LPVOID pUserData, +static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, const PIN_INFO *info, SAMPLEPROC_PULL pSampleProc, LPVOID pUserData, QUERYACCEPTPROC pQueryAccept, CLEANUPPROC pCleanUp, REQUESTPROC pCustomRequest, STOPPROCESSPROC pDone, LPCRITICAL_SECTION pCritSec, PullPin * pPinImpl) { /* Common attributes */ @@ -187,7 +175,7 @@ static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, const PIN_INFO * pPinI pPinImpl->pin.refCount = 1; pPinImpl->pin.pConnectedTo = NULL; pPinImpl->pin.pCritSec = pCritSec; - Copy_PinInfo(&pPinImpl->pin.pinInfo, pPinInfo); + memcpy(&pPinImpl->pin.pinInfo, info, sizeof(*info)); ZeroMemory(&pPinImpl->pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
/* Input pin attributes */
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/filter.c | 31 +++++++++++++++++++++++++++++++ include/wine/strmbase.h | 1 + 2 files changed, 32 insertions(+)
diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c index f1b2d49..7d33f80 100644 --- a/dlls/strmbase/filter.c +++ b/dlls/strmbase/filter.c @@ -141,6 +141,37 @@ HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum) return EnumPins_Construct(This, This->pFuncsTable->pfnGetPin, This->pFuncsTable->pfnGetPinCount, BaseFilterImpl_GetPinVersion, ppEnum); }
+HRESULT WINAPI BaseFilterImpl_FindPin(IBaseFilter *iface, const WCHAR *id, IPin **ret) +{ + BaseFilter *This = impl_from_IBaseFilter(iface); + PIN_INFO info; + HRESULT hr; + IPin *pin; + int i; + + TRACE("(%p)->(%s, %p)\n", This, debugstr_w(id), ret); + + for (i = 0; i < This->pFuncsTable->pfnGetPinCount(This); ++i) + { + pin = This->pFuncsTable->pfnGetPin(This, i); + hr = IPin_QueryPinInfo(pin, &info); + if (FAILED(hr)) + { + IPin_Release(pin); + return hr; + } + + if (!strcmpW(id, info.achName)) + { + *ret = pin; + return S_OK; + } + + IPin_Release(pin); + } + + return VFW_E_NOT_FOUND; +}
HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo) { diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index abe92ae..b07dfa2 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -190,6 +190,7 @@ HRESULT WINAPI BaseFilterImpl_GetState(IBaseFilter * iface, DWORD dwMilliSecsTim HRESULT WINAPI BaseFilterImpl_SetSyncSource(IBaseFilter * iface, IReferenceClock *pClock); HRESULT WINAPI BaseFilterImpl_GetSyncSource(IBaseFilter * iface, IReferenceClock **ppClock); HRESULT WINAPI BaseFilterImpl_EnumPins(IBaseFilter * iface, IEnumPins **ppEnum); +HRESULT WINAPI BaseFilterImpl_FindPin(IBaseFilter *iface, const WCHAR *id, IPin **pin); HRESULT WINAPI BaseFilterImpl_QueryFilterInfo(IBaseFilter * iface, FILTER_INFO *pInfo); HRESULT WINAPI BaseFilterImpl_JoinFilterGraph(IBaseFilter * iface, IFilterGraph *pGraph, LPCWSTR pName ); HRESULT WINAPI BaseFilterImpl_QueryVendorInfo(IBaseFilter * iface, LPWSTR *pVendorInfo);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 8 +------- dlls/winegstreamer/gsttffilter.c | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index f133ce6..76dd19b 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1466,12 +1466,6 @@ static HRESULT WINAPI GST_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout, } }
-static HRESULT WINAPI GST_FindPin(IBaseFilter *iface, LPCWSTR Id, IPin **ppPin) -{ - FIXME("(%p)->(%s,%p) stub\n", iface, debugstr_w(Id), ppPin); - return E_NOTIMPL; -} - static const IBaseFilterVtbl GST_Vtbl = { GST_QueryInterface, BaseFilterImpl_AddRef, @@ -1484,7 +1478,7 @@ static const IBaseFilterVtbl GST_Vtbl = { BaseFilterImpl_SetSyncSource, BaseFilterImpl_GetSyncSource, BaseFilterImpl_EnumPins, - GST_FindPin, + BaseFilterImpl_FindPin, BaseFilterImpl_QueryFilterInfo, BaseFilterImpl_JoinFilterGraph, BaseFilterImpl_QueryVendorInfo diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c index 29e679b..d2d36b6 100644 --- a/dlls/winegstreamer/gsttffilter.c +++ b/dlls/winegstreamer/gsttffilter.c @@ -1030,7 +1030,7 @@ static const IBaseFilterVtbl GSTTf_Vtbl = BaseFilterImpl_SetSyncSource, BaseFilterImpl_GetSyncSource, BaseFilterImpl_EnumPins, - TransformFilterImpl_FindPin, + BaseFilterImpl_FindPin, BaseFilterImpl_QueryFilterInfo, BaseFilterImpl_JoinFilterGraph, BaseFilterImpl_QueryVendorInfo
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wineqtdecoder/qtsplitter.c | 8 +------- dlls/wineqtdecoder/qtvdecoder.c | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 096d384..2b9ec88 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -794,12 +794,6 @@ static HRESULT WINAPI QT_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout, return S_OK; }
-static HRESULT WINAPI QT_FindPin(IBaseFilter *iface, LPCWSTR Id, IPin **ppPin) -{ - FIXME("(%p)->(%s,%p) stub\n", iface, debugstr_w(Id), ppPin); - return E_NOTIMPL; -} - static const IBaseFilterVtbl QT_Vtbl = { QT_QueryInterface, BaseFilterImpl_AddRef, @@ -812,7 +806,7 @@ static const IBaseFilterVtbl QT_Vtbl = { BaseFilterImpl_SetSyncSource, BaseFilterImpl_GetSyncSource, BaseFilterImpl_EnumPins, - QT_FindPin, + BaseFilterImpl_FindPin, BaseFilterImpl_QueryFilterInfo, BaseFilterImpl_JoinFilterGraph, BaseFilterImpl_QueryVendorInfo diff --git a/dlls/wineqtdecoder/qtvdecoder.c b/dlls/wineqtdecoder/qtvdecoder.c index 6e2ceb1..9091da1 100644 --- a/dlls/wineqtdecoder/qtvdecoder.c +++ b/dlls/wineqtdecoder/qtvdecoder.c @@ -562,7 +562,7 @@ static const IBaseFilterVtbl QTVDecoder_Vtbl = BaseFilterImpl_SetSyncSource, BaseFilterImpl_GetSyncSource, BaseFilterImpl_EnumPins, - TransformFilterImpl_FindPin, + BaseFilterImpl_FindPin, BaseFilterImpl_QueryFilterInfo, BaseFilterImpl_JoinFilterGraph, BaseFilterImpl_QueryVendorInfo
Zebediah Figura z.figura12@gmail.com writes:
It is unlikely that using strcpy() instead of memcpy() amounts to an optimization.
The optimization is not that useful, but in general it's better to avoid copying uninitialized data.
On 04/07/18 14:56, Alexandre Julliard wrote:
Zebediah Figura z.figura12@gmail.com writes:
It is unlikely that using strcpy() instead of memcpy() amounts to an optimization.
The optimization is not that useful, but in general it's better to avoid copying uninitialized data.
Understandable, then; I'll send a patch to update the comment instead.
In the meantime I believe patches 0003-0005 should apply independently.