Ziqing Hui : windowscodecs: Add stub implementation for IWICDdsDecoder.
Alexandre Julliard
julliard at winehq.org
Tue Apr 28 16:32:21 CDT 2020
Module: wine
Branch: master
Commit: d42946ea4392307004cd0f5d0ca5ff2ffae7d84e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=d42946ea4392307004cd0f5d0ca5ff2ffae7d84e
Author: Ziqing Hui <zhui at codeweavers.com>
Date: Tue Apr 28 10:55:04 2020 +0800
windowscodecs: Add stub implementation for IWICDdsDecoder.
Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/windowscodecs/ddsformat.c | 60 ++++++++++++++++++++++++++++++++++++++----
include/wincodec.idl | 45 +++++++++++++++++++++++++++++++
2 files changed, 100 insertions(+), 5 deletions(-)
diff --git a/dlls/windowscodecs/ddsformat.c b/dlls/windowscodecs/ddsformat.c
index 212eedc7a2..cf8fadbce5 100644
--- a/dlls/windowscodecs/ddsformat.c
+++ b/dlls/windowscodecs/ddsformat.c
@@ -86,6 +86,7 @@ typedef struct {
typedef struct DdsDecoder {
IWICBitmapDecoder IWICBitmapDecoder_iface;
+ IWICDdsDecoder IWICDdsDecoder_iface;
LONG ref;
BOOL initialized;
IStream *stream;
@@ -110,6 +111,11 @@ static inline DdsDecoder *impl_from_IWICBitmapDecoder(IWICBitmapDecoder *iface)
return CONTAINING_RECORD(iface, DdsDecoder, IWICBitmapDecoder_iface);
}
+static inline DdsDecoder *impl_from_IWICDdsDecoder(IWICDdsDecoder *iface)
+{
+ return CONTAINING_RECORD(iface, DdsDecoder, IWICDdsDecoder_iface);
+}
+
static inline DdsFrameDecode *impl_from_IWICBitmapFrameDecode(IWICBitmapFrameDecode *iface)
{
return CONTAINING_RECORD(iface, DdsFrameDecode, IWICBitmapFrameDecode_iface);
@@ -259,12 +265,11 @@ static HRESULT WINAPI DdsDecoder_QueryInterface(IWICBitmapDecoder *iface, REFIID
if (!ppv) return E_INVALIDARG;
if (IsEqualIID(&IID_IUnknown, iid) ||
- IsEqualIID(&IID_IWICBitmapDecoder, iid))
- {
+ IsEqualIID(&IID_IWICBitmapDecoder, iid)) {
*ppv = &This->IWICBitmapDecoder_iface;
- }
- else
- {
+ } else if (IsEqualIID(&IID_IWICDdsDecoder, iid)) {
+ *ppv = &This->IWICDdsDecoder_iface;
+ } else {
*ppv = NULL;
return E_NOINTERFACE;
}
@@ -498,6 +503,50 @@ static const IWICBitmapDecoderVtbl DdsDecoder_Vtbl = {
DdsDecoder_GetFrame
};
+static HRESULT WINAPI DdsDecoder_Dds_QueryInterface(IWICDdsDecoder *iface,
+ REFIID iid, void **ppv)
+{
+ DdsDecoder *This = impl_from_IWICDdsDecoder(iface);
+ return DdsDecoder_QueryInterface(&This->IWICBitmapDecoder_iface, iid, ppv);
+}
+
+static ULONG WINAPI DdsDecoder_Dds_AddRef(IWICDdsDecoder *iface)
+{
+ DdsDecoder *This = impl_from_IWICDdsDecoder(iface);
+ return DdsDecoder_AddRef(&This->IWICBitmapDecoder_iface);
+}
+
+static ULONG WINAPI DdsDecoder_Dds_Release(IWICDdsDecoder *iface)
+{
+ DdsDecoder *This = impl_from_IWICDdsDecoder(iface);
+ return DdsDecoder_Release(&This->IWICBitmapDecoder_iface);
+}
+
+static HRESULT WINAPI DdsDecoder_Dds_GetParameters(IWICDdsDecoder *iface,
+ WICDdsParameters *parameters)
+{
+ TRACE("(%p,%p): Stub.\n", iface, parameters);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DdsDecoder_Dds_GetFrame(IWICDdsDecoder *iface,
+ UINT arrayIndex, UINT mipLevel, UINT sliceIndex,
+ IWICBitmapFrameDecode **bitmapFrame)
+{
+ TRACE("(%p,%u,%u,%u,%p): Stub.\n", iface, arrayIndex, mipLevel, sliceIndex, bitmapFrame);
+
+ return E_NOTIMPL;
+}
+
+static const IWICDdsDecoderVtbl DdsDecoder_Dds_Vtbl = {
+ DdsDecoder_Dds_QueryInterface,
+ DdsDecoder_Dds_AddRef,
+ DdsDecoder_Dds_Release,
+ DdsDecoder_Dds_GetParameters,
+ DdsDecoder_Dds_GetFrame
+};
+
HRESULT DdsDecoder_CreateInstance(REFIID iid, void** ppv)
{
DdsDecoder *This;
@@ -511,6 +560,7 @@ HRESULT DdsDecoder_CreateInstance(REFIID iid, void** ppv)
if (!This) return E_OUTOFMEMORY;
This->IWICBitmapDecoder_iface.lpVtbl = &DdsDecoder_Vtbl;
+ This->IWICDdsDecoder_iface.lpVtbl = &DdsDecoder_Dds_Vtbl;
This->ref = 1;
This->initialized = FALSE;
This->stream = NULL;
diff --git a/include/wincodec.idl b/include/wincodec.idl
index b26e055394..e5fdc15c64 100644
--- a/include/wincodec.idl
+++ b/include/wincodec.idl
@@ -19,6 +19,7 @@
import "wtypes.idl";
import "propidl.idl";
import "ocidl.idl";
+import "dxgiformat.idl";
cpp_quote ("#include \"dcommon.h\"")
@@ -195,6 +196,23 @@ typedef enum WICSectionAccessLevel {
WICSectionAccessLevel_FORCE_DWORD = CODEC_FORCE_DWORD
} WICSectionAccessLevel;
+typedef enum WICDdsDimension {
+ WICDdsTexture1D = 0x00000000,
+ WICDdsTexture2D = 0x00000001,
+ WICDdsTexture3D = 0x00000002,
+ WICDdsTextureCube = 0x00000003,
+ WICDDSTEXTURE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICDdsDimension;
+
+typedef enum WICDdsAlphaMode {
+ WICDdsAlphaModeUnknown = 0x00000000,
+ WICDdsAlphaModeStraight = 0x00000001,
+ WICDdsAlphaModePremultiplied = 0x00000002,
+ WICDdsAlphaModeOpaque = 0x00000003,
+ WICDdsAlphaModeCustom = 0x00000004,
+ WICDDSALPHAMODE_FORCE_DWORD = CODEC_FORCE_DWORD
+} WICDdsAlphaMode;
+
typedef GUID WICPixelFormatGUID;
typedef REFGUID REFWICPixelFormatGUID;
@@ -342,6 +360,17 @@ typedef struct WICImageParameters
UINT32 PixelHeight;
} WICImageParameters;
+typedef struct WICDdsParameters {
+ UINT Width;
+ UINT Height;
+ UINT Depth;
+ UINT MipLevels;
+ UINT ArraySize;
+ DXGI_FORMAT DxgiFormat;
+ WICDdsDimension Dimension;
+ WICDdsAlphaMode AlphaMode;
+} WICDdsParameters;
+
typedef UINT32 WICColor;
interface ID2D1Device;
@@ -1144,6 +1173,22 @@ interface IWICEnumMetadataItem : IUnknown
[out] IWICEnumMetadataItem **ppIEnumMetadataItem);
}
+[
+ object,
+ uuid(409cd537-8532-40cb-9774-e2feb2df4e9c)
+]
+interface IWICDdsDecoder : IUnknown
+{
+ HRESULT GetParameters(
+ [out] WICDdsParameters *parameters);
+
+ HRESULT GetFrame(
+ [in] UINT arrayIndex,
+ [in] UINT mipLevel,
+ [in] UINT sliceIndex,
+ [out, retval] IWICBitmapFrameDecode **bitmapFrame);
+};
+
cpp_quote("HRESULT WINAPI WICConvertBitmapSource(REFWICPixelFormatGUID dstFormat, IWICBitmapSource *pISrc, IWICBitmapSource **ppIDst);")
cpp_quote("HRESULT WINAPI WICCreateBitmapFromSection(UINT width, UINT height, REFWICPixelFormatGUID format, HANDLE section, UINT stride, UINT offset, IWICBitmap **bitmap);")
cpp_quote("HRESULT WINAPI WICCreateBitmapFromSectionEx(UINT width, UINT height, REFWICPixelFormatGUID format, HANDLE section, UINT stride, UINT offset, WICSectionAccessLevel access, IWICBitmap **bitmap);")
More information about the wine-cvs
mailing list