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
60enum HWAccelID {
61    HWACCEL_NONE = 0,
62    HWACCEL_AUTO,
63    HWACCEL_VDPAU,
64    HWACCEL_DXVA2,
65    HWACCEL_VDA,
66};
67
68typedef 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 */
76typedef 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
85typedef struct {
86    int  file_idx,  stream_idx,  channel_idx; // input
87    int ofile_idx, ostream_idx;               // output
88} AudioChannelMap;
89
90typedef 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
211typedef struct InputFilter {
212    AVFilterContext    *filter;
213    struct InputStream *ist;
214    struct FilterGraph *graph;
215    uint8_t            *name;
216} InputFilter;
217
218typedef 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
228typedef 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
241typedef 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
327typedef 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
351enum 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
360extern const char *const forced_keyframes_const_names[];
361
362typedef enum {
363    ENCODER_FINISHED = 1,
364    MUXER_FINISHED = 2,
365} OSTFinished ;
366
367typedef 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
442typedef 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
453extern InputStream **input_streams;
454extern int        nb_input_streams;
455extern InputFile   **input_files;
456extern int        nb_input_files;
457
458extern OutputStream **output_streams;
459extern int         nb_output_streams;
460extern OutputFile   **output_files;
461extern int         nb_output_files;
462
463extern FilterGraph **filtergraphs;
464extern int        nb_filtergraphs;
465
466extern char *vstats_filename;
467
468extern float audio_drift_threshold;
469extern float dts_delta_threshold;
470extern float dts_error_threshold;
471
472extern int audio_volume;
473extern int audio_sync_method;
474extern int video_sync_method;
475extern int do_benchmark;
476extern int do_benchmark_all;
477extern int do_deinterlace;
478extern int do_hex_dump;
479extern int do_pkt_dump;
480extern int copy_ts;
481extern int copy_tb;
482extern int debug_ts;
483extern int exit_on_error;
484extern int print_stats;
485extern int qp_hist;
486extern int stdin_interaction;
487extern int frame_bits_per_raw_sample;
488extern AVIOContext *progress_avio;
489extern float max_error_rate;
490
491extern const AVIOInterruptCB int_cb;
492
493extern const OptionDef options[];
494extern const HWAccel hwaccels[];
495
496
497void term_init(void);
498void term_exit(void);
499
500void reset_options(OptionsContext *o, int is_input);
501void show_usage(void);
502
503void opt_output_file(void *optctx, const char *filename);
504
505void assert_avoptions(AVDictionary *m);
506
507int guess_input_channel_layout(InputStream *ist);
508
509enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *avctx, AVCodec *codec, enum AVPixelFormat target);
510void choose_sample_fmt(AVStream *st, AVCodec *codec);
511
512int configure_filtergraph(FilterGraph *fg);
513int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out);
514int ist_in_filtergraph(FilterGraph *fg, InputStream *ist);
515FilterGraph *init_simple_filtergraph(InputStream *ist, OutputStream *ost);
516
517int ffmpeg_parse_options(int argc, char **argv);
518
519int vdpau_init(AVCodecContext *s);
520int dxva2_init(AVCodecContext *s);
521int vda_init(AVCodecContext *s);
522
523#endif /* FFMPEG_H */
524