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
ffmpeg.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 FFMPEG_H
20
#define FFMPEG_H
21
22
#include "config.h"
23
24
#include <stdint.h>
25
#include <stdio.h>
26
#include <signal.h>
27
28
#if HAVE_PTHREADS
29
#include <pthread.h>
30
#endif
31
32
#include "
cmdutils.h
"
33
34
#include "
libavformat/avformat.h
"
35
#include "
libavformat/avio.h
"
36
37
#include "
libavcodec/avcodec.h
"
38
39
#include "
libavfilter/avfilter.h
"
40
41
#include "
libavutil/avutil.h
"
42
#include "
libavutil/dict.h
"
43
#include "
libavutil/eval.h
"
44
#include "
libavutil/fifo.h
"
45
#include "
libavutil/pixfmt.h
"
46
#include "
libavutil/rational.h
"
47
#include "
libavutil/threadmessage.h
"
48
49
#include "
libswresample/swresample.h
"
50
51
#define VSYNC_AUTO -1
52
#define VSYNC_PASSTHROUGH 0
53
#define VSYNC_CFR 1
54
#define VSYNC_VFR 2
55
#define VSYNC_VSCFR 0xfe
56
#define VSYNC_DROP 0xff
57
58
#define MAX_STREAMS 1024
/* arbitrary sanity check value */
59
60
enum
HWAccelID
{
61
HWACCEL_NONE
= 0,
62
HWACCEL_AUTO
,
63
HWACCEL_VDPAU
,
64
HWACCEL_DXVA2
,
65
HWACCEL_VDA
,
66
};
67
68
typedef
struct
HWAccel
{
69
const
char
*
name
;
70
int (*
init
)(
AVCodecContext
*
s
);
71
enum
HWAccelID
id
;
72
enum
AVPixelFormat
pix_fmt
;
73
}
HWAccel
;
74
75
/* select an input stream for an output stream */
76
typedef
struct
StreamMap
{
77
int
disabled
;
/* 1 is this mapping is disabled by a negative map */
78
int
file_index
;
79
int
stream_index
;
80
int
sync_file_index
;
81
int
sync_stream_index
;
82
char
*
linklabel
;
/* name of an output link, for mapping lavfi outputs */
83
}
StreamMap
;
84
85
typedef
struct
{
86
int
file_idx,
stream_idx
, channel_idx;
// input
87
int
ofile_idx,
ostream_idx
;
// output
88
}
AudioChannelMap
;
89
90
typedef
struct
OptionsContext
{
91
OptionGroup
*
g
;
92
93
/* input/output options */
94
int64_t
start_time
;
95
const
char
*
format
;
96
97
SpecifierOpt
*
codec_names
;
98
int
nb_codec_names
;
99
SpecifierOpt
*
audio_channels
;
100
int
nb_audio_channels
;
101
SpecifierOpt
*
audio_sample_rate
;
102
int
nb_audio_sample_rate
;
103
SpecifierOpt
*
frame_rates
;
104
int
nb_frame_rates
;
105
SpecifierOpt
*
frame_sizes
;
106
int
nb_frame_sizes
;
107
SpecifierOpt
*
frame_pix_fmts
;
108
int
nb_frame_pix_fmts
;
109
110
/* input options */
111
int64_t
input_ts_offset
;
112
int
rate_emu
;
113
int
accurate_seek
;
114
115
SpecifierOpt
*
ts_scale
;
116
int
nb_ts_scale
;
117
SpecifierOpt
*
dump_attachment
;
118
int
nb_dump_attachment
;
119
SpecifierOpt
*
hwaccels
;
120
int
nb_hwaccels
;
121
SpecifierOpt
*
hwaccel_devices
;
122
int
nb_hwaccel_devices
;
123
124
/* output options */
125
StreamMap
*
stream_maps
;
126
int
nb_stream_maps
;
127
AudioChannelMap
*
audio_channel_maps
;
/* one info entry per -map_channel */
128
int
nb_audio_channel_maps
;
/* number of (valid) -map_channel settings */
129
int
metadata_global_manual
;
130
int
metadata_streams_manual
;
131
int
metadata_chapters_manual
;
132
const
char
**
attachments
;
133
int
nb_attachments
;
134
135
int
chapters_input_file
;
136
137
int64_t
recording_time
;
138
int64_t
stop_time
;
139
uint64_t
limit_filesize
;
140
float
mux_preload
;
141
float
mux_max_delay
;
142
int
shortest
;
143
144
int
video_disable
;
145
int
audio_disable
;
146
int
subtitle_disable
;
147
int
data_disable
;
148
149
/* indexed by output file stream index */
150
int
*
streamid_map
;
151
int
nb_streamid_map
;
152
153
SpecifierOpt
*
metadata
;
154
int
nb_metadata
;
155
SpecifierOpt
*
max_frames
;
156
int
nb_max_frames
;
157
SpecifierOpt
*
bitstream_filters
;
158
int
nb_bitstream_filters
;
159
SpecifierOpt
*
codec_tags
;
160
int
nb_codec_tags
;
161
SpecifierOpt
*
sample_fmts
;
162
int
nb_sample_fmts
;
163
SpecifierOpt
*
qscale
;
164
int
nb_qscale
;
165
SpecifierOpt
*
forced_key_frames
;
166
int
nb_forced_key_frames
;
167
SpecifierOpt
*
force_fps
;
168
int
nb_force_fps
;
169
SpecifierOpt
*
frame_aspect_ratios
;
170
int
nb_frame_aspect_ratios
;
171
SpecifierOpt
*
rc_overrides
;
172
int
nb_rc_overrides
;
173
SpecifierOpt
*
intra_matrices
;
174
int
nb_intra_matrices
;
175
SpecifierOpt
*
inter_matrices
;
176
int
nb_inter_matrices
;
177
SpecifierOpt
*
chroma_intra_matrices
;
178
int
nb_chroma_intra_matrices
;
179
SpecifierOpt
*
top_field_first
;
180
int
nb_top_field_first
;
181
SpecifierOpt
*
metadata_map
;
182
int
nb_metadata_map
;
183
SpecifierOpt
*
presets
;
184
int
nb_presets
;
185
SpecifierOpt
*
copy_initial_nonkeyframes
;
186
int
nb_copy_initial_nonkeyframes
;
187
SpecifierOpt
*
copy_prior_start
;
188
int
nb_copy_prior_start
;
189
SpecifierOpt
*
filters
;
190
int
nb_filters
;
191
SpecifierOpt
*
filter_scripts
;
192
int
nb_filter_scripts
;
193
SpecifierOpt
*
reinit_filters
;
194
int
nb_reinit_filters
;
195
SpecifierOpt
*
fix_sub_duration
;
196
int
nb_fix_sub_duration
;
197
SpecifierOpt
*
canvas_sizes
;
198
int
nb_canvas_sizes
;
199
SpecifierOpt
*
pass
;
200
int
nb_pass
;
201
SpecifierOpt
*
passlogfiles
;
202
int
nb_passlogfiles
;
203
SpecifierOpt
*
guess_layout_max
;
204
int
nb_guess_layout_max
;
205
SpecifierOpt
*
apad
;
206
int
nb_apad
;
207
SpecifierOpt
*
discard
;
208
int
nb_discard
;
209
}
OptionsContext
;
210
211
typedef
struct
InputFilter
{
212
AVFilterContext
*
filter
;
213
struct
InputStream
*
ist
;
214
struct
FilterGraph
*
graph
;
215
uint8_t
*
name
;
216
}
InputFilter
;
217
218
typedef
struct
OutputFilter
{
219
AVFilterContext
*
filter
;
220
struct
OutputStream
*
ost
;
221
struct
FilterGraph
*
graph
;
222
uint8_t
*
name
;
223
224
/* temporary storage until stream maps are processed */
225
AVFilterInOut
*
out_tmp
;
226
}
OutputFilter
;
227
228
typedef
struct
FilterGraph
{
229
int
index
;
230
const
char
*
graph_desc
;
231
232
AVFilterGraph
*
graph
;
233
int
reconfiguration
;
234
235
InputFilter
**
inputs
;
236
int
nb_inputs
;
237
OutputFilter
**
outputs
;
238
int
nb_outputs
;
239
}
FilterGraph
;
240
241
typedef
struct
InputStream
{
242
int
file_index
;
243
AVStream
*
st
;
244
int
discard
;
/* true if stream data should be discarded */
245
int
user_set_discard
;
246
int
decoding_needed
;
/* true if the packets must be decoded in 'raw_fifo' */
247
AVCodecContext
*
dec_ctx
;
248
AVCodec
*
dec
;
249
AVFrame
*
decoded_frame
;
250
AVFrame
*
filter_frame
;
/* a ref of decoded_frame, to be sent to filters */
251
252
int64_t
start
;
/* time when read started */
253
/* predicted dts of the next packet read for this stream or (when there are
254
* several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */
255
int64_t
next_dts
;
256
int64_t
dts
;
///< dts of the last packet read for this stream (in AV_TIME_BASE units)
257
258
int64_t
next_pts
;
///< synthetic pts for the next decode frame (in AV_TIME_BASE units)
259
int64_t
pts
;
///< current pts of the decoded frame (in AV_TIME_BASE units)
260
int
wrap_correction_done
;
261
262
int64_t
filter_in_rescale_delta_last
;
263
264
double
ts_scale
;
265
int
saw_first_ts
;
266
int
showed_multi_packet_warning
;
267
AVDictionary
*
decoder_opts
;
268
AVRational
framerate
;
/* framerate forced with -r */
269
int
top_field_first
;
270
int
guess_layout_max
;
271
272
int
resample_height
;
273
int
resample_width
;
274
int
resample_pix_fmt
;
275
276
int
resample_sample_fmt
;
277
int
resample_sample_rate
;
278
int
resample_channels
;
279
uint64_t
resample_channel_layout
;
280
281
int
fix_sub_duration
;
282
struct
{
/* previous decoded subtitle and related variables */
283
int
got_output
;
284
int
ret
;
285
AVSubtitle
subtitle
;
286
}
prev_sub
;
287
288
struct
sub2video
{
289
int64_t
last_pts
;
290
int64_t
end_pts
;
291
AVFrame
*
frame
;
292
int
w
,
h
;
293
}
sub2video
;
294
295
int
dr1
;
296
297
/* decoded data from this stream goes into all those filters
298
* currently video and audio only */
299
InputFilter
**
filters
;
300
int
nb_filters
;
301
302
int
reinit_filters
;
303
304
/* hwaccel options */
305
enum
HWAccelID
hwaccel_id
;
306
char
*
hwaccel_device
;
307
308
/* hwaccel context */
309
enum
HWAccelID
active_hwaccel_id
;
310
void
*
hwaccel_ctx
;
311
void
(*
hwaccel_uninit
)(
AVCodecContext
*
s
);
312
int (*
hwaccel_get_buffer
)(
AVCodecContext
*
s
,
AVFrame
*
frame
,
int
flags
);
313
int (*
hwaccel_retrieve_data
)(
AVCodecContext
*
s
,
AVFrame
*
frame
);
314
enum
AVPixelFormat
hwaccel_pix_fmt
;
315
enum
AVPixelFormat
hwaccel_retrieved_pix_fmt
;
316
317
/* stats */
318
// combined size of all the packets read
319
uint64_t
data_size
;
320
/* number of packets successfully read for this stream */
321
uint64_t
nb_packets
;
322
// number of frames/samples retrieved from the decoder
323
uint64_t
frames_decoded
;
324
uint64_t
samples_decoded
;
325
}
InputStream
;
326
327
typedef
struct
InputFile
{
328
AVFormatContext
*
ctx
;
329
int
eof_reached
;
/* true if eof reached */
330
int
eagain
;
/* true if last read attempt returned EAGAIN */
331
int
ist_index
;
/* index of first stream in input_streams */
332
int64_t
input_ts_offset
;
333
int64_t
ts_offset
;
334
int64_t
last_ts
;
335
int64_t
start_time
;
/* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
336
int64_t
recording_time
;
337
int
nb_streams
;
/* number of stream that ffmpeg is aware of; may be different
338
from ctx.nb_streams if new streams appear during av_read_frame() */
339
int
nb_streams_warn
;
/* number of streams that the user was warned of */
340
int
rate_emu
;
341
int
accurate_seek
;
342
343
#if HAVE_PTHREADS
344
AVThreadMessageQueue
*in_thread_queue;
345
pthread_t
thread;
/* thread reading from this file */
346
int
non_blocking;
/* reading packets from the thread should not block */
347
int
joined;
/* the thread has been joined */
348
#endif
349
}
InputFile
;
350
351
enum
forced_keyframes_const
{
352
FKF_N
,
353
FKF_N_FORCED
,
354
FKF_PREV_FORCED_N
,
355
FKF_PREV_FORCED_T
,
356
FKF_T
,
357
FKF_NB
358
};
359
360
extern
const
char
*
const
forced_keyframes_const_names
[];
361
362
typedef
enum
{
363
ENCODER_FINISHED
= 1,
364
MUXER_FINISHED
= 2,
365
}
OSTFinished
;
366
367
typedef
struct
OutputStream
{
368
int
file_index
;
/* file index */
369
int
index
;
/* stream index in the output file */
370
int
source_index
;
/* InputStream index */
371
AVStream
*
st
;
/* stream in the output file */
372
int
encoding_needed
;
/* true if encoding needed for this stream */
373
int
frame_number
;
374
/* input pts and corresponding output pts
375
for A/V sync */
376
struct
InputStream
*
sync_ist
;
/* input stream to sync against */
377
int64_t
sync_opts
;
/* output frame counter, could be changed to some true timestamp */
// FIXME look at frame_number
378
/* pts of the first frame encoded for this stream, used for limiting
379
* recording time */
380
int64_t
first_pts
;
381
/* dts of the last packet sent to the muxer */
382
int64_t
last_mux_dts
;
383
AVBitStreamFilterContext
*
bitstream_filters
;
384
AVCodecContext
*
enc_ctx
;
385
AVCodec
*
enc
;
386
int64_t
max_frames
;
387
AVFrame
*
filtered_frame
;
388
389
/* video only */
390
AVRational
frame_rate
;
391
int
force_fps
;
392
int
top_field_first
;
393
394
AVRational
frame_aspect_ratio
;
395
396
/* forced key frames */
397
int64_t *
forced_kf_pts
;
398
int
forced_kf_count
;
399
int
forced_kf_index
;
400
char
*
forced_keyframes
;
401
AVExpr
*
forced_keyframes_pexpr
;
402
double
forced_keyframes_expr_const_values
[
FKF_NB
];
403
404
/* audio only */
405
int
audio_channels_map
[
SWR_CH_MAX
];
/* list of the channels id to pick from the source stream */
406
int
audio_channels_mapped
;
/* number of channels in audio_channels_map */
407
408
char
*
logfile_prefix
;
409
FILE *
logfile
;
410
411
OutputFilter
*
filter
;
412
char
*
avfilter
;
413
char
*
filters
;
///< filtergraph associated to the -filter option
414
char
*
filters_script
;
///< filtergraph script associated to the -filter_script option
415
416
int64_t
sws_flags
;
417
AVDictionary
*
encoder_opts
;
418
AVDictionary
*
swr_opts
;
419
AVDictionary
*
resample_opts
;
420
char
*
apad
;
421
OSTFinished
finished
;
/* no more packets should be written for this stream */
422
int
unavailable
;
/* true if the steram is unavailable (possibly temporarily) */
423
int
stream_copy
;
424
const
char
*
attachment_filename
;
425
int
copy_initial_nonkeyframes
;
426
int
copy_prior_start
;
427
428
int
keep_pix_fmt
;
429
430
AVCodecParserContext
*
parser
;
431
432
/* stats */
433
// combined size of all the packets written
434
uint64_t
data_size
;
435
// number of packets send to the muxer
436
uint64_t
packets_written
;
437
// number of frames/samples sent to the encoder
438
uint64_t
frames_encoded
;
439
uint64_t
samples_encoded
;
440
}
OutputStream
;
441
442
typedef
struct
OutputFile
{
443
AVFormatContext
*
ctx
;
444
AVDictionary
*
opts
;
445
int
ost_index
;
/* index of the first stream in output_streams */
446
int64_t
recording_time
;
///< desired length of the resulting file in microseconds == AV_TIME_BASE units
447
int64_t
start_time
;
///< start time in microseconds == AV_TIME_BASE units
448
uint64_t
limit_filesize
;
/* filesize limit expressed in bytes */
449
450
int
shortest
;
451
}
OutputFile
;
452
453
extern
InputStream
**
input_streams
;
454
extern
int
nb_input_streams
;
455
extern
InputFile
**
input_files
;
456
extern
int
nb_input_files
;
457
458
extern
OutputStream
**
output_streams
;
459
extern
int
nb_output_streams
;
460
extern
OutputFile
**
output_files
;
461
extern
int
nb_output_files
;
462
463
extern
FilterGraph
**
filtergraphs
;
464
extern
int
nb_filtergraphs
;
465
466
extern
char
*
vstats_filename
;
467
468
extern
float
audio_drift_threshold
;
469
extern
float
dts_delta_threshold
;
470
extern
float
dts_error_threshold
;
471
472
extern
int
audio_volume
;
473
extern
int
audio_sync_method
;
474
extern
int
video_sync_method
;
475
extern
int
do_benchmark
;
476
extern
int
do_benchmark_all
;
477
extern
int
do_deinterlace
;
478
extern
int
do_hex_dump
;
479
extern
int
do_pkt_dump
;
480
extern
int
copy_ts
;
481
extern
int
copy_tb
;
482
extern
int
debug_ts
;
483
extern
int
exit_on_error
;
484
extern
int
print_stats
;
485
extern
int
qp_hist
;
486
extern
int
stdin_interaction
;
487
extern
int
frame_bits_per_raw_sample
;
488
extern
AVIOContext
*
progress_avio
;
489
extern
float
max_error_rate
;
490
491
extern
const
AVIOInterruptCB
int_cb
;
492
493
extern
const
OptionDef
options
[];
494
extern
const
HWAccel
hwaccels
[];
495
496
497
void
term_init
(
void
);
498
void
term_exit
(
void
);
499
500
void
reset_options
(
OptionsContext
*o,
int
is_input);
501
void
show_usage
(
void
);
502
503
void
opt_output_file
(
void
*optctx,
const
char
*filename);
504
505
void
assert_avoptions
(
AVDictionary
*
m
);
506
507
int
guess_input_channel_layout
(
InputStream
*ist);
508
509
enum
AVPixelFormat
choose_pixel_fmt
(
AVStream
*st,
AVCodecContext
*avctx,
AVCodec
*codec,
enum
AVPixelFormat
target);
510
void
choose_sample_fmt
(
AVStream
*st,
AVCodec
*codec);
511
512
int
configure_filtergraph
(
FilterGraph
*fg);
513
int
configure_output_filter
(
FilterGraph
*fg,
OutputFilter
*ofilter,
AVFilterInOut
*
out
);
514
int
ist_in_filtergraph
(
FilterGraph
*fg,
InputStream
*ist);
515
FilterGraph
*
init_simple_filtergraph
(
InputStream
*ist,
OutputStream
*ost);
516
517
int
ffmpeg_parse_options
(
int
argc,
char
**argv);
518
519
int
vdpau_init
(
AVCodecContext
*
s
);
520
int
dxva2_init
(
AVCodecContext
*
s
);
521
int
vda_init
(
AVCodecContext
*
s
);
522
523
#endif
/* FFMPEG_H */
Generated on Sun Jul 20 2014 23:05:41 for FFmpeg by
1.8.2