mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 11:11:08 +00:00
cdcc39455c
PVRVideoSink uses PVR2D library to blit images. Author: Alessandro Decina <alessandro.decina@collabora.co.uk> Author: Luciana Fujii <luciana.fujii@collabora.co.uk>
176 lines
5.2 KiB
C
Executable file
176 lines
5.2 KiB
C
Executable file
/**********************************************************************
|
|
*
|
|
* Copyright(c) Imagination Technologies Ltd.
|
|
*
|
|
* The contents of this file are subject to the MIT license as set out below.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is 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 Software.
|
|
*
|
|
* THE SOFTWARE IS 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 SOFTWARE
|
|
* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* This License is also included in this distribution in the file called
|
|
* "COPYING".
|
|
*
|
|
******************************************************************************/
|
|
|
|
|
|
|
|
#if !defined(__DRI2_WS_H__)
|
|
#define __DRI2_WS_H__
|
|
|
|
#define DRI2WS_DISPFLAG_DEFAULT_DISPLAY 0x00000001
|
|
|
|
/*
|
|
// Constants (macros) related to back-buffering.
|
|
*/
|
|
|
|
#define XWS_FLIP_BUFFERS 3
|
|
#define DRI2_FLIP_BUFFERS_NUM XWS_FLIP_BUFFERS
|
|
#define XWS_FLIP_BUFFER_INDEX (XWS_MAX_FLIP_BUFFERS - 1)
|
|
|
|
#define XWS_BLIT_BUFFERS 2
|
|
#define DRI2_BLIT_BUFFERS_NUM XWS_BLIT_BUFFERS
|
|
#define XWS_BLIT_BUFFER_INDEX (XWS_MAX_BLIT_BUFFERS - 1)
|
|
|
|
#if 0
|
|
#define MIN(a,b) ((a)<(b)?(a):(b))
|
|
#define MAX(a,b) ((a)>(b)?(a):(b))
|
|
#endif
|
|
|
|
#define XWS_MAX_BUFFERS MAX(XWS_FLIP_BUFFERS, XWS_BLIT_BUFFERS)
|
|
#define DRI2_MAX_BUFFERS_NUM XWS_MAX_BUFFERS
|
|
|
|
|
|
#define __DRI_BUFFER_EMPTY 103
|
|
|
|
/** Used for ugly ugly ugly swap interval passing to dri2 driver and receiving current frame index */
|
|
#define __DRI_BUFFER_PVR_CTRL 0x80 /* 100000XX <- last 2 bits for swap interval value */
|
|
#define __DRI_BUFFER_PVR_CTRL_RET 0x90 /* 11000000 */
|
|
|
|
|
|
|
|
#define DRI2_BACK_BUFFER_EXPORT_TYPE_BUFFERS 1
|
|
#define DRI2_BACK_BUFFER_EXPORT_TYPE_SWAPCHAIN 2
|
|
|
|
#define UNREFERENCED_PARAMETER(x) (x) = (x)
|
|
|
|
|
|
/*
|
|
* Structure used to pass information about back buffers between client application and
|
|
* X.Org. Watch out for equivalent structure in pvr_video lib
|
|
*/
|
|
typedef struct _PVRDRI2BackBuffersExport_
|
|
{
|
|
/* Type of export. _BUFFERS mean set of handles, _SWAPCHAIN mean Swap chain ID */
|
|
unsigned int ui32Type;
|
|
PVR2D_HANDLE hBuffers[DRI2_MAX_BUFFERS_NUM];
|
|
unsigned int ui32BuffersCount;
|
|
unsigned int ui32SwapChainID;
|
|
} PVRDRI2BackBuffersExport;
|
|
|
|
/*
|
|
// Private window system display information
|
|
*/
|
|
typedef struct DRI2WS_Display_TAG
|
|
{
|
|
unsigned int ui32RefCount;
|
|
|
|
Display *display;
|
|
int screen;
|
|
unsigned int ui32Flags;
|
|
|
|
unsigned int ui32Width;
|
|
unsigned int ui32Height;
|
|
unsigned int ui32StrideInBytes;
|
|
unsigned int ui32BytesPerPixel;
|
|
WSEGLPixelFormat ePixelFormat;
|
|
|
|
PVR2DFORMAT ePVR2DPixelFormat;
|
|
PVR2DCONTEXTHANDLE hContext;
|
|
PVR2DMEMINFO *psMemInfo;
|
|
|
|
int iDRMfd;
|
|
} DRI2WSDisplay;
|
|
|
|
|
|
typedef enum DRI2WS_DrawableType_TAG
|
|
{
|
|
DRI2_DRAWABLE_UNKNOWN = 0,
|
|
DRI2_DRAWABLE_WINDOW = 1,
|
|
DRI2_DRAWABLE_PIXMAP = 2,
|
|
} DRI2WS_DrawableType;
|
|
|
|
|
|
/*
|
|
// Private window system drawable information
|
|
*/
|
|
typedef struct DRI2WS_Drawable_TAG
|
|
{
|
|
DRI2WS_DrawableType eDrawableType;
|
|
|
|
Window nativeWin;
|
|
|
|
/** Index of current render-to back buffer (received from Xserver) */
|
|
unsigned int ui32BackBufferCurrent;
|
|
|
|
/** Number of buffers */
|
|
unsigned int ui32BackBufferNum;
|
|
|
|
/** Swap interval (works only in fliping/fullscreen case, values 0-3) */
|
|
unsigned int ui32SwapInterval;
|
|
|
|
/** PVR2D Handles received from Xserver (back buffers export structure) */
|
|
PVR2D_HANDLE hPVR2DBackBufferExport;
|
|
|
|
/** Stamp of current back buffer */
|
|
unsigned char ucBackBufferExportStamp;
|
|
|
|
/** Array of PVR2D Handles received from Xserver (our back buffers) */
|
|
PVR2D_HANDLE hPVR2DBackBuffer[XWS_MAX_BUFFERS];
|
|
|
|
/** Array of PVR2D mapped back buffers */
|
|
PVR2DMEMINFO *psMemBackBuffer[XWS_MAX_BUFFERS];
|
|
|
|
/** Stamp of current back buffer */
|
|
unsigned char ucFrontBufferStamp;
|
|
|
|
/** Array of PVR2D Handles received from Xserver (our back buffers) */
|
|
PVR2D_HANDLE hPVR2DFrontBuffer;
|
|
|
|
/** Array of PVR2D mapped back buffers */
|
|
PVR2DMEMINFO *psMemFrontBuffer;
|
|
|
|
/** ID of flip/swap chain received from X.Org */
|
|
unsigned int ui32FlipChainID;
|
|
|
|
/** PVR2D Handle of flip chain used to get buffers to draw to */
|
|
PVR2DFLIPCHAINHANDLE hFlipChain;
|
|
|
|
int iWidth;
|
|
int iHeight;
|
|
|
|
WSEGLPixelFormat ePixelFormat;
|
|
unsigned int ui32BytesPerPixel;
|
|
unsigned int ui32StrideInPixels;
|
|
unsigned int ui32StrideInBytes;
|
|
PVR2DFORMAT ePVR2DPixelFormat;
|
|
|
|
DRI2WSDisplay *psXWSDisplay;
|
|
|
|
} DRI2WSDrawable;
|
|
|
|
#endif /* __DRI2_WS_H__ */
|