linux/include/uapi/linux/dvb/video.h
<<
>>
Prefs
   1/*
   2 * video.h
   3 *
   4 * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
   5 *                  & Ralph  Metzler <ralph@convergence.de>
   6 *                    for convergence integrated media GmbH
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU Lesser General Public License
  10 * as published by the Free Software Foundation; either version 2.1
  11 * of the License, or (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU Lesser General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  21 *
  22 */
  23
  24#ifndef _UAPI_DVBVIDEO_H_
  25#define _UAPI_DVBVIDEO_H_
  26
  27#include <linux/types.h>
  28#ifndef __KERNEL__
  29#include <stdint.h>
  30#include <time.h>
  31#endif
  32
  33typedef enum {
  34        VIDEO_FORMAT_4_3,     /* Select 4:3 format */
  35        VIDEO_FORMAT_16_9,    /* Select 16:9 format. */
  36        VIDEO_FORMAT_221_1    /* 2.21:1 */
  37} video_format_t;
  38
  39
  40typedef enum {
  41         VIDEO_SYSTEM_PAL,
  42         VIDEO_SYSTEM_NTSC,
  43         VIDEO_SYSTEM_PALN,
  44         VIDEO_SYSTEM_PALNc,
  45         VIDEO_SYSTEM_PALM,
  46         VIDEO_SYSTEM_NTSC60,
  47         VIDEO_SYSTEM_PAL60,
  48         VIDEO_SYSTEM_PALM60
  49} video_system_t;
  50
  51
  52typedef enum {
  53        VIDEO_PAN_SCAN,       /* use pan and scan format */
  54        VIDEO_LETTER_BOX,     /* use letterbox format */
  55        VIDEO_CENTER_CUT_OUT  /* use center cut out format */
  56} video_displayformat_t;
  57
  58typedef struct {
  59        int w;
  60        int h;
  61        video_format_t aspect_ratio;
  62} video_size_t;
  63
  64typedef enum {
  65        VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
  66        VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
  67                               comes from the user through the write
  68                               system call */
  69} video_stream_source_t;
  70
  71
  72typedef enum {
  73        VIDEO_STOPPED, /* Video is stopped */
  74        VIDEO_PLAYING, /* Video is currently playing */
  75        VIDEO_FREEZED  /* Video is freezed */
  76} video_play_state_t;
  77
  78
  79/* Decoder commands */
  80#define VIDEO_CMD_PLAY        (0)
  81#define VIDEO_CMD_STOP        (1)
  82#define VIDEO_CMD_FREEZE      (2)
  83#define VIDEO_CMD_CONTINUE    (3)
  84
  85/* Flags for VIDEO_CMD_FREEZE */
  86#define VIDEO_CMD_FREEZE_TO_BLACK       (1 << 0)
  87
  88/* Flags for VIDEO_CMD_STOP */
  89#define VIDEO_CMD_STOP_TO_BLACK         (1 << 0)
  90#define VIDEO_CMD_STOP_IMMEDIATELY      (1 << 1)
  91
  92/* Play input formats: */
  93/* The decoder has no special format requirements */
  94#define VIDEO_PLAY_FMT_NONE         (0)
  95/* The decoder requires full GOPs */
  96#define VIDEO_PLAY_FMT_GOP          (1)
  97
  98/* The structure must be zeroed before use by the application
  99   This ensures it can be extended safely in the future. */
 100struct video_command {
 101        __u32 cmd;
 102        __u32 flags;
 103        union {
 104                struct {
 105                        __u64 pts;
 106                } stop;
 107
 108                struct {
 109                        /* 0 or 1000 specifies normal speed,
 110                           1 specifies forward single stepping,
 111                           -1 specifies backward single stepping,
 112                           >1: playback at speed/1000 of the normal speed,
 113                           <-1: reverse playback at (-speed/1000) of the normal speed. */
 114                        __s32 speed;
 115                        __u32 format;
 116                } play;
 117
 118                struct {
 119                        __u32 data[16];
 120                } raw;
 121        };
 122};
 123
 124/* FIELD_UNKNOWN can be used if the hardware does not know whether
 125   the Vsync is for an odd, even or progressive (i.e. non-interlaced)
 126   field. */
 127#define VIDEO_VSYNC_FIELD_UNKNOWN       (0)
 128#define VIDEO_VSYNC_FIELD_ODD           (1)
 129#define VIDEO_VSYNC_FIELD_EVEN          (2)
 130#define VIDEO_VSYNC_FIELD_PROGRESSIVE   (3)
 131
 132struct video_event {
 133        __s32 type;
 134#define VIDEO_EVENT_SIZE_CHANGED        1
 135#define VIDEO_EVENT_FRAME_RATE_CHANGED  2
 136#define VIDEO_EVENT_DECODER_STOPPED     3
 137#define VIDEO_EVENT_VSYNC               4
 138        __kernel_time_t timestamp;
 139        union {
 140                video_size_t size;
 141                unsigned int frame_rate;        /* in frames per 1000sec */
 142                unsigned char vsync_field;      /* unknown/odd/even/progressive */
 143        } u;
 144};
 145
 146
 147struct video_status {
 148        int                   video_blank;   /* blank video on freeze? */
 149        video_play_state_t    play_state;    /* current state of playback */
 150        video_stream_source_t stream_source; /* current source (demux/memory) */
 151        video_format_t        video_format;  /* current aspect ratio of stream*/
 152        video_displayformat_t display_format;/* selected cropping mode */
 153};
 154
 155
 156struct video_still_picture {
 157        char __user *iFrame;        /* pointer to a single iframe in memory */
 158        __s32 size;
 159};
 160
 161
 162typedef
 163struct video_highlight {
 164        int     active;      /*    1=show highlight, 0=hide highlight */
 165        __u8    contrast1;   /*    7- 4  Pattern pixel contrast */
 166                             /*    3- 0  Background pixel contrast */
 167        __u8    contrast2;   /*    7- 4  Emphasis pixel-2 contrast */
 168                             /*    3- 0  Emphasis pixel-1 contrast */
 169        __u8    color1;      /*    7- 4  Pattern pixel color */
 170                             /*    3- 0  Background pixel color */
 171        __u8    color2;      /*    7- 4  Emphasis pixel-2 color */
 172                             /*    3- 0  Emphasis pixel-1 color */
 173        __u32    ypos;       /*   23-22  auto action mode */
 174                             /*   21-12  start y */
 175                             /*    9- 0  end y */
 176        __u32    xpos;       /*   23-22  button color number */
 177                             /*   21-12  start x */
 178                             /*    9- 0  end x */
 179} video_highlight_t;
 180
 181
 182typedef struct video_spu {
 183        int active;
 184        int stream_id;
 185} video_spu_t;
 186
 187
 188typedef struct video_spu_palette {      /* SPU Palette information */
 189        int length;
 190        __u8 __user *palette;
 191} video_spu_palette_t;
 192
 193
 194typedef struct video_navi_pack {
 195        int length;          /* 0 ... 1024 */
 196        __u8 data[1024];
 197} video_navi_pack_t;
 198
 199
 200typedef __u16 video_attributes_t;
 201/*   bits: descr. */
 202/*   15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
 203/*   13-12 TV system (0=525/60, 1=625/50) */
 204/*   11-10 Aspect ratio (0=4:3, 3=16:9) */
 205/*    9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */
 206/*    7    line 21-1 data present in GOP (1=yes, 0=no) */
 207/*    6    line 21-2 data present in GOP (1=yes, 0=no) */
 208/*    5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */
 209/*    2    source letterboxed (1=yes, 0=no) */
 210/*    0    film/camera mode (0=camera, 1=film (625/50 only)) */
 211
 212
 213/* bit definitions for capabilities: */
 214/* can the hardware decode MPEG1 and/or MPEG2? */
 215#define VIDEO_CAP_MPEG1   1
 216#define VIDEO_CAP_MPEG2   2
 217/* can you send a system and/or program stream to video device?
 218   (you still have to open the video and the audio device but only
 219    send the stream to the video device) */
 220#define VIDEO_CAP_SYS     4
 221#define VIDEO_CAP_PROG    8
 222/* can the driver also handle SPU, NAVI and CSS encoded data?
 223   (CSS API is not present yet) */
 224#define VIDEO_CAP_SPU    16
 225#define VIDEO_CAP_NAVI   32
 226#define VIDEO_CAP_CSS    64
 227
 228
 229#define VIDEO_STOP                 _IO('o', 21)
 230#define VIDEO_PLAY                 _IO('o', 22)
 231#define VIDEO_FREEZE               _IO('o', 23)
 232#define VIDEO_CONTINUE             _IO('o', 24)
 233#define VIDEO_SELECT_SOURCE        _IO('o', 25)
 234#define VIDEO_SET_BLANK            _IO('o', 26)
 235#define VIDEO_GET_STATUS           _IOR('o', 27, struct video_status)
 236#define VIDEO_GET_EVENT            _IOR('o', 28, struct video_event)
 237#define VIDEO_SET_DISPLAY_FORMAT   _IO('o', 29)
 238#define VIDEO_STILLPICTURE         _IOW('o', 30, struct video_still_picture)
 239#define VIDEO_FAST_FORWARD         _IO('o', 31)
 240#define VIDEO_SLOWMOTION           _IO('o', 32)
 241#define VIDEO_GET_CAPABILITIES     _IOR('o', 33, unsigned int)
 242#define VIDEO_CLEAR_BUFFER         _IO('o',  34)
 243#define VIDEO_SET_ID               _IO('o', 35)
 244#define VIDEO_SET_STREAMTYPE       _IO('o', 36)
 245#define VIDEO_SET_FORMAT           _IO('o', 37)
 246#define VIDEO_SET_SYSTEM           _IO('o', 38)
 247#define VIDEO_SET_HIGHLIGHT        _IOW('o', 39, video_highlight_t)
 248#define VIDEO_SET_SPU              _IOW('o', 50, video_spu_t)
 249#define VIDEO_SET_SPU_PALETTE      _IOW('o', 51, video_spu_palette_t)
 250#define VIDEO_GET_NAVI             _IOR('o', 52, video_navi_pack_t)
 251#define VIDEO_SET_ATTRIBUTES       _IO('o', 53)
 252#define VIDEO_GET_SIZE             _IOR('o', 55, video_size_t)
 253#define VIDEO_GET_FRAME_RATE       _IOR('o', 56, unsigned int)
 254
 255/**
 256 * VIDEO_GET_PTS
 257 *
 258 * Read the 33 bit presentation time stamp as defined
 259 * in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
 260 *
 261 * The PTS should belong to the currently played
 262 * frame if possible, but may also be a value close to it
 263 * like the PTS of the last decoded frame or the last PTS
 264 * extracted by the PES parser.
 265 */
 266#define VIDEO_GET_PTS              _IOR('o', 57, __u64)
 267
 268/* Read the number of displayed frames since the decoder was started */
 269#define VIDEO_GET_FRAME_COUNT      _IOR('o', 58, __u64)
 270
 271#define VIDEO_COMMAND              _IOWR('o', 59, struct video_command)
 272#define VIDEO_TRY_COMMAND          _IOWR('o', 60, struct video_command)
 273
 274#endif /* _UAPI_DVBVIDEO_H_ */
 275