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
;
/* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */
247
#define DECODING_FOR_OST 1
248
#define DECODING_FOR_FILTER 2
249
250
AVCodecContext
*
dec_ctx
;
251
AVCodec
*
dec
;
252
AVFrame
*
decoded_frame
;
253
AVFrame
*
filter_frame
;
/* a ref of decoded_frame, to be sent to filters */
254
255
int64_t
start
;
/* time when read started */
256
/* predicted dts of the next packet read for this stream or (when there are
257
* several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */
258
int64_t
next_dts
;
259
int64_t
dts
;
///< dts of the last packet read for this stream (in AV_TIME_BASE units)
260
261
int64_t
next_pts
;
///< synthetic pts for the next decode frame (in AV_TIME_BASE units)
262
int64_t
pts
;
///< current pts of the decoded frame (in AV_TIME_BASE units)
263
int
wrap_correction_done
;
264
265
int64_t
filter_in_rescale_delta_last
;
266
267
double
ts_scale
;
268
int
saw_first_ts
;
269
int
showed_multi_packet_warning
;
270
AVDictionary
*
decoder_opts
;
271
AVRational
framerate
;
/* framerate forced with -r */
272
int
top_field_first
;
273
int
guess_layout_max
;
274
275
int
resample_height
;
276
int
resample_width
;
277
int
resample_pix_fmt
;
278
279
int
resample_sample_fmt
;
280
int
resample_sample_rate
;
281
int
resample_channels
;
282
uint64_t
resample_channel_layout
;
283
284
int
fix_sub_duration
;
285
struct
{
/* previous decoded subtitle and related variables */
286
int
got_output
;
287
int
ret
;
288
AVSubtitle
subtitle
;
289
}
prev_sub
;
290
291
struct
sub2video
{
292
int64_t
last_pts
;
293
int64_t
end_pts
;
294
AVFrame
*
frame
;
295
int
w
,
h
;
296
}
sub2video
;
297
298
int
dr1
;
299
300
/* decoded data from this stream goes into all those filters
301
* currently video and audio only */
302
InputFilter
**
filters
;
303
int
nb_filters
;
304
305
int
reinit_filters
;
306
307
/* hwaccel options */
308
enum
HWAccelID
hwaccel_id
;
309
char
*
hwaccel_device
;
310
311
/* hwaccel context */
312
enum
HWAccelID
active_hwaccel_id
;
313
void
*
hwaccel_ctx
;
314
void
(*
hwaccel_uninit
)(
AVCodecContext
*
s
);
315
int (*
hwaccel_get_buffer
)(
AVCodecContext
*
s
,
AVFrame
*
frame
,
int
flags
);
316
int (*
hwaccel_retrieve_data
)(
AVCodecContext
*
s
,
AVFrame
*
frame
);
317
enum
AVPixelFormat
hwaccel_pix_fmt
;
318
enum
AVPixelFormat
hwaccel_retrieved_pix_fmt
;
319
320
/* stats */
321
// combined size of all the packets read
322
uint64_t
data_size
;
323
/* number of packets successfully read for this stream */
324
uint64_t
nb_packets
;
325
// number of frames/samples retrieved from the decoder
326
uint64_t
frames_decoded
;
327
uint64_t
samples_decoded
;
328
}
InputStream
;
329
330
typedef
struct
InputFile
{
331
AVFormatContext
*
ctx
;
332
int
eof_reached
;
/* true if eof reached */
333
int
eagain
;
/* true if last read attempt returned EAGAIN */
334
int
ist_index
;
/* index of first stream in input_streams */
335
int64_t
input_ts_offset
;
336
int64_t
ts_offset
;
337
int64_t
last_ts
;
338
int64_t
start_time
;
/* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */
339
int64_t
recording_time
;
340
int
nb_streams
;
/* number of stream that ffmpeg is aware of; may be different
341
from ctx.nb_streams if new streams appear during av_read_frame() */
342
int
nb_streams_warn
;
/* number of streams that the user was warned of */
343
int
rate_emu
;
344
int
accurate_seek
;
345
346
#if HAVE_PTHREADS
347
AVThreadMessageQueue
*in_thread_queue;
348
pthread_t
thread;
/* thread reading from this file */
349
int
non_blocking;
/* reading packets from the thread should not block */
350
int
joined;
/* the thread has been joined */
351
#endif
352
}
InputFile
;
353
354
enum
forced_keyframes_const
{
355
FKF_N
,
356
FKF_N_FORCED
,
357
FKF_PREV_FORCED_N
,
358
FKF_PREV_FORCED_T
,
359
FKF_T
,
360
FKF_NB
361
};
362
363
extern
const
char
*
const
forced_keyframes_const_names
[];
364
365
typedef
enum
{
366
ENCODER_FINISHED
= 1,
367
MUXER_FINISHED
= 2,
368
}
OSTFinished
;
369
370
typedef
struct
OutputStream
{
371
int
file_index
;
/* file index */
372
int
index
;
/* stream index in the output file */
373
int
source_index
;
/* InputStream index */
374
AVStream
*
st
;
/* stream in the output file */
375
int
encoding_needed
;
/* true if encoding needed for this stream */
376
int
frame_number
;
377
/* input pts and corresponding output pts
378
for A/V sync */
379
struct
InputStream
*
sync_ist
;
/* input stream to sync against */
380
int64_t
sync_opts
;
/* output frame counter, could be changed to some true timestamp */
// FIXME look at frame_number
381
/* pts of the first frame encoded for this stream, used for limiting
382
* recording time */
383
int64_t
first_pts
;
384
/* dts of the last packet sent to the muxer */
385
int64_t
last_mux_dts
;
386
AVBitStreamFilterContext
*
bitstream_filters
;
387
AVCodecContext
*
enc_ctx
;
388
AVCodec
*
enc
;
389
int64_t
max_frames
;
390
AVFrame
*
filtered_frame
;
391
392
/* video only */
393
AVRational
frame_rate
;
394
int
force_fps
;
395
int
top_field_first
;
396
397
AVRational
frame_aspect_ratio
;
398
399
/* forced key frames */
400
int64_t *
forced_kf_pts
;
401
int
forced_kf_count
;
402
int
forced_kf_index
;
403
char
*
forced_keyframes
;
404
AVExpr
*
forced_keyframes_pexpr
;
405
double
forced_keyframes_expr_const_values
[
FKF_NB
];
406
407
/* audio only */
408
int
*
audio_channels_map
;
/* list of the channels id to pick from the source stream */
409
int
audio_channels_mapped
;
/* number of channels in audio_channels_map */
410
411
char
*
logfile_prefix
;
412
FILE *
logfile
;
413
414
OutputFilter
*
filter
;
415
char
*
avfilter
;
416
char
*
filters
;
///< filtergraph associated to the -filter option
417
char
*
filters_script
;
///< filtergraph script associated to the -filter_script option
418
419
int64_t
sws_flags
;
420
AVDictionary
*
encoder_opts
;
421
AVDictionary
*
swr_opts
;
422
AVDictionary
*
resample_opts
;
423
char
*
apad
;
424
OSTFinished
finished
;
/* no more packets should be written for this stream */
425
int
unavailable
;
/* true if the steram is unavailable (possibly temporarily) */
426
int
stream_copy
;
427
const
char
*
attachment_filename
;
428
int
copy_initial_nonkeyframes
;
429
int
copy_prior_start
;
430
431
int
keep_pix_fmt
;
432
433
AVCodecParserContext
*
parser
;
434
435
/* stats */
436
// combined size of all the packets written
437
uint64_t
data_size
;
438
// number of packets send to the muxer
439
uint64_t
packets_written
;
440
// number of frames/samples sent to the encoder
441
uint64_t
frames_encoded
;
442
uint64_t
samples_encoded
;
443
}
OutputStream
;
444
445
typedef
struct
OutputFile
{
446
AVFormatContext
*
ctx
;
447
AVDictionary
*
opts
;
448
int
ost_index
;
/* index of the first stream in output_streams */
449
int64_t
recording_time
;
///< desired length of the resulting file in microseconds == AV_TIME_BASE units
450
int64_t
start_time
;
///< start time in microseconds == AV_TIME_BASE units
451
uint64_t
limit_filesize
;
/* filesize limit expressed in bytes */
452
453
int
shortest
;
454
}
OutputFile
;
455
456
extern
InputStream
**
input_streams
;
457
extern
int
nb_input_streams
;
458
extern
InputFile
**
input_files
;
459
extern
int
nb_input_files
;
460
461
extern
OutputStream
**
output_streams
;
462
extern
int
nb_output_streams
;
463
extern
OutputFile
**
output_files
;
464
extern
int
nb_output_files
;
465
466
extern
FilterGraph
**
filtergraphs
;
467
extern
int
nb_filtergraphs
;
468
469
extern
char
*
vstats_filename
;
470
471
extern
float
audio_drift_threshold
;
472
extern
float
dts_delta_threshold
;
473
extern
float
dts_error_threshold
;
474
475
extern
int
audio_volume
;
476
extern
int
audio_sync_method
;
477
extern
int
video_sync_method
;
478
extern
int
do_benchmark
;
479
extern
int
do_benchmark_all
;
480
extern
int
do_deinterlace
;
481
extern
int
do_hex_dump
;
482
extern
int
do_pkt_dump
;
483
extern
int
copy_ts
;
484
extern
int
copy_tb
;
485
extern
int
debug_ts
;
486
extern
int
exit_on_error
;
487
extern
int
print_stats
;
488
extern
int
qp_hist
;
489
extern
int
stdin_interaction
;
490
extern
int
frame_bits_per_raw_sample
;
491
extern
AVIOContext
*
progress_avio
;
492
extern
float
max_error_rate
;
493
494
extern
const
AVIOInterruptCB
int_cb
;
495
496
extern
const
OptionDef
options
[];
497
extern
const
HWAccel
hwaccels
[];
498
499
500
void
term_init
(
void
);
501
void
term_exit
(
void
);
502
503
void
reset_options
(
OptionsContext
*o,
int
is_input);
504
void
show_usage
(
void
);
505
506
void
opt_output_file
(
void
*optctx,
const
char
*filename);
507
508
void
remove_avoptions
(
AVDictionary
**
a
,
AVDictionary
*
b
);
509
void
assert_avoptions
(
AVDictionary
*
m
);
510
511
int
guess_input_channel_layout
(
InputStream
*ist);
512
513
enum
AVPixelFormat
choose_pixel_fmt
(
AVStream
*st,
AVCodecContext
*avctx,
AVCodec
*codec,
enum
AVPixelFormat
target);
514
void
choose_sample_fmt
(
AVStream
*st,
AVCodec
*codec);
515
516
int
configure_filtergraph
(
FilterGraph
*fg);
517
int
configure_output_filter
(
FilterGraph
*fg,
OutputFilter
*ofilter,
AVFilterInOut
*
out
);
518
int
ist_in_filtergraph
(
FilterGraph
*fg,
InputStream
*ist);
519
FilterGraph
*
init_simple_filtergraph
(
InputStream
*ist,
OutputStream
*ost);
520
521
int
ffmpeg_parse_options
(
int
argc,
char
**argv);
522
523
int
vdpau_init
(
AVCodecContext
*
s
);
524
int
dxva2_init
(
AVCodecContext
*
s
);
525
int
vda_init
(
AVCodecContext
*
s
);
526
527
#endif
/* FFMPEG_H */
Generated on Sun Sep 14 2014 18:55:49 for FFmpeg by
1.8.2