mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
avconv: rescue poor abused limit_filesize global.
Keep a per-OutputFile instance of it, thus making -fs work with multiple output files. Signed-off-by: Alex Converse <alex.converse@gmail.com>
This commit is contained in:
parent
e6d2b73784
commit
f21f294e05
14
avconv.c
14
avconv.c
@ -197,7 +197,7 @@ static int64_t extra_size = 0;
|
|||||||
static int nb_frames_dup = 0;
|
static int nb_frames_dup = 0;
|
||||||
static int nb_frames_drop = 0;
|
static int nb_frames_drop = 0;
|
||||||
static int input_sync;
|
static int input_sync;
|
||||||
static uint64_t limit_filesize = 0;
|
static uint64_t limit_filesize = UINT64_MAX;
|
||||||
static int force_fps = 0;
|
static int force_fps = 0;
|
||||||
static char *forced_key_frames = NULL;
|
static char *forced_key_frames = NULL;
|
||||||
|
|
||||||
@ -303,6 +303,7 @@ typedef struct OutputFile {
|
|||||||
int ost_index; /* index of the first stream in output_streams */
|
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 recording_time; /* desired length of the resulting file in microseconds */
|
||||||
int64_t start_time; /* start time in microseconds */
|
int64_t start_time; /* start time in microseconds */
|
||||||
|
uint64_t limit_filesize;
|
||||||
} OutputFile;
|
} OutputFile;
|
||||||
|
|
||||||
static InputStream *input_streams = NULL;
|
static InputStream *input_streams = NULL;
|
||||||
@ -2246,12 +2247,15 @@ static int transcode(OutputFile *output_files,
|
|||||||
smallest output pts */
|
smallest output pts */
|
||||||
file_index = -1;
|
file_index = -1;
|
||||||
for (i = 0; i < nb_output_streams; i++) {
|
for (i = 0; i < nb_output_streams; i++) {
|
||||||
|
OutputFile *of;
|
||||||
int64_t ipts;
|
int64_t ipts;
|
||||||
double opts;
|
double opts;
|
||||||
ost = &output_streams[i];
|
ost = &output_streams[i];
|
||||||
|
of = &output_files[ost->file_index];
|
||||||
os = output_files[ost->file_index].ctx;
|
os = output_files[ost->file_index].ctx;
|
||||||
ist = &input_streams[ost->source_index];
|
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;
|
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;
|
ipts = ist->pts;
|
||||||
@ -2281,10 +2285,6 @@ static int transcode(OutputFile *output_files,
|
|||||||
break;
|
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 */
|
/* read a frame from it and output it in the fifo */
|
||||||
is = input_files[file_index].ctx;
|
is = input_files[file_index].ctx;
|
||||||
ret= av_read_frame(is, &pkt);
|
ret= av_read_frame(is, &pkt);
|
||||||
@ -3568,6 +3568,7 @@ static void opt_output_file(const char *filename)
|
|||||||
output_files[nb_output_files - 1].ost_index = nb_output_streams - oc->nb_streams;
|
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].recording_time = recording_time;
|
||||||
output_files[nb_output_files - 1].start_time = start_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);
|
av_dict_copy(&output_files[nb_output_files - 1].opts, format_opts, 0);
|
||||||
|
|
||||||
/* check filename in case of an image number is expected */
|
/* check filename in case of an image number is expected */
|
||||||
@ -3695,6 +3696,7 @@ static void opt_output_file(const char *filename)
|
|||||||
chapters_input_file = INT_MAX;
|
chapters_input_file = INT_MAX;
|
||||||
recording_time = INT64_MAX;
|
recording_time = INT64_MAX;
|
||||||
start_time = 0;
|
start_time = 0;
|
||||||
|
limit_filesize = UINT64_MAX;
|
||||||
|
|
||||||
av_freep(&meta_data_maps);
|
av_freep(&meta_data_maps);
|
||||||
nb_meta_data_maps = 0;
|
nb_meta_data_maps = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user