Commit 531992c7 authored by Piotr Caban's avatar Piotr Caban Committed by Alexandre Julliard

windowscodecs: Store stream reference in png decoder.

parent b6811233
...@@ -296,6 +296,7 @@ typedef struct { ...@@ -296,6 +296,7 @@ typedef struct {
IWICBitmapFrameDecode IWICBitmapFrameDecode_iface; IWICBitmapFrameDecode IWICBitmapFrameDecode_iface;
IWICMetadataBlockReader IWICMetadataBlockReader_iface; IWICMetadataBlockReader IWICMetadataBlockReader_iface;
LONG ref; LONG ref;
IStream *stream;
png_structp png_ptr; png_structp png_ptr;
png_infop info_ptr; png_infop info_ptr;
png_infop end_info; png_infop end_info;
...@@ -366,6 +367,7 @@ static ULONG WINAPI PngDecoder_Release(IWICBitmapDecoder *iface) ...@@ -366,6 +367,7 @@ static ULONG WINAPI PngDecoder_Release(IWICBitmapDecoder *iface)
if (ref == 0) if (ref == 0)
{ {
IStream_Release(This->stream);
if (This->png_ptr) if (This->png_ptr)
ppng_destroy_read_struct(&This->png_ptr, &This->info_ptr, &This->end_info); ppng_destroy_read_struct(&This->png_ptr, &This->info_ptr, &This->end_info);
This->lock.DebugInfo->Spare[0] = 0; This->lock.DebugInfo->Spare[0] = 0;
...@@ -605,6 +607,9 @@ static HRESULT WINAPI PngDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p ...@@ -605,6 +607,9 @@ static HRESULT WINAPI PngDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p
ppng_read_end(This->png_ptr, This->end_info); ppng_read_end(This->png_ptr, This->end_info);
This->stream = pIStream;
IStream_AddRef(This->stream);
This->initialized = TRUE; This->initialized = TRUE;
end: end:
......
...@@ -283,6 +283,7 @@ static IWICBitmapDecoder *create_decoder(const void *image_data, UINT image_size ...@@ -283,6 +283,7 @@ static IWICBitmapDecoder *create_decoder(const void *image_data, UINT image_size
IWICBitmapDecoder *decoder = NULL; IWICBitmapDecoder *decoder = NULL;
IStream *stream; IStream *stream;
GUID format; GUID format;
LONG refcount;
hmem = GlobalAlloc(0, image_size); hmem = GlobalAlloc(0, image_size);
data = GlobalLock(hmem); data = GlobalLock(hmem);
...@@ -300,7 +301,8 @@ static IWICBitmapDecoder *create_decoder(const void *image_data, UINT image_size ...@@ -300,7 +301,8 @@ static IWICBitmapDecoder *create_decoder(const void *image_data, UINT image_size
ok(IsEqualGUID(&format, &GUID_ContainerFormatPng), ok(IsEqualGUID(&format, &GUID_ContainerFormatPng),
"wrong container format %s\n", wine_dbgstr_guid(&format)); "wrong container format %s\n", wine_dbgstr_guid(&format));
IStream_Release(stream); refcount = IStream_Release(stream);
ok(refcount > 0, "expected stream refcount > 0\n");
return decoder; return decoder;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment