Hoyt's FORK of DemoIccMAX 2.1.17.hoyt
Documentation for Hoyt's FORK of DemoIccMAX
Loading...
Searching...
No Matches
CIccMpeCurveSet Class Reference

Class: CIccMpeCurveSet. More...

#include <IccMpeBasic.h>

+ Inheritance diagram for CIccMpeCurveSet:
+ Collaboration diagram for CIccMpeCurveSet:

Public Member Functions

virtual void Apply (CIccApplyMpe *pApply, icFloatNumber *dstPixel, const icFloatNumber *srcPixel) const
 Name: CIccMpeCurveSet::Apply.
 
virtual bool Begin (icElemInterp nInterp, CIccTagMultiProcessElement *pMPE)
 Name: CIccMpeCurveSet::Begin.
 
 CIccMpeCurveSet (const CIccMpeCurveSet &curveSet)
 Name: CIccMpeCurveSet::CIccMpeCurveSet.
 
 CIccMpeCurveSet (int nSize=0)
 Name: CIccMpeCurveSet::CIccMpeCurveSet.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccMpeCurveSet::Describe.
 
virtual const icCharGetClassName () const
 
virtual icElemTypeSignature GetType () const
 
virtual CIccMultiProcessElementNewCopy () const
 
CIccMpeCurveSetoperator= (const CIccMpeCurveSet &curveSet)
 Name: &CIccMpeCurveSet::operator=.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccMpeCurveSet::Read.
 
bool SetCurve (int nIndex, icCurveSetCurvePtr newCurve)
 Name: CIccMpeCurveSet::SetCurve.
 
bool SetSize (int nNewSize)
 Name: CIccMpeCurveSet::SetSize.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const
 Name: CIccMpeCurveSet::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccMpeCurveSet::Write.
 
virtual ~CIccMpeCurveSet ()
 Name: CIccMpeCurveSet::~CIccMpeCurveSet.
 
- Public Member Functions inherited from CIccMultiProcessElement
 CIccMultiProcessElement ()
 
virtual icAcsSignature GetBAcsSig ()
 
virtual icAcsSignature GetEAcsSig ()
 
virtual IIccExtensionMpeGetExtension ()
 
virtual CIccApplyMpeGetNewApply (CIccApplyTagMpe *pApplyTag)
 Name: CIccMultiProcessElement::GetNewApply()
 
virtual bool IsAcs ()
 
virtual bool IsLateBinding () const
 
virtual bool IsLateBindingReflectance () const
 
virtual bool IsSupported ()
 
virtual icUInt16Number NumInputChannels () const
 
virtual icUInt16Number NumOutputChannels () const
 
virtual ~CIccMultiProcessElement ()
 

Protected Attributes

icCurveSetCurvePtrm_curve
 
icPositionNumberm_position
 
- Protected Attributes inherited from CIccMultiProcessElement
icUInt16Number m_nInputChannels
 
icUInt16Number m_nOutputChannels
 

Additional Inherited Members

- Static Public Member Functions inherited from CIccMultiProcessElement
static CIccMultiProcessElementCreate (icElemTypeSignature sig)
 Name: CIccMultiProcessElement::Create.
 
- Public Attributes inherited from CIccMultiProcessElement
icUInt32Number m_nReserved
 

Detailed Description

Class: CIccMpeCurveSet.

Purpose: The curve set process element

Definition at line 424 of file IccMpeBasic.h.

Constructor & Destructor Documentation

◆ CIccMpeCurveSet() [1/2]

CIccMpeCurveSet::CIccMpeCurveSet ( int nSize = 0)

Name: CIccMpeCurveSet::CIccMpeCurveSet.

Purpose:

Args:

Return:

Definition at line 2967 of file IccMpeBasic.cpp.

2968{
2969 m_nReserved = 0;
2970 if (nSize) {
2972 m_curve = (icCurveSetCurvePtr*)calloc(nSize, sizeof(icCurveSetCurvePtr));
2973 m_position = (icPositionNumber*)calloc(nSize, sizeof(icPositionNumber));
2974 }
2975 else {
2977 m_curve = NULL;
2978 m_position = NULL;
2979 }
2980}
Class: CIccCurveSetCurve.
icCurveSetCurvePtr * m_curve
icPositionNumber * m_position
icUInt16Number m_nOutputChannels
Definition IccTagMPE.h:192
icUInt16Number m_nInputChannels
Definition IccTagMPE.h:191
icUInt32Number m_nReserved
Definition IccTagMPE.h:188

◆ CIccMpeCurveSet() [2/2]

CIccMpeCurveSet::CIccMpeCurveSet ( const CIccMpeCurveSet & curveSet)

Name: CIccMpeCurveSet::CIccMpeCurveSet.

Purpose:

Args:

Return:

Definition at line 2994 of file IccMpeBasic.cpp.

2995{
2996 m_nReserved = curveSet.m_nReserved;
2997
2998 if (curveSet.m_nInputChannels) {
2999 int i;
3000
3004
3005 icCurveMap map;
3006 for (i=0; i<m_nInputChannels; i++) {
3007 CIccCurveSetCurve *ptr = curveSet.m_curve[i];
3008 if (ptr) {
3009 if (!map[ptr]) {
3010 m_curve[i] = ptr->NewCopy();
3011 map[ptr] = m_curve[i];
3012 }
3013 else
3014 m_curve[i] = map[ptr];
3015 }
3016 }
3017 }
3018 else {
3020 m_curve = NULL;
3021 }
3022}
std::map< icCurveSetCurvePtr, icCurveSetCurvePtr > icCurveMap
virtual CIccCurveSetCurve * NewCopy() const =0

References m_curve, CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nReserved, and CIccCurveSetCurve::NewCopy().

+ Here is the call graph for this function:

◆ ~CIccMpeCurveSet()

CIccMpeCurveSet::~CIccMpeCurveSet ( )
virtual

Name: CIccMpeCurveSet::~CIccMpeCurveSet.

Purpose:

Args:

Return:

Definition at line 3080 of file IccMpeBasic.cpp.

3081{
3082 SetSize(0);
3083}
bool SetSize(int nNewSize)
Name: CIccMpeCurveSet::SetSize.

Member Function Documentation

◆ Apply()

void CIccMpeCurveSet::Apply ( CIccApplyMpe * pApply,
icFloatNumber * pDestPixel,
const icFloatNumber * pSrcPixel ) const
virtual

Name: CIccMpeCurveSet::Apply.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 3436 of file IccMpeBasic.cpp.

3437{
3438 int i;
3439 for (i=0; i<m_nInputChannels; i++) {
3440 *pDestPixel++ = m_curve[i]->Apply(*pSrcPixel++);
3441 }
3442}
virtual icFloatNumber Apply(icFloatNumber v) const =0

◆ Begin()

bool CIccMpeCurveSet::Begin ( icElemInterp nInterp,
CIccTagMultiProcessElement * pMPE )
virtual

Name: CIccMpeCurveSet::Begin.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 3402 of file IccMpeBasic.cpp.

3403{
3404 if (!m_curve)
3405 return false;
3406
3407 icCurveMap map;
3408
3409 int i;
3410 for (i=0; i<m_nInputChannels; i++) {
3411 if (!m_curve[i])
3412 return false;
3413
3414 if (!map[m_curve[i]]) {
3415 if (!m_curve[i]->Begin(nInterp, pMPE)) {
3416 return false;
3417 }
3418 //ensure that Begin is called only once for each curve
3419 map[m_curve[i]] = (CIccCurveSetCurve*)1;
3420 }
3421 }
3422
3423 return true;
3424}
virtual bool Begin(icElemInterp nInterp, CIccTagMultiProcessElement *pMPE)
Name: CIccMpeCurveSet::Begin.

◆ Describe()

void CIccMpeCurveSet::Describe ( std::string & sDescription,
int nVerboseness )
virtual

Name: CIccMpeCurveSet::Describe.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 3183 of file IccMpeBasic.cpp.

3184{
3185 if (m_curve) {
3186 icChar buf[81];
3187 int i;
3188
3189 sprintf(buf, "BEGIN_CURVE_SET %d\n", m_nInputChannels);
3190 sDescription += buf;
3191
3192 for (i=0; i<m_nInputChannels; i++) {
3193 sprintf(buf, "Curve %d of %d\n", i+1, m_nInputChannels);
3194 sDescription += buf;
3195 if (m_curve[i]) {
3196 m_curve[i]->Describe(sDescription, nVerboseness);
3197 }
3198 }
3199 sDescription += "END_CURVE_SET\n";
3200 }
3201}
char icChar
Definition IccDefs.h:109
virtual void Describe(std::string &sDescription, int nVerboseness=100)=0

◆ GetClassName()

virtual const icChar * CIccMpeCurveSet::GetClassName ( ) const
inlinevirtual

Implements CIccMultiProcessElement.

Reimplemented in CIccMpeXmlCurveSet.

Definition at line 438 of file IccMpeBasic.h.

438{ return "CIccMpeCurveSet"; }

◆ GetType()

virtual icElemTypeSignature CIccMpeCurveSet::GetType ( ) const
inlinevirtual

Implements CIccMultiProcessElement.

Definition at line 437 of file IccMpeBasic.h.

437{ return icSigCurveSetElemType; }
@ icSigCurveSetElemType

References icSigCurveSetElemType.

◆ NewCopy()

virtual CIccMultiProcessElement * CIccMpeCurveSet::NewCopy ( ) const
inlinevirtual

Implements CIccMultiProcessElement.

Definition at line 430 of file IccMpeBasic.h.

430{ return new CIccMpeCurveSet(*this);}
CIccMpeCurveSet(int nSize=0)
Name: CIccMpeCurveSet::CIccMpeCurveSet.

◆ operator=()

CIccMpeCurveSet & CIccMpeCurveSet::operator= ( const CIccMpeCurveSet & curveSet)

Name: &CIccMpeCurveSet::operator=.

Purpose:

Args:

Return:

Definition at line 3034 of file IccMpeBasic.cpp.

3035{
3037
3038 if (m_curve) {
3039 free(m_curve);
3040 }
3041
3042 if (curveSet.m_nInputChannels) {
3043 int i;
3044
3048
3049 icCurveMap map;
3050 for (i=0; i<m_nInputChannels; i++) {
3051 CIccCurveSetCurve *ptr = curveSet.m_curve[i];
3052 if (ptr) {
3053 if (!map[ptr]) {
3054 m_curve[i] = ptr->NewCopy();
3055 map[ptr] = m_curve[i];
3056 }
3057 else
3058 m_curve[i] = map[ptr];
3059 }
3060 }
3061 }
3062 else {
3064 m_curve = NULL;
3065 }
3066
3067 return *this;
3068}

References m_curve, CIccMultiProcessElement::m_nInputChannels, and CIccCurveSetCurve::NewCopy().

+ Here is the call graph for this function:

◆ Read()

bool CIccMpeCurveSet::Read ( icUInt32Number size,
CIccIO * pIO )
virtual

Name: CIccMpeCurveSet::Read.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 3216 of file IccMpeBasic.cpp.

3217{
3219
3220 icUInt32Number startPos = pIO->Tell();
3221
3222 icUInt32Number headerSize = sizeof(icTagTypeSignature) +
3223 sizeof(icUInt32Number) +
3224 sizeof(icUInt16Number) +
3225 sizeof(icUInt16Number);
3226
3227 if (headerSize > size)
3228 return false;
3229
3230 if (!pIO) {
3231 return false;
3232 }
3233
3234 icUInt16Number nInputChannels, nOutputChannels;
3235
3236 if (!pIO->Read32(&sig))
3237 return false;
3238
3239 if (!pIO->Read32(&m_nReserved))
3240 return false;
3241
3242 if (!pIO->Read16(&nInputChannels))
3243 return false;
3244
3245 if (!pIO->Read16(&nOutputChannels))
3246 return false;
3247
3248 if (nInputChannels != nOutputChannels)
3249 return false;
3250
3251 if (nInputChannels > size - headerSize || nInputChannels * 2*sizeof(icUInt32Number) > size - headerSize)
3252 return false;
3253
3254 if (!SetSize(nInputChannels))
3255 return false;
3256
3257 if (m_curve) {
3258 int i;
3259
3260 if (headerSize + m_nInputChannels*2*sizeof(icUInt32Number) > size)
3261 return false;
3262
3263 for (i=0; i<m_nInputChannels; i++) {
3264 if (!pIO->Read32(&m_position[i].offset)) {
3265 return false;
3266 }
3267 if (!pIO->Read32(&m_position[i].size)) {
3268 return false;
3269 }
3270 }
3271
3272 icCurveOffsetMap map;
3273 icCurveElemSignature curveSig;
3274 for (i=0; i<m_nInputChannels; i++) {
3275 if (!map[m_position[i].offset]) {
3276 icUInt32Number pos;
3277 if (!m_position[i].offset || !m_position[i].size) {
3278 return false;
3279 }
3280
3281 pos = startPos + m_position[i].offset;
3282 if (pIO->Seek(pos, icSeekSet)!=(icInt32Number)pos) {
3283 return false;
3284 }
3285
3286 if (!pIO->Read32(&curveSig)) {
3287 return false;
3288 }
3289 m_curve[i] = CIccCurveSetCurve::Create(curveSig);
3290
3291 if (!m_curve[i]) {
3292 return false;
3293 }
3294
3295 if (pIO->Seek(pos, icSeekSet)!=(icInt32Number)pos) {
3296 return false;
3297 }
3298
3299 if (!m_curve[i]->Read(m_position[i].size, pIO)) {
3300 return false;
3301 }
3302
3303 map[m_position[i].offset] = m_curve[i];
3304 }
3305 else {
3306 m_curve[i] = map[m_position[i].offset];
3307 }
3308 }
3309 }
3310
3311 return true;
3312}
icArraySignature sig
@ icSeekSet
Definition IccIO.h:83
std::map< icUInt32Number, CIccCurveSetCurve * > icCurveOffsetMap
icTagTypeSignature
unsigned int icUInt32Number
static CIccCurveSetCurve * Create(icCurveElemSignature sig)
Name: CIccCurveSetCurve::Create.
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
virtual icInt32Number Tell()
Definition IccIO.h:133
virtual icInt32Number Seek(icInt32Number nOffset, icSeekVal pos)
Definition IccIO.h:132
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccMpeCurveSet::Read.
icCurveElemSignature
MPE Curve Set Curve signature.
unsigned short icUInt16Number
long icInt32Number
icElemTypeSignature
Multi-Processing Element type signatures.
icUInt32Number offset
icUInt32Number size

References CIccCurveSetCurve::Create(), icSeekSet, CIccIO::Read16(), CIccIO::Read32(), CIccIO::Seek(), sig, and CIccIO::Tell().

+ Here is the call graph for this function:

◆ SetCurve()

bool CIccMpeCurveSet::SetCurve ( int nIndex,
icCurveSetCurvePtr newCurve )

Name: CIccMpeCurveSet::SetCurve.

Purpose:

Args:

Return:

Definition at line 3151 of file IccMpeBasic.cpp.

3152{
3153 if (nIndex<0 || nIndex>m_nInputChannels)
3154 return false;
3155
3156 if (m_curve) {
3157 int i;
3158
3159 for (i=0; i<m_nInputChannels; i++)
3160 if (i!=nIndex && m_curve[i]==m_curve[nIndex])
3161 break;
3162
3163 if (i==m_nInputChannels && m_curve[nIndex]) {
3164 delete m_curve[nIndex];
3165 }
3166 }
3167 m_curve[nIndex] = newCurve;
3168
3169 return true;
3170}

Referenced by CDevLinkWriter::begin(), CIccDefaultEncProfileConverter::ConvertFromParams(), and main().

+ Here is the caller graph for this function:

◆ SetSize()

bool CIccMpeCurveSet::SetSize ( int nNewSize)

Name: CIccMpeCurveSet::SetSize.

Purpose:

Args:

Return:

Definition at line 3095 of file IccMpeBasic.cpp.

3096{
3097 if (m_curve) {
3098 icCurveMap map;
3099 int i;
3100
3101 for (i=0; i<m_nInputChannels; i++) {
3102 if (!map[m_curve[i]]) {
3103 map[m_curve[i]] = (CIccCurveSetCurve*)1;
3104 delete m_curve[i];
3105 }
3106 }
3107 free(m_curve);
3108 }
3109 if (m_position) {
3110 free(m_position);
3111 }
3112
3113 if (nNewSize) {
3114 m_curve = (icCurveSetCurvePtr*)calloc(nNewSize, sizeof(icCurveSetCurvePtr));
3115
3116 if (!m_curve) {
3117 m_position = NULL;
3119 return false;
3120 }
3121
3122 m_position = (icPositionNumber*)calloc(nNewSize, sizeof(icPositionNumber));
3123
3124 if (!m_position) {
3125 free(m_curve);
3126 m_curve = NULL;
3127
3129 return false;
3130 }
3132 }
3133 else {
3134 m_curve = NULL;
3136 }
3137
3138 return true;
3139}

Referenced by CIccDefaultEncProfileConverter::ConvertFromParams().

+ Here is the caller graph for this function:

◆ Validate()

icValidateStatus CIccMpeCurveSet::Validate ( std::string sigPath,
std::string & sReport,
const CIccTagMultiProcessElement * pMPE = NULL,
const CIccProfile * pProfile = NULL ) const
virtual

Name: CIccMpeCurveSet::Validate.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 3454 of file IccMpeBasic.cpp.

3455{
3456 std::string mpeSigPath = sigPath + icGetSigPath(GetType());
3457 icValidateStatus rv = CIccMultiProcessElement::Validate(sigPath, sReport, pMPE, pProfile);
3458
3459 bool empty=false;
3460 if (m_curve) {
3461 int i;
3462 for (i=0; !empty && i<m_nInputChannels; i++) {
3463 if (!m_curve[i]) {
3464 empty = true;
3465 }
3466 else {
3467 rv = icMaxStatus(rv, m_curve[i]->Validate(mpeSigPath, sReport, pMPE, pProfile));
3468 }
3469 }
3470 }
3471 else
3472 empty = true;
3473
3474 if (empty) {
3475 CIccInfo Info;
3476 std::string sSigPathName = Info.GetSigPathName(mpeSigPath);
3477
3478 sReport += icMsgValidateCriticalError;
3479 sReport += sSigPathName;
3480 sReport += " - Has Empty Curve Element(s)!\n";
3482 }
3483
3484 return rv;
3485}
icValidateStatus
Definition IccDefs.h:118
@ icValidateCriticalError
Definition IccDefs.h:122
icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Name: icMaxStatus.
Definition IccUtil.cpp:244
std::string icGetSigPath(icUInt32Number nSig)
Definition IccUtil.cpp:1191
const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
Type: Class.
Definition IccUtil.h:303
std::string GetSigPathName(std::string sigPath)
Definition IccUtil.cpp:1614
virtual icElemTypeSignature GetType() const
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const
Name: CIccMpeCurveSet::Validate.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const =0
Name: CIccProcessElement::Validate.

References CIccInfo::GetSigPathName(), icGetSigPath(), icMaxStatus(), icMsgValidateCriticalError, icValidateCriticalError, and CIccMultiProcessElement::Validate().

+ Here is the call graph for this function:

◆ Write()

bool CIccMpeCurveSet::Write ( CIccIO * pIO)
virtual

Name: CIccMpeCurveSet::Write.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 3324 of file IccMpeBasic.cpp.

3325{
3327
3328 if (!pIO)
3329 return false;
3330
3331 icUInt32Number elemStart = pIO->Tell();
3332
3333 if (!pIO->Write32(&sig))
3334 return false;
3335
3336 if (!pIO->Write32(&m_nReserved))
3337 return false;
3338
3339 if (!pIO->Write16(&m_nInputChannels))
3340 return false;
3341
3342 if (!pIO->Write16(&m_nInputChannels))
3343 return false;
3344
3345 if (m_curve && m_nInputChannels) {
3346 int i;
3347 icCurvePtrMap map;
3348 icUInt32Number start, end;
3349 icUInt32Number zeros[2] = { 0, 0};
3350 icPositionNumber position;
3351
3352 icUInt32Number startTable = pIO->Tell();
3353
3354 //First write empty position table
3355 for (i=0; i<m_nInputChannels; i++) {
3356 if (pIO->Write32(&zeros[0], 2)!=2)
3357 return false;
3358 }
3359
3360 //Now Write curves
3361 for (i=0; i<m_nInputChannels; i++) {
3362 if (m_curve[i]) {
3363 if (map.find(m_curve[i])==map.end()) {
3364 start = pIO->Tell();
3365 m_curve[i]->Write(pIO);
3366 end = pIO->Tell();
3367 pIO->Align32();
3368 position.offset = start - elemStart;
3369 position.size = end - start;
3370 map[m_curve[i]] = position;
3371 }
3372 m_position[i] = map[m_curve[i]];
3373 }
3374 }
3375 end = pIO->Tell();
3376
3377 //Back fill position table
3378 pIO->Seek(startTable, icSeekSet);
3379 for (i=0; i<m_nInputChannels; i++) {
3380 if (!pIO->Write32(&m_position[i].offset))
3381 return false;
3382 if (!pIO->Write32(&m_position[i].size))
3383 return false;
3384 }
3385
3386 pIO->Seek(end, icSeekSet);
3387 }
3388
3389 return true;
3390}
std::map< CIccCurveSetCurve *, icPositionNumber > icCurvePtrMap
virtual bool Write(CIccIO *pIO)=0
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:122
bool Align32()
Write operation to make sure that filelength is evenly divisible by 4.
Definition IccIO.cpp:341
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152

References CIccIO::Align32(), icSeekSet, icPositionNumber::offset, CIccIO::Seek(), sig, icPositionNumber::size, CIccIO::Tell(), CIccIO::Write16(), and CIccIO::Write32().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_curve

icCurveSetCurvePtr* CIccMpeCurveSet::m_curve
protected

Definition at line 451 of file IccMpeBasic.h.

Referenced by CIccMpeCurveSet(), and operator=().

◆ m_position

icPositionNumber* CIccMpeCurveSet::m_position
protected

Definition at line 453 of file IccMpeBasic.h.


The documentation for this class was generated from the following files: