summaryrefslogtreecommitdiff
path: root/contrib/vidix/vidix.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/vidix/vidix.h')
-rw-r--r--contrib/vidix/vidix.h312
1 files changed, 312 insertions, 0 deletions
diff --git a/contrib/vidix/vidix.h b/contrib/vidix/vidix.h
new file mode 100644
index 000000000..bcf6b4ae0
--- /dev/null
+++ b/contrib/vidix/vidix.h
@@ -0,0 +1,312 @@
+/*
+ * 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 __cplusplus
+extern "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