Exemplo n.º 1
0
/* use PTRefNum1 and PTRefNum2 to propagate attributes to PTRefNumR */
PTErr_t ComposeAttrFut(	PTRefNum_t PTRefNum1,
						PTRefNum_t PTRefNum2,
						PTRefNum_t PTRefNumR)
{
PTErr_t	errnum = KCP_SUCCESS;
KpInt8_t	strInSpace[KCM_MAX_ATTRIB_VALUE_LENGTH+1];
KpInt8_t	strOutSpace[KCM_MAX_ATTRIB_VALUE_LENGTH+1];
KpInt32_t	inspace, outspace, attrSize;

	/* get 1st PT */
	attrSize = KCM_MAX_ATTRIB_VALUE_LENGTH;
	errnum = PTGetAttribute(PTRefNum1, KCM_SPACE_OUT, &attrSize, strOutSpace);
	if (errnum == KCP_SUCCESS) {
		outspace = KpAtoi(strOutSpace);

		/* get 2nd PT */
		attrSize = KCM_MAX_ATTRIB_VALUE_LENGTH;
		errnum = PTGetAttribute(PTRefNum2, KCM_SPACE_IN, &attrSize, strInSpace);

		if (errnum == KCP_SUCCESS) {
			inspace = KpAtoi(strInSpace);

			if ((outspace == KCM_UNKNOWN) && (inspace != KCM_UNKNOWN)) {
				errnum = moveAttrList (PTRefNum2, 0, propIAttrF, 0, PTRefNumR);
				if (errnum == KCP_SUCCESS) {		
					errnum = moveAttrList (PTRefNum2, 0, propOAttrF, 0, PTRefNumR);
				}
				return (errnum);
			}
			else {
				if ((outspace != KCM_UNKNOWN) && (inspace == KCM_UNKNOWN)) {
					errnum = moveAttrList (PTRefNum1, 0, propIAttrF, 0, PTRefNumR);
					if (errnum == KCP_SUCCESS) {		
						errnum = moveAttrList (PTRefNum1, 0, propOAttrF, 0, PTRefNumR);
					}
					return (errnum);
				}
			}
		}
	}

	errnum = moveAttrList (PTRefNum1, 0, propIAttrF, 0, PTRefNumR);	/* propagate "input" attributes */
	
	if (errnum == KCP_SUCCESS) {
		errnum = moveAttrList (PTRefNum2, 0, propOAttrF, 0, PTRefNumR);	/* propagate "output" attributes */
	}

	return (errnum);
}
Exemplo n.º 2
0
/*--------------------------------------------------------------------
 * DESCRIPTION
 * This function obtains the number of input and output
 * channels of a PT
 *
 * AUTHOR
 * PGT
 *
 * DATE CREATED
 * May 11, 1994
 *--------------------------------------------------------------------*/
static PTErr_t
	getNumChans (	PTRefNum_t	RefNum,
					KpInt32_p	numOutChan,
					KpInt32_p	numInVar)
{
KpInt32_t	attrib[FUT_NOCHAN] = {KCM_NUM_VAR_1_IN, KCM_NUM_VAR_2_IN, KCM_NUM_VAR_3_IN,
				KCM_NUM_VAR_4_IN, KCM_NUM_VAR_5_IN, KCM_NUM_VAR_6_IN, KCM_NUM_VAR_7_IN, KCM_NUM_VAR_8_IN};
KpInt32_t	i, nOutChan;
PTErr_t		PTErr;
KpChar_t	AttrValue [10];
KpInt32_t	AttrSize;

/* get number of output variables and the number of input variables for each output variable */
	AttrSize = sizeof (AttrValue);
	PTErr = PTGetAttribute (RefNum, KCM_NUM_VAR_OUT, &AttrSize, AttrValue);
	if (PTErr != KCP_SUCCESS) {
		return PTErr;
	}

	nOutChan = KpAtoi (AttrValue);
	*numOutChan = nOutChan;
	if (nOutChan > FUT_NOCHAN) {
		nOutChan = FUT_NOCHAN;
	}

	for (i = 0; i < nOutChan; i++) {
		AttrSize = sizeof (AttrValue);
		PTErr = PTGetAttribute(RefNum, attrib[i], &AttrSize, AttrValue);
		if (KCP_SUCCESS != PTErr) {
			numInVar [i] = 0;
		}
		else {
			numInVar [i] = KpAtoi (AttrValue);
		}
	}

	return KCP_SUCCESS;
}
Exemplo n.º 3
0
/*--------------------------------------------------------------------
 * DESCRIPTION
 *	Get the number of input and output channels for a Transform.
 *
 * AUTHOR
 * 	mjb
 *
 * DATE CREATED
 *	October 17, 1995
 *------------------------------------------------------------------*/
SpStatus_t KSPAPI SpXformGetChannels (
				SpXform_t		Xform,
				KpInt32_t		FAR *In,
				KpInt32_t		FAR *Out)
{

	PTRefNum_t	refNum;
	KpChar_t	attribute [KCM_MAX_ATTRIB_VALUE_LENGTH+1];
	KpInt32_t	inChans, outChans, temp, size, attribId, index;
	SpStatus_t	spStatus;
	PTErr_t		ptErr;

	/*	Get the PTRefNum for the transform	*/
	spStatus = SpXformGetRefNum (Xform, &refNum);
	if (SpStatSuccess != spStatus) {
		return spStatus;
	}

	/*	Start by determining the number of output channels	*/
	size = sizeof (attribute);
	ptErr = PTGetAttribute (refNum, KCM_NUM_VAR_OUT, &size, attribute);
	if (KCP_SUCCESS != ptErr) {
		return SpStatBadXform;
	}
	outChans = KpAtoi (attribute);

	/*	Check that we didn't exceed the maximum output channels	*/
	if (outChans > SpMaxComponents) {
		return SpStatBadXform;
	}

	/*	For each output channel get the number of input channels.
		The number of input channels must be the same for each 
		output channel.	*/
	inChans = -1;
	for (index = 0, attribId = KCM_NUM_VAR_1_IN; index < outChans; 
			index++, attribId++) {

		size = sizeof (attribute);
		ptErr = PTGetAttribute (refNum, attribId, &size, attribute);
		if (KCP_SUCCESS != ptErr) {
			return SpStatBadXform;
		}
		temp = KpAtoi (attribute);

		if (-1 == inChans) {
			inChans = temp;
		}
		else {
			if (temp != inChans) {
				return SpStatBadXform;
			}
		}

	}

	/*	return the number of input and output channels	*/
	*In = inChans;
	*Out = outChans;
	return SpStatSuccess;

}
Exemplo n.º 4
0
/*--------------------------------------------------------------------
 * DESCRIPTION
 * This function checks to determine if the PT can be inverted
 *
 * AUTHOR
 * PGT
 *
 * DATE CREATED
 * May 11, 1994
 *--------------------------------------------------------------------*/
static KpBool_t
	InvertOk (	PTRefNum_t	RefNum,
				KpInt32_t	senseAttrib)
{
KpInt32_t	sense;
KpInt32_t	invertAttrib;
PTErr_t		PTErr;
KpChar_t	AttrValue [10];
KpInt32_t	AttrSize;

/* See if the attribute is the right type */
	switch (senseAttrib) {
	case KCM_MEDIUM_SENSE_IN:
		invertAttrib = KCM_SENSE_INVERTIBLE_IN;
		break;

	case KCM_MEDIUM_SENSE_OUT:
		invertAttrib = KCM_SENSE_INVERTIBLE_OUT;
		break;

	default:
		return KPFALSE;
	}

/* If the sense attribute is not in this PT, then this PT cannot be
 * inverted for that sense because it is a color space for which
 * inverting is not appropriate (e.g., RCS) */
	AttrSize = sizeof(AttrValue);
	PTErr = PTGetAttribute (RefNum, senseAttrib, &AttrSize, AttrValue);
	if (PTErr != KCP_SUCCESS) {
		return KPFALSE;
	}

	sense = KpAtoi (AttrValue);
	if (KCM_UNKNOWN == sense) {
		return KPFALSE;
	}

/* Make sure that the PT is allowed to be inverted:
 *  if the attribute KCM_SENSE_INVERTIBLE==KCM_IS_INVERTIBLE
 *  if KCM_SENSE_INVERTIBLE is missing and KCM_CLASS==KCM_OUTPUT_CLASS */
	AttrSize = sizeof(AttrValue);
	PTErr = PTGetAttribute (RefNum, invertAttrib, &AttrSize, AttrValue);
	/* If attribute not set, OK to invert */
	if (PTErr == KCP_SUCCESS) {
		switch ( KpAtoi (AttrValue)) {
		case KCM_IS_NOT_INVERTIBLE:
			return KPFALSE;

		case KCM_IS_INVERTIBLE:
			return KPTRUE;
		}
	}

	AttrSize = sizeof(AttrValue);
	PTErr = PTGetAttribute (RefNum, KCM_CLASS, &AttrSize, AttrValue);
	if (PTErr != KCP_SUCCESS) {
		return KPFALSE;
	}
	
	if (KCM_OUTPUT_CLASS == KpAtoi(AttrValue)) {
		return KPTRUE;
	}

	return KPFALSE;
}