forked from FFmpeg/FFmpeg
Move the allocation of the AVOutputStream structure earlier in the
code flow, in the new_video_stream() / new_audio_stream() / new_subtitle_stream() functions. Patch by Nicolas George <$name.$surname@normalesup.org>. Originally committed as revision 25500 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
fb66c31da4
commit
9fdf4b5817
1 changed files with 32 additions and 10 deletions
42
ffmpeg.c
42
ffmpeg.c
|
@ -300,6 +300,9 @@ typedef struct AVOutputStream {
|
||||||
FILE *logfile;
|
FILE *logfile;
|
||||||
} AVOutputStream;
|
} AVOutputStream;
|
||||||
|
|
||||||
|
static AVOutputStream **output_streams_for_file[MAX_FILES] = { NULL };
|
||||||
|
static int nb_output_streams_for_file[MAX_FILES] = { 0 };
|
||||||
|
|
||||||
typedef struct AVInputStream {
|
typedef struct AVInputStream {
|
||||||
int file_index;
|
int file_index;
|
||||||
int index;
|
int index;
|
||||||
|
@ -570,6 +573,7 @@ static int ffmpeg_exit(int ret)
|
||||||
av_metadata_free(&s->metadata);
|
av_metadata_free(&s->metadata);
|
||||||
av_free(s);
|
av_free(s);
|
||||||
av_free(bitstream_filters[i]);
|
av_free(bitstream_filters[i]);
|
||||||
|
av_free(output_streams_for_file[i]);
|
||||||
}
|
}
|
||||||
for(i=0;i<nb_input_files;i++) {
|
for(i=0;i<nb_input_files;i++) {
|
||||||
av_close_input_file(input_files[i]);
|
av_close_input_file(input_files[i]);
|
||||||
|
@ -2037,21 +2041,12 @@ static int transcode(AVFormatContext **output_files,
|
||||||
ost_table = av_mallocz(sizeof(AVOutputStream *) * nb_ostreams);
|
ost_table = av_mallocz(sizeof(AVOutputStream *) * nb_ostreams);
|
||||||
if (!ost_table)
|
if (!ost_table)
|
||||||
goto fail;
|
goto fail;
|
||||||
for(i=0;i<nb_ostreams;i++) {
|
|
||||||
ost = av_mallocz(sizeof(AVOutputStream));
|
|
||||||
if (!ost)
|
|
||||||
goto fail;
|
|
||||||
ost_table[i] = ost;
|
|
||||||
}
|
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
for(k=0;k<nb_output_files;k++) {
|
for(k=0;k<nb_output_files;k++) {
|
||||||
os = output_files[k];
|
os = output_files[k];
|
||||||
for(i=0;i<os->nb_streams;i++,n++) {
|
for(i=0;i<os->nb_streams;i++,n++) {
|
||||||
int found;
|
int found;
|
||||||
ost = ost_table[n];
|
ost = ost_table[n] = output_streams_for_file[k][i];
|
||||||
ost->file_index = k;
|
|
||||||
ost->index = i;
|
|
||||||
ost->st = os->streams[i];
|
ost->st = os->streams[i];
|
||||||
if (nb_stream_maps > 0) {
|
if (nb_stream_maps > 0) {
|
||||||
ost->source_index = file_table[stream_maps[n].file_index].ist_index +
|
ost->source_index = file_table[stream_maps[n].file_index].ist_index +
|
||||||
|
@ -3356,9 +3351,31 @@ static void check_audio_video_sub_inputs(int *has_video_ptr, int *has_audio_ptr,
|
||||||
*has_subtitle_ptr = has_subtitle;
|
*has_subtitle_ptr = has_subtitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static AVOutputStream *new_output_stream(AVFormatContext *oc, int file_idx)
|
||||||
|
{
|
||||||
|
int idx = oc->nb_streams - 1;
|
||||||
|
AVOutputStream *ost;
|
||||||
|
|
||||||
|
output_streams_for_file[file_idx] =
|
||||||
|
grow_array(output_streams_for_file[file_idx],
|
||||||
|
sizeof(*output_streams_for_file[file_idx]),
|
||||||
|
&nb_output_streams_for_file[file_idx],
|
||||||
|
oc->nb_streams);
|
||||||
|
ost = output_streams_for_file[file_idx][idx] =
|
||||||
|
av_mallocz(sizeof(AVOutputStream));
|
||||||
|
if (!ost) {
|
||||||
|
fprintf(stderr, "Could not alloc output stream\n");
|
||||||
|
ffmpeg_exit(1);
|
||||||
|
}
|
||||||
|
ost->file_index = file_idx;
|
||||||
|
ost->index = idx;
|
||||||
|
return ost;
|
||||||
|
}
|
||||||
|
|
||||||
static void new_video_stream(AVFormatContext *oc, int file_idx)
|
static void new_video_stream(AVFormatContext *oc, int file_idx)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
AVOutputStream *ost;
|
||||||
AVCodecContext *video_enc;
|
AVCodecContext *video_enc;
|
||||||
enum CodecID codec_id;
|
enum CodecID codec_id;
|
||||||
AVCodec *codec= NULL;
|
AVCodec *codec= NULL;
|
||||||
|
@ -3368,6 +3385,7 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
|
||||||
fprintf(stderr, "Could not alloc stream\n");
|
fprintf(stderr, "Could not alloc stream\n");
|
||||||
ffmpeg_exit(1);
|
ffmpeg_exit(1);
|
||||||
}
|
}
|
||||||
|
ost = new_output_stream(oc, file_idx);
|
||||||
|
|
||||||
output_codecs = grow_array(output_codecs, sizeof(*output_codecs), &nb_output_codecs, nb_output_codecs + 1);
|
output_codecs = grow_array(output_codecs, sizeof(*output_codecs), &nb_output_codecs, nb_output_codecs + 1);
|
||||||
if(!video_stream_copy){
|
if(!video_stream_copy){
|
||||||
|
@ -3503,6 +3521,7 @@ static void new_video_stream(AVFormatContext *oc, int file_idx)
|
||||||
static void new_audio_stream(AVFormatContext *oc, int file_idx)
|
static void new_audio_stream(AVFormatContext *oc, int file_idx)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
AVOutputStream *ost;
|
||||||
AVCodec *codec= NULL;
|
AVCodec *codec= NULL;
|
||||||
AVCodecContext *audio_enc;
|
AVCodecContext *audio_enc;
|
||||||
enum CodecID codec_id;
|
enum CodecID codec_id;
|
||||||
|
@ -3512,6 +3531,7 @@ static void new_audio_stream(AVFormatContext *oc, int file_idx)
|
||||||
fprintf(stderr, "Could not alloc stream\n");
|
fprintf(stderr, "Could not alloc stream\n");
|
||||||
ffmpeg_exit(1);
|
ffmpeg_exit(1);
|
||||||
}
|
}
|
||||||
|
ost = new_output_stream(oc, file_idx);
|
||||||
|
|
||||||
output_codecs = grow_array(output_codecs, sizeof(*output_codecs), &nb_output_codecs, nb_output_codecs + 1);
|
output_codecs = grow_array(output_codecs, sizeof(*output_codecs), &nb_output_codecs, nb_output_codecs + 1);
|
||||||
if(!audio_stream_copy){
|
if(!audio_stream_copy){
|
||||||
|
@ -3583,6 +3603,7 @@ static void new_audio_stream(AVFormatContext *oc, int file_idx)
|
||||||
static void new_subtitle_stream(AVFormatContext *oc, int file_idx)
|
static void new_subtitle_stream(AVFormatContext *oc, int file_idx)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
AVOutputStream *ost;
|
||||||
AVCodec *codec=NULL;
|
AVCodec *codec=NULL;
|
||||||
AVCodecContext *subtitle_enc;
|
AVCodecContext *subtitle_enc;
|
||||||
|
|
||||||
|
@ -3591,6 +3612,7 @@ static void new_subtitle_stream(AVFormatContext *oc, int file_idx)
|
||||||
fprintf(stderr, "Could not alloc stream\n");
|
fprintf(stderr, "Could not alloc stream\n");
|
||||||
ffmpeg_exit(1);
|
ffmpeg_exit(1);
|
||||||
}
|
}
|
||||||
|
ost = new_output_stream(oc, file_idx);
|
||||||
subtitle_enc = st->codec;
|
subtitle_enc = st->codec;
|
||||||
output_codecs = grow_array(output_codecs, sizeof(*output_codecs), &nb_output_codecs, nb_output_codecs + 1);
|
output_codecs = grow_array(output_codecs, sizeof(*output_codecs), &nb_output_codecs, nb_output_codecs + 1);
|
||||||
if(!subtitle_stream_copy){
|
if(!subtitle_stream_copy){
|
||||||
|
|
Loading…
Add table
Reference in a new issue