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 }; 65 66 typedef struct HWAccel { 67 const char *name; 68 int (*init)(AVCodecContext *s); 69 enum HWAccelID id; 70 enum AVPixelFormat pix_fmt; 71 } HWAccel; 72 73 typedef struct HWDevice { 74 const char *name; 75 enum AVHWDeviceType type; 76 AVBufferRef *device_ref; 77 } HWDevice; 78 79 /* select an input stream for an output stream */ 80 typedef struct StreamMap { 81 int disabled; /* 1 is this mapping is disabled by a negative map */ 82 int file_index; 83 int stream_index; 84 int sync_file_index; 85 int sync_stream_index; 86 char *linklabel; /* name of an output link, for mapping lavfi outputs */ 87 } StreamMap; 88 89 typedef struct { 90 int file_idx, stream_idx, channel_idx; // input 91 int ofile_idx, ostream_idx; // output 92 } AudioChannelMap; 93 94 typedef struct OptionsContext { 95 OptionGroup *g; 96 97 /* input/output options */ 98 int64_t start_time; 99 int64_t start_time_eof; 100 int seek_timestamp; 101 const char *format; 102 103 SpecifierOpt *codec_names; 104 int nb_codec_names; 105 SpecifierOpt *audio_channels; 106 int nb_audio_channels; 107 SpecifierOpt *audio_sample_rate; 108 int nb_audio_sample_rate; 109 SpecifierOpt *frame_rates; 110 int nb_frame_rates; 111 SpecifierOpt *frame_sizes; 112 int nb_frame_sizes; 113 SpecifierOpt *frame_pix_fmts; 114 int nb_frame_pix_fmts; 115 116 /* input options */ 117 int64_t input_ts_offset; 118 int loop; 119 int rate_emu; 120 int accurate_seek; 121 int thread_queue_size; 122 123 SpecifierOpt *ts_scale; 124 int nb_ts_scale; 125 SpecifierOpt *dump_attachment; 126 int nb_dump_attachment; 127 SpecifierOpt *hwaccels; 128 int nb_hwaccels; 129 SpecifierOpt *hwaccel_devices; 130 int nb_hwaccel_devices; 131 SpecifierOpt *hwaccel_output_formats; 132 int nb_hwaccel_output_formats; 133 SpecifierOpt *autorotate; 134 int nb_autorotate; 135 136 /* output options */ 137 StreamMap *stream_maps; 138 int nb_stream_maps; 139 AudioChannelMap *audio_channel_maps; /* one info entry per -map_channel */ 140 int nb_audio_channel_maps; /* number of (valid) -map_channel settings */ 141 int metadata_global_manual; 142 int metadata_streams_manual; 143 int metadata_chapters_manual; 144 const char **attachments; 145 int nb_attachments; 146 147 int chapters_input_file; 148 149 int64_t recording_time; 150 int64_t stop_time; 151 uint64_t limit_filesize; 152 float mux_preload; 153 float mux_max_delay; 154 int shortest; 155 int bitexact; 156 157 int video_disable; 158 int audio_disable; 159 int subtitle_disable; 160 int data_disable; 161 162 /* indexed by output file stream index */ 163 int *streamid_map; 164 int nb_streamid_map; 165 166 SpecifierOpt *metadata; 167 int nb_metadata; 168 SpecifierOpt *max_frames; 169 int nb_max_frames; 170 SpecifierOpt *bitstream_filters; 171 int nb_bitstream_filters; 172 SpecifierOpt *codec_tags; 173 int nb_codec_tags; 174 SpecifierOpt *sample_fmts; 175 int nb_sample_fmts; 176 SpecifierOpt *qscale; 177 int nb_qscale; 178 SpecifierOpt *forced_key_frames; 179 int nb_forced_key_frames; 180 SpecifierOpt *force_fps; 181 int nb_force_fps; 182 SpecifierOpt *frame_aspect_ratios; 183 int nb_frame_aspect_ratios; 184 SpecifierOpt *rc_overrides; 185 int nb_rc_overrides; 186 SpecifierOpt *intra_matrices; 187 int nb_intra_matrices; 188 SpecifierOpt *inter_matrices; 189 int nb_inter_matrices; 190 SpecifierOpt *chroma_intra_matrices; 191 int nb_chroma_intra_matrices; 192 SpecifierOpt *top_field_first; 193 int nb_top_field_first; 194 SpecifierOpt *metadata_map; 195 int nb_metadata_map; 196 SpecifierOpt *presets; 197 int nb_presets; 198 SpecifierOpt *copy_initial_nonkeyframes; 199 int nb_copy_initial_nonkeyframes; 200 SpecifierOpt *copy_prior_start; 201 int nb_copy_prior_start; 202 SpecifierOpt *filters; 203 int nb_filters; 204 SpecifierOpt *filter_scripts; 205 int nb_filter_scripts; 206 SpecifierOpt *reinit_filters; 207 int nb_reinit_filters; 208 SpecifierOpt *fix_sub_duration; 209 int nb_fix_sub_duration; 210 SpecifierOpt *canvas_sizes; 211 int nb_canvas_sizes; 212 SpecifierOpt *pass; 213 int nb_pass; 214 SpecifierOpt *passlogfiles; 215 int nb_passlogfiles; 216 SpecifierOpt *max_muxing_queue_size; 217 int nb_max_muxing_queue_size; 218 SpecifierOpt *guess_layout_max; 219 int nb_guess_layout_max; 220 SpecifierOpt *apad; 221 int nb_apad; 222 SpecifierOpt *discard; 223 int nb_discard; 224 SpecifierOpt *disposition; 225 int nb_disposition; 226 SpecifierOpt *program; 227 int nb_program; 228 SpecifierOpt *time_bases; 229 int nb_time_bases; 230 SpecifierOpt *enc_time_bases; 231 int nb_enc_time_bases; 232 } OptionsContext; 233 234 typedef struct InputFilter { 235 AVFilterContext *filter; 236 struct InputStream *ist; 237 struct FilterGraph *graph; 238 uint8_t *name; 239 enum AVMediaType type; // AVMEDIA_TYPE_SUBTITLE for sub2video 240 241 AVFifoBuffer *frame_queue; 242 243 // parameters configured for this input 244 int format; 245 246 int width, height; 247 AVRational sample_aspect_ratio; 248 249 int sample_rate; 250 int channels; 251 uint64_t channel_layout; 252 253 AVBufferRef *hw_frames_ctx; 254 255 int eof; 256 } InputFilter; 257 258 typedef struct OutputFilter { 259 AVFilterContext *filter; 260 struct OutputStream *ost; 261 struct FilterGraph *graph; 262 uint8_t *name; 263 264 /* temporary storage until stream maps are processed */ 265 AVFilterInOut *out_tmp; 266 enum AVMediaType type; 267 268 /* desired output stream properties */ 269 int width, height; 270 AVRational frame_rate; 271 int format; 272 int sample_rate; 273 uint64_t channel_layout; 274 275 // those are only set if no format is specified and the encoder gives us multiple options 276 int *formats; 277 uint64_t *channel_layouts; 278 int *sample_rates; 279 } OutputFilter; 280 281 typedef struct FilterGraph { 282 int index; 283 const char *graph_desc; 284 285 AVFilterGraph *graph; 286 int reconfiguration; 287 288 InputFilter **inputs; 289 int nb_inputs; 290 OutputFilter **outputs; 291 int nb_outputs; 292 } FilterGraph; 293 294 typedef struct InputStream { 295 int file_index; 296 AVStream *st; 297 int discard; /* true if stream data should be discarded */ 298 int user_set_discard; 299 int decoding_needed; /* non zero if the packets must be decoded in 'raw_fifo', see DECODING_FOR_* */ 300 #define DECODING_FOR_OST 1 301 #define DECODING_FOR_FILTER 2 302 303 AVCodecContext *dec_ctx; 304 AVCodec *dec; 305 AVFrame *decoded_frame; 306 AVFrame *filter_frame; /* a ref of decoded_frame, to be sent to filters */ 307 308 int64_t start; /* time when read started */ 309 /* predicted dts of the next packet read for this stream or (when there are 310 * several frames in a packet) of the next frame in current packet (in AV_TIME_BASE units) */ 311 int64_t next_dts; 312 int64_t dts; ///< dts of the last packet read for this stream (in AV_TIME_BASE units) 313 314 int64_t next_pts; ///< synthetic pts for the next decode frame (in AV_TIME_BASE units) 315 int64_t pts; ///< current pts of the decoded frame (in AV_TIME_BASE units) 316 int wrap_correction_done; 317 318 int64_t filter_in_rescale_delta_last; 319 320 int64_t min_pts; /* pts with the smallest value in a current stream */ 321 int64_t max_pts; /* pts with the higher value in a current stream */ 322 323 // when forcing constant input framerate through -r, 324 // this contains the pts that will be given to the next decoded frame 325 int64_t cfr_next_pts; 326 327 int64_t nb_samples; /* number of samples in the last decoded audio frame before looping */ 328 329 double ts_scale; 330 int saw_first_ts; 331 AVDictionary *decoder_opts; 332 AVRational framerate; /* framerate forced with -r */ 333 int top_field_first; 334 int guess_layout_max; 335 336 int autorotate; 337 338 int fix_sub_duration; 339 struct { /* previous decoded subtitle and related variables */ 340 int got_output; 341 int ret; 342 AVSubtitle subtitle; 343 } prev_sub; 344 345 struct sub2video { 346 int64_t last_pts; 347 int64_t end_pts; 348 AVFifoBuffer *sub_queue; ///< queue of AVSubtitle* before filter init 349 AVFrame *frame; 350 int w, h; 351 unsigned int initialize; ///< marks if sub2video_update should force an initialization 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 #define ABORT_ON_FLAG_EMPTY_OUTPUT_STREAM (1 << 1) 435 436 extern const char *const forced_keyframes_const_names[]; 437 438 typedef enum { 439 ENCODER_FINISHED = 1, 440 MUXER_FINISHED = 2, 441 } OSTFinished ; 442 443 typedef struct OutputStream { 444 int file_index; /* file index */ 445 int index; /* stream index in the output file */ 446 int source_index; /* InputStream index */ 447 AVStream *st; /* stream in the output file */ 448 int encoding_needed; /* true if encoding needed for this stream */ 449 int frame_number; 450 /* input pts and corresponding output pts 451 for A/V sync */ 452 struct InputStream *sync_ist; /* input stream to sync against */ 453 int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ // FIXME look at frame_number 454 /* pts of the first frame encoded for this stream, used for limiting 455 * recording time */ 456 int64_t first_pts; 457 /* dts of the last packet sent to the muxer */ 458 int64_t last_mux_dts; 459 // the timebase of the packets sent to the muxer 460 AVRational mux_timebase; 461 AVRational enc_timebase; 462 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 #if CONFIG_QSV 619 extern char *qsv_device; 620 #endif 621 extern HWDevice *filter_hw_device; 622 623 624 void term_init(void); 625 void term_exit(void); 626 627 void reset_options(OptionsContext *o, int is_input); 628 void show_usage(void); 629 630 void opt_output_file(void *optctx, const char *filename); 631 632 void remove_avoptions(AVDictionary **a, AVDictionary *b); 633 void assert_avoptions(AVDictionary *m); 634 635 int guess_input_channel_layout(InputStream *ist); 636 637 enum AVPixelFormat choose_pixel_fmt(AVStream *st, AVCodecContext *avctx, AVCodec *codec, enum AVPixelFormat target); 638 void choose_sample_fmt(AVStream *st, AVCodec *codec); 639 640 int configure_filtergraph(FilterGraph *fg); 641 int configure_output_filter(FilterGraph *fg, OutputFilter *ofilter, AVFilterInOut *out); 642 void check_filter_outputs(void); 643 int ist_in_filtergraph(FilterGraph *fg, InputStream *ist); 644 int filtergraph_is_simple(FilterGraph *fg); 645 int init_simple_filtergraph(InputStream *ist, OutputStream *ost); 646 int init_complex_filtergraph(FilterGraph *fg); 647 648 void sub2video_update(InputStream *ist, int64_t heartbeat_pts, AVSubtitle *sub); 649 650 int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame); 651 652 int ffmpeg_parse_options(int argc, char **argv); 653 654 int videotoolbox_init(AVCodecContext *s); 655 int qsv_init(AVCodecContext *s); 656 657 HWDevice *hw_device_get_by_name(const char *name); 658 int hw_device_init_from_string(const char *arg, HWDevice **dev); 659 void hw_device_free_all(void); 660 661 int hw_device_setup_for_decode(InputStream *ist); 662 int hw_device_setup_for_encode(OutputStream *ost); 663 int hw_device_setup_for_filter(FilterGraph *fg); 664 665 int hwaccel_decode_init(AVCodecContext *avctx); 666 667 #endif /* FFTOOLS_FFMPEG_H */ 668