From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/windowscodecs/decoder.c | 7 +++++++ dlls/windowscodecs/wincodecs_private.h | 11 ++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/dlls/windowscodecs/decoder.c b/dlls/windowscodecs/decoder.c index ea8bb2d75bb..d956ed149ce 100644 --- a/dlls/windowscodecs/decoder.c +++ b/dlls/windowscodecs/decoder.c @@ -638,6 +638,13 @@ static HRESULT WINAPI CommonDecoderFrame_Block_GetReaderByIndex(IWICMetadataBloc if (SUCCEEDED(hr)) hr = IWICStream_Seek(stream, offset, STREAM_SEEK_SET, NULL); } + else if (This->metadata_blocks[nIndex].options & DECODER_BLOCK_OFFSET_IS_PTR) + { + BYTE *data = (BYTE *)(ULONG_PTR)This->metadata_blocks[nIndex].offset; + UINT size = This->metadata_blocks[nIndex].length; + + hr = IWICStream_InitializeFromMemory(stream, data, size); + } else { ULARGE_INTEGER offset, length; diff --git a/dlls/windowscodecs/wincodecs_private.h b/dlls/windowscodecs/wincodecs_private.h index c255df06f84..d9493b5607e 100644 --- a/dlls/windowscodecs/wincodecs_private.h +++ b/dlls/windowscodecs/wincodecs_private.h @@ -290,9 +290,14 @@ struct decoder_frame WICColor palette[256]; };
-#define DECODER_BLOCK_OPTION_MASK 0x0001000F -#define DECODER_BLOCK_FULL_STREAM 0x80000000 -#define DECODER_BLOCK_READER_CLSID 0x40000000 +enum decoder_block_options +{ + DECODER_BLOCK_OPTION_MASK = 0x0001000F, + DECODER_BLOCK_FULL_STREAM = 0x80000000, + DECODER_BLOCK_READER_CLSID = 0x40000000, + DECODER_BLOCK_OFFSET_IS_PTR = 0x20000000, +}; + struct decoder_block { ULONGLONG offset;