diff -r 000000000000 -r 5d03bc08d59c graphicscomposition/openwfcompositionengine/composition/include/wfcstructs.h --- /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_*/ +