FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavdevice
avdevice.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef AVDEVICE_AVDEVICE_H
20
#define AVDEVICE_AVDEVICE_H
21
22
#include "
version.h
"
23
24
/**
25
* @file
26
* @ingroup lavd
27
* Main libavdevice API header
28
*/
29
30
/**
31
* @defgroup lavd Special devices muxing/demuxing library
32
* @{
33
* Libavdevice is a complementary library to @ref libavf "libavformat". It
34
* provides various "special" platform-specific muxers and demuxers, e.g. for
35
* grabbing devices, audio capture and playback etc. As a consequence, the
36
* (de)muxers in libavdevice are of the AVFMT_NOFILE type (they use their own
37
* I/O functions). The filename passed to avformat_open_input() often does not
38
* refer to an actually existing file, but has some special device-specific
39
* meaning - e.g. for x11grab it is the display name.
40
*
41
* To use libavdevice, simply call avdevice_register_all() to register all
42
* compiled muxers and demuxers. They all use standard libavformat API.
43
* @}
44
*/
45
46
#include "
libavutil/log.h
"
47
#include "
libavutil/opt.h
"
48
#include "
libavutil/dict.h
"
49
#include "
libavformat/avformat.h
"
50
51
/**
52
* Return the LIBAVDEVICE_VERSION_INT constant.
53
*/
54
unsigned
avdevice_version
(
void
);
55
56
/**
57
* Return the libavdevice build-time configuration.
58
*/
59
const
char
*
avdevice_configuration
(
void
);
60
61
/**
62
* Return the libavdevice license.
63
*/
64
const
char
*
avdevice_license
(
void
);
65
66
/**
67
* Initialize libavdevice and register all the input and output devices.
68
* @warning This function is not thread safe.
69
*/
70
void
avdevice_register_all
(
void
);
71
72
/**
73
* Audio input devices iterator.
74
*
75
* If d is NULL, returns the first registered input audio/video device,
76
* if d is non-NULL, returns the next registered input audio/video device after d
77
* or NULL if d is the last one.
78
*/
79
AVInputFormat
*
av_input_audio_device_next
(
AVInputFormat
*d);
80
81
/**
82
* Video input devices iterator.
83
*
84
* If d is NULL, returns the first registered input audio/video device,
85
* if d is non-NULL, returns the next registered input audio/video device after d
86
* or NULL if d is the last one.
87
*/
88
AVInputFormat
*
av_input_video_device_next
(
AVInputFormat
*d);
89
90
/**
91
* Audio output devices iterator.
92
*
93
* If d is NULL, returns the first registered output audio/video device,
94
* if d is non-NULL, returns the next registered output audio/video device after d
95
* or NULL if d is the last one.
96
*/
97
AVOutputFormat
*
av_output_audio_device_next
(
AVOutputFormat
*d);
98
99
/**
100
* Video output devices iterator.
101
*
102
* If d is NULL, returns the first registered output audio/video device,
103
* if d is non-NULL, returns the next registered output audio/video device after d
104
* or NULL if d is the last one.
105
*/
106
AVOutputFormat
*
av_output_video_device_next
(
AVOutputFormat
*d);
107
108
typedef
struct
AVDeviceRect
{
109
int
x
;
/**< x coordinate of top left corner */
110
int
y
;
/**< y coordinate of top left corner */
111
int
width
;
/**< width */
112
int
height
;
/**< height */
113
}
AVDeviceRect
;
114
115
/**
116
* Message types used by avdevice_app_to_dev_control_message().
117
*/
118
enum
AVAppToDevMessageType
{
119
/**
120
* Dummy message.
121
*/
122
AV_APP_TO_DEV_NONE
=
MKBETAG
(
'N'
,
'O'
,
'N'
,
'E'
),
123
124
/**
125
* Window size change message.
126
*
127
* Message is sent to the device every time the application changes the size
128
* of the window device renders to.
129
* Message should also be sent right after window is created.
130
*
131
* data: AVDeviceRect: new window size.
132
*/
133
AV_APP_TO_DEV_WINDOW_SIZE
=
MKBETAG
(
'G'
,
'E'
,
'O'
,
'M'
),
134
135
/**
136
* Repaint request message.
137
*
138
* Message is sent to the device when window has to be repainted.
139
*
140
* data: AVDeviceRect: area required to be repainted.
141
* NULL: whole area is required to be repainted.
142
*/
143
AV_APP_TO_DEV_WINDOW_REPAINT
=
MKBETAG
(
'R'
,
'E'
,
'P'
,
'A'
),
144
145
/**
146
* Request pause/play.
147
*
148
* Application requests pause/unpause playback.
149
* Mostly usable with devices that have internal buffer.
150
* By default devices are not paused.
151
*
152
* data: NULL
153
*/
154
AV_APP_TO_DEV_PAUSE
=
MKBETAG
(
'P'
,
'A'
,
'U'
,
' '
),
155
AV_APP_TO_DEV_PLAY
=
MKBETAG
(
'P'
,
'L'
,
'A'
,
'Y'
),
156
AV_APP_TO_DEV_TOGGLE_PAUSE
=
MKBETAG
(
'P'
,
'A'
,
'U'
,
'T'
),
157
158
/**
159
* Volume control message.
160
*
161
* Set volume level. It may be device-dependent if volume
162
* is changed per stream or system wide. Per stream volume
163
* change is expected when possible.
164
*
165
* data: double: new volume with range of 0.0 - 1.0.
166
*/
167
AV_APP_TO_DEV_SET_VOLUME
=
MKBETAG
(
'S'
,
'V'
,
'O'
,
'L'
),
168
169
/**
170
* Mute control messages.
171
*
172
* Change mute state. It may be device-dependent if mute status
173
* is changed per stream or system wide. Per stream mute status
174
* change is expected when possible.
175
*
176
* data: NULL.
177
*/
178
AV_APP_TO_DEV_MUTE
=
MKBETAG
(
' '
,
'M'
,
'U'
,
'T'
),
179
AV_APP_TO_DEV_UNMUTE
=
MKBETAG
(
'U'
,
'M'
,
'U'
,
'T'
),
180
AV_APP_TO_DEV_TOGGLE_MUTE
=
MKBETAG
(
'T'
,
'M'
,
'U'
,
'T'
),
181
182
/**
183
* Get volume/mute messages.
184
*
185
* Force the device to send AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED or
186
* AV_DEV_TO_APP_MUTE_STATE_CHANGED command respectively.
187
*
188
* data: NULL.
189
*/
190
AV_APP_TO_DEV_GET_VOLUME
=
MKBETAG
(
'G'
,
'V'
,
'O'
,
'L'
),
191
AV_APP_TO_DEV_GET_MUTE
=
MKBETAG
(
'G'
,
'M'
,
'U'
,
'T'
),
192
};
193
194
/**
195
* Message types used by avdevice_dev_to_app_control_message().
196
*/
197
enum
AVDevToAppMessageType
{
198
/**
199
* Dummy message.
200
*/
201
AV_DEV_TO_APP_NONE
=
MKBETAG
(
'N'
,
'O'
,
'N'
,
'E'
),
202
203
/**
204
* Create window buffer message.
205
*
206
* Device requests to create a window buffer. Exact meaning is device-
207
* and application-dependent. Message is sent before rendering first
208
* frame and all one-shot initializations should be done here.
209
* Application is allowed to ignore preferred window buffer size.
210
*
211
* @note: Application is obligated to inform about window buffer size
212
* with AV_APP_TO_DEV_WINDOW_SIZE message.
213
*
214
* data: AVDeviceRect: preferred size of the window buffer.
215
* NULL: no preferred size of the window buffer.
216
*/
217
AV_DEV_TO_APP_CREATE_WINDOW_BUFFER
=
MKBETAG
(
'B'
,
'C'
,
'R'
,
'E'
),
218
219
/**
220
* Prepare window buffer message.
221
*
222
* Device requests to prepare a window buffer for rendering.
223
* Exact meaning is device- and application-dependent.
224
* Message is sent before rendering of each frame.
225
*
226
* data: NULL.
227
*/
228
AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER
=
MKBETAG
(
'B'
,
'P'
,
'R'
,
'E'
),
229
230
/**
231
* Display window buffer message.
232
*
233
* Device requests to display a window buffer.
234
* Message is sent when new frame is ready to be displayed.
235
* Usually buffers need to be swapped in handler of this message.
236
*
237
* data: NULL.
238
*/
239
AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER
=
MKBETAG
(
'B'
,
'D'
,
'I'
,
'S'
),
240
241
/**
242
* Destroy window buffer message.
243
*
244
* Device requests to destroy a window buffer.
245
* Message is sent when device is about to be destroyed and window
246
* buffer is not required anymore.
247
*
248
* data: NULL.
249
*/
250
AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER
=
MKBETAG
(
'B'
,
'D'
,
'E'
,
'S'
),
251
252
/**
253
* Buffer fullness status messages.
254
*
255
* Device signals buffer overflow/underflow.
256
*
257
* data: NULL.
258
*/
259
AV_DEV_TO_APP_BUFFER_OVERFLOW
=
MKBETAG
(
'B'
,
'O'
,
'F'
,
'L'
),
260
AV_DEV_TO_APP_BUFFER_UNDERFLOW
=
MKBETAG
(
'B'
,
'U'
,
'F'
,
'L'
),
261
262
/**
263
* Buffer readable/writable.
264
*
265
* Device informs that buffer is readable/writable.
266
* When possible, device informs how many bytes can be read/write.
267
*
268
* @warning Device may not inform when number of bytes than can be read/write changes.
269
*
270
* data: int64_t: amount of bytes available to read/write.
271
* NULL: amount of bytes available to read/write is not known.
272
*/
273
AV_DEV_TO_APP_BUFFER_READABLE
=
MKBETAG
(
'B'
,
'R'
,
'D'
,
' '
),
274
AV_DEV_TO_APP_BUFFER_WRITABLE
=
MKBETAG
(
'B'
,
'W'
,
'R'
,
' '
),
275
276
/**
277
* Mute state change message.
278
*
279
* Device informs that mute state has changed.
280
*
281
* data: int: 0 for not muted state, non-zero for muted state.
282
*/
283
AV_DEV_TO_APP_MUTE_STATE_CHANGED
=
MKBETAG
(
'C'
,
'M'
,
'U'
,
'T'
),
284
285
/**
286
* Volume level change message.
287
*
288
* Device informs that volume level has changed.
289
*
290
* data: double: new volume with range of 0.0 - 1.0.
291
*/
292
AV_DEV_TO_APP_VOLUME_LEVEL_CHANGED
=
MKBETAG
(
'C'
,
'V'
,
'O'
,
'L'
),
293
};
294
295
/**
296
* Send control message from application to device.
297
*
298
* @param s device context.
299
* @param type message type.
300
* @param data message data. Exact type depends on message type.
301
* @param data_size size of message data.
302
* @return >= 0 on success, negative on error.
303
* AVERROR(ENOSYS) when device doesn't implement handler of the message.
304
*/
305
int
avdevice_app_to_dev_control_message
(
struct
AVFormatContext
*
s
,
306
enum
AVAppToDevMessageType
type
,
307
void
*
data
,
size_t
data_size);
308
309
/**
310
* Send control message from device to application.
311
*
312
* @param s device context.
313
* @param type message type.
314
* @param data message data. Can be NULL.
315
* @param data_size size of message data.
316
* @return >= 0 on success, negative on error.
317
* AVERROR(ENOSYS) when application doesn't implement handler of the message.
318
*/
319
int
avdevice_dev_to_app_control_message
(
struct
AVFormatContext
*
s
,
320
enum
AVDevToAppMessageType
type
,
321
void
*
data
,
size_t
data_size);
322
323
/**
324
* Following API allows user to probe device capabilities (supported codecs,
325
* pixel formats, sample formats, resolutions, channel counts, etc).
326
* It is build on top op AVOption API.
327
* Queried capabilities allows to set up converters of video or audio
328
* parameters that fit to the device.
329
*
330
* List of capabilities that can be queried:
331
* - Capabilities valid for both audio and video devices:
332
* - codec: supported audio/video codecs.
333
* type: AV_OPT_TYPE_INT (AVCodecID value)
334
* - Capabilities valid for audio devices:
335
* - sample_format: supported sample formats.
336
* type: AV_OPT_TYPE_INT (AVSampleFormat value)
337
* - sample_rate: supported sample rates.
338
* type: AV_OPT_TYPE_INT
339
* - channels: supported number of channels.
340
* type: AV_OPT_TYPE_INT
341
* - channel_layout: supported channel layouts.
342
* type: AV_OPT_TYPE_INT64
343
* - Capabilities valid for video devices:
344
* - pixel_format: supported pixel formats.
345
* type: AV_OPT_TYPE_INT (AVPixelFormat value)
346
* - window_size: supported window sizes (describes size of the window size presented to the user).
347
* type: AV_OPT_TYPE_IMAGE_SIZE
348
* - frame_size: supported frame sizes (describes size of provided video frames).
349
* type: AV_OPT_TYPE_IMAGE_SIZE
350
* - fps: supported fps values
351
* type: AV_OPT_TYPE_RATIONAL
352
*
353
* Value of the capability may be set by user using av_opt_set() function
354
* and AVDeviceCapabilitiesQuery object. Following queries will
355
* limit results to the values matching already set capabilities.
356
* For example, setting a codec may impact number of formats or fps values
357
* returned during next query. Setting invalid value may limit results to zero.
358
*
359
* Example of the usage basing on opengl output device:
360
*
361
* @code
362
* AVFormatContext *oc = NULL;
363
* AVDeviceCapabilitiesQuery *caps = NULL;
364
* AVOptionRanges *ranges;
365
* int ret;
366
*
367
* if ((ret = avformat_alloc_output_context2(&oc, NULL, "opengl", NULL)) < 0)
368
* goto fail;
369
* if (avdevice_capabilities_create(&caps, oc, NULL) < 0)
370
* goto fail;
371
*
372
* //query codecs
373
* if (av_opt_query_ranges(&ranges, caps, "codec", AV_OPT_MULTI_COMPONENT_RANGE)) < 0)
374
* goto fail;
375
* //pick codec here and set it
376
* av_opt_set(caps, "codec", AV_CODEC_ID_RAWVIDEO, 0);
377
*
378
* //query format
379
* if (av_opt_query_ranges(&ranges, caps, "pixel_format", AV_OPT_MULTI_COMPONENT_RANGE)) < 0)
380
* goto fail;
381
* //pick format here and set it
382
* av_opt_set(caps, "pixel_format", AV_PIX_FMT_YUV420P, 0);
383
*
384
* //query and set more capabilities
385
*
386
* fail:
387
* //clean up code
388
* avdevice_capabilities_free(&query, oc);
389
* avformat_free_context(oc);
390
* @endcode
391
*/
392
393
/**
394
* Structure describes device capabilities.
395
*
396
* It is used by devices in conjunction with av_device_capabilities AVOption table
397
* to implement capabilities probing API based on AVOption API. Should not be used directly.
398
*/
399
typedef
struct
AVDeviceCapabilitiesQuery
{
400
const
AVClass
*
av_class
;
401
AVFormatContext
*
device_context
;
402
enum
AVCodecID
codec
;
403
enum
AVSampleFormat
sample_format
;
404
enum
AVPixelFormat
pixel_format
;
405
int
sample_rate
;
406
int
channels
;
407
int64_t
channel_layout
;
408
int
window_width
;
409
int
window_height
;
410
int
frame_width
;
411
int
frame_height
;
412
AVRational
fps
;
413
}
AVDeviceCapabilitiesQuery
;
414
415
/**
416
* AVOption table used by devices to implement device capabilities API. Should not be used by a user.
417
*/
418
extern
const
AVOption
av_device_capabilities
[];
419
420
/**
421
* Initialize capabilities probing API based on AVOption API.
422
*
423
* avdevice_capabilities_free() must be called when query capabilities API is
424
* not used anymore.
425
*
426
* @param[out] caps Device capabilities data. Pointer to a NULL pointer must be passed.
427
* @param s Context of the device.
428
* @param device_options An AVDictionary filled with device-private options.
429
* On return this parameter will be destroyed and replaced with a dict
430
* containing options that were not found. May be NULL.
431
* The same options must be passed later to avformat_write_header() for output
432
* devices or avformat_open_input() for input devices, or at any other place
433
* that affects device-private options.
434
*
435
* @return >= 0 on success, negative otherwise.
436
*/
437
int
avdevice_capabilities_create
(
AVDeviceCapabilitiesQuery
**caps,
AVFormatContext
*
s
,
438
AVDictionary
**device_options);
439
440
/**
441
* Free resources created by avdevice_capabilities_create()
442
*
443
* @param caps Device capabilities data to be freed.
444
* @param s Context of the device.
445
*/
446
void
avdevice_capabilities_free
(
AVDeviceCapabilitiesQuery
**caps,
AVFormatContext
*
s
);
447
448
/**
449
* Structure describes basic parameters of the device.
450
*/
451
typedef
struct
AVDeviceInfo
{
452
char
*
device_name
;
/**< device name, format depends on device */
453
char
*
device_description
;
/**< human friendly name */
454
}
AVDeviceInfo
;
455
456
/**
457
* List of devices.
458
*/
459
typedef
struct
AVDeviceInfoList
{
460
AVDeviceInfo
**
devices
;
/**< list of autodetected devices */
461
int
nb_devices
;
/**< number of autodetected devices */
462
int
default_device
;
/**< index of default device or -1 if no default */
463
}
AVDeviceInfoList
;
464
465
/**
466
* List devices.
467
*
468
* Returns available device names and their parameters.
469
*
470
* @note: Some devices may accept system-dependent device names that cannot be
471
* autodetected. The list returned by this function cannot be assumed to
472
* be always completed.
473
*
474
* @param s device context.
475
* @param[out] device_list list of autodetected devices.
476
* @return count of autodetected devices, negative on error.
477
*/
478
int
avdevice_list_devices
(
struct
AVFormatContext
*
s
,
AVDeviceInfoList
**device_list);
479
480
/**
481
* Convenient function to free result of avdevice_list_devices().
482
*
483
* @param devices device list to be freed.
484
*/
485
void
avdevice_free_list_devices
(
AVDeviceInfoList
**device_list);
486
487
/**
488
* List devices.
489
*
490
* Returns available device names and their parameters.
491
* These are convinient wrappers for avdevice_list_devices().
492
* Device context is allocated and deallocated internally.
493
*
494
* @param device device format. May be NULL if device name is set.
495
* @param device_name device name. May be NULL if device format is set.
496
* @param device_options An AVDictionary filled with device-private options. May be NULL.
497
* The same options must be passed later to avformat_write_header() for output
498
* devices or avformat_open_input() for input devices, or at any other place
499
* that affects device-private options.
500
* @param[out] device_list list of autodetected devices
501
* @return count of autodetected devices, negative on error.
502
* @note device argument takes precedence over device_name when both are set.
503
*/
504
int
avdevice_list_input_sources
(
struct
AVInputFormat
*device,
const
char
*device_name,
505
AVDictionary
*device_options,
AVDeviceInfoList
**device_list);
506
int
avdevice_list_output_sinks
(
struct
AVOutputFormat
*device,
const
char
*device_name,
507
AVDictionary
*device_options,
AVDeviceInfoList
**device_list);
508
509
#endif
/* AVDEVICE_AVDEVICE_H */
Generated on Sun Mar 8 2015 02:35:04 for FFmpeg by
1.8.2