ffmpeg_opt: Check ist is valid before using it in audio_channels_map init
Fixes segfault and instead provides an error message Fixes Ticket3465 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
06a3185e38
commit
8803b970ef
26
ffmpeg_opt.c
26
ffmpeg_opt.c
@ -1430,15 +1430,27 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc, in
|
|||||||
/* check for channel mapping for this audio stream */
|
/* check for channel mapping for this audio stream */
|
||||||
for (n = 0; n < o->nb_audio_channel_maps; n++) {
|
for (n = 0; n < o->nb_audio_channel_maps; n++) {
|
||||||
AudioChannelMap *map = &o->audio_channel_maps[n];
|
AudioChannelMap *map = &o->audio_channel_maps[n];
|
||||||
InputStream *ist = input_streams[ost->source_index];
|
if ((map->ofile_idx == -1 || ost->file_index == map->ofile_idx) &&
|
||||||
if ((map->channel_idx == -1 || (ist->file_index == map->file_idx && ist->st->index == map->stream_idx)) &&
|
|
||||||
(map->ofile_idx == -1 || ost->file_index == map->ofile_idx) &&
|
|
||||||
(map->ostream_idx == -1 || ost->st->index == map->ostream_idx)) {
|
(map->ostream_idx == -1 || ost->st->index == map->ostream_idx)) {
|
||||||
if (ost->audio_channels_mapped < FF_ARRAY_ELEMS(ost->audio_channels_map))
|
InputStream *ist;
|
||||||
ost->audio_channels_map[ost->audio_channels_mapped++] = map->channel_idx;
|
|
||||||
else
|
if (map->channel_idx == -1) {
|
||||||
av_log(NULL, AV_LOG_FATAL, "Max channel mapping for output %d.%d reached\n",
|
ist = NULL;
|
||||||
|
} else if (ost->source_index < 0) {
|
||||||
|
av_log(NULL, AV_LOG_FATAL, "Cannot determine input stream for channel mapping %d.%d\n",
|
||||||
ost->file_index, ost->st->index);
|
ost->file_index, ost->st->index);
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
ist = input_streams[ost->source_index];
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user