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