[09/18] windowscodecs: Do not assume that vtable is the first element of the object, avoid not necessary casts.
Dmitry Timoshkov
dmitry at baikal.ru
Tue Jul 24 01:09:15 CDT 2012
---
dlls/windowscodecs/icoformat.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/dlls/windowscodecs/icoformat.c b/dlls/windowscodecs/icoformat.c
index 48a5c95..4bc0325 100644
--- a/dlls/windowscodecs/icoformat.c
+++ b/dlls/windowscodecs/icoformat.c
@@ -95,7 +95,7 @@ static HRESULT WINAPI IcoFrameDecode_QueryInterface(IWICBitmapFrameDecode *iface
IsEqualIID(&IID_IWICBitmapSource, iid) ||
IsEqualIID(&IID_IWICBitmapFrameDecode, iid))
{
- *ppv = This;
+ *ppv = &This->IWICBitmapFrameDecode_iface;
}
else
{
@@ -260,15 +260,20 @@ static HRESULT ReadIcoDib(IStream *stream, IcoFrameDecode *result)
if (IsEqualGUID(&pixelformat, &GUID_WICPixelFormat32bppBGR) ||
IsEqualGUID(&pixelformat, &GUID_WICPixelFormat32bppBGRA))
{
- source = (IWICBitmapSource*)framedecode;
- IWICBitmapSource_AddRef(source);
+ hr = IWICBitmapFrameDecode_QueryInterface(framedecode, &IID_IWICBitmapSource, (void **)&source);
has_alpha = TRUE;
}
else
{
- hr = WICConvertBitmapSource(&GUID_WICPixelFormat32bppBGRA,
- (IWICBitmapSource*)framedecode, &source);
- has_alpha = FALSE;
+ IWICBitmapSource *frame_source;
+ hr = IWICBitmapFrameDecode_QueryInterface(framedecode, &IID_IWICBitmapSource, (void **)&frame_source);
+ if (SUCCEEDED(hr))
+ {
+ hr = WICConvertBitmapSource(&GUID_WICPixelFormat32bppBGRA,
+ frame_source, &source);
+ IWICBitmapSource_Release(frame_source);
+ has_alpha = FALSE;
+ }
}
if (SUCCEEDED(hr))
@@ -446,9 +451,10 @@ static HRESULT WINAPI IcoDecoder_QueryInterface(IWICBitmapDecoder *iface, REFIID
if (!ppv) return E_INVALIDARG;
- if (IsEqualIID(&IID_IUnknown, iid) || IsEqualIID(&IID_IWICBitmapDecoder, iid))
+ if (IsEqualIID(&IID_IUnknown, iid) ||
+ IsEqualIID(&IID_IWICBitmapDecoder, iid))
{
- *ppv = This;
+ *ppv = &This->IWICBitmapDecoder_iface;
}
else
{
@@ -692,7 +698,7 @@ static HRESULT WINAPI IcoDecoder_GetFrame(IWICBitmapDecoder *iface,
}
if (FAILED(hr)) goto fail;
- *ppIBitmapFrame = (IWICBitmapFrameDecode*)result;
+ *ppIBitmapFrame = &result->IWICBitmapFrameDecode_iface;
LeaveCriticalSection(&This->lock);
@@ -747,8 +753,8 @@ HRESULT IcoDecoder_CreateInstance(IUnknown *pUnkOuter, REFIID iid, void** ppv)
InitializeCriticalSection(&This->lock);
This->lock.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": IcoDecoder.lock");
- ret = IUnknown_QueryInterface((IUnknown*)This, iid, ppv);
- IUnknown_Release((IUnknown*)This);
+ ret = IWICBitmapDecoder_QueryInterface(&This->IWICBitmapDecoder_iface, iid, ppv);
+ IWICBitmapDecoder_Release(&This->IWICBitmapDecoder_iface);
return ret;
}
--
1.7.11.2
More information about the wine-patches
mailing list