xref: /OK3568_Linux_fs/kernel/include/uapi/linux/dvb/video.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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