| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include <windows.h>
- #include "lcms2_plugin.h"
- static cmsContext ctx;
- static cmsHPROFILE prof_cmyk, prof_rgb;
- static volatile int rc = 0;
- static
- void* MyMtxCreate(cmsContext id)
- {
- return (void*) CreateMutex( NULL, FALSE, NULL);
- }
- static
- void MyMtxDestroy(cmsContext id, void* mtx)
- {
- CloseHandle((HANDLE) mtx);
- }
- static
- cmsBool MyMtxLock(cmsContext id, void* mtx)
- {
- WaitForSingleObject((HANDLE) mtx, INFINITE);
- return TRUE;
- }
- static
- void MyMtxUnlock(cmsContext id, void* mtx)
- {
- ReleaseMutex((HANDLE) mtx);
- }
- static cmsPluginMutex MutexPluginSample = {
-
- { cmsPluginMagicNumber, 2060, cmsPluginMutexSig, NULL},
- MyMtxCreate, MyMtxDestroy, MyMtxLock, MyMtxUnlock
- };
- static DWORD WINAPI one_thread(LPVOID lpParameter)
- {
- int i, j;
- cmsUInt8Number rgb[3*1000];
- cmsUInt8Number cmyk[4*1000];
- Sleep(rand() % 500 );
- cmsHTRANSFORM xform = cmsCreateTransformTHR(ctx, prof_rgb, TYPE_RGB_8, prof_cmyk, TYPE_CMYK_8, 0, 0);
- for (i=0; i < 100000; i++) {
- for (j=0; j < 1000; j++)
- {
- rgb[j * 3 ] = 189;
- rgb[j * 3 + 1] = 100;
- rgb[j * 3 + 2] = 75;
- }
- cmsDoTransform(xform, rgb, cmyk, 1000);
- for (j=0; j < 1000; j++)
- {
- if (cmyk[j * 4 ] != 37 ||
- cmyk[j * 4 + 1 ] != 188 ||
- cmyk[j * 4 + 2 ] != 195 ||
- cmyk[j * 4 + 3 ] != 7)
- {
- OutputDebugString(L"ERROR\n");
- rc = 1;
- }
- }
- }
-
- cmsDeleteTransform(xform);
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
- {
- int i;
- cmsContext ctx;
- OutputDebugString(L"Test in progress...\n");
- ctx = cmsCreateContext(NULL, 0);
- prof_cmyk = cmsOpenProfileFromFileTHR(ctx, "USWebCoatedSWOP.icc", "r");
- prof_rgb = cmsOpenProfileFromFileTHR(ctx, "AdobeRGB1998.icc","r");
-
- #define NWORKERS 10
- HANDLE workers[NWORKERS];
- for (int i=0; i<NWORKERS; ++i)
- {
- DWORD threadid;
- workers[i] = CreateThread(NULL,0,one_thread,NULL,0,&threadid);
- }
- WaitForMultipleObjects(NWORKERS,workers,TRUE,INFINITE);
- for ( i=0;i<NWORKERS;++i)
- CloseHandle(workers[i]);
- cmsCloseProfile(prof_rgb);
- cmsCloseProfile(prof_cmyk);
- cmsDeleteContext(ctx);
- OutputDebugString(L"Test Done\n");
- return rc;
- }
|