[WINDOWSCODECS] Sync with Wine Staging 1.9.16. CORE-11866

svn path=/trunk/; revision=72352
This commit is contained in:
Amine Khaldi 2016-08-19 09:42:13 +00:00
parent ae7213af9a
commit 0aa49a16bb
8 changed files with 118 additions and 3 deletions

View file

@ -42,6 +42,7 @@ static const classinfo wic_classes[] = {
{&CLSID_WineTgaDecoder, TgaDecoder_CreateInstance},
{&CLSID_WICUnknownMetadataReader, UnknownMetadataReader_CreateInstance},
{&CLSID_WICIfdMetadataReader, IfdMetadataReader_CreateInstance},
{&CLSID_WICPngChrmMetadataReader, PngChrmReader_CreateInstance},
{&CLSID_WICPngGamaMetadataReader, PngGamaReader_CreateInstance},
{&CLSID_WICPngTextMetadataReader, PngTextReader_CreateInstance},
{&CLSID_WICLSDMetadataReader, LSDReader_CreateInstance},

View file

@ -159,8 +159,7 @@ static ULONG WINAPI IcnsFrameEncode_Release(IWICBitmapFrameEncode *iface)
This->encoder->outstanding_commits--;
LeaveCriticalSection(&This->encoder->lock);
}
if (This->icns_image != NULL)
HeapFree(GetProcessHeap(), 0, This->icns_image);
HeapFree(GetProcessHeap(), 0, This->icns_image);
IWICBitmapEncoder_Release(&This->encoder->IWICBitmapEncoder_iface);
HeapFree(GetProcessHeap(), 0, This);

View file

@ -203,6 +203,84 @@ HRESULT PngGamaReader_CreateInstance(REFIID iid, void** ppv)
return MetadataReader_Create(&GamaReader_Vtbl, iid, ppv);
}
static HRESULT LoadChrmMetadata(IStream *stream, const GUID *preferred_vendor,
DWORD persist_options, MetadataItem **items, DWORD *item_count)
{
HRESULT hr;
BYTE type[4];
BYTE *data;
ULONG data_size;
static const WCHAR names[8][12] = {
{'W','h','i','t','e','P','o','i','n','t','X',0},
{'W','h','i','t','e','P','o','i','n','t','Y',0},
{'R','e','d','X',0},
{'R','e','d','Y',0},
{'G','r','e','e','n','X',0},
{'G','r','e','e','n','Y',0},
{'B','l','u','e','X',0},
{'B','l','u','e','Y',0},
};
LPWSTR dyn_names[8] = {0};
MetadataItem *result;
int i;
hr = read_png_chunk(stream, type, &data, &data_size);
if (FAILED(hr)) return hr;
if (data_size < 32)
{
HeapFree(GetProcessHeap(), 0, data);
return E_FAIL;
}
result = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MetadataItem)*8);
for (i=0; i<8; i++)
{
dyn_names[i] = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*(lstrlenW(names[i])+1));
if (!dyn_names[i]) break;
}
if (!result || i < 8)
{
HeapFree(GetProcessHeap(), 0, result);
for (i=0; i<8; i++)
HeapFree(GetProcessHeap(), 0, dyn_names[i]);
HeapFree(GetProcessHeap(), 0, data);
return E_OUTOFMEMORY;
}
for (i=0; i<8; i++)
{
PropVariantInit(&result[i].schema);
PropVariantInit(&result[i].id);
result[i].id.vt = VT_LPWSTR;
result[i].id.u.pwszVal = dyn_names[i];
lstrcpyW(dyn_names[i], names[i]);
PropVariantInit(&result[i].value);
result[i].value.vt = VT_UI4;
result[i].value.u.ulVal = read_ulong_be(&data[i*4]);
}
*items = result;
*item_count = 8;
HeapFree(GetProcessHeap(), 0, data);
return S_OK;
}
static const MetadataHandlerVtbl ChrmReader_Vtbl = {
0,
&CLSID_WICPngChrmMetadataReader,
LoadChrmMetadata
};
HRESULT PngChrmReader_CreateInstance(REFIID iid, void** ppv)
{
return MetadataReader_Create(&ChrmReader_Vtbl, iid, ppv);
}
#ifdef SONAME_LIBPNG
static void *libpng_handle;

View file

@ -1499,6 +1499,21 @@ static const struct reader_containers pnggama_containers[] = {
{ NULL } /* list terminator */
};
static const BYTE cHRM[] = "cHRM";
static const struct metadata_pattern pngchrm_metadata_pattern[] = {
{ 4, 4, cHRM, mask_all, 4 },
{ 0 }
};
static const struct reader_containers pngchrm_containers[] = {
{
&GUID_ContainerFormatPng,
pngchrm_metadata_pattern
},
{ NULL } /* list terminator */
};
static const struct metadata_pattern lsd_metadata_patterns[] = {
{ 0, 6, gif87a_magic, mask_all, 0 },
{ 0, 6, gif89a_magic, mask_all, 0 },
@ -1594,6 +1609,16 @@ static struct regsvr_metadatareader const metadatareader_list[] = {
1, 1, 0,
ifd_containers
},
{ &CLSID_WICPngChrmMetadataReader,
"The Wine Project",
"Chunk cHRM Reader",
"1.0.0.0",
"1.0.0.0",
&GUID_VendorMicrosoft,
&GUID_MetadataFormatChunkcHRM,
0, 0, 0,
pngchrm_containers
},
{ &CLSID_WICPngGamaMetadataReader,
"The Wine Project",
"Chunk gAMA Reader",

View file

@ -242,6 +242,7 @@ extern HRESULT MetadataReader_Create(const MetadataHandlerVtbl *vtable, REFIID i
extern HRESULT UnknownMetadataReader_CreateInstance(REFIID iid, void** ppv) DECLSPEC_HIDDEN;
extern HRESULT IfdMetadataReader_CreateInstance(REFIID iid, void **ppv) DECLSPEC_HIDDEN;
extern HRESULT PngChrmReader_CreateInstance(REFIID iid, void** ppv) DECLSPEC_HIDDEN;
extern HRESULT PngGamaReader_CreateInstance(REFIID iid, void** ppv) DECLSPEC_HIDDEN;
extern HRESULT PngTextReader_CreateInstance(REFIID iid, void** ppv) DECLSPEC_HIDDEN;
extern HRESULT LSDReader_CreateInstance(REFIID iid, void **ppv) DECLSPEC_HIDDEN;

View file

@ -139,6 +139,13 @@ coclass WICUnknownMetadataReader { interface IWICMetadataReader; }
]
coclass WICIfdMetadataReader { interface IWICIfdMetadataReader; }
[
helpstring("WIC Png cHRM Metadata Reader"),
threading(both),
uuid(f90b5f36-367b-402a-9dd1-bc0fd59d8f62)
]
coclass WICPngChrmMetadataReader { interface IWICMetadataReader; }
[
helpstring("WIC Png gAMA Metadata Reader"),
threading(both),

View file

@ -203,6 +203,10 @@ HKCR
{
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
}
'{F90B5F36-367B-402A-9DD1-BC0FD59D8F62}' = s 'WIC Png cHRM Metadata Reader'
{
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }
}
'{3692CA39-E082-4350-9E1F-3704CB083CD5}' = s 'WIC Png gAMA Metadata Reader'
{
InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Both' }

View file

@ -200,7 +200,7 @@ reactos/dll/win32/version # Synced to WineStaging-1.9.11
reactos/dll/win32/vssapi # Synced to WineStaging-1.9.11
reactos/dll/win32/wbemdisp # Synced to WineStaging-1.9.16
reactos/dll/win32/wbemprox # Synced to WineStaging-1.9.11
reactos/dll/win32/windowscodecs # Synced to WineStaging-1.9.11
reactos/dll/win32/windowscodecs # Synced to WineStaging-1.9.16
reactos/dll/win32/windowscodecsext # Synced to WineStaging-1.9.11
reactos/dll/win32/winemp3.acm # Synced to WineStaging-1.9.11
reactos/dll/win32/wing32 # Synced to WineStaging-1.9.11