graphicscomposition/openwfcompositionengine/common/include/owfattributes.h
changeset 0 5d03bc08d59c
child 36 01a6848ebfd7
child 163 bbf46f59e123
--- /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_ */