1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
|
/*
* video.h
*
* Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
* & Ralph Metzler <ralph@convergence.de>
* for convergence integrated media GmbH
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#ifndef _UAPI_DVBVIDEO_H_
#define _UAPI_DVBVIDEO_H_
#include <linux/types.h>
#ifndef __KERNEL__
#include <stdint.h>
#include <time.h>
#endif
#define V4L2_MPEG_VIDC_EXTRADATA_MB_QUANTIZATION_BIT 0x00000001
#define V4L2_MPEG_VIDC_EXTRADATA_INTERLACE_VIDEO_BIT 0x00000002
#define V4L2_MPEG_VIDC_EXTRADATA_VC1_FRAMEDISP_BIT 0x00000004
#define V4L2_MPEG_VIDC_EXTRADATA_VC1_SEQDISP_BIT 0x00000008
#define V4L2_MPEG_VIDC_EXTRADATA_TIMESTAMP_BIT 0x00000010
#define V4L2_MPEG_VIDC_EXTRADATA_S3D_FRAME_PACKING_BIT 0x00000020
#define V4L2_MPEG_VIDC_EXTRADATA_FRAME_RATE_BIT 0x00000040
#define V4L2_MPEG_VIDC_EXTRADATA_PANSCAN_WINDOW_BIT 0x00000080
#define V4L2_MPEG_VIDC_EXTRADATA_RECOVERY_POINT_SEI_BIT 0x00000100
#define V4L2_MPEG_VIDC_EXTRADATA_CLOSED_CAPTION_UD_BIT 0x00000200
#define V4L2_MPEG_VIDC_EXTRADATA_AFD_UD_BIT 0x00000400
#define V4L2_MPEG_VIDC_EXTRADATA_MULTISLICE_INFO_BIT 0x00000800
#define V4L2_MPEG_VIDC_EXTRADATA_NUM_CONCEALED_MB_BIT 0x00001000
#define V4L2_MPEG_VIDC_EXTRADATA_METADATA_FILLER_BIT 0x00002000
#define V4L2_MPEG_VIDC_INDEX_EXTRADATA_INPUT_CROP_BIT 0x00004000
#define V4L2_MPEG_VIDC_INDEX_EXTRADATA_DIGITAL_ZOOM_BIT 0x00008000
#define V4L2_MPEG_VIDC_INDEX_EXTRADATA_ASPECT_RATIO_BIT 0x00010000
#define V4L2_MPEG_VIDC_EXTRADATA_MPEG2_SEQDISP_BIT 0x00020000
typedef enum {
VIDEO_FORMAT_4_3, /* Select 4:3 format */
VIDEO_FORMAT_16_9, /* Select 16:9 format. */
VIDEO_FORMAT_221_1 /* 2.21:1 */
} video_format_t;
typedef enum {
VIDEO_SYSTEM_PAL,
VIDEO_SYSTEM_NTSC,
VIDEO_SYSTEM_PALN,
VIDEO_SYSTEM_PALNc,
VIDEO_SYSTEM_PALM,
VIDEO_SYSTEM_NTSC60,
VIDEO_SYSTEM_PAL60,
VIDEO_SYSTEM_PALM60
} video_system_t;
typedef enum {
VIDEO_PAN_SCAN, /* use pan and scan format */
VIDEO_LETTER_BOX, /* use letterbox format */
VIDEO_CENTER_CUT_OUT /* use center cut out format */
} video_displayformat_t;
enum video_codec_t {
VIDEO_CODECTYPE_NONE,
VIDEO_CODECTYPE_MPEG2,
VIDEO_CODECTYPE_MPEG4,
VIDEO_CODECTYPE_H264,
VIDEO_CODECTYPE_VC1
};
enum video_out_format_t {
VIDEO_YUV_FORMAT_NV12,
VIDEO_YUV_FORMAT_TILE_4x2
};
enum video_playback_mode_t {
VIDEO_PLAYBACK_NORMAL = 0,
VIDEO_PLAYBACK_TRICKMODE_COARSE = 1,
VIDEO_PLAYBACK_TRICKMODE_SMOOTH = 2
};
typedef struct {
int w;
int h;
video_format_t aspect_ratio;
} video_size_t;
typedef enum {
VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
comes from the user through the write
system call */
} video_stream_source_t;
typedef enum {
VIDEO_STOPPED, /* Video is stopped */
VIDEO_PLAYING, /* Video is currently playing */
VIDEO_FREEZED /* Video is freezed */
} video_play_state_t;
/* Decoder commands */
#define VIDEO_CMD_PLAY (0)
#define VIDEO_CMD_STOP (1)
#define VIDEO_CMD_FREEZE (2)
#define VIDEO_CMD_CONTINUE (3)
#define VIDEO_CMD_SET_CODEC (4)
#define VIDEO_CMD_GET_CODEC (5)
#define VIDEO_CMD_SET_OUTPUT_FORMAT (6)
#define VIDEO_CMD_GET_OUTPUT_FORMAT (7)
#define VIDEO_CMD_GET_BUFFER_REQ (8)
#define VIDEO_CMD_SET_INPUT_BUFFERS (9)
#define VIDEO_CMD_SET_OUTPUT_BUFFERS (10)
#define VIDEO_CMD_READ_RAW_OUTPUT (11)
#define VIDEO_CMD_GET_PIC_RES (12)
#define VIDEO_CMD_FREE_INPUT_BUFFERS (13)
#define VIDEO_CMD_FREE_OUTPUT_BUFFERS (14)
#define VIDEO_CMD_GET_H264_MV_BUFFER (15)
#define VIDEO_CMD_SET_H264_MV_BUFFER (16)
#define VIDEO_CMD_FREE_H264_MV_BUFFER (17)
#define VIDEO_CMD_CLEAR_INPUT_BUFFER (18)
#define VIDEO_CMD_CLEAR_OUTPUT_BUFFER (19)
#define VIDEO_CMD_SET_BUFFER_COUNT (20)
#define VIDEO_CMD_SET_EXTRADATA_TYPES (21)
#define VIDEO_CMD_SET_EXTRADATA_BUFFER (22)
#define VIDEO_CMD_SET_PLAYBACK_MODE (23)
/* Flags for VIDEO_CMD_FREEZE */
#define VIDEO_CMD_FREEZE_TO_BLACK (1 << 0)
/* Flags for VIDEO_CMD_STOP */
#define VIDEO_CMD_STOP_TO_BLACK (1 << 0)
#define VIDEO_CMD_STOP_IMMEDIATELY (1 << 1)
/* Play input formats: */
/* The decoder has no special format requirements */
#define VIDEO_PLAY_FMT_NONE (0)
/* The decoder requires full GOPs */
#define VIDEO_PLAY_FMT_GOP (1)
/* Picture Resolution for Video Data */
struct video_pic_res {
unsigned int width;
unsigned int height;
unsigned int stride;
unsigned int scan_lines;
};
/* Video Buffer Properties */
struct video_buffer_prop {
unsigned int alignment;
unsigned int buf_poolid;
size_t buf_size;
};
/* Buffer Requirements from Video Decoder */
struct video_buffer_req {
unsigned int num_input_buffers; /* Number of Input Buffers */
unsigned int num_output_buffers; /* Number of Output Buffers */
struct video_buffer_prop input_buf_prop; /* Input Buffer Properties */
struct video_buffer_prop output_buf_prop; /* Output Buffer Prop */
size_t extradata_size;
};
enum scan_format {
INTERLACE_FRAME_PROGRESSIVE,
INTERLACE_INTERLEAVE_FRAME_TOP_FIELD_FIRST,
INTERLACE_INTERLEAVE_FRAME_BOTTOM_FIELD_FIRST
};
/* Video Data Buffer Structure for Input and Output */
struct video_data_buffer {
void __user *bufferaddr; /* Pointer to Buffer */
size_t buffer_len; /* Length of Buffer */
int ion_fd; /* file Descriptor */
size_t offset;
size_t mmaped_size;
void *client_data;
void *ip_buffer_tag;
__u64 pts;
enum scan_format interlaced_format;
};
struct extradata_buffer {
void __user *bufferaddr;
size_t buffer_len;
int ion_fd;
size_t offset;
};
struct video_h264_mv {
size_t size;
int count;
int ion_fd;
int offset;
};
struct video_mv_buff_size {
int width;
int height;
int size;
int alignment;
};
/* The structure must be zeroed before use by the application
This ensures it can be extended safely in the future. */
struct video_command {
__u32 cmd;
__u32 flags;
union {
struct {
__u64 pts;
} stop;
struct {
/* 0 or 1000 specifies normal speed,
1 specifies forward single stepping,
-1 specifies backward single stepping,
>1: playback at speed/1000 of the normal speed,
<-1: reverse playback at (-speed/1000) of
the normal speed. */
__s32 speed;
__u32 format;
} play;
union {
enum video_codec_t codec; /* Video Codec Type */
enum video_out_format_t format; /* YUV Format */
struct video_pic_res frame_res; /* Frame Resolution */
/* Buffer Requirements for Video Decoder */
struct video_buffer_req buf_req;
struct video_data_buffer buffer; /* Buffer Details */
struct video_mv_buff_size mv_buffer_req;
struct video_h264_mv mv_buffer_prop;
unsigned int extradata_type;
struct extradata_buffer extradata_buffer;
enum video_playback_mode_t video_mode;
};
struct {
__u32 data[16];
} raw;
};
};
/* FIELD_UNKNOWN can be used if the hardware does not know whether
the Vsync is for an odd, even or progressive (i.e. non-interlaced)
field. */
#define VIDEO_VSYNC_FIELD_UNKNOWN (0)
#define VIDEO_VSYNC_FIELD_ODD (1)
#define VIDEO_VSYNC_FIELD_EVEN (2)
#define VIDEO_VSYNC_FIELD_PROGRESSIVE (3)
struct video_event {
__s32 type;
#define VIDEO_EVENT_SIZE_CHANGED (1)
#define VIDEO_EVENT_FRAME_RATE_CHANGED (2)
#define VIDEO_EVENT_DECODER_STOPPED (3)
#define VIDEO_EVENT_VSYNC (4)
#define VIDEO_EVENT_DECODER_PLAYING (5)
#define VIDEO_EVENT_DECODER_FREEZED (6)
#define VIDEO_EVENT_DECODER_RESUMED (7)
#define VIDEO_EVENT_INPUT_BUFFER_DONE (8)
#define VIDEO_EVENT_SEQ_HDR_FOUND (9)
#define VIDEO_EVENT_OUTPUT_BUFFER_DONE (10)
#define VIDEO_EVENT_OUTPUT_FLUSH_DONE (11)
#define VIDEO_EVENT_INPUT_FLUSH_DONE (12)
#define VIDEO_EVENT_INPUT_FLUSHED (13)
#define VIDEO_EVENT_OUTPUT_FLUSHED (14)
unsigned int status;
#define VIDEO_STATUS_SUCESS 0
#define VIDEO_STATUS_BITSTREAM_ERROR 1
#define VIDEO_STATUS_FAILED 2
#define VIDEO_STATUS_NORESOURCE 3
#define VIDEO_STATUS_INVALID_CMD 4
#define VIDEO_STATUS_INVALID_PARAM 5
#define VIDEO_STATUS_INVALID_STATE 6
#define VIDEO_STATUS_BUSY 7
#define VIDEO_STATUS_INVALID_HANDLE 8
#define VIDEO_STATUS_NO_SUPPORT 9
__kernel_time_t timestamp;
union {
video_size_t size;
unsigned int frame_rate; /* in frames per 1000sec */
unsigned char vsync_field; /* unknown/odd/even/progressive */
struct video_data_buffer buffer; /* Output Buffer Details */
} u;
};
struct video_status {
int video_blank; /* blank video on freeze? */
video_play_state_t play_state; /* current state of playback */
video_stream_source_t stream_source;/* current source (demux/memory) */
video_format_t video_format; /* current aspect ratio of stream*/
video_displayformat_t display_format;/* selected cropping mode */
};
struct video_still_picture {
char __user *iFrame; /* pointer to a single iframe in memory */
__s32 size;
};
typedef
struct video_highlight {
int active; /* 1=show highlight, 0=hide highlight */
__u8 contrast1; /* 7- 4 Pattern pixel contrast */
/* 3- 0 Background pixel contrast */
__u8 contrast2; /* 7- 4 Emphasis pixel-2 contrast */
/* 3- 0 Emphasis pixel-1 contrast */
__u8 color1; /* 7- 4 Pattern pixel color */
/* 3- 0 Background pixel color */
__u8 color2; /* 7- 4 Emphasis pixel-2 color */
/* 3- 0 Emphasis pixel-1 color */
__u32 ypos; /* 23-22 auto action mode */
/* 21-12 start y */
/* 9- 0 end y */
__u32 xpos; /* 23-22 button color number */
/* 21-12 start x */
/* 9- 0 end x */
} video_highlight_t;
typedef struct video_spu {
int active;
int stream_id;
} video_spu_t;
typedef struct video_spu_palette { /* SPU Palette information */
int length;
__u8 __user *palette;
} video_spu_palette_t;
typedef struct video_navi_pack {
int length; /* 0 ... 1024 */
__u8 data[1024];
} video_navi_pack_t;
typedef __u16 video_attributes_t;
/* bits: descr. */
/* 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
/* 13-12 TV system (0=525/60, 1=625/50) */
/* 11-10 Aspect ratio (0=4:3, 3=16:9) */
/* 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */
/* 7 line 21-1 data present in GOP (1=yes, 0=no) */
/* 6 line 21-2 data present in GOP (1=yes, 0=no) */
/* 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */
/* 2 source letterboxed (1=yes, 0=no) */
/* 0 film/camera mode (0=camera, 1=film (625/50 only)) */
/* bit definitions for capabilities: */
/* can the hardware decode MPEG1 and/or MPEG2? */
#define VIDEO_CAP_MPEG1 1
#define VIDEO_CAP_MPEG2 2
/* can you send a system and/or program stream to video device?
(you still have to open the video and the audio device but only
send the stream to the video device) */
#define VIDEO_CAP_SYS 4
#define VIDEO_CAP_PROG 8
/* can the driver also handle SPU, NAVI and CSS encoded data?
(CSS API is not present yet) */
#define VIDEO_CAP_SPU 16
#define VIDEO_CAP_NAVI 32
#define VIDEO_CAP_CSS 64
#define VIDEO_STOP _IO('o', 21)
#define VIDEO_PLAY _IO('o', 22)
#define VIDEO_FREEZE _IO('o', 23)
#define VIDEO_CONTINUE _IO('o', 24)
#define VIDEO_SELECT_SOURCE _IO('o', 25)
#define VIDEO_SET_BLANK _IO('o', 26)
#define VIDEO_GET_STATUS _IOR('o', 27, struct video_status)
#define VIDEO_GET_EVENT _IOR('o', 28, struct video_event)
#define VIDEO_SET_DISPLAY_FORMAT _IO('o', 29)
#define VIDEO_STILLPICTURE _IOW('o', 30, struct video_still_picture)
#define VIDEO_FAST_FORWARD _IO('o', 31)
#define VIDEO_SLOWMOTION _IO('o', 32)
#define VIDEO_GET_CAPABILITIES _IOR('o', 33, unsigned int)
#define VIDEO_CLEAR_BUFFER _IO('o', 34)
#define VIDEO_SET_ID _IO('o', 35)
#define VIDEO_SET_STREAMTYPE _IO('o', 36)
#define VIDEO_SET_FORMAT _IO('o', 37)
#define VIDEO_SET_SYSTEM _IO('o', 38)
#define VIDEO_SET_HIGHLIGHT _IOW('o', 39, video_highlight_t)
#define VIDEO_SET_SPU _IOW('o', 50, video_spu_t)
#define VIDEO_SET_SPU_PALETTE _IOW('o', 51, video_spu_palette_t)
#define VIDEO_GET_NAVI _IOR('o', 52, video_navi_pack_t)
#define VIDEO_SET_ATTRIBUTES _IO('o', 53)
#define VIDEO_GET_SIZE _IOR('o', 55, video_size_t)
#define VIDEO_GET_FRAME_RATE _IOR('o', 56, unsigned int)
/**
* VIDEO_GET_PTS
*
* Read the 33 bit presentation time stamp as defined
* in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
*
* The PTS should belong to the currently played
* frame if possible, but may also be a value close to it
* like the PTS of the last decoded frame or the last PTS
* extracted by the PES parser.
*/
#define VIDEO_GET_PTS _IOR('o', 57, __u64)
/* Read the number of displayed frames since the decoder was started */
#define VIDEO_GET_FRAME_COUNT _IOR('o', 58, __u64)
#define VIDEO_COMMAND _IOWR('o', 59, struct video_command)
#define VIDEO_TRY_COMMAND _IOWR('o', 60, struct video_command)
#endif /* _UAPI_DVBVIDEO_H_ */
|