Dear group, Probably I'm doing something dead wrong, but using your lcms2 library in my own application, I seem to note a 50%-100% performance drop going from lcms to lcms2. The piece of code is, I think, pretty straightforward and goes hereafter. What am I doing wrong or what are the suggestions ? (For your reference, it's a piece of code that transforms a linear image representation to a screen, using a profile). OMP I took out of the equation.
Thanks for the library, thanks for the feedback ! Code : QTime Time; Time.start(); if (m_OutProfile) { // Some lcms initialization. cmsCIExyY D65; cmsCIExyY D50; cmsSetLogErrorHandler(lcmsError); cmsWhitePointFromTemp(&D65,6503); cmsWhitePointFromTemp(&D50,5003); cmsToneCurve* GammaCurve = cmsBuildGamma(NULL,1.0); cmsToneCurve* GammaCurves[] = {GammaCurve,GammaCurve,GammaCurve}; cmsHPROFILE InProfile = 0; cmsCIExyY DFromReference; short ColorSpace = m_RelatedImage->m_ColorSpace; switch (ColorSpace) { case dlSpace_sRGB_D65 : case dlSpace_AdobeRGB_D65 : DFromReference = D65; break; case dlSpace_WideGamutRGB_D50 : case dlSpace_ProPhotoRGB_D50 : DFromReference = D50; break; default: DL_ERROR(Error_SwitchCase,"Unexpected switch case","%d",ColorSpace); } InProfile = cmsCreateRGBProfile(&DFromReference, (cmsCIExyYTRIPLE*)&RGBPrimaries[ColorSpace], GammaCurves); if (!InProfile) { DL_ERROR(Error_Profile,"Could not open profile","%s","InProfile"); } cmsFreeToneCurve(GammaCurve); cmsHTRANSFORM Transform; Transform = cmsCreateTransform(InProfile, TYPE_RGBA_8, m_OutProfile, TYPE_RGBA_8, m_Intent, 0); // Addition of those drops performance even further. //cmsFLAGS_NOOPTIMIZE | //cmsFLAGS_BLACKPOINTCOMPENSATION); TRACEKEYVALS("Elapsed","%d",Time.elapsed()); TRACEKEYVALS("cmsDoTransform on QImage","%p",m_QImageZoomed); const uint32_t Size = m_ZoomWidth*m_ZoomHeight; short NrTiles = 1; #ifdef _OPENMP // XXX JDLA NrTiles = omp_get_num_threads(); #endif uint32_t Step = Size/NrTiles; #pragma omp parallel for default(shared) schedule(static) for (short Tile=0; Tile<NrTiles; Tile++) { uint32_t Start = Tile*Step; uint32_t End = (Tile == NrTiles-1) ? Size : Start+Step; cmsDoTransform(Transform, m_QImageZoomed->bits()+Start*4, m_QImageZoomed->bits()+Start*4, End-Start); } cmsDeleteTransform(Transform); cmsCloseProfile(InProfile); } TRACEKEYVALS("Elapsed","%d",Time.elapsed()); } -- Jos De Laender www.jodela.net ------------------------------------------------------------------------------ WhatsUp Gold - Download Free Network Management Software The most intuitive, comprehensive, and cost-effective network management toolset available today. Delivers lowest initial acquisition cost and overall TCO of any competing solution. http://p.sf.net/sfu/whatsupgold-sd _______________________________________________ Lcms-user mailing list Lcms-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lcms-user