From 6d39e6abe70b75a2b5dedf5f3d3a42a046e44883 Mon Sep 17 00:00:00 2001 From: Ziqing Hui Date: Tue, 11 May 2021 10:48:39 +0800 Subject: [PATCH] windowscodecs: Add stub for IWICDdsEncoder. Signed-off-by: Ziqing Hui Signed-off-by: Esme Povirk Signed-off-by: Alexandre Julliard --- dlls/windowscodecs/ddsformat.c | 63 ++++++++++++++++++++++++++++++++-- include/wincodec.idl | 19 ++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/dlls/windowscodecs/ddsformat.c b/dlls/windowscodecs/ddsformat.c index e8a4f0e5c28..a102d4883cd 100644 --- a/dlls/windowscodecs/ddsformat.c +++ b/dlls/windowscodecs/ddsformat.c @@ -161,6 +161,7 @@ typedef struct DdsFrameDecode { typedef struct DdsEncoder { IWICBitmapEncoder IWICBitmapEncoder_iface; + IWICDdsEncoder IWICDdsEncoder_iface; LONG ref; CRITICAL_SECTION lock; IStream *stream; @@ -710,6 +711,11 @@ static inline DdsEncoder *impl_from_IWICBitmapEncoder(IWICBitmapEncoder *iface) return CONTAINING_RECORD(iface, DdsEncoder, IWICBitmapEncoder_iface); } +static inline DdsEncoder *impl_from_IWICDdsEncoder(IWICDdsEncoder *iface) +{ + return CONTAINING_RECORD(iface, DdsEncoder, IWICDdsEncoder_iface); +} + static inline DdsFrameEncode *impl_from_IWICBitmapFrameEncode(IWICBitmapFrameEncode *iface) { return CONTAINING_RECORD(iface, DdsFrameEncode, IWICBitmapFrameEncode_iface); @@ -1705,6 +1711,57 @@ HRESULT DdsDecoder_CreateInstance(REFIID iid, void** ppv) return ret; } +static HRESULT WINAPI DdsEncoder_Dds_QueryInterface(IWICDdsEncoder *iface, REFIID iid, + void **ppv) +{ + DdsEncoder *This = impl_from_IWICDdsEncoder(iface); + return IWICBitmapEncoder_QueryInterface(&This->IWICBitmapEncoder_iface, iid, ppv); +} + +static ULONG WINAPI DdsEncoder_Dds_AddRef(IWICDdsEncoder *iface) +{ + DdsEncoder *This = impl_from_IWICDdsEncoder(iface); + return IWICBitmapEncoder_AddRef(&This->IWICBitmapEncoder_iface); +} + +static ULONG WINAPI DdsEncoder_Dds_Release(IWICDdsEncoder *iface) +{ + DdsEncoder *This = impl_from_IWICDdsEncoder(iface); + return IWICBitmapEncoder_Release(&This->IWICBitmapEncoder_iface); +} + +static HRESULT WINAPI DdsEncoder_Dds_SetParameters(IWICDdsEncoder *iface, + WICDdsParameters *parameters) +{ + FIXME("(%p,%p): stub.\n", iface, parameters); + return E_NOTIMPL; +} + +static HRESULT WINAPI DdsEncoder_Dds_GetParameters(IWICDdsEncoder *iface, + WICDdsParameters *parameters) +{ + FIXME("(%p,%p): stub.\n", iface, parameters); + return E_NOTIMPL; +} + +static HRESULT WINAPI DdsEncoder_Dds_CreateNewFrame(IWICDdsEncoder *iface, + IWICBitmapFrameEncode **frameEncode, + UINT *arrayIndex, UINT *mipLevel, UINT *sliceIndex) +{ + FIXME("(%p,%p,%p,%p,%p): stub.\n", iface, frameEncode, arrayIndex, mipLevel, sliceIndex); + return E_NOTIMPL; +} + +static const IWICDdsEncoderVtbl DdsEncoder_Dds_Vtbl = +{ + DdsEncoder_Dds_QueryInterface, + DdsEncoder_Dds_AddRef, + DdsEncoder_Dds_Release, + DdsEncoder_Dds_SetParameters, + DdsEncoder_Dds_GetParameters, + DdsEncoder_Dds_CreateNewFrame +}; + static HRESULT WINAPI DdsEncoder_QueryInterface(IWICBitmapEncoder *iface, REFIID iid, void **ppv) { @@ -1716,8 +1773,9 @@ static HRESULT WINAPI DdsEncoder_QueryInterface(IWICBitmapEncoder *iface, REFIID if (IsEqualIID(&IID_IUnknown, iid) || IsEqualIID(&IID_IWICBitmapEncoder, iid)) { *ppv = &This->IWICBitmapEncoder_iface; - } - else { + } else if (IsEqualIID(&IID_IWICDdsEncoder, iid)) { + *ppv = &This->IWICDdsEncoder_iface; + } else { *ppv = NULL; return E_NOINTERFACE; } @@ -1929,6 +1987,7 @@ HRESULT DdsEncoder_CreateInstance( REFIID iid, void **ppv) if (!This) return E_OUTOFMEMORY; This->IWICBitmapEncoder_iface.lpVtbl = &DdsEncoder_Vtbl; + This->IWICDdsEncoder_iface.lpVtbl = &DdsEncoder_Dds_Vtbl; This->ref = 1; This->stream = NULL; This->frame_count = 0; diff --git a/include/wincodec.idl b/include/wincodec.idl index 88e183d5796..6752341c02a 100644 --- a/include/wincodec.idl +++ b/include/wincodec.idl @@ -1196,6 +1196,25 @@ interface IWICDdsDecoder : IUnknown [out, retval] IWICBitmapFrameDecode **bitmapFrame); }; +[ + object, + uuid(5cacdb4c-407e-41b3-b936-d0f010cd6732) +] +interface IWICDdsEncoder : IUnknown +{ + HRESULT SetParameters( + [in] WICDdsParameters *parameters); + + HRESULT GetParameters( + [out] WICDdsParameters *parameters); + + HRESULT CreateNewFrame( + [out] IWICBitmapFrameEncode **frameEncode, + [out, optional] UINT *arrayIndex, + [out, optional] UINT *mipLevel, + [out, optional] UINT *sliceIndex); +}; + [ object, uuid(3d4c0c61-18a4-41e4-bd80-481a4fc9f464)