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 FFTOOLS_FFMPEG_H 20 #define FFTOOLS_FFMPEG_H 21 22 #include "config.h" 23 24 #include <stdint.h> 25 #include <stdio.h> 26 #include <signal.h> 27 28 #include "cmdutils.h" 29 30 #include "libavformat/avformat.h" 31 #include "libavformat/avio.h" 32 33 #include "libavcodec/avcodec.h" 34 35 #include "libavfilter/avfilter.h" 36 37 #include "libavutil/avutil.h" 38 #include "libavutil/dict.h" 39 #include "libavutil/eval.h" 40 #include "libavutil/fifo.h" 41 #include "libavutil/hwcontext.h" 42 #include "libavutil/pixfmt.h" 43 #include "libavutil/rational.h" 44 #include "libavutil/thread.h" 45 #include "libavutil/threadmessage.h" 46 47 #include "libswresample/swresample.h" 48 49 #define VSYNC_AUTO -1 50 #define VSYNC_PASSTHROUGH 0 51 #define VSYNC_CFR 1 52 #define VSYNC_VFR 2 53 #define VSYNC_VSCFR 0xfe 54 #define VSYNC_DROP 0xff 55 56 #define MAX_STREAMS 1024 /* arbitrary sanity check value */ 57 58 enum HWAccelID { 59 HWACCEL_NONE = 0, 60 HWACCEL_AUTO, 61 HWACCEL_GENERIC, 62 HWACCEL_VIDEOTOOLBOX, 63 HWACCEL_QSV, 64 HWACCEL_CUVID, 65 }; 66 67 typedef struct HWAccel { 68 const char *name; 69 int (*init)(AVCodecContext *s); 70 enum HWAccelID id; 71 enum AVPixelFormat pix_fmt; 72 } HWAccel; 73 74 typedef struct HWDevice { 75 const char *name; 76 enum AVHWDeviceType type; 77 AVBufferRef *device_ref; 78 } HWDevice; 79 80 /* select an input stream for an output stream */ 81 typedef struct StreamMap { 82 int disabled; /* 1 is this mapping is disabled by a negative map */ 83 int file_index; 84 int stream_index; 85 int sync_file_index; 86 int sync_stream_index; 87 char *linklabel; /* name of an output link, for mapping lavfi outputs */ 88 } StreamMap; 89 90 typedef struct { 91 int file_idx, stream_idx, channel_idx; // input 92 int ofile_idx, ostream_idx; // output 93 } AudioChannelMap; 94 95 typedef struct OptionsContext { 96 OptionGroup *g; 97 98 /* input/output options */ 99 int64_t start_time; 100 int64_t start_time_eof; 101 int seek_timestamp; 102 const char *format; 103 104 SpecifierOpt *codec_names; 105 int nb_codec_names; 106 SpecifierOpt *audio_channels; 107 int nb_audio_channels; 108 SpecifierOpt *audio_sample_rate; 109 int nb_audio_sample_rate; 110 SpecifierOpt *frame_rates; 111 int nb_frame_rates; 112 SpecifierOpt *frame_sizes; 113 int nb_frame_sizes; 114 SpecifierOpt *frame_pix_fmts; 115 int nb_frame_pix_fmts; 116 117 /* input options */ 118 int64_t input_ts_offset; 119 int loop; 120 int rate_emu; 121 int accurate_seek; 122 int thread_queue_size; 123 124 SpecifierOpt *ts_scale; 125 int nb_ts_scale; 126 SpecifierOpt *dump_attachment; 127 int nb_dump_attachment; 128 SpecifierOpt *hwaccels; 129 int nb_hwaccels; 130 SpecifierOpt *hwaccel_devices; 131 int nb_hwaccel_devices; 132 SpecifierOpt *hwaccel_output_formats; 133 int nb_hwaccel_output_formats; 134 SpecifierOpt *autorotate; 135 int nb_autorotate; 136 137 /* output options */ 138 StreamMap *stream_maps; 139 int nb_stream_maps; 140 AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */ 141 int nb_audio_channel_maps; /* number of (valid) -map_channel settings */ 142 int metadata_global_manual; 143 int metadata_streams_manual; 144 int metadata_chapters_manual; 145 const char **attachments; 146 int nb_attachments; 147 148 int chapters_input_file; 149 150 int64_t recording_time; 151 int64_t stop_time; 152 uint64_t limit_filesize; 153 float mux_preload; 154 float mux_max_delay; 155 int shortest; 156 int bitexact; 157 158 int video_disable; 159 int audio_disable; 160 int subtitle_disable; 161 int data_disable; 162 163 /* indexed by output file stream index */ 164 int *streamid_map; 165 int nb_streamid_map; 166 167 SpecifierOpt *metadata; 168 int nb_metadata; 169 SpecifierOpt *max_frames; 170 int nb_max_frames; 171 SpecifierOpt *bitstream_filters; 172 int nb_bitstream_filters; 173 SpecifierOpt *codec_tags; 174 int nb_codec_tags; 175 SpecifierOpt *sample_fmts; 176 int nb_sample_fmts; 177 SpecifierOpt *qscale; 178 int nb_qscale; 179 SpecifierOpt *forced_key_frames; 180 int nb_forced_key_frames; 181 SpecifierOpt *force_fps; 182 int nb_force_fps; 183 SpecifierOpt *frame_aspect_ratios; 184 int nb_frame_aspect_ratios; 185 SpecifierOpt *rc_overrides; 186 int nb_rc_overrides; 187 SpecifierOpt *intra_matrices; 188 int nb_intra_matrices; 189 SpecifierOpt *inter_matrices; 190 int nb_inter_matrices; 191 SpecifierOpt *chroma_intra_matrices; 192 int nb_chroma_intra_matrices; 193 SpecifierOpt *top_field_first; 194 int nb_top_field_first; 195 SpecifierOpt *metadata_map; 196 int nb_metadata_map; 197 SpecifierOpt *presets; 198 int nb_presets; 199 SpecifierOpt *copy_initial_nonkeyframes; 200 int nb_copy_initial_nonkeyframes; 201 SpecifierOpt *copy_prior_start; 202 int nb_copy_prior_start; 203 SpecifierOpt *filters; 204 int nb_filters; 205 SpecifierOpt *filter_scripts; 206 int nb_filter_scripts; 207 SpecifierOpt *reinit_filters; 208 int nb_reinit_filters; 209 SpecifierOpt *fix_sub_duration; 210 int nb_fix_sub_duration; 211 SpecifierOpt *canvas_sizes; 212 int nb_canvas_sizes; 213 SpecifierOpt *pass; 214 int nb_pass; 215 SpecifierOpt *passlogfiles; 216 int nb_passlogfiles; 217 SpecifierOpt *max_muxing_queue_size; 218 int nb_max_muxing_queue_size; 219 SpecifierOpt *guess_layout_max; 220 int nb_guess_layout_max; 221 SpecifierOpt *apad; 222 int nb_apad; 223 SpecifierOpt *discard; 224 int nb_discard; 225 SpecifierOpt *disposition; 226 int nb_disposition; 227 SpecifierOpt *program; 228 int nb_program; 229 SpecifierOpt *time_bases; 230 int nb_time_bases; 231 SpecifierOpt *enc_time_bases; 232 int nb_enc_time_bases; 233 } OptionsContext; 234 235 typedef struct InputFilter { 236 AVFilterContext *filter; 237 struct InputStream *ist; 238 struct FilterGraph *graph; 239 uint8_t *name; 240 enum AVMediaType type; // AVMEDIA_TYPE_SUBTITLE for sub2video 241 242 AVFifoBuffer *frame_queue; 243 244 // parameters configured for this input 245 int format; 246 247 int width, height; 248 AVRational sample_aspect_ratio; 249 250 int sample_rate; 251 int channels; 252 uint64_t channel_layout; 253 254 AVBufferRef *hw_frames_ctx; 255 256 int eof; 257 } InputFilter; 258 259 typedef struct OutputFilter { 260 AVFilterContext *filter; 261 struct OutputStream *ost; 262 struct FilterGraph *graph; 263 uint8_t *name; 264 265 /* temporary storage until stream maps are processed */ 266 AVFilterInOut *out_tmp; 267 enum AVMediaType type; 268 269 /* desired output stream properties */ 270 int width, height; 271 AVRational frame_rate; 272 int format; 273 int sample_rate; 274 uint64_t channel_layout; 275 276 // those are only set if no format is specified and the encoder gives us multiple options 277 int *formats; 278 uint64_t *channel_layouts; 279 int *sample_rates; 280 } OutputFilter; 281 282 typedef struct FilterGraph { 283 int index; 284 const char *graph_desc; 285 286 AVFilterGraph *graph; 287 int reconfiguration; 288 289 InputFilter **inputs; 290 int nb_inputs; 291 OutputFilter **outputs; 292 int nb_outputs; 293 } FilterGraph; 294 295 typedef struct InputStream { 296 int file_index; 297 AVStream *st; 298 int discard; /* true if stream data should be discarded */ 299 int user_set_discard; 300 int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */ 301 #define DECODING_FOR_OST 1 302 #define DECODING_FOR_FILTER 2 303 304 AVCodecContext *dec_ctx; 305 AVCodec *dec; 306 AVFrame *decoded_frame; 307 AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */ 308 309 int64_t start; /* time when read started */ 310 /* predicted dts of the next packet read for this stream or (when there are 311 * several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */ 312 int64_t next_dts; 313 int64_t dts; ///< dts of the last packet read for this stream (in AV_TIME_BASE units) 314 315 int64_t next_pts; ///< synthetic pts for the next decode frame (in AV_TIME_BASE units) 316 int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units) 317 int wrap_correction_done; 318 319 int64_t filter_in_rescale_delta_last; 320 321 int64_t min_pts; /* pts with the smallest value in a current stream */ 322 int64_t max_pts; /* pts with the higher value in a current stream */ 323 324 // when forcing constant input framerate through -r, 325 // this contains the pts that will be given to the next decoded frame 326 int64_t cfr_next_pts; 327 328 int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */ 329 330 double ts_scale; 331 int saw_first_ts; 332 AVDictionary *decoder_opts; 333 AVRational framerate; /* framerate forced with -r */ 334 int top_field_first; 335 int guess_layout_max; 336 337 int autorotate; 338 339 int fix_sub_duration; 340 struct { /* previous decoded subtitle and related variables */ 341 int got_output; 342 int ret; 343 AVSubtitle subtitle; 344 } prev_sub; 345 346 struct sub2video { 347 int64_t last_pts; 348 int64_t end_pts; 349 AVFifoBuffer *sub_queue; ///< queue of AVSubtitle* before filter init 350 AVFrame *frame; 351 int w, h; 352 } sub2video; 353 354 int dr1; 355 356 /* decoded data from this stream goes into all those filters 357 * currently video and audio only */ 358 InputFilter **filters; 359 int nb_filters; 360 361 int reinit_filters; 362 363 /* hwaccel options */ 364 enum HWAccelID hwaccel_id; 365 enum AVHWDeviceType hwaccel_device_type; 366 char *hwaccel_device; 367 enum AVPixelFormat hwaccel_output_format; 368 369 /* hwaccel context */ 370 void *hwaccel_ctx; 371 void (*hwaccel_uninit)(AVCodecContext *s); 372 int (*hwaccel_get_buffer)(AVCodecContext *s, AVFrame *frame, int flags); 373 int (*hwaccel_retrieve_data)(AVCodecContext *s, AVFrame *frame); 374 enum AVPixelFormat hwaccel_pix_fmt; 375 enum AVPixelFormat hwaccel_retrieved_pix_fmt; 376 AVBufferRef *hw_frames_ctx; 377 378 /* stats */ 379 // combined size of all the packets read 380 uint64_t data_size; 381 /* number of packets successfully read for this stream */ 382 uint64_t nb_packets; 383 // number of frames/samples retrieved from the decoder 384 uint64_t frames_decoded; 385 uint64_t samples_decoded; 386 387 int64_t *dts_buffer; 388 int nb_dts_buffer; 389 390 int got_output; 391 } InputStream; 392 393 typedef struct InputFile { 394 AVFormatContext *ctx; 395 int eof_reached; /* true if eof reached */ 396 int eagain; /* true if last read attempt returned EAGAIN */ 397 int ist_index; /* index of first stream in input_streams */ 398 int loop; /* set number of times input stream should be looped */ 399 int64_t duration; /* actual duration of the longest stream in a file 400 at the moment when looping happens */ 401 AVRational time_base; /* time base of the duration */ 402 int64_t input_ts_offset; 403 404 int64_t ts_offset; 405 int64_t last_ts; 406 int64_t start_time; /* user-specified start time in AV_TIME_BASE or AV_NOPTS_VALUE */ 407 int seek_timestamp; 408 int64_t recording_time; 409 int nb_streams; /* number of stream that ffmpeg is aware of; may be different 410 from ctx.nb_streams if new streams appear during av_read_frame() */ 411 int nb_streams_warn; /* number of streams that the user was warned of */ 412 int rate_emu; 413 int accurate_seek; 414 415 #if HAVE_THREADS 416 AVThreadMessageQueue *in_thread_queue; 417 pthread_t thread; /* thread reading from this file */ 418 int non_blocking; /* reading packets from the thread should not block */ 419 int joined; /* the thread has been joined */ 420 int thread_queue_size; /* maximum number of queued packets */ 421 #endif 422 } InputFile; 423 424 enum forced_keyframes_const { 425 FKF_N, 426 FKF_N_FORCED, 427 FKF_PREV_FORCED_N, 428 FKF_PREV_FORCED_T, 429 FKF_T, 430 FKF_NB 431 }; 432 433 #define ABORT_ON_FLAG_EMPTY_OUTPUT (1 << 0) 434 435 extern const char *const forced_keyframes_const_names[]; 436 437 typedef enum { 438 ENCODER_FINISHED = 1, 439 MUXER_FINISHED = 2, 440 } OSTFinished ; 441 442 typedef struct OutputStream { 443 int file_index; /* file index */ 444 int index; /* stream index in the output file */ 445 int source_index; /* InputStream index */ 446 AVStream *st; /* stream in the output file */ 447 int encoding_needed; /* true if encoding needed for this stream */ 448 int frame_number; 449 /* input pts and corresponding output pts 450 for A/V sync */ 451 struct InputStream *sync_ist; /* input stream to sync against */ 452 int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number 453 /* pts of the first frame encoded for this stream, used for limiting 454 * recording time */ 455 int64_t first_pts; 456 /* dts of the last packet sent to the muxer */ 457 int64_t last_mux_dts; 458 // the timebase of the packets sent to the muxer 459 AVRational mux_timebase; 460 AVRational enc_timebase; 461 462 int nb_bitstream_filters; 463 AVBSFContext **bsf_ctx; 464 465 AVCodecContext *enc_ctx; 466 AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */ 467 AVCodec *enc; 468 int64_t max_frames; 469 AVFrame *filtered_frame; 470 AVFrame *last_frame; 471 int last_dropped; 472 int last_nb0_frames[3]; 473 474 void *hwaccel_ctx; 475 476 /* video only */ 477 AVRational frame_rate; 478 int is_cfr; 479 int force_fps; 480 int top_field_first; 481 int rotate_overridden; 482 double rotate_override_value; 483 484 AVRational frame_aspect_ratio; 485 486 /* forced key frames */ 487 int64_t forced_kf_ref_pts; 488 int64_t *forced_kf_pts; 489 int forced_kf_count; 490 int forced_kf_index; 491 char *forced_keyframes; 492 AVExpr *forced_keyframes_pexpr; 493 double forced_keyframes_expr_const_values[FKF_NB]; 494 495 /* audio only */ 496 int *audio_channels_map; /* list of the channels id to pick from the source stream */ 497 int audio_channels_mapped; /* number of channels in audio_channels_map */ 498 499 char *logfile_prefix; 500 FILE *logfile; 501 502 OutputFilter *filter; 503 char *avfilter; 504 char *filters; ///< filtergraph associated to the -filter option 505 char *filters_script; ///< filtergraph script associated to the -filter_script option 506 507 AVDictionary *encoder_opts; 508 AVDictionary *sws_dict; 509 AVDictionary *swr_opts; 510 AVDictionary *resample_opts; 511 char *apad; 512 OSTFinished finished; /* no more packets should be written for this stream */ 513 int unavailable; /* true if the steram is unavailable (possibly temporarily) */ 514 int stream_copy; 515 516 // init_output_stream() has been called for this stream 517 // The encoder and the bitstream filters have been initialized and the stream 518 // parameters are set in the AVStream. 519 int initialized; 520 521 int inputs_done; 522 523 const char *attachment_filename; 524 int copy_initial_nonkeyframes; 525 int copy_prior_start; 526 char *disposition; 527 528 int keep_pix_fmt; 529 530 /* stats */ 531 // combined size of all the packets written 532 uint64_t data_size; 533 // number of packets send to the muxer 534 uint64_t packets_written; 535 // number of frames/samples sent to the encoder 536 uint64_t frames_encoded; 537 uint64_t samples_encoded; 538 539 /* packet quality factor */ 540 int quality; 541 542 int max_muxing_queue_size; 543 544 /* the packets are buffered here until the muxer is ready to be initialized */ 545 AVFifoBuffer *muxing_queue; 546 547 /* packet picture type */ 548 int pict_type; 549 550 /* frame encode sum of squared error values */ 551 int64_t error[4]; 552 } OutputStream; 553 554 typedef struct OutputFile { 555 AVFormatContext *ctx; 556 AVDictionary *opts; 557 int ost_index; /* index of the first stream in output_streams */ 558 int64_t recording_time; ///< desired length of the resulting file in microseconds == AV_TIME_BASE units 559 int64_t start_time; ///< start time in microseconds == AV_TIME_BASE units 560 uint64_t limit_filesize; /* filesize limit expressed in bytes */ 561 562 int shortest; 563 564 int header_written; 565 } OutputFile; 566 567 extern InputStream **input_streams; 568 extern int nb_input_streams; 569 extern InputFile **input_files; 570 extern int nb_input_files; 571 572 extern OutputStream **output_streams; 573 extern int nb_output_streams; 574 extern OutputFile **output_files; 575 extern int nb_output_files; 576 577 extern FilterGraph **filtergraphs; 578 extern int nb_filtergraphs; 579 580 extern char *vstats_filename; 581 extern char *sdp_filename; 582 583 extern float audio_drift_threshold; 584 extern float dts_delta_threshold; 585 extern float dts_error_threshold; 586 587 extern int audio_volume; 588 extern int audio_sync_method; 589 extern int video_sync_method; 590 extern float frame_drop_threshold; 591 extern int do_benchmark; 592 extern int do_benchmark_all; 593 extern int do_deinterlace; 594 extern int do_hex_dump; 595 extern int do_pkt_dump; 596 extern int copy_ts; 597 extern int start_at_zero; 598 extern int copy_tb; 599 extern int debug_ts; 600 extern int exit_on_error; 601 extern int abort_on_flags; 602 extern int print_stats; 603 extern int qp_hist; 604 extern int stdin_interaction; 605 extern int frame_bits_per_raw_sample; 606 extern AVIOContext *progress_avio; 607 extern float max_error_rate; 608 extern char *videotoolbox_pixfmt; 609 610 extern int filter_nbthreads; 611 extern int filter_complex_nbthreads; 612 extern int vstats_version; 613 614 extern const AVIOInterruptCB int_cb; 615 616 extern const OptionDef options[]; 617 extern const HWAccel hwaccels[]; 618 extern AVBufferRef *hw_device_ctx; 619 #if CONFIG_QSV 620 extern char *qsv_device; 621 #endif 622 extern HWDevice *filter_hw_device; 623 624 625 void term_init(void); 626 void term_exit(void); 627 628 void reset_options(OptionsContext *o, int is_input); 629 void show_usage(void); 630 631 void opt_output_file(void *optctx, const char *filename); 632 633 void remove_avoptions(AVDictionary **a, AVDictionary *b); 634 void assert_avoptions(AVDictionary *m); 635 636 int guess_input_channel_layout(InputStream *ist); 637 638 enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *avctx, AVCodec *codec, enum AVPixelFormat target); 639 void choose_sample_fmt(AVStream *st, AVCodec *codec); 640 641 int configure_filtergraph(FilterGraph *fg); 642 int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out); 643 void check_filter_outputs(void); 644 int ist_in_filtergraph(FilterGraph *fg, InputStream *ist); 645 int filtergraph_is_simple(FilterGraph *fg); 646 int init_simple_filtergraph(InputStream *ist, OutputStream *ost); 647 int init_complex_filtergraph(FilterGraph *fg); 648 649 void sub2video_update(InputStream *ist, AVSubtitle *sub); 650 651 int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame); 652 653 int ffmpeg_parse_options(int argc, char **argv); 654 655 int videotoolbox_init(AVCodecContext *s); 656 int qsv_init(AVCodecContext *s); 657 int cuvid_init(AVCodecContext *s); 658 659 HWDevice *hw_device_get_by_name(const char *name); 660 int hw_device_init_from_string(const char *arg, HWDevice **dev); 661 void hw_device_free_all(void); 662 663 int hw_device_setup_for_decode(InputStream *ist); 664 int hw_device_setup_for_encode(OutputStream *ost); 665 666 int hwaccel_decode_init(AVCodecContext *avctx); 667 668 #endif /* FFTOOLS_FFMPEG_H */ 669