diff options
Diffstat (limited to 'src/video_out/video_out_syncfb.h')
-rw-r--r-- | src/video_out/video_out_syncfb.h | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/src/video_out/video_out_syncfb.h b/src/video_out/video_out_syncfb.h new file mode 100644 index 000000000..96503ca89 --- /dev/null +++ b/src/video_out/video_out_syncfb.h @@ -0,0 +1,240 @@ +#ifndef __LINUX_SYNCFB_H +#define __LINUX_SYNCFB_H + +#ifdef __KERNEL__ +#include <linux/config.h> +#include <linux/version.h> +#include <linux/types.h> +#include <linux/kernel.h> +#include <linux/sched.h> +#include <linux/mm.h> +#include <linux/string.h> +#include <linux/errno.h> +#include <linux/malloc.h> +#include <linux/pci.h> +#include <linux/init.h> +#include <linux/videodev.h> + +#ifdef CONFIG_MTRR +#include <asm/mtrr.h> +#endif + +#include <asm/uaccess.h> +#include <asm/system.h> +#include <asm/io.h> + +#define TRUE 1 +#define FALSE 0 + +#define SFB_STATUS_FREE 0 +#define SFB_STATUS_OFFS 1 +#define SFB_STATUS_WAIT 2 +#define SFB_STATUS_LIVE 3 + +#endif /* KERNEL */ + + +#ifndef AARONS_TYPES +typedef unsigned long uint_32; +typedef unsigned char uint_8; +#endif + +#define SYNCFB_MAJOR 178 + +#define SYNCFB_ERROR_NO_ERROR 0; +#define SYNCFB_ERROR_NO_BUFFER_AVAILABLE 1; +#define SYNCFB_ERROR_PALETTE_NOT_SUPPORTED 2; +#define SYNCFB_ERROR_NOT_ENOUGH_MEMORY 3; + + + +#ifndef __LINUX_VIDEODEV_H +#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */ +#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */ +#define VIDEO_PALETTE_RGB565 3 /* 565 16 bit RGB */ +#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */ +#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */ +#define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */ +#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */ +#define VIDEO_PALETTE_YUYV 8 +#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */ +#define VIDEO_PALETTE_YUV420 10 +#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */ +#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */ +#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */ +#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */ +#define VIDEO_PALETTE_YUV420P 15 /* YUV 4:2:0 Planar */ +#define VIDEO_PALETTE_YUV410P 16 /* YUV 4:1:0 Planar */ +#define VIDEO_PALETTE_PLANAR 13 /* start of planar entries */ +#define VIDEO_PALETTE_COMPONENT 7 /* start of component entries */ +#endif + + +#define VIDEO_PALETTE_YUV422P3 13 /* YUV 4:2:2 Planar (3 Plane, same as YUV422P) */ +#define VIDEO_PALETTE_YUV422P2 17 /* YUV 4:2:2 Planar (2 Plane) */ + +#define VIDEO_PALETTE_YUV411P3 14 /* YUV 4:1:1 Planar (3 Plane, same as YUV411P) */ +#define VIDEO_PALETTE_YUV411P2 18 /* YUV 4:1:1 Planar (2 Plane) */ + +#define VIDEO_PALETTE_YUV420P3 15 /* YUV 4:2:0 Planar (3 Plane, same as YUV420P) */ +#define VIDEO_PALETTE_YUV420P2 19 /* YUV 4:2:0 Planar (2 Plane) */ + +#define VIDEO_PALETTE_YUV410P3 16 /* YUV 4:1:0 Planar (3 Plane, same as YUV410P) */ +#define VIDEO_PALETTE_YUV410P2 20 /* YUV 4:1:0 Planar (2 Plane) */ + + + +#define SYNCFB_FEATURE_SCALE_H 1 +#define SYNCFB_FEATURE_SCALE_V 2 +#define SYNCFB_FEATURE_SCALE 3 +#define SYNCFB_FEATURE_CROP 4 +#define SYNCFB_FEATURE_OFFSET 8 +#define SYNCFB_FEATURE_DEINTERLACE 16 +#define SYNCFB_FEATURE_PROCAMP 32 +#define SYNCFB_FEATURE_TRANSITIONS 64 +#define SYNCFB_FEATURE_COLKEY 128 +#define SYNCFB_FEATURE_MIRROR_H 256 +#define SYNCFB_FEATURE_MIRROR_V 512 +#define SYNCFB_FEATURE_BLOCK_REQUEST 1024 +#define SYNCFB_FEATURE_FREQDIV2 2048 + + +typedef struct syncfb_config_s +{ + uint_32 syncfb_mode; /* bitfield: turn on/off the available features */ + uint_32 error_code; /* RO: returns 0 on successful config calls, error code otherwise */ + + uint_32 fb_screen_size; /* WO, size in bytes of video memory reserved for fbdev */ + uint_32 fb_screen_width; /* WO, visible screen width in pixel */ + uint_32 fb_screen_height; /* WO, visible screen height in pixel */ + + uint_32 buffers; /* RO, number of available buffers */ + uint_32 buffer_size; /* RO, filled in by syncfb */ + + uint_32 default_repeat; /* default repeat time for a single frame, can be overridden in syncfb_buffer_info_t */ + + uint_32 src_width; /* source image width in pixel */ + uint_32 src_height; /* source image height in pixel */ + uint_32 src_palette; /* set palette mode, see videodev.h for palettes */ + uint_32 src_pitch; /* RO: filled in by ioctl: actual line length in pixel */ + + uint_32 image_xorg; /* x position of the image on the screen */ + uint_32 image_yorg; /* y position of the image on the screen */ + + /* if syncfb has FEATURE_SCALE */ + uint_32 scale_filters; /* 0: no filtering, 255: all filters on */ + uint_32 image_width; /* onscreen image width */ + uint_32 image_height; /* onscreen image height */ + + /* if syncfb has FEATURE_CROP */ + uint_32 src_crop_left; /* */ + uint_32 src_crop_right; /* */ + uint_32 src_crop_top; /* */ + uint_32 src_crop_bot; /* */ + + /* if syncfb has FEATURE_OFFSET */ + uint_32 image_offset_left; /* */ + uint_32 image_offset_right; /* */ + uint_32 image_offset_top; /* */ + uint_32 image_offset_bot; /* */ + + /* if syncfb has FEATURE_COLKEY */ + uint_8 colkey_red; + uint_8 colkey_green; + uint_8 colkey_blue; + +} syncfb_config_t; + + +/* + picture parameters, +*/ +typedef struct syncfb_param_s +{ + /* the idea is to enable smooth transitions between eg. image sizes (not yet implemented) */ + /* if syncfb has FEATURE_TRANSITIONS */ + uint_32 transition_time; + + /* if syncfb has FEATURE_PROCAMP */ + uint_32 contrast; /* 0: least contrast, 1000: normal contrast, */ + uint_32 brightness; + uint_32 color; /* for syncfb_matrox: color=0: b/w else: full color */ + + /* if syncfb has FEATURE_SCALE , currently only supported in CONFIG call */ + uint_8 scale_filters; /* 0: no filtering, 255: all filters on */ + uint_32 image_xorg; /* x position of the image on the screen */ + uint_32 image_yorg; /* y position of the image on the screen */ + uint_32 image_width; /* onscreen image width */ + uint_32 image_height; /* onscreen image height */ + +} syncfb_param_t; + + + +typedef struct syncfb_status_info_s +{ + uint_32 field_cnt; /* basically all vbi's since the start of syncfb */ + uint_32 frame_cnt; /* number of frames comitted & output */ + + uint_32 hold_field_cnt; /* number of repeated fields becaus no new data was available */ + uint_32 skip_field_cnt; /* skipped fields when fifo was about to fill up */ + + uint_32 request_frames; /* number of request_buffer calls */ + uint_32 commit_frames; /* number of commit_buffer calls */ + + uint_32 failed_requests; /* number of calls to request_buffer that failed */ + + uint_32 buffers_waiting; + uint_32 buffers_free; + +} syncfb_status_info_t; + + + + +typedef struct syncfb_capability_s +{ + char name[64]; /* A name for the syncfb ... */ + uint_32 palettes; /* supported palettes - see videodev.h for palettes, test the corresponding bit here */ + uint_32 features; /* supported features - see SYNCFB_FEATURE_* */ + uint_32 memory_size; /* total size of mappable video memory */ + +} syncfb_capability_t; + + + +typedef struct syncfb_buffer_info_s +{ + int id; /* buffer id: a return value of -1 means no buffer available */ + uint_32 repeat; /* the buffer will be shown <repeat> times */ + uint_32 offset; /* buffer offset from start of video memory */ + uint_32 offset_p2; /* yuv plane 2 buffer offset from start of video memory */ + uint_32 offset_p3; /* yuv plane 3 buffer offset from start of video memory */ + +} syncfb_buffer_info_t; + + + + + + + +/* get syncfb capabilities */ +#define SYNCFB_GET_CAPS _IOR('J', 1, syncfb_config_t) + +#define SYNCFB_GET_CONFIG _IOR('J', 2, syncfb_config_t) +#define SYNCFB_SET_CONFIG _IOR('J', 3, syncfb_config_t) +#define SYNCFB_ON _IO ('J', 4) +#define SYNCFB_OFF _IO ('J', 5) +#define SYNCFB_REQUEST_BUFFER _IOR ('J', 6, syncfb_buffer_info_t) +#define SYNCFB_COMMIT_BUFFER _IOR ('J', 7, syncfb_buffer_info_t) +#define SYNCFB_STATUS _IOR ('J', 8, syncfb_status_info_t) +#define SYNCFB_VBI _IO ('J', 9) /* simulate interrupt - debugging only */ +#define SYNCFB_SET_PARAMS _IOR('J', 10, syncfb_param_t) +#define SYNCFB_GET_PARAMS _IOR('J', 11, syncfb_param_t) + + + + +#endif /* __LINUX_SYNCFB_H */ + |