📄 vidix.h
字号:
/* * vidix.h * VIDIX - VIDeo Interface for *niX * This interface is introduced as universal one to MPEG decoder, * BES == Back End Scaler 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). * Copyright 2002 Nick Kurshev * Licence: GPL * This interface is based on v4l2, fbvid.h, mga_vid.h projects * and personally my ideas. * NOTE: This interface is introduces as driver interface. * Don't use it for APP.*/#ifndef VIDIX_H#define VIDIX_H#ifdef __cplusplusextern "C" {#endif#define VIDIX_VERSION 100 /* returns driver version */extern unsigned vixGetVersion( void );#define PROBE_NORMAL 0 /* normal probing */#define PROBE_FORCE 1 /* ignore device_id but recognize device if it's known */ /* Probes video hw. verbose - specifies verbose level. force - specifies force mode - driver should ignore device_id (danger but useful for new devices) Returns 0 if ok else errno */extern int vixProbe( int verbose, int force ); /* Initializes driver. args - specifies driver specific parameters Returns 0 if ok else errno */extern int vixInit( const char *args ); /* Destroys driver */extern void vixDestroy( void );typedef struct vidix_capability_s{ char name[64]; /* Driver name */ char author[64]; /* Author name */#define TYPE_OUTPUT 0x00000000 /* Is a video playback device */#define TYPE_CAPTURE 0x00000001 /* Is a capture device */#define TYPE_CODEC 0x00000002 /* Device supports hw (de)coding */#define TYPE_FX 0x00000004 /* Is a video effects device */ int type; /* Device type, see below */ unsigned reserved0[4]; int maxwidth; int maxheight; int minwidth; int minheight; int maxframerate; /* -1 if unlimited */#define FLAG_NONE 0x00000000 /* No flags defined */#define FLAG_DMA 0x00000001 /* Card can use DMA */#define FLAG_EQ_DMA 0x00000002 /* Card can use DMA only if src pitch == dest pitch */#define FLAG_SYNC_DMA 0x00000004 /* Possible to wait for DMA * to finish. See * BM_DMA_SYNC and * BM_DMA_BLOCK below */#define FLAG_UPSCALER 0x00000010 /* Card supports hw upscaling */#define FLAG_DOWNSCALER 0x00000020 /* Card supports hw downscaling */#define FLAG_SUBPIC 0x00001000 /* Card supports DVD subpictures */#define FLAG_EQUALIZER 0x00002000 /* Card supports equalizer */ unsigned flags; /* Feature flags, see above */ unsigned short vendor_id; unsigned short device_id; unsigned reserved1[4];}vidix_capability_t; /* Should fill at least type before init. Returns 0 if ok else errno */extern int vixGetCapability(vidix_capability_t *);typedef struct vidix_fourcc_s{ unsigned fourcc; /* input: requested fourcc */ unsigned srcw; /* input: hint: width of source */ unsigned srch; /* input: hint: height of source */#define VID_DEPTH_NONE 0x0000#define VID_DEPTH_1BPP 0x0001#define VID_DEPTH_2BPP 0x0002#define VID_DEPTH_4BPP 0x0004#define VID_DEPTH_8BPP 0x0008#define VID_DEPTH_12BPP 0x0010#define VID_DEPTH_15BPP 0x0020#define VID_DEPTH_16BPP 0x0040#define VID_DEPTH_24BPP 0x0080#define VID_DEPTH_32BPP 0x0100 unsigned depth; /* output: screen depth for given fourcc */#define VID_CAP_NONE 0x0000#define VID_CAP_EXPAND 0x0001 /* if overlay can be bigger than source */#define VID_CAP_SHRINK 0x0002 /* if overlay can be smaller than source */#define VID_CAP_BLEND 0x0004 /* if overlay can be blended with framebuffer */#define VID_CAP_COLORKEY 0x0008 /* if overlay can be restricted to a colorkey */#define VID_CAP_ALPHAKEY 0x0010 /* if overlay can be restricted to an alpha channel */#define VID_CAP_COLORKEY_ISRANGE 0x0020 /* if the colorkey can be a range */#define VID_CAP_ALPHAKEY_ISRANGE 0x0040 /* if the alphakey can be a range */#define VID_CAP_COLORKEY_ISMAIN 0x0080 /* colorkey is checked against framebuffer */#define VID_CAP_COLORKEY_ISOVERLAY 0x0100 /* colorkey is checked against overlay */#define VID_CAP_ALPHAKEY_ISMAIN 0x0200 /* alphakey is checked against framebuffer */#define VID_CAP_ALPHAKEY_ISOVERLAY 0x0400 /* alphakey is checked against overlay */ unsigned flags; /* output: capability */}vidix_fourcc_t; /* Returns 0 if ok else errno */extern int vixQueryFourcc(vidix_fourcc_t *);typedef struct vidix_yuv_s{ unsigned y,u,v,a;}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 struct vidix_color_key_s{#define CKEY_FALSE 0#define CKEY_TRUE 1#define CKEY_EQ 2#define CKEY_NEQ 3 unsigned op; /* defines logical operation */ unsigned char red; unsigned char green; unsigned char blue; unsigned char reserved;}vidix_ckey_t;typedef struct vidix_video_key_s{#define VKEY_FALSE 0#define VKEY_TRUE 1#define VKEY_EQ 2#define VKEY_NEQ 3 unsigned op; /* defines logical operation */ unsigned char key[8];}vidix_vkey_t;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 */#define VID_PLAY_INTERLEAVED_UV 0x00000001 /* driver -> app: interleaved UV planes */#define INTERLEAVING_UV 0x00001000 /* UVUVUVUVUV used by Matrox G200 */#define INTERLEAVING_VU 0x00001001 /* VUVUVUVUVU */ int flags; /* memory model */ unsigned frame_size; /* driver -> app: destinition frame size */ unsigned num_frames; /* app -> driver: after call: driver -> app */#define VID_PLAY_MAXFRAMES 1024 /* unreal limitation */ 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; /* Returns 0 if ok else errno */extern int vixConfigPlayback(vidix_playback_t *); /* Returns 0 if ok else errno */extern int vixPlaybackOn( void ); /* Returns 0 if ok else errno */extern int vixPlaybackOff( void ); /* Returns 0 if ok else errno */extern int vixPlaybackFrameSelect( unsigned frame_idx );typedef struct vidix_grkey_s{ vidix_ckey_t ckey; /* app -> driver: color key */ vidix_vkey_t vkey; /* app -> driver: video key */#define KEYS_PUT 0#define KEYS_AND 1#define KEYS_OR 2#define KEYS_XOR 3 unsigned key_op; /* app -> driver: keys operations */}vidix_grkey_t; /* Returns 0 if ok else errno */extern int vixGetGrKeys( vidix_grkey_t * ); /* Returns 0 if ok else errno */extern int vixSetGrKeys( const vidix_grkey_t * );typedef struct vidix_video_eq_s{#define VEQ_CAP_NONE 0x00000000UL#define VEQ_CAP_BRIGHTNESS 0x00000001UL#define VEQ_CAP_CONTRAST 0x00000002UL#define VEQ_CAP_SATURATION 0x00000004UL#define VEQ_CAP_HUE 0x00000008UL#define VEQ_CAP_RGB_INTENSITY 0x00000010UL int 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 */#define VEQ_FLG_ITU_R_BT_601 0x00000000 /* ITU-R BT.601 colour space (default) */#define VEQ_FLG_ITU_R_BT_709 0x00000001 /* ITU-R BT.709 colour space */#define VEQ_FLG_ITU_MASK 0x0000000f int flags; /* currently specifies ITU YCrCb color space to use */}vidix_video_eq_t; /* Returns 0 if ok else errno */extern int vixPlaybackGetEq( vidix_video_eq_t * ); /* Returns 0 if ok else errno */extern int vixPlaybackSetEq( const vidix_video_eq_t * );typedef struct vidix_deinterlace_s{#define CFG_NON_INTERLACED 0x00000000 /* stream is not interlaced */#define CFG_INTERLACED 0x00000001 /* stream is interlaced */#define CFG_EVEN_ODD_INTERLACING 0x00000002 /* first frame contains even fields but second - odd */#define CFG_ODD_EVEN_INTERLACING 0x00000004 /* first frame contains odd fields but second - even */#define CFG_UNIQUE_INTERLACING 0x00000008 /* field deinterlace_pattern is valid */#define CFG_UNKNOWN_INTERLACING 0x0000000f /* unknown deinterlacing - use adaptive if it's possible */ unsigned flags; unsigned deinterlace_pattern; /* app -> driver: deinterlace pattern if flag CFG_UNIQUE_INTERLACING is set */}vidix_deinterlace_t; /* Returns 0 if ok else errno */extern int vixPlaybackGetDeint( vidix_deinterlace_t * ); /* Returns 0 if ok else errno */extern int vixPlaybackSetDeint( const 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 struct vidix_dma_s{ void * src; /* app -> driver. Virtual address of source */ unsigned dest_offset; /* app -> driver. Destinition offset within of video memory */ unsigned size; /* app -> driver. Size of transaction */#define BM_DMA_ASYNC 0#define BM_DMA_SYNC 1 /* await previous dma transfer completion */#define BM_DMA_FIXED_BUFFS 2 /* app -> driver: app uses buffers which are fixed in memory */#define BM_DMA_BLOCK 4 /* block until the transfer is complete */ unsigned flags; /* app -> driver */ unsigned idx; /* app -> driver: idx of src buffer */ void * internal[VID_PLAY_MAXFRAMES]; /* for internal use by driver */}vidix_dma_t; /* Returns 0 if ok else errno */extern int vixPlaybackCopyFrame( vidix_dma_t * ); /* Returns 0 if DMA is available else errno (EBUSY) */extern int vixQueryDMAStatus( void );/* 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{#define FX_TYPE_BOOLEAN 0x00000000#define FX_TYPE_INTEGER 0x00000001 int 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; /* Returns 0 if ok else errno */extern int vixQueryNumOemEffects( unsigned * number ); /* Returns 0 if ok else errno */extern int vixGetOemEffect( vidix_oem_fx_t * ); /* Returns 0 if ok else errno */extern int vixSetOemEffect( const vidix_oem_fx_t * );#ifdef VIDIX_BUILD_STATIC#define VIDIX_NAME(name) VIDIX_STATIC##name#else#define VIDIX_NAME(name) name#endif#ifdef __cplusplus}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -