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