1*793e52d4SMauro Carvalho Chehab.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2*793e52d4SMauro Carvalho Chehab
3*793e52d4SMauro Carvalho Chehab.. _video_types:
4*793e52d4SMauro Carvalho Chehab
5*793e52d4SMauro Carvalho Chehab****************
6*793e52d4SMauro Carvalho ChehabVideo Data Types
7*793e52d4SMauro Carvalho Chehab****************
8*793e52d4SMauro Carvalho Chehab
9*793e52d4SMauro Carvalho Chehab
10*793e52d4SMauro Carvalho Chehab.. _video-format-t:
11*793e52d4SMauro Carvalho Chehab
12*793e52d4SMauro Carvalho Chehabvideo_format_t
13*793e52d4SMauro Carvalho Chehab==============
14*793e52d4SMauro Carvalho Chehab
15*793e52d4SMauro Carvalho ChehabThe ``video_format_t`` data type defined by
16*793e52d4SMauro Carvalho Chehab
17*793e52d4SMauro Carvalho Chehab
18*793e52d4SMauro Carvalho Chehab.. code-block:: c
19*793e52d4SMauro Carvalho Chehab
20*793e52d4SMauro Carvalho Chehab    typedef enum {
21*793e52d4SMauro Carvalho Chehab	VIDEO_FORMAT_4_3,     /* Select 4:3 format */
22*793e52d4SMauro Carvalho Chehab	VIDEO_FORMAT_16_9,    /* Select 16:9 format. */
23*793e52d4SMauro Carvalho Chehab	VIDEO_FORMAT_221_1    /* 2.21:1 */
24*793e52d4SMauro Carvalho Chehab    } video_format_t;
25*793e52d4SMauro Carvalho Chehab
26*793e52d4SMauro Carvalho Chehabis used in the VIDEO_SET_FORMAT function (??) to tell the driver which
27*793e52d4SMauro Carvalho Chehabaspect ratio the output hardware (e.g. TV) has. It is also used in the
28*793e52d4SMauro Carvalho Chehabdata structures video_status (??) returned by VIDEO_GET_STATUS (??)
29*793e52d4SMauro Carvalho Chehaband video_event (??) returned by VIDEO_GET_EVENT (??) which report
30*793e52d4SMauro Carvalho Chehababout the display format of the current video stream.
31*793e52d4SMauro Carvalho Chehab
32*793e52d4SMauro Carvalho Chehab
33*793e52d4SMauro Carvalho Chehab.. _video-displayformat-t:
34*793e52d4SMauro Carvalho Chehab
35*793e52d4SMauro Carvalho Chehabvideo_displayformat_t
36*793e52d4SMauro Carvalho Chehab=====================
37*793e52d4SMauro Carvalho Chehab
38*793e52d4SMauro Carvalho ChehabIn case the display format of the video stream and of the display
39*793e52d4SMauro Carvalho Chehabhardware differ the application has to specify how to handle the
40*793e52d4SMauro Carvalho Chehabcropping of the picture. This can be done using the
41*793e52d4SMauro Carvalho ChehabVIDEO_SET_DISPLAY_FORMAT call (??) which accepts
42*793e52d4SMauro Carvalho Chehab
43*793e52d4SMauro Carvalho Chehab
44*793e52d4SMauro Carvalho Chehab.. code-block:: c
45*793e52d4SMauro Carvalho Chehab
46*793e52d4SMauro Carvalho Chehab    typedef enum {
47*793e52d4SMauro Carvalho Chehab	VIDEO_PAN_SCAN,       /* use pan and scan format */
48*793e52d4SMauro Carvalho Chehab	VIDEO_LETTER_BOX,     /* use letterbox format */
49*793e52d4SMauro Carvalho Chehab	VIDEO_CENTER_CUT_OUT  /* use center cut out format */
50*793e52d4SMauro Carvalho Chehab    } video_displayformat_t;
51*793e52d4SMauro Carvalho Chehab
52*793e52d4SMauro Carvalho Chehabas argument.
53*793e52d4SMauro Carvalho Chehab
54*793e52d4SMauro Carvalho Chehab
55*793e52d4SMauro Carvalho Chehab.. _video-stream-source-t:
56*793e52d4SMauro Carvalho Chehab
57*793e52d4SMauro Carvalho Chehabvideo_stream_source_t
58*793e52d4SMauro Carvalho Chehab=====================
59*793e52d4SMauro Carvalho Chehab
60*793e52d4SMauro Carvalho ChehabThe video stream source is set through the VIDEO_SELECT_SOURCE call
61*793e52d4SMauro Carvalho Chehaband can take the following values, depending on whether we are replaying
62*793e52d4SMauro Carvalho Chehabfrom an internal (demuxer) or external (user write) source.
63*793e52d4SMauro Carvalho Chehab
64*793e52d4SMauro Carvalho Chehab
65*793e52d4SMauro Carvalho Chehab.. code-block:: c
66*793e52d4SMauro Carvalho Chehab
67*793e52d4SMauro Carvalho Chehab    typedef enum {
68*793e52d4SMauro Carvalho Chehab	VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
69*793e52d4SMauro Carvalho Chehab	VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
70*793e52d4SMauro Carvalho Chehab		       comes from the user through the write
71*793e52d4SMauro Carvalho Chehab		       system call */
72*793e52d4SMauro Carvalho Chehab    } video_stream_source_t;
73*793e52d4SMauro Carvalho Chehab
74*793e52d4SMauro Carvalho ChehabVIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the
75*793e52d4SMauro Carvalho Chehabfrontend or the DVR device) as the source of the video stream. If
76*793e52d4SMauro Carvalho ChehabVIDEO_SOURCE_MEMORY is selected the stream comes from the application
77*793e52d4SMauro Carvalho Chehabthrough the **write()** system call.
78*793e52d4SMauro Carvalho Chehab
79*793e52d4SMauro Carvalho Chehab
80*793e52d4SMauro Carvalho Chehab.. _video-play-state-t:
81*793e52d4SMauro Carvalho Chehab
82*793e52d4SMauro Carvalho Chehabvideo_play_state_t
83*793e52d4SMauro Carvalho Chehab==================
84*793e52d4SMauro Carvalho Chehab
85*793e52d4SMauro Carvalho ChehabThe following values can be returned by the VIDEO_GET_STATUS call
86*793e52d4SMauro Carvalho Chehabrepresenting the state of video playback.
87*793e52d4SMauro Carvalho Chehab
88*793e52d4SMauro Carvalho Chehab
89*793e52d4SMauro Carvalho Chehab.. code-block:: c
90*793e52d4SMauro Carvalho Chehab
91*793e52d4SMauro Carvalho Chehab    typedef enum {
92*793e52d4SMauro Carvalho Chehab	VIDEO_STOPPED, /* Video is stopped */
93*793e52d4SMauro Carvalho Chehab	VIDEO_PLAYING, /* Video is currently playing */
94*793e52d4SMauro Carvalho Chehab	VIDEO_FREEZED  /* Video is freezed */
95*793e52d4SMauro Carvalho Chehab    } video_play_state_t;
96*793e52d4SMauro Carvalho Chehab
97*793e52d4SMauro Carvalho Chehab
98*793e52d4SMauro Carvalho Chehab.. c:type:: video_command
99*793e52d4SMauro Carvalho Chehab
100*793e52d4SMauro Carvalho Chehabstruct video_command
101*793e52d4SMauro Carvalho Chehab====================
102*793e52d4SMauro Carvalho Chehab
103*793e52d4SMauro Carvalho ChehabThe structure must be zeroed before use by the application This ensures
104*793e52d4SMauro Carvalho Chehabit can be extended safely in the future.
105*793e52d4SMauro Carvalho Chehab
106*793e52d4SMauro Carvalho Chehab
107*793e52d4SMauro Carvalho Chehab.. code-block:: c
108*793e52d4SMauro Carvalho Chehab
109*793e52d4SMauro Carvalho Chehab    struct video_command {
110*793e52d4SMauro Carvalho Chehab	__u32 cmd;
111*793e52d4SMauro Carvalho Chehab	__u32 flags;
112*793e52d4SMauro Carvalho Chehab	union {
113*793e52d4SMauro Carvalho Chehab	    struct {
114*793e52d4SMauro Carvalho Chehab		__u64 pts;
115*793e52d4SMauro Carvalho Chehab	    } stop;
116*793e52d4SMauro Carvalho Chehab
117*793e52d4SMauro Carvalho Chehab	    struct {
118*793e52d4SMauro Carvalho Chehab		/* 0 or 1000 specifies normal speed,
119*793e52d4SMauro Carvalho Chehab		   1 specifies forward single stepping,
120*793e52d4SMauro Carvalho Chehab		   -1 specifies backward single stepping,
121*793e52d4SMauro Carvalho Chehab		   >>1: playback at speed/1000 of the normal speed,
122*793e52d4SMauro Carvalho Chehab		   <-1: reverse playback at (-speed/1000) of the normal speed. */
123*793e52d4SMauro Carvalho Chehab		__s32 speed;
124*793e52d4SMauro Carvalho Chehab		__u32 format;
125*793e52d4SMauro Carvalho Chehab	    } play;
126*793e52d4SMauro Carvalho Chehab
127*793e52d4SMauro Carvalho Chehab	    struct {
128*793e52d4SMauro Carvalho Chehab		__u32 data[16];
129*793e52d4SMauro Carvalho Chehab	    } raw;
130*793e52d4SMauro Carvalho Chehab	};
131*793e52d4SMauro Carvalho Chehab    };
132*793e52d4SMauro Carvalho Chehab
133*793e52d4SMauro Carvalho Chehab
134*793e52d4SMauro Carvalho Chehab.. _video-size-t:
135*793e52d4SMauro Carvalho Chehab
136*793e52d4SMauro Carvalho Chehabvideo_size_t
137*793e52d4SMauro Carvalho Chehab============
138*793e52d4SMauro Carvalho Chehab
139*793e52d4SMauro Carvalho Chehab
140*793e52d4SMauro Carvalho Chehab.. code-block:: c
141*793e52d4SMauro Carvalho Chehab
142*793e52d4SMauro Carvalho Chehab    typedef struct {
143*793e52d4SMauro Carvalho Chehab	int w;
144*793e52d4SMauro Carvalho Chehab	int h;
145*793e52d4SMauro Carvalho Chehab	video_format_t aspect_ratio;
146*793e52d4SMauro Carvalho Chehab    } video_size_t;
147*793e52d4SMauro Carvalho Chehab
148*793e52d4SMauro Carvalho Chehab
149*793e52d4SMauro Carvalho Chehab.. c:type:: video_event
150*793e52d4SMauro Carvalho Chehab
151*793e52d4SMauro Carvalho Chehabstruct video_event
152*793e52d4SMauro Carvalho Chehab==================
153*793e52d4SMauro Carvalho Chehab
154*793e52d4SMauro Carvalho ChehabThe following is the structure of a video event as it is returned by the
155*793e52d4SMauro Carvalho ChehabVIDEO_GET_EVENT call.
156*793e52d4SMauro Carvalho Chehab
157*793e52d4SMauro Carvalho Chehab
158*793e52d4SMauro Carvalho Chehab.. code-block:: c
159*793e52d4SMauro Carvalho Chehab
160*793e52d4SMauro Carvalho Chehab    struct video_event {
161*793e52d4SMauro Carvalho Chehab	__s32 type;
162*793e52d4SMauro Carvalho Chehab    #define VIDEO_EVENT_SIZE_CHANGED    1
163*793e52d4SMauro Carvalho Chehab    #define VIDEO_EVENT_FRAME_RATE_CHANGED  2
164*793e52d4SMauro Carvalho Chehab    #define VIDEO_EVENT_DECODER_STOPPED     3
165*793e52d4SMauro Carvalho Chehab    #define VIDEO_EVENT_VSYNC       4
166*793e52d4SMauro Carvalho Chehab	long timestamp;
167*793e52d4SMauro Carvalho Chehab	union {
168*793e52d4SMauro Carvalho Chehab	    video_size_t size;
169*793e52d4SMauro Carvalho Chehab	    unsigned int frame_rate;    /* in frames per 1000sec */
170*793e52d4SMauro Carvalho Chehab	    unsigned char vsync_field;  /* unknown/odd/even/progressive */
171*793e52d4SMauro Carvalho Chehab	} u;
172*793e52d4SMauro Carvalho Chehab    };
173*793e52d4SMauro Carvalho Chehab
174*793e52d4SMauro Carvalho Chehab
175*793e52d4SMauro Carvalho Chehab.. c:type:: video_status
176*793e52d4SMauro Carvalho Chehab
177*793e52d4SMauro Carvalho Chehabstruct video_status
178*793e52d4SMauro Carvalho Chehab===================
179*793e52d4SMauro Carvalho Chehab
180*793e52d4SMauro Carvalho ChehabThe VIDEO_GET_STATUS call returns the following structure informing
181*793e52d4SMauro Carvalho Chehababout various states of the playback operation.
182*793e52d4SMauro Carvalho Chehab
183*793e52d4SMauro Carvalho Chehab
184*793e52d4SMauro Carvalho Chehab.. code-block:: c
185*793e52d4SMauro Carvalho Chehab
186*793e52d4SMauro Carvalho Chehab    struct video_status {
187*793e52d4SMauro Carvalho Chehab	int                   video_blank;   /* blank video on freeze? */
188*793e52d4SMauro Carvalho Chehab	video_play_state_t    play_state;    /* current state of playback */
189*793e52d4SMauro Carvalho Chehab	video_stream_source_t stream_source; /* current source (demux/memory) */
190*793e52d4SMauro Carvalho Chehab	video_format_t        video_format;  /* current aspect ratio of stream */
191*793e52d4SMauro Carvalho Chehab	video_displayformat_t display_format;/* selected cropping mode */
192*793e52d4SMauro Carvalho Chehab    };
193*793e52d4SMauro Carvalho Chehab
194*793e52d4SMauro Carvalho ChehabIf video_blank is set video will be blanked out if the channel is
195*793e52d4SMauro Carvalho Chehabchanged or if playback is stopped. Otherwise, the last picture will be
196*793e52d4SMauro Carvalho Chehabdisplayed. play_state indicates if the video is currently frozen,
197*793e52d4SMauro Carvalho Chehabstopped, or being played back. The stream_source corresponds to the
198*793e52d4SMauro Carvalho Chehabselected source for the video stream. It can come either from the
199*793e52d4SMauro Carvalho Chehabdemultiplexer or from memory. The video_format indicates the aspect
200*793e52d4SMauro Carvalho Chehabratio (one of 4:3 or 16:9) of the currently played video stream.
201*793e52d4SMauro Carvalho ChehabFinally, display_format corresponds to the selected cropping mode in
202*793e52d4SMauro Carvalho Chehabcase the source video format is not the same as the format of the output
203*793e52d4SMauro Carvalho Chehabdevice.
204*793e52d4SMauro Carvalho Chehab
205*793e52d4SMauro Carvalho Chehab
206*793e52d4SMauro Carvalho Chehab.. c:type:: video_still_picture
207*793e52d4SMauro Carvalho Chehab
208*793e52d4SMauro Carvalho Chehabstruct video_still_picture
209*793e52d4SMauro Carvalho Chehab==========================
210*793e52d4SMauro Carvalho Chehab
211*793e52d4SMauro Carvalho ChehabAn I-frame displayed via the VIDEO_STILLPICTURE call is passed on
212*793e52d4SMauro Carvalho Chehabwithin the following structure.
213*793e52d4SMauro Carvalho Chehab
214*793e52d4SMauro Carvalho Chehab
215*793e52d4SMauro Carvalho Chehab.. code-block:: c
216*793e52d4SMauro Carvalho Chehab
217*793e52d4SMauro Carvalho Chehab    /* pointer to and size of a single iframe in memory */
218*793e52d4SMauro Carvalho Chehab    struct video_still_picture {
219*793e52d4SMauro Carvalho Chehab	char *iFrame;        /* pointer to a single iframe in memory */
220*793e52d4SMauro Carvalho Chehab	int32_t size;
221*793e52d4SMauro Carvalho Chehab    };
222*793e52d4SMauro Carvalho Chehab
223*793e52d4SMauro Carvalho Chehab
224*793e52d4SMauro Carvalho Chehab.. _video_caps:
225*793e52d4SMauro Carvalho Chehab
226*793e52d4SMauro Carvalho Chehabvideo capabilities
227*793e52d4SMauro Carvalho Chehab==================
228*793e52d4SMauro Carvalho Chehab
229*793e52d4SMauro Carvalho ChehabA call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the
230*793e52d4SMauro Carvalho Chehabfollowing bits set according to the hardwares capabilities.
231*793e52d4SMauro Carvalho Chehab
232*793e52d4SMauro Carvalho Chehab
233*793e52d4SMauro Carvalho Chehab.. code-block:: c
234*793e52d4SMauro Carvalho Chehab
235*793e52d4SMauro Carvalho Chehab     /* bit definitions for capabilities: */
236*793e52d4SMauro Carvalho Chehab     /* can the hardware decode MPEG1 and/or MPEG2? */
237*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_MPEG1   1
238*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_MPEG2   2
239*793e52d4SMauro Carvalho Chehab     /* can you send a system and/or program stream to video device?
240*793e52d4SMauro Carvalho Chehab	(you still have to open the video and the audio device but only
241*793e52d4SMauro Carvalho Chehab	 send the stream to the video device) */
242*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_SYS     4
243*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_PROG    8
244*793e52d4SMauro Carvalho Chehab     /* can the driver also handle SPU, NAVI and CSS encoded data?
245*793e52d4SMauro Carvalho Chehab	(CSS API is not present yet) */
246*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_SPU    16
247*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_NAVI   32
248*793e52d4SMauro Carvalho Chehab     #define VIDEO_CAP_CSS    64
249