diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-08-20 15:43:53 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-08-20 15:43:56 +0200 |
commit | f138c7f993e1aaf5223c546da5292993a467ee8d (patch) | |
tree | a56e5036fcfb3ebc8f92dddf558e65c0fcb76301 /avconv.c | |
parent | 4b66c8b42589adfb34294d869e58adabe1491138 (diff) | |
parent | f5bae2c6ed855f528d68ddab1cad080bcc271440 (diff) | |
download | ffmpeg-f138c7f993e1aaf5223c546da5292993a467ee8d.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
doc/avconv: replace forgotten av by avconv.
avconv: reset input_ts_offset between files.
doc/avconv: extend -ss documentation.
avconv: call flush_encoders() from transcode() directly.
avconv: fix broken indentation.
avconv: rescue poor abused limit_filesize global.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'avconv.c')
-rw-r--r-- | avconv.c | 26 |
1 files changed, 13 insertions, 13 deletions
@@ -213,7 +213,7 @@ static int64_t extra_size = 0; static int nb_frames_dup = 0; static int nb_frames_drop = 0; static int input_sync; -static uint64_t limit_filesize = 0; +static uint64_t limit_filesize = UINT64_MAX; static int force_fps = 0; static char *forced_key_frames = NULL; @@ -324,6 +324,7 @@ typedef struct OutputFile { int ost_index; /* index of the first stream in output_streams */ int64_t recording_time; /* desired length of the resulting file in microseconds */ int64_t start_time; /* start time in microseconds */ + uint64_t limit_filesize; } OutputFile; static InputStream *input_streams = NULL; @@ -1455,7 +1456,7 @@ static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_ memset(buf, fill_char, size); } -static void flush_encoders(int ist_index, OutputStream *ost_table, int nb_ostreams) +static void flush_encoders(OutputStream *ost_table, int nb_ostreams) { int i, ret; @@ -1464,7 +1465,7 @@ static void flush_encoders(int ist_index, OutputStream *ost_table, int nb_ostrea AVCodecContext *enc = ost->st->codec; AVFormatContext *os = output_files[ost->file_index].ctx; - if (ost->source_index != ist_index || !ost->encoding_needed) + if (!ost->encoding_needed) continue; if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO && enc->frame_size <=1) @@ -1865,10 +1866,6 @@ static int output_packet(InputStream *ist, int ist_index, } } discard_packet: - if (pkt == NULL) { - /* EOF handling */ - flush_encoders(ist_index, ost_table, nb_ostreams); - } return 0; } @@ -2354,14 +2351,17 @@ static int transcode(OutputFile *output_files, smallest output pts */ file_index = -1; for (i = 0; i < nb_output_streams; i++) { + OutputFile *of; int64_t ipts; double opts; ost = &output_streams[i]; + of = &output_files[ost->file_index]; os = output_files[ost->file_index].ctx; ist = &input_streams[ost->source_index]; - if(ost->is_past_recording_time || no_packet[ist->file_index]) + if (ost->is_past_recording_time || no_packet[ist->file_index] || + (os->pb && avio_tell(os->pb) >= of->limit_filesize)) continue; - opts = ost->st->pts.val * av_q2d(ost->st->time_base); + opts = ost->st->pts.val * av_q2d(ost->st->time_base); ipts = ist->pts; if (!input_files[ist->file_index].eof_reached){ if(ipts < ipts_min) { @@ -2389,10 +2389,6 @@ static int transcode(OutputFile *output_files, break; } - /* finish if limit size exhausted */ - if (limit_filesize != 0 && limit_filesize <= avio_tell(output_files[0].ctx->pb)) - break; - /* read a frame from it and output it in the fifo */ is = input_files[file_index].ctx; ret= av_read_frame(is, &pkt); @@ -2479,6 +2475,7 @@ static int transcode(OutputFile *output_files, output_packet(ist, i, output_streams, nb_output_streams, NULL); } } + flush_encoders(output_streams, nb_output_streams); term_exit(); @@ -3182,6 +3179,7 @@ static int opt_input_file(const char *opt, const char *filename) audio_channels = 0; audio_sample_fmt = AV_SAMPLE_FMT_NONE; av_dict_free(&ts_scale); + input_ts_offset = 0; for (i = 0; i < orig_nb_streams; i++) av_dict_free(&opts[i]); @@ -3668,6 +3666,7 @@ static int opt_output_file(const char *opt, const char *filename) output_files[nb_output_files - 1].ost_index = nb_output_streams - oc->nb_streams; output_files[nb_output_files - 1].recording_time = recording_time; output_files[nb_output_files - 1].start_time = start_time; + output_files[nb_output_files - 1].limit_filesize = limit_filesize; av_dict_copy(&output_files[nb_output_files - 1].opts, format_opts, 0); /* check filename in case of an image number is expected */ @@ -3794,6 +3793,7 @@ static int opt_output_file(const char *opt, const char *filename) chapters_input_file = INT_MAX; recording_time = INT64_MAX; start_time = 0; + limit_filesize = UINT64_MAX; av_freep(&meta_data_maps); nb_meta_data_maps = 0; |