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