[PATCH 3/5] windowscodecs: Use IWICComponentFactory_CreateMetadataReader instead of create_instance.
Rémi Bernon
rbernon at codeweavers.com
Thu Jan 14 15:20:53 CST 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/windowscodecs/decoder.c | 46 ++++++--------------------
dlls/windowscodecs/libtiff.c | 4 +--
dlls/windowscodecs/wincodecs_private.h | 4 +--
3 files changed, 15 insertions(+), 39 deletions(-)
diff --git a/dlls/windowscodecs/decoder.c b/dlls/windowscodecs/decoder.c
index 3e43fa91114..0af203febf6 100644
--- a/dlls/windowscodecs/decoder.c
+++ b/dlls/windowscodecs/decoder.c
@@ -634,48 +634,24 @@ static HRESULT WINAPI CommonDecoderFrame_Block_GetReaderByIndex(IWICMetadataBloc
offset, length);
}
- if (This->metadata_blocks[nIndex].options & DECODER_BLOCK_READER_CLSID)
- {
- IWICMetadataReader *reader;
- IWICPersistStream *persist;
- if (SUCCEEDED(hr))
- {
- hr = create_instance(&This->metadata_blocks[nIndex].reader_clsid,
- &IID_IWICMetadataReader, (void**)&reader);
- }
-
- if (SUCCEEDED(hr))
- {
- hr = IWICMetadataReader_QueryInterface(reader, &IID_IWICPersistStream, (void**)&persist);
-
- if (SUCCEEDED(hr))
- {
- hr = IWICPersistStream_LoadEx(persist, (IStream*)stream, NULL,
- This->metadata_blocks[nIndex].options & DECODER_BLOCK_OPTION_MASK);
-
- IWICPersistStream_Release(persist);
- }
+ if (SUCCEEDED(hr))
+ hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IWICComponentFactory, (void **)&factory);
- if (SUCCEEDED(hr))
- *ppIMetadataReader = reader;
- else
- IWICMetadataReader_Release(reader);
- }
- }
- else
+ if (SUCCEEDED(hr))
{
- if (SUCCEEDED(hr))
- hr = ImagingFactory_CreateInstance(&IID_IWICComponentFactory, (void**)&factory);
-
- if (SUCCEEDED(hr))
- {
+ if (This->metadata_blocks[nIndex].options & DECODER_BLOCK_FORMAT_GUID)
+ hr = IWICComponentFactory_CreateMetadataReader(factory,
+ &This->metadata_blocks[nIndex].format_guid, NULL,
+ This->metadata_blocks[nIndex].options & DECODER_BLOCK_OPTION_MASK,
+ (IStream*)stream, ppIMetadataReader);
+ else
hr = IWICComponentFactory_CreateMetadataReaderFromContainer(factory,
&This->parent->decoder_info.block_format, NULL,
This->metadata_blocks[nIndex].options & DECODER_BLOCK_OPTION_MASK,
(IStream*)stream, ppIMetadataReader);
- IWICComponentFactory_Release(factory);
- }
+ IWICComponentFactory_Release(factory);
}
IWICStream_Release(stream);
diff --git a/dlls/windowscodecs/libtiff.c b/dlls/windowscodecs/libtiff.c
index 6f5cfc53c62..d318ff80095 100644
--- a/dlls/windowscodecs/libtiff.c
+++ b/dlls/windowscodecs/libtiff.c
@@ -1129,8 +1129,8 @@ static HRESULT CDECL tiff_decoder_get_metadata_blocks(struct decoder *iface,
#else
result.options = byte_swapped ? WICPersistOptionBigEndian : WICPersistOptionLittleEndian;
#endif
- result.options |= WICPersistOptionNoCacheStream|DECODER_BLOCK_FULL_STREAM|DECODER_BLOCK_READER_CLSID;
- result.reader_clsid = CLSID_WICIfdMetadataReader;
+ result.options |= WICPersistOptionNoCacheStream|DECODER_BLOCK_FULL_STREAM|DECODER_BLOCK_FORMAT_GUID;
+ result.format_guid = GUID_MetadataFormatIfd;
*blocks = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(**blocks));
**blocks = result;
diff --git a/dlls/windowscodecs/wincodecs_private.h b/dlls/windowscodecs/wincodecs_private.h
index 3b20f7d6c24..5085e4c057c 100644
--- a/dlls/windowscodecs/wincodecs_private.h
+++ b/dlls/windowscodecs/wincodecs_private.h
@@ -284,13 +284,13 @@ struct decoder_frame
#define DECODER_BLOCK_OPTION_MASK 0x0001000F
#define DECODER_BLOCK_FULL_STREAM 0x80000000
-#define DECODER_BLOCK_READER_CLSID 0x40000000
+#define DECODER_BLOCK_FORMAT_GUID 0x40000000
struct decoder_block
{
ULONGLONG offset;
ULONGLONG length;
DWORD options;
- GUID reader_clsid;
+ GUID format_guid;
};
struct decoder
--
2.30.0
More information about the wine-devel
mailing list