Author: akhaldi Date: Sat Sep 21 20:43:42 2013 New Revision: 60294
URL: http://svn.reactos.org/svn/reactos?rev=60294&view=rev Log: [MSCMS] * Sync with Wine 1.7.1. CORE-7469
Modified: trunk/reactos/dll/win32/mscms/CMakeLists.txt trunk/reactos/dll/win32/mscms/handle.c trunk/reactos/dll/win32/mscms/icc.c trunk/reactos/dll/win32/mscms/mscms_main.c trunk/reactos/dll/win32/mscms/mscms_priv.h trunk/reactos/dll/win32/mscms/profile.c trunk/reactos/dll/win32/mscms/stub.c trunk/reactos/dll/win32/mscms/transform.c trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/mscms/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/CMakeLists.... ============================================================================== --- trunk/reactos/dll/win32/mscms/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/CMakeLists.txt [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -11,12 +11,11 @@ profile.c stub.c transform.c - version.rc ${CMAKE_CURRENT_BINARY_DIR}/mscms_stubs.c ${CMAKE_CURRENT_BINARY_DIR}/mscms.def)
-add_library(mscms SHARED ${SOURCE}) +add_library(mscms SHARED ${SOURCE} version.rc) set_module_type(mscms win32dll) target_link_libraries(mscms wine) -add_importlibs(mscms msvcrt advapi32 kernel32 ntdll) +add_importlibs(mscms advapi32 msvcrt kernel32 ntdll) add_cd_file(TARGET mscms DESTINATION reactos/system32 FOR all)
Modified: trunk/reactos/dll/win32/mscms/handle.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/handle.c?re... ============================================================================== --- trunk/reactos/dll/win32/mscms/handle.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/handle.c [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -31,17 +31,17 @@
//#include "mscms_priv.h"
-#ifdef HAVE_LCMS - -static CRITICAL_SECTION MSCMS_handle_cs; -static CRITICAL_SECTION_DEBUG MSCMS_handle_cs_debug = -{ - 0, 0, &MSCMS_handle_cs, - { &MSCMS_handle_cs_debug.ProcessLocksList, - &MSCMS_handle_cs_debug.ProcessLocksList }, - 0, 0, { (DWORD_PTR)(__FILE__ ": MSCMS_handle_cs") } +#ifdef HAVE_LCMS2 + +static CRITICAL_SECTION mscms_handle_cs; +static CRITICAL_SECTION_DEBUG mscms_handle_cs_debug = +{ + 0, 0, &mscms_handle_cs, + { &mscms_handle_cs_debug.ProcessLocksList, + &mscms_handle_cs_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": mscms_handle_cs") } }; -static CRITICAL_SECTION MSCMS_handle_cs = { &MSCMS_handle_cs_debug, -1, 0, 0, 0, 0 }; +static CRITICAL_SECTION mscms_handle_cs = { &mscms_handle_cs_debug, -1, 0, 0, 0, 0 };
static struct profile *profiletable; static struct transform *transformtable; @@ -61,19 +61,19 @@ transformtable = NULL; num_transform_handles = 0;
- DeleteCriticalSection( &MSCMS_handle_cs ); + DeleteCriticalSection( &mscms_handle_cs ); }
struct profile *grab_profile( HPROFILE handle ) { DWORD_PTR index;
- EnterCriticalSection( &MSCMS_handle_cs ); + EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1; if (index > num_profile_handles) { - LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); return NULL; } return &profiletable[index]; @@ -81,19 +81,19 @@
void release_profile( struct profile *profile ) { - LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); }
struct transform *grab_transform( HTRANSFORM handle ) { DWORD_PTR index;
- EnterCriticalSection( &MSCMS_handle_cs ); + EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1; if (index > num_transform_handles) { - LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); return NULL; } return &transformtable[index]; @@ -101,7 +101,7 @@
void release_transform( struct transform *transform ) { - LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); }
static HPROFILE alloc_profile_handle( void ) @@ -112,7 +112,7 @@
for (index = 0; index < num_profile_handles; index++) { - if (!profiletable[index].iccprofile) return (HPROFILE)(index + 1); + if (!profiletable[index].data) return (HPROFILE)(index + 1); } if (!profiletable) { @@ -135,14 +135,14 @@ { HPROFILE handle;
- EnterCriticalSection( &MSCMS_handle_cs ); + EnterCriticalSection( &mscms_handle_cs );
if ((handle = alloc_profile_handle())) { DWORD_PTR index = (DWORD_PTR)handle - 1; - memcpy( &profiletable[index], profile, sizeof(struct profile) ); - } - LeaveCriticalSection( &MSCMS_handle_cs ); + profiletable[index] = *profile; + } + LeaveCriticalSection( &mscms_handle_cs ); return handle; }
@@ -151,12 +151,12 @@ DWORD_PTR index; struct profile *profile;
- EnterCriticalSection( &MSCMS_handle_cs ); + EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1; if (index > num_profile_handles) { - LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); return FALSE; } profile = &profiletable[index]; @@ -165,11 +165,11 @@ { if (profile->access & PROFILE_READWRITE) { - DWORD written, size = MSCMS_get_profile_size( profile->iccprofile ); + DWORD written;
if (SetFilePointer( profile->file, 0, NULL, FILE_BEGIN ) || - !WriteFile( profile->file, profile->iccprofile, size, &written, NULL ) || - written != size) + !WriteFile( profile->file, profile->data, profile->size, &written, NULL ) || + written != profile->size) { ERR( "Unable to write color profile\n" ); } @@ -177,11 +177,11 @@ CloseHandle( profile->file ); } cmsCloseProfile( profile->cmsprofile ); - HeapFree( GetProcessHeap(), 0, profile->iccprofile ); + HeapFree( GetProcessHeap(), 0, profile->data );
memset( profile, 0, sizeof(struct profile) );
- LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); return TRUE; }
@@ -216,14 +216,14 @@ { HTRANSFORM handle;
- EnterCriticalSection( &MSCMS_handle_cs ); + EnterCriticalSection( &mscms_handle_cs );
if ((handle = alloc_transform_handle())) { DWORD_PTR index = (DWORD_PTR)handle - 1; - memcpy( &transformtable[index], transform, sizeof(struct transform) ); - } - LeaveCriticalSection( &MSCMS_handle_cs ); + transformtable[index] = *transform; + } + LeaveCriticalSection( &mscms_handle_cs ); return handle; }
@@ -232,12 +232,12 @@ DWORD_PTR index; struct transform *transform;
- EnterCriticalSection( &MSCMS_handle_cs ); + EnterCriticalSection( &mscms_handle_cs );
index = (DWORD_PTR)handle - 1; if (index > num_transform_handles) { - LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); return FALSE; } transform = &transformtable[index]; @@ -245,8 +245,8 @@ cmsDeleteTransform( transform->cmstransform ); memset( transform, 0, sizeof(struct transform) );
- LeaveCriticalSection( &MSCMS_handle_cs ); + LeaveCriticalSection( &mscms_handle_cs ); return TRUE; }
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */
Modified: trunk/reactos/dll/win32/mscms/icc.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/icc.c?rev=6... ============================================================================== --- trunk/reactos/dll/win32/mscms/icc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/icc.c [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -31,75 +31,90 @@
//#include "mscms_priv.h"
-#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2
-static inline void MSCMS_adjust_endianness32( ULONG *ptr ) +static inline void adjust_endianness32( ULONG *ptr ) { #ifndef WORDS_BIGENDIAN *ptr = RtlUlongByteSwap(*ptr); #endif }
-void MSCMS_get_profile_header( const icProfile *iccprofile, PROFILEHEADER *header ) +void get_profile_header( const struct profile *profile, PROFILEHEADER *header ) { unsigned int i;
- memcpy( header, iccprofile, sizeof(PROFILEHEADER) ); + memcpy( header, profile->data, sizeof(PROFILEHEADER) );
/* ICC format is big-endian, swap bytes if necessary */ for (i = 0; i < sizeof(PROFILEHEADER) / sizeof(ULONG); i++) - MSCMS_adjust_endianness32( (ULONG *)header + i ); + adjust_endianness32( (ULONG *)header + i ); }
-void MSCMS_set_profile_header( icProfile *iccprofile, const PROFILEHEADER *header ) +void set_profile_header( const struct profile *profile, const PROFILEHEADER *header ) { unsigned int i; - icHeader *iccheader = (icHeader *)iccprofile;
- memcpy( iccheader, header, sizeof(icHeader) ); + memcpy( profile->data, header, sizeof(PROFILEHEADER) );
/* ICC format is big-endian, swap bytes if necessary */ - for (i = 0; i < sizeof(icHeader) / sizeof(ULONG); i++) - MSCMS_adjust_endianness32( (ULONG *)iccheader + i ); + for (i = 0; i < sizeof(PROFILEHEADER) / sizeof(ULONG); i++) + adjust_endianness32( (ULONG *)profile->data + i ); }
-DWORD MSCMS_get_tag_count( const icProfile *iccprofile ) +static BOOL get_adjusted_tag( const struct profile *profile, TAGTYPE type, cmsTagEntry *tag ) { - ULONG count = iccprofile->count; + DWORD i, num_tags = *(DWORD *)(profile->data + sizeof(cmsICCHeader)); + cmsTagEntry *entry; + ULONG sig;
- MSCMS_adjust_endianness32( &count ); - return count; + adjust_endianness32( &num_tags ); + for (i = 0; i < num_tags; i++) + { + entry = (cmsTagEntry *)(profile->data + sizeof(cmsICCHeader) + sizeof(DWORD) + i * sizeof(*tag)); + sig = entry->sig; + adjust_endianness32( &sig ); + if (sig == type) + { + tag->sig = sig; + tag->offset = entry->offset; + tag->size = entry->size; + adjust_endianness32( &tag->offset ); + adjust_endianness32( &tag->size ); + return TRUE; + } + } + return FALSE; }
-void MSCMS_get_tag_by_index( icProfile *iccprofile, DWORD index, icTag *tag ) +BOOL get_tag_data( const struct profile *profile, TAGTYPE type, DWORD offset, void *buffer, DWORD *len ) { - icTag *tmp = (icTag *)((char *)iccprofile->data + index * sizeof(icTag)); + cmsTagEntry tag;
- tag->sig = tmp->sig; - tag->offset = tmp->offset; - tag->size = tmp->size; + if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
- MSCMS_adjust_endianness32( &tag->sig ); - MSCMS_adjust_endianness32( &tag->offset ); - MSCMS_adjust_endianness32( &tag->size ); + if (!buffer) offset = 0; + if (offset > tag.size) return FALSE; + if (*len < tag.size - offset || !buffer) + { + *len = tag.size - offset; + return FALSE; + } + memcpy( buffer, profile->data + tag.offset + offset, tag.size - offset ); + *len = tag.size - offset; + return TRUE; }
-void MSCMS_get_tag_data( const icProfile *iccprofile, const icTag *tag, DWORD offset, void *buffer ) +BOOL set_tag_data( const struct profile *profile, TAGTYPE type, DWORD offset, const void *buffer, DWORD *len ) { - memcpy( buffer, (const char *)iccprofile + tag->offset + offset, tag->size - offset ); + cmsTagEntry tag; + + if (!get_adjusted_tag( profile, type, &tag )) return FALSE; + + if (offset > tag.size) return FALSE; + *len = min( tag.size - offset, *len ); + memcpy( profile->data + tag.offset + offset, buffer, *len ); + return TRUE; }
-void MSCMS_set_tag_data( icProfile *iccprofile, const icTag *tag, DWORD offset, const void *buffer ) -{ - memcpy( (char *)iccprofile + tag->offset + offset, buffer, tag->size - offset ); -} - -DWORD MSCMS_get_profile_size( const icProfile *iccprofile ) -{ - DWORD size = ((const icHeader *)iccprofile)->size; - - MSCMS_adjust_endianness32( &size ); - return size; -} - -#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */
Modified: trunk/reactos/dll/win32/mscms/mscms_main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/mscms_main.... ============================================================================== --- trunk/reactos/dll/win32/mscms/mscms_main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/mscms_main.c [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -36,20 +36,10 @@
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
-#ifdef HAVE_LCMS -static int lcms_error_handler( int error, const char *text ) +#ifdef HAVE_LCMS2 +static void lcms_error_handler(cmsContext ctx, cmsUInt32Number error, const char *text) { - switch (error) - { - case LCMS_ERRC_WARNING: - case LCMS_ERRC_RECOVERABLE: - case LCMS_ERRC_ABORTED: - WARN("%d %s\n", error, debugstr_a(text)); - return 1; - default: - ERR("unknown error %d %s\n", error, debugstr_a(text)); - return 0; - } + TRACE("%u %s\n", error, debugstr_a(text)); } #endif
@@ -61,12 +51,13 @@ { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls( hinst ); -#ifdef HAVE_LCMS - cmsSetErrorHandler( lcms_error_handler ); +#ifdef HAVE_LCMS2 + cmsSetLogErrorHandler( lcms_error_handler ); #endif break; case DLL_PROCESS_DETACH: -#ifdef HAVE_LCMS + if (reserved) break; +#ifdef HAVE_LCMS2 free_handle_tables(); #endif break;
Modified: trunk/reactos/dll/win32/mscms/mscms_priv.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/mscms_priv.... ============================================================================== --- trunk/reactos/dll/win32/mscms/mscms_priv.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/mscms_priv.h [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -18,54 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#ifdef HAVE_LCMS - -/* These basic Windows types are defined in lcms.h when compiling on - * a non-Windows platform (why?), so they would normally not conflict - * with anything included earlier. But since we are building Wine they - * most certainly will have been defined before we include lcms.h. - * The preprocessor comes to the rescue. - */ - -#define BYTE LCMS_BYTE -#define LPBYTE LCMS_LPBYTE -#define WORD LCMS_WORD -#define LPWORD LCMS_LPWORD -#define DWORD LCMS_DWORD -#define LPDWORD LCMS_LPDWORD -#define BOOL LCMS_BOOL -#define LPSTR LCMS_LPSTR -#define LPVOID LCMS_LPVOID - -#undef cdecl -#undef FAR - -#undef ZeroMemory -#undef CopyMemory - -#undef LOWORD -#undef HIWORD -#undef MAX_PATH - -#ifdef HAVE_LCMS_LCMS_H -#include <lcms/lcms.h> -#else -#include <lcms.h> -#endif - -/* Funny thing is lcms.h defines DWORD as an 'unsigned long' whereas Wine - * defines it as an 'unsigned int'. To avoid compiler warnings we use a - * preprocessor define for DWORD and LPDWORD to get back Wine's original - * (typedef) definitions. - */ - -#undef BOOL -#undef DWORD -#undef LPDWORD - -#define BOOL BOOL -#define DWORD DWORD -#define LPDWORD LPDWORD +#ifdef HAVE_LCMS2 +#include <lcms2.h>
/* A simple structure to tie together a pointer to an icc profile, an lcms * color profile handle and a Windows file handle. If the profile is memory @@ -76,9 +30,10 @@
struct profile { - HANDLE file; - DWORD access; - icProfile *iccprofile; + HANDLE file; + DWORD access; + char *data; + DWORD size; cmsHPROFILE cmsprofile; };
@@ -101,14 +56,11 @@
extern void free_handle_tables( void ) DECLSPEC_HIDDEN;
-extern DWORD MSCMS_get_tag_count( const icProfile *iccprofile ) DECLSPEC_HIDDEN; -extern void MSCMS_get_tag_by_index( icProfile *iccprofile, DWORD index, icTag *tag ) DECLSPEC_HIDDEN; -extern void MSCMS_get_tag_data( const icProfile *iccprofile, const icTag *tag, DWORD offset, void *buffer ) DECLSPEC_HIDDEN; -extern void MSCMS_set_tag_data( icProfile *iccprofile, const icTag *tag, DWORD offset, const void *buffer ) DECLSPEC_HIDDEN; -extern void MSCMS_get_profile_header( const icProfile *iccprofile, PROFILEHEADER *header ) DECLSPEC_HIDDEN; -extern void MSCMS_set_profile_header( icProfile *iccprofile, const PROFILEHEADER *header ) DECLSPEC_HIDDEN; -extern DWORD MSCMS_get_profile_size( const icProfile *iccprofile ) DECLSPEC_HIDDEN; +extern BOOL get_tag_data( const struct profile *, TAGTYPE, DWORD, void *, DWORD * ) DECLSPEC_HIDDEN; +extern BOOL set_tag_data( const struct profile *, TAGTYPE, DWORD, const void *, DWORD * ) DECLSPEC_HIDDEN; +extern void get_profile_header( const struct profile *, PROFILEHEADER * ) DECLSPEC_HIDDEN; +extern void set_profile_header( const struct profile *, const PROFILEHEADER * ) DECLSPEC_HIDDEN;
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */
-extern const char *MSCMS_dbgstr_tag(DWORD) DECLSPEC_HIDDEN; +extern const char *dbgstr_tag(DWORD) DECLSPEC_HIDDEN;
Modified: trunk/reactos/dll/win32/mscms/profile.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/profile.c?r... ============================================================================== --- trunk/reactos/dll/win32/mscms/profile.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/profile.c [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -37,17 +37,15 @@
//#include "mscms_priv.h"
-#define IS_SEPARATOR(ch) ((ch) == '\' || (ch) == '/') - -static void MSCMS_basename( LPCWSTR path, LPWSTR name ) +static void basename( LPCWSTR path, LPWSTR name ) { INT i = lstrlenW( path );
- while (i > 0 && !IS_SEPARATOR(path[i - 1])) i--; + while (i > 0 && path[i - 1] != '\' && path[i - 1] != '/') i--; lstrcpyW( name, &path[i] ); }
-static inline LPWSTR MSCMS_strdupW( LPCSTR str ) +static inline LPWSTR strdupW( LPCSTR str ) { LPWSTR ret = NULL; if (str) @@ -59,7 +57,7 @@ return ret; }
-const char *MSCMS_dbgstr_tag( DWORD tag ) +const char *dbgstr_tag( DWORD tag ) { return wine_dbg_sprintf( "'%c%c%c%c'", (char)(tag >> 24), (char)(tag >> 16), (char)(tag >> 8), (char)(tag) ); @@ -138,7 +136,7 @@ } RegCreateKeyExW( HKEY_LOCAL_MACHINE, icmW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &icm_key, NULL );
- MSCMS_basename( file, basenameW ); + basename( file, basenameW ); sprintfW( classW, fmtW, (header.phClass >> 24) & 0xff, (header.phClass >> 16) & 0xff, (header.phClass >> 8) & 0xff, header.phClass & 0xff );
@@ -339,10 +337,8 @@ PVOID buffer, PBOOL ref ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle ); - DWORD i, count; - icTag tag;
TRACE( "( %p, 0x%08x, %d, %p, %p, %p )\n", handle, type, offset, size, buffer, ref );
@@ -353,30 +349,17 @@ release_profile( profile ); return FALSE; } - count = MSCMS_get_tag_count( profile->iccprofile ); - - for (i = 0; i < count; i++) - { - MSCMS_get_tag_by_index( profile->iccprofile, i, &tag ); - - if (tag.sig == type) - { - if ((tag.size - offset) > *size || !buffer) - { - *size = (tag.size - offset); - release_profile( profile ); - return FALSE; - } - MSCMS_get_tag_data( profile->iccprofile, &tag, offset, buffer ); - - *ref = FALSE; /* FIXME: calculate properly */ - release_profile( profile ); - return TRUE; - } - } + if (!get_tag_data( profile, type, offset, buffer, size )) + { + release_profile( profile ); + return FALSE; + } + ret = get_tag_data( profile, type, offset, buffer, size ); + *ref = cmsTagLinkedTo( profile->cmsprofile, type ) != 0; release_profile( profile ); - -#endif /* HAVE_LCMS */ + return ret; + +#endif /* HAVE_LCMS2 */ return ret; }
@@ -401,10 +384,10 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE type ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle ); - DWORD count; - icTag tag; + cmsInt32Number num_tags; + cmsTagSignature sig;
TRACE( "( %p, %d, %p )\n", handle, index, type );
@@ -415,19 +398,20 @@ release_profile( profile ); return FALSE; } - count = MSCMS_get_tag_count( profile->iccprofile ); - if (index > count || index < 1) + num_tags = cmsGetTagCount( profile->cmsprofile ); + if (num_tags < 0 || index > num_tags || index < 1) { release_profile( profile ); return FALSE; } - MSCMS_get_tag_by_index( profile->iccprofile, index - 1, &tag ); - *type = tag.sig; - + if ((sig = cmsGetTagSignature( profile->cmsprofile, index - 1 ))) + { + *type = sig; + ret = TRUE; + } release_profile( profile ); - ret = TRUE; - -#endif /* HAVE_LCMS */ + +#endif /* HAVE_LCMS2 */ return ret; }
@@ -452,7 +436,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD size ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle ); PROFILEHEADER header;
@@ -465,7 +449,7 @@ release_profile( profile ); return FALSE; } - MSCMS_get_profile_header( profile->iccprofile, &header ); + get_profile_header( profile, &header );
if (!buffer || header.phSize > *size) { @@ -475,13 +459,13 @@ }
/* No endian conversion needed */ - memcpy( buffer, profile->iccprofile, header.phSize ); - *size = header.phSize; + memcpy( buffer, profile->data, profile->size ); + *size = profile->size;
release_profile( profile ); ret = TRUE;
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ return ret; }
@@ -503,7 +487,7 @@ */ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header ) { -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle );
TRACE( "( %p, %p )\n", handle, header ); @@ -515,14 +499,13 @@ release_profile( profile ); return FALSE; } - MSCMS_get_profile_header( profile->iccprofile, header ); - + get_profile_header( profile, header ); release_profile( profile ); return TRUE;
#else return FALSE; -#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ }
/****************************************************************************** @@ -542,8 +525,9 @@ BOOL WINAPI GetCountColorProfileElements( HPROFILE handle, PDWORD count ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle ); + cmsInt32Number num_tags;
TRACE( "( %p, %p )\n", handle, count );
@@ -554,12 +538,14 @@ release_profile( profile ); return FALSE; } - *count = MSCMS_get_tag_count( profile->iccprofile ); - + if ((num_tags = cmsGetTagCount( profile->cmsprofile )) >= 0) + { + *count = num_tags; + ret = TRUE; + } release_profile( profile ); - ret = TRUE; - -#endif /* HAVE_LCMS */ + +#endif /* HAVE_LCMS2 */ return ret; }
@@ -684,7 +670,7 @@ return TRUE; }
-static BOOL MSCMS_header_from_file( LPCWSTR file, PPROFILEHEADER header ) +static BOOL header_from_file( LPCWSTR file, PPROFILEHEADER header ) { BOOL ret; PROFILE profile; @@ -726,7 +712,7 @@ return ret; }
-static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr ) +static BOOL match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr ) { if (rec->dwFields & ET_DEVICENAME) { @@ -747,36 +733,36 @@ } if (rec->dwFields & ET_DEVICECLASS) { - FIXME( "ET_DEVICECLASS: %s\n", MSCMS_dbgstr_tag(rec->dwMediaType) ); + FIXME( "ET_DEVICECLASS: %s\n", dbgstr_tag(rec->dwMediaType) ); } if (rec->dwFields & ET_CMMTYPE) { - TRACE( "ET_CMMTYPE: %s\n", MSCMS_dbgstr_tag(rec->dwCMMType) ); + TRACE( "ET_CMMTYPE: %s\n", dbgstr_tag(rec->dwCMMType) ); if (rec->dwCMMType != hdr->phCMMType) return FALSE; } if (rec->dwFields & ET_CLASS) { - TRACE( "ET_CLASS: %s\n", MSCMS_dbgstr_tag(rec->dwClass) ); + TRACE( "ET_CLASS: %s\n", dbgstr_tag(rec->dwClass) ); if (rec->dwClass != hdr->phClass) return FALSE; } if (rec->dwFields & ET_DATACOLORSPACE) { - TRACE( "ET_DATACOLORSPACE: %s\n", MSCMS_dbgstr_tag(rec->dwDataColorSpace) ); + TRACE( "ET_DATACOLORSPACE: %s\n", dbgstr_tag(rec->dwDataColorSpace) ); if (rec->dwDataColorSpace != hdr->phDataColorSpace) return FALSE; } if (rec->dwFields & ET_CONNECTIONSPACE) { - TRACE( "ET_CONNECTIONSPACE: %s\n", MSCMS_dbgstr_tag(rec->dwConnectionSpace) ); + TRACE( "ET_CONNECTIONSPACE: %s\n", dbgstr_tag(rec->dwConnectionSpace) ); if (rec->dwConnectionSpace != hdr->phConnectionSpace) return FALSE; } if (rec->dwFields & ET_SIGNATURE) { - TRACE( "ET_SIGNATURE: %s\n", MSCMS_dbgstr_tag(rec->dwSignature) ); + TRACE( "ET_SIGNATURE: %s\n", dbgstr_tag(rec->dwSignature) ); if (rec->dwSignature != hdr->phSignature) return FALSE; } if (rec->dwFields & ET_PLATFORM) { - TRACE( "ET_PLATFORM: %s\n", MSCMS_dbgstr_tag(rec->dwPlatform) ); + TRACE( "ET_PLATFORM: %s\n", dbgstr_tag(rec->dwPlatform) ); if (rec->dwPlatform != hdr->phPlatform) return FALSE; } if (rec->dwFields & ET_PROFILEFLAGS) @@ -786,12 +772,12 @@ } if (rec->dwFields & ET_MANUFACTURER) { - TRACE( "ET_MANUFACTURER: %s\n", MSCMS_dbgstr_tag(rec->dwManufacturer) ); + TRACE( "ET_MANUFACTURER: %s\n", dbgstr_tag(rec->dwManufacturer) ); if (rec->dwManufacturer != hdr->phManufacturer) return FALSE; } if (rec->dwFields & ET_MODEL) { - TRACE( "ET_MODEL: %s\n", MSCMS_dbgstr_tag(rec->dwModel) ); + TRACE( "ET_MODEL: %s\n", dbgstr_tag(rec->dwModel) ); if (rec->dwModel != hdr->phModel) return FALSE; } if (rec->dwFields & ET_ATTRIBUTES) @@ -808,7 +794,7 @@ } if (rec->dwFields & ET_CREATOR) { - TRACE( "ET_CREATOR: %s\n", MSCMS_dbgstr_tag(rec->dwCreator) ); + TRACE( "ET_CREATOR: %s\n", dbgstr_tag(rec->dwCreator) ); if (rec->dwCreator != hdr->phCreator) return FALSE; } return TRUE; @@ -857,17 +843,17 @@ memcpy( &recordW, record, sizeof(ENUMTYPEA) ); if (record->pDeviceName) { - deviceW = MSCMS_strdupW( record->pDeviceName ); + deviceW = strdupW( record->pDeviceName ); if (!(recordW.pDeviceName = deviceW)) goto exit; }
- fileW = MSCMS_strdupW( data.cFileName ); + fileW = strdupW( data.cFileName ); if (!fileW) goto exit;
- ret = MSCMS_header_from_file( fileW, &header ); + ret = header_from_file( fileW, &header ); if (ret) { - match = MSCMS_match_profile( &recordW, &header ); + match = match_profile( &recordW, &header ); if (match) { len = sizeof(char) * (lstrlenA( data.cFileName ) + 1); @@ -888,17 +874,17 @@
while (FindNextFileA( find, &data )) { - fileW = MSCMS_strdupW( data.cFileName ); + fileW = strdupW( data.cFileName ); if (!fileW) goto exit;
- ret = MSCMS_header_from_file( fileW, &header ); + ret = header_from_file( fileW, &header ); if (!ret) { HeapFree( GetProcessHeap(), 0, fileW ); continue; }
- match = MSCMS_match_profile( &recordW, &header ); + match = match_profile( &recordW, &header ); if (match) { char **tmp = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, @@ -1001,10 +987,10 @@ profiles = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR *) + 1 ); if (!profiles) goto exit;
- ret = MSCMS_header_from_file( data.cFileName, &header ); + ret = header_from_file( data.cFileName, &header ); if (ret) { - match = MSCMS_match_profile( record, &header ); + match = match_profile( record, &header ); if (match) { len = sizeof(WCHAR) * (lstrlenW( data.cFileName ) + 1); @@ -1023,10 +1009,10 @@
while (FindNextFileW( find, &data )) { - ret = MSCMS_header_from_file( data.cFileName, &header ); + ret = header_from_file( data.cFileName, &header ); if (!ret) continue;
- match = MSCMS_match_profile( record, &header ); + match = match_profile( record, &header ); if (match) { WCHAR **tmp = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, @@ -1129,7 +1115,7 @@
if (!GetColorDirectoryW( machine, dest, &size )) return FALSE;
- MSCMS_basename( profile, base ); + basename( profile, base );
lstrcatW( dest, slash ); lstrcatW( dest, base ); @@ -1158,10 +1144,8 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL present ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle ); - DWORD i, count; - icTag tag;
TRACE( "( %p, 0x%08x, %p )\n", handle, type, present );
@@ -1172,21 +1156,11 @@ release_profile( profile ); return FALSE; } - count = MSCMS_get_tag_count( profile->iccprofile ); - - for (i = 0; i < count; i++) - { - MSCMS_get_tag_by_index( profile->iccprofile, i, &tag ); - - if (tag.sig == type) - { - *present = ret = TRUE; - break; - } - } + *present = cmsIsTag( profile->cmsprofile, type ); release_profile( profile ); - -#endif /* HAVE_LCMS */ + ret = TRUE; + +#endif /* HAVE_LCMS2 */ return ret; }
@@ -1207,7 +1181,7 @@ BOOL WINAPI IsColorProfileValid( HPROFILE handle, PBOOL valid ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle );
TRACE( "( %p, %p )\n", handle, valid ); @@ -1219,10 +1193,10 @@ release_profile( profile ); return FALSE; } - if (profile->iccprofile) ret = *valid = TRUE; + if (profile->data) ret = *valid = TRUE; release_profile( profile );
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ return ret; }
@@ -1247,10 +1221,8 @@ PVOID buffer ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle ); - DWORD i, count; - icTag tag;
TRACE( "( %p, 0x%08x, %d, %p, %p )\n", handle, type, offset, size, buffer );
@@ -1261,28 +1233,11 @@ release_profile( profile ); return FALSE; } - count = MSCMS_get_tag_count( profile->iccprofile ); - - for (i = 0; i < count; i++) - { - MSCMS_get_tag_by_index( profile->iccprofile, i, &tag ); - - if (tag.sig == type) - { - if (offset > tag.size) - { - release_profile( profile ); - return FALSE; - } - MSCMS_set_tag_data( profile->iccprofile, &tag, offset, buffer ); - - release_profile( profile ); - return TRUE; - } - } + ret = set_tag_data( profile, type, offset, buffer, size ); release_profile( profile ); - -#endif /* HAVE_LCMS */ + return ret; + +#endif /* HAVE_LCMS2 */ return ret; }
@@ -1301,7 +1256,7 @@ */ BOOL WINAPI SetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header ) { -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct profile *profile = grab_profile( handle );
TRACE( "( %p, %p )\n", handle, header ); @@ -1313,14 +1268,13 @@ release_profile( profile ); return FALSE; } - MSCMS_set_profile_header( profile->iccprofile, header ); - + set_profile_header( profile, header ); release_profile( profile ); return TRUE;
#else return FALSE; -#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ }
/****************************************************************************** @@ -1441,10 +1395,11 @@ */ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing, DWORD creation ) { -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 cmsHPROFILE cmsprofile = NULL; - icProfile *iccprofile = NULL; + char *data = NULL; HANDLE handle = INVALID_HANDLE_VALUE; + DWORD size;
TRACE( "( %p, 0x%08x, 0x%08x, 0x%08x )\n", profile, access, sharing, creation );
@@ -1454,14 +1409,15 @@ { /* FIXME: access flags not implemented for memory based profiles */
- if (!(iccprofile = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL; - memcpy( iccprofile, profile->pProfileData, profile->cbDataSize ); - - cmsprofile = cmsOpenProfileFromMem( iccprofile, profile->cbDataSize ); + if (!(data = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL; + memcpy( data, profile->pProfileData, profile->cbDataSize ); + + cmsprofile = cmsOpenProfileFromMem( data, profile->cbDataSize ); + size = profile->cbDataSize; } else if (profile->dwType == PROFILE_FILENAME) { - DWORD size, read, flags = 0; + DWORD read, flags = 0;
TRACE( "profile file: %s\n", debugstr_w( profile->pProfileData ) );
@@ -1494,32 +1450,27 @@ WARN( "Unable to open color profile %u\n", GetLastError() ); return NULL; } - if ((size = GetFileSize( handle, NULL )) == INVALID_FILE_SIZE) { ERR( "Unable to retrieve size of color profile\n" ); CloseHandle( handle ); return NULL; } - - iccprofile = HeapAlloc( GetProcessHeap(), 0, size ); - if (!iccprofile) + if (!(data = HeapAlloc( GetProcessHeap(), 0, size ))) { ERR( "Unable to allocate memory for color profile\n" ); CloseHandle( handle ); return NULL; } - - if (!ReadFile( handle, iccprofile, size, &read, NULL ) || read != size) + if (!ReadFile( handle, data, size, &read, NULL ) || read != size) { ERR( "Unable to read color profile\n" );
CloseHandle( handle ); - HeapFree( GetProcessHeap(), 0, iccprofile ); + HeapFree( GetProcessHeap(), 0, data ); return NULL; } - - cmsprofile = cmsOpenProfileFromMem( iccprofile, size ); + cmsprofile = cmsOpenProfileFromMem( data, size ); } else { @@ -1530,16 +1481,21 @@ if (cmsprofile) { struct profile profile; - - profile.file = handle; - profile.access = access; - profile.iccprofile = iccprofile; + HPROFILE hprof; + + profile.file = handle; + profile.access = access; + profile.data = data; + profile.size = size; profile.cmsprofile = cmsprofile;
- return create_profile( &profile ); - } - -#endif /* HAVE_LCMS */ + if ((hprof = create_profile( &profile ))) return hprof; + HeapFree( GetProcessHeap(), 0, data ); + cmsCloseProfile( cmsprofile ); + } + CloseHandle( handle ); + +#endif /* HAVE_LCMS2 */ return NULL; }
@@ -1558,11 +1514,11 @@ BOOL WINAPI CloseColorProfile( HPROFILE profile ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2
TRACE( "( %p )\n", profile ); ret = close_profile( profile );
-#endif /* HAVE_LCMS */ - return ret; -} +#endif /* HAVE_LCMS2 */ + return ret; +}
Modified: trunk/reactos/dll/win32/mscms/stub.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/stub.c?rev=... ============================================================================== --- trunk/reactos/dll/win32/mscms/stub.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/stub.c [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -139,21 +139,21 @@
BOOL WINAPI RegisterCMMA( PCSTR machine, DWORD id, PCSTR dll ) { - FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll ); + FIXME( "( %p, %s, %p ) stub\n", machine, dbgstr_tag(id), dll );
return TRUE; }
BOOL WINAPI RegisterCMMW( PCWSTR machine, DWORD id, PCWSTR dll ) { - FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll ); + FIXME( "( %p, %s, %p ) stub\n", machine, dbgstr_tag(id), dll );
return TRUE; }
BOOL WINAPI SelectCMM( DWORD id ) { - FIXME( "(%s) stub\n", MSCMS_dbgstr_tag(id) ); + FIXME( "(%s) stub\n", dbgstr_tag(id) );
return TRUE; } @@ -192,14 +192,14 @@
BOOL WINAPI UnregisterCMMA( PCSTR machine, DWORD id ) { - FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) ); + FIXME( "( %p, %s ) stub\n", machine, dbgstr_tag(id) );
return TRUE; }
BOOL WINAPI UnregisterCMMW( PCWSTR machine, DWORD id ) { - FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) ); - - return TRUE; -} + FIXME( "( %p, %s ) stub\n", machine, dbgstr_tag(id) ); + + return TRUE; +}
Modified: trunk/reactos/dll/win32/mscms/transform.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mscms/transform.c... ============================================================================== --- trunk/reactos/dll/win32/mscms/transform.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mscms/transform.c [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -36,14 +36,14 @@
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
-#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2
static DWORD from_profile( HPROFILE profile ) { PROFILEHEADER header;
GetColorProfileHeader( profile, &header ); - TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, MSCMS_dbgstr_tag( header.phDataColorSpace ) ); + TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, dbgstr_tag( header.phDataColorSpace ) );
switch (header.phDataColorSpace) { @@ -68,6 +68,8 @@ case BM_RGBTRIPLETS: return TYPE_RGB_8; case BM_BGRTRIPLETS: return TYPE_BGR_8; case BM_GRAY: return TYPE_GRAY_8; + case BM_xRGBQUADS: return TYPE_ARGB_8; + case BM_xBGRQUADS: return TYPE_ABGR_8; default: if (quietfixme == 0) { @@ -96,7 +98,7 @@ } }
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */
/****************************************************************************** * CreateColorTransformA [MSCMS.@] @@ -141,7 +143,7 @@ HPROFILE target, DWORD flags ) { HTRANSFORM ret = NULL; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct transform transform; struct profile *dst, *tgt = NULL; cmsHPROFILE cmsinput, cmsoutput, cmstarget = NULL; @@ -160,7 +162,7 @@ intent = space->lcsIntent > 3 ? INTENT_PERCEPTUAL : space->lcsIntent;
TRACE( "lcsIntent: %x\n", space->lcsIntent ); - TRACE( "lcsCSType: %s\n", MSCMS_dbgstr_tag( space->lcsCSType ) ); + TRACE( "lcsCSType: %s\n", dbgstr_tag( space->lcsCSType ) ); TRACE( "lcsFilename: %s\n", debugstr_w( space->lcsFilename ) );
in_format = TYPE_RGB_16; @@ -181,7 +183,7 @@ if (tgt) release_profile( tgt ); release_profile( dst );
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ return ret; }
@@ -205,7 +207,7 @@ PDWORD intents, DWORD nintents, DWORD flags, DWORD cmm ) { HTRANSFORM ret = NULL; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 cmsHPROFILE *cmsprofiles, cmsconvert = NULL; struct transform transform; struct profile *profile0, *profile1; @@ -237,7 +239,7 @@ { /* insert a conversion profile for pairings that lcms doesn't handle */ if (out_format == TYPE_RGB_16) cmsconvert = cmsCreate_sRGBProfile(); - if (out_format == TYPE_Lab_16) cmsconvert = cmsCreateLabProfile( NULL ); + if (out_format == TYPE_Lab_16) cmsconvert = cmsCreateLab2Profile( NULL ); }
cmsprofiles = HeapAlloc( GetProcessHeap(), 0, (nprofiles + 1) * sizeof(cmsHPROFILE) ); @@ -263,7 +265,7 @@ release_profile( profile0 ); release_profile( profile1 );
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ return ret; }
@@ -282,13 +284,13 @@ BOOL WINAPI DeleteColorTransform( HTRANSFORM handle ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2
TRACE( "( %p )\n", handle );
ret = close_transform( handle );
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ return ret; }
@@ -319,7 +321,7 @@ DWORD outputstride, PBMCALLBACKFN callback, ULONG data ) { BOOL ret = FALSE; -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 struct transform *transform = grab_transform( handle );
TRACE( "( %p, %p, 0x%08x, 0x%08x, 0x%08x, 0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08x )\n", @@ -333,7 +335,7 @@ release_transform( transform ); ret = TRUE;
-#endif /* HAVE_LCMS */ +#endif /* HAVE_LCMS2 */ return ret; }
@@ -357,7 +359,7 @@ BOOL WINAPI TranslateColors( HTRANSFORM handle, PCOLOR in, DWORD count, COLORTYPE input_type, PCOLOR out, COLORTYPE output_type ) { -#ifdef HAVE_LCMS +#ifdef HAVE_LCMS2 BOOL ret = TRUE; struct transform *transform = grab_transform( handle ); cmsHTRANSFORM xfrm; @@ -462,7 +464,7 @@ release_transform( transform ); return ret;
-#else /* HAVE_LCMS */ +#else /* HAVE_LCMS2 */ return FALSE; -#endif /* HAVE_LCMS */ -} +#endif /* HAVE_LCMS2 */ +}
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=6... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sat Sep 21 20:43:42 2013 @@ -108,7 +108,7 @@ reactos/dll/win32/msacm32 # Synced to Wine-1.7.1 reactos/dll/win32/msadp32.acm # Synced to Wine-1.7.1 reactos/dll/win32/mscat32 # Synced to Wine-1.7.1 -reactos/dll/win32/mscms # Synced to Wine-1.5.4 +reactos/dll/win32/mscms # Synced to Wine-1.7.1 reactos/dll/win32/mscoree # Synced to Wine-1.5.4 reactos/dll/win32/msctf # Synced to Wine-1.5.4 reactos/dll/win32/msftedit # Synced to Wine-1.5.19