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