graphicscomposition/openwfcompositionengine/composition/include/wfcstructs.h
changeset 0 5d03bc08d59c
child 152 9f1c3fea0f87
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicscomposition/openwfcompositionengine/composition/include/wfcstructs.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,306 @@
+/* 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.
+ */
+
+
+/*! \ingroup wfc
+ *  \file wfcstructs.h
+ *
+ *  \brief Composition SI data structures
+ */
+
+#ifndef WFCSTRUCTS_H_
+#define WFCSTRUCTS_H_
+
+#include "WF/wfc.h"
+
+#include "owftypes.h"
+#include "owfimage.h"
+#include "owfattributes.h"
+#include "owfmessagequeue.h"
+#include "owfthread.h"
+#include "owfmutex.h"
+#include "owfarray.h"
+#include "owfpool.h"
+#include "owflinkedlist.h"
+#include "owfdisplaycontextgeneral.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+struct WFC_CONTEXT_;
+
+
+typedef struct WFC_DEVICE_ {
+    WFCDevice               deviceId;
+    WFCHandle               handle;
+    WFCErrorCode            latestUnreadError;
+    OWF_ARRAY               contexts;
+    OWF_ARRAY               providers;
+    OWF_ARRAY               elements;
+    OWF_MUTEX               mutex;
+} WFC_DEVICE;
+
+typedef struct PHYSICAL_DEVICE_ {
+            OWF_ARRAY iDeviceInstanceArray;
+            OWFint gDeviceHandleID;
+} PHYSICAL_DEVICE;
+
+typedef struct {
+    OWFNativeStreamBuffer   targetBuffer;
+    /* */
+    void*                   targetPixels;
+    /* Mapped to the external format target image buffer each frame */
+    OWF_IMAGE*              targetImage;
+    /* Mapped to the internal format target image to compose to */
+    OWF_IMAGE*              internalTargetImage;
+    
+    /* The unrotated target buffer */ 
+    OWF_IMAGE_INST          unrotatedTargetImage;
+    /* The rotated version of the target buffer for hardware rotation, 
+     * or a de-rotated version of the internal buffer into another scratch buffer for software rotation
+     */ 
+    OWF_IMAGE_INST          rotatedTargetImage;
+    /* The internal target buffer composed to for 0 and 180 degree rotation */
+    OWF_IMAGE_INST          unrotatedInternalTargetImage;
+    /* The internal target buffer composed to for 90 and 270 degree rotation */
+    OWF_IMAGE_INST          rotatedInternalTargetImage;
+} WFC_CONTEXT_STATE;
+
+/*!
+Scratch buffers needed:
+1 for cropped source image
+1 for cropped mask image
+1 for scaled element image
+1 for mask
+*/
+#define SCRATCH_BUFFER_COUNT    5
+
+typedef struct {
+    /*! elements, ordered by depth; starting from bottom */
+    struct WFC_CONTEXT_*    context;
+    OWF_NODE*               elements;
+} WFC_SCENE;
+
+
+/*!
+ Element's composition state parameters.
+ */
+typedef struct {
+    /*! original source image and mask image - inputs to the first stage */
+    OWF_IMAGE*              originalSourceImage;
+    OWF_IMAGE*              originalMaskImage;
+    
+    /*! converted source image -
+       results of the first stage in the 
+       composition */
+    OWF_IMAGE_INST          convertedSourceImage;
+    
+    /*! cropped source image - result of cropping stage */
+    OWF_IMAGE_INST          croppedSourceImage;
+
+    /*! mirrored source intermediate image - temp buffer used in mirroring stage */
+    OWF_IMAGE_INST          rotatedSourceIntermediateImage;
+    
+    /*! mirrored source image - result of mirroring stage */
+    OWF_IMAGE_INST          flippedSourceImage;
+    
+    /*! rotated source image - result of rotation stage */
+    OWF_IMAGE_INST          rotatedSourceImage;
+    
+    /*! these are the "final size" (i.e. destination
+       size) versions of the previous. used in
+       the blending stage */
+    OWF_IMAGE_INST          scaledSourceImage;
+    OWF_RECTANGLE           scaledSrcRect;
+    OWF_IMAGE_INST          maskImage;
+
+    
+    /*! support for blending operation */
+    OWF_BLEND_INFO          blendInfo;
+    
+    
+    /*! source and target extents */
+    WFCfloat                sourceRect[4]; 
+    WFCfloat                destinationRect[4];
+    OWF_RECTANGLE           dstRect;
+    
+    /*! source fp viewport */
+    WFCfloat                transformedSourceRect[4];
+    
+    /*! oversized integer crop */
+    OWF_RECTANGLE           oversizedCropRect;
+    
+    /* Other attributes copied from element */
+    OWFsubpixel             globalAlpha;
+    WFCScaleFilter          sourceScaleFilter;
+    WFCbitfield             transparencyTypes;
+    /*! rotation method */
+    WFCRotation             rotation;
+    /*! flipping */
+    WFCboolean              sourceFlip;
+
+} WFC_ELEMENT_STATE;
+
+typedef enum
+{
+    WFC_IMAGE_SOURCE,
+    WFC_IMAGE_MASK
+} WFC_IMAGE_PROVIDER_TYPE;
+
+typedef struct 
+{
+    OWFNativeStreamBuffer   buffer;
+    OWFint                  lockCount;
+    OWF_IMAGE_INST          image;
+
+} WFC_LOCK_STREAM;
+
+typedef struct
+{
+    WFCHandle               handle;
+    WFC_IMAGE_PROVIDER_TYPE type;
+    OWFNativeStreamType     streamHandle;
+    void*                   owner;
+    WFCint                  contentUpdated;
+    WFCint                  contentVisible;
+    WFCint                  composed;
+    WFCint                  visited;
+    WFC_LOCK_STREAM         lockedStream;
+
+} WFC_IMAGE_PROVIDER;
+
+typedef struct {
+    WFCElement              handle;
+    WFC_DEVICE*             device;
+    struct WFC_CONTEXT_*     context;
+    /*! element attributes */
+    WFCfloat                srcRect[4];
+    WFCfloat                dstRect[4];
+    WFCboolean              sourceFlip;
+    WFCRotation             sourceRotation;
+    WFCScaleFilter          sourceScaleFilter;
+    WFCbitfield             transparencyTypes;
+    WFCfloat                globalAlpha;
+    WFCMask                 maskHandle;
+    WFCSource               sourceHandle;
+
+    /*! client scene and composed scene dereferenced image providers */
+    WFC_IMAGE_PROVIDER*     mask;
+    WFC_IMAGE_PROVIDER*     source;
+    WFC_IMAGE_PROVIDER*     cachedMask;
+    WFC_IMAGE_PROVIDER*     cachedSource;
+
+    /*! shared element? (must not be destroyed by a scene) */
+    WFCboolean              shared;
+
+    /*! set in WFC_Element_BeginComposition to indicate whether
+       the element should be included in composition */
+    WFCboolean              skipCompose;
+    /*! Set in WFC_Element_BeginComposition to indicate whether 
+     * the mask stream should be included in composition */
+    WFCboolean              maskComposed;
+} WFC_ELEMENT;
+
+typedef enum
+{
+    WFC_CONTEXT_STATE_PASSIVE,
+    WFC_CONTEXT_STATE_ACTIVATING,
+    WFC_CONTEXT_STATE_ACTIVE,
+    WFC_CONTEXT_STATE_DEACTIVATING
+} WFC_CONTEXT_ACTIVATION_STATE;
+
+typedef EGLint (*TFPtrEglPrivateSignalSyncNok) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
+#define INITIAL_CONTEXT_SERIAL_NUMBER 0
+typedef struct WFC_CONTEXT_ {
+    WFCContext              handle;
+    WFC_DEVICE*             device;
+
+    /*! work-in-progress scene */
+    WFC_SCENE*              workScene;
+    WFC_SCENE*              committedScene;
+    WFC_SCENE*              snapshotScene;
+
+    /*! pools for resource allocation */
+    OWF_POOL*               scenePool;
+    OWF_POOL*               nodePool;
+    OWF_POOL*               elementPool;
+
+    /*! screen number for on-screen contexts */
+    WFCint                  screenNumber;
+
+    /*!  scratch buffers used in composition to store per-element
+        intermediate results */
+    void*                   scratchBuffer[SCRATCH_BUFFER_COUNT];
+
+    /*! onscreen/offscreen write stream */
+    OWFNativeStreamType     stream;
+    WFCContextType          type;
+    WFCint                  targetWidth;
+    WFCint                  targetHeight;
+    WFCRotation             rotation;
+    OWFuint32               backgroundColor;
+    WFCElement              lowestElement;
+    OWF_ATTRIBUTE_LIST      attributes;
+    WFCint                  clientElementCount;
+
+    /*! timing & synchronization */
+    OWF_MESSAGE_QUEUE       composerQueue;
+    OWF_THREAD              composerThread;
+    WFC_CONTEXT_ACTIVATION_STATE       activationState;
+    OWF_SEMAPHORE           compositionSemaphore;
+    OWF_SEMAPHORE           commitSemaphore;
+    OWF_MUTEX               updateFlagMutex;
+    OWF_MUTEX               sceneMutex;
+    WFCint                  sourceUpdateCount;
+   
+    WFC_CONTEXT_STATE       state;
+    OWF_DISPCTX             displayContext;
+    
+    WFCEGLDisplay           nextSyncObjectDisplay;
+    WFC_ELEMENT_STATE       prototypeElementState;    
+    TFPtrEglPrivateSignalSyncNok    eglPrivateSignalSync;
+} WFC_CONTEXT;
+
+typedef struct WFC_CONTENT_UPDATED_PARAM_ {
+    WFCint      length;
+    WFCint      id;
+    WFCint      par;
+    WFCint      serialNumber;
+    WFCint      immediateAvailable;
+    WFCint      immediateVisibility;
+} WFC_CONTENT_UPDATED_PARAM;
+
+#define IMAGE_PROVIDER(x)   ((WFC_IMAGE_PROVIDER*)(x))
+#define ELEMENT(x)          ((WFC_ELEMENT*)(x))
+#define CONTEXT(x)          ((WFC_CONTEXT*)(x))
+#define DEVICE(x)           ((WFC_DEVICE*)(x))
+#define SCENE(x)            ((WFC_SCENE*)(x))
+#define STREAM(x)           ((OWF_STREAM*)(x))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*STRUCTS_H_*/
+