Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.4
| @@ -483,6 +483,9 @@ static void ffmpeg_cleanup(int ret) | |||||
| av_freep(&ost->avfilter); | av_freep(&ost->avfilter); | ||||
| av_freep(&ost->logfile_prefix); | av_freep(&ost->logfile_prefix); | ||||
| av_freep(&ost->audio_channels_map); | |||||
| ost->audio_channels_mapped = 0; | |||||
| avcodec_free_context(&ost->enc_ctx); | avcodec_free_context(&ost->enc_ctx); | ||||
| av_freep(&output_streams[i]); | av_freep(&output_streams[i]); | ||||
| @@ -402,8 +402,7 @@ typedef struct OutputStream { | |||||
| double forced_keyframes_expr_const_values[FKF_NB]; | double forced_keyframes_expr_const_values[FKF_NB]; | ||||
| /* audio only */ | /* audio only */ | ||||
| #define FF_CH_MAX 32 | |||||
| int audio_channels_map[FF_CH_MAX]; /* list of the channels id to pick from the source stream */ | |||||
| int *audio_channels_map; /* list of the channels id to pick from the source stream */ | |||||
| int audio_channels_mapped; /* number of channels in audio_channels_map */ | int audio_channels_mapped; /* number of channels in audio_channels_map */ | ||||
| char *logfile_prefix; | char *logfile_prefix; | ||||
| @@ -1478,11 +1478,13 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, in | |||||
| } | } | ||||
| if (!ist || (ist->file_index == map->file_idx && ist->st->index == map->stream_idx)) { | if (!ist || (ist->file_index == map->file_idx && ist->st->index == map->stream_idx)) { | ||||
| if (ost->audio_channels_mapped < FF_ARRAY_ELEMS(ost->audio_channels_map)) | |||||
| ost->audio_channels_map[ost->audio_channels_mapped++] = map->channel_idx; | |||||
| else | |||||
| av_log(NULL, AV_LOG_FATAL, "Max channel mapping for output %d.%d reached\n", | |||||
| ost->file_index, ost->st->index); | |||||
| if (av_reallocp_array(&ost->audio_channels_map, | |||||
| ost->audio_channels_mapped + 1, | |||||
| sizeof(*ost->audio_channels_map) | |||||
| ) < 0 ) | |||||
| exit_program(1); | |||||
| ost->audio_channels_map[ost->audio_channels_mapped++] = map->channel_idx; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||