[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] CT60/CTPCI xbios bindings




Additionally there is a whole bunch of new bindings ATI Radeon specific, this should be added too, but no pressure with those:

*************************************************************************
 ATARI Radeon XBIOS VIDIX functions
*************************************************************************
XBIOS Functions list:

vdxGetVersion()          XBIOS function 400 - mandatory
vdxProbe()               XBIOS function 401 - mandatory
vdxInit()                XBIOS function 402 - optional
vdxDestroy()             XBIOS function 403 - optional
vdxGetCapability()       XBIOS function 404 - mandatory
vdxQueryFourcc()         XBIOS function 405 - mandatory
vdxConfigPlayback()      XBIOS function 406 - mandatory
vdxPlaybackOn()          XBIOS function 407 - mandatory
vdxPlaybackOff()         XBIOS function 408 - mandatory
vdxPlaybackFrameSelect() XBIOS function 409 - optional
vdxGetGrKeys()           XBIOS function 410 - optional
vdxSetGrKeys()           XBIOS function 411 - optional
vdxPlaybackGetEq()       XBIOS function 412 - optional
vdxPlaybackSetEq()       XBIOS function 413 - optional
vdxPlaybackGetDeint()    XBIOS function 414 - optional
vdxPlaybackSetDeint()    XBIOS function 415 - optional
vdxPlaybackCopyFrame()   XBIOS function 416 - optional
vdxQueryDMAStatus()      XBIOS function 417 - optional

Regards,
Pawel

W dniu 2011-02-04 22:02, Paweł Góralski pisze:
Hi,
I've attached the defines and system bindings from the last version of official CT60/CTPCI driver archive. Shouldn't these bindings and defines be put in /mint/sysbind.h and /mint/ostruct.h ?

I would also suggest adding "#define VN 0x564e" for new CTPCI Vsetscreen(). I think that "#define ID_CT60" could be ommited, because there is C_CT60 in cookie.h.


Regards,
Pawel
		VIDIX - VIDeo Interface for *niX
		~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		
This interface was designed and introduced as interface to userspace drivers
to provide DGA everywhere where it's possible (unline X11).
I hope that these drivers will be portable same as X11 (not only on *nix).

What is it:
- It's portable successor of mga_vid technology which is located in user-space.
- Unlikely X11 it's provides DGA everywhere where it's possible.
- Unlikely v4l it provides interface for video playback
- Unlikely linux's drivers it uses mathematics library.

Why it was developed:
As said Vladimir Dergachev 
(http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/gatos/km/km.rfc.txt):
"0) Motivation
    v4l, v4l2 and Xv are all suffering from the same problem: attempt to fit 
    existing multimedia devices into a fixed scheme."
Well - I tried to implement something similar by motivation.

How it works:
~~~~~~~~~~~~~

This interface is almost finished. But I guess it can be expanded by developer's
requests.
So any suggestions, reports, criticism are gladly accepted.

1) APP calls vixGetVersion to check age of driver ;)
2) APP calls vixProbe. Driver should return 0 if it can handle something in PC.
3) APP calls vixGetCapability. Driver should return filled
    vidix_capability_t.type field at least.
4) If above calls were succesful then APP calls vixInit function
   (Driver can have not exported this function in this case call will be
    skiped).
5) After initializing of driver APP calls vixGetCapability again
   (In this case driver must fill every field of struct)
6) APP calls vixQueryFourcc. Driver should answer - can it configure
   video memory for given fourcc or not.
7) APP calls vixConfigPlayback. Driver should prepare BES on this call.
   APP pass to driver following info:
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   vidix_playback_t.fourcc	- contains fourcc of movie
   vidix_playback_t.capability	- currently contsinas copy of vidix_capability_t.flags
   vidix_playback_t.blend_factor- currently unused   
   vidix_playback_t.src		- x,y,w,h fields contain original movie size
				  (in pixels) x and y often are nulls.
   vidix_playback_t.src.pitch.y   These fields contain source pitches
   vidix_playback_t.src.pitch.u - for each Y,U,V plane in bytes.
   vidix_playback_t.src.pitch.v   (For packed fourcc only Y value is used)
				  They are hints for driver to use same destinition
				  pitches as in source memory (to speed up
				  memcpy process).
				  Note: when source pitches are unknown or
				  variable these field will be filled into 0.
   vidix_playback_t.dest	- x,y,w,h fields contains destinition rectange
				  on the screen in pixels.
   vidix_playback_t.num_frames  - maximal # of frames which can be used by APP.
				  (Currently 10).
   Driver should fill following fields:
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   vidix_playback_t.num_frames  - real # of frames which will be used by driver.
				  (Should be less or equal to app's num_frames).
				  
   vidix_playback_t.dest.pitch.y   These fields should contain alignment
   vidix_playback_t.dest.pitch.u - for each Y,U,V plane in bytes.
   vidix_playback_t.dest.pitch.v   (For packed fourcc only Y value is used)
   
   vidix_playback_t.frame_size	- Driver should tell to app which size of
				      source frame (src.w and src.h) should
				      use APP (according to pitches and offsets)

   vidix_playback_t.offsets	- offsets from begin of BES memory for each frame
   
   vidix_playback_t.offset.y	  These field should contain offset
   vidix_playback_t.offset.u	- for each Y,U,V plane within frame.
   vidix_playback_t.offset.v	  (For packed fourcc only Y value is used)

   vidix_playback_t.dga_addr	- Address of BES memory.
   
Also see this picture:

VIDEO MEMORY layout:
 +-----------  It's begin of video memory     End of video memory--------------+
 |                                                                             |
 v                                                                             v
 [      RGB memory                         |         YUV memory    |  UNDEF    ]
					   ^
					   |
					   +---- begin of BES memory

BES MEMORY layout:
 +-------- begin of BES memory
 |
 v
 [ | |                      |       |       |
   ^ ^                      ^       ^       ^
   | |                      |       |       + BEGIN of second frame
   | |                      |       + BEGIN of V plane
   | |                      + BEGIN of U plane
   | +------- BEGIN of Y plane
   |
   +--------- BEGIN of first frame

This means that in general case:
offset of frame != offset of BES
offset of Y plane != offset of first frame

But often: vidix_playback_t.offsets[0] = vidix_playback_t.offset.y = 0;

Formula: (For Y plane) copy source to:
		  vidix_playback_t.dga_addr +
		  vidix_playback_t.offsets[i] +
		  vidix_playback_t.offset.y

8) APP calls vixPlaybackOn. Driver should activate BES on this call.
9) PLAYBACK. Driver should sleep here ;)
   But during playback can be called:
     vixFrameSelect (if this function is exported)
	Driver should prepare and activate corresponded frame.
	This function is used only for double and trilpe buffering and
	never used for single buffering playback.
     vixGet(Set)GrKeys (if this function is exported)
	This interface should be tuned but intriduced for overlapped playback
	and video effects (TYPE_FX)
     vixPlaybackGet(Set)Eq (if this function is exported)
	For color correction.
10) APP calls vixPlaybackOff. Driver should deactivate BES on this call.
11) If vixDestroy is defined APP calls this function before unloading driver
    from memory.
    
    
What functions are mandatory:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vixGetVersion
vixProbe
vixGetCapability
vixQueryFourcc
vixConfigPlayback
vixPlaybackOn
vixPlaybackOff

All other functions are optionaly.

Useful links:
~~~~~~~~~~~~~
Guide to DTV		http://www.digitaltelevision.com/dtvbook/toc.shtml
Fourcc			http://www.webartz.com/fourcc/
MPEG			http://www.mpeg.org/MPEG/index.html
Analog colors		http://www.miranda.com/en/app_notes/TN/TN-05/TN-05.htm

Please send your suggestions, reports, feedback to mplayerxp-general@lists.sourceforge.net

Best regards! Nick Kurshev.
*************************************************************************
 ATARI Radeon XBIOS VIDIX functions
*************************************************************************
XBIOS Functions list:

vdxGetVersion()          XBIOS function 400 - mandatory
vdxProbe()               XBIOS function 401 - mandatory
vdxInit()                XBIOS function 402 - optional
vdxDestroy()             XBIOS function 403 - optional
vdxGetCapability()       XBIOS function 404 - mandatory
vdxQueryFourcc()         XBIOS function 405 - mandatory
vdxConfigPlayback()      XBIOS function 406 - mandatory
vdxPlaybackOn()          XBIOS function 407 - mandatory
vdxPlaybackOff()         XBIOS function 408 - mandatory
vdxPlaybackFrameSelect() XBIOS function 409 - optional
vdxGetGrKeys()           XBIOS function 410 - optional
vdxSetGrKeys()           XBIOS function 411 - optional
vdxPlaybackGetEq()       XBIOS function 412 - optional
vdxPlaybackSetEq()       XBIOS function 413 - optional
vdxPlaybackGetDeint()    XBIOS function 414 - optional
vdxPlaybackSetDeint()    XBIOS function 415 - optional
vdxPlaybackCopyFrame()   XBIOS function 416 - optional
vdxQueryDMAStatus()      XBIOS function 417 - optional


*************************************************************************
			vdxGetVersion    
*************************************************************************

  Opcode:
       XBIOS 400

  Syntax:
       unsigned vdxGetVersion(void);

  Description:
          Get the version.

  Binding:
          move.w  #400,-(sp)
          trap    #14
          addq.l  #2,sp
          
  Return: Version.

*************************************************************************
			vdxProbe    
*************************************************************************

  Opcode:
       XBIOS 401

  Syntax:
       int vdxProbe(int verbose,int force);

  Description:
          Probe the board.
          Verbose and force are unused for the Atari driver.

  Binding:
          move.l  force,-(sp)
          move.l  verbose,-(sp)
          move.w  #401,-(sp)
          trap    #14
          lea.l   10(sp),sp
          
  Return: Driver should return 0 if it can handle something else 
          ENXIO.
          
*************************************************************************
			vdxInit    
*************************************************************************

  Opcode:
       XBIOS 402

  Syntax:
       int vdxInit(void);

  Description:
          Initialize the VIDIX driver.

  Binding:
          move.w  #402,-(sp)
          trap    #14
          addq.l  #2,sp
          
  Return: Driver should return 0.

*************************************************************************
			vdxDestroy    
*************************************************************************

  Opcode:
       XBIOS 403

  Syntax:
       void vdxDestroy(void);

  Description:
          Quit the VIDIX driver.

  Binding:
          move.w  #403,-(sp)
          trap    #14
          addq.l  #2,sp
          
  Return: Nothing.

*************************************************************************
			vdxGetCapability    
*************************************************************************

  Opcode:
       XBIOS 404

  Syntax:
       int vdxGetCapability(vidix_capability_t *to);

  Description:
          Driver should return capability with filled vidix_capability_t.type field.

  to structure:
       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_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;

  Binding:
          pea.l   to
          move.w  #404,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.

*************************************************************************
			vdxQueryFourcc    
*************************************************************************

  Opcode:
       XBIOS 405

  Syntax:
       int vdxQueryFourcc(vidix_fourcc_t *to);

  Description:
          Select requested fourcc, witdh and height
          Driver should answer - can it configure video memory for given fourcc or not.

  to structure:
       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;

  Binding:
          pea.l   to
          move.w  #405,-(sp)
          trap    #14
          adq.l   #6,sp
          
  Return: Driver should return 0 else ENOSYS.
          
*************************************************************************
			vdxConfigPlayback    
*************************************************************************

  Opcode:
       XBIOS 406

  Syntax:
       int vdxConfigPlayback(vidix_playback_t *info);

  Description:
          Driver should prepare BES on this call.

          APP pass to driver following info:
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          vidix_playback_t.fourcc       - contains fourcc of movie
          vidix_playback_t.capability   - currently contsinas copy of vidix_capability_t.flags
          vidix_playback_t.blend_factor - currently unused   
          vidix_playback_t.src          - x,y,w,h fields contain original movie size
                                          (in pixels) x and y often are nulls.
          vidix_playback_t.src.pitch.y    These fields contain source pitches
          vidix_playback_t.src.pitch.u  - for each Y,U,V plane in bytes.
          vidix_playback_t.src.pitch.v    (For packed fourcc only Y value is used)
                                          They are hints for driver to use same destinition
                                          pitches as in source memory (to speed up
                                          memcpy process).
                                          Note: when source pitches are unknown or
                                          variable these field will be filled into 0.
          vidix_playback_t.dest	- x,y,w,h fields contains destinition rectange
                                  on the screen in pixels.
          vidix_playback_t.num_frames - maximal # of frames which can be used by APP.
                                        (Currently 10).
          Driver should fill following fields:
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          vidix_playback_t.num_frames   - real # of frames which will be used by driver.
                                          (Should be less or equal to app's num_frames).			  
          vidix_playback_t.dest.pitch.y   These fields should contain alignment
          vidix_playback_t.dest.pitch.u - for each Y,U,V plane in bytes.
          vidix_playback_t.dest.pitch.v   (For packed fourcc only Y value is used)  
          vidix_playback_t.frame_size   - Driver should tell to app which size of
                                          source frame (src.w and src.h) should
                                          use APP (according to pitches and offsets)
          vidix_playback_t.offsets      - offsets from begin of BES memory for each frame  
          vidix_playback_t.offset.y       These field should contain offset
          vidix_playback_t.offset.u     - for each Y,U,V plane within frame.
          vidix_playback_t.offset.v       (For packed fourcc only Y value is used)
          vidix_playback_t.dga_addr     - Address of BES memory.
   
          Also see this picture:

          VIDEO MEMORY layout:
           +-----------  It's begin of video memory     End of video memory--------------+
           |                                                                             |
           v                                                                             v
           [      RGB memory                         |         YUV memory    |  UNDEF    ]
                                                     ^
                                                     |
                                                     +---- begin of BES memory         
          BES MEMORY layout:
           +-------- begin of BES memory
           |
           v
           [ | |                      |       |       |
             ^ ^                      ^       ^       ^
             | |                      |       |       + BEGIN of second frame
             | |                      |       + BEGIN of V plane
             | |                      + BEGIN of U plane
             | +------- BEGIN of Y plane
             |
             +--------- BEGIN of first frame
          
          This means that in general case:
          offset of frame != offset of BES
          offset of Y plane != offset of first frame

          But often: vidix_playback_t.offsets[0] = vidix_playback_t.offset.y = 0;

          Formula: (For Y plane) copy source to:
                   vidix_playback_t.dga_addr + vidix_playback_t.offsets[i] + vidix_playback_t.offset.y

  info structure:
       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 64   /* reasonable limitation for decoding ahead */
           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;

  Binding:
          pea.l   info
          move.w  #406,-(sp)
          trap    #14
          adq.l   #6,sp
          
  Return: Driver should return 0.
 
*************************************************************************
			vdxPlaybackOn    
*************************************************************************

  Opcode:
       XBIOS 407

  Syntax:
       int vdxPlaybackOn(void);

  Description:
          Driver should activate BES on this call.

  Binding:
          move.w  #407,-(sp)
          trap    #14
          addq.l  #2,sp
          
  Return: Driver should return 0.
          
*************************************************************************
			vdxPlaybackOff    
*************************************************************************

  Opcode:
       XBIOS 408

  Syntax:
       int vdxPlaybackOff(void);

  Description:
          Driver should deactivate BES on this call.

  Binding:
          move.w  #408,-(sp)
          trap    #14
          addq.l  #2,sp
          
  Return: Driver should return 0.
          
*************************************************************************
			vdxPlaybackFrameSelect    
*************************************************************************

  Opcode:
       XBIOS 409

  Syntax:
       int vdxPlaybackFrameSelect(unsigned frame);

  Description:
          Driver should prepare and activate corresponded frame.
          This function is used only for double and trilpe buffering and
          never used for single buffering playback.

  Binding:
          move.l  frame,-(sp)
          move.w  #409,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.

*************************************************************************
			vdxGetGrKeys    
*************************************************************************

  Opcode:
       XBIOS 410

  Syntax:
       int vdxGetGrKeys(vidix_grkey_t *grkey);

  Description:
          This interface should be tuned but introduced for overlapped playback
          and video effects (TYPE_FX)

  grkey structure:
       typedef struct vidix_grkey_s
       {
           vidix_ckey_t    ckey;      /* driver -> app: color key */
           vidix_vkey_t    vkey;      /* driver -> app: video key */
       #define KEYS_PUT    0
       #define KEYS_AND    1
       #define KEYS_OR     2
       #define KEYS_XOR    3
           unsigned    key_op;        /* driver -> app: keys operations */
       }vidix_grkey_t;

  Binding:
          pea.l   grkey
          move.w  #410,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.
  
*************************************************************************
			vdxSetGrKeys    
*************************************************************************

  Opcode:
       XBIOS 411

  Syntax:
       int vdxSetGrKeys(const vidix_grkey_t *grkey);

  Description:
          This interface should be tuned but introduced for overlapped playback
          and video effects (TYPE_FX).

  grkey structure:
       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;

  Binding:
          pea.l   grkey
          move.w  #411,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.
  
*************************************************************************
			vdxPlaybackGetEq    
*************************************************************************

  Opcode:
       XBIOS 412

  Syntax:
       int vdxPlaybackGetEq(vidix_video_eq_t * eq);

  Description:
          Function for get color correction.

  eq structure:
       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;             /* should contain capability of equalizer */
       /* 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;

  Binding:
          pea.l   eq
          move.w  #412,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.
  
*************************************************************************
			vdxPlaybackSetEq    
*************************************************************************

  Opcode:
       XBIOS 413

  Syntax:
       int vdxPlaybackSetEq(const vidix_video_eq_t * eq;

  Description:
          Function for set color correction.

  eq structure:
       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;             /* 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;

  Binding:
          pea.l   eq
          move.w  #413,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.

*************************************************************************
			vdxPlaybackGetDeint    
*************************************************************************

  Opcode:
       XBIOS 414

  Syntax:
       int vdxPlaybackGetDeint(vidix_deinterlace_t * info);

  Description:
          Function for get interlacing.

  info structure:
       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;               /* driver -> app */
           unsigned    deinterlace_pattern; /* driver -> app: deinterlace pattern if flag CFG_UNIQUE_INTERLACING is set */
       }vidix_deinterlace_t;

  Binding:
          pea.l   info
          move.w  #414,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.

*************************************************************************
			vdxPlaybackSetDeint    
*************************************************************************

  Opcode:
       XBIOS 415

  Syntax:
       int vdxPlaybackSetDeint(vidix_deinterlace_t * info);

  Description:
          Function for set interlacing.

  info structure:
       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;

  Binding:
          pea.l   info
          move.w  #415,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0.

*************************************************************************
			vdxPlaybackCopyFrame    
*************************************************************************

  Opcode:
       XBIOS 416

  Syntax:
       int vdxPlaybackCopyFrame(vidix_dma_t *dmai);

  Description:
          Function for copy frame with the DMA.

  dmai structure:
       typedef struct vidix_dma_s
       {
           void *src;               /* app -> driver: Virtual address of source */
           unsigned dest_offset;    /* app -> driver: Destination offset within of video memory */
           unsigned size;           /* app -> driver: Size of transaction */
       #define BM_DMA_NOSYNC      0
       #define BM_DMA_SYNC        1 /* wait previous dma transfer completion */
       #define BM_DMA_FIXED_BUFFS 2 /* app uses buffers witch are fixed in memory */
       #define BM_DMA_BLOCK       4 /* block until the transfer is complete */
           unsigned flags;          /* app -> driver */
           unsigned idx;            /* app -> driver: index of the src buffer */
           unsigned src_incr;       /* app -> driver: if src_incr & dest_incr are */
           unsigned dest_incr;      /*                different, else 0 */
           void *internal[VID_PLAY_MAXFRAMES];    /* for internal use by driver */
       }vidix_dma_t;

  Binding:
          pea.l   dmai
          move.w  #416,-(sp)
          trap    #14
          addq.l  #6,sp
          
  Return: Driver should return 0 else EINVAL, ERANGE, ENOMEM, E2BIG or 
          ENOSYS.

*************************************************************************
			vdxQueryDMAStatus    
*************************************************************************

  Opcode:
       XBIOS 417

  Syntax:
       int vdxQueryDMAStatus(void);

  Description:
          Function for get the status of the DMA after a vdxPlaybackCopyFrame().

  Binding:
          move.w  #417,-(sp)
          trap    #14
          addq.l  #2,sp
          
  Return: Driver should return 0 or 1 if busy, else ENOSYS.

*************************************************************************
begin:vcard
fn;quoted-printable:Pawe=C5=82 G=C3=B3ralski
n;quoted-printable;quoted-printable:G=C3=B3ralski;Pawe=C5=82
email;internet:pawel.goralski@nokturnal.pl
version:2.1
end:vcard