From 7fe60435bce6595a9c58a9bfd8244d74b5320e96 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 15 Jan 2013 08:46:13 +0100 Subject: Import DirectFB141_2k11R3_beta5 --- Source/DirectFB/src/core/layers.h | 359 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 359 insertions(+) create mode 100755 Source/DirectFB/src/core/layers.h (limited to 'Source/DirectFB/src/core/layers.h') diff --git a/Source/DirectFB/src/core/layers.h b/Source/DirectFB/src/core/layers.h new file mode 100755 index 0000000..68a1d9e --- /dev/null +++ b/Source/DirectFB/src/core/layers.h @@ -0,0 +1,359 @@ +/* + (c) Copyright 2001-2009 The world wide DirectFB Open Source Community (directfb.org) + (c) Copyright 2000-2004 Convergence (integrated media) GmbH + + All rights reserved. + + Written by Denis Oliver Kropp , + Andreas Hundt , + Sven Neumann , + Ville Syrjälä and + Claudio Ciccani . + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#ifndef __CORE__LAYERS_H__ +#define __CORE__LAYERS_H__ + +#include + +#include + +#include +#include + + +struct __DFB_CoreLayerRegionConfig { + int width; /* width of the source in pixels */ + int height; /* height of the source in pixels */ + DFBSurfacePixelFormat format; /* pixel format of the source surface */ + DFBSurfaceCapabilities surface_caps; /* capabilities of the source surface */ + DFBDisplayLayerBufferMode buffermode; /* surface buffer configuration */ + + DFBDisplayLayerOptions options; /* various configuration options */ + + DFBDisplayLayerSourceID source_id; /* selected source */ + + DFBRectangle source; /* viewport within source (input) */ + DFBRectangle dest; /* viewport on screen (output) */ + + u8 opacity; /* global region alpha */ + + DFBColorKey src_key; /* source color key */ + DFBColorKey dst_key; /* destination color key */ + + int parity; /* field parity (for interlaced) */ + + u8 alpha_ramp[4]; /* alpha values for 1 or 2 bit lookup */ + + DFBRegion *clips; /* clip regions */ + int num_clips; /* number of clip regions */ + DFBBoolean positive; /* show or cut out regions */ +}; + +#if D_DEBUG_ENABLED +#define DFB_CORE_LAYER_REGION_CONFIG_DEBUG_AT( domain, config ) \ + do { \ + const CoreLayerRegionConfig *_config = config; \ + \ + D_DEBUG_AT( domain, " -> size %dx%d\n", _config->width, _config->height ); \ + D_DEBUG_AT( domain, " -> format %s\n", dfb_pixelformat_name( _config->format ) ); \ + D_DEBUG_AT( domain, " -> surf caps 0x%08x\n", _config->surface_caps ); \ + D_DEBUG_AT( domain, " -> buffermode %d\n", _config->buffermode ); \ + D_DEBUG_AT( domain, " -> options 0x%08x\n", _config->options ); \ + D_DEBUG_AT( domain, " -> source %d,%d-%dx%d\n", DFB_RECTANGLE_VALS(&_config->source) ); \ + D_DEBUG_AT( domain, " -> dest %d,%d-%dx%d\n", DFB_RECTANGLE_VALS(&_config->dest) ); \ + D_DEBUG_AT( domain, " -> opacity %d\n", _config->opacity ); \ + D_DEBUG_AT( domain, " -> src_key %02x%02x%02x (index %d)\n", DFB_COLORKEY_VALS(&_config->src_key) ); \ + D_DEBUG_AT( domain, " -> dst_key %02x%02x%02x (index %d)\n", DFB_COLORKEY_VALS(&_config->dst_key) ); \ + } while (0) +#else +#define DFB_CORE_LAYER_REGION_CONFIG_DEBUG_AT( domain, config ) \ + do { \ + } while (0) +#endif + +typedef enum { + CLRCF_NONE = 0x00000000, + + CLRCF_WIDTH = 0x00000001, + CLRCF_HEIGHT = 0x00000002, + CLRCF_FORMAT = 0x00000004, + CLRCF_SURFACE_CAPS = 0x00000008, + + CLRCF_BUFFERMODE = 0x00000010, + CLRCF_OPTIONS = 0x00000020, + CLRCF_SOURCE_ID = 0x00000040, + + CLRCF_SOURCE = 0x00000100, + CLRCF_DEST = 0x00000200, + CLRCF_CLIPS = 0x00000400, + + CLRCF_OPACITY = 0x00001000, + CLRCF_ALPHA_RAMP = 0x00002000, + + CLRCF_SRCKEY = 0x00010000, + CLRCF_DSTKEY = 0x00020000, + + CLRCF_PARITY = 0x00100000, + + CLRCF_SURFACE = 0x10000000, + CLRCF_PALETTE = 0x20000000, + + CLRCF_FREEZE = 0x80000000, + + CLRCF_ALL = 0xB013377F +} CoreLayerRegionConfigFlags; + +typedef struct { + /** Driver Control **/ + + /* + * Return size of layer data (shared memory). + */ + int (*LayerDataSize) ( void ); + + /* + * Return size of region data (shared memory). + */ + int (*RegionDataSize)( void ); + + /* + * Called once by the master to initialize layer data and reset hardware. + * Return layer description, default configuration and color adjustment. + */ + DFBResult (*InitLayer) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + DFBDisplayLayerDescription *description, + DFBDisplayLayerConfig *config, + DFBColorAdjustment *adjustment ); + + /* + * Called once by the master for each source. + * Driver fills description. + */ + DFBResult (*InitSource) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + int source, + DFBDisplayLayerSourceDescription *description ); + + + /** Layer Control **/ + + /* + * Return the currently displayed field (interlaced only). + */ + DFBResult (*GetCurrentOutputField)( CoreLayer *layer, + void *driver_data, + void *layer_data, + int *field ); + + /* + * Return the z position of the layer. + */ + DFBResult (*GetLevel) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + int *level ); + + /* + * Move the layer below or on top of others (z position). + */ + DFBResult (*SetLevel) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + int level ); + + + /** Configuration **/ + + /* + * Adjust brightness, contrast, saturation etc. + */ + DFBResult (*SetColorAdjustment) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + DFBColorAdjustment *adjustment ); + + + /** Region Control **/ + + /* + * Check all parameters and return if this region is supported. + */ + DFBResult (*TestRegion) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + CoreLayerRegionConfig *config, + CoreLayerRegionConfigFlags *failed ); + + /* + * Add a new region to the layer, but don't program hardware, yet. + */ + DFBResult (*AddRegion) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreLayerRegionConfig *config ); + + /* + * Setup hardware, called once after AddRegion() or when parameters + * have changed. Surface and palette are only set if updated or new. + */ + DFBResult (*SetRegion) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreLayerRegionConfig *config, + CoreLayerRegionConfigFlags updated, + CoreSurface *surface, + CorePalette *palette, + CoreSurfaceBufferLock *lock ); + + /* + * Remove a region from the layer. + */ + DFBResult (*RemoveRegion) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data ); + + /* + * Flip the surface of the region. + */ + DFBResult (*FlipRegion) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreSurface *surface, + DFBSurfaceFlipFlags flags, + CoreSurfaceBufferLock *lock ); + + /* + * Indicate updates to the front buffer content. + */ + DFBResult (*UpdateRegion) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreSurface *surface, + const DFBRegion *update, + CoreSurfaceBufferLock *lock ); + + /* + * Control hardware deinterlacing. + */ + DFBResult (*SetInputField)( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + int field ); + + + /** Override defaults. Subject to change. **/ + + /* + * Allocate the surface of the region. + */ + DFBResult (*AllocateSurface) ( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreLayerRegionConfig *config, + CoreSurface **ret_surface ); + + /* + * Reallocate the surface of the region. + */ + DFBResult (*ReallocateSurface)( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreLayerRegionConfig *config, + CoreSurface *surface ); + + /* + * Deallocate the surface of the region. + */ + DFBResult (*DeallocateSurface)( CoreLayer *layer, + void *driver_data, + void *layer_data, + void *region_data, + CoreSurface *surface ); +} DisplayLayerFuncs; + + +/* + * Add a layer to a graphics device by pointing to a table + * containing driver functions. The supplied driver data + * will be passed to these functions. + */ +CoreLayer *dfb_layers_register( CoreScreen *screen, + void *driver_data, + const DisplayLayerFuncs *funcs ); + +/* + * Replace functions of the primary layer implementation by passing + * an alternative driver function table. All non-NULL functions in the new + * table replace the functions in the original function table. + * The original function table is written to 'primary_funcs' before to allow + * drivers to use existing functionality from the original implementation. + */ +CoreLayer *dfb_layers_hook_primary( CoreGraphicsDevice *device, + void *driver_data, + DisplayLayerFuncs *funcs, + DisplayLayerFuncs *primary_funcs, + void **primary_driver_data ); + +/* + * Replace functions of the primary layer implementation completely by passing + * an alternative driver function table. + */ +CoreLayer *dfb_layers_replace_primary( CoreGraphicsDevice *device, + void *driver_data, + DisplayLayerFuncs *funcs ); + +typedef DFBEnumerationResult (*DisplayLayerCallback) (CoreLayer *layer, + void *ctx); + +void dfb_layers_enumerate( DisplayLayerCallback callback, + void *ctx ); + + +int dfb_layer_num( void ); + +CoreLayer *dfb_layer_at( DFBDisplayLayerID id ); + +CoreLayer *dfb_layer_at_translated( DFBDisplayLayerID id ); + + +void dfb_layer_get_description( const CoreLayer *layer, + DFBDisplayLayerDescription *desc ); + +CoreScreen *dfb_layer_screen( const CoreLayer *layer ); + +CardState *dfb_layer_state( CoreLayer *layer ); + +DFBDisplayLayerID dfb_layer_id( const CoreLayer *layer ); + +DFBDisplayLayerID dfb_layer_id_translated( const CoreLayer *layer ); + +DFBSurfacePixelFormat dfb_primary_layer_pixelformat( void ); + +#endif -- cgit