[1/2] mscms: Port to liblcms2.
Hans Leidekker
hans at codeweavers.com
Fri Jul 26 06:02:40 CDT 2013
---
configure.ac | 20 ++---
dlls/mscms/Makefile.in | 4 +-
dlls/mscms/handle.c | 14 ++--
dlls/mscms/icc.c | 93 ++++++++++++----------
dlls/mscms/mscms_main.c | 22 ++----
dlls/mscms/mscms_priv.h | 70 +++--------------
dlls/mscms/profile.c | 184 +++++++++++++++++---------------------------
dlls/mscms/tests/profile.c | 21 +++--
dlls/mscms/transform.c | 28 +++----
9 files changed, 182 insertions(+), 274 deletions(-)
diff --git a/configure.ac b/configure.ac
index 74fd134..00d422b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1441,23 +1441,23 @@ then
fi
dnl **** Check for LittleCMS ***
-if test "x$with_lcms" != "xno"
+if test "x$with_lcms2" != "xno"
then
ac_save_CPPFLAGS="$CPPFLAGS"
- WINE_PACKAGE_FLAGS(LCMS,[lcms],[-llcms])
- AC_CHECK_HEADERS([lcms.h lcms/lcms.h])
- if test "$ac_cv_header_lcms_h" = "yes" -o "$ac_cv_header_lcms_lcms_h" = "yes"
+ WINE_PACKAGE_FLAGS(LCMS2,[lcms2],[-llcms2])
+ AC_CHECK_HEADERS([lcms2.h])
+ if test "$ac_cv_header_lcms2_h" = "yes"
then
- AC_CHECK_LIB(lcms, cmsOpenProfileFromFile,
- [AC_DEFINE(HAVE_LCMS, 1, [Define if you have the LittleCMS development environment])],[LCMS_LIBS=""])
+ AC_CHECK_LIB(lcms2, cmsOpenProfileFromFile,
+ [AC_DEFINE(HAVE_LCMS2, 1, [Define if you have the LittleCMS development environment])],[LCMS2_LIBS=""])
else
- LCMS_CFLAGS=""
- LCMS_LIBS=""
+ LCMS2_CFLAGS=""
+ LCMS2_LIBS=""
fi
CPPFLAGS="$ac_save_CPPFLAGS"
fi
-WINE_NOTICE_WITH(cms,[test "$ac_cv_lib_lcms_cmsOpenProfileFromFile" != "yes"],
- [liblcms ${notice_platform}development files not found, Color Management won't be supported.])
+WINE_NOTICE_WITH(cms,[test "$ac_cv_lib_lcms2_cmsOpenProfileFromFile" != "yes"],
+ [liblcms2 ${notice_platform}development files not found, Color Management won't be supported.])
dnl **** Check for FreeType 2 ****
if test "x$with_freetype" != "xno"
diff --git a/dlls/mscms/Makefile.in b/dlls/mscms/Makefile.in
index 6fb5e1f..234c515 100644
--- a/dlls/mscms/Makefile.in
+++ b/dlls/mscms/Makefile.in
@@ -1,8 +1,8 @@
MODULE = mscms.dll
IMPORTLIB = mscms
IMPORTS = shlwapi advapi32
-EXTRAINCL = @LCMS_CFLAGS@
-EXTRALIBS = @LCMS_LIBS@
+EXTRAINCL = @LCMS2_CFLAGS@
+EXTRALIBS = @LCMS2_LIBS@
C_SRCS = \
handle.c \
diff --git a/dlls/mscms/handle.c b/dlls/mscms/handle.c
index 2f9eaec..8a0f26d 100644
--- a/dlls/mscms/handle.c
+++ b/dlls/mscms/handle.c
@@ -31,7 +31,7 @@
#include "mscms_priv.h"
-#ifdef HAVE_LCMS
+#ifdef HAVE_LCMS2
static CRITICAL_SECTION MSCMS_handle_cs;
static CRITICAL_SECTION_DEBUG MSCMS_handle_cs_debug =
@@ -112,7 +112,7 @@ static HPROFILE alloc_profile_handle( void )
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)
{
@@ -165,11 +165,11 @@ BOOL close_profile( HPROFILE handle )
{
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,7 +177,7 @@ BOOL close_profile( HPROFILE handle )
CloseHandle( profile->file );
}
cmsCloseProfile( profile->cmsprofile );
- HeapFree( GetProcessHeap(), 0, profile->iccprofile );
+ HeapFree( GetProcessHeap(), 0, profile->data );
memset( profile, 0, sizeof(struct profile) );
@@ -249,4 +249,4 @@ BOOL close_transform( HTRANSFORM handle )
return TRUE;
}
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
diff --git a/dlls/mscms/icc.c b/dlls/mscms/icc.c
index f751c70..3b1c718 100644
--- a/dlls/mscms/icc.c
+++ b/dlls/mscms/icc.c
@@ -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;
-
- MSCMS_adjust_endianness32( &count );
- return count;
+ DWORD i, num_tags = *(DWORD *)(profile->data + sizeof(cmsICCHeader));
+ cmsTagEntry *entry;
+ ULONG sig;
+
+ 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));
-
- tag->sig = tmp->sig;
- tag->offset = tmp->offset;
- tag->size = tmp->size;
-
- MSCMS_adjust_endianness32( &tag->sig );
- MSCMS_adjust_endianness32( &tag->offset );
- MSCMS_adjust_endianness32( &tag->size );
+ cmsTagEntry tag;
+
+ if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
+
+ 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;
-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;
+ if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
- MSCMS_adjust_endianness32( &size );
- return size;
+ if (offset > tag.size) return FALSE;
+ *len = min( tag.size - offset, *len );
+ memcpy( profile->data + tag.offset + offset, buffer, *len );
+ return TRUE;
}
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
diff --git a/dlls/mscms/mscms_main.c b/dlls/mscms/mscms_main.c
index 1688239..3f8dae5 100644
--- a/dlls/mscms/mscms_main.c
+++ b/dlls/mscms/mscms_main.c
@@ -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,13 +51,13 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
{
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:
if (reserved) break;
-#ifdef HAVE_LCMS
+#ifdef HAVE_LCMS2
free_handle_tables();
#endif
break;
diff --git a/dlls/mscms/mscms_priv.h b/dlls/mscms/mscms_priv.h
index ffaf13b..a3bffa2 100644
--- a/dlls/mscms/mscms_priv.h
+++ b/dlls/mscms/mscms_priv.h
@@ -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 @@ void release_transform( struct transform * ) DECLSPEC_HIDDEN;
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;
diff --git a/dlls/mscms/profile.c b/dlls/mscms/profile.c
index 8444e14..cb6fbfc 100644
--- a/dlls/mscms/profile.c
+++ b/dlls/mscms/profile.c
@@ -337,10 +337,8 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
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 );
@@ -351,30 +349,17 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
release_profile( profile );
return FALSE;
}
- count = MSCMS_get_tag_count( profile->iccprofile );
-
- for (i = 0; i < count; i++)
+ if (!get_tag_data( profile, type, offset, buffer, size ))
{
- 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;
- }
+ release_profile( profile );
+ return FALSE;
}
+ ret = get_tag_data( profile, type, offset, buffer, size );
+ *ref = cmsTagLinkedTo( profile->cmsprofile, type ) != 0;
release_profile( profile );
+ return ret;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -399,10 +384,10 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
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 );
@@ -413,19 +398,20 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE ty
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;
}
@@ -450,7 +436,7 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE ty
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;
@@ -463,7 +449,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
release_profile( profile );
return FALSE;
}
- MSCMS_get_profile_header( profile->iccprofile, &header );
+ get_profile_header( profile, &header );
if (!buffer || header.phSize > *size)
{
@@ -473,13 +459,13 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
}
/* 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;
}
@@ -501,7 +487,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
*/
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 );
@@ -513,14 +499,13 @@ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
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 */
}
/******************************************************************************
@@ -540,8 +525,9 @@ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
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 );
@@ -552,12 +538,14 @@ BOOL WINAPI GetCountColorProfileElements( HPROFILE handle, PDWORD count )
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;
}
@@ -1156,10 +1144,8 @@ BOOL WINAPI InstallColorProfileW( PCWSTR machine, PCWSTR profile )
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 );
@@ -1170,21 +1156,11 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL prese
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 );
+ ret = TRUE;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -1205,7 +1181,7 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL prese
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 );
@@ -1217,10 +1193,10 @@ BOOL WINAPI IsColorProfileValid( HPROFILE handle, PBOOL valid )
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;
}
@@ -1245,10 +1221,8 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
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 );
@@ -1259,28 +1233,11 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
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 );
+ return ret;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -1299,7 +1256,7 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
*/
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 );
@@ -1311,14 +1268,13 @@ BOOL WINAPI SetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
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 */
}
/******************************************************************************
@@ -1439,10 +1395,11 @@ HPROFILE WINAPI OpenColorProfileA( PPROFILE profile, DWORD access, DWORD sharing
*/
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 );
@@ -1452,14 +1409,15 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
{
/* FIXME: access flags not implemented for memory based profiles */
- if (!(iccprofile = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
- memcpy( iccprofile, profile->pProfileData, profile->cbDataSize );
+ if (!(data = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
+ memcpy( data, profile->pProfileData, profile->cbDataSize );
- cmsprofile = cmsOpenProfileFromMem( iccprofile, 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 ) );
@@ -1492,32 +1450,27 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
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,18 +1483,19 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
struct profile profile;
HPROFILE hprof;
- profile.file = handle;
- profile.access = access;
- profile.iccprofile = iccprofile;
+ profile.file = handle;
+ profile.access = access;
+ profile.data = data;
+ profile.size = size;
profile.cmsprofile = cmsprofile;
if ((hprof = create_profile( &profile ))) return hprof;
- HeapFree( GetProcessHeap(), 0, iccprofile );
+ HeapFree( GetProcessHeap(), 0, data );
cmsCloseProfile( cmsprofile );
}
CloseHandle( handle );
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return NULL;
}
@@ -1560,11 +1514,11 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
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 */
+#endif /* HAVE_LCMS2 */
return ret;
}
diff --git a/dlls/mscms/tests/profile.c b/dlls/mscms/tests/profile.c
index b5bf5aa..337b67a 100644
--- a/dlls/mscms/tests/profile.c
+++ b/dlls/mscms/tests/profile.c
@@ -254,17 +254,16 @@ static void test_GetColorProfileElement( char *standardprofile )
ok( !ret, "GetColorProfileElement() succeeded (%d)\n", GetLastError() );
size = 0;
-
ret = pGetColorProfileElement( handle, tag, 0, &size, NULL, &ref );
- ok( !ret && size > 0, "GetColorProfileElement() succeeded (%d)\n", GetLastError() );
-
- size = sizeof(buffer);
+ ok( !ret, "GetColorProfileElement() succeeded\n" );
+ ok( size > 0, "wrong size\n" );
/* Functional checks */
+ size = sizeof(buffer);
ret = pGetColorProfileElement( handle, tag, 0, &size, buffer, &ref );
- ok( ret && size > 0, "GetColorProfileElement() failed (%d)\n", GetLastError() );
-
+ ok( ret, "GetColorProfileElement() failed %u\n", GetLastError() );
+ ok( size > 0, "wrong size\n" );
ok( !memcmp( buffer, expect, sizeof(expect) ), "Unexpected tag data\n" );
pCloseColorProfile( handle );
@@ -1054,18 +1053,16 @@ static void test_SetColorProfileElement( char *testprofile )
/* Functional checks */
size = sizeof(data);
-
ret = pSetColorProfileElement( handle, tag, 0, &size, data );
- ok( ret, "SetColorProfileElement() failed (%d)\n", GetLastError() );
+ ok( ret, "SetColorProfileElement() failed %u\n", GetLastError() );
size = sizeof(buffer);
-
ret = pGetColorProfileElement( handle, tag, 0, &size, buffer, &ref );
- ok( ret && size > 0, "GetColorProfileElement() failed (%d)\n", GetLastError() );
+ ok( ret, "GetColorProfileElement() failed %u\n", GetLastError() );
+ ok( size > 0, "wrong size\n" );
ok( !memcmp( data, buffer, sizeof(data) ),
- "Unexpected tag data, expected %s, got %s (%d)\n",
- data, buffer, GetLastError() );
+ "Unexpected tag data, expected %s, got %s (%u)\n", data, buffer, GetLastError() );
pCloseColorProfile( handle );
}
diff --git a/dlls/mscms/transform.c b/dlls/mscms/transform.c
index 363400c..56a3232 100644
--- a/dlls/mscms/transform.c
+++ b/dlls/mscms/transform.c
@@ -34,7 +34,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
-#ifdef HAVE_LCMS
+#ifdef HAVE_LCMS2
static DWORD from_profile( HPROFILE profile )
{
@@ -96,7 +96,7 @@ static DWORD from_type( COLORTYPE type )
}
}
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
/******************************************************************************
* CreateColorTransformA [MSCMS.@]
@@ -141,7 +141,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
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;
@@ -181,7 +181,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
if (tgt) release_profile( tgt );
release_profile( dst );
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -205,7 +205,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
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 +237,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
{
/* 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 +263,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
release_profile( profile0 );
release_profile( profile1 );
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -282,13 +282,13 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
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 +319,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
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 +333,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
release_transform( transform );
ret = TRUE;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
return ret;
}
@@ -357,7 +357,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
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 +462,7 @@ done:
release_transform( transform );
return ret;
-#else /* HAVE_LCMS */
+#else /* HAVE_LCMS2 */
return FALSE;
-#endif /* HAVE_LCMS */
+#endif /* HAVE_LCMS2 */
}
--
1.7.10.4
More information about the wine-patches
mailing list