Ziqing Hui : windowscodecs: Add stub for IWICDdsEncoder.
Alexandre Julliard
julliard at winehq.org
Tue May 11 16:33:59 CDT 2021
Module: wine
Branch: master
Commit: 6d39e6abe70b75a2b5dedf5f3d3a42a046e44883
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6d39e6abe70b75a2b5dedf5f3d3a42a046e44883
Author: Ziqing Hui <zhui at codeweavers.com>
Date: Tue May 11 10:48:39 2021 +0800
windowscodecs: Add stub for IWICDdsEncoder.
Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Esme Povirk <esme at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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)
More information about the wine-cvs
mailing list