xref: /openbmc/linux/include/uapi/linux/dvb/video.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
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