]> git.sesse.net Git - ffmpeg/blob - avconv.c
lavfi/gradfun: fix rounding in MMX code.
[ffmpeg] / avconv.c
1 /*
2  * avconv main
3  * Copyright (c) 2000-2011 The libav developers.
4  *
5  * This file is part of Libav.
6  *
7  * Libav is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * Libav is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with Libav; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 #include "config.h"
23 #include <ctype.h>
24 #include <string.h>
25 #include <math.h>
26 #include <stdlib.h>
27 #include <errno.h>
28 #include <signal.h>
29 #include <limits.h>
30 #include "libavformat/avformat.h"
31 #include "libavdevice/avdevice.h"
32 #include "libswscale/swscale.h"
33 #include "libavresample/avresample.h"
34 #include "libavutil/opt.h"
35 #include "libavutil/channel_layout.h"
36 #include "libavutil/parseutils.h"
37 #include "libavutil/samplefmt.h"
38 #include "libavutil/colorspace.h"
39 #include "libavutil/fifo.h"
40 #include "libavutil/intreadwrite.h"
41 #include "libavutil/dict.h"
42 #include "libavutil/mathematics.h"
43 #include "libavutil/pixdesc.h"
44 #include "libavutil/avstring.h"
45 #include "libavutil/libm.h"
46 #include "libavutil/imgutils.h"
47 #include "libavutil/time.h"
48 #include "libavformat/os_support.h"
49
50 # include "libavfilter/avfilter.h"
51 # include "libavfilter/avfiltergraph.h"
52 # include "libavfilter/buffersrc.h"
53 # include "libavfilter/buffersink.h"
54
55 #if HAVE_SYS_RESOURCE_H
56 #include <sys/time.h>
57 #include <sys/types.h>
58 #include <sys/resource.h>
59 #elif HAVE_GETPROCESSTIMES
60 #include <windows.h>
61 #endif
62 #if HAVE_GETPROCESSMEMORYINFO
63 #include <windows.h>
64 #include <psapi.h>
65 #endif
66
67 #if HAVE_SYS_SELECT_H
68 #include <sys/select.h>
69 #endif
70
71 #if HAVE_PTHREADS
72 #include <pthread.h>
73 #endif
74
75 #include <time.h>
76
77 #include "avconv.h"
78 #include "cmdutils.h"
79
80 #include "libavutil/avassert.h"
81
82 const char program_name[] = "avconv";
83 const int program_birth_year = 2000;
84
85 static FILE *vstats_file;
86
87 static int64_t video_size = 0;
88 static int64_t audio_size = 0;
89 static int64_t extra_size = 0;
90 static int nb_frames_dup = 0;
91 static int nb_frames_drop = 0;
92
93
94
95 #if HAVE_PTHREADS
96 /* signal to input threads that they should exit; set by the main thread */
97 static int transcoding_finished;
98 #endif
99
100 #define DEFAULT_PASS_LOGFILENAME_PREFIX "av2pass"
101
102 InputStream **input_streams = NULL;
103 int        nb_input_streams = 0;
104 InputFile   **input_files   = NULL;
105 int        nb_input_files   = 0;
106
107 OutputStream **output_streams = NULL;
108 int         nb_output_streams = 0;
109 OutputFile   **output_files   = NULL;
110 int         nb_output_files   = 0;
111
112 FilterGraph **filtergraphs;
113 int        nb_filtergraphs;
114
115 static void term_exit(void)
116 {
117     av_log(NULL, AV_LOG_QUIET, "");
118 }
119
120 static volatile int received_sigterm = 0;
121 static volatile int received_nb_signals = 0;
122
123 static void
124 sigterm_handler(int sig)
125 {
126     received_sigterm = sig;
127     received_nb_signals++;
128     term_exit();
129 }
130
131 static void term_init(void)
132 {
133     signal(SIGINT , sigterm_handler); /* Interrupt (ANSI).    */
134     signal(SIGTERM, sigterm_handler); /* Termination (ANSI).  */
135 #ifdef SIGXCPU
136     signal(SIGXCPU, sigterm_handler);
137 #endif
138 }
139
140 static int decode_interrupt_cb(void *ctx)
141 {
142     return received_nb_signals > 1;
143 }
144
145 const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL };
146
147 static void exit_program(void)
148 {
149     int i, j;
150
151     for (i = 0; i < nb_filtergraphs; i++) {
152         avfilter_graph_free(&filtergraphs[i]->graph);
153         for (j = 0; j < filtergraphs[i]->nb_inputs; j++) {
154             av_freep(&filtergraphs[i]->inputs[j]->name);
155             av_freep(&filtergraphs[i]->inputs[j]);
156         }
157         av_freep(&filtergraphs[i]->inputs);
158         for (j = 0; j < filtergraphs[i]->nb_outputs; j++) {
159             av_freep(&filtergraphs[i]->outputs[j]->name);
160             av_freep(&filtergraphs[i]->outputs[j]);
161         }
162         av_freep(&filtergraphs[i]->outputs);
163         av_freep(&filtergraphs[i]->graph_desc);
164         av_freep(&filtergraphs[i]);
165     }
166     av_freep(&filtergraphs);
167
168     /* close files */
169     for (i = 0; i < nb_output_files; i++) {
170         AVFormatContext *s = output_files[i]->ctx;
171         if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
172             avio_close(s->pb);
173         avformat_free_context(s);
174         av_dict_free(&output_files[i]->opts);
175         av_freep(&output_files[i]);
176     }
177     for (i = 0; i < nb_output_streams; i++) {
178         AVBitStreamFilterContext *bsfc = output_streams[i]->bitstream_filters;
179         while (bsfc) {
180             AVBitStreamFilterContext *next = bsfc->next;
181             av_bitstream_filter_close(bsfc);
182             bsfc = next;
183         }
184         output_streams[i]->bitstream_filters = NULL;
185         avcodec_free_frame(&output_streams[i]->filtered_frame);
186
187         av_freep(&output_streams[i]->forced_keyframes);
188         av_freep(&output_streams[i]->avfilter);
189         av_freep(&output_streams[i]->logfile_prefix);
190         av_freep(&output_streams[i]);
191     }
192     for (i = 0; i < nb_input_files; i++) {
193         avformat_close_input(&input_files[i]->ctx);
194         av_freep(&input_files[i]);
195     }
196     for (i = 0; i < nb_input_streams; i++) {
197         av_frame_free(&input_streams[i]->decoded_frame);
198         av_frame_free(&input_streams[i]->filter_frame);
199         av_dict_free(&input_streams[i]->opts);
200         av_freep(&input_streams[i]->filters);
201         av_freep(&input_streams[i]);
202     }
203
204     if (vstats_file)
205         fclose(vstats_file);
206     av_free(vstats_filename);
207
208     av_freep(&input_streams);
209     av_freep(&input_files);
210     av_freep(&output_streams);
211     av_freep(&output_files);
212
213     uninit_opts();
214
215     avfilter_uninit();
216     avformat_network_deinit();
217
218     if (received_sigterm) {
219         av_log(NULL, AV_LOG_INFO, "Received signal %d: terminating.\n",
220                (int) received_sigterm);
221         exit (255);
222     }
223 }
224
225 void assert_avoptions(AVDictionary *m)
226 {
227     AVDictionaryEntry *t;
228     if ((t = av_dict_get(m, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
229         av_log(NULL, AV_LOG_FATAL, "Option %s not found.\n", t->key);
230         exit(1);
231     }
232 }
233
234 static void abort_codec_experimental(AVCodec *c, int encoder)
235 {
236     const char *codec_string = encoder ? "encoder" : "decoder";
237     AVCodec *codec;
238     av_log(NULL, AV_LOG_FATAL, "%s '%s' is experimental and might produce bad "
239             "results.\nAdd '-strict experimental' if you want to use it.\n",
240             codec_string, c->name);
241     codec = encoder ? avcodec_find_encoder(c->id) : avcodec_find_decoder(c->id);
242     if (!(codec->capabilities & CODEC_CAP_EXPERIMENTAL))
243         av_log(NULL, AV_LOG_FATAL, "Or use the non experimental %s '%s'.\n",
244                codec_string, codec->name);
245     exit(1);
246 }
247
248 /*
249  * Update the requested input sample format based on the output sample format.
250  * This is currently only used to request float output from decoders which
251  * support multiple sample formats, one of which is AV_SAMPLE_FMT_FLT.
252  * Ideally this will be removed in the future when decoders do not do format
253  * conversion and only output in their native format.
254  */
255 static void update_sample_fmt(AVCodecContext *dec, AVCodec *dec_codec,
256                               AVCodecContext *enc)
257 {
258     /* if sample formats match or a decoder sample format has already been
259        requested, just return */
260     if (enc->sample_fmt == dec->sample_fmt ||
261         dec->request_sample_fmt > AV_SAMPLE_FMT_NONE)
262         return;
263
264     /* if decoder supports more than one output format */
265     if (dec_codec && dec_codec->sample_fmts &&
266         dec_codec->sample_fmts[0] != AV_SAMPLE_FMT_NONE &&
267         dec_codec->sample_fmts[1] != AV_SAMPLE_FMT_NONE) {
268         const enum AVSampleFormat *p;
269         int min_dec = INT_MAX, min_inc = INT_MAX;
270         enum AVSampleFormat dec_fmt = AV_SAMPLE_FMT_NONE;
271         enum AVSampleFormat inc_fmt = AV_SAMPLE_FMT_NONE;
272
273         /* find a matching sample format in the encoder */
274         for (p = dec_codec->sample_fmts; *p != AV_SAMPLE_FMT_NONE; p++) {
275             if (*p == enc->sample_fmt) {
276                 dec->request_sample_fmt = *p;
277                 return;
278             } else {
279                 enum AVSampleFormat dfmt = av_get_packed_sample_fmt(*p);
280                 enum AVSampleFormat efmt = av_get_packed_sample_fmt(enc->sample_fmt);
281                 int fmt_diff = 32 * abs(dfmt - efmt);
282                 if (av_sample_fmt_is_planar(*p) !=
283                     av_sample_fmt_is_planar(enc->sample_fmt))
284                     fmt_diff++;
285                 if (dfmt == efmt) {
286                     min_inc = fmt_diff;
287                     inc_fmt = *p;
288                 } else if (dfmt > efmt) {
289                     if (fmt_diff < min_inc) {
290                         min_inc = fmt_diff;
291                         inc_fmt = *p;
292                     }
293                 } else {
294                     if (fmt_diff < min_dec) {
295                         min_dec = fmt_diff;
296                         dec_fmt = *p;
297                     }
298                 }
299             }
300         }
301
302         /* if none match, provide the one that matches quality closest */
303         dec->request_sample_fmt = min_inc != INT_MAX ? inc_fmt : dec_fmt;
304     }
305 }
306
307 static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
308 {
309     AVBitStreamFilterContext *bsfc = ost->bitstream_filters;
310     AVCodecContext          *avctx = ost->st->codec;
311     int ret;
312
313     /*
314      * Audio encoders may split the packets --  #frames in != #packets out.
315      * But there is no reordering, so we can limit the number of output packets
316      * by simply dropping them here.
317      * Counting encoded video frames needs to be done separately because of
318      * reordering, see do_video_out()
319      */
320     if (!(avctx->codec_type == AVMEDIA_TYPE_VIDEO && avctx->codec)) {
321         if (ost->frame_number >= ost->max_frames) {
322             av_free_packet(pkt);
323             return;
324         }
325         ost->frame_number++;
326     }
327
328     while (bsfc) {
329         AVPacket new_pkt = *pkt;
330         int a = av_bitstream_filter_filter(bsfc, avctx, NULL,
331                                            &new_pkt.data, &new_pkt.size,
332                                            pkt->data, pkt->size,
333                                            pkt->flags & AV_PKT_FLAG_KEY);
334         if (a > 0) {
335             av_free_packet(pkt);
336             new_pkt.buf = av_buffer_create(new_pkt.data, new_pkt.size,
337                                            av_buffer_default_free, NULL, 0);
338             if (!new_pkt.buf)
339                 exit(1);
340         } else if (a < 0) {
341             av_log(NULL, AV_LOG_ERROR, "%s failed for stream %d, codec %s",
342                    bsfc->filter->name, pkt->stream_index,
343                    avctx->codec ? avctx->codec->name : "copy");
344             print_error("", a);
345             if (exit_on_error)
346                 exit(1);
347         }
348         *pkt = new_pkt;
349
350         bsfc = bsfc->next;
351     }
352
353     pkt->stream_index = ost->index;
354     ret = av_interleaved_write_frame(s, pkt);
355     if (ret < 0) {
356         print_error("av_interleaved_write_frame()", ret);
357         exit(1);
358     }
359 }
360
361 static int check_recording_time(OutputStream *ost)
362 {
363     OutputFile *of = output_files[ost->file_index];
364
365     if (of->recording_time != INT64_MAX &&
366         av_compare_ts(ost->sync_opts - ost->first_pts, ost->st->codec->time_base, of->recording_time,
367                       AV_TIME_BASE_Q) >= 0) {
368         ost->finished = 1;
369         return 0;
370     }
371     return 1;
372 }
373
374 static void do_audio_out(AVFormatContext *s, OutputStream *ost,
375                          AVFrame *frame)
376 {
377     AVCodecContext *enc = ost->st->codec;
378     AVPacket pkt;
379     int got_packet = 0;
380
381     av_init_packet(&pkt);
382     pkt.data = NULL;
383     pkt.size = 0;
384
385     if (!check_recording_time(ost))
386         return;
387
388     if (frame->pts == AV_NOPTS_VALUE || audio_sync_method < 0)
389         frame->pts = ost->sync_opts;
390     ost->sync_opts = frame->pts + frame->nb_samples;
391
392     if (avcodec_encode_audio2(enc, &pkt, frame, &got_packet) < 0) {
393         av_log(NULL, AV_LOG_FATAL, "Audio encoding failed\n");
394         exit(1);
395     }
396
397     if (got_packet) {
398         if (pkt.pts != AV_NOPTS_VALUE)
399             pkt.pts      = av_rescale_q(pkt.pts,      enc->time_base, ost->st->time_base);
400         if (pkt.dts != AV_NOPTS_VALUE)
401             pkt.dts      = av_rescale_q(pkt.dts,      enc->time_base, ost->st->time_base);
402         if (pkt.duration > 0)
403             pkt.duration = av_rescale_q(pkt.duration, enc->time_base, ost->st->time_base);
404
405         write_frame(s, &pkt, ost);
406
407         audio_size += pkt.size;
408     }
409 }
410
411 #if FF_API_DEINTERLACE
412 static void pre_process_video_frame(InputStream *ist, AVPicture *picture, void **bufp)
413 {
414     AVCodecContext *dec;
415     AVPicture *picture2;
416     AVPicture picture_tmp;
417     uint8_t *buf = 0;
418
419     dec = ist->st->codec;
420
421     /* deinterlace : must be done before any resize */
422     if (do_deinterlace) {
423         int size;
424
425         /* create temporary picture */
426         size = avpicture_get_size(dec->pix_fmt, dec->width, dec->height);
427         buf  = av_malloc(size);
428         if (!buf)
429             return;
430
431         picture2 = &picture_tmp;
432         avpicture_fill(picture2, buf, dec->pix_fmt, dec->width, dec->height);
433
434         if (avpicture_deinterlace(picture2, picture,
435                                  dec->pix_fmt, dec->width, dec->height) < 0) {
436             /* if error, do not deinterlace */
437             av_log(NULL, AV_LOG_WARNING, "Deinterlacing failed\n");
438             av_free(buf);
439             buf = NULL;
440             picture2 = picture;
441         }
442     } else {
443         picture2 = picture;
444     }
445
446     if (picture != picture2)
447         *picture = *picture2;
448     *bufp = buf;
449 }
450 #endif
451
452 static void do_subtitle_out(AVFormatContext *s,
453                             OutputStream *ost,
454                             InputStream *ist,
455                             AVSubtitle *sub,
456                             int64_t pts)
457 {
458     static uint8_t *subtitle_out = NULL;
459     int subtitle_out_max_size = 1024 * 1024;
460     int subtitle_out_size, nb, i;
461     AVCodecContext *enc;
462     AVPacket pkt;
463
464     if (pts == AV_NOPTS_VALUE) {
465         av_log(NULL, AV_LOG_ERROR, "Subtitle packets must have a pts\n");
466         if (exit_on_error)
467             exit(1);
468         return;
469     }
470
471     enc = ost->st->codec;
472
473     if (!subtitle_out) {
474         subtitle_out = av_malloc(subtitle_out_max_size);
475     }
476
477     /* Note: DVB subtitle need one packet to draw them and one other
478        packet to clear them */
479     /* XXX: signal it in the codec context ? */
480     if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE)
481         nb = 2;
482     else
483         nb = 1;
484
485     for (i = 0; i < nb; i++) {
486         ost->sync_opts = av_rescale_q(pts, ist->st->time_base, enc->time_base);
487         if (!check_recording_time(ost))
488             return;
489
490         sub->pts = av_rescale_q(pts, ist->st->time_base, AV_TIME_BASE_Q);
491         // start_display_time is required to be 0
492         sub->pts               += av_rescale_q(sub->start_display_time, (AVRational){ 1, 1000 }, AV_TIME_BASE_Q);
493         sub->end_display_time  -= sub->start_display_time;
494         sub->start_display_time = 0;
495         subtitle_out_size = avcodec_encode_subtitle(enc, subtitle_out,
496                                                     subtitle_out_max_size, sub);
497         if (subtitle_out_size < 0) {
498             av_log(NULL, AV_LOG_FATAL, "Subtitle encoding failed\n");
499             exit(1);
500         }
501
502         av_init_packet(&pkt);
503         pkt.data = subtitle_out;
504         pkt.size = subtitle_out_size;
505         pkt.pts  = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ost->st->time_base);
506         if (enc->codec_id == AV_CODEC_ID_DVB_SUBTITLE) {
507             /* XXX: the pts correction is handled here. Maybe handling
508                it in the codec would be better */
509             if (i == 0)
510                 pkt.pts += 90 * sub->start_display_time;
511             else
512                 pkt.pts += 90 * sub->end_display_time;
513         }
514         write_frame(s, &pkt, ost);
515     }
516 }
517
518 static void do_video_out(AVFormatContext *s,
519                          OutputStream *ost,
520                          AVFrame *in_picture,
521                          int *frame_size)
522 {
523     int ret, format_video_sync;
524     AVPacket pkt;
525     AVCodecContext *enc = ost->st->codec;
526
527     *frame_size = 0;
528
529     format_video_sync = video_sync_method;
530     if (format_video_sync == VSYNC_AUTO)
531         format_video_sync = (s->oformat->flags & AVFMT_NOTIMESTAMPS) ? VSYNC_PASSTHROUGH :
532                             (s->oformat->flags & AVFMT_VARIABLE_FPS) ? VSYNC_VFR : VSYNC_CFR;
533     if (format_video_sync != VSYNC_PASSTHROUGH &&
534         ost->frame_number &&
535         in_picture->pts != AV_NOPTS_VALUE &&
536         in_picture->pts < ost->sync_opts) {
537         nb_frames_drop++;
538         av_log(NULL, AV_LOG_VERBOSE, "*** drop!\n");
539         return;
540     }
541
542     if (in_picture->pts == AV_NOPTS_VALUE)
543         in_picture->pts = ost->sync_opts;
544     ost->sync_opts = in_picture->pts;
545
546
547     if (!ost->frame_number)
548         ost->first_pts = in_picture->pts;
549
550     av_init_packet(&pkt);
551     pkt.data = NULL;
552     pkt.size = 0;
553
554     if (!check_recording_time(ost) ||
555         ost->frame_number >= ost->max_frames)
556         return;
557
558     if (s->oformat->flags & AVFMT_RAWPICTURE &&
559         enc->codec->id == AV_CODEC_ID_RAWVIDEO) {
560         /* raw pictures are written as AVPicture structure to
561            avoid any copies. We support temporarily the older
562            method. */
563         enc->coded_frame->interlaced_frame = in_picture->interlaced_frame;
564         enc->coded_frame->top_field_first  = in_picture->top_field_first;
565         pkt.data   = (uint8_t *)in_picture;
566         pkt.size   =  sizeof(AVPicture);
567         pkt.pts    = av_rescale_q(in_picture->pts, enc->time_base, ost->st->time_base);
568         pkt.flags |= AV_PKT_FLAG_KEY;
569
570         write_frame(s, &pkt, ost);
571     } else {
572         int got_packet;
573
574         if (ost->st->codec->flags & (CODEC_FLAG_INTERLACED_DCT|CODEC_FLAG_INTERLACED_ME) &&
575             ost->top_field_first >= 0)
576             in_picture->top_field_first = !!ost->top_field_first;
577
578         in_picture->quality = ost->st->codec->global_quality;
579         if (!enc->me_threshold)
580             in_picture->pict_type = 0;
581         if (ost->forced_kf_index < ost->forced_kf_count &&
582             in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) {
583             in_picture->pict_type = AV_PICTURE_TYPE_I;
584             ost->forced_kf_index++;
585         }
586         ret = avcodec_encode_video2(enc, &pkt, in_picture, &got_packet);
587         if (ret < 0) {
588             av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");
589             exit(1);
590         }
591
592         if (got_packet) {
593             if (pkt.pts != AV_NOPTS_VALUE)
594                 pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base);
595             if (pkt.dts != AV_NOPTS_VALUE)
596                 pkt.dts = av_rescale_q(pkt.dts, enc->time_base, ost->st->time_base);
597
598             write_frame(s, &pkt, ost);
599             *frame_size = pkt.size;
600             video_size += pkt.size;
601
602             /* if two pass, output log */
603             if (ost->logfile && enc->stats_out) {
604                 fprintf(ost->logfile, "%s", enc->stats_out);
605             }
606         }
607     }
608     ost->sync_opts++;
609     /*
610      * For video, number of frames in == number of packets out.
611      * But there may be reordering, so we can't throw away frames on encoder
612      * flush, we need to limit them here, before they go into encoder.
613      */
614     ost->frame_number++;
615 }
616
617 static double psnr(double d)
618 {
619     return -10.0 * log(d) / log(10.0);
620 }
621
622 static void do_video_stats(OutputStream *ost, int frame_size)
623 {
624     AVCodecContext *enc;
625     int frame_number;
626     double ti1, bitrate, avg_bitrate;
627
628     /* this is executed just the first time do_video_stats is called */
629     if (!vstats_file) {
630         vstats_file = fopen(vstats_filename, "w");
631         if (!vstats_file) {
632             perror("fopen");
633             exit(1);
634         }
635     }
636
637     enc = ost->st->codec;
638     if (enc->codec_type == AVMEDIA_TYPE_VIDEO) {
639         frame_number = ost->frame_number;
640         fprintf(vstats_file, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality / (float)FF_QP2LAMBDA);
641         if (enc->flags&CODEC_FLAG_PSNR)
642             fprintf(vstats_file, "PSNR= %6.2f ", psnr(enc->coded_frame->error[0] / (enc->width * enc->height * 255.0 * 255.0)));
643
644         fprintf(vstats_file,"f_size= %6d ", frame_size);
645         /* compute pts value */
646         ti1 = ost->sync_opts * av_q2d(enc->time_base);
647         if (ti1 < 0.01)
648             ti1 = 0.01;
649
650         bitrate     = (frame_size * 8) / av_q2d(enc->time_base) / 1000.0;
651         avg_bitrate = (double)(video_size * 8) / ti1 / 1000.0;
652         fprintf(vstats_file, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
653                (double)video_size / 1024, ti1, bitrate, avg_bitrate);
654         fprintf(vstats_file, "type= %c\n", av_get_picture_type_char(enc->coded_frame->pict_type));
655     }
656 }
657
658 /*
659  * Read one frame for lavfi output for ost and encode it.
660  */
661 static int poll_filter(OutputStream *ost)
662 {
663     OutputFile    *of = output_files[ost->file_index];
664     AVFrame *filtered_frame = NULL;
665     int frame_size, ret;
666
667     if (!ost->filtered_frame && !(ost->filtered_frame = avcodec_alloc_frame())) {
668         return AVERROR(ENOMEM);
669     } else
670         avcodec_get_frame_defaults(ost->filtered_frame);
671     filtered_frame = ost->filtered_frame;
672
673     if (ost->enc->type == AVMEDIA_TYPE_AUDIO &&
674         !(ost->enc->capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE))
675         ret = av_buffersink_get_samples(ost->filter->filter, filtered_frame,
676                                          ost->st->codec->frame_size);
677     else
678         ret = av_buffersink_get_frame(ost->filter->filter, filtered_frame);
679
680     if (ret < 0)
681         return ret;
682
683     if (filtered_frame->pts != AV_NOPTS_VALUE) {
684         filtered_frame->pts = av_rescale_q(filtered_frame->pts,
685                                            ost->filter->filter->inputs[0]->time_base,
686                                            ost->st->codec->time_base) -
687                               av_rescale_q(of->start_time,
688                                            AV_TIME_BASE_Q,
689                                            ost->st->codec->time_base);
690
691         if (of->start_time && filtered_frame->pts < 0) {
692             av_frame_unref(filtered_frame);
693             return 0;
694         }
695     }
696
697     switch (ost->filter->filter->inputs[0]->type) {
698     case AVMEDIA_TYPE_VIDEO:
699         if (!ost->frame_aspect_ratio)
700             ost->st->codec->sample_aspect_ratio = filtered_frame->sample_aspect_ratio;
701
702         do_video_out(of->ctx, ost, filtered_frame, &frame_size);
703         if (vstats_filename && frame_size)
704             do_video_stats(ost, frame_size);
705         break;
706     case AVMEDIA_TYPE_AUDIO:
707         do_audio_out(of->ctx, ost, filtered_frame);
708         break;
709     default:
710         // TODO support subtitle filters
711         av_assert0(0);
712     }
713
714     av_frame_unref(filtered_frame);
715
716     return 0;
717 }
718
719 /*
720  * Read as many frames from possible from lavfi and encode them.
721  *
722  * Always read from the active stream with the lowest timestamp. If no frames
723  * are available for it then return EAGAIN and wait for more input. This way we
724  * can use lavfi sources that generate unlimited amount of frames without memory
725  * usage exploding.
726  */
727 static int poll_filters(void)
728 {
729     int i, j, ret = 0;
730
731     while (ret >= 0 && !received_sigterm) {
732         OutputStream *ost = NULL;
733         int64_t min_pts = INT64_MAX;
734
735         /* choose output stream with the lowest timestamp */
736         for (i = 0; i < nb_output_streams; i++) {
737             int64_t pts = output_streams[i]->sync_opts;
738
739             if (!output_streams[i]->filter || output_streams[i]->finished)
740                 continue;
741
742             pts = av_rescale_q(pts, output_streams[i]->st->codec->time_base,
743                                AV_TIME_BASE_Q);
744             if (pts < min_pts) {
745                 min_pts = pts;
746                 ost = output_streams[i];
747             }
748         }
749
750         if (!ost)
751             break;
752
753         ret = poll_filter(ost);
754
755         if (ret == AVERROR_EOF) {
756             OutputFile *of = output_files[ost->file_index];
757
758             ost->finished = 1;
759
760             if (of->shortest) {
761                 for (j = 0; j < of->ctx->nb_streams; j++)
762                     output_streams[of->ost_index + j]->finished = 1;
763             }
764
765             ret = 0;
766         } else if (ret == AVERROR(EAGAIN))
767             return 0;
768     }
769
770     return ret;
771 }
772
773 static void print_report(int is_last_report, int64_t timer_start)
774 {
775     char buf[1024];
776     OutputStream *ost;
777     AVFormatContext *oc;
778     int64_t total_size;
779     AVCodecContext *enc;
780     int frame_number, vid, i;
781     double bitrate, ti1, pts;
782     static int64_t last_time = -1;
783     static int qp_histogram[52];
784
785     if (!print_stats && !is_last_report)
786         return;
787
788     if (!is_last_report) {
789         int64_t cur_time;
790         /* display the report every 0.5 seconds */
791         cur_time = av_gettime();
792         if (last_time == -1) {
793             last_time = cur_time;
794             return;
795         }
796         if ((cur_time - last_time) < 500000)
797             return;
798         last_time = cur_time;
799     }
800
801
802     oc = output_files[0]->ctx;
803
804     total_size = avio_size(oc->pb);
805     if (total_size <= 0) // FIXME improve avio_size() so it works with non seekable output too
806         total_size = avio_tell(oc->pb);
807     if (total_size < 0) {
808         char errbuf[128];
809         av_strerror(total_size, errbuf, sizeof(errbuf));
810         av_log(NULL, AV_LOG_VERBOSE, "Bitrate not available, "
811                "avio_tell() failed: %s\n", errbuf);
812         total_size = 0;
813     }
814
815     buf[0] = '\0';
816     ti1 = 1e10;
817     vid = 0;
818     for (i = 0; i < nb_output_streams; i++) {
819         float q = -1;
820         ost = output_streams[i];
821         enc = ost->st->codec;
822         if (!ost->stream_copy && enc->coded_frame)
823             q = enc->coded_frame->quality / (float)FF_QP2LAMBDA;
824         if (vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) {
825             snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "q=%2.1f ", q);
826         }
827         if (!vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) {
828             float t = (av_gettime() - timer_start) / 1000000.0;
829
830             frame_number = ost->frame_number;
831             snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "frame=%5d fps=%3d q=%3.1f ",
832                      frame_number, (t > 1) ? (int)(frame_number / t + 0.5) : 0, q);
833             if (is_last_report)
834                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "L");
835             if (qp_hist) {
836                 int j;
837                 int qp = lrintf(q);
838                 if (qp >= 0 && qp < FF_ARRAY_ELEMS(qp_histogram))
839                     qp_histogram[qp]++;
840                 for (j = 0; j < 32; j++)
841                     snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%X", (int)lrintf(log2(qp_histogram[j] + 1)));
842             }
843             if (enc->flags&CODEC_FLAG_PSNR) {
844                 int j;
845                 double error, error_sum = 0;
846                 double scale, scale_sum = 0;
847                 char type[3] = { 'Y','U','V' };
848                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "PSNR=");
849                 for (j = 0; j < 3; j++) {
850                     if (is_last_report) {
851                         error = enc->error[j];
852                         scale = enc->width * enc->height * 255.0 * 255.0 * frame_number;
853                     } else {
854                         error = enc->coded_frame->error[j];
855                         scale = enc->width * enc->height * 255.0 * 255.0;
856                     }
857                     if (j)
858                         scale /= 4;
859                     error_sum += error;
860                     scale_sum += scale;
861                     snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "%c:%2.2f ", type[j], psnr(error / scale));
862                 }
863                 snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "*:%2.2f ", psnr(error_sum / scale_sum));
864             }
865             vid = 1;
866         }
867         /* compute min output value */
868         pts = (double)ost->st->pts.val * av_q2d(ost->st->time_base);
869         if ((pts < ti1) && (pts > 0))
870             ti1 = pts;
871     }
872     if (ti1 < 0.01)
873         ti1 = 0.01;
874
875     bitrate = (double)(total_size * 8) / ti1 / 1000.0;
876
877     snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf),
878             "size=%8.0fkB time=%0.2f bitrate=%6.1fkbits/s",
879             (double)total_size / 1024, ti1, bitrate);
880
881     if (nb_frames_dup || nb_frames_drop)
882         snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " dup=%d drop=%d",
883                 nb_frames_dup, nb_frames_drop);
884
885     av_log(NULL, AV_LOG_INFO, "%s    \r", buf);
886
887     fflush(stderr);
888
889     if (is_last_report) {
890         int64_t raw= audio_size + video_size + extra_size;
891         av_log(NULL, AV_LOG_INFO, "\n");
892         av_log(NULL, AV_LOG_INFO, "video:%1.0fkB audio:%1.0fkB global headers:%1.0fkB muxing overhead %f%%\n",
893                video_size / 1024.0,
894                audio_size / 1024.0,
895                extra_size / 1024.0,
896                100.0 * (total_size - raw) / raw
897         );
898     }
899 }
900
901 static void flush_encoders(void)
902 {
903     int i, ret;
904
905     for (i = 0; i < nb_output_streams; i++) {
906         OutputStream   *ost = output_streams[i];
907         AVCodecContext *enc = ost->st->codec;
908         AVFormatContext *os = output_files[ost->file_index]->ctx;
909         int stop_encoding = 0;
910
911         if (!ost->encoding_needed)
912             continue;
913
914         if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO && enc->frame_size <= 1)
915             continue;
916         if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && (os->oformat->flags & AVFMT_RAWPICTURE) && enc->codec->id == AV_CODEC_ID_RAWVIDEO)
917             continue;
918
919         for (;;) {
920             int (*encode)(AVCodecContext*, AVPacket*, const AVFrame*, int*) = NULL;
921             const char *desc;
922             int64_t *size;
923
924             switch (ost->st->codec->codec_type) {
925             case AVMEDIA_TYPE_AUDIO:
926                 encode = avcodec_encode_audio2;
927                 desc   = "Audio";
928                 size   = &audio_size;
929                 break;
930             case AVMEDIA_TYPE_VIDEO:
931                 encode = avcodec_encode_video2;
932                 desc   = "Video";
933                 size   = &video_size;
934                 break;
935             default:
936                 stop_encoding = 1;
937             }
938
939             if (encode) {
940                 AVPacket pkt;
941                 int got_packet;
942                 av_init_packet(&pkt);
943                 pkt.data = NULL;
944                 pkt.size = 0;
945
946                 ret = encode(enc, &pkt, NULL, &got_packet);
947                 if (ret < 0) {
948                     av_log(NULL, AV_LOG_FATAL, "%s encoding failed\n", desc);
949                     exit(1);
950                 }
951                 *size += ret;
952                 if (ost->logfile && enc->stats_out) {
953                     fprintf(ost->logfile, "%s", enc->stats_out);
954                 }
955                 if (!got_packet) {
956                     stop_encoding = 1;
957                     break;
958                 }
959                 if (pkt.pts != AV_NOPTS_VALUE)
960                     pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base);
961                 if (pkt.dts != AV_NOPTS_VALUE)
962                     pkt.dts = av_rescale_q(pkt.dts, enc->time_base, ost->st->time_base);
963                 if (pkt.duration > 0)
964                     pkt.duration = av_rescale_q(pkt.duration, enc->time_base, ost->st->time_base);
965                 write_frame(os, &pkt, ost);
966             }
967
968             if (stop_encoding)
969                 break;
970         }
971     }
972 }
973
974 /*
975  * Check whether a packet from ist should be written into ost at this time
976  */
977 static int check_output_constraints(InputStream *ist, OutputStream *ost)
978 {
979     OutputFile *of = output_files[ost->file_index];
980     int ist_index  = input_files[ist->file_index]->ist_index + ist->st->index;
981
982     if (ost->source_index != ist_index)
983         return 0;
984
985     if (of->start_time && ist->last_dts < of->start_time)
986         return 0;
987
988     return 1;
989 }
990
991 static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *pkt)
992 {
993     OutputFile *of = output_files[ost->file_index];
994     int64_t ost_tb_start_time = av_rescale_q(of->start_time, AV_TIME_BASE_Q, ost->st->time_base);
995     AVPacket opkt;
996
997     av_init_packet(&opkt);
998
999     if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) &&
1000         !ost->copy_initial_nonkeyframes)
1001         return;
1002
1003     if (of->recording_time != INT64_MAX &&
1004         ist->last_dts >= of->recording_time + of->start_time) {
1005         ost->finished = 1;
1006         return;
1007     }
1008
1009     /* force the input stream PTS */
1010     if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
1011         audio_size += pkt->size;
1012     else if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
1013         video_size += pkt->size;
1014         ost->sync_opts++;
1015     }
1016
1017     if (pkt->pts != AV_NOPTS_VALUE)
1018         opkt.pts = av_rescale_q(pkt->pts, ist->st->time_base, ost->st->time_base) - ost_tb_start_time;
1019     else
1020         opkt.pts = AV_NOPTS_VALUE;
1021
1022     if (pkt->dts == AV_NOPTS_VALUE)
1023         opkt.dts = av_rescale_q(ist->last_dts, AV_TIME_BASE_Q, ost->st->time_base);
1024     else
1025         opkt.dts = av_rescale_q(pkt->dts, ist->st->time_base, ost->st->time_base);
1026     opkt.dts -= ost_tb_start_time;
1027
1028     opkt.duration = av_rescale_q(pkt->duration, ist->st->time_base, ost->st->time_base);
1029     opkt.flags    = pkt->flags;
1030
1031     // FIXME remove the following 2 lines they shall be replaced by the bitstream filters
1032     if (  ost->st->codec->codec_id != AV_CODEC_ID_H264
1033        && ost->st->codec->codec_id != AV_CODEC_ID_MPEG1VIDEO
1034        && ost->st->codec->codec_id != AV_CODEC_ID_MPEG2VIDEO
1035        && ost->st->codec->codec_id != AV_CODEC_ID_VC1
1036        ) {
1037         if (av_parser_change(ist->st->parser, ost->st->codec, &opkt.data, &opkt.size, pkt->data, pkt->size, pkt->flags & AV_PKT_FLAG_KEY)) {
1038             opkt.buf = av_buffer_create(opkt.data, opkt.size, av_buffer_default_free, NULL, 0);
1039             if (!opkt.buf)
1040                 exit(1);
1041         }
1042     } else {
1043         opkt.data = pkt->data;
1044         opkt.size = pkt->size;
1045     }
1046
1047     write_frame(of->ctx, &opkt, ost);
1048     ost->st->codec->frame_number++;
1049 }
1050
1051 static void rate_emu_sleep(InputStream *ist)
1052 {
1053     if (input_files[ist->file_index]->rate_emu) {
1054         int64_t pts = av_rescale(ist->last_dts, 1000000, AV_TIME_BASE);
1055         int64_t now = av_gettime() - ist->start;
1056         if (pts > now)
1057             av_usleep(pts - now);
1058     }
1059 }
1060
1061 int guess_input_channel_layout(InputStream *ist)
1062 {
1063     AVCodecContext *dec = ist->st->codec;
1064
1065     if (!dec->channel_layout) {
1066         char layout_name[256];
1067
1068         dec->channel_layout = av_get_default_channel_layout(dec->channels);
1069         if (!dec->channel_layout)
1070             return 0;
1071         av_get_channel_layout_string(layout_name, sizeof(layout_name),
1072                                      dec->channels, dec->channel_layout);
1073         av_log(NULL, AV_LOG_WARNING, "Guessed Channel Layout for  Input Stream "
1074                "#%d.%d : %s\n", ist->file_index, ist->st->index, layout_name);
1075     }
1076     return 1;
1077 }
1078
1079 static int decode_audio(InputStream *ist, AVPacket *pkt, int *got_output)
1080 {
1081     AVFrame *decoded_frame, *f;
1082     AVCodecContext *avctx = ist->st->codec;
1083     int i, ret, err = 0, resample_changed;
1084
1085     if (!ist->decoded_frame && !(ist->decoded_frame = avcodec_alloc_frame()))
1086         return AVERROR(ENOMEM);
1087     if (!ist->filter_frame && !(ist->filter_frame = av_frame_alloc()))
1088         return AVERROR(ENOMEM);
1089     decoded_frame = ist->decoded_frame;
1090
1091     ret = avcodec_decode_audio4(avctx, decoded_frame, got_output, pkt);
1092     if (!*got_output || ret < 0) {
1093         if (!pkt->size) {
1094             for (i = 0; i < ist->nb_filters; i++)
1095                 av_buffersrc_add_frame(ist->filters[i]->filter, NULL);
1096         }
1097         return ret;
1098     }
1099
1100     /* if the decoder provides a pts, use it instead of the last packet pts.
1101        the decoder could be delaying output by a packet or more. */
1102     if (decoded_frame->pts != AV_NOPTS_VALUE)
1103         ist->next_dts = decoded_frame->pts;
1104     else if (pkt->pts != AV_NOPTS_VALUE) {
1105         decoded_frame->pts = pkt->pts;
1106         pkt->pts           = AV_NOPTS_VALUE;
1107     }
1108
1109     rate_emu_sleep(ist);
1110
1111     resample_changed = ist->resample_sample_fmt     != decoded_frame->format         ||
1112                        ist->resample_channels       != avctx->channels               ||
1113                        ist->resample_channel_layout != decoded_frame->channel_layout ||
1114                        ist->resample_sample_rate    != decoded_frame->sample_rate;
1115     if (resample_changed) {
1116         char layout1[64], layout2[64];
1117
1118         if (!guess_input_channel_layout(ist)) {
1119             av_log(NULL, AV_LOG_FATAL, "Unable to find default channel "
1120                    "layout for Input Stream #%d.%d\n", ist->file_index,
1121                    ist->st->index);
1122             exit(1);
1123         }
1124         decoded_frame->channel_layout = avctx->channel_layout;
1125
1126         av_get_channel_layout_string(layout1, sizeof(layout1), ist->resample_channels,
1127                                      ist->resample_channel_layout);
1128         av_get_channel_layout_string(layout2, sizeof(layout2), avctx->channels,
1129                                      decoded_frame->channel_layout);
1130
1131         av_log(NULL, AV_LOG_INFO,
1132                "Input stream #%d:%d frame changed from rate:%d fmt:%s ch:%d chl:%s to rate:%d fmt:%s ch:%d chl:%s\n",
1133                ist->file_index, ist->st->index,
1134                ist->resample_sample_rate,  av_get_sample_fmt_name(ist->resample_sample_fmt),
1135                ist->resample_channels, layout1,
1136                decoded_frame->sample_rate, av_get_sample_fmt_name(decoded_frame->format),
1137                avctx->channels, layout2);
1138
1139         ist->resample_sample_fmt     = decoded_frame->format;
1140         ist->resample_sample_rate    = decoded_frame->sample_rate;
1141         ist->resample_channel_layout = decoded_frame->channel_layout;
1142         ist->resample_channels       = avctx->channels;
1143
1144         for (i = 0; i < nb_filtergraphs; i++)
1145             if (ist_in_filtergraph(filtergraphs[i], ist) &&
1146                 configure_filtergraph(filtergraphs[i]) < 0) {
1147                 av_log(NULL, AV_LOG_FATAL, "Error reinitializing filters!\n");
1148                 exit(1);
1149             }
1150     }
1151
1152     if (decoded_frame->pts != AV_NOPTS_VALUE)
1153         decoded_frame->pts = av_rescale_q(decoded_frame->pts,
1154                                           ist->st->time_base,
1155                                           (AVRational){1, ist->st->codec->sample_rate});
1156     for (i = 0; i < ist->nb_filters; i++) {
1157         if (i < ist->nb_filters - 1) {
1158             f = ist->filter_frame;
1159             err = av_frame_ref(f, decoded_frame);
1160             if (err < 0)
1161                 break;
1162         } else
1163             f = decoded_frame;
1164
1165         err = av_buffersrc_add_frame(ist->filters[i]->filter, f);
1166         if (err < 0)
1167             break;
1168     }
1169
1170     av_frame_unref(ist->filter_frame);
1171     av_frame_unref(decoded_frame);
1172     return err < 0 ? err : ret;
1173 }
1174
1175 static int decode_video(InputStream *ist, AVPacket *pkt, int *got_output)
1176 {
1177     AVFrame *decoded_frame, *f;
1178     void *buffer_to_free = NULL;
1179     int i, ret = 0, err = 0, resample_changed;
1180
1181     if (!ist->decoded_frame && !(ist->decoded_frame = av_frame_alloc()))
1182         return AVERROR(ENOMEM);
1183     if (!ist->filter_frame && !(ist->filter_frame = av_frame_alloc()))
1184         return AVERROR(ENOMEM);
1185     decoded_frame = ist->decoded_frame;
1186
1187     ret = avcodec_decode_video2(ist->st->codec,
1188                                 decoded_frame, got_output, pkt);
1189     if (!*got_output || ret < 0) {
1190         if (!pkt->size) {
1191             for (i = 0; i < ist->nb_filters; i++)
1192                 av_buffersrc_add_frame(ist->filters[i]->filter, NULL);
1193         }
1194         return ret;
1195     }
1196
1197     decoded_frame->pts = guess_correct_pts(&ist->pts_ctx, decoded_frame->pkt_pts,
1198                                            decoded_frame->pkt_dts);
1199     pkt->size = 0;
1200 #if FF_API_DEINTERLACE
1201     pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free);
1202 #endif
1203
1204     rate_emu_sleep(ist);
1205
1206     if (ist->st->sample_aspect_ratio.num)
1207         decoded_frame->sample_aspect_ratio = ist->st->sample_aspect_ratio;
1208
1209     resample_changed = ist->resample_width   != decoded_frame->width  ||
1210                        ist->resample_height  != decoded_frame->height ||
1211                        ist->resample_pix_fmt != decoded_frame->format;
1212     if (resample_changed) {
1213         av_log(NULL, AV_LOG_INFO,
1214                "Input stream #%d:%d frame changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s\n",
1215                ist->file_index, ist->st->index,
1216                ist->resample_width,  ist->resample_height,  av_get_pix_fmt_name(ist->resample_pix_fmt),
1217                decoded_frame->width, decoded_frame->height, av_get_pix_fmt_name(decoded_frame->format));
1218
1219         ret = poll_filters();
1220         if (ret < 0 && (ret != AVERROR_EOF && ret != AVERROR(EAGAIN)))
1221             av_log(NULL, AV_LOG_ERROR, "Error while filtering.\n");
1222
1223         ist->resample_width   = decoded_frame->width;
1224         ist->resample_height  = decoded_frame->height;
1225         ist->resample_pix_fmt = decoded_frame->format;
1226
1227         for (i = 0; i < nb_filtergraphs; i++)
1228             if (ist_in_filtergraph(filtergraphs[i], ist) &&
1229                 configure_filtergraph(filtergraphs[i]) < 0) {
1230                 av_log(NULL, AV_LOG_FATAL, "Error reinitializing filters!\n");
1231                 exit(1);
1232             }
1233     }
1234
1235     for (i = 0; i < ist->nb_filters; i++) {
1236         if (i < ist->nb_filters - 1) {
1237             f = ist->filter_frame;
1238             err = av_frame_ref(f, decoded_frame);
1239             if (err < 0)
1240                 break;
1241         } else
1242             f = decoded_frame;
1243
1244         err = av_buffersrc_add_frame(ist->filters[i]->filter, f);
1245         if (err < 0)
1246             break;
1247     }
1248
1249     av_frame_unref(ist->filter_frame);
1250     av_frame_unref(decoded_frame);
1251     av_free(buffer_to_free);
1252     return err < 0 ? err : ret;
1253 }
1254
1255 static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
1256 {
1257     AVSubtitle subtitle;
1258     int i, ret = avcodec_decode_subtitle2(ist->st->codec,
1259                                           &subtitle, got_output, pkt);
1260     if (ret < 0)
1261         return ret;
1262     if (!*got_output)
1263         return ret;
1264
1265     rate_emu_sleep(ist);
1266
1267     for (i = 0; i < nb_output_streams; i++) {
1268         OutputStream *ost = output_streams[i];
1269
1270         if (!check_output_constraints(ist, ost) || !ost->encoding_needed)
1271             continue;
1272
1273         do_subtitle_out(output_files[ost->file_index]->ctx, ost, ist, &subtitle, pkt->pts);
1274     }
1275
1276     avsubtitle_free(&subtitle);
1277     return ret;
1278 }
1279
1280 /* pkt = NULL means EOF (needed to flush decoder buffers) */
1281 static int output_packet(InputStream *ist, const AVPacket *pkt)
1282 {
1283     int i;
1284     int got_output;
1285     AVPacket avpkt;
1286
1287     if (ist->next_dts == AV_NOPTS_VALUE)
1288         ist->next_dts = ist->last_dts;
1289
1290     if (pkt == NULL) {
1291         /* EOF handling */
1292         av_init_packet(&avpkt);
1293         avpkt.data = NULL;
1294         avpkt.size = 0;
1295         goto handle_eof;
1296     } else {
1297         avpkt = *pkt;
1298     }
1299
1300     if (pkt->dts != AV_NOPTS_VALUE)
1301         ist->next_dts = ist->last_dts = av_rescale_q(pkt->dts, ist->st->time_base, AV_TIME_BASE_Q);
1302
1303     // while we have more to decode or while the decoder did output something on EOF
1304     while (ist->decoding_needed && (avpkt.size > 0 || (!pkt && got_output))) {
1305         int ret = 0;
1306     handle_eof:
1307
1308         ist->last_dts = ist->next_dts;
1309
1310         if (avpkt.size && avpkt.size != pkt->size) {
1311             av_log(NULL, ist->showed_multi_packet_warning ? AV_LOG_VERBOSE : AV_LOG_WARNING,
1312                    "Multiple frames in a packet from stream %d\n", pkt->stream_index);
1313             ist->showed_multi_packet_warning = 1;
1314         }
1315
1316         switch (ist->st->codec->codec_type) {
1317         case AVMEDIA_TYPE_AUDIO:
1318             ret = decode_audio    (ist, &avpkt, &got_output);
1319             break;
1320         case AVMEDIA_TYPE_VIDEO:
1321             ret = decode_video    (ist, &avpkt, &got_output);
1322             if (avpkt.duration)
1323                 ist->next_dts += av_rescale_q(avpkt.duration, ist->st->time_base, AV_TIME_BASE_Q);
1324             else if (ist->st->avg_frame_rate.num)
1325                 ist->next_dts += av_rescale_q(1, av_inv_q(ist->st->avg_frame_rate),
1326                                               AV_TIME_BASE_Q);
1327             else if (ist->st->codec->time_base.num != 0) {
1328                 int ticks      = ist->st->parser ? ist->st->parser->repeat_pict + 1 :
1329                                                    ist->st->codec->ticks_per_frame;
1330                 ist->next_dts += av_rescale_q(ticks, ist->st->codec->time_base, AV_TIME_BASE_Q);
1331             }
1332             break;
1333         case AVMEDIA_TYPE_SUBTITLE:
1334             ret = transcode_subtitles(ist, &avpkt, &got_output);
1335             break;
1336         default:
1337             return -1;
1338         }
1339
1340         if (ret < 0)
1341             return ret;
1342         // touch data and size only if not EOF
1343         if (pkt) {
1344             avpkt.data += ret;
1345             avpkt.size -= ret;
1346         }
1347         if (!got_output) {
1348             continue;
1349         }
1350     }
1351
1352     /* handle stream copy */
1353     if (!ist->decoding_needed) {
1354         rate_emu_sleep(ist);
1355         ist->last_dts = ist->next_dts;
1356         switch (ist->st->codec->codec_type) {
1357         case AVMEDIA_TYPE_AUDIO:
1358             ist->next_dts += ((int64_t)AV_TIME_BASE * ist->st->codec->frame_size) /
1359                              ist->st->codec->sample_rate;
1360             break;
1361         case AVMEDIA_TYPE_VIDEO:
1362             if (ist->st->codec->time_base.num != 0) {
1363                 int ticks = ist->st->parser ? ist->st->parser->repeat_pict + 1 : ist->st->codec->ticks_per_frame;
1364                 ist->next_dts += ((int64_t)AV_TIME_BASE *
1365                                   ist->st->codec->time_base.num * ticks) /
1366                                   ist->st->codec->time_base.den;
1367             }
1368             break;
1369         }
1370     }
1371     for (i = 0; pkt && i < nb_output_streams; i++) {
1372         OutputStream *ost = output_streams[i];
1373
1374         if (!check_output_constraints(ist, ost) || ost->encoding_needed)
1375             continue;
1376
1377         do_streamcopy(ist, ost, pkt);
1378     }
1379
1380     return 0;
1381 }
1382
1383 static void print_sdp(void)
1384 {
1385     char sdp[16384];
1386     int i;
1387     AVFormatContext **avc = av_malloc(sizeof(*avc) * nb_output_files);
1388
1389     if (!avc)
1390         exit(1);
1391     for (i = 0; i < nb_output_files; i++)
1392         avc[i] = output_files[i]->ctx;
1393
1394     av_sdp_create(avc, nb_output_files, sdp, sizeof(sdp));
1395     printf("SDP:\n%s\n", sdp);
1396     fflush(stdout);
1397     av_freep(&avc);
1398 }
1399
1400 static int init_input_stream(int ist_index, char *error, int error_len)
1401 {
1402     int i, ret;
1403     InputStream *ist = input_streams[ist_index];
1404     if (ist->decoding_needed) {
1405         AVCodec *codec = ist->dec;
1406         if (!codec) {
1407             snprintf(error, error_len, "Decoder (codec id %d) not found for input stream #%d:%d",
1408                     ist->st->codec->codec_id, ist->file_index, ist->st->index);
1409             return AVERROR(EINVAL);
1410         }
1411
1412         /* update requested sample format for the decoder based on the
1413            corresponding encoder sample format */
1414         for (i = 0; i < nb_output_streams; i++) {
1415             OutputStream *ost = output_streams[i];
1416             if (ost->source_index == ist_index) {
1417                 update_sample_fmt(ist->st->codec, codec, ost->st->codec);
1418                 break;
1419             }
1420         }
1421
1422         av_opt_set_int(ist->st->codec, "refcounted_frames", 1, 0);
1423
1424         if (!av_dict_get(ist->opts, "threads", NULL, 0))
1425             av_dict_set(&ist->opts, "threads", "auto", 0);
1426         if ((ret = avcodec_open2(ist->st->codec, codec, &ist->opts)) < 0) {
1427             if (ret == AVERROR_EXPERIMENTAL)
1428                 abort_codec_experimental(codec, 0);
1429             snprintf(error, error_len, "Error while opening decoder for input stream #%d:%d",
1430                     ist->file_index, ist->st->index);
1431             return ret;
1432         }
1433         assert_avoptions(ist->opts);
1434     }
1435
1436     ist->last_dts = ist->st->avg_frame_rate.num ? - ist->st->codec->has_b_frames * AV_TIME_BASE / av_q2d(ist->st->avg_frame_rate) : 0;
1437     ist->next_dts = AV_NOPTS_VALUE;
1438     init_pts_correction(&ist->pts_ctx);
1439     ist->is_start = 1;
1440
1441     return 0;
1442 }
1443
1444 static InputStream *get_input_stream(OutputStream *ost)
1445 {
1446     if (ost->source_index >= 0)
1447         return input_streams[ost->source_index];
1448
1449     if (ost->filter) {
1450         FilterGraph *fg = ost->filter->graph;
1451         int i;
1452
1453         for (i = 0; i < fg->nb_inputs; i++)
1454             if (fg->inputs[i]->ist->st->codec->codec_type == ost->st->codec->codec_type)
1455                 return fg->inputs[i]->ist;
1456     }
1457
1458     return NULL;
1459 }
1460
1461 static void parse_forced_key_frames(char *kf, OutputStream *ost,
1462                                     AVCodecContext *avctx)
1463 {
1464     char *p;
1465     int n = 1, i;
1466     int64_t t;
1467
1468     for (p = kf; *p; p++)
1469         if (*p == ',')
1470             n++;
1471     ost->forced_kf_count = n;
1472     ost->forced_kf_pts   = av_malloc(sizeof(*ost->forced_kf_pts) * n);
1473     if (!ost->forced_kf_pts) {
1474         av_log(NULL, AV_LOG_FATAL, "Could not allocate forced key frames array.\n");
1475         exit(1);
1476     }
1477
1478     p = kf;
1479     for (i = 0; i < n; i++) {
1480         char *next = strchr(p, ',');
1481
1482         if (next)
1483             *next++ = 0;
1484
1485         t = parse_time_or_die("force_key_frames", p, 1);
1486         ost->forced_kf_pts[i] = av_rescale_q(t, AV_TIME_BASE_Q, avctx->time_base);
1487
1488         p = next;
1489     }
1490 }
1491
1492 static int transcode_init(void)
1493 {
1494     int ret = 0, i, j, k;
1495     AVFormatContext *oc;
1496     AVCodecContext *codec;
1497     OutputStream *ost;
1498     InputStream *ist;
1499     char error[1024];
1500     int want_sdp = 1;
1501
1502     /* init framerate emulation */
1503     for (i = 0; i < nb_input_files; i++) {
1504         InputFile *ifile = input_files[i];
1505         if (ifile->rate_emu)
1506             for (j = 0; j < ifile->nb_streams; j++)
1507                 input_streams[j + ifile->ist_index]->start = av_gettime();
1508     }
1509
1510     /* output stream init */
1511     for (i = 0; i < nb_output_files; i++) {
1512         oc = output_files[i]->ctx;
1513         if (!oc->nb_streams && !(oc->oformat->flags & AVFMT_NOSTREAMS)) {
1514             av_dump_format(oc, i, oc->filename, 1);
1515             av_log(NULL, AV_LOG_ERROR, "Output file #%d does not contain any stream\n", i);
1516             return AVERROR(EINVAL);
1517         }
1518     }
1519
1520     /* init complex filtergraphs */
1521     for (i = 0; i < nb_filtergraphs; i++)
1522         if ((ret = avfilter_graph_config(filtergraphs[i]->graph, NULL)) < 0)
1523             return ret;
1524
1525     /* for each output stream, we compute the right encoding parameters */
1526     for (i = 0; i < nb_output_streams; i++) {
1527         AVCodecContext *icodec = NULL;
1528         ost = output_streams[i];
1529         oc  = output_files[ost->file_index]->ctx;
1530         ist = get_input_stream(ost);
1531
1532         if (ost->attachment_filename)
1533             continue;
1534
1535         codec  = ost->st->codec;
1536
1537         if (ist) {
1538             icodec = ist->st->codec;
1539
1540             ost->st->disposition          = ist->st->disposition;
1541             codec->bits_per_raw_sample    = icodec->bits_per_raw_sample;
1542             codec->chroma_sample_location = icodec->chroma_sample_location;
1543         }
1544
1545         if (ost->stream_copy) {
1546             uint64_t extra_size;
1547
1548             av_assert0(ist && !ost->filter);
1549
1550             extra_size = (uint64_t)icodec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE;
1551
1552             if (extra_size > INT_MAX) {
1553                 return AVERROR(EINVAL);
1554             }
1555
1556             /* if stream_copy is selected, no need to decode or encode */
1557             codec->codec_id   = icodec->codec_id;
1558             codec->codec_type = icodec->codec_type;
1559
1560             if (!codec->codec_tag) {
1561                 if (!oc->oformat->codec_tag ||
1562                      av_codec_get_id (oc->oformat->codec_tag, icodec->codec_tag) == codec->codec_id ||
1563                      av_codec_get_tag(oc->oformat->codec_tag, icodec->codec_id) <= 0)
1564                     codec->codec_tag = icodec->codec_tag;
1565             }
1566
1567             codec->bit_rate       = icodec->bit_rate;
1568             codec->rc_max_rate    = icodec->rc_max_rate;
1569             codec->rc_buffer_size = icodec->rc_buffer_size;
1570             codec->field_order    = icodec->field_order;
1571             codec->extradata      = av_mallocz(extra_size);
1572             if (!codec->extradata) {
1573                 return AVERROR(ENOMEM);
1574             }
1575             memcpy(codec->extradata, icodec->extradata, icodec->extradata_size);
1576             codec->extradata_size = icodec->extradata_size;
1577             if (!copy_tb) {
1578                 codec->time_base      = icodec->time_base;
1579                 codec->time_base.num *= icodec->ticks_per_frame;
1580                 av_reduce(&codec->time_base.num, &codec->time_base.den,
1581                           codec->time_base.num, codec->time_base.den, INT_MAX);
1582             } else
1583                 codec->time_base = ist->st->time_base;
1584
1585             switch (codec->codec_type) {
1586             case AVMEDIA_TYPE_AUDIO:
1587                 if (audio_volume != 256) {
1588                     av_log(NULL, AV_LOG_FATAL, "-acodec copy and -vol are incompatible (frames are not decoded)\n");
1589                     exit(1);
1590                 }
1591                 codec->channel_layout     = icodec->channel_layout;
1592                 codec->sample_rate        = icodec->sample_rate;
1593                 codec->channels           = icodec->channels;
1594                 codec->frame_size         = icodec->frame_size;
1595                 codec->audio_service_type = icodec->audio_service_type;
1596                 codec->block_align        = icodec->block_align;
1597                 break;
1598             case AVMEDIA_TYPE_VIDEO:
1599                 codec->pix_fmt            = icodec->pix_fmt;
1600                 codec->width              = icodec->width;
1601                 codec->height             = icodec->height;
1602                 codec->has_b_frames       = icodec->has_b_frames;
1603                 if (!codec->sample_aspect_ratio.num) {
1604                     codec->sample_aspect_ratio   =
1605                     ost->st->sample_aspect_ratio =
1606                         ist->st->sample_aspect_ratio.num ? ist->st->sample_aspect_ratio :
1607                         ist->st->codec->sample_aspect_ratio.num ?
1608                         ist->st->codec->sample_aspect_ratio : (AVRational){0, 1};
1609                 }
1610                 break;
1611             case AVMEDIA_TYPE_SUBTITLE:
1612                 codec->width  = icodec->width;
1613                 codec->height = icodec->height;
1614                 break;
1615             case AVMEDIA_TYPE_DATA:
1616             case AVMEDIA_TYPE_ATTACHMENT:
1617                 break;
1618             default:
1619                 abort();
1620             }
1621         } else {
1622             if (!ost->enc) {
1623                 /* should only happen when a default codec is not present. */
1624                 snprintf(error, sizeof(error), "Automatic encoder selection "
1625                          "failed for output stream #%d:%d. Default encoder for "
1626                          "format %s is probably disabled. Please choose an "
1627                          "encoder manually.\n", ost->file_index, ost->index,
1628                          oc->oformat->name);
1629                 ret = AVERROR(EINVAL);
1630                 goto dump_format;
1631             }
1632
1633             if (ist)
1634                 ist->decoding_needed = 1;
1635             ost->encoding_needed = 1;
1636
1637             /*
1638              * We want CFR output if and only if one of those is true:
1639              * 1) user specified output framerate with -r
1640              * 2) user specified -vsync cfr
1641              * 3) output format is CFR and the user didn't force vsync to
1642              *    something else than CFR
1643              *
1644              * in such a case, set ost->frame_rate
1645              */
1646             if (codec->codec_type == AVMEDIA_TYPE_VIDEO &&
1647                 !ost->frame_rate.num && ist &&
1648                 (video_sync_method ==  VSYNC_CFR ||
1649                  (video_sync_method ==  VSYNC_AUTO &&
1650                   !(oc->oformat->flags & (AVFMT_NOTIMESTAMPS | AVFMT_VARIABLE_FPS))))) {
1651                 ost->frame_rate = ist->framerate.num ? ist->framerate :
1652                                   ist->st->avg_frame_rate.num ?
1653                                   ist->st->avg_frame_rate :
1654                                   (AVRational){25, 1};
1655
1656                 if (ost->enc && ost->enc->supported_framerates && !ost->force_fps) {
1657                     int idx = av_find_nearest_q_idx(ost->frame_rate, ost->enc->supported_framerates);
1658                     ost->frame_rate = ost->enc->supported_framerates[idx];
1659                 }
1660             }
1661
1662             if (!ost->filter &&
1663                 (codec->codec_type == AVMEDIA_TYPE_VIDEO ||
1664                  codec->codec_type == AVMEDIA_TYPE_AUDIO)) {
1665                     FilterGraph *fg;
1666                     fg = init_simple_filtergraph(ist, ost);
1667                     if (configure_filtergraph(fg)) {
1668                         av_log(NULL, AV_LOG_FATAL, "Error opening filters!\n");
1669                         exit(1);
1670                     }
1671             }
1672
1673             switch (codec->codec_type) {
1674             case AVMEDIA_TYPE_AUDIO:
1675                 codec->sample_fmt     = ost->filter->filter->inputs[0]->format;
1676                 codec->sample_rate    = ost->filter->filter->inputs[0]->sample_rate;
1677                 codec->channel_layout = ost->filter->filter->inputs[0]->channel_layout;
1678                 codec->channels       = av_get_channel_layout_nb_channels(codec->channel_layout);
1679                 codec->time_base      = (AVRational){ 1, codec->sample_rate };
1680                 break;
1681             case AVMEDIA_TYPE_VIDEO:
1682                 codec->time_base = ost->filter->filter->inputs[0]->time_base;
1683
1684                 codec->width  = ost->filter->filter->inputs[0]->w;
1685                 codec->height = ost->filter->filter->inputs[0]->h;
1686                 codec->sample_aspect_ratio = ost->st->sample_aspect_ratio =
1687                     ost->frame_aspect_ratio ? // overridden by the -aspect cli option
1688                     av_d2q(ost->frame_aspect_ratio * codec->height/codec->width, 255) :
1689                     ost->filter->filter->inputs[0]->sample_aspect_ratio;
1690                 codec->pix_fmt = ost->filter->filter->inputs[0]->format;
1691
1692                 if (icodec &&
1693                     (codec->width   != icodec->width  ||
1694                      codec->height  != icodec->height ||
1695                      codec->pix_fmt != icodec->pix_fmt)) {
1696                     codec->bits_per_raw_sample = 0;
1697                 }
1698
1699                 if (ost->forced_keyframes)
1700                     parse_forced_key_frames(ost->forced_keyframes, ost,
1701                                             ost->st->codec);
1702                 break;
1703             case AVMEDIA_TYPE_SUBTITLE:
1704                 codec->time_base = (AVRational){1, 1000};
1705                 break;
1706             default:
1707                 abort();
1708                 break;
1709             }
1710             /* two pass mode */
1711             if ((codec->flags & (CODEC_FLAG_PASS1 | CODEC_FLAG_PASS2))) {
1712                 char logfilename[1024];
1713                 FILE *f;
1714
1715                 snprintf(logfilename, sizeof(logfilename), "%s-%d.log",
1716                          ost->logfile_prefix ? ost->logfile_prefix :
1717                                                DEFAULT_PASS_LOGFILENAME_PREFIX,
1718                          i);
1719                 if (!strcmp(ost->enc->name, "libx264")) {
1720                     av_dict_set(&ost->opts, "stats", logfilename, AV_DICT_DONT_OVERWRITE);
1721                 } else {
1722                     if (codec->flags & CODEC_FLAG_PASS1) {
1723                         f = fopen(logfilename, "wb");
1724                         if (!f) {
1725                             av_log(NULL, AV_LOG_FATAL, "Cannot write log file '%s' for pass-1 encoding: %s\n",
1726                                    logfilename, strerror(errno));
1727                             exit(1);
1728                         }
1729                         ost->logfile = f;
1730                     } else {
1731                         char  *logbuffer;
1732                         size_t logbuffer_size;
1733                         if (cmdutils_read_file(logfilename, &logbuffer, &logbuffer_size) < 0) {
1734                             av_log(NULL, AV_LOG_FATAL, "Error reading log file '%s' for pass-2 encoding\n",
1735                                    logfilename);
1736                             exit(1);
1737                         }
1738                         codec->stats_in = logbuffer;
1739                     }
1740                 }
1741             }
1742         }
1743     }
1744
1745     /* open each encoder */
1746     for (i = 0; i < nb_output_streams; i++) {
1747         ost = output_streams[i];
1748         if (ost->encoding_needed) {
1749             AVCodec      *codec = ost->enc;
1750             AVCodecContext *dec = NULL;
1751
1752             if ((ist = get_input_stream(ost)))
1753                 dec = ist->st->codec;
1754             if (dec && dec->subtitle_header) {
1755                 ost->st->codec->subtitle_header = av_malloc(dec->subtitle_header_size);
1756                 if (!ost->st->codec->subtitle_header) {
1757                     ret = AVERROR(ENOMEM);
1758                     goto dump_format;
1759                 }
1760                 memcpy(ost->st->codec->subtitle_header, dec->subtitle_header, dec->subtitle_header_size);
1761                 ost->st->codec->subtitle_header_size = dec->subtitle_header_size;
1762             }
1763             if (!av_dict_get(ost->opts, "threads", NULL, 0))
1764                 av_dict_set(&ost->opts, "threads", "auto", 0);
1765             if ((ret = avcodec_open2(ost->st->codec, codec, &ost->opts)) < 0) {
1766                 if (ret == AVERROR_EXPERIMENTAL)
1767                     abort_codec_experimental(codec, 1);
1768                 snprintf(error, sizeof(error), "Error while opening encoder for output stream #%d:%d - maybe incorrect parameters such as bit_rate, rate, width or height",
1769                         ost->file_index, ost->index);
1770                 goto dump_format;
1771             }
1772             assert_avoptions(ost->opts);
1773             if (ost->st->codec->bit_rate && ost->st->codec->bit_rate < 1000)
1774                 av_log(NULL, AV_LOG_WARNING, "The bitrate parameter is set too low."
1775                                              "It takes bits/s as argument, not kbits/s\n");
1776             extra_size += ost->st->codec->extradata_size;
1777
1778             if (ost->st->codec->me_threshold)
1779                 input_streams[ost->source_index]->st->codec->debug |= FF_DEBUG_MV;
1780         } else {
1781             av_opt_set_dict(ost->st->codec, &ost->opts);
1782         }
1783     }
1784
1785     /* init input streams */
1786     for (i = 0; i < nb_input_streams; i++)
1787         if ((ret = init_input_stream(i, error, sizeof(error))) < 0)
1788             goto dump_format;
1789
1790     /* discard unused programs */
1791     for (i = 0; i < nb_input_files; i++) {
1792         InputFile *ifile = input_files[i];
1793         for (j = 0; j < ifile->ctx->nb_programs; j++) {
1794             AVProgram *p = ifile->ctx->programs[j];
1795             int discard  = AVDISCARD_ALL;
1796
1797             for (k = 0; k < p->nb_stream_indexes; k++)
1798                 if (!input_streams[ifile->ist_index + p->stream_index[k]]->discard) {
1799                     discard = AVDISCARD_DEFAULT;
1800                     break;
1801                 }
1802             p->discard = discard;
1803         }
1804     }
1805
1806     /* open files and write file headers */
1807     for (i = 0; i < nb_output_files; i++) {
1808         oc = output_files[i]->ctx;
1809         oc->interrupt_callback = int_cb;
1810         if ((ret = avformat_write_header(oc, &output_files[i]->opts)) < 0) {
1811             char errbuf[128];
1812             const char *errbuf_ptr = errbuf;
1813             if (av_strerror(ret, errbuf, sizeof(errbuf)) < 0)
1814                 errbuf_ptr = strerror(AVUNERROR(ret));
1815             snprintf(error, sizeof(error), "Could not write header for output file #%d (incorrect codec parameters ?): %s", i, errbuf_ptr);
1816             ret = AVERROR(EINVAL);
1817             goto dump_format;
1818         }
1819         assert_avoptions(output_files[i]->opts);
1820         if (strcmp(oc->oformat->name, "rtp")) {
1821             want_sdp = 0;
1822         }
1823     }
1824
1825  dump_format:
1826     /* dump the file output parameters - cannot be done before in case
1827        of stream copy */
1828     for (i = 0; i < nb_output_files; i++) {
1829         av_dump_format(output_files[i]->ctx, i, output_files[i]->ctx->filename, 1);
1830     }
1831
1832     /* dump the stream mapping */
1833     av_log(NULL, AV_LOG_INFO, "Stream mapping:\n");
1834     for (i = 0; i < nb_input_streams; i++) {
1835         ist = input_streams[i];
1836
1837         for (j = 0; j < ist->nb_filters; j++) {
1838             if (ist->filters[j]->graph->graph_desc) {
1839                 av_log(NULL, AV_LOG_INFO, "  Stream #%d:%d (%s) -> %s",
1840                        ist->file_index, ist->st->index, ist->dec ? ist->dec->name : "?",
1841                        ist->filters[j]->name);
1842                 if (nb_filtergraphs > 1)
1843                     av_log(NULL, AV_LOG_INFO, " (graph %d)", ist->filters[j]->graph->index);
1844                 av_log(NULL, AV_LOG_INFO, "\n");
1845             }
1846         }
1847     }
1848
1849     for (i = 0; i < nb_output_streams; i++) {
1850         ost = output_streams[i];
1851
1852         if (ost->attachment_filename) {
1853             /* an attached file */
1854             av_log(NULL, AV_LOG_INFO, "  File %s -> Stream #%d:%d\n",
1855                    ost->attachment_filename, ost->file_index, ost->index);
1856             continue;
1857         }
1858
1859         if (ost->filter && ost->filter->graph->graph_desc) {
1860             /* output from a complex graph */
1861             av_log(NULL, AV_LOG_INFO, "  %s", ost->filter->name);
1862             if (nb_filtergraphs > 1)
1863                 av_log(NULL, AV_LOG_INFO, " (graph %d)", ost->filter->graph->index);
1864
1865             av_log(NULL, AV_LOG_INFO, " -> Stream #%d:%d (%s)\n", ost->file_index,
1866                    ost->index, ost->enc ? ost->enc->name : "?");
1867             continue;
1868         }
1869
1870         av_log(NULL, AV_LOG_INFO, "  Stream #%d:%d -> #%d:%d",
1871                input_streams[ost->source_index]->file_index,
1872                input_streams[ost->source_index]->st->index,
1873                ost->file_index,
1874                ost->index);
1875         if (ost->sync_ist != input_streams[ost->source_index])
1876             av_log(NULL, AV_LOG_INFO, " [sync #%d:%d]",
1877                    ost->sync_ist->file_index,
1878                    ost->sync_ist->st->index);
1879         if (ost->stream_copy)
1880             av_log(NULL, AV_LOG_INFO, " (copy)");
1881         else
1882             av_log(NULL, AV_LOG_INFO, " (%s -> %s)", input_streams[ost->source_index]->dec ?
1883                    input_streams[ost->source_index]->dec->name : "?",
1884                    ost->enc ? ost->enc->name : "?");
1885         av_log(NULL, AV_LOG_INFO, "\n");
1886     }
1887
1888     if (ret) {
1889         av_log(NULL, AV_LOG_ERROR, "%s\n", error);
1890         return ret;
1891     }
1892
1893     if (want_sdp) {
1894         print_sdp();
1895     }
1896
1897     return 0;
1898 }
1899
1900 /* Return 1 if there remain streams where more output is wanted, 0 otherwise. */
1901 static int need_output(void)
1902 {
1903     int i;
1904
1905     for (i = 0; i < nb_output_streams; i++) {
1906         OutputStream *ost    = output_streams[i];
1907         OutputFile *of       = output_files[ost->file_index];
1908         AVFormatContext *os  = output_files[ost->file_index]->ctx;
1909
1910         if (ost->finished ||
1911             (os->pb && avio_tell(os->pb) >= of->limit_filesize))
1912             continue;
1913         if (ost->frame_number >= ost->max_frames) {
1914             int j;
1915             for (j = 0; j < of->ctx->nb_streams; j++)
1916                 output_streams[of->ost_index + j]->finished = 1;
1917             continue;
1918         }
1919
1920         return 1;
1921     }
1922
1923     return 0;
1924 }
1925
1926 static InputFile *select_input_file(void)
1927 {
1928     InputFile *ifile = NULL;
1929     int64_t ipts_min = INT64_MAX;
1930     int i;
1931
1932     for (i = 0; i < nb_input_streams; i++) {
1933         InputStream *ist = input_streams[i];
1934         int64_t ipts     = ist->last_dts;
1935
1936         if (ist->discard || input_files[ist->file_index]->eagain)
1937             continue;
1938         if (!input_files[ist->file_index]->eof_reached) {
1939             if (ipts < ipts_min) {
1940                 ipts_min = ipts;
1941                 ifile    = input_files[ist->file_index];
1942             }
1943         }
1944     }
1945
1946     return ifile;
1947 }
1948
1949 #if HAVE_PTHREADS
1950 static void *input_thread(void *arg)
1951 {
1952     InputFile *f = arg;
1953     int ret = 0;
1954
1955     while (!transcoding_finished && ret >= 0) {
1956         AVPacket pkt;
1957         ret = av_read_frame(f->ctx, &pkt);
1958
1959         if (ret == AVERROR(EAGAIN)) {
1960             av_usleep(10000);
1961             ret = 0;
1962             continue;
1963         } else if (ret < 0)
1964             break;
1965
1966         pthread_mutex_lock(&f->fifo_lock);
1967         while (!av_fifo_space(f->fifo))
1968             pthread_cond_wait(&f->fifo_cond, &f->fifo_lock);
1969
1970         av_dup_packet(&pkt);
1971         av_fifo_generic_write(f->fifo, &pkt, sizeof(pkt), NULL);
1972
1973         pthread_mutex_unlock(&f->fifo_lock);
1974     }
1975
1976     f->finished = 1;
1977     return NULL;
1978 }
1979
1980 static void free_input_threads(void)
1981 {
1982     int i;
1983
1984     if (nb_input_files == 1)
1985         return;
1986
1987     transcoding_finished = 1;
1988
1989     for (i = 0; i < nb_input_files; i++) {
1990         InputFile *f = input_files[i];
1991         AVPacket pkt;
1992
1993         if (!f->fifo || f->joined)
1994             continue;
1995
1996         pthread_mutex_lock(&f->fifo_lock);
1997         while (av_fifo_size(f->fifo)) {
1998             av_fifo_generic_read(f->fifo, &pkt, sizeof(pkt), NULL);
1999             av_free_packet(&pkt);
2000         }
2001         pthread_cond_signal(&f->fifo_cond);
2002         pthread_mutex_unlock(&f->fifo_lock);
2003
2004         pthread_join(f->thread, NULL);
2005         f->joined = 1;
2006
2007         while (av_fifo_size(f->fifo)) {
2008             av_fifo_generic_read(f->fifo, &pkt, sizeof(pkt), NULL);
2009             av_free_packet(&pkt);
2010         }
2011         av_fifo_free(f->fifo);
2012     }
2013 }
2014
2015 static int init_input_threads(void)
2016 {
2017     int i, ret;
2018
2019     if (nb_input_files == 1)
2020         return 0;
2021
2022     for (i = 0; i < nb_input_files; i++) {
2023         InputFile *f = input_files[i];
2024
2025         if (!(f->fifo = av_fifo_alloc(8*sizeof(AVPacket))))
2026             return AVERROR(ENOMEM);
2027
2028         pthread_mutex_init(&f->fifo_lock, NULL);
2029         pthread_cond_init (&f->fifo_cond, NULL);
2030
2031         if ((ret = pthread_create(&f->thread, NULL, input_thread, f)))
2032             return AVERROR(ret);
2033     }
2034     return 0;
2035 }
2036
2037 static int get_input_packet_mt(InputFile *f, AVPacket *pkt)
2038 {
2039     int ret = 0;
2040
2041     pthread_mutex_lock(&f->fifo_lock);
2042
2043     if (av_fifo_size(f->fifo)) {
2044         av_fifo_generic_read(f->fifo, pkt, sizeof(*pkt), NULL);
2045         pthread_cond_signal(&f->fifo_cond);
2046     } else {
2047         if (f->finished)
2048             ret = AVERROR_EOF;
2049         else
2050             ret = AVERROR(EAGAIN);
2051     }
2052
2053     pthread_mutex_unlock(&f->fifo_lock);
2054
2055     return ret;
2056 }
2057 #endif
2058
2059 static int get_input_packet(InputFile *f, AVPacket *pkt)
2060 {
2061 #if HAVE_PTHREADS
2062     if (nb_input_files > 1)
2063         return get_input_packet_mt(f, pkt);
2064 #endif
2065     return av_read_frame(f->ctx, pkt);
2066 }
2067
2068 static int got_eagain(void)
2069 {
2070     int i;
2071     for (i = 0; i < nb_input_files; i++)
2072         if (input_files[i]->eagain)
2073             return 1;
2074     return 0;
2075 }
2076
2077 static void reset_eagain(void)
2078 {
2079     int i;
2080     for (i = 0; i < nb_input_files; i++)
2081         input_files[i]->eagain = 0;
2082 }
2083
2084 /*
2085  * Read one packet from an input file and send it for
2086  * - decoding -> lavfi (audio/video)
2087  * - decoding -> encoding -> muxing (subtitles)
2088  * - muxing (streamcopy)
2089  *
2090  * Return
2091  * - 0 -- one packet was read and processed
2092  * - AVERROR(EAGAIN) -- no packets were available for selected file,
2093  *   this function should be called again
2094  * - AVERROR_EOF -- this function should not be called again
2095  */
2096 static int process_input(void)
2097 {
2098     InputFile *ifile;
2099     AVFormatContext *is;
2100     InputStream *ist;
2101     AVPacket pkt;
2102     int ret, i, j;
2103
2104     /* select the stream that we must read now */
2105     ifile = select_input_file();
2106     /* if none, if is finished */
2107     if (!ifile) {
2108         if (got_eagain()) {
2109             reset_eagain();
2110             av_usleep(10000);
2111             return AVERROR(EAGAIN);
2112         }
2113         av_log(NULL, AV_LOG_VERBOSE, "No more inputs to read from.\n");
2114         return AVERROR_EOF;
2115     }
2116
2117     is  = ifile->ctx;
2118     ret = get_input_packet(ifile, &pkt);
2119
2120     if (ret == AVERROR(EAGAIN)) {
2121         ifile->eagain = 1;
2122         return ret;
2123     }
2124     if (ret < 0) {
2125         if (ret != AVERROR_EOF) {
2126             print_error(is->filename, ret);
2127             if (exit_on_error)
2128                 exit(1);
2129         }
2130         ifile->eof_reached = 1;
2131
2132         for (i = 0; i < ifile->nb_streams; i++) {
2133             ist = input_streams[ifile->ist_index + i];
2134             if (ist->decoding_needed)
2135                 output_packet(ist, NULL);
2136
2137             /* mark all outputs that don't go through lavfi as finished */
2138             for (j = 0; j < nb_output_streams; j++) {
2139                 OutputStream *ost = output_streams[j];
2140
2141                 if (ost->source_index == ifile->ist_index + i &&
2142                     (ost->stream_copy || ost->enc->type == AVMEDIA_TYPE_SUBTITLE))
2143                     ost->finished= 1;
2144             }
2145         }
2146
2147         return AVERROR(EAGAIN);
2148     }
2149
2150     reset_eagain();
2151
2152     if (do_pkt_dump) {
2153         av_pkt_dump_log2(NULL, AV_LOG_DEBUG, &pkt, do_hex_dump,
2154                          is->streams[pkt.stream_index]);
2155     }
2156     /* the following test is needed in case new streams appear
2157        dynamically in stream : we ignore them */
2158     if (pkt.stream_index >= ifile->nb_streams)
2159         goto discard_packet;
2160
2161     ist = input_streams[ifile->ist_index + pkt.stream_index];
2162     if (ist->discard)
2163         goto discard_packet;
2164
2165     if (pkt.dts != AV_NOPTS_VALUE)
2166         pkt.dts += av_rescale_q(ifile->ts_offset, AV_TIME_BASE_Q, ist->st->time_base);
2167     if (pkt.pts != AV_NOPTS_VALUE)
2168         pkt.pts += av_rescale_q(ifile->ts_offset, AV_TIME_BASE_Q, ist->st->time_base);
2169
2170     if (pkt.pts != AV_NOPTS_VALUE)
2171         pkt.pts *= ist->ts_scale;
2172     if (pkt.dts != AV_NOPTS_VALUE)
2173         pkt.dts *= ist->ts_scale;
2174
2175     if (pkt.dts != AV_NOPTS_VALUE && ist->next_dts != AV_NOPTS_VALUE &&
2176         (is->iformat->flags & AVFMT_TS_DISCONT)) {
2177         int64_t pkt_dts = av_rescale_q(pkt.dts, ist->st->time_base, AV_TIME_BASE_Q);
2178         int64_t delta   = pkt_dts - ist->next_dts;
2179
2180         if ((FFABS(delta) > 1LL * dts_delta_threshold * AV_TIME_BASE || pkt_dts + 1 < ist->last_dts) && !copy_ts) {
2181             ifile->ts_offset -= delta;
2182             av_log(NULL, AV_LOG_DEBUG,
2183                    "timestamp discontinuity %"PRId64", new offset= %"PRId64"\n",
2184                    delta, ifile->ts_offset);
2185             pkt.dts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base);
2186             if (pkt.pts != AV_NOPTS_VALUE)
2187                 pkt.pts -= av_rescale_q(delta, AV_TIME_BASE_Q, ist->st->time_base);
2188         }
2189     }
2190
2191     ret = output_packet(ist, &pkt);
2192     if (ret < 0) {
2193         av_log(NULL, AV_LOG_ERROR, "Error while decoding stream #%d:%d\n",
2194                ist->file_index, ist->st->index);
2195         if (exit_on_error)
2196             exit(1);
2197     }
2198
2199 discard_packet:
2200     av_free_packet(&pkt);
2201
2202     return 0;
2203 }
2204
2205 /*
2206  * The following code is the main loop of the file converter
2207  */
2208 static int transcode(void)
2209 {
2210     int ret, i, need_input = 1;
2211     AVFormatContext *os;
2212     OutputStream *ost;
2213     InputStream *ist;
2214     int64_t timer_start;
2215
2216     ret = transcode_init();
2217     if (ret < 0)
2218         goto fail;
2219
2220     av_log(NULL, AV_LOG_INFO, "Press ctrl-c to stop encoding\n");
2221     term_init();
2222
2223     timer_start = av_gettime();
2224
2225 #if HAVE_PTHREADS
2226     if ((ret = init_input_threads()) < 0)
2227         goto fail;
2228 #endif
2229
2230     while (!received_sigterm) {
2231         /* check if there's any stream where output is still needed */
2232         if (!need_output()) {
2233             av_log(NULL, AV_LOG_VERBOSE, "No more output streams to write to, finishing.\n");
2234             break;
2235         }
2236
2237         /* read and process one input packet if needed */
2238         if (need_input) {
2239             ret = process_input();
2240             if (ret == AVERROR_EOF)
2241                 need_input = 0;
2242         }
2243
2244         ret = poll_filters();
2245         if (ret < 0) {
2246             if (ret == AVERROR_EOF || ret == AVERROR(EAGAIN))
2247                 continue;
2248
2249             av_log(NULL, AV_LOG_ERROR, "Error while filtering.\n");
2250             break;
2251         }
2252
2253         /* dump report by using the output first video and audio streams */
2254         print_report(0, timer_start);
2255     }
2256 #if HAVE_PTHREADS
2257     free_input_threads();
2258 #endif
2259
2260     /* at the end of stream, we must flush the decoder buffers */
2261     for (i = 0; i < nb_input_streams; i++) {
2262         ist = input_streams[i];
2263         if (!input_files[ist->file_index]->eof_reached && ist->decoding_needed) {
2264             output_packet(ist, NULL);
2265         }
2266     }
2267     poll_filters();
2268     flush_encoders();
2269
2270     term_exit();
2271
2272     /* write the trailer if needed and close file */
2273     for (i = 0; i < nb_output_files; i++) {
2274         os = output_files[i]->ctx;
2275         av_write_trailer(os);
2276     }
2277
2278     /* dump report by using the first video and audio streams */
2279     print_report(1, timer_start);
2280
2281     /* close each encoder */
2282     for (i = 0; i < nb_output_streams; i++) {
2283         ost = output_streams[i];
2284         if (ost->encoding_needed) {
2285             av_freep(&ost->st->codec->stats_in);
2286             avcodec_close(ost->st->codec);
2287         }
2288     }
2289
2290     /* close each decoder */
2291     for (i = 0; i < nb_input_streams; i++) {
2292         ist = input_streams[i];
2293         if (ist->decoding_needed) {
2294             avcodec_close(ist->st->codec);
2295         }
2296     }
2297
2298     /* finished ! */
2299     ret = 0;
2300
2301  fail:
2302 #if HAVE_PTHREADS
2303     free_input_threads();
2304 #endif
2305
2306     if (output_streams) {
2307         for (i = 0; i < nb_output_streams; i++) {
2308             ost = output_streams[i];
2309             if (ost) {
2310                 if (ost->stream_copy)
2311                     av_freep(&ost->st->codec->extradata);
2312                 if (ost->logfile) {
2313                     fclose(ost->logfile);
2314                     ost->logfile = NULL;
2315                 }
2316                 av_freep(&ost->st->codec->subtitle_header);
2317                 av_free(ost->forced_kf_pts);
2318                 av_dict_free(&ost->opts);
2319                 av_dict_free(&ost->resample_opts);
2320             }
2321         }
2322     }
2323     return ret;
2324 }
2325
2326 static int64_t getutime(void)
2327 {
2328 #if HAVE_GETRUSAGE
2329     struct rusage rusage;
2330
2331     getrusage(RUSAGE_SELF, &rusage);
2332     return (rusage.ru_utime.tv_sec * 1000000LL) + rusage.ru_utime.tv_usec;
2333 #elif HAVE_GETPROCESSTIMES
2334     HANDLE proc;
2335     FILETIME c, e, k, u;
2336     proc = GetCurrentProcess();
2337     GetProcessTimes(proc, &c, &e, &k, &u);
2338     return ((int64_t) u.dwHighDateTime << 32 | u.dwLowDateTime) / 10;
2339 #else
2340     return av_gettime();
2341 #endif
2342 }
2343
2344 static int64_t getmaxrss(void)
2345 {
2346 #if HAVE_GETRUSAGE && HAVE_STRUCT_RUSAGE_RU_MAXRSS
2347     struct rusage rusage;
2348     getrusage(RUSAGE_SELF, &rusage);
2349     return (int64_t)rusage.ru_maxrss * 1024;
2350 #elif HAVE_GETPROCESSMEMORYINFO
2351     HANDLE proc;
2352     PROCESS_MEMORY_COUNTERS memcounters;
2353     proc = GetCurrentProcess();
2354     memcounters.cb = sizeof(memcounters);
2355     GetProcessMemoryInfo(proc, &memcounters, sizeof(memcounters));
2356     return memcounters.PeakPagefileUsage;
2357 #else
2358     return 0;
2359 #endif
2360 }
2361
2362 int main(int argc, char **argv)
2363 {
2364     int ret;
2365     int64_t ti;
2366
2367     atexit(exit_program);
2368
2369     av_log_set_flags(AV_LOG_SKIP_REPEATED);
2370     parse_loglevel(argc, argv, options);
2371
2372     avcodec_register_all();
2373 #if CONFIG_AVDEVICE
2374     avdevice_register_all();
2375 #endif
2376     avfilter_register_all();
2377     av_register_all();
2378     avformat_network_init();
2379
2380     show_banner();
2381
2382     /* parse options and open all input/output files */
2383     ret = avconv_parse_options(argc, argv);
2384     if (ret < 0)
2385         exit(1);
2386
2387     if (nb_output_files <= 0 && nb_input_files == 0) {
2388         show_usage();
2389         av_log(NULL, AV_LOG_WARNING, "Use -h to get full help or, even better, run 'man %s'\n", program_name);
2390         exit(1);
2391     }
2392
2393     /* file converter / grab */
2394     if (nb_output_files <= 0) {
2395         fprintf(stderr, "At least one output file must be specified\n");
2396         exit(1);
2397     }
2398
2399     ti = getutime();
2400     if (transcode() < 0)
2401         exit(1);
2402     ti = getutime() - ti;
2403     if (do_benchmark) {
2404         int maxrss = getmaxrss() / 1024;
2405         printf("bench: utime=%0.3fs maxrss=%ikB\n", ti / 1000000.0, maxrss);
2406     }
2407
2408     exit(0);
2409     return 0;
2410 }