ffmpeg: init filtergraphs only after we have a frame on each input
[ffmpeg.git] / ffmpeg.c
1 /*
2  * Copyright (c) 2000-2003 Fabrice Bellard
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20
21 /**
22  * @file
23  * multimedia converter based on the FFmpeg libraries
24  */
25
26 #include "config.h"
27 #include <ctype.h>
28 #include <string.h>
29 #include <math.h>
30 #include <stdlib.h>
31 #include <errno.h>
32 #include <limits.h>
33 #include <stdint.h>
34
35 #if HAVE_IO_H
36 #include <io.h>
37 #endif
38 #if HAVE_UNISTD_H
39 #include <unistd.h>
40 #endif
41
42 #include "libavformat/avformat.h"
43 #include "libavdevice/avdevice.h"
44 #include "libswresample/swresample.h"
45 #include "libavutil/opt.h"
46 #include "libavutil/channel_layout.h"
47 #include "libavutil/parseutils.h"
48 #include "libavutil/samplefmt.h"
49 #include "libavutil/fifo.h"
50 #include "libavutil/internal.h"
51 #include "libavutil/intreadwrite.h"
52 #include "libavutil/dict.h"
53 #include "libavutil/mathematics.h"
54 #include "libavutil/pixdesc.h"
55 #include "libavutil/avstring.h"
56 #include "libavutil/libm.h"
57 #include "libavutil/imgutils.h"
58 #include "libavutil/timestamp.h"
59 #include "libavutil/bprint.h"
60 #include "libavutil/time.h"
61 #include "libavutil/threadmessage.h"
62 #include "libavcodec/mathops.h"
63 #include "libavformat/os_support.h"
64
65 # include "libavfilter/avfilter.h"
66 # include "libavfilter/buffersrc.h"
67 # include "libavfilter/buffersink.h"
68
69 #if HAVE_SYS_RESOURCE_H
70 #include <sys/time.h>
71 #include <sys/types.h>
72 #include <sys/resource.h>
73 #elif HAVE_GETPROCESSTIMES
74 #include <windows.h>
75 #endif
76 #if HAVE_GETPROCESSMEMORYINFO
77 #include <windows.h>
78 #include <psapi.h>
79 #endif
80 #if HAVE_SETCONSOLECTRLHANDLER
81 #include <windows.h>
82 #endif
83
84
85 #if HAVE_SYS_SELECT_H
86 #include <sys/select.h>
87 #endif
88
89 #if HAVE_TERMIOS_H
90 #include <fcntl.h>
91 #include <sys/ioctl.h>
92 #include <sys/time.h>
93 #include <termios.h>
94 #elif HAVE_KBHIT
95 #include <conio.h>
96 #endif
97
98 #if HAVE_PTHREADS
99 #include <pthread.h>
100 #endif
101
102 #include <time.h>
103
104 #include "ffmpeg.h"
105 #include "cmdutils.h"
106
107 #include "libavutil/avassert.h"
108
109 const char program_name[] = "ffmpeg";
110 const int program_birth_year = 2000;
111
112 static FILE *vstats_file;
113
114 const char *const forced_keyframes_const_names[] = {
115     "n",
116     "n_forced",
117     "prev_forced_n",
118     "prev_forced_t",
119     "t",
120     NULL
121 };
122
123 static void do_video_stats(OutputStream *ost, int frame_size);
124 static int64_t getutime(void);
125 static int64_t getmaxrss(void);
126 static int ifilter_has_all_input_formats(FilterGraph *fg);
127
128 static int run_as_daemon  = 0;
129 static int nb_frames_dup = 0;
130 static unsigned dup_warning = 1000;
131 static int nb_frames_drop = 0;
132 static int64_t decode_error_stat[2];
133
134 static int want_sdp = 1;
135
136 static int current_time;
137 AVIOContext *progress_avio = NULL;
138
139 static uint8_t *subtitle_out;
140
141 InputStream **input_streams = NULL;
142 int        nb_input_streams = 0;
143 InputFile   **input_files   = NULL;
144 int        nb_input_files   = 0;
145
146 OutputStream **output_streams = NULL;
147 int         nb_output_streams = 0;
148 OutputFile   **output_files   = NULL;
149 int         nb_output_files   = 0;
150
151 FilterGraph **filtergraphs;
152 int        nb_filtergraphs;
153
154 #if HAVE_TERMIOS_H
155
156 /* init terminal so that we can grab keys */
157 static struct termios oldtty;
158 static int restore_tty;
159 #endif
160
161 #if HAVE_PTHREADS
162 static void free_input_threads(void);
163 #endif
164
165 /* sub2video hack:
166    Convert subtitles to video with alpha to insert them in filter graphs.
167    This is a temporary solution until libavfilter gets real subtitles support.
168  */
169
170 static int sub2video_get_blank_frame(InputStream *ist)
171 {
172     int ret;
173     AVFrame *frame = ist->sub2video.frame;
174
175     av_frame_unref(frame);
176     ist->sub2video.frame->width  = ist->dec_ctx->width  ? ist->dec_ctx->width  : ist->sub2video.w;
177     ist->sub2video.frame->height = ist->dec_ctx->height ? ist->dec_ctx->height : ist->sub2video.h;
178     ist->sub2video.frame->format = AV_PIX_FMT_RGB32;
179     if ((ret = av_frame_get_buffer(frame, 32)) < 0)
180         return ret;
181     memset(frame->data[0], 0, frame->height * frame->linesize[0]);
182     return 0;
183 }
184
185 static void sub2video_copy_rect(uint8_t *dst, int dst_linesize, int w, int h,
186                                 AVSubtitleRect *r)
187 {
188     uint32_t *pal, *dst2;
189     uint8_t *src, *src2;
190     int x, y;
191
192     if (r->type != SUBTITLE_BITMAP) {
193         av_log(NULL, AV_LOG_WARNING, "sub2video: non-bitmap subtitle\n");
194         return;
195     }
196     if (r->x < 0 || r->x + r->w > w || r->y < 0 || r->y + r->h > h) {
197         av_log(NULL, AV_LOG_WARNING, "sub2video: rectangle (%d %d %d %d) overflowing %d %d\n",
198             r->x, r->y, r->w, r->h, w, h
199         );
200         return;
201     }
202
203     dst += r->y * dst_linesize + r->x * 4;
204     src = r->data[0];
205     pal = (uint32_t *)r->data[1];
206     for (y = 0; y < r->h; y++) {
207         dst2 = (uint32_t *)dst;
208         src2 = src;
209         for (x = 0; x < r->w; x++)
210             *(dst2++) = pal[*(src2++)];
211         dst += dst_linesize;
212         src += r->linesize[0];
213     }
214 }
215
216 static void sub2video_push_ref(InputStream *ist, int64_t pts)
217 {
218     AVFrame *frame = ist->sub2video.frame;
219     int i;
220
221     av_assert1(frame->data[0]);
222     ist->sub2video.last_pts = frame->pts = pts;
223     for (i = 0; i < ist->nb_filters; i++)
224         av_buffersrc_add_frame_flags(ist->filters[i]->filter, frame,
225                                      AV_BUFFERSRC_FLAG_KEEP_REF |
226                                      AV_BUFFERSRC_FLAG_PUSH);
227 }
228
229 static void sub2video_update(InputStream *ist, AVSubtitle *sub)
230 {
231     AVFrame *frame = ist->sub2video.frame;
232     int8_t *dst;
233     int     dst_linesize;
234     int num_rects, i;
235     int64_t pts, end_pts;
236
237     if (!frame)
238         return;
239     if (sub) {
240         pts       = av_rescale_q(sub->pts + sub->start_display_time * 1000LL,
241                                  AV_TIME_BASE_Q, ist->st->time_base);
242         end_pts   = av_rescale_q(sub->pts + sub->end_display_time   * 1000LL,
243                                  AV_TIME_BASE_Q, ist->st->time_base);
244         num_rects = sub->num_rects;
245     } else {
246         pts       = ist->sub2video.end_pts;
247         end_pts   = INT64_MAX;
248         num_rects = 0;
249     }
250     if (sub2video_get_blank_frame(ist) < 0) {
251         av_log(ist->dec_ctx, AV_LOG_ERROR,
252                "Impossible to get a blank canvas.\n");
253         return;
254     }
255     dst          = frame->data    [0];
256     dst_linesize = frame->linesize[0];
257     for (i = 0; i < num_rects; i++)
258         sub2video_copy_rect(dst, dst_linesize, frame->width, frame->height, sub->rects[i]);
259     sub2video_push_ref(ist, pts);
260     ist->sub2video.end_pts = end_pts;
261 }
262
263 static void sub2video_heartbeat(InputStream *ist, int64_t pts)
264 {
265     InputFile *infile = input_files[ist->file_index];
266     int i, j, nb_reqs;
267     int64_t pts2;
268
269     /* When a frame is read from a file, examine all sub2video streams in
270        the same file and send the sub2video frame again. Otherwise, decoded
271        video frames could be accumulating in the filter graph while a filter
272        (possibly overlay) is desperately waiting for a subtitle frame. */
273     for (i = 0; i < infile->nb_streams; i++) {
274         InputStream *ist2 = input_streams[infile->ist_index + i];
275         if (!ist2->sub2video.frame)
276             continue;
277         /* subtitles seem to be usually muxed ahead of other streams;
278            if not, subtracting a larger time here is necessary */
279         pts2 = av_rescale_q(pts, ist->st->time_base, ist2->st->time_base) - 1;
280         /* do not send the heartbeat frame if the subtitle is already ahead */
281         if (pts2 <= ist2->sub2video.last_pts)
282             continue;
283         if (pts2 >= ist2->sub2video.end_pts || !ist2->sub2video.frame->data[0])
284             sub2video_update(ist2, NULL);
285         for (j = 0, nb_reqs = 0; j < ist2->nb_filters; j++)
286             nb_reqs += av_buffersrc_get_nb_failed_requests(ist2->filters[j]->filter);
287         if (nb_reqs)
288             sub2video_push_ref(ist2, pts2);
289     }
290 }
291
292 static void sub2video_flush(InputStream *ist)
293 {
294     int i;
295
296     if (ist->sub2video.end_pts < INT64_MAX)
297         sub2video_update(ist, NULL);
298     for (i = 0; i < ist->nb_filters; i++)
299         av_buffersrc_add_frame(ist->filters[i]->filter, NULL);
300 }
301
302 /* end of sub2video hack */
303
304 static void term_exit_sigsafe(void)
305 {
306 #if HAVE_TERMIOS_H
307     if(restore_tty)
308         tcsetattr (0, TCSANOW, &oldtty);
309 #endif
310 }
311
312 void term_exit(void)
313 {
314     av_log(NULL, AV_LOG_QUIET, "%s", "");
315     term_exit_sigsafe();
316 }
317
318 static volatile int received_sigterm = 0;
319 static volatile int received_nb_signals = 0;
320 static volatile int transcode_init_done = 0;
321 static volatile int ffmpeg_exited = 0;
322 static int main_return_code = 0;
323
324 static void
325 sigterm_handler(int sig)
326 {
327     received_sigterm = sig;
328     received_nb_signals++;
329     term_exit_sigsafe();
330     if(received_nb_signals > 3) {
331         write(2/*STDERR_FILENO*/, "Received > 3 system signals, hard exiting\n",
332                            strlen("Received > 3 system signals, hard exiting\n"));
333
334         exit(123);
335     }
336 }
337
338 #if HAVE_SETCONSOLECTRLHANDLER
339 static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
340 {
341     av_log(NULL, AV_LOG_DEBUG, "\nReceived windows signal %ld\n", fdwCtrlType);
342
343     switch (fdwCtrlType)
344     {
345     case CTRL_C_EVENT:
346     case CTRL_BREAK_EVENT:
347         sigterm_handler(SIGINT);
348         return TRUE;
349
350     case CTRL_CLOSE_EVENT:
351     case CTRL_LOGOFF_EVENT:
352     case CTRL_SHUTDOWN_EVENT:
353         sigterm_handler(SIGTERM);
354         /* Basically, with these 3 events, when we return from this method the
355            process is hard terminated, so stall as long as we need to
356            to try and let the main thread(s) clean up and gracefully terminate
357            (we have at most 5 seconds, but should be done far before that). */
358         while (!ffmpeg_exited) {
359             Sleep(0);
360         }
361         return TRUE;
362
363     default:
364         av_log(NULL, AV_LOG_ERROR, "Received unknown windows signal %ld\n", fdwCtrlType);
365         return FALSE;
366     }
367 }
368 #endif
369
370 void term_init(void)
371 {
372 #if HAVE_TERMIOS_H
373     if (!run_as_daemon && stdin_interaction) {
374         struct termios tty;
375         if (tcgetattr (0, &tty) == 0) {
376             oldtty = tty;
377             restore_tty = 1;
378
379             tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
380                              |INLCR|IGNCR|ICRNL|IXON);
381             tty.c_oflag |= OPOST;
382             tty.c_lflag &= ~(ECHO|ECHONL|ICANON|IEXTEN);
383             tty.c_cflag &= ~(CSIZE|PARENB);
384             tty.c_cflag |= CS8;
385             tty.c_cc[VMIN] = 1;
386             tty.c_cc[VTIME] = 0;
387
388             tcsetattr (0, TCSANOW, &tty);
389         }
390         signal(SIGQUIT, sigterm_handler); /* Quit (POSIX).  */
391     }
392 #endif
393
394     signal(SIGINT , sigterm_handler); /* Interrupt (ANSI).    */
395     signal(SIGTERM, sigterm_handler); /* Termination (ANSI).  */
396 #ifdef SIGXCPU
397     signal(SIGXCPU, sigterm_handler);
398 #endif
399 #if HAVE_SETCONSOLECTRLHANDLER
400     SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE);
401 #endif
402 }
403
404 /* read a key without blocking */
405 static int read_key(void)
406 {
407     unsigned char ch;
408 #if HAVE_TERMIOS_H
409     int n = 1;
410     struct timeval tv;
411     fd_set rfds;
412
413     FD_ZERO(&rfds);
414     FD_SET(0, &rfds);
415     tv.tv_sec = 0;
416     tv.tv_usec = 0;
417     n = select(1, &rfds, NULL, NULL, &tv);
418     if (n > 0) {
419         n = read(0, &ch, 1);
420         if (n == 1)
421             return ch;
422
423         return n;
424     }
425 #elif HAVE_KBHIT
426 #    if HAVE_PEEKNAMEDPIPE
427     static int is_pipe;
428     static HANDLE input_handle;
429     DWORD dw, nchars;
430     if(!input_handle){
431         input_handle = GetStdHandle(STD_INPUT_HANDLE);
432         is_pipe = !GetConsoleMode(input_handle, &dw);
433     }
434
435     if (is_pipe) {
436         /* When running under a GUI, you will end here. */
437         if (!PeekNamedPipe(input_handle, NULL, 0, NULL, &nchars, NULL)) {
438             // input pipe may have been closed by the program that ran ffmpeg
439             return -1;
440         }
441         //Read it
442         if(nchars != 0) {
443             read(0, &ch, 1);
444             return ch;
445         }else{
446             return -1;
447         }
448     }
449 #    endif
450     if(kbhit())
451         return(getch());
452 #endif
453     return -1;
454 }
455
456 static int decode_interrupt_cb(void *ctx)
457 {
458     return received_nb_signals > transcode_init_done;
459 }
460
461 const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL };
462
463 static void ffmpeg_cleanup(int ret)
464 {
465     int i, j;
466
467     if (do_benchmark) {
468         int maxrss = getmaxrss() / 1024;
469         av_log(NULL, AV_LOG_INFO, "bench: maxrss=%ikB\n", maxrss);
470     }
471
472     for (i = 0; i < nb_filtergraphs; i++) {
473         FilterGraph *fg = filtergraphs[i];
474         avfilter_graph_free(&fg->graph);
475         for (j = 0; j < fg->nb_inputs; j++) {
476             while (av_fifo_size(fg->inputs[j]->frame_queue)) {
477                 AVFrame *frame;
478                 av_fifo_generic_read(fg->inputs[j]->frame_queue, &frame,
479                                      sizeof(frame), NULL);
480                 av_frame_free(&frame);
481             }
482             av_fifo_free(fg->inputs[j]->frame_queue);
483             av_buffer_unref(&fg->inputs[j]->hw_frames_ctx);
484             av_freep(&fg->inputs[j]->name);
485             av_freep(&fg->inputs[j]);
486         }
487         av_freep(&fg->inputs);
488         for (j = 0; j < fg->nb_outputs; j++) {
489             av_freep(&fg->outputs[j]->name);
490             av_freep(&fg->outputs[j]->formats);
491             av_freep(&fg->outputs[j]->channel_layouts);
492             av_freep(&fg->outputs[j]->sample_rates);
493             av_freep(&fg->outputs[j]);
494         }
495         av_freep(&fg->outputs);
496         av_freep(&fg->graph_desc);
497
498         av_freep(&filtergraphs[i]);
499     }
500     av_freep(&filtergraphs);
501
502     av_freep(&subtitle_out);
503
504     /* close files */
505     for (i = 0; i < nb_output_files; i++) {
506         OutputFile *of = output_files[i];
507         AVFormatContext *s;
508         if (!of)
509             continue;
510         s = of->ctx;
511         if (s && s->oformat && !(s->oformat->flags & AVFMT_NOFILE))
512             avio_closep(&s->pb);
513         avformat_free_context(s);
514         av_dict_free(&of->opts);
515
516         av_freep(&output_files[i]);
517     }
518     for (i = 0; i < nb_output_streams; i++) {
519         OutputStream *ost = output_streams[i];
520
521         if (!ost)
522             continue;
523
524         for (j = 0; j < ost->nb_bitstream_filters; j++)
525             av_bsf_free(&ost->bsf_ctx[j]);
526         av_freep(&ost->bsf_ctx);
527         av_freep(&ost->bsf_extradata_updated);
528
529         av_frame_free(&ost->filtered_frame);
530         av_frame_free(&ost->last_frame);
531         av_dict_free(&ost->encoder_opts);
532
533         av_parser_close(ost->parser);
534         avcodec_free_context(&ost->parser_avctx);
535
536         av_freep(&ost->forced_keyframes);
537         av_expr_free(ost->forced_keyframes_pexpr);
538         av_freep(&ost->avfilter);
539         av_freep(&ost->logfile_prefix);
540
541         av_freep(&ost->audio_channels_map);
542         ost->audio_channels_mapped = 0;
543
544         av_dict_free(&ost->sws_dict);
545
546         avcodec_free_context(&ost->enc_ctx);
547         avcodec_parameters_free(&ost->ref_par);
548
549         while (ost->muxing_queue && av_fifo_size(ost->muxing_queue)) {
550             AVPacket pkt;
551             av_fifo_generic_read(ost->muxing_queue, &pkt, sizeof(pkt), NULL);
552             av_packet_unref(&pkt);
553         }
554         av_fifo_freep(&ost->muxing_queue);
555
556         av_freep(&output_streams[i]);
557     }
558 #if HAVE_PTHREADS
559     free_input_threads();
560 #endif
561     for (i = 0; i < nb_input_files; i++) {
562         avformat_close_input(&input_files[i]->ctx);
563         av_freep(&input_files[i]);
564     }
565     for (i = 0; i < nb_input_streams; i++) {
566         InputStream *ist = input_streams[i];
567
568         av_frame_free(&ist->decoded_frame);
569         av_frame_free(&ist->filter_frame);
570         av_dict_free(&ist->decoder_opts);
571         avsubtitle_free(&ist->prev_sub.subtitle);
572         av_frame_free(&ist->sub2video.frame);
573         av_freep(&ist->filters);
574         av_freep(&ist->hwaccel_device);
575         av_freep(&ist->dts_buffer);
576
577         avcodec_free_context(&ist->dec_ctx);
578
579         av_freep(&input_streams[i]);
580     }
581
582     if (vstats_file) {
583         if (fclose(vstats_file))
584             av_log(NULL, AV_LOG_ERROR,
585                    "Error closing vstats file, loss of information possible: %s\n",
586                    av_err2str(AVERROR(errno)));
587     }
588     av_freep(&vstats_filename);
589
590     av_freep(&input_streams);
591     av_freep(&input_files);
592     av_freep(&output_streams);
593     av_freep(&output_files);
594
595     uninit_opts();
596
597     avformat_network_deinit();
598
599     if (received_sigterm) {
600         av_log(NULL, AV_LOG_INFO, "Exiting normally, received signal %d.\n",
601                (int) received_sigterm);
602     } else if (ret && transcode_init_done) {
603         av_log(NULL, AV_LOG_INFO, "Conversion failed!\n");
604     }
605     term_exit();
606     ffmpeg_exited = 1;
607 }
608
609 void remove_avoptions(AVDictionary **a, AVDictionary *b)
610 {
611     AVDictionaryEntry *t = NULL;
612
613     while ((t = av_dict_get(b, "", t, AV_DICT_IGNORE_SUFFIX))) {
614         av_dict_set(a, t->key, NULL, AV_DICT_MATCH_CASE);
615     }
616 }
617
618 void assert_avoptions(AVDictionary *m)
619 {
620     AVDictionaryEntry *t;
621     if ((t = av_dict_get(m, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
622         av_log(NULL, AV_LOG_FATAL, "Option %s not found.\n", t->key);
623         exit_program(1);
624     }
625 }
626
627 static void abort_codec_experimental(AVCodec *c, int encoder)
628 {
629     exit_program(1);
630 }
631
632 static void update_benchmark(const char *fmt, ...)
633 {
634     if (do_benchmark_all) {
635         int64_t t = getutime();
636         va_list va;
637         char buf[1024];
638
639         if (fmt) {
640             va_start(va, fmt);
641             vsnprintf(buf, sizeof(buf), fmt, va);
642             va_end(va);
643             av_log(NULL, AV_LOG_INFO, "bench: %8"PRIu64" %s \n", t - current_time, buf);
644         }
645         current_time = t;
646     }
647 }
648
649 static void close_all_output_streams(OutputStream *ost, OSTFinished this_stream, OSTFinished others)
650 {
651     int i;
652     for (i = 0; i < nb_output_streams; i++) {
653         OutputStream *ost2 = output_streams[i];
654         ost2->finished |= ost == ost2 ? this_stream : others;
655     }
656 }
657
658 static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost)
659 {
660     AVFormatContext *s = of->ctx;
661     AVStream *st = ost->st;
662     int ret;
663
664     if (!of->header_written) {
665         AVPacket tmp_pkt = {0};
666         /* the muxer is not initialized yet, buffer the packet */
667         if (!av_fifo_space(ost->muxing_queue)) {
668             int new_size = FFMIN(2 * av_fifo_size(ost->muxing_queue),
669                                  ost->max_muxing_queue_size);
670             if (new_size <= av_fifo_size(ost->muxing_queue)) {
671                 av_log(NULL, AV_LOG_ERROR,
672                        "Too many packets buffered for output stream %d:%d.\n",
673                        ost->file_index, ost->st->index);
674                 exit_program(1);
675             }
676             ret = av_fifo_realloc2(ost->muxing_queue, new_size);
677             if (ret < 0)
678                 exit_program(1);
679         }
680         ret = av_packet_ref(&tmp_pkt, pkt);
681         if (ret < 0)
682             exit_program(1);
683         av_fifo_generic_write(ost->muxing_queue, &tmp_pkt, sizeof(tmp_pkt), NULL);
684         av_packet_unref(pkt);
685         return;
686     }
687
688     if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && video_sync_method == VSYNC_DROP) ||
689         (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
690         pkt->pts = pkt->dts = AV_NOPTS_VALUE;
691
692     /*
693      * Audio encoders may split the packets --  #frames in != #packets out.
694      * But there is no reordering, so we can limit the number of output packets
695      * by simply dropping them here.
696      * Counting encoded video frames needs to be done separately because of
697      * reordering, see do_video_out()
698      */
699     if (!(st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->encoding_needed)) {
700         if (ost->frame_number >= ost->max_frames) {
701             av_packet_unref(pkt);
702             return;
703         }
704         ost->frame_number++;
705     }
706     if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
707         int i;
708         uint8_t *sd = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS,
709                                               NULL);
710         ost->quality = sd ? AV_RL32(sd) : -1;
711         ost->pict_type = sd ? sd[4] : AV_PICTURE_TYPE_NONE;
712
713         for (i = 0; i<FF_ARRAY_ELEMS(ost->error); i++) {
714             if (sd && i < sd[5])
715                 ost->error[i] = AV_RL64(sd + 8 + 8*i);
716             else
717                 ost->error[i] = -1;
718         }
719
720         if (ost->frame_rate.num && ost->is_cfr) {
721             if (pkt->duration > 0)
722                 av_log(NULL, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n");
723             pkt->duration = av_rescale_q(1, av_inv_q(ost->frame_rate),
724                                          ost->mux_timebase);
725         }
726     }
727
728     av_packet_rescale_ts(pkt, ost->mux_timebase, ost->st->time_base);
729
730     if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
731         if (pkt->dts != AV_NOPTS_VALUE &&
732             pkt->pts != AV_NOPTS_VALUE &&
733             pkt->dts > pkt->pts) {
734             av_log(s, AV_LOG_WARNING, "Invalid DTS: %"PRId64" PTS: %"PRId64" in output stream %d:%d, replacing by guess\n",
735                    pkt->dts, pkt->pts,
736                    ost->file_index, ost->st->index);
737             pkt->pts =
738             pkt->dts = pkt->pts + pkt->dts + ost->last_mux_dts + 1
739                      - FFMIN3(pkt->pts, pkt->dts, ost->last_mux_dts + 1)
740                      - FFMAX3(pkt->pts, pkt->dts, ost->last_mux_dts + 1);
741         }
742         if ((st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) &&
743             pkt->dts != AV_NOPTS_VALUE &&
744             !(st->codecpar->codec_id == AV_CODEC_ID_VP9 && ost->stream_copy) &&
745             ost->last_mux_dts != AV_NOPTS_VALUE) {
746             int64_t max = ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT);
747             if (pkt->dts < max) {
748                 int loglevel = max - pkt->dts > 2 || st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ? AV_LOG_WARNING : AV_LOG_DEBUG;
749                 av_log(s, loglevel, "Non-monotonous DTS in output stream "
750                        "%d:%d; previous: %"PRId64", current: %"PRId64"; ",
751                        ost->file_index, ost->st->index, ost->last_mux_dts, pkt->dts);
752                 if (exit_on_error) {
753                     av_log(NULL, AV_LOG_FATAL, "aborting.\n");
754                     exit_program(1);
755                 }
756                 av_log(s, loglevel, "changing to %"PRId64". This may result "
757                        "in incorrect timestamps in the output file.\n",
758                        max);
759                 if (pkt->pts >= pkt->dts)
760                     pkt->pts = FFMAX(pkt->pts, max);
761                 pkt->dts = max;
762             }
763         }
764     }
765     ost->last_mux_dts = pkt->dts;
766
767     ost->data_size += pkt->size;
768     ost->packets_written++;
769
770     pkt->stream_index = ost->index;
771
772     if (debug_ts) {
773         av_log(NULL, AV_LOG_INFO, "muxer <- type:%s "
774                 "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s size:%d\n",
775                 av_get_media_type_string(ost->enc_ctx->codec_type),
776                 av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &ost->st->time_base),
777                 av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &ost->st->time_base),
778                 pkt->size
779               );
780     }
781
782     ret = av_interleaved_write_frame(s, pkt);
783     if (ret < 0) {
784         print_error("av_interleaved_write_frame()", ret);
785         main_return_code = 1;
786         close_all_output_streams(ost, MUXER_FINISHED | ENCODER_FINISHED, ENCODER_FINISHED);
787     }
788     av_packet_unref(pkt);
789 }
790
791 static void close_output_stream(OutputStream *ost)
792 {
793     OutputFile *of = output_files[ost->file_index];
794
795     ost->finished |= ENCODER_FINISHED;
796     if (of->shortest) {
797         int64_t end = av_rescale_q(ost->sync_opts - ost->first_pts, ost->enc_ctx->time_base, AV_TIME_BASE_Q);
798         of->recording_time = FFMIN(of->recording_time, end);
799     }
800 }
801
802 static void output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost)
803 {
804     int ret = 0;
805
806     /* apply the output bitstream filters, if any */
807     if (ost->nb_bitstream_filters) {
808         int idx;
809
810         av_packet_split_side_data(pkt);
811         ret = av_bsf_send_packet(ost->bsf_ctx[0], pkt);
812         if (ret < 0)
813             goto finish;
814
815         idx = 1;
816         while (idx) {
817             /* get a packet from the previous filter up the chain */
818             ret = av_bsf_receive_packet(ost->bsf_ctx[idx - 1], pkt);
819             if (ret == AVERROR(EAGAIN)) {
820                 ret = 0;
821                 idx--;
822                 continue;
823             } else if (ret < 0)
824                 goto finish;
825             /* HACK! - aac_adtstoasc updates extradata after filtering the first frame when
826              * the api states this shouldn't happen after init(). Propagate it here to the
827              * muxer and to the next filters in the chain to workaround this.
828              * TODO/FIXME - Make aac_adtstoasc use new packet side data instead of changing
829              * par_out->extradata and adapt muxers accordingly to get rid of this. */
830             if (!(ost->bsf_extradata_updated[idx - 1] & 1)) {
831                 ret = avcodec_parameters_copy(ost->st->codecpar, ost->bsf_ctx[idx - 1]->par_out);
832                 if (ret < 0)
833                     goto finish;
834                 ost->bsf_extradata_updated[idx - 1] |= 1;
835             }
836
837             /* send it to the next filter down the chain or to the muxer */
838             if (idx < ost->nb_bitstream_filters) {
839                 /* HACK/FIXME! - See above */
840                 if (!(ost->bsf_extradata_updated[idx] & 2)) {
841                     ret = avcodec_parameters_copy(ost->bsf_ctx[idx]->par_out, ost->bsf_ctx[idx - 1]->par_out);
842                     if (ret < 0)
843                         goto finish;
844                     ost->bsf_extradata_updated[idx] |= 2;
845                 }
846                 ret = av_bsf_send_packet(ost->bsf_ctx[idx], pkt);
847                 if (ret < 0)
848                     goto finish;
849                 idx++;
850             } else
851                 write_packet(of, pkt, ost);
852         }
853     } else
854         write_packet(of, pkt, ost);
855
856 finish:
857     if (ret < 0 && ret != AVERROR_EOF) {
858         av_log(NULL, AV_LOG_ERROR, "Error applying bitstream filters to an output "
859                "packet for stream #%d:%d.\n", ost->file_index, ost->index);
860         if(exit_on_error)
861             exit_program(1);
862     }
863 }
864
865 static int check_recording_time(OutputStream *ost)
866 {
867     OutputFile *of = output_files[ost->file_index];
868
869     if (of->recording_time != INT64_MAX &&
870         av_compare_ts(ost->sync_opts - ost->first_pts, ost->enc_ctx->time_base, of->recording_time,
871                       AV_TIME_BASE_Q) >= 0) {
872         close_output_stream(ost);
873         return 0;
874     }
875     return 1;
876 }
877
878 static void do_audio_out(OutputFile *of, OutputStream *ost,
879                          AVFrame *frame)
880 {
881     AVCodecContext *enc = ost->enc_ctx;
882     AVPacket pkt;
883     int ret;
884
885     av_init_packet(&pkt);
886     pkt.data = NULL;
887     pkt.size = 0;
888
889     if (!check_recording_time(ost))
890         return;
891
892     if (frame->pts == AV_NOPTS_VALUE || audio_sync_method < 0)
893         frame->pts = ost->sync_opts;
894     ost->sync_opts = frame->pts + frame->nb_samples;
895     ost->samples_encoded += frame->nb_samples;
896     ost->frames_encoded++;
897
898     av_assert0(pkt.size || !pkt.data);
899     update_benchmark(NULL);
900     if (debug_ts) {
901         av_log(NULL, AV_LOG_INFO, "encoder <- type:audio "
902                "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n",
903                av_ts2str(frame->pts), av_ts2timestr(frame->pts, &enc->time_base),
904                enc->time_base.num, enc->time_base.den);
905     }
906
907     ret = avcodec_send_frame(enc, frame);
908     if (ret < 0)
909         goto error;
910
911     while (1) {
912         ret = avcodec_receive_packet(enc, &pkt);
913         if (ret == AVERROR(EAGAIN))
914             break;
915         if (ret < 0)
916             goto error;
917
918         update_benchmark("encode_audio %d.%d", ost->file_index, ost->index);
919
920         av_packet_rescale_ts(&pkt, enc->time_base, ost->mux_timebase);
921
922         if (debug_ts) {
923             av_log(NULL, AV_LOG_INFO, "encoder -> type:audio "
924                    "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
925                    av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &enc->time_base),
926                    av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &enc->time_base));
927         }
928
929         output_packet(of, &pkt, ost);
930     }
931
932     return;
933 error:
934     av_log(NULL, AV_LOG_FATAL, "Audio encoding failed\n");
935     exit_program(1);
936 }
937
938 static void do_subtitle_out(OutputFile *of,
939                             OutputStream *ost,
940                             AVSubtitle *sub)
941 {
942     int subtitle_out_max_size = 1024 * 1024;
943     int subtitle_out_size, nb, i;
944     AVCodecContext *enc;
945     AVPacket pkt;
946     int64_t pts;
947
948     if (sub->pts == AV_NOPTS_VALUE) {
949         av_log(NULL, AV_LOG_ERROR, "Subtitle packets must have a pts\n");
950         if (exit_on_error)
951             exit_program(1);
952         return;
953     }
954
955     enc = ost->enc_ctx;
956
957     if (!subtitle_out) {
958         subtitle_out = av_malloc(subtitle_out_max_size);
959         if (!subtitle_out) {
960             av_log(NULL, AV_LOG_FATAL, "Failed to allocate subtitle_out\n");
961             exit_program(1);
962         }
963     }
964
965     /* Note: DVB subtitle need one packet to draw them and one other
966        packet to clear them */
967     /* XXX: signal it in the codec context ? */
968     if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE)
969         nb = 2;
970     else
971         nb = 1;
972
973     /* shift timestamp to honor -ss and make check_recording_time() work with -t */
974     pts = sub->pts;
975     if (output_files[ost->file_index]->start_time != AV_NOPTS_VALUE)
976         pts -= output_files[ost->file_index]->start_time;
977     for (i = 0; i < nb; i++) {
978         unsigned save_num_rects = sub->num_rects;
979
980         ost->sync_opts = av_rescale_q(pts, AV_TIME_BASE_Q, enc->time_base);
981         if (!check_recording_time(ost))
982             return;
983
984         sub->pts = pts;
985         // start_display_time is required to be 0
986         sub->pts               += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, AV_TIME_BASE_Q);
987         sub->end_display_time  -= sub->start_display_time;
988         sub->start_display_time = 0;
989         if (i == 1)
990             sub->num_rects = 0;
991
992         ost->frames_encoded++;
993
994         subtitle_out_size = avcodec_encode_subtitle(enc, subtitle_out,
995                                                     subtitle_out_max_size, sub);
996         if (i == 1)
997             sub->num_rects = save_num_rects;
998         if (subtitle_out_size < 0) {
999             av_log(NULL, AV_LOG_FATAL, "Subtitle encoding failed\n");
1000             exit_program(1);
1001         }
1002
1003         av_init_packet(&pkt);
1004         pkt.data = subtitle_out;
1005         pkt.size = subtitle_out_size;
1006         pkt.pts  = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ost->mux_timebase);
1007         pkt.duration = av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase);
1008         if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE) {
1009             /* XXX: the pts correction is handled here. Maybe handling
1010                it in the codec would be better */
1011             if (i == 0)
1012                 pkt.pts += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase);
1013             else
1014                 pkt.pts += av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase);
1015         }
1016         pkt.dts = pkt.pts;
1017         output_packet(of, &pkt, ost);
1018     }
1019 }
1020
1021 static void do_video_out(OutputFile *of,
1022                          OutputStream *ost,
1023                          AVFrame *next_picture,
1024                          double sync_ipts)
1025 {
1026     int ret, format_video_sync;
1027     AVPacket pkt;
1028     AVCodecContext *enc = ost->enc_ctx;
1029     AVCodecParameters *mux_par = ost->st->codecpar;
1030     AVRational frame_rate;
1031     int nb_frames, nb0_frames, i;
1032     double delta, delta0;
1033     double duration = 0;
1034     int frame_size = 0;
1035     InputStream *ist = NULL;
1036     AVFilterContext *filter = ost->filter->filter;
1037
1038     if (ost->source_index >= 0)
1039         ist = input_streams[ost->source_index];
1040
1041     frame_rate = av_buffersink_get_frame_rate(filter);
1042     if (frame_rate.num > 0 && frame_rate.den > 0)
1043         duration = 1/(av_q2d(frame_rate) * av_q2d(enc->time_base));
1044
1045     if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->st->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num)
1046         duration = FFMIN(duration, 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base)));
1047
1048     if (!ost->filters_script &&
1049         !ost->filters &&
1050         next_picture &&
1051         ist &&
1052         lrintf(av_frame_get_pkt_duration(next_picture) * av_q2d(ist->st->time_base) / av_q2d(enc->time_base)) > 0) {
1053         duration = lrintf(av_frame_get_pkt_duration(next_picture) * av_q2d(ist->st->time_base) / av_q2d(enc->time_base));
1054     }
1055
1056     if (!next_picture) {
1057         //end, flushing
1058         nb0_frames = nb_frames = mid_pred(ost->last_nb0_frames[0],
1059                                           ost->last_nb0_frames[1],
1060                                           ost->last_nb0_frames[2]);
1061     } else {
1062         delta0 = sync_ipts - ost->sync_opts; // delta0 is the "drift" between the input frame (next_picture) and where it would fall in the output.
1063         delta  = delta0 + duration;
1064
1065         /* by default, we output a single frame */
1066         nb0_frames = 0; // tracks the number of times the PREVIOUS frame should be duplicated, mostly for variable framerate (VFR)
1067         nb_frames = 1;
1068
1069         format_video_sync = video_sync_method;
1070         if (format_video_sync == VSYNC_AUTO) {
1071             if(!strcmp(of->ctx->oformat->name, "avi")) {
1072                 format_video_sync = VSYNC_VFR;
1073             } else
1074                 format_video_sync = (of->ctx->oformat->flags & AVFMT_VARIABLE_FPS) ? ((of->ctx->oformat->flags & AVFMT_NOTIMESTAMPS) ? VSYNC_PASSTHROUGH : VSYNC_VFR) : VSYNC_CFR;
1075             if (   ist
1076                 && format_video_sync == VSYNC_CFR
1077                 && input_files[ist->file_index]->ctx->nb_streams == 1
1078                 && input_files[ist->file_index]->input_ts_offset == 0) {
1079                 format_video_sync = VSYNC_VSCFR;
1080             }
1081             if (format_video_sync == VSYNC_CFR && copy_ts) {
1082                 format_video_sync = VSYNC_VSCFR;
1083             }
1084         }
1085         ost->is_cfr = (format_video_sync == VSYNC_CFR || format_video_sync == VSYNC_VSCFR);
1086
1087         if (delta0 < 0 &&
1088             delta > 0 &&
1089             format_video_sync != VSYNC_PASSTHROUGH &&
1090             format_video_sync != VSYNC_DROP) {
1091             if (delta0 < -0.6) {
1092                 av_log(NULL, AV_LOG_WARNING, "Past duration %f too large\n", -delta0);
1093             } else
1094                 av_log(NULL, AV_LOG_DEBUG, "Clipping frame in rate conversion by %f\n", -delta0);
1095             sync_ipts = ost->sync_opts;
1096             duration += delta0;
1097             delta0 = 0;
1098         }
1099
1100         switch (format_video_sync) {
1101         case VSYNC_VSCFR:
1102             if (ost->frame_number == 0 && delta0 >= 0.5) {
1103                 av_log(NULL, AV_LOG_DEBUG, "Not duplicating %d initial frames\n", (int)lrintf(delta0));
1104                 delta = duration;
1105                 delta0 = 0;
1106                 ost->sync_opts = lrint(sync_ipts);
1107             }
1108         case VSYNC_CFR:
1109             // FIXME set to 0.5 after we fix some dts/pts bugs like in avidec.c
1110             if (frame_drop_threshold && delta < frame_drop_threshold && ost->frame_number) {
1111                 nb_frames = 0;
1112             } else if (delta < -1.1)
1113                 nb_frames = 0;
1114             else if (delta > 1.1) {
1115                 nb_frames = lrintf(delta);
1116                 if (delta0 > 1.1)
1117                     nb0_frames = lrintf(delta0 - 0.6);
1118             }
1119             break;
1120         case VSYNC_VFR:
1121             if (delta <= -0.6)
1122                 nb_frames = 0;
1123             else if (delta > 0.6)
1124                 ost->sync_opts = lrint(sync_ipts);
1125             break;
1126         case VSYNC_DROP:
1127         case VSYNC_PASSTHROUGH:
1128             ost->sync_opts = lrint(sync_ipts);
1129             break;
1130         default:
1131             av_assert0(0);
1132         }
1133     }
1134
1135     nb_frames = FFMIN(nb_frames, ost->max_frames - ost->frame_number);
1136     nb0_frames = FFMIN(nb0_frames, nb_frames);
1137
1138     memmove(ost->last_nb0_frames + 1,
1139             ost->last_nb0_frames,
1140             sizeof(ost->last_nb0_frames[0]) * (FF_ARRAY_ELEMS(ost->last_nb0_frames) - 1));
1141     ost->last_nb0_frames[0] = nb0_frames;
1142
1143     if (nb0_frames == 0 && ost->last_dropped) {
1144         nb_frames_drop++;
1145         av_log(NULL, AV_LOG_VERBOSE,
1146                "*** dropping frame %d from stream %d at ts %"PRId64"\n",
1147                ost->frame_number, ost->st->index, ost->last_frame->pts);
1148     }
1149     if (nb_frames > (nb0_frames && ost->last_dropped) + (nb_frames > nb0_frames)) {
1150         if (nb_frames > dts_error_threshold * 30) {
1151             av_log(NULL, AV_LOG_ERROR, "%d frame duplication too large, skipping\n", nb_frames - 1);
1152             nb_frames_drop++;
1153             return;
1154         }
1155         nb_frames_dup += nb_frames - (nb0_frames && ost->last_dropped) - (nb_frames > nb0_frames);
1156         av_log(NULL, AV_LOG_VERBOSE, "*** %d dup!\n", nb_frames - 1);
1157         if (nb_frames_dup > dup_warning) {
1158             av_log(NULL, AV_LOG_WARNING, "More than %d frames duplicated\n", dup_warning);
1159             dup_warning *= 10;
1160         }
1161     }
1162     ost->last_dropped = nb_frames == nb0_frames && next_picture;
1163
1164   /* duplicates frame if needed */
1165   for (i = 0; i < nb_frames; i++) {
1166     AVFrame *in_picture;
1167     av_init_packet(&pkt);
1168     pkt.data = NULL;
1169     pkt.size = 0;
1170
1171     if (i < nb0_frames && ost->last_frame) {
1172         in_picture = ost->last_frame;
1173     } else
1174         in_picture = next_picture;
1175
1176     if (!in_picture)
1177         return;
1178
1179     in_picture->pts = ost->sync_opts;
1180
1181 #if 1
1182     if (!check_recording_time(ost))
1183 #else
1184     if (ost->frame_number >= ost->max_frames)
1185 #endif
1186         return;
1187
1188 #if FF_API_LAVF_FMT_RAWPICTURE
1189     if (of->ctx->oformat->flags & AVFMT_RAWPICTURE &&
1190         enc->codec->id == AV_CODEC_ID_RAWVIDEO) {
1191         /* raw pictures are written as AVPicture structure to
1192            avoid any copies. We support temporarily the older
1193            method. */
1194         if (in_picture->interlaced_frame)
1195             mux_par->field_order = in_picture->top_field_first ? AV_FIELD_TB:AV_FIELD_BT;
1196         else
1197             mux_par->field_order = AV_FIELD_PROGRESSIVE;
1198         pkt.data   = (uint8_t *)in_picture;
1199         pkt.size   =  sizeof(AVPicture);
1200         pkt.pts    = av_rescale_q(in_picture->pts, enc->time_base, ost->mux_timebase);
1201         pkt.flags |= AV_PKT_FLAG_KEY;
1202
1203         output_packet(of, &pkt, ost);
1204     } else
1205 #endif
1206     {
1207         int forced_keyframe = 0;
1208         double pts_time;
1209
1210         if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&
1211             ost->top_field_first >= 0)
1212             in_picture->top_field_first = !!ost->top_field_first;
1213
1214         if (in_picture->interlaced_frame) {
1215             if (enc->codec->id == AV_CODEC_ID_MJPEG)
1216                 mux_par->field_order = in_picture->top_field_first ? AV_FIELD_TT:AV_FIELD_BB;
1217             else
1218                 mux_par->field_order = in_picture->top_field_first ? AV_FIELD_TB:AV_FIELD_BT;
1219         } else
1220             mux_par->field_order = AV_FIELD_PROGRESSIVE;
1221
1222         in_picture->quality = enc->global_quality;
1223         in_picture->pict_type = 0;
1224
1225         pts_time = in_picture->pts != AV_NOPTS_VALUE ?
1226             in_picture->pts * av_q2d(enc->time_base) : NAN;
1227         if (ost->forced_kf_index < ost->forced_kf_count &&
1228             in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) {
1229             ost->forced_kf_index++;
1230             forced_keyframe = 1;
1231         } else if (ost->forced_keyframes_pexpr) {
1232             double res;
1233             ost->forced_keyframes_expr_const_values[FKF_T] = pts_time;
1234             res = av_expr_eval(ost->forced_keyframes_pexpr,
1235                                ost->forced_keyframes_expr_const_values, NULL);
1236             ff_dlog(NULL, "force_key_frame: n:%f n_forced:%f prev_forced_n:%f t:%f prev_forced_t:%f -> res:%f\n",
1237                     ost->forced_keyframes_expr_const_values[FKF_N],
1238                     ost->forced_keyframes_expr_const_values[FKF_N_FORCED],
1239                     ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_N],
1240                     ost->forced_keyframes_expr_const_values[FKF_T],
1241                     ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_T],
1242                     res);
1243             if (res) {
1244                 forced_keyframe = 1;
1245                 ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_N] =
1246                     ost->forced_keyframes_expr_const_values[FKF_N];
1247                 ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_T] =
1248                     ost->forced_keyframes_expr_const_values[FKF_T];
1249                 ost->forced_keyframes_expr_const_values[FKF_N_FORCED] += 1;
1250             }
1251
1252             ost->forced_keyframes_expr_const_values[FKF_N] += 1;
1253         } else if (   ost->forced_keyframes
1254                    && !strncmp(ost->forced_keyframes, "source", 6)
1255                    && in_picture->key_frame==1) {
1256             forced_keyframe = 1;
1257         }
1258
1259         if (forced_keyframe) {
1260             in_picture->pict_type = AV_PICTURE_TYPE_I;
1261             av_log(NULL, AV_LOG_DEBUG, "Forced keyframe at time %f\n", pts_time);
1262         }
1263
1264         update_benchmark(NULL);
1265         if (debug_ts) {
1266             av_log(NULL, AV_LOG_INFO, "encoder <- type:video "
1267                    "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n",
1268                    av_ts2str(in_picture->pts), av_ts2timestr(in_picture->pts, &enc->time_base),
1269                    enc->time_base.num, enc->time_base.den);
1270         }
1271
1272         ost->frames_encoded++;
1273
1274         ret = avcodec_send_frame(enc, in_picture);
1275         if (ret < 0)
1276             goto error;
1277
1278         while (1) {
1279             ret = avcodec_receive_packet(enc, &pkt);
1280             update_benchmark("encode_video %d.%d", ost->file_index, ost->index);
1281             if (ret == AVERROR(EAGAIN))
1282                 break;
1283             if (ret < 0)
1284                 goto error;
1285
1286             if (debug_ts) {
1287                 av_log(NULL, AV_LOG_INFO, "encoder -> type:video "
1288                        "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
1289                        av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &enc->time_base),
1290                        av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &enc->time_base));
1291             }
1292
1293             if (pkt.pts == AV_NOPTS_VALUE && !(enc->codec->capabilities & AV_CODEC_CAP_DELAY))
1294                 pkt.pts = ost->sync_opts;
1295
1296             av_packet_rescale_ts(&pkt, enc->time_base, ost->mux_timebase);
1297
1298             if (debug_ts) {
1299                 av_log(NULL, AV_LOG_INFO, "encoder -> type:video "
1300                     "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s\n",
1301                     av_ts2str(pkt.pts), av_ts2timestr(pkt.pts, &ost->mux_timebase),
1302                     av_ts2str(pkt.dts), av_ts2timestr(pkt.dts, &ost->mux_timebase));
1303             }
1304
1305             frame_size = pkt.size;
1306             output_packet(of, &pkt, ost);
1307
1308             /* if two pass, output log */
1309             if (ost->logfile && enc->stats_out) {
1310                 fprintf(ost->logfile, "%s", enc->stats_out);
1311             }
1312         }
1313     }
1314     ost->sync_opts++;
1315     /*
1316      * For video, number of frames in == number of packets out.
1317      * But there may be reordering, so we can't throw away frames on encoder
1318      * flush, we need to limit them here, before they go into encoder.
1319      */
1320     ost->frame_number++;
1321
1322     if (vstats_filename && frame_size)
1323         do_video_stats(ost, frame_size);
1324   }
1325
1326     if (!ost->last_frame)
1327         ost->last_frame = av_frame_alloc();
1328     av_frame_unref(ost->last_frame);
1329     if (next_picture && ost->last_frame)
1330         av_frame_ref(ost->last_frame, next_picture);
1331     else
1332         av_frame_free(&ost->last_frame);
1333
1334     return;
1335 error:
1336     av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");
1337     exit_program(1);
1338 }
1339
1340 static double psnr(double d)
1341 {
1342     return -10.0 * log10(d);
1343 }
1344
1345 static void do_video_stats(OutputStream *ost, int frame_size)
1346 {
1347     AVCodecContext *enc;
1348     int frame_number;
1349     double ti1, bitrate, avg_bitrate;
1350
1351     /* this is executed just the first time do_video_stats is called */
1352     if (!vstats_file) {
1353         vstats_file = fopen(vstats_filename, "w");
1354         if (!vstats_file) {
1355             perror("fopen");
1356             exit_program(1);
1357         }
1358     }
1359
1360     enc = ost->enc_ctx;
1361     if (enc->codec_type == AVMEDIA_TYPE_VIDEO) {
1362         frame_number = ost->st->nb_frames;
1363         if (vstats_version <= 1) {
1364             fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number,
1365                     ost->quality / (float)FF_QP2LAMBDA);
1366         } else  {
1367             fprintf(vstats_file, "out= %2d st= %2d frame= %5d q= %2.1f ", ost->file_index, ost->index, frame_number,
1368                     ost->quality / (float)FF_QP2LAMBDA);
1369         }
1370
1371         if (ost->error[0]>=0 && (enc->flags & AV_CODEC_FLAG_PSNR))
1372             fprintf(vstats_file, "PSNR= %6.2f ", psnr(ost->error[0] / (enc->width * enc->height * 255.0 * 255.0)));
1373
1374         fprintf(vstats_file,"f_size= %6d ", frame_size);
1375         /* compute pts value */
1376         ti1 = av_stream_get_end_pts(ost->st) * av_q2d(ost->st->time_base);
1377         if (ti1 < 0.01)
1378             ti1 = 0.01;
1379
1380         bitrate     = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0;
1381         avg_bitrate = (double)(ost->data_size * 8) / ti1 / 1000.0;
1382         fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
1383                (double)ost->data_size / 1024, ti1, bitrate, avg_bitrate);
1384         fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(ost->pict_type));
1385     }
1386 }
1387
1388 static int init_output_stream(OutputStream *ost, char *error, int error_len);
1389
1390 static void finish_output_stream(OutputStream *ost)
1391 {
1392     OutputFile *of = output_files[ost->file_index];
1393     int i;
1394
1395     ost->finished = ENCODER_FINISHED | MUXER_FINISHED;
1396
1397     if (of->shortest) {
1398         for (i = 0; i < of->ctx->nb_streams; i++)
1399             output_streams[of->ost_index + i]->finished = ENCODER_FINISHED | MUXER_FINISHED;
1400     }
1401 }
1402
1403 /**
1404  * Get and encode new output from any of the filtergraphs, without causing
1405  * activity.
1406  *
1407  * @return  0 for success, <0 for severe errors
1408  */
1409 static int reap_filters(int flush)
1410 {
1411     AVFrame *filtered_frame = NULL;
1412     int i;
1413
1414     /* Reap all buffers present in the buffer sinks */
1415     for (i = 0; i < nb_output_streams; i++) {
1416         OutputStream *ost = output_streams[i];
1417         OutputFile    *of = output_files[ost->file_index];
1418         AVFilterContext *filter;
1419         AVCodecContext *enc = ost->enc_ctx;
1420         int ret = 0;
1421
1422         if (!ost->filter || !ost->filter->graph->graph)
1423             continue;
1424         filter = ost->filter->filter;
1425
1426         if (!ost->initialized) {
1427             char error[1024];
1428             ret = init_output_stream(ost, error, sizeof(error));
1429             if (ret < 0) {
1430                 av_log(NULL, AV_LOG_ERROR, "Error initializing output stream %d:%d -- %s\n",
1431                        ost->file_index, ost->index, error);
1432                 exit_program(1);
1433             }
1434         }
1435
1436         if (!ost->filtered_frame && !(ost->filtered_frame = av_frame_alloc())) {
1437             return AVERROR(ENOMEM);
1438         }
1439         filtered_frame = ost->filtered_frame;
1440
1441         while (1) {
1442             double float_pts = AV_NOPTS_VALUE; // this is identical to filtered_frame.pts but with higher precision
1443             ret = av_buffersink_get_frame_flags(filter, filtered_frame,
1444                                                AV_BUFFERSINK_FLAG_NO_REQUEST);
1445             if (ret < 0) {
1446                 if (ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) {
1447                     av_log(NULL, AV_LOG_WARNING,
1448                            "Error in av_buffersink_get_frame_flags(): %s\n", av_err2str(ret));
1449                 } else if (flush && ret == AVERROR_EOF) {
1450                     if (av_buffersink_get_type(filter) == AVMEDIA_TYPE_VIDEO)
1451                         do_video_out(of, ost, NULL, AV_NOPTS_VALUE);
1452                 }
1453                 break;
1454             }
1455             if (ost->finished) {
1456                 av_frame_unref(filtered_frame);
1457                 continue;
1458             }
1459             if (filtered_frame->pts != AV_NOPTS_VALUE) {
1460                 int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
1461                 AVRational filter_tb = av_buffersink_get_time_base(filter);
1462                 AVRational tb = enc->time_base;
1463                 int extra_bits = av_clip(29 - av_log2(tb.den), 0, 16);
1464
1465                 tb.den <<= extra_bits;
1466                 float_pts =
1467                     av_rescale_q(filtered_frame->pts, filter_tb, tb) -
1468                     av_rescale_q(start_time, AV_TIME_BASE_Q, tb);
1469                 float_pts /= 1 << extra_bits;
1470                 // avoid exact midoints to reduce the chance of rounding differences, this can be removed in case the fps code is changed to work with integers
1471                 float_pts += FFSIGN(float_pts) * 1.0 / (1<<17);
1472
1473                 filtered_frame->pts =
1474                     av_rescale_q(filtered_frame->pts, filter_tb, enc->time_base) -
1475                     av_rescale_q(start_time, AV_TIME_BASE_Q, enc->time_base);
1476             }
1477             //if (ost->source_index >= 0)
1478             //    *filtered_frame= *input_streams[ost->source_index]->decoded_frame; //for me_threshold
1479
1480             switch (av_buffersink_get_type(filter)) {
1481             case AVMEDIA_TYPE_VIDEO:
1482                 if (!ost->frame_aspect_ratio.num)
1483                     enc->sample_aspect_ratio = filtered_frame->sample_aspect_ratio;
1484
1485                 if (debug_ts) {
1486                     av_log(NULL, AV_LOG_INFO, "filter -> pts:%s pts_time:%s exact:%f time_base:%d/%d\n",
1487                             av_ts2str(filtered_frame->pts), av_ts2timestr(filtered_frame->pts, &enc->time_base),
1488                             float_pts,
1489                             enc->time_base.num, enc->time_base.den);
1490                 }
1491
1492                 do_video_out(of, ost, filtered_frame, float_pts);
1493                 break;
1494             case AVMEDIA_TYPE_AUDIO:
1495                 if (!(enc->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE) &&
1496                     enc->channels != av_frame_get_channels(filtered_frame)) {
1497                     av_log(NULL, AV_LOG_ERROR,
1498                            "Audio filter graph output is not normalized and encoder does not support parameter changes\n");
1499                     break;
1500                 }
1501                 do_audio_out(of, ost, filtered_frame);
1502                 break;
1503             default:
1504                 // TODO support subtitle filters
1505                 av_assert0(0);
1506             }
1507
1508             av_frame_unref(filtered_frame);
1509         }
1510     }
1511
1512     return 0;
1513 }
1514
1515 static void print_final_stats(int64_t total_size)
1516 {
1517     uint64_t video_size = 0, audio_size = 0, extra_size = 0, other_size = 0;
1518     uint64_t subtitle_size = 0;
1519     uint64_t data_size = 0;
1520     float percent = -1.0;
1521     int i, j;
1522     int pass1_used = 1;
1523
1524     for (i = 0; i < nb_output_streams; i++) {
1525         OutputStream *ost = output_streams[i];
1526         switch (ost->enc_ctx->codec_type) {
1527             case AVMEDIA_TYPE_VIDEO: video_size += ost->data_size; break;
1528             case AVMEDIA_TYPE_AUDIO: audio_size += ost->data_size; break;
1529             case AVMEDIA_TYPE_SUBTITLE: subtitle_size += ost->data_size; break;
1530             default:                 other_size += ost->data_size; break;
1531         }
1532         extra_size += ost->enc_ctx->extradata_size;
1533         data_size  += ost->data_size;
1534         if (   (ost->enc_ctx->flags & (AV_CODEC_FLAG_PASS1 | CODEC_FLAG_PASS2))
1535             != AV_CODEC_FLAG_PASS1)
1536             pass1_used = 0;
1537     }
1538
1539     if (data_size && total_size>0 && total_size >= data_size)
1540         percent = 100.0 * (total_size - data_size) / data_size;
1541
1542     av_log(NULL, AV_LOG_INFO, "video:%1.0fkB audio:%1.0fkB subtitle:%1.0fkB other streams:%1.0fkB global headers:%1.0fkB muxing overhead: ",
1543            video_size / 1024.0,
1544            audio_size / 1024.0,
1545            subtitle_size / 1024.0,
1546            other_size / 1024.0,
1547            extra_size / 1024.0);
1548     if (percent >= 0.0)
1549         av_log(NULL, AV_LOG_INFO, "%f%%", percent);
1550     else
1551         av_log(NULL, AV_LOG_INFO, "unknown");
1552     av_log(NULL, AV_LOG_INFO, "\n");
1553
1554     /* print verbose per-stream stats */
1555     for (i = 0; i < nb_input_files; i++) {
1556         InputFile *f = input_files[i];
1557         uint64_t total_packets = 0, total_size = 0;
1558
1559         av_log(NULL, AV_LOG_VERBOSE, "Input file #%d (%s):\n",
1560                i, f->ctx->filename);
1561
1562         for (j = 0; j < f->nb_streams; j++) {
1563             InputStream *ist = input_streams[f->ist_index + j];
1564             enum AVMediaType type = ist->dec_ctx->codec_type;
1565
1566             total_size    += ist->data_size;
1567             total_packets += ist->nb_packets;
1568
1569             av_log(NULL, AV_LOG_VERBOSE, "  Input stream #%d:%d (%s): ",
1570                    i, j, media_type_string(type));
1571             av_log(NULL, AV_LOG_VERBOSE, "%"PRIu64" packets read (%"PRIu64" bytes); ",
1572                    ist->nb_packets, ist->data_size);
1573
1574             if (ist->decoding_needed) {
1575                 av_log(NULL, AV_LOG_VERBOSE, "%"PRIu64" frames decoded",
1576                        ist->frames_decoded);
1577                 if (type == AVMEDIA_TYPE_AUDIO)
1578                     av_log(NULL, AV_LOG_VERBOSE, " (%"PRIu64" samples)", ist->samples_decoded);
1579                 av_log(NULL, AV_LOG_VERBOSE, "; ");
1580             }
1581
1582             av_log(NULL, AV_LOG_VERBOSE, "\n");
1583         }
1584
1585         av_log(NULL, AV_LOG_VERBOSE, "  Total: %"PRIu64" packets (%"PRIu64" bytes) demuxed\n",
1586                total_packets, total_size);
1587     }
1588
1589     for (i = 0; i < nb_output_files; i++) {
1590         OutputFile *of = output_files[i];
1591         uint64_t total_packets = 0, total_size = 0;
1592
1593         av_log(NULL, AV_LOG_VERBOSE, "Output file #%d (%s):\n",
1594                i, of->ctx->filename);
1595
1596         for (j = 0; j < of->ctx->nb_streams; j++) {
1597             OutputStream *ost = output_streams[of->ost_index + j];
1598             enum AVMediaType type = ost->enc_ctx->codec_type;
1599
1600             total_size    += ost->data_size;
1601             total_packets += ost->packets_written;
1602
1603             av_log(NULL, AV_LOG_VERBOSE, "  Output stream #%d:%d (%s): ",
1604                    i, j, media_type_string(type));
1605             if (ost->encoding_needed) {
1606                 av_log(NULL, AV_LOG_VERBOSE, "%"PRIu64" frames encoded",
1607                        ost->frames_encoded);
1608                 if (type == AVMEDIA_TYPE_AUDIO)
1609                     av_log(NULL, AV_LOG_VERBOSE, " (%"PRIu64" samples)", ost->samples_encoded);
1610                 av_log(NULL, AV_LOG_VERBOSE, "; ");
1611             }
1612
1613             av_log(NULL, AV_LOG_VERBOSE, "%"PRIu64" packets muxed (%"PRIu64" bytes); ",
1614                    ost->packets_written, ost->data_size);
1615
1616             av_log(NULL, AV_LOG_VERBOSE, "\n");
1617         }
1618
1619         av_log(NULL, AV_LOG_VERBOSE, "  Total: %"PRIu64" packets (%"PRIu64" bytes) muxed\n",
1620                total_packets, total_size);
1621     }
1622     if(video_size + data_size + audio_size + subtitle_size + extra_size == 0){
1623         av_log(NULL, AV_LOG_WARNING, "Output file is empty, nothing was encoded ");
1624         if (pass1_used) {
1625             av_log(NULL, AV_LOG_WARNING, "\n");
1626         } else {
1627             av_log(NULL, AV_LOG_WARNING, "(check -ss / -t / -frames parameters if used)\n");
1628         }
1629     }
1630 }
1631
1632 static void print_report(int is_last_report, int64_t timer_start, int64_t cur_time)
1633 {
1634     char buf[1024];
1635     AVBPrint buf_script;
1636     OutputStream *ost;
1637     AVFormatContext *oc;
1638     int64_t total_size;
1639     AVCodecContext *enc;
1640     int frame_number, vid, i;
1641     double bitrate;
1642     double speed;
1643     int64_t pts = INT64_MIN + 1;
1644     static int64_t last_time = -1;
1645     static int qp_histogram[52];
1646     int hours, mins, secs, us;
1647     int ret;
1648     float t;
1649
1650     if (!print_stats && !is_last_report && !progress_avio)
1651         return;
1652
1653     if (!is_last_report) {
1654         if (last_time == -1) {
1655             last_time = cur_time;
1656             return;
1657         }
1658         if ((cur_time - last_time) < 500000)
1659             return;
1660         last_time = cur_time;
1661     }
1662
1663     t = (cur_time-timer_start) / 1000000.0;
1664
1665
1666     oc = output_files[0]->ctx;
1667
1668     total_size = avio_size(oc->pb);
1669     if (total_size <= 0) // FIXME improve avio_size() so it works with non seekable output too
1670         total_size = avio_tell(oc->pb);
1671
1672     buf[0] = '\0';
1673     vid = 0;
1674     av_bprint_init(&buf_script, 0, 1);
1675     for (i = 0; i < nb_output_streams; i++) {
1676         float q = -1;
1677         ost = output_streams[i];
1678         enc = ost->enc_ctx;
1679         if (!ost->stream_copy)
1680             q = ost->quality / (float) FF_QP2LAMBDA;
1681
1682         if (vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) {
1683             snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "q=%2.1f ", q);
1684             av_bprintf(&buf_script, "stream_%d_%d_q=%.1f\n",
1685                        ost->file_index, ost->index, q);
1686         }
1687         if (!vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) {
1688             float fps;
1689
1690             frame_number = ost->frame_number;
1691             fps = t > 1 ? frame_number / t : 0;
1692             snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "frame=%5d fps=%3.*f q=%3.1f ",
1693                      frame_number, fps < 9.95, fps, q);
1694             av_bprintf(&buf_script, "frame=%d\n", frame_number);
1695             av_bprintf(&buf_script, "fps=%.1f\n", fps);
1696             av_bprintf(&buf_script, "stream_%d_%d_q=%.1f\n",
1697                        ost->file_index, ost->index, q);
1698             if (is_last_report)
1699                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "L");
1700             if (qp_hist) {
1701                 int j;
1702                 int qp = lrintf(q);
1703                 if (qp >= 0 && qp < FF_ARRAY_ELEMS(qp_histogram))
1704                     qp_histogram[qp]++;
1705                 for (j = 0; j < 32; j++)
1706                     snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%X", av_log2(qp_histogram[j] + 1));
1707             }
1708
1709             if ((enc->flags & AV_CODEC_FLAG_PSNR) && (ost->pict_type != AV_PICTURE_TYPE_NONE || is_last_report)) {
1710                 int j;
1711                 double error, error_sum = 0;
1712                 double scale, scale_sum = 0;
1713                 double p;
1714                 char type[3] = { 'Y','U','V' };
1715                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "PSNR=");
1716                 for (j = 0; j < 3; j++) {
1717                     if (is_last_report) {
1718                         error = enc->error[j];
1719                         scale = enc->width * enc->height * 255.0 * 255.0 * frame_number;
1720                     } else {
1721                         error = ost->error[j];
1722                         scale = enc->width * enc->height * 255.0 * 255.0;
1723                     }
1724                     if (j)
1725                         scale /= 4;
1726                     error_sum += error;
1727                     scale_sum += scale;
1728                     p = psnr(error / scale);
1729                     snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%c:%2.2f ", type[j], p);
1730                     av_bprintf(&buf_script, "stream_%d_%d_psnr_%c=%2.2f\n",
1731                                ost->file_index, ost->index, type[j] | 32, p);
1732                 }
1733                 p = psnr(error_sum / scale_sum);
1734                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "*:%2.2f ", psnr(error_sum / scale_sum));
1735                 av_bprintf(&buf_script, "stream_%d_%d_psnr_all=%2.2f\n",
1736                            ost->file_index, ost->index, p);
1737             }
1738             vid = 1;
1739         }
1740         /* compute min output value */
1741         if (av_stream_get_end_pts(ost->st) != AV_NOPTS_VALUE)
1742             pts = FFMAX(pts, av_rescale_q(av_stream_get_end_pts(ost->st),
1743                                           ost->st->time_base, AV_TIME_BASE_Q));
1744         if (is_last_report)
1745             nb_frames_drop += ost->last_dropped;
1746     }
1747
1748     secs = FFABS(pts) / AV_TIME_BASE;
1749     us = FFABS(pts) % AV_TIME_BASE;
1750     mins = secs / 60;
1751     secs %= 60;
1752     hours = mins / 60;
1753     mins %= 60;
1754
1755     bitrate = pts && total_size >= 0 ? total_size * 8 / (pts / 1000.0) : -1;
1756     speed = t != 0.0 ? (double)pts / AV_TIME_BASE / t : -1;
1757
1758     if (total_size < 0) snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
1759                                  "size=N/A time=");
1760     else                snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
1761                                  "size=%8.0fkB time=", total_size / 1024.0);
1762     if (pts < 0)
1763         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "-");
1764     snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
1765              "%02d:%02d:%02d.%02d ", hours, mins, secs,
1766              (100 * us) / AV_TIME_BASE);
1767
1768     if (bitrate < 0) {
1769         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),"bitrate=N/A");
1770         av_bprintf(&buf_script, "bitrate=N/A\n");
1771     }else{
1772         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),"bitrate=%6.1fkbits/s", bitrate);
1773         av_bprintf(&buf_script, "bitrate=%6.1fkbits/s\n", bitrate);
1774     }
1775
1776     if (total_size < 0) av_bprintf(&buf_script, "total_size=N/A\n");
1777     else                av_bprintf(&buf_script, "total_size=%"PRId64"\n", total_size);
1778     av_bprintf(&buf_script, "out_time_ms=%"PRId64"\n", pts);
1779     av_bprintf(&buf_script, "out_time=%02d:%02d:%02d.%06d\n",
1780                hours, mins, secs, us);
1781
1782     if (nb_frames_dup || nb_frames_drop)
1783         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " dup=%d drop=%d",
1784                 nb_frames_dup, nb_frames_drop);
1785     av_bprintf(&buf_script, "dup_frames=%d\n", nb_frames_dup);
1786     av_bprintf(&buf_script, "drop_frames=%d\n", nb_frames_drop);
1787
1788     if (speed < 0) {
1789         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf)," speed=N/A");
1790         av_bprintf(&buf_script, "speed=N/A\n");
1791     } else {
1792         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf)," speed=%4.3gx", speed);
1793         av_bprintf(&buf_script, "speed=%4.3gx\n", speed);
1794     }
1795
1796     if (print_stats || is_last_report) {
1797         const char end = is_last_report ? '\n' : '\r';
1798         if (print_stats==1 && AV_LOG_INFO > av_log_get_level()) {
1799             fprintf(stderr, "%s    %c", buf, end);
1800         } else
1801             av_log(NULL, AV_LOG_INFO, "%s    %c", buf, end);
1802
1803     fflush(stderr);
1804     }
1805
1806     if (progress_avio) {
1807         av_bprintf(&buf_script, "progress=%s\n",
1808                    is_last_report ? "end" : "continue");
1809         avio_write(progress_avio, buf_script.str,
1810                    FFMIN(buf_script.len, buf_script.size - 1));
1811         avio_flush(progress_avio);
1812         av_bprint_finalize(&buf_script, NULL);
1813         if (is_last_report) {
1814             if ((ret = avio_closep(&progress_avio)) < 0)
1815                 av_log(NULL, AV_LOG_ERROR,
1816                        "Error closing progress log, loss of information possible: %s\n", av_err2str(ret));
1817         }
1818     }
1819
1820     if (is_last_report)
1821         print_final_stats(total_size);
1822 }
1823
1824 static void flush_encoders(void)
1825 {
1826     int i, ret;
1827
1828     for (i = 0; i < nb_output_streams; i++) {
1829         OutputStream   *ost = output_streams[i];
1830         AVCodecContext *enc = ost->enc_ctx;
1831         OutputFile      *of = output_files[ost->file_index];
1832
1833         if (!ost->encoding_needed)
1834             continue;
1835
1836         // Try to enable encoding with no input frames.
1837         // Maybe we should just let encoding fail instead.
1838         if (!ost->initialized) {
1839             FilterGraph *fg = ost->filter->graph;
1840             char error[1024];
1841
1842             av_log(NULL, AV_LOG_WARNING,
1843                    "Finishing stream %d:%d without any data written to it.\n",
1844                    ost->file_index, ost->st->index);
1845
1846             if (ost->filter && !fg->graph) {
1847                 int x;
1848                 for (x = 0; x < fg->nb_inputs; x++) {
1849                     InputFilter *ifilter = fg->inputs[x];
1850                     if (ifilter->format < 0) {
1851                         AVCodecParameters *par = ifilter->ist->st->codecpar;
1852                         // We never got any input. Set a fake format, which will
1853                         // come from libavformat.
1854                         ifilter->format                 = par->format;
1855                         ifilter->sample_rate            = par->sample_rate;
1856                         ifilter->channels               = par->channels;
1857                         ifilter->channel_layout         = par->channel_layout;
1858                         ifilter->width                  = par->width;
1859                         ifilter->height                 = par->height;
1860                         ifilter->sample_aspect_ratio    = par->sample_aspect_ratio;
1861                     }
1862                 }
1863
1864                 if (!ifilter_has_all_input_formats(fg))
1865                     continue;
1866
1867                 ret = configure_filtergraph(fg);
1868                 if (ret < 0) {
1869                     av_log(NULL, AV_LOG_ERROR, "Error configuring filter graph\n");
1870                     exit_program(1);
1871                 }
1872
1873                 finish_output_stream(ost);
1874             }
1875
1876             ret = init_output_stream(ost, error, sizeof(error));
1877             if (ret < 0) {
1878                 av_log(NULL, AV_LOG_ERROR, "Error initializing output stream %d:%d -- %s\n",
1879                        ost->file_index, ost->index, error);
1880                 exit_program(1);
1881             }
1882         }
1883
1884         if (enc->codec_type == AVMEDIA_TYPE_AUDIO && enc->frame_size <= 1)
1885             continue;
1886 #if FF_API_LAVF_FMT_RAWPICTURE
1887         if (enc->codec_type == AVMEDIA_TYPE_VIDEO && (of->ctx->oformat->flags & AVFMT_RAWPICTURE) && enc->codec->id == AV_CODEC_ID_RAWVIDEO)
1888             continue;
1889 #endif
1890
1891         if (enc->codec_type != AVMEDIA_TYPE_VIDEO && enc->codec_type != AVMEDIA_TYPE_AUDIO)
1892             continue;
1893
1894         avcodec_send_frame(enc, NULL);
1895
1896         for (;;) {
1897             const char *desc = NULL;
1898             AVPacket pkt;
1899             int pkt_size;
1900
1901             switch (enc->codec_type) {
1902             case AVMEDIA_TYPE_AUDIO:
1903                 desc   = "audio";
1904                 break;
1905             case AVMEDIA_TYPE_VIDEO:
1906                 desc   = "video";
1907                 break;
1908             default:
1909                 av_assert0(0);
1910             }
1911
1912                 av_init_packet(&pkt);
1913                 pkt.data = NULL;
1914                 pkt.size = 0;
1915
1916                 update_benchmark(NULL);
1917                 ret = avcodec_receive_packet(enc, &pkt);
1918                 update_benchmark("flush_%s %d.%d", desc, ost->file_index, ost->index);
1919                 if (ret < 0 && ret != AVERROR_EOF) {
1920                     av_log(NULL, AV_LOG_FATAL, "%s encoding failed: %s\n",
1921                            desc,
1922                            av_err2str(ret));
1923                     exit_program(1);
1924                 }
1925                 if (ost->logfile && enc->stats_out) {
1926                     fprintf(ost->logfile, "%s", enc->stats_out);
1927                 }
1928                 if (ret == AVERROR_EOF) {
1929                     break;
1930                 }
1931                 if (ost->finished & MUXER_FINISHED) {
1932                     av_packet_unref(&pkt);
1933                     continue;
1934                 }
1935                 av_packet_rescale_ts(&pkt, enc->time_base, ost->mux_timebase);
1936                 pkt_size = pkt.size;
1937                 output_packet(of, &pkt, ost);
1938                 if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO && vstats_filename) {
1939                     do_video_stats(ost, pkt_size);
1940                 }
1941         }
1942     }
1943 }
1944
1945 /*
1946  * Check whether a packet from ist should be written into ost at this time
1947  */
1948 static int check_output_constraints(InputStream *ist, OutputStream *ost)
1949 {
1950     OutputFile *of = output_files[ost->file_index];
1951     int ist_index  = input_files[ist->file_index]->ist_index + ist->st->index;
1952
1953     if (ost->source_index != ist_index)
1954         return 0;
1955
1956     if (ost->finished)
1957         return 0;
1958
1959     if (of->start_time != AV_NOPTS_VALUE && ist->pts < of->start_time)
1960         return 0;
1961
1962     return 1;
1963 }
1964
1965 static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *pkt)
1966 {
1967     OutputFile *of = output_files[ost->file_index];
1968     InputFile   *f = input_files [ist->file_index];
1969     int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time;
1970     int64_t ost_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ost->mux_timebase);
1971     AVPicture pict;
1972     AVPacket opkt;
1973
1974     av_init_packet(&opkt);
1975
1976     if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) &&
1977         !ost->copy_initial_nonkeyframes)
1978         return;
1979
1980     if (!ost->frame_number && !ost->copy_prior_start) {
1981         int64_t comp_start = start_time;
1982         if (copy_ts && f->start_time != AV_NOPTS_VALUE)
1983             comp_start = FFMAX(start_time, f->start_time + f->ts_offset);
1984         if (pkt->pts == AV_NOPTS_VALUE ?
1985             ist->pts < comp_start :
1986             pkt->pts < av_rescale_q(comp_start, AV_TIME_BASE_Q, ist->st->time_base))
1987             return;
1988     }
1989
1990     if (of->recording_time != INT64_MAX &&
1991         ist->pts >= of->recording_time + start_time) {
1992         close_output_stream(ost);
1993         return;
1994     }
1995
1996     if (f->recording_time != INT64_MAX) {
1997         start_time = f->ctx->start_time;
1998         if (f->start_time != AV_NOPTS_VALUE && copy_ts)
1999             start_time += f->start_time;
2000         if (ist->pts >= f->recording_time + start_time) {
2001             close_output_stream(ost);
2002             return;
2003         }
2004     }
2005
2006     /* force the input stream PTS */
2007     if (ost->enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO)
2008         ost->sync_opts++;
2009
2010     if (pkt->pts != AV_NOPTS_VALUE)
2011         opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->mux_timebase) - ost_tb_start_time;
2012     else
2013         opkt.pts = AV_NOPTS_VALUE;
2014
2015     if (pkt->dts == AV_NOPTS_VALUE)
2016         opkt.dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ost->mux_timebase);
2017     else
2018         opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->mux_timebase);
2019     opkt.dts -= ost_tb_start_time;
2020
2021     if (ost->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && pkt->dts != AV_NOPTS_VALUE) {
2022         int duration = av_get_audio_frame_duration(ist->dec_ctx, pkt->size);
2023         if(!duration)
2024             duration = ist->dec_ctx->frame_size;
2025         opkt.dts = opkt.pts = av_rescale_delta(ist->st->time_base, pkt->dts,
2026                                                (AVRational){1, ist->dec_ctx->sample_rate}, duration, &ist->filter_in_rescale_delta_last,
2027                                                ost->mux_timebase) - ost_tb_start_time;
2028     }
2029
2030     opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->mux_timebase);
2031
2032     opkt.flags    = pkt->flags;
2033     // FIXME remove the following 2 lines they shall be replaced by the bitstream filters
2034     if (  ost->st->codecpar->codec_id != AV_CODEC_ID_H264
2035        && ost->st->codecpar->codec_id != AV_CODEC_ID_MPEG1VIDEO
2036        && ost->st->codecpar->codec_id != AV_CODEC_ID_MPEG2VIDEO
2037        && ost->st->codecpar->codec_id != AV_CODEC_ID_VC1
2038        ) {
2039         int ret = av_parser_change(ost->parser, ost->parser_avctx,
2040                              &opkt.data, &opkt.size,
2041                              pkt->data, pkt->size,
2042                              pkt->flags & AV_PKT_FLAG_KEY);
2043         if (ret < 0) {
2044             av_log(NULL, AV_LOG_FATAL, "av_parser_change failed: %s\n",
2045                    av_err2str(ret));
2046             exit_program(1);
2047         }
2048         if (ret) {
2049             opkt.buf = av_buffer_create(opkt.data, opkt.size, av_buffer_default_free, NULL, 0);
2050             if (!opkt.buf)
2051                 exit_program(1);
2052         }
2053     } else {
2054         opkt.data = pkt->data;
2055         opkt.size = pkt->size;
2056     }
2057     av_copy_packet_side_data(&opkt, pkt);
2058
2059 #if FF_API_LAVF_FMT_RAWPICTURE
2060     if (ost->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
2061         ost->st->codecpar->codec_id == AV_CODEC_ID_RAWVIDEO &&
2062         (of->ctx->oformat->flags & AVFMT_RAWPICTURE)) {
2063         /* store AVPicture in AVPacket, as expected by the output format */
2064         int ret = avpicture_fill(&pict, opkt.data, ost->st->codecpar->format, ost->st->codecpar->width, ost->st->codecpar->height);
2065         if (ret < 0) {
2066             av_log(NULL, AV_LOG_FATAL, "avpicture_fill failed: %s\n",
2067                    av_err2str(ret));
2068             exit_program(1);
2069         }
2070         opkt.data = (uint8_t *)&pict;
2071         opkt.size = sizeof(AVPicture);
2072         opkt.flags |= AV_PKT_FLAG_KEY;
2073     }
2074 #endif
2075
2076     output_packet(of, &opkt, ost);
2077 }
2078
2079 int guess_input_channel_layout(InputStream *ist)
2080 {
2081     AVCodecContext *dec = ist->dec_ctx;
2082
2083     if (!dec->channel_layout) {
2084         char layout_name[256];
2085
2086         if (dec->channels > ist->guess_layout_max)
2087             return 0;
2088         dec->channel_layout = av_get_default_channel_layout(dec->channels);
2089         if (!dec->channel_layout)
2090             return 0;
2091         av_get_channel_layout_string(layout_name, sizeof(layout_name),
2092                                      dec->channels, dec->channel_layout);
2093         av_log(NULL, AV_LOG_WARNING, "Guessed Channel Layout for Input Stream "
2094                "#%d.%d : %s\n", ist->file_index, ist->st->index, layout_name);
2095     }
2096     return 1;
2097 }
2098
2099 static void check_decode_result(InputStream *ist, int *got_output, int ret)
2100 {
2101     if (*got_output || ret<0)
2102         decode_error_stat[ret<0] ++;
2103
2104     if (ret < 0 && exit_on_error)
2105         exit_program(1);
2106
2107     if (exit_on_error && *got_output && ist) {
2108         if (av_frame_get_decode_error_flags(ist->decoded_frame) || (ist->decoded_frame->flags & AV_FRAME_FLAG_CORRUPT)) {
2109             av_log(NULL, AV_LOG_FATAL, "%s: corrupt decoded frame in stream %d\n", input_files[ist->file_index]->ctx->filename, ist->st->index);
2110             exit_program(1);
2111         }
2112     }
2113 }
2114
2115 // Filters can be configured only if the formats of all inputs are known.
2116 static int ifilter_has_all_input_formats(FilterGraph *fg)
2117 {
2118     int i;
2119     for (i = 0; i < fg->nb_inputs; i++) {
2120         if (fg->inputs[i]->format < 0 && (fg->inputs[i]->type == AVMEDIA_TYPE_AUDIO ||
2121                                           fg->inputs[i]->type == AVMEDIA_TYPE_VIDEO))
2122             return 0;
2123     }
2124     return 1;
2125 }
2126
2127 static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame)
2128 {
2129     FilterGraph *fg = ifilter->graph;
2130     int need_reinit, ret, i;
2131
2132     /* determine if the parameters for this input changed */
2133     need_reinit = ifilter->format != frame->format;
2134     if (!!ifilter->hw_frames_ctx != !!frame->hw_frames_ctx ||
2135         (ifilter->hw_frames_ctx && ifilter->hw_frames_ctx->data != frame->hw_frames_ctx->data))
2136         need_reinit = 1;
2137
2138     switch (ifilter->ist->st->codecpar->codec_type) {
2139     case AVMEDIA_TYPE_AUDIO:
2140         need_reinit |= ifilter->sample_rate    != frame->sample_rate ||
2141                        ifilter->channels       != frame->channels ||
2142                        ifilter->channel_layout != frame->channel_layout;
2143         break;
2144     case AVMEDIA_TYPE_VIDEO:
2145         need_reinit |= ifilter->width  != frame->width ||
2146                        ifilter->height != frame->height;
2147         break;
2148     }
2149
2150     if (need_reinit) {
2151         ret = ifilter_parameters_from_frame(ifilter, frame);
2152         if (ret < 0)
2153             return ret;
2154     }
2155
2156     /* (re)init the graph if possible, otherwise buffer the frame and return */
2157     if (need_reinit || !fg->graph) {
2158         for (i = 0; i < fg->nb_inputs; i++) {
2159             if (!ifilter_has_all_input_formats(fg)) {
2160                 AVFrame *tmp = av_frame_clone(frame);
2161                 if (!tmp)
2162                     return AVERROR(ENOMEM);
2163                 av_frame_unref(frame);
2164
2165                 if (!av_fifo_space(ifilter->frame_queue)) {
2166                     ret = av_fifo_realloc2(ifilter->frame_queue, 2 * av_fifo_size(ifilter->frame_queue));
2167                     if (ret < 0)
2168                         return ret;
2169                 }
2170                 av_fifo_generic_write(ifilter->frame_queue, &tmp, sizeof(tmp), NULL);
2171                 return 0;
2172             }
2173         }
2174
2175         ret = reap_filters(1);
2176         if (ret < 0 && ret != AVERROR_EOF) {
2177             char errbuf[128];
2178             av_strerror(ret, errbuf, sizeof(errbuf));
2179
2180             av_log(NULL, AV_LOG_ERROR, "Error while filtering: %s\n", errbuf);
2181             return ret;
2182         }
2183
2184         ret = configure_filtergraph(fg);
2185         if (ret < 0) {
2186             av_log(NULL, AV_LOG_ERROR, "Error reinitializing filters!\n");
2187             return ret;
2188         }
2189
2190         for (i = 0; i < fg->nb_inputs; i++) {
2191             while (av_fifo_size(fg->inputs[i]->frame_queue)) {
2192                 AVFrame *tmp;
2193                 av_fifo_generic_read(fg->inputs[i]->frame_queue, &tmp, sizeof(tmp), NULL);
2194                 ret = av_buffersrc_add_frame(fg->inputs[i]->filter, tmp);
2195                 av_frame_free(&tmp);
2196                 if (ret < 0)
2197                     return ret;
2198             }
2199         }
2200     }
2201
2202     ret = av_buffersrc_add_frame_flags(ifilter->filter, frame, AV_BUFFERSRC_FLAG_PUSH);
2203     if (ret < 0) {
2204         av_log(NULL, AV_LOG_ERROR, "Error while filtering\n");
2205         return ret;
2206     }
2207
2208     return 0;
2209 }
2210
2211 // This does not quite work like avcodec_decode_audio4/avcodec_decode_video2.
2212 // There is the following difference: if you got a frame, you must call
2213 // it again with pkt=NULL. pkt==NULL is treated differently from pkt.size==0
2214 // (pkt==NULL means get more output, pkt.size==0 is a flush/drain packet)
2215 static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
2216 {
2217     int ret;
2218
2219     *got_frame = 0;
2220
2221     if (pkt) {
2222         ret = avcodec_send_packet(avctx, pkt);
2223         // In particular, we don't expect AVERROR(EAGAIN), because we read all
2224         // decoded frames with avcodec_receive_frame() until done.
2225         if (ret < 0 && ret != AVERROR_EOF)
2226             return ret;
2227     }
2228
2229     ret = avcodec_receive_frame(avctx, frame);
2230     if (ret < 0 && ret != AVERROR(EAGAIN))
2231         return ret;
2232     if (ret >= 0)
2233         *got_frame = 1;
2234
2235     return 0;
2236 }
2237
2238 static int send_frame_to_filters(InputStream *ist, AVFrame *decoded_frame)
2239 {
2240     int i, ret;
2241     AVFrame *f;
2242
2243     av_assert1(ist->nb_filters > 0); /* ensure ret is initialized */
2244     for (i = 0; i < ist->nb_filters; i++) {
2245         if (i < ist->nb_filters - 1) {
2246             f = ist->filter_frame;
2247             ret = av_frame_ref(f, decoded_frame);
2248             if (ret < 0)
2249                 break;
2250         } else
2251             f = decoded_frame;
2252         ret = ifilter_send_frame(ist->filters[i], f);
2253         if (ret == AVERROR_EOF)
2254             ret = 0; /* ignore */
2255         if (ret < 0) {
2256             av_log(NULL, AV_LOG_ERROR,
2257                    "Failed to inject frame into filter network: %s\n", av_err2str(ret));
2258             break;
2259         }
2260     }
2261     return ret;
2262 }
2263
2264 static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
2265 {
2266     AVFrame *decoded_frame;
2267     AVCodecContext *avctx = ist->dec_ctx;
2268     int ret, err = 0;
2269     AVRational decoded_frame_tb;
2270
2271     if (!ist->decoded_frame && !(ist->decoded_frame = av_frame_alloc()))
2272         return AVERROR(ENOMEM);
2273     if (!ist->filter_frame && !(ist->filter_frame = av_frame_alloc()))
2274         return AVERROR(ENOMEM);
2275     decoded_frame = ist->decoded_frame;
2276
2277     update_benchmark(NULL);
2278     ret = decode(avctx, decoded_frame, got_output, pkt);
2279     update_benchmark("decode_audio %d.%d", ist->file_index, ist->st->index);
2280
2281     if (ret >= 0 && avctx->sample_rate <= 0) {
2282         av_log(avctx, AV_LOG_ERROR, "Sample rate %d invalid\n", avctx->sample_rate);
2283         ret = AVERROR_INVALIDDATA;
2284     }
2285
2286     if (ret != AVERROR_EOF)
2287         check_decode_result(ist, got_output, ret);
2288
2289     if (!*got_output || ret < 0)
2290         return ret;
2291
2292     ist->samples_decoded += decoded_frame->nb_samples;
2293     ist->frames_decoded++;
2294
2295 #if 1
2296     /* increment next_dts to use for the case where the input stream does not
2297        have timestamps or there are multiple frames in the packet */
2298     ist->next_pts += ((int64_t)AV_TIME_BASE * decoded_frame->nb_samples) /
2299                      avctx->sample_rate;
2300     ist->next_dts += ((int64_t)AV_TIME_BASE * decoded_frame->nb_samples) /
2301                      avctx->sample_rate;
2302 #endif
2303
2304     if (decoded_frame->pts != AV_NOPTS_VALUE) {
2305         decoded_frame_tb   = ist->st->time_base;
2306     } else if (pkt && pkt->pts != AV_NOPTS_VALUE) {
2307         decoded_frame->pts = pkt->pts;
2308         decoded_frame_tb   = ist->st->time_base;
2309     }else {
2310         decoded_frame->pts = ist->dts;
2311         decoded_frame_tb   = AV_TIME_BASE_Q;
2312     }
2313     if (decoded_frame->pts != AV_NOPTS_VALUE)
2314         decoded_frame->pts = av_rescale_delta(decoded_frame_tb, decoded_frame->pts,
2315                                               (AVRational){1, avctx->sample_rate}, decoded_frame->nb_samples, &ist->filter_in_rescale_delta_last,
2316                                               (AVRational){1, avctx->sample_rate});
2317     ist->nb_samples = decoded_frame->nb_samples;
2318     err = send_frame_to_filters(ist, decoded_frame);
2319
2320     av_frame_unref(ist->filter_frame);
2321     av_frame_unref(decoded_frame);
2322     return err < 0 ? err : ret;
2323 }
2324
2325 static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output, int eof)
2326 {
2327     AVFrame *decoded_frame;
2328     int i, ret = 0, err = 0;
2329     int64_t best_effort_timestamp;
2330     int64_t dts = AV_NOPTS_VALUE;
2331     AVPacket avpkt;
2332
2333     // With fate-indeo3-2, we're getting 0-sized packets before EOF for some
2334     // reason. This seems like a semi-critical bug. Don't trigger EOF, and
2335     // skip the packet.
2336     if (!eof && pkt && pkt->size == 0)
2337         return 0;
2338
2339     if (!ist->decoded_frame && !(ist->decoded_frame = av_frame_alloc()))
2340         return AVERROR(ENOMEM);
2341     if (!ist->filter_frame && !(ist->filter_frame = av_frame_alloc()))
2342         return AVERROR(ENOMEM);
2343     decoded_frame = ist->decoded_frame;
2344     if (ist->dts != AV_NOPTS_VALUE)
2345         dts = av_rescale_q(ist->dts, AV_TIME_BASE_Q, ist->st->time_base);
2346     if (pkt) {
2347         avpkt = *pkt;
2348         avpkt.dts = dts; // ffmpeg.c probably shouldn't do this
2349     }
2350
2351     // The old code used to set dts on the drain packet, which does not work
2352     // with the new API anymore.
2353     if (eof) {
2354         void *new = av_realloc_array(ist->dts_buffer, ist->nb_dts_buffer + 1, sizeof(ist->dts_buffer[0]));
2355         if (!new)
2356             return AVERROR(ENOMEM);
2357         ist->dts_buffer = new;
2358         ist->dts_buffer[ist->nb_dts_buffer++] = dts;
2359     }
2360
2361     update_benchmark(NULL);
2362     ret = decode(ist->dec_ctx, decoded_frame, got_output, pkt ? &avpkt : NULL);
2363     update_benchmark("decode_video %d.%d", ist->file_index, ist->st->index);
2364
2365     // The following line may be required in some cases where there is no parser
2366     // or the parser does not has_b_frames correctly
2367     if (ist->st->codecpar->video_delay < ist->dec_ctx->has_b_frames) {
2368         if (ist->dec_ctx->codec_id == AV_CODEC_ID_H264) {
2369             ist->st->codecpar->video_delay = ist->dec_ctx->has_b_frames;
2370         } else
2371             av_log(ist->dec_ctx, AV_LOG_WARNING,
2372                    "video_delay is larger in decoder than demuxer %d > %d.\n"
2373                    "If you want to help, upload a sample "
2374                    "of this file to ftp://upload.ffmpeg.org/incoming/ "
2375                    "and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)\n",
2376                    ist->dec_ctx->has_b_frames,
2377                    ist->st->codecpar->video_delay);
2378     }
2379
2380     if (ret != AVERROR_EOF)
2381         check_decode_result(ist, got_output, ret);
2382
2383     if (*got_output && ret >= 0) {
2384         if (ist->dec_ctx->width  != decoded_frame->width ||
2385             ist->dec_ctx->height != decoded_frame->height ||
2386             ist->dec_ctx->pix_fmt != decoded_frame->format) {
2387             av_log(NULL, AV_LOG_DEBUG, "Frame parameters mismatch context %d,%d,%d != %d,%d,%d\n",
2388                 decoded_frame->width,
2389                 decoded_frame->height,
2390                 decoded_frame->format,
2391                 ist->dec_ctx->width,
2392                 ist->dec_ctx->height,
2393                 ist->dec_ctx->pix_fmt);
2394         }
2395     }
2396
2397     if (!*got_output || ret < 0)
2398         return ret;
2399
2400     if(ist->top_field_first>=0)
2401         decoded_frame->top_field_first = ist->top_field_first;
2402
2403     ist->frames_decoded++;
2404
2405     if (ist->hwaccel_retrieve_data && decoded_frame->format == ist->hwaccel_pix_fmt) {
2406         err = ist->hwaccel_retrieve_data(ist->dec_ctx, decoded_frame);
2407         if (err < 0)
2408             goto fail;
2409     }
2410     ist->hwaccel_retrieved_pix_fmt = decoded_frame->format;
2411
2412     best_effort_timestamp= av_frame_get_best_effort_timestamp(decoded_frame);
2413
2414     if (eof && best_effort_timestamp == AV_NOPTS_VALUE && ist->nb_dts_buffer > 0) {
2415         best_effort_timestamp = ist->dts_buffer[0];
2416
2417         for (i = 0; i < ist->nb_dts_buffer - 1; i++)
2418             ist->dts_buffer[i] = ist->dts_buffer[i + 1];
2419         ist->nb_dts_buffer--;
2420     }
2421
2422     if(best_effort_timestamp != AV_NOPTS_VALUE) {
2423         int64_t ts = av_rescale_q(decoded_frame->pts = best_effort_timestamp, ist->st->time_base, AV_TIME_BASE_Q);
2424
2425         if (ts != AV_NOPTS_VALUE)
2426             ist->next_pts = ist->pts = ts;
2427     }
2428
2429     if (debug_ts) {
2430         av_log(NULL, AV_LOG_INFO, "decoder -> ist_index:%d type:video "
2431                "frame_pts:%s frame_pts_time:%s best_effort_ts:%"PRId64" best_effort_ts_time:%s keyframe:%d frame_type:%d time_base:%d/%d\n",
2432                ist->st->index, av_ts2str(decoded_frame->pts),
2433                av_ts2timestr(decoded_frame->pts, &ist->st->time_base),
2434                best_effort_timestamp,
2435                av_ts2timestr(best_effort_timestamp, &ist->st->time_base),
2436                decoded_frame->key_frame, decoded_frame->pict_type,
2437                ist->st->time_base.num, ist->st->time_base.den);
2438     }
2439
2440     if (ist->st->sample_aspect_ratio.num)
2441         decoded_frame->sample_aspect_ratio = ist->st->sample_aspect_ratio;
2442
2443     err = send_frame_to_filters(ist, decoded_frame);
2444
2445 fail:
2446     av_frame_unref(ist->filter_frame);
2447     av_frame_unref(decoded_frame);
2448     return err < 0 ? err : ret;
2449 }
2450
2451 static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
2452 {
2453     AVSubtitle subtitle;
2454     int i, ret = avcodec_decode_subtitle2(ist->dec_ctx,
2455                                           &subtitle, got_output, pkt);
2456
2457     check_decode_result(NULL, got_output, ret);
2458
2459     if (ret < 0 || !*got_output) {
2460         if (!pkt->size)
2461             sub2video_flush(ist);
2462         return ret;
2463     }
2464
2465     if (ist->fix_sub_duration) {
2466         int end = 1;
2467         if (ist->prev_sub.got_output) {
2468             end = av_rescale(subtitle.pts - ist->prev_sub.subtitle.pts,
2469                              1000, AV_TIME_BASE);
2470             if (end < ist->prev_sub.subtitle.end_display_time) {
2471                 av_log(ist->dec_ctx, AV_LOG_DEBUG,
2472                        "Subtitle duration reduced from %d to %d%s\n",
2473                        ist->prev_sub.subtitle.end_display_time, end,
2474                        end <= 0 ? ", dropping it" : "");
2475                 ist->prev_sub.subtitle.end_display_time = end;
2476             }
2477         }
2478         FFSWAP(int,        *got_output, ist->prev_sub.got_output);
2479         FFSWAP(int,        ret,         ist->prev_sub.ret);
2480         FFSWAP(AVSubtitle, subtitle,    ist->prev_sub.subtitle);
2481         if (end <= 0)
2482             goto out;
2483     }
2484
2485     if (!*got_output)
2486         return ret;
2487
2488     sub2video_update(ist, &subtitle);
2489
2490     if (!subtitle.num_rects)
2491         goto out;
2492
2493     ist->frames_decoded++;
2494
2495     for (i = 0; i < nb_output_streams; i++) {
2496         OutputStream *ost = output_streams[i];
2497
2498         if (!check_output_constraints(ist, ost) || !ost->encoding_needed
2499             || ost->enc->type != AVMEDIA_TYPE_SUBTITLE)
2500             continue;
2501
2502         do_subtitle_out(output_files[ost->file_index], ost, &subtitle);
2503     }
2504
2505 out:
2506     avsubtitle_free(&subtitle);
2507     return ret;
2508 }
2509
2510 static int send_filter_eof(InputStream *ist)
2511 {
2512     int i, j, ret;
2513     for (i = 0; i < ist->nb_filters; i++) {
2514         if (ist->filters[i]->filter) {
2515             ret = av_buffersrc_add_frame(ist->filters[i]->filter, NULL);
2516             if (ret < 0)
2517                 return ret;
2518         } else {
2519             // the filtergraph was never configured
2520             FilterGraph *fg = ist->filters[i]->graph;
2521             for (j = 0; j < fg->nb_outputs; j++)
2522                 finish_output_stream(fg->outputs[j]->ost);
2523         }
2524     }
2525     return 0;
2526 }
2527
2528 /* pkt = NULL means EOF (needed to flush decoder buffers) */
2529 static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eof)
2530 {
2531     int ret = 0, i;
2532     int repeating = 0;
2533     int eof_reached = 0;
2534
2535     AVPacket avpkt;
2536     if (!ist->saw_first_ts) {
2537         ist->dts = ist->st->avg_frame_rate.num ? - ist->dec_ctx->has_b_frames * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0;
2538         ist->pts = 0;
2539         if (pkt && pkt->pts != AV_NOPTS_VALUE && !ist->decoding_needed) {
2540             ist->dts += av_rescale_q(pkt->pts, ist->st->time_base, AV_TIME_BASE_Q);
2541             ist->pts = ist->dts; //unused but better to set it to a value thats not totally wrong
2542         }
2543         ist->saw_first_ts = 1;
2544     }
2545
2546     if (ist->next_dts == AV_NOPTS_VALUE)
2547         ist->next_dts = ist->dts;
2548     if (ist->next_pts == AV_NOPTS_VALUE)
2549         ist->next_pts = ist->pts;
2550
2551     if (!pkt) {
2552         /* EOF handling */
2553         av_init_packet(&avpkt);
2554         avpkt.data = NULL;
2555         avpkt.size = 0;
2556     } else {
2557         avpkt = *pkt;
2558     }
2559
2560     if (pkt && pkt->dts != AV_NOPTS_VALUE) {
2561         ist->next_dts = ist->dts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q);
2562         if (ist->dec_ctx->codec_type != AVMEDIA_TYPE_VIDEO || !ist->decoding_needed)
2563             ist->next_pts = ist->pts = ist->dts;
2564     }
2565
2566     // while we have more to decode or while the decoder did output something on EOF
2567     while (ist->decoding_needed) {
2568         int duration = 0;
2569         int got_output = 0;
2570
2571         ist->pts = ist->next_pts;
2572         ist->dts = ist->next_dts;
2573
2574         switch (ist->dec_ctx->codec_type) {
2575         case AVMEDIA_TYPE_AUDIO:
2576             ret = decode_audio    (ist, repeating ? NULL : &avpkt, &got_output);
2577             break;
2578         case AVMEDIA_TYPE_VIDEO:
2579             ret = decode_video    (ist, repeating ? NULL : &avpkt, &got_output, !pkt);
2580             if (!repeating || !pkt || got_output) {
2581                 if (pkt && pkt->duration) {
2582                     duration = av_rescale_q(pkt->duration, ist->st->time_base, AV_TIME_BASE_Q);
2583                 } else if(ist->dec_ctx->framerate.num != 0 && ist->dec_ctx->framerate.den != 0) {
2584                     int ticks= av_stream_get_parser(ist->st) ? av_stream_get_parser(ist->st)->repeat_pict+1 : ist->dec_ctx->ticks_per_frame;
2585                     duration = ((int64_t)AV_TIME_BASE *
2586                                     ist->dec_ctx->framerate.den * ticks) /
2587                                     ist->dec_ctx->framerate.num / ist->dec_ctx->ticks_per_frame;
2588                 }
2589
2590                 if(ist->dts != AV_NOPTS_VALUE && duration) {
2591                     ist->next_dts += duration;
2592                 }else
2593                     ist->next_dts = AV_NOPTS_VALUE;
2594             }
2595
2596             if (got_output)
2597                 ist->next_pts += duration; //FIXME the duration is not correct in some cases
2598             break;
2599         case AVMEDIA_TYPE_SUBTITLE:
2600             if (repeating)
2601                 break;
2602             ret = transcode_subtitles(ist, &avpkt, &got_output);
2603             if (!pkt && ret >= 0)
2604                 ret = AVERROR_EOF;
2605             break;
2606         default:
2607             return -1;
2608         }
2609
2610         if (ret == AVERROR_EOF) {
2611             eof_reached = 1;
2612             break;
2613         }
2614
2615         if (ret < 0) {
2616             av_log(NULL, AV_LOG_ERROR, "Error while decoding stream #%d:%d: %s\n",
2617                    ist->file_index, ist->st->index, av_err2str(ret));
2618             if (exit_on_error)
2619                 exit_program(1);
2620             // Decoding might not terminate if we're draining the decoder, and
2621             // the decoder keeps returning an error.
2622             // This should probably be considered a libavcodec issue.
2623             // Sample: fate-vsynth1-dnxhd-720p-hr-lb
2624             if (!pkt)
2625                 eof_reached = 1;
2626             break;
2627         }
2628
2629         if (got_output)
2630             ist->got_output = 1;
2631
2632         if (!got_output)
2633             break;
2634
2635         // During draining, we might get multiple output frames in this loop.
2636         // ffmpeg.c does not drain the filter chain on configuration changes,
2637         // which means if we send multiple frames at once to the filters, and
2638         // one of those frames changes configuration, the buffered frames will
2639         // be lost. This can upset certain FATE tests.
2640         // Decode only 1 frame per call on EOF to appease these FATE tests.
2641         // The ideal solution would be to rewrite decoding to use the new
2642         // decoding API in a better way.
2643         if (!pkt)
2644             break;
2645
2646         repeating = 1;
2647     }
2648
2649     /* after flushing, send an EOF on all the filter inputs attached to the stream */
2650     /* except when looping we need to flush but not to send an EOF */
2651     if (!pkt && ist->decoding_needed && eof_reached && !no_eof) {
2652         int ret = send_filter_eof(ist);
2653         if (ret < 0) {
2654             av_log(NULL, AV_LOG_FATAL, "Error marking filters as finished\n");
2655             exit_program(1);
2656         }
2657     }
2658
2659     /* handle stream copy */
2660     if (!ist->decoding_needed) {
2661         ist->dts = ist->next_dts;
2662         switch (ist->dec_ctx->codec_type) {
2663         case AVMEDIA_TYPE_AUDIO:
2664             ist->next_dts += ((int64_t)AV_TIME_BASE * ist->dec_ctx->frame_size) /
2665                              ist->dec_ctx->sample_rate;
2666             break;
2667         case AVMEDIA_TYPE_VIDEO:
2668             if (ist->framerate.num) {
2669                 // TODO: Remove work-around for c99-to-c89 issue 7
2670                 AVRational time_base_q = AV_TIME_BASE_Q;
2671                 int64_t next_dts = av_rescale_q(ist->next_dts, time_base_q, av_inv_q(ist->framerate));
2672                 ist->next_dts = av_rescale_q(next_dts + 1, av_inv_q(ist->framerate), time_base_q);
2673             } else if (pkt->duration) {
2674                 ist->next_dts += av_rescale_q(pkt->duration, ist->st->time_base, AV_TIME_BASE_Q);
2675             } else if(ist->dec_ctx->framerate.num != 0) {
2676                 int ticks= av_stream_get_parser(ist->st) ? av_stream_get_parser(ist->st)->repeat_pict + 1 : ist->dec_ctx->ticks_per_frame;
2677                 ist->next_dts += ((int64_t)AV_TIME_BASE *
2678                                   ist->dec_ctx->framerate.den * ticks) /
2679                                   ist->dec_ctx->framerate.num / ist->dec_ctx->ticks_per_frame;
2680             }
2681             break;
2682         }
2683         ist->pts = ist->dts;
2684         ist->next_pts = ist->next_dts;
2685     }
2686     for (i = 0; pkt && i < nb_output_streams; i++) {
2687         OutputStream *ost = output_streams[i];
2688
2689         if (!check_output_constraints(ist, ost) || ost->encoding_needed)
2690             continue;
2691
2692         do_streamcopy(ist, ost, pkt);
2693     }
2694
2695     return !eof_reached;
2696 }
2697
2698 static void print_sdp(void)
2699 {
2700     char sdp[16384];
2701     int i;
2702     int j;
2703     AVIOContext *sdp_pb;
2704     AVFormatContext **avc;
2705
2706     for (i = 0; i < nb_output_files; i++) {
2707         if (!output_files[i]->header_written)
2708             return;
2709     }
2710
2711     avc = av_malloc_array(nb_output_files, sizeof(*avc));
2712     if (!avc)
2713         exit_program(1);
2714     for (i = 0, j = 0; i < nb_output_files; i++) {
2715         if (!strcmp(output_files[i]->ctx->oformat->name, "rtp")) {
2716             avc[j] = output_files[i]->ctx;
2717             j++;
2718         }
2719     }
2720
2721     if (!j)
2722         goto fail;
2723
2724     av_sdp_create(avc, j, sdp, sizeof(sdp));
2725
2726     if (!sdp_filename) {
2727         printf("SDP:\n%s\n", sdp);
2728         fflush(stdout);
2729     } else {
2730         if (avio_open2(&sdp_pb, sdp_filename, AVIO_FLAG_WRITE, &int_cb, NULL) < 0) {
2731             av_log(NULL, AV_LOG_ERROR, "Failed to open sdp file '%s'\n", sdp_filename);
2732         } else {
2733             avio_printf(sdp_pb, "SDP:\n%s", sdp);
2734             avio_closep(&sdp_pb);
2735             av_freep(&sdp_filename);
2736         }
2737     }
2738
2739 fail:
2740     av_freep(&avc);
2741 }
2742
2743 static const HWAccel *get_hwaccel(enum AVPixelFormat pix_fmt)
2744 {
2745     int i;
2746     for (i = 0; hwaccels[i].name; i++)
2747         if (hwaccels[i].pix_fmt == pix_fmt)
2748             return &hwaccels[i];
2749     return NULL;
2750 }
2751
2752 static enum AVPixelFormat get_format(AVCodecContext *s, const enum AVPixelFormat *pix_fmts)
2753 {
2754     InputStream *ist = s->opaque;
2755     const enum AVPixelFormat *p;
2756     int ret;
2757
2758     for (p = pix_fmts; *p != -1; p++) {
2759         const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(*p);
2760         const HWAccel *hwaccel;
2761
2762         if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL))
2763             break;
2764
2765         hwaccel = get_hwaccel(*p);
2766         if (!hwaccel ||
2767             (ist->active_hwaccel_id && ist->active_hwaccel_id != hwaccel->id) ||
2768             (ist->hwaccel_id != HWACCEL_AUTO && ist->hwaccel_id != hwaccel->id))
2769             continue;
2770
2771         ret = hwaccel->init(s);
2772         if (ret < 0) {
2773             if (ist->hwaccel_id == hwaccel->id) {
2774                 av_log(NULL, AV_LOG_FATAL,
2775                        "%s hwaccel requested for input stream #%d:%d, "
2776                        "but cannot be initialized.\n", hwaccel->name,
2777                        ist->file_index, ist->st->index);
2778                 return AV_PIX_FMT_NONE;
2779             }
2780             continue;
2781         }
2782
2783         if (ist->hw_frames_ctx) {
2784             s->hw_frames_ctx = av_buffer_ref(ist->hw_frames_ctx);
2785             if (!s->hw_frames_ctx)
2786                 return AV_PIX_FMT_NONE;
2787         }
2788
2789         ist->active_hwaccel_id = hwaccel->id;
2790         ist->hwaccel_pix_fmt   = *p;
2791         break;
2792     }
2793
2794     return *p;
2795 }
2796
2797 static int get_buffer(AVCodecContext *s, AVFrame *frame, int flags)
2798 {
2799     InputStream *ist = s->opaque;
2800
2801     if (ist->hwaccel_get_buffer && frame->format == ist->hwaccel_pix_fmt)
2802         return ist->hwaccel_get_buffer(s, frame, flags);
2803
2804     return avcodec_default_get_buffer2(s, frame, flags);
2805 }
2806
2807 static int init_input_stream(int ist_index, char *error, int error_len)
2808 {
2809     int ret;
2810     InputStream *ist = input_streams[ist_index];
2811
2812     if (ist->decoding_needed) {
2813         AVCodec *codec = ist->dec;
2814         if (!codec) {
2815             snprintf(error, error_len, "Decoder (codec %s) not found for input stream #%d:%d",
2816                     avcodec_get_name(ist->dec_ctx->codec_id), ist->file_index, ist->st->index);
2817             return AVERROR(EINVAL);
2818         }
2819
2820         ist->dec_ctx->opaque                = ist;
2821         ist->dec_ctx->get_format            = get_format;
2822         ist->dec_ctx->get_buffer2           = get_buffer;
2823         ist->dec_ctx->thread_safe_callbacks = 1;
2824
2825         av_opt_set_int(ist->dec_ctx, "refcounted_frames", 1, 0);
2826         if (ist->dec_ctx->codec_id == AV_CODEC_ID_DVB_SUBTITLE &&
2827            (ist->decoding_needed & DECODING_FOR_OST)) {
2828             av_dict_set(&ist->decoder_opts, "compute_edt", "1", AV_DICT_DONT_OVERWRITE);
2829             if (ist->decoding_needed & DECODING_FOR_FILTER)
2830                 av_log(NULL, AV_LOG_WARNING, "Warning using DVB subtitles for filtering and output at the same time is not fully supported, also see -compute_edt [0|1]\n");
2831         }
2832
2833         av_dict_set(&ist->decoder_opts, "sub_text_format", "ass", AV_DICT_DONT_OVERWRITE);
2834
2835         /* Useful for subtitles retiming by lavf (FIXME), skipping samples in
2836          * audio, and video decoders such as cuvid or mediacodec */
2837         av_codec_set_pkt_timebase(ist->dec_ctx, ist->st->time_base);
2838
2839         if (!av_dict_get(ist->decoder_opts, "threads", NULL, 0))
2840             av_dict_set(&ist->decoder_opts, "threads", "auto", 0);
2841         if ((ret = avcodec_open2(ist->dec_ctx, codec, &ist->decoder_opts)) < 0) {
2842             if (ret == AVERROR_EXPERIMENTAL)
2843                 abort_codec_experimental(codec, 0);
2844
2845             snprintf(error, error_len,
2846                      "Error while opening decoder for input stream "
2847                      "#%d:%d : %s",
2848                      ist->file_index, ist->st->index, av_err2str(ret));
2849             return ret;
2850         }
2851         assert_avoptions(ist->decoder_opts);
2852     }
2853
2854     ist->next_pts = AV_NOPTS_VALUE;
2855     ist->next_dts = AV_NOPTS_VALUE;
2856
2857     return 0;
2858 }
2859
2860 static InputStream *get_input_stream(OutputStream *ost)
2861 {
2862     if (ost->source_index >= 0)
2863         return input_streams[ost->source_index];
2864     return NULL;
2865 }
2866
2867 static int compare_int64(const void *a, const void *b)
2868 {
2869     return FFDIFFSIGN(*(const int64_t *)a, *(const int64_t *)b);
2870 }
2871
2872 /* open the muxer when all the streams are initialized */
2873 static int check_init_output_file(OutputFile *of, int file_index)
2874 {
2875     int ret, i;
2876
2877     for (i = 0; i < of->ctx->nb_streams; i++) {
2878         OutputStream *ost = output_streams[of->ost_index + i];
2879         if (!ost->initialized)
2880             return 0;
2881     }
2882
2883     of->ctx->interrupt_callback = int_cb;
2884
2885     ret = avformat_write_header(of->ctx, &of->opts);
2886     if (ret < 0) {
2887         av_log(NULL, AV_LOG_ERROR,
2888                "Could not write header for output file #%d "
2889                "(incorrect codec parameters ?): %s\n",
2890                file_index, av_err2str(ret));
2891         return ret;
2892     }
2893     //assert_avoptions(of->opts);
2894     of->header_written = 1;
2895
2896     av_dump_format(of->ctx, file_index, of->ctx->filename, 1);
2897
2898     if (sdp_filename || want_sdp)
2899         print_sdp();
2900
2901     /* flush the muxing queues */
2902     for (i = 0; i < of->ctx->nb_streams; i++) {
2903         OutputStream *ost = output_streams[of->ost_index + i];
2904
2905         /* try to improve muxing time_base (only possible if nothing has been written yet) */
2906         if (!av_fifo_size(ost->muxing_queue))
2907             ost->mux_timebase = ost->st->time_base;
2908
2909         while (av_fifo_size(ost->muxing_queue)) {
2910             AVPacket pkt;
2911             av_fifo_generic_read(ost->muxing_queue, &pkt, sizeof(pkt), NULL);
2912             write_packet(of, &pkt, ost);
2913         }
2914     }
2915
2916     return 0;
2917 }
2918
2919 static int init_output_bsfs(OutputStream *ost)
2920 {
2921     AVBSFContext *ctx;
2922     int i, ret;
2923
2924     if (!ost->nb_bitstream_filters)
2925         return 0;
2926
2927     for (i = 0; i < ost->nb_bitstream_filters; i++) {
2928         ctx = ost->bsf_ctx[i];
2929
2930         ret = avcodec_parameters_copy(ctx->par_in,
2931                                       i ? ost->bsf_ctx[i - 1]->par_out : ost->st->codecpar);
2932         if (ret < 0)
2933             return ret;
2934
2935         ctx->time_base_in = i ? ost->bsf_ctx[i - 1]->time_base_out : ost->st->time_base;
2936
2937         ret = av_bsf_init(ctx);
2938         if (ret < 0) {
2939             av_log(NULL, AV_LOG_ERROR, "Error initializing bitstream filter: %s\n",
2940                    ost->bsf_ctx[i]->filter->name);
2941             return ret;
2942         }
2943     }
2944
2945     ctx = ost->bsf_ctx[ost->nb_bitstream_filters - 1];
2946     ret = avcodec_parameters_copy(ost->st->codecpar, ctx->par_out);
2947     if (ret < 0)
2948         return ret;
2949
2950     ost->st->time_base = ctx->time_base_out;
2951
2952     return 0;
2953 }
2954
2955 static int init_output_stream_streamcopy(OutputStream *ost)
2956 {
2957     OutputFile *of = output_files[ost->file_index];
2958     InputStream *ist = get_input_stream(ost);
2959     AVCodecParameters *par_dst = ost->st->codecpar;
2960     AVCodecParameters *par_src = ost->ref_par;
2961     AVRational sar;
2962     int i, ret;
2963     uint32_t codec_tag = par_dst->codec_tag;
2964
2965     av_assert0(ist && !ost->filter);
2966
2967     ret = avcodec_parameters_to_context(ost->enc_ctx, ist->st->codecpar);
2968     if (ret >= 0)
2969         ret = av_opt_set_dict(ost->enc_ctx, &ost->encoder_opts);
2970     if (ret < 0) {
2971         av_log(NULL, AV_LOG_FATAL,
2972                "Error setting up codec context options.\n");
2973         return ret;
2974     }
2975     avcodec_parameters_from_context(par_src, ost->enc_ctx);
2976
2977     if (!codec_tag) {
2978         unsigned int codec_tag_tmp;
2979         if (!of->ctx->oformat->codec_tag ||
2980             av_codec_get_id (of->ctx->oformat->codec_tag, par_src->codec_tag) == par_src->codec_id ||
2981             !av_codec_get_tag2(of->ctx->oformat->codec_tag, par_src->codec_id, &codec_tag_tmp))
2982             codec_tag = par_src->codec_tag;
2983     }
2984
2985     ret = avcodec_parameters_copy(par_dst, par_src);
2986     if (ret < 0)
2987         return ret;
2988
2989     par_dst->codec_tag = codec_tag;
2990
2991     if (!ost->frame_rate.num)
2992         ost->frame_rate = ist->framerate;
2993     ost->st->avg_frame_rate = ost->frame_rate;
2994
2995     ret = avformat_transfer_internal_stream_timing_info(of->ctx->oformat, ost->st, ist->st, copy_tb);
2996     if (ret < 0)
2997         return ret;
2998
2999     // copy timebase while removing common factors
3000     if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0)
3001         ost->st->time_base = av_add_q(av_stream_get_codec_timebase(ost->st), (AVRational){0, 1});
3002
3003     // copy estimated duration as a hint to the muxer
3004     if (ost->st->duration <= 0 && ist->st->duration > 0)
3005         ost->st->duration = av_rescale_q(ist->st->duration, ist->st->time_base, ost->st->time_base);
3006
3007     // copy disposition
3008     ost->st->disposition = ist->st->disposition;
3009
3010     if (ist->st->nb_side_data) {
3011         ost->st->side_data = av_realloc_array(NULL, ist->st->nb_side_data,
3012                                               sizeof(*ist->st->side_data));
3013         if (!ost->st->side_data)
3014             return AVERROR(ENOMEM);
3015
3016         ost->st->nb_side_data = 0;
3017         for (i = 0; i < ist->st->nb_side_data; i++) {
3018             const AVPacketSideData *sd_src = &ist->st->side_data[i];
3019             AVPacketSideData *sd_dst = &ost->st->side_data[ost->st->nb_side_data];
3020
3021             if (ost->rotate_overridden && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX)
3022                 continue;
3023
3024             sd_dst->data = av_malloc(sd_src->size);
3025             if (!sd_dst->data)
3026                 return AVERROR(ENOMEM);
3027             memcpy(sd_dst->data, sd_src->data, sd_src->size);
3028             sd_dst->size = sd_src->size;
3029             sd_dst->type = sd_src->type;
3030             ost->st->nb_side_data++;
3031         }
3032     }
3033
3034     ost->parser = av_parser_init(par_dst->codec_id);
3035     ost->parser_avctx = avcodec_alloc_context3(NULL);
3036     if (!ost->parser_avctx)
3037         return AVERROR(ENOMEM);
3038
3039     switch (par_dst->codec_type) {
3040     case AVMEDIA_TYPE_AUDIO:
3041         if (audio_volume != 256) {
3042             av_log(NULL, AV_LOG_FATAL, "-acodec copy and -vol are incompatible (frames are not decoded)\n");
3043             exit_program(1);
3044         }
3045         if((par_dst->block_align == 1 || par_dst->block_align == 1152 || par_dst->block_align == 576) && par_dst->codec_id == AV_CODEC_ID_MP3)
3046             par_dst->block_align= 0;
3047         if(par_dst->codec_id == AV_CODEC_ID_AC3)
3048             par_dst->block_align= 0;
3049         break;
3050     case AVMEDIA_TYPE_VIDEO:
3051         if (ost->frame_aspect_ratio.num) { // overridden by the -aspect cli option
3052             sar =
3053                 av_mul_q(ost->frame_aspect_ratio,
3054                          (AVRational){ par_dst->height, par_dst->width });
3055             av_log(NULL, AV_LOG_WARNING, "Overriding aspect ratio "
3056                    "with stream copy may produce invalid files\n");
3057             }
3058         else if (ist->st->sample_aspect_ratio.num)
3059             sar = ist->st->sample_aspect_ratio;
3060         else
3061             sar = par_src->sample_aspect_ratio;
3062         ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar;
3063         ost->st->avg_frame_rate = ist->st->avg_frame_rate;
3064         ost->st->r_frame_rate = ist->st->r_frame_rate;
3065         break;
3066     }
3067
3068     ost->mux_timebase = ist->st->time_base;
3069
3070     return 0;
3071 }
3072
3073 static void set_encoder_id(OutputFile *of, OutputStream *ost)
3074 {
3075     AVDictionaryEntry *e;
3076
3077     uint8_t *encoder_string;
3078     int encoder_string_len;
3079     int format_flags = 0;
3080     int codec_flags = 0;
3081
3082     if (av_dict_get(ost->st->metadata, "encoder",  NULL, 0))
3083         return;
3084
3085     e = av_dict_get(of->opts, "fflags", NULL, 0);
3086     if (e) {
3087         const AVOption *o = av_opt_find(of->ctx, "fflags", NULL, 0, 0);
3088         if (!o)
3089             return;
3090         av_opt_eval_flags(of->ctx, o, e->value, &format_flags);
3091     }
3092     e = av_dict_get(ost->encoder_opts, "flags", NULL, 0);
3093     if (e) {
3094         const AVOption *o = av_opt_find(ost->enc_ctx, "flags", NULL, 0, 0);
3095         if (!o)
3096             return;
3097         av_opt_eval_flags(ost->enc_ctx, o, e->value, &codec_flags);
3098     }
3099
3100     encoder_string_len = sizeof(LIBAVCODEC_IDENT) + strlen(ost->enc->name) + 2;
3101     encoder_string     = av_mallocz(encoder_string_len);
3102     if (!encoder_string)
3103         exit_program(1);
3104
3105     if (!(format_flags & AVFMT_FLAG_BITEXACT) && !(codec_flags & AV_CODEC_FLAG_BITEXACT))
3106         av_strlcpy(encoder_string, LIBAVCODEC_IDENT " ", encoder_string_len);
3107     else
3108         av_strlcpy(encoder_string, "Lavc ", encoder_string_len);
3109     av_strlcat(encoder_string, ost->enc->name, encoder_string_len);
3110     av_dict_set(&ost->st->metadata, "encoder",  encoder_string,
3111                 AV_DICT_DONT_STRDUP_VAL | AV_DICT_DONT_OVERWRITE);
3112 }
3113
3114 static void parse_forced_key_frames(char *kf, OutputStream *ost,
3115                                     AVCodecContext *avctx)
3116 {
3117     char *p;
3118     int n = 1, i, size, index = 0;
3119     int64_t t, *pts;
3120
3121     for (p = kf; *p; p++)
3122         if (*p == ',')
3123             n++;
3124     size = n;
3125     pts = av_malloc_array(size, sizeof(*pts));
3126     if (!pts) {
3127         av_log(NULL, AV_LOG_FATAL, "Could not allocate forced key frames array.\n");
3128         exit_program(1);
3129     }
3130
3131     p = kf;
3132     for (i = 0; i < n; i++) {
3133         char *next = strchr(p, ',');
3134
3135         if (next)
3136             *next++ = 0;
3137
3138         if (!memcmp(p, "chapters", 8)) {
3139
3140             AVFormatContext *avf = output_files[ost->file_index]->ctx;
3141             int j;
3142
3143             if (avf->nb_chapters > INT_MAX - size ||
3144                 !(pts = av_realloc_f(pts, size += avf->nb_chapters - 1,
3145                                      sizeof(*pts)))) {
3146                 av_log(NULL, AV_LOG_FATAL,
3147                        "Could not allocate forced key frames array.\n");
3148                 exit_program(1);
3149             }
3150             t = p[8] ? parse_time_or_die("force_key_frames", p + 8, 1) : 0;
3151             t = av_rescale_q(t, AV_TIME_BASE_Q, avctx->time_base);
3152
3153             for (j = 0; j < avf->nb_chapters; j++) {
3154                 AVChapter *c = avf->chapters[j];
3155                 av_assert1(index < size);
3156                 pts[index++] = av_rescale_q(c->start, c->time_base,
3157                                             avctx->time_base) + t;
3158             }
3159
3160         } else {
3161
3162             t = parse_time_or_die("force_key_frames", p, 1);
3163             av_assert1(index < size);
3164             pts[index++] = av_rescale_q(t, AV_TIME_BASE_Q, avctx->time_base);
3165
3166         }
3167
3168         p = next;
3169     }
3170
3171     av_assert0(index == size);
3172     qsort(pts, size, sizeof(*pts), compare_int64);
3173     ost->forced_kf_count = size;
3174     ost->forced_kf_pts   = pts;
3175 }
3176
3177 static int init_output_stream_encode(OutputStream *ost)
3178 {
3179     InputStream *ist = get_input_stream(ost);
3180     AVCodecContext *enc_ctx = ost->enc_ctx;
3181     AVCodecContext *dec_ctx = NULL;
3182     AVFormatContext *oc = output_files[ost->file_index]->ctx;
3183     int j, ret;
3184
3185     set_encoder_id(output_files[ost->file_index], ost);
3186
3187     if (ist) {
3188         ost->st->disposition          = ist->st->disposition;
3189
3190         dec_ctx = ist->dec_ctx;
3191
3192         enc_ctx->chroma_sample_location = dec_ctx->chroma_sample_location;
3193     } else {
3194         for (j = 0; j < oc->nb_streams; j++) {
3195             AVStream *st = oc->streams[j];
3196             if (st != ost->st && st->codecpar->codec_type == ost->st->codecpar->codec_type)
3197                 break;
3198         }
3199         if (j == oc->nb_streams)
3200             if (ost->st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO ||
3201                 ost->st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
3202                 ost->st->disposition = AV_DISPOSITION_DEFAULT;
3203     }
3204
3205     if (enc_ctx->codec_type == AVMEDIA_TYPE_VIDEO) {
3206         if (!ost->frame_rate.num)
3207             ost->frame_rate = av_buffersink_get_frame_rate(ost->filter->filter);
3208         if (ist && !ost->frame_rate.num)
3209             ost->frame_rate = ist->framerate;
3210         if (ist && !ost->frame_rate.num)
3211             ost->frame_rate = ist->st->r_frame_rate;
3212         if (ist && !ost->frame_rate.num) {
3213             ost->frame_rate = (AVRational){25, 1};
3214             av_log(NULL, AV_LOG_WARNING,
3215                    "No information "
3216                    "about the input framerate is available. Falling "
3217                    "back to a default value of 25fps for output stream #%d:%d. Use the -r option "
3218                    "if you want a different framerate.\n",
3219                    ost->file_index, ost->index);
3220         }
3221 //      ost->frame_rate = ist->st->avg_frame_rate.num ? ist->st->avg_frame_rate : (AVRational){25, 1};
3222         if (ost->enc->supported_framerates && !ost->force_fps) {
3223             int idx = av_find_nearest_q_idx(ost->frame_rate, ost->enc->supported_framerates);
3224             ost->frame_rate = ost->enc->supported_framerates[idx];
3225         }
3226         // reduce frame rate for mpeg4 to be within the spec limits
3227         if (enc_ctx->codec_id == AV_CODEC_ID_MPEG4) {
3228             av_reduce(&ost->frame_rate.num, &ost->frame_rate.den,
3229                       ost->frame_rate.num, ost->frame_rate.den, 65535);
3230         }
3231     }
3232
3233     switch (enc_ctx->codec_type) {
3234     case AVMEDIA_TYPE_AUDIO:
3235         enc_ctx->sample_fmt     = av_buffersink_get_format(ost->filter->filter);
3236         if (dec_ctx)
3237             enc_ctx->bits_per_raw_sample = FFMIN(dec_ctx->bits_per_raw_sample,
3238                                                  av_get_bytes_per_sample(enc_ctx->sample_fmt) << 3);
3239         enc_ctx->sample_rate    = av_buffersink_get_sample_rate(ost->filter->filter);
3240         enc_ctx->channel_layout = av_buffersink_get_channel_layout(ost->filter->filter);
3241         enc_ctx->channels       = av_buffersink_get_channels(ost->filter->filter);
3242         enc_ctx->time_base      = (AVRational){ 1, enc_ctx->sample_rate };
3243         break;
3244     case AVMEDIA_TYPE_VIDEO:
3245         enc_ctx->time_base = av_inv_q(ost->frame_rate);
3246         if (!(enc_ctx->time_base.num && enc_ctx->time_base.den))
3247             enc_ctx->time_base = av_buffersink_get_time_base(ost->filter->filter);
3248         if (   av_q2d(enc_ctx->time_base) < 0.001 && video_sync_method != VSYNC_PASSTHROUGH
3249            && (video_sync_method == VSYNC_CFR || video_sync_method == VSYNC_VSCFR || (video_sync_method == VSYNC_AUTO && !(oc->oformat->flags & AVFMT_VARIABLE_FPS)))){
3250             av_log(oc, AV_LOG_WARNING, "Frame rate very high for a muxer not efficiently supporting it.\n"
3251                                        "Please consider specifying a lower framerate, a different muxer or -vsync 2\n");
3252         }
3253         for (j = 0; j < ost->forced_kf_count; j++)
3254             ost->forced_kf_pts[j] = av_rescale_q(ost->forced_kf_pts[j],
3255                                                  AV_TIME_BASE_Q,
3256                                                  enc_ctx->time_base);
3257
3258         enc_ctx->width  = av_buffersink_get_w(ost->filter->filter);
3259         enc_ctx->height = av_buffersink_get_h(ost->filter->filter);
3260         enc_ctx->sample_aspect_ratio = ost->st->sample_aspect_ratio =
3261             ost->frame_aspect_ratio.num ? // overridden by the -aspect cli option
3262             av_mul_q(ost->frame_aspect_ratio, (AVRational){ enc_ctx->height, enc_ctx->width }) :
3263             av_buffersink_get_sample_aspect_ratio(ost->filter->filter);
3264         if (!strncmp(ost->enc->name, "libx264", 7) &&
3265             enc_ctx->pix_fmt == AV_PIX_FMT_NONE &&
3266             av_buffersink_get_format(ost->filter->filter) != AV_PIX_FMT_YUV420P)
3267             av_log(NULL, AV_LOG_WARNING,
3268                    "No pixel format specified, %s for H.264 encoding chosen.\n"
3269                    "Use -pix_fmt yuv420p for compatibility with outdated media players.\n",
3270                    av_get_pix_fmt_name(av_buffersink_get_format(ost->filter->filter)));
3271         if (!strncmp(ost->enc->name, "mpeg2video", 10) &&
3272             enc_ctx->pix_fmt == AV_PIX_FMT_NONE &&
3273             av_buffersink_get_format(ost->filter->filter) != AV_PIX_FMT_YUV420P)
3274             av_log(NULL, AV_LOG_WARNING,
3275                    "No pixel format specified, %s for MPEG-2 encoding chosen.\n"
3276                    "Use -pix_fmt yuv420p for compatibility with outdated media players.\n",
3277                    av_get_pix_fmt_name(av_buffersink_get_format(ost->filter->filter)));
3278         enc_ctx->pix_fmt = av_buffersink_get_format(ost->filter->filter);
3279         if (dec_ctx)
3280             enc_ctx->bits_per_raw_sample = FFMIN(dec_ctx->bits_per_raw_sample,
3281                                                  av_pix_fmt_desc_get(enc_ctx->pix_fmt)->comp[0].depth);
3282
3283         ost->st->avg_frame_rate = ost->frame_rate;
3284
3285         if (!dec_ctx ||
3286             enc_ctx->width   != dec_ctx->width  ||
3287             enc_ctx->height  != dec_ctx->height ||
3288             enc_ctx->pix_fmt != dec_ctx->pix_fmt) {
3289             enc_ctx->bits_per_raw_sample = frame_bits_per_raw_sample;
3290         }
3291
3292         if (ost->forced_keyframes) {
3293             if (!strncmp(ost->forced_keyframes, "expr:", 5)) {
3294                 ret = av_expr_parse(&ost->forced_keyframes_pexpr, ost->forced_keyframes+5,
3295                                     forced_keyframes_const_names, NULL, NULL, NULL, NULL, 0, NULL);
3296                 if (ret < 0) {
3297                     av_log(NULL, AV_LOG_ERROR,
3298                            "Invalid force_key_frames expression '%s'\n", ost->forced_keyframes+5);
3299                     return ret;
3300                 }
3301                 ost->forced_keyframes_expr_const_values[FKF_N] = 0;
3302                 ost->forced_keyframes_expr_const_values[FKF_N_FORCED] = 0;
3303                 ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_N] = NAN;
3304                 ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_T] = NAN;
3305
3306             // Don't parse the 'forced_keyframes' in case of 'keep-source-keyframes',
3307             // parse it only for static kf timings
3308             } else if(strncmp(ost->forced_keyframes, "source", 6)) {
3309                 parse_forced_key_frames(ost->forced_keyframes, ost, ost->enc_ctx);
3310             }
3311         }
3312         break;
3313     case AVMEDIA_TYPE_SUBTITLE:
3314         enc_ctx->time_base = AV_TIME_BASE_Q;
3315         if (!enc_ctx->width) {
3316             enc_ctx->width     = input_streams[ost->source_index]->st->codecpar->width;
3317             enc_ctx->height    = input_streams[ost->source_index]->st->codecpar->height;
3318         }
3319         break;
3320     case AVMEDIA_TYPE_DATA:
3321         break;
3322     default:
3323         abort();
3324         break;
3325     }
3326
3327     ost->mux_timebase = enc_ctx->time_base;
3328
3329     return 0;
3330 }
3331
3332 static int init_output_stream(OutputStream *ost, char *error, int error_len)
3333 {
3334     int ret = 0;
3335
3336     if (ost->encoding_needed) {
3337         AVCodec      *codec = ost->enc;
3338         AVCodecContext *dec = NULL;
3339         InputStream *ist;
3340
3341         ret = init_output_stream_encode(ost);
3342         if (ret < 0)
3343             return ret;
3344
3345         if ((ist = get_input_stream(ost)))
3346             dec = ist->dec_ctx;
3347         if (dec && dec->subtitle_header) {
3348             /* ASS code assumes this buffer is null terminated so add extra byte. */
3349             ost->enc_ctx->subtitle_header = av_mallocz(dec->subtitle_header_size + 1);
3350             if (!ost->enc_ctx->subtitle_header)
3351                 return AVERROR(ENOMEM);
3352             memcpy(ost->enc_ctx->subtitle_header, dec->subtitle_header, dec->subtitle_header_size);
3353             ost->enc_ctx->subtitle_header_size = dec->subtitle_header_size;
3354         }
3355         if (!av_dict_get(ost->encoder_opts, "threads", NULL, 0))
3356             av_dict_set(&ost->encoder_opts, "threads", "auto", 0);
3357         if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
3358             !codec->defaults &&
3359             !av_dict_get(ost->encoder_opts, "b", NULL, 0) &&
3360             !av_dict_get(ost->encoder_opts, "ab", NULL, 0))
3361             av_dict_set(&ost->encoder_opts, "b", "128000", 0);
3362
3363         if (ost->filter && av_buffersink_get_hw_frames_ctx(ost->filter->filter)) {
3364             ost->enc_ctx->hw_frames_ctx = av_buffer_ref(av_buffersink_get_hw_frames_ctx(ost->filter->filter));
3365             if (!ost->enc_ctx->hw_frames_ctx)
3366                 return AVERROR(ENOMEM);
3367         }
3368
3369         if ((ret = avcodec_open2(ost->enc_ctx, codec, &ost->encoder_opts)) < 0) {
3370             if (ret == AVERROR_EXPERIMENTAL)
3371                 abort_codec_experimental(codec, 1);
3372             snprintf(error, error_len,
3373                      "Error while opening encoder for output stream #%d:%d - "
3374                      "maybe incorrect parameters such as bit_rate, rate, width or height",
3375                     ost->file_index, ost->index);
3376             return ret;
3377         }
3378         if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
3379             !(ost->enc->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE))
3380             av_buffersink_set_frame_size(ost->filter->filter,
3381                                             ost->enc_ctx->frame_size);
3382         assert_avoptions(ost->encoder_opts);
3383         if (ost->enc_ctx->bit_rate && ost->enc_ctx->bit_rate < 1000)
3384             av_log(NULL, AV_LOG_WARNING, "The bitrate parameter is set too low."
3385                                          " It takes bits/s as argument, not kbits/s\n");
3386
3387         ret = avcodec_parameters_from_context(ost->st->codecpar, ost->enc_ctx);
3388         if (ret < 0) {
3389             av_log(NULL, AV_LOG_FATAL,
3390                    "Error initializing the output stream codec context.\n");
3391             exit_program(1);
3392         }
3393         /*
3394          * FIXME: ost->st->codec should't be needed here anymore.
3395          */
3396         ret = avcodec_copy_context(ost->st->codec, ost->enc_ctx);
3397         if (ret < 0)
3398             return ret;
3399
3400         if (ost->enc_ctx->nb_coded_side_data) {
3401             int i;
3402
3403             ost->st->side_data = av_realloc_array(NULL, ost->enc_ctx->nb_coded_side_data,
3404                                                   sizeof(*ost->st->side_data));
3405             if (!ost->st->side_data)
3406                 return AVERROR(ENOMEM);
3407
3408             for (i = 0; i < ost->enc_ctx->nb_coded_side_data; i++) {
3409                 const AVPacketSideData *sd_src = &ost->enc_ctx->coded_side_data[i];
3410                 AVPacketSideData *sd_dst = &ost->st->side_data[i];
3411
3412                 sd_dst->data = av_malloc(sd_src->size);
3413                 if (!sd_dst->data)
3414                     return AVERROR(ENOMEM);
3415                 memcpy(sd_dst->data, sd_src->data, sd_src->size);
3416                 sd_dst->size = sd_src->size;
3417                 sd_dst->type = sd_src->type;
3418                 ost->st->nb_side_data++;
3419             }
3420         }
3421
3422         // copy timebase while removing common factors
3423         if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0)
3424             ost->st->time_base = av_add_q(ost->enc_ctx->time_base, (AVRational){0, 1});
3425
3426         // copy estimated duration as a hint to the muxer
3427         if (ost->st->duration <= 0 && ist && ist->st->duration > 0)
3428             ost->st->duration = av_rescale_q(ist->st->duration, ist->st->time_base, ost->st->time_base);
3429
3430         ost->st->codec->codec= ost->enc_ctx->codec;
3431     } else if (ost->stream_copy) {
3432         ret = init_output_stream_streamcopy(ost);
3433         if (ret < 0)
3434             return ret;
3435
3436         /*
3437          * FIXME: will the codec context used by the parser during streamcopy
3438          * This should go away with the new parser API.
3439          */
3440         ret = avcodec_parameters_to_context(ost->parser_avctx, ost->st->codecpar);
3441         if (ret < 0)
3442             return ret;
3443     }
3444
3445     // parse user provided disposition, and update stream values
3446     if (ost->disposition) {
3447         static const AVOption opts[] = {
3448             { "disposition"         , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" },
3449             { "default"             , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DEFAULT           },    .unit = "flags" },
3450             { "dub"                 , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DUB               },    .unit = "flags" },
3451             { "original"            , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_ORIGINAL          },    .unit = "flags" },
3452             { "comment"             , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_COMMENT           },    .unit = "flags" },
3453             { "lyrics"              , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_LYRICS            },    .unit = "flags" },
3454             { "karaoke"             , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_KARAOKE           },    .unit = "flags" },
3455             { "forced"              , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_FORCED            },    .unit = "flags" },
3456             { "hearing_impaired"    , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_HEARING_IMPAIRED  },    .unit = "flags" },
3457             { "visual_impaired"     , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_VISUAL_IMPAIRED   },    .unit = "flags" },
3458             { "clean_effects"       , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_CLEAN_EFFECTS     },    .unit = "flags" },
3459             { "captions"            , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_CAPTIONS          },    .unit = "flags" },
3460             { "descriptions"        , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DESCRIPTIONS      },    .unit = "flags" },
3461             { "metadata"            , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_METADATA          },    .unit = "flags" },
3462             { NULL },
3463         };
3464         static const AVClass class = {
3465             .class_name = "",
3466             .item_name  = av_default_item_name,
3467             .option     = opts,
3468             .version    = LIBAVUTIL_VERSION_INT,
3469         };
3470         const AVClass *pclass = &class;
3471
3472         ret = av_opt_eval_flags(&pclass, &opts[0], ost->disposition, &ost->st->disposition);
3473         if (ret < 0)
3474             return ret;
3475     }
3476
3477     /* initialize bitstream filters for the output stream
3478      * needs to be done here, because the codec id for streamcopy is not
3479      * known until now */
3480     ret = init_output_bsfs(ost);
3481     if (ret < 0)
3482         return ret;
3483
3484     ost->initialized = 1;
3485
3486     ret = check_init_output_file(output_files[ost->file_index], ost->file_index);
3487     if (ret < 0)
3488         return ret;
3489
3490     return ret;
3491 }
3492
3493 static void report_new_stream(int input_index, AVPacket *pkt)
3494 {
3495     InputFile *file = input_files[input_index];
3496     AVStream *st = file->ctx->streams[pkt->stream_index];
3497
3498     if (pkt->stream_index < file->nb_streams_warn)
3499         return;
3500     av_log(file->ctx, AV_LOG_WARNING,
3501            "New %s stream %d:%d at pos:%"PRId64" and DTS:%ss\n",
3502            av_get_media_type_string(st->codecpar->codec_type),
3503            input_index, pkt->stream_index,
3504            pkt->pos, av_ts2timestr(pkt->dts, &st->time_base));
3505     file->nb_streams_warn = pkt->stream_index + 1;
3506 }
3507
3508 static int transcode_init(void)
3509 {
3510     int ret = 0, i, j, k;
3511     AVFormatContext *oc;
3512     OutputStream *ost;
3513     InputStream *ist;
3514     char error[1024] = {0};
3515
3516     for (i = 0; i < nb_filtergraphs; i++) {
3517         FilterGraph *fg = filtergraphs[i];
3518         for (j = 0; j < fg->nb_outputs; j++) {
3519             OutputFilter *ofilter = fg->outputs[j];
3520             if (!ofilter->ost || ofilter->ost->source_index >= 0)
3521                 continue;
3522             if (fg->nb_inputs != 1)
3523                 continue;
3524             for (k = nb_input_streams-1; k >= 0 ; k--)
3525                 if (fg->inputs[0]->ist == input_streams[k])
3526                     break;
3527             ofilter->ost->source_index = k;
3528         }
3529     }
3530
3531     /* init framerate emulation */
3532     for (i = 0; i < nb_input_files; i++) {
3533         InputFile *ifile = input_files[i];
3534         if (ifile->rate_emu)
3535             for (j = 0; j < ifile->nb_streams; j++)
3536                 input_streams[j + ifile->ist_index]->start = av_gettime_relative();
3537     }
3538
3539     /* hwaccel transcoding */
3540     for (i = 0; i < nb_output_streams; i++) {
3541         ost = output_streams[i];
3542
3543         if (!ost->stream_copy) {
3544
3545 #if CONFIG_CUVID
3546             if (cuvid_transcode_init(ost))
3547                 exit_program(1);
3548 #endif
3549         }
3550     }
3551
3552     /* init input streams */
3553     for (i = 0; i < nb_input_streams; i++)
3554         if ((ret = init_input_stream(i, error, sizeof(error))) < 0) {
3555             for (i = 0; i < nb_output_streams; i++) {
3556                 ost = output_streams[i];
3557                 avcodec_close(ost->enc_ctx);
3558             }
3559             goto dump_format;
3560         }
3561
3562     /* open each encoder */
3563     for (i = 0; i < nb_output_streams; i++) {
3564         // skip streams fed from filtergraphs until we have a frame for them
3565         if (output_streams[i]->filter)
3566             continue;
3567
3568         ret = init_output_stream(output_streams[i], error, sizeof(error));
3569         if (ret < 0)
3570             goto dump_format;
3571     }
3572
3573     /* discard unused programs */
3574     for (i = 0; i < nb_input_files; i++) {
3575         InputFile *ifile = input_files[i];
3576         for (j = 0; j < ifile->ctx->nb_programs; j++) {
3577             AVProgram *p = ifile->ctx->programs[j];
3578             int discard  = AVDISCARD_ALL;
3579
3580             for (k = 0; k < p->nb_stream_indexes; k++)
3581                 if (!input_streams[ifile->ist_index + p->stream_index[k]]->discard) {
3582                     discard = AVDISCARD_DEFAULT;
3583                     break;
3584                 }
3585             p->discard = discard;
3586         }
3587     }
3588
3589     /* write headers for files with no streams */
3590     for (i = 0; i < nb_output_files; i++) {
3591         oc = output_files[i]->ctx;
3592         if (oc->oformat->flags & AVFMT_NOSTREAMS && oc->nb_streams == 0) {
3593             ret = check_init_output_file(output_files[i], i);
3594             if (ret < 0)
3595                 goto dump_format;
3596         }
3597     }
3598
3599  dump_format:
3600     /* dump the stream mapping */
3601     av_log(NULL, AV_LOG_INFO, "Stream mapping:\n");
3602     for (i = 0; i < nb_input_streams; i++) {
3603         ist = input_streams[i];
3604
3605         for (j = 0; j < ist->nb_filters; j++) {
3606             if (!filtergraph_is_simple(ist->filters[j]->graph)) {
3607                 av_log(NULL, AV_LOG_INFO, "  Stream #%d:%d (%s) -> %s",
3608                        ist->file_index, ist->st->index, ist->dec ? ist->dec->name : "?",
3609                        ist->filters[j]->name);
3610                 if (nb_filtergraphs > 1)
3611                     av_log(NULL, AV_LOG_INFO, " (graph %d)", ist->filters[j]->graph->index);
3612                 av_log(NULL, AV_LOG_INFO, "\n");
3613             }
3614         }
3615     }
3616
3617     for (i = 0; i < nb_output_streams; i++) {
3618         ost = output_streams[i];
3619
3620         if (ost->attachment_filename) {
3621             /* an attached file */
3622             av_log(NULL, AV_LOG_INFO, "  File %s -> Stream #%d:%d\n",
3623                    ost->attachment_filename, ost->file_index, ost->index);
3624             continue;
3625         }
3626
3627         if (ost->filter && !filtergraph_is_simple(ost->filter->graph)) {
3628             /* output from a complex graph */
3629             av_log(NULL, AV_LOG_INFO, "  %s", ost->filter->name);
3630             if (nb_filtergraphs > 1)
3631                 av_log(NULL, AV_LOG_INFO, " (graph %d)", ost->filter->graph->index);
3632
3633             av_log(NULL, AV_LOG_INFO, " -> Stream #%d:%d (%s)\n", ost->file_index,
3634                    ost->index, ost->enc ? ost->enc->name : "?");
3635             continue;
3636         }
3637
3638         av_log(NULL, AV_LOG_INFO, "  Stream #%d:%d -> #%d:%d",
3639                input_streams[ost->source_index]->file_index,
3640                input_streams[ost->source_index]->st->index,
3641                ost->file_index,
3642                ost->index);
3643         if (ost->sync_ist != input_streams[ost->source_index])
3644             av_log(NULL, AV_LOG_INFO, " [sync #%d:%d]",
3645                    ost->sync_ist->file_index,
3646                    ost->sync_ist->st->index);
3647         if (ost->stream_copy)
3648             av_log(NULL, AV_LOG_INFO, " (copy)");
3649         else {
3650             const AVCodec *in_codec    = input_streams[ost->source_index]->dec;
3651             const AVCodec *out_codec   = ost->enc;
3652             const char *decoder_name   = "?";
3653             const char *in_codec_name  = "?";
3654             const char *encoder_name   = "?";
3655             const char *out_codec_name = "?";
3656             const AVCodecDescriptor *desc;
3657
3658             if (in_codec) {
3659                 decoder_name  = in_codec->name;
3660                 desc = avcodec_descriptor_get(in_codec->id);
3661                 if (desc)
3662                     in_codec_name = desc->name;
3663                 if (!strcmp(decoder_name, in_codec_name))
3664                     decoder_name = "native";
3665             }
3666
3667             if (out_codec) {
3668                 encoder_name   = out_codec->name;
3669                 desc = avcodec_descriptor_get(out_codec->id);
3670                 if (desc)
3671                     out_codec_name = desc->name;
3672                 if (!strcmp(encoder_name, out_codec_name))
3673                     encoder_name = "native";
3674             }
3675
3676             av_log(NULL, AV_LOG_INFO, " (%s (%s) -> %s (%s))",
3677                    in_codec_name, decoder_name,
3678                    out_codec_name, encoder_name);
3679         }
3680         av_log(NULL, AV_LOG_INFO, "\n");
3681     }
3682
3683     if (ret) {
3684         av_log(NULL, AV_LOG_ERROR, "%s\n", error);
3685         return re