diff -r 000000000000 -r 5d03bc08d59c graphicscomposition/openwfcompositionengine/common/include/owfattributes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicscomposition/openwfcompositionengine/common/include/owfattributes.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,421 @@ +/* Copyright (c) 2009 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Materials. + * + * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + */ + +#ifndef OWFATTRIBUTES_H_ +#define OWFATTRIBUTES_H_ + +#include "owftypes.h" +#include "owfutils.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/*! + * \file Attribute interface + * + * Attribute interface provides mechanism for controlled reading/writing + * access of different object properties in WFC and WFD APIs by proxying + * object instances' properties. + * + */ +#define RANGE_UNDEFINED 0xFFFFFFFF +#define ATTR_LENGTH_BITS 20 +#define MAX_ATTR_LENGTH (1 << ATTR_LENGTH_BITS)-1 +#define NUM_ATTR_VALUE_COPIES 3 +#define COMMITTED_ATTR_VALUE_INDEX 0 +#define WORKING_ATTR_VALUE_INDEX 1 +#define SNAPSHOT_ATTR_VALUE_INDEX 2 + +typedef enum { + ATTR_ERROR_NONE = 0, + ATTR_ERROR_NOT_FOUND = -1, + ATTR_ERROR_ALREADY_IN_USE = -2, + ATTR_ERROR_INVALID_ATTRIBUTE= -3, + ATTR_ERROR_INVALID_VALUE = -4, + ATTR_ERROR_INVALID_ARGUMENT = -5, + ATTR_ERROR_INVALID_CONTEXT = -6, + ATTR_ERROR_NO_MEMORY = -7, + ATTR_ERROR_INSANE = -8, + ATTR_ERROR_ACCESS_DENIED = -9, + ATTR_ERROR_INVALID_TYPE = -10, + ATTR_ERROR_CANT_HANDLE = -11 +} OWF_ATTRIBUTE_LIST_STATUS; + +/* Attribute value element types */ +typedef enum { + AT_UNDEFINED = 0, + AT_INTEGER = 1, + AT_FLOAT = 2, + AT_BOOLEAN = 3 +} OWF_ATTRIBUTE_TYPE; + + +/* + * Attribute information (header) + * + * Dirty field is internal. Do not fiddle with it. + * + * Comment on use of bitfields: + * 1: It stops generic use of split dirty flag + * 2: Some compilers will not reorder members to merge length into earier fields. + */ +typedef struct { + OWFuint type: 2; + OWFuint dirty: 1; + OWFuint dirtysnapshot: 1; + OWFuint readonly: 1; + OWFuint size; //Size of one primitive + OWFuint length: ATTR_LENGTH_BITS; //Number of primitives in vector +} OWF_ATTRIBUTE_INFO; + +/* + * Attribute may be a scalar (1-element) or vector (n-element), + * containing a reference to either integer, boolean or float value(s). + * Attribute type cannot be changed after it has been initialized. + * + * Attributes don't own the data they refer to; attributes only + * control the reading and writing of the data they refer to. + */ + +typedef OWFfloat* OWF_FLOAT_REF; +typedef OWFint* OWF_INT_REF; +typedef OWFboolean* OWF_BOOL_REF; +typedef OWFfloat* OWF_FLOAT_VECTOR_REF; +typedef OWFint* OWF_INT_VECTOR_REF; + +typedef struct { + OWF_ATTRIBUTE_INFO attr_info; + union { + OWF_INT_REF int_value; + OWF_FLOAT_REF float_value; + void* gen_ptr; + /* + OWF_INT_VECTOR_REF int_vector_value; + OWF_FLOAT_VECTOR_REF float_vector_value; + */ + } attr_value[NUM_ATTR_VALUE_COPIES]; +} OWF_ATTRIBUTE; + +/* + * Attribute list/context. Container for attributes. + * + * One list/context can contain constant number of + * attributes (amount of which is defined at construction + * time) + */ +typedef struct { + OWFint range_start; + OWFint range_end; + OWF_ATTRIBUTE* attributes; + OWF_ATTRIBUTE_LIST_STATUS last_error; +} OWF_ATTRIBUTE_LIST; + +/* + * \brief Initializes attribute context + * + * \param aContext Attribute context to initialize + * \param aStart Attribute range start + * \param aEnd Attribute range end. Must be greater than range start. + * + * \return ERR_INVALID_ARGUMENT + * ERR_NO_MEMORY + */ +OWF_API_CALL void +OWF_AttributeList_Create(OWF_ATTRIBUTE_LIST* aContext, + OWFint aStart, + OWFint aEnd); + +/* + * \brief Destroy attribute context and free any resources (memory + * blocks) allocated to it. All attributes are destroyed. + * + * \param aContext Attribute context to destroy + * + * \return ERR_INVALID_ARGUMENT + * ERR_INVALID_CONTEXT + */ +OWF_API_CALL void +OWF_AttributeList_Destroy(OWF_ATTRIBUTE_LIST* aContext); + +/* + * \brief Gets the last error from the attribute. + * Resets the error state. + * + * \return Error code. + * + */ +OWF_API_CALL OWF_ATTRIBUTE_LIST_STATUS +OWF_AttributeList_GetError(OWF_ATTRIBUTE_LIST* aContext); + +/* + * \brief Intialize integer attribute + * + * \param aContext Attibute context + * \param aName Attribute name + * \param aValue Attribute initial value + * \param aRdOnly Read-only flag + * + * \return ERR_INVALID_ARGUMENT + * ERR_INVALID_ATTRIBUTE + * ERR_INVALID_CONTEXT + */ +OWF_API_CALL void +OWF_Attribute_Initi(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWF_INT_REF aValue, + OWFboolean aRdOnly); + +/* + * \brief Initialize float attribute + * + * \param aContext Attribute context + * \param aName Attribute name + * \param aValue Initial value for attribute + * \param aRdOnly Read-only flag + * + * \return ERR_INVALID_ARGUMENT + * ERR_INVALID_ATTRIBUTE + * ERR_INVALID_CONTEXT + */ +OWF_API_CALL void +OWF_Attribute_Initf(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWF_FLOAT_REF aValue, + OWFboolean aRdOnly); + +/* + * \brief Initialize boolean attribute + * + * \param aContext Attribute context + * \param aName Attribute name + * \param aValue Initial value for attribute + * \param aRdOnly Read-only flag + * + * \return ERR_INVALID_ARGUMENT + * ERR_INVALID_ATTRIBUTE + * ERR_INVALID_CONTEXT + */ +OWF_API_CALL void +OWF_Attribute_Initb(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWF_BOOL_REF aValue, + OWFboolean aRdOnly); + +/* + * \brief Initialize vector attribute + * + * \param aContext Attribute context + * \param aName Attribute name + * \param aLength Attribute (vector) length + * \param aValues Initial value(s) for attribute + * \param aRdOnly Read-only flag + * + * \return ERR_INVALID_ARGUMENT + * ERR_INVALID_ATTRIBUTE + * ERR_INVALID_CONTEXT + * ERR_CANT_HANDLE + */ +OWF_API_CALL void +OWF_Attribute_Initiv(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aLength, + OWF_INT_VECTOR_REF aValues, + OWFboolean aRdOnly); + +/* + * \brief Initialize vector attribute + * + * \param aContext Attribute context + * \param aName Attribute name + * \param aLength Attribute (vector) length + * \param aValues Initial value(s) for attributes + * \param aRdOnly Read-only flag + * + * \return + */ +OWF_API_CALL void +OWF_Attribute_Initfv(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aLength, + OWF_FLOAT_VECTOR_REF aValues, + OWFboolean aRdOnly); + +/* + * \brief Get attribute integer value. + * + * \param aContext Attribute context + * \param aName Attribute name + * + * \return Attribute integer value (floats are floor()ed). For vector + * attributes the return value will be error ERR_INVALID_TYPE. + * ERR_INVALID_ATTRIBUTE + * ERR_INVALID_CONTEXT + */ +OWF_API_CALL OWFint +OWF_Attribute_GetValuei(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName); + +/* + * \brief Return boolean attribute value + * + * \param aContext Attribute context + * \param aName Attribute name + * + * \return Attribute value + * ERR_INVALID_ATTRIBUTE + * ERR_INVALID_TYPE + */ +OWF_API_CALL OWFboolean +OWF_Attribute_GetValueb(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName); + +/* + * \brief Get attribute float value + * + * \param aContext + * \param aName + * \param aValue + * + * \return Attribute + */ +OWF_API_CALL OWFfloat +OWF_Attribute_GetValuef(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName); + +/* + * \brief + * + * \param aContext + * \param aName + * \param aSize + * \param aValue + * + * \return + */ +OWF_API_CALL OWFint +OWF_Attribute_GetValueiv(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aLength, + OWFint* aValue); + +/* + * \brief + * + * \param aContext + * \param aName + * \param aSize + * \param aValue + * + * \return + */ +OWF_API_CALL OWFint +OWF_Attribute_GetValuefv(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aLength, + OWFfloat* aValue); + +/* + * \brief + * + * \param aContext + * \param aName + * \param aValue + * + * \return + */ +OWF_API_CALL void +OWF_Attribute_SetValuei(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aValue); + +/* + * \brief + * + * \param aContext + * \param aName + * \param aValue + * + * \return + */ +OWF_API_CALL void +OWF_Attribute_SetValuef(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFfloat aValue); + +/* + * \brief + * + * \param + * \param + * \param + * + * \return + */ +OWF_API_CALL void +OWF_Attribute_SetValueb(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFboolean aValue); + +/* + * \brief + * + * \param + * \param + * \param + * + * \return + */ +OWF_API_CALL void +OWF_Attribute_SetValueiv(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aLength, + const OWFint* aValue); + +/* + * \brief + * + * \param + * \param + * \param + * + * \return + */ +OWF_API_CALL void +OWF_Attribute_SetValuefv(OWF_ATTRIBUTE_LIST* aContext, + OWFint aName, + OWFint aLength, + const OWFfloat* aValue); + + +OWF_API_CALL void +OWF_AttributeList_Commit(OWF_ATTRIBUTE_LIST* aContext, OWFint aStart, OWFint aEnd, OWFint aCopyTo ); + + +#ifdef __cplusplus +} +#endif + +#endif /* ATTRIBUTES_H_ */