summaryrefslogtreecommitdiff
path: root/avconv.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-08-21 15:27:02 +0200
committerMichael Niedermayer <michaelni@gmx.at>2011-08-21 15:27:02 +0200
commitff96098084542c3ef98b360f70583999433d13a7 (patch)
tree620b6e7702ddbc0fb1ccc3525299feb0781abfca /avconv.c
parent34c997599e14b4ef5f84aa324fdea7ae03d7a2ba (diff)
parentccb919e34b1276db5cfcd903e405e47ccb932d58 (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: WavPack demuxer: do not rely on index when timestamp is not in indexed range. WavPack demuxer: store position of the first block in index. WavPack decoder: implement flush function avconv: Separate initialization from the main transcode loop. Conflicts: avconv.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'avconv.c')
-rw-r--r--avconv.c66
1 files changed, 39 insertions, 27 deletions
diff --git a/avconv.c b/avconv.c
index 73e47bd46e..1e3cd0e6f0 100644
--- a/avconv.c
+++ b/avconv.c
@@ -1918,28 +1918,18 @@ static int init_input_stream(int ist_index, OutputStream *output_streams, int nb
return 0;
}
-/*
- * The following code is the main loop of the file converter
- */
-static int transcode(OutputFile *output_files,
- int nb_output_files,
- InputFile *input_files,
- int nb_input_files)
+static int transcode_init(OutputFile *output_files,
+ int nb_output_files,
+ InputFile *input_files,
+ int nb_input_files)
{
- int ret = 0, i, step;
- AVFormatContext *is, *os;
+ int ret = 0, i;
+ AVFormatContext *os;
AVCodecContext *codec, *icodec;
OutputStream *ost;
InputStream *ist;
char error[1024];
- int key;
int want_sdp = 1;
- uint8_t *no_packet;
- int no_packet_count=0;
- int64_t timer_start;
-
- if (!(no_packet = av_mallocz(nb_input_files)))
- exit_program(1);
if (rate_emu)
for (i = 0; i < nb_input_streams; i++)
@@ -1951,8 +1941,7 @@ static int transcode(OutputFile *output_files,
if (!os->nb_streams && !(os->oformat->flags & AVFMT_NOSTREAMS)) {
av_dump_format(os, i, os->filename, 1);
fprintf(stderr, "Output file #%d does not contain any stream\n", i);
- ret = AVERROR(EINVAL);
- goto fail;
+ return AVERROR(EINVAL);
}
}
@@ -1973,8 +1962,7 @@ static int transcode(OutputFile *output_files,
uint64_t extra_size = (uint64_t)icodec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE;
if (extra_size > INT_MAX) {
- ret = AVERROR(EINVAL);
- goto fail;
+ return AVERROR(EINVAL);
}
/* if stream_copy is selected, no need to decode or encode */
@@ -1993,8 +1981,7 @@ static int transcode(OutputFile *output_files,
codec->rc_buffer_size = icodec->rc_buffer_size;
codec->extradata= av_mallocz(extra_size);
if (!codec->extradata) {
- ret = AVERROR(ENOMEM);
- goto fail;
+ return AVERROR(ENOMEM);
}
memcpy(codec->extradata, icodec->extradata, icodec->extradata_size);
codec->extradata_size= icodec->extradata_size;
@@ -2061,8 +2048,7 @@ static int transcode(OutputFile *output_files,
case AVMEDIA_TYPE_AUDIO:
ost->fifo= av_fifo_alloc(1024);
if (!ost->fifo) {
- ret = AVERROR(ENOMEM);
- goto fail;
+ return AVERROR(ENOMEM);
}
ost->reformat_pair = MAKE_SFMT_PAIR(AV_SAMPLE_FMT_NONE,AV_SAMPLE_FMT_NONE);
if (!codec->sample_rate) {
@@ -2182,8 +2168,7 @@ static int transcode(OutputFile *output_files,
if (!bit_buffer) {
fprintf(stderr, "Cannot allocate %d bytes output buffer\n",
bit_buffer_size);
- ret = AVERROR(ENOMEM);
- goto fail;
+ return AVERROR(ENOMEM);
}
/* open each encoder */
@@ -2270,13 +2255,40 @@ static int transcode(OutputFile *output_files,
if (ret) {
fprintf(stderr, "%s\n", error);
- goto fail;
+ return ret;
}
if (want_sdp) {
print_sdp(output_files, nb_output_files);
}
+ return 0;
+}
+
+/*
+ * The following code is the main loop of the file converter
+ */
+static int transcode(OutputFile *output_files,
+ int nb_output_files,
+ InputFile *input_files,
+ int nb_input_files)
+{
+ int ret, i;
+ AVFormatContext *is, *os;
+ OutputStream *ost;
+ InputStream *ist;
+ uint8_t *no_packet;
+ int no_packet_count=0;
+ int64_t timer_start;
+ int key;
+
+ if (!(no_packet = av_mallocz(nb_input_files)))
+ exit_program(1);
+
+ ret = transcode_init(output_files, nb_output_files, input_files, nb_input_files);
+ if (ret < 0)
+ goto fail;
+
if (!using_stdin) {
if(verbose >= 0)
fprintf(stderr, "Press [q] to stop, [?] for help\n");