summaryrefslogtreecommitdiff
path: root/testbed/testthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'testbed/testthread.cpp')
-rw-r--r--testbed/testthread.cpp148
1 files changed, 108 insertions, 40 deletions
diff --git a/testbed/testthread.cpp b/testbed/testthread.cpp
index 435445c..d553567 100644
--- a/testbed/testthread.cpp
+++ b/testbed/testthread.cpp
@@ -1,52 +1,120 @@
#include <windows.h>
-#include "lcms.h"
+#include "lcms2_plugin.h"
-static cmsHPROFILE prof_xyz,prof_rgb;
-static cmsHTRANSFORM trans_xyz_to_rgb,trans_rgb_to_xyz;
+static cmsContext ctx;
+static cmsHPROFILE prof_cmyk, prof_rgb;
+static volatile int rc = 0;
-static DWORD WINAPI make_trans_xyz_to_rgb(LPVOID lpParameter)
+
+static
+void* MyMtxCreate(cmsContext id)
{
- trans_xyz_to_rgb = cmsCreateTransform(
- prof_xyz,TYPE_XYZ_DBL,
- prof_rgb,TYPE_RGB_DBL,
- INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_NOTPRECALC);
- return 0;
+ return (void*) CreateMutex( NULL, FALSE, NULL);
}
-static DWORD WINAPI make_trans_rgb_to_xyz(LPVOID lpParameter)
+static
+void MyMtxDestroy(cmsContext id, void* mtx)
{
- trans_rgb_to_xyz = cmsCreateTransform(
- prof_rgb,TYPE_RGB_DBL,
- prof_xyz,TYPE_XYZ_DBL,
- INTENT_ABSOLUTE_COLORIMETRIC,cmsFLAGS_NOTPRECALC);
- return 0;
+ 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 < 10000; 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 WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
- prof_xyz = cmsCreateXYZProfile();
- prof_rgb = cmsOpenProfileFromFile("AdobeRGB1998.icc","rb");
-//cmsCreate_sRGBProfile();
- for (int i=0;i<10;++i)
- {
-#define try_threads
-#ifdef try_threads
- DWORD threadid;
- HANDLE workers[2];
- workers[0] = CreateThread(NULL,0,make_trans_xyz_to_rgb,NULL,0,&threadid);
- workers[1] = CreateThread(NULL,0,make_trans_rgb_to_xyz,NULL,0,&threadid);
- WaitForMultipleObjects(2,workers,TRUE,INFINITE);
- for (unsigned i=0;i<2;++i)
- CloseHandle(workers[i]);
-#else
- make_trans_xyz_to_rgb(0);
- make_trans_rgb_to_xyz(0);
-#endif
- cmsDeleteTransform(trans_xyz_to_rgb);
- cmsDeleteTransform(trans_rgb_to_xyz);
- }
- cmsCloseProfile(prof_rgb);
- cmsCloseProfile(prof_xyz);
+ int i;
+ cmsContext ctx;
+
+ OutputDebugString(L"Test in progress...\n");
+
+ ctx = cmsCreateContext(&MutexPluginSample, 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;
}