diff options
Diffstat (limited to 'vidix/vidix.h')
-rw-r--r-- | vidix/vidix.h | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/vidix/vidix.h b/vidix/vidix.h deleted file mode 100644 index 0f402a3cb7..0000000000 --- a/vidix/vidix.h +++ /dev/null @@ -1,390 +0,0 @@ -/* - * VIDIX - VIDeo Interface for *niX. - * - * This interface is introduced as universal one to MPEG decoder, - * Back End Scaler (BES) and YUV2RGB hw accelerators. - * - * In the future it may be expanded up to capturing and audio things. - * Main goal of this this interface imlpementation is providing DGA - * everywhere where it's possible (unlike X11 and other). - * - * This interface is based on v4l2, fbvid.h, mga_vid.h projects - * and my personal ideas. - * - * NOTE: This interface is introduced as driver interface. - * - * Copyright (C) 2002 Nick Kurshev - * Copyright (C) 2007 Benjamin Zores <ben@geexbox.org> - * - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MPlayer 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef MPLAYER_VIDIX_H -#define MPLAYER_VIDIX_H - -#define PROBE_NORMAL 0 /* normal probing */ -#define PROBE_FORCE 1 /* ignore device_id but recognize device if it's known */ - -typedef enum vidix_dev_type { - TYPE_OUTPUT = 0x00000000, /* Is a video playback device */ - TYPE_CAPTURE = 0x00000001, /* Is a capture device */ - TYPE_CODEC = 0x00000002, /* Device supports hw (de)coding */ - TYPE_FX = 0x00000004, /* Is a video effects device */ -} vidix_dev_type_t; - -typedef enum vidix_dev_flag { - FLAG_NONE = 0x00000000, /* No flags defined */ - FLAG_DMA = 0x00000001, /* Card can use DMA */ - /* Card can use DMA only if src pitch == dest pitch */ - FLAG_EQ_DMA = 0x00000002, - /* Possible to wait for DMA to finish. See BM_DMA_SYNC and BM_DMA_BLOCK */ - FLAG_SYNC_DMA = 0x00000004, - FLAG_UPSCALER = 0x00000010, /* Card supports hw upscaling */ - FLAG_DOWNSCALER = 0x00000020, /* Card supports hw downscaling */ - FLAG_SUBPIC = 0x00001000, /* Card supports DVD subpictures */ - FLAG_EQUALIZER = 0x00002000, /* Card supports equalizer */ -} vidix_dev_flag_t; - -typedef struct vidix_capability_s -{ - char name[64]; /* Driver name */ - char author[64]; /* Author name */ - vidix_dev_type_t type; - unsigned reserved0[4]; - int maxwidth; - int maxheight; - int minwidth; - int minheight; - int maxframerate; /* -1 if unlimited */ - vidix_dev_flag_t flags; - unsigned short vendor_id; - unsigned short device_id; - unsigned reserved1[4]; -} vidix_capability_t; - -typedef enum vidix_depth { - VID_DEPTH_NONE = 0x0000, - VID_DEPTH_1BPP = 0x0001, - VID_DEPTH_2BPP = 0x0002, - VID_DEPTH_4BPP = 0x0004, - VID_DEPTH_8BPP = 0x0008, - VID_DEPTH_12BPP = 0x0010, - VID_DEPTH_15BPP = 0x0020, - VID_DEPTH_16BPP = 0x0040, - VID_DEPTH_24BPP = 0x0080, - VID_DEPTH_32BPP = 0x0100, - VID_DEPTH_ALL = VID_DEPTH_1BPP | VID_DEPTH_2BPP | \ - VID_DEPTH_4BPP | VID_DEPTH_8BPP | \ - VID_DEPTH_12BPP | VID_DEPTH_15BPP | \ - VID_DEPTH_16BPP | VID_DEPTH_24BPP | \ - VID_DEPTH_32BPP, -} vidix_depth_t; - -typedef enum vidix_cap { - VID_CAP_NONE = 0x0000, - /* if overlay can be bigger than source */ - VID_CAP_EXPAND = 0x0001, - /* if overlay can be smaller than source */ - VID_CAP_SHRINK = 0x0002, - /* if overlay can be blended with framebuffer */ - VID_CAP_BLEND = 0x0004, - /* if overlay can be restricted to a colorkey */ - VID_CAP_COLORKEY = 0x0008, - /* if overlay can be restricted to an alpha channel */ - VID_CAP_ALPHAKEY = 0x0010, - /* if the colorkey can be a range */ - VID_CAP_COLORKEY_ISRANGE = 0x0020, - /* if the alphakey can be a range */ - VID_CAP_ALPHAKEY_ISRANGE = 0x0040, - /* colorkey is checked against framebuffer */ - VID_CAP_COLORKEY_ISMAIN = 0x0080, - /* colorkey is checked against overlay */ - VID_CAP_COLORKEY_ISOVERLAY = 0x0100, - /* alphakey is checked against framebuffer */ - VID_CAP_ALPHAKEY_ISMAIN = 0x0200, - /* alphakey is checked against overlay */ - VID_CAP_ALPHAKEY_ISOVERLAY = 0x0400, -} vidix_cap_t; - -typedef struct vidix_fourcc_s -{ - unsigned fourcc; /* input: requested fourcc */ - vidix_depth_t depth; /* output: screen depth for given fourcc */ - vidix_cap_t flags; /* output: capability */ -} vidix_fourcc_t; - -typedef struct vidix_yuv_s -{ - unsigned y,u,v; -} vidix_yuv_t; - -typedef struct vidix_rect_s -{ - unsigned x,y,w,h; /* in pixels */ - vidix_yuv_t pitch; /* line-align in bytes */ -} vidix_rect_t; - -typedef enum vidix_color_key_op { - CKEY_FALSE = 0, - CKEY_TRUE = 1, - CKEY_EQ = 2, - CKEY_NEQ = 3, - CKEY_ALPHA = 4, -} vidix_color_key_op_t; - -typedef struct vidix_color_key_s -{ - vidix_color_key_op_t op; /* defines logical operation */ - unsigned char red; - unsigned char green; - unsigned char blue; - unsigned char reserved; -}vidix_ckey_t; - -typedef enum vidix_video_key_op { - VKEY_FALSE = 0, - VKEY_TRUE = 1, - VKEY_EQ = 2, - VKEY_NEQ = 3, -} vidix_video_key_op_t; - -typedef struct vidix_video_key_s { - vidix_video_key_op_t op; /* defines logical operation */ - unsigned char key[8]; -} vidix_vkey_t; - -typedef enum vidix_interleave { - VID_PLAY_INTERLEAVED_UV = 0x00000001, - /* UVUVUVUVUV used by Matrox G200 */ - INTERLEAVING_UV = 0x00001000, - /* VUVUVUVUVU */ - INTERLEAVING_VU = 0x00001001, -} vidix_interleave_t; - -#define VID_PLAY_MAXFRAMES 64 /* unreal limitation */ - -typedef struct vidix_playback_s -{ - unsigned fourcc; /* app -> driver: movies's fourcc */ - unsigned capability; /* app -> driver: what capability to use */ - unsigned blend_factor; /* app -> driver: blending factor */ - vidix_rect_t src; /* app -> driver: original movie size */ - vidix_rect_t dest; /* app -> driver: destinition movie size. - driver->app dest_pitch */ - vidix_interleave_t flags; /* driver -> app: interleaved UV planes */ - /* memory model */ - unsigned frame_size; /* driver -> app: destinition frame size */ - unsigned num_frames; /* app -> driver: after call: driver -> app */ - unsigned offsets[VID_PLAY_MAXFRAMES]; /* driver -> app */ - vidix_yuv_t offset; /* driver -> app: relative offsets - within frame for yuv planes */ - void *dga_addr; /* driver -> app: linear address */ -} vidix_playback_t; - -typedef enum vidix_key_op { - KEYS_PUT = 0, - KEYS_AND = 1, - KEYS_OR = 2, - KEYS_XOR = 3, -} vidix_key_op_t; - -typedef struct vidix_grkey_s -{ - vidix_ckey_t ckey; /* app -> driver: color key */ - vidix_vkey_t vkey; /* app -> driver: video key */ - vidix_key_op_t key_op; /* app -> driver: keys operations */ -} vidix_grkey_t; - -typedef enum vidix_veq_cap { - VEQ_CAP_NONE = 0x00000000UL, - VEQ_CAP_BRIGHTNESS = 0x00000001UL, - VEQ_CAP_CONTRAST = 0x00000002UL, - VEQ_CAP_SATURATION = 0x00000004UL, - VEQ_CAP_HUE = 0x00000008UL, - VEQ_CAP_RGB_INTENSITY = 0x00000010UL, -} vidix_veq_cap_t; - -typedef enum vidix_veq_flag { - VEQ_FLG_ITU_R_BT_601 = 0x00000000, /* ITU-R BT.601 colour space (default) */ - VEQ_FLG_ITU_R_BT_709 = 0x00000001, /* ITU-R BT.709 colour space */ - VEQ_FLG_ITU_MASK = 0x0000000f, -} vidix_veq_flag_t; - -typedef struct vidix_video_eq_s { - vidix_veq_cap_t cap; /* on get_eq should contain capability of - equalizer on set_eq should contain using fields */ - /* end-user app can have presets like: cold-normal-hot picture and so on */ - int brightness; /* -1000 : +1000 */ - int contrast; /* -1000 : +1000 */ - int saturation; /* -1000 : +1000 */ - int hue; /* -1000 : +1000 */ - int red_intensity; /* -1000 : +1000 */ - int green_intensity; /* -1000 : +1000 */ - int blue_intensity; /* -1000 : +1000 */ - vidix_veq_flag_t flags; /* currently specifies ITU YCrCb color - space to use */ -} vidix_video_eq_t; - -typedef enum vidix_interlace_flag { - /* stream is not interlaced */ - CFG_NON_INTERLACED = 0x00000000, - /* stream is interlaced */ - CFG_INTERLACED = 0x00000001, - /* first frame contains even fields but second - odd */ - CFG_EVEN_ODD_INTERLACING = 0x00000002, - /* first frame contains odd fields but second - even */ - CFG_ODD_EVEN_INTERLACING = 0x00000004, - /* field deinterlace_pattern is valid */ - CFG_UNIQUE_INTERLACING = 0x00000008, - /* unknown deinterlacing - use adaptive if it's possible */ - CFG_UNKNOWN_INTERLACING = 0x0000000f, -} vidix_interlace_flag_t; - -typedef struct vidix_deinterlace_s { - vidix_interlace_flag_t flags; - unsigned deinterlace_pattern; /* app -> driver: deinterlace pattern if - flag CFG_UNIQUE_INTERLACING is set */ -} vidix_deinterlace_t; - -typedef struct vidix_slice_s { - void *address; /* app -> driver */ - unsigned size; /* app -> driver */ - vidix_rect_t slice; /* app -> driver */ -} vidix_slice_t; - -typedef enum vidix_bm_flag { - LVO_DMA_NOSYNC = 0, - /* waits for vsync or hsync */ - LVO_DMA_SYNC = 1, -} vidix_dma_flag_t; - -typedef struct vidix_dma_s -{ - vidix_slice_t src; /* app -> driver */ - vidix_slice_t dest; /* app -> driver */ - vidix_dma_flag_t flags; /* app -> driver */ -} vidix_dma_t; - -typedef enum vidix_fx_type { - FX_TYPE_BOOLEAN = 0x00000000, - FX_TYPE_INTEGER = 0x00000001, -} vidix_fx_type_t; - -/* - This structure is introdused to support OEM effects like: - - sharpness - - exposure - - (auto)gain - - H(V)flip - - black level - - white balance - and many other -*/ -typedef struct vidix_oem_fx_s -{ - vidix_fx_type_t type; /* type of effects */ - int num; /* app -> driver: effect number. - From 0 to max number of effects */ - int minvalue; /* min value of effect. 0 - for boolean */ - int maxvalue; /* max value of effect. 1 - for boolean */ - int value; /* current value of effect on get; required on set */ - char *name[80]; /* effect name to display */ -} vidix_oem_fx_t; - -typedef struct VDXDriver { - const char *name; - struct VDXDriver *next; - int (* probe) (int verbose, int force); - int (* get_caps) (vidix_capability_t *cap); - int (*query_fourcc)(vidix_fourcc_t *); - int (*init)(void); - void (*destroy)(void); - int (*config_playback)(vidix_playback_t *); - int (*playback_on)( void ); - int (*playback_off)( void ); - /* Functions below can be missed in driver ;) */ - int (*frame_sel)( unsigned frame_idx ); - int (*get_eq)( vidix_video_eq_t * ); - int (*set_eq)( const vidix_video_eq_t * ); - int (*get_deint)( vidix_deinterlace_t * ); - int (*set_deint)( const vidix_deinterlace_t * ); - int (*copy_frame)( const vidix_dma_t * ); - int (*get_gkey)( vidix_grkey_t * ); - int (*set_gkey)( const vidix_grkey_t * ); -} VDXDriver; - -typedef struct VDXContext { - VDXDriver *drv; - /* might be filled in by much more info later on */ -} VDXContext; - -/***************************************************************************/ -/* PUBLIC API */ -/***************************************************************************/ - -/* Opens corresponded video driver and returns handle of associated stream. - * path - specifies path where drivers are located. - * name - specifies prefered driver name (can be NULL). - * cap - specifies driver capability (TYPE_* constants). - * verbose - specifies verbose level - * returns handle if ok else NULL. - */ -VDXContext *vdlOpen (const char *name,unsigned cap,int verbose); - -/* Closes stream and corresponded driver. */ -void vdlClose (VDXContext *ctx); - -/* Queries driver capabilities. Return 0 if ok else errno */ -int vdlGetCapability (VDXContext *, vidix_capability_t *); - -/* Queries support for given fourcc. Returns 0 if ok else errno */ -int vdlQueryFourcc (VDXContext *, vidix_fourcc_t *); - -/* Returns 0 if ok else errno */ -int vdlConfigPlayback (VDXContext *, vidix_playback_t *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackOn (VDXContext *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackOff (VDXContext *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackFrameSelect (VDXContext *, unsigned frame_idx); - -/* Returns 0 if ok else errno */ -int vdlGetGrKeys (VDXContext *, vidix_grkey_t *); - -/* Returns 0 if ok else errno */ -int vdlSetGrKeys (VDXContext *, const vidix_grkey_t *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackGetEq (VDXContext *, vidix_video_eq_t *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackSetEq (VDXContext *, const vidix_video_eq_t *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackGetDeint (VDXContext *, vidix_deinterlace_t *); - -/* Returns 0 if ok else errno */ -int vdlPlaybackSetDeint (VDXContext *, const vidix_deinterlace_t *); - -/* Returns 0 if ok else errno */ -int vdlQueryNumOemEffects (VDXContext *, unsigned *number); - -#endif /* MPLAYER_VIDIX_H */ |