|
|
|
@ -3282,41 +3282,41 @@ static int opt_map(OptionsContext *o, const char *opt, const char *arg) |
|
|
|
|
exit_program(1); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
file_idx = strtol(map, &p, 0); |
|
|
|
|
if (file_idx >= nb_input_files || file_idx < 0) { |
|
|
|
|
av_log(NULL, AV_LOG_FATAL, "Invalid input file index: %d.\n", file_idx); |
|
|
|
|
exit_program(1); |
|
|
|
|
} |
|
|
|
|
if (negative) |
|
|
|
|
/* disable some already defined maps */ |
|
|
|
|
for (i = 0; i < o->nb_stream_maps; i++) { |
|
|
|
|
m = &o->stream_maps[i]; |
|
|
|
|
if (file_idx == m->file_index && |
|
|
|
|
check_stream_specifier(input_files[m->file_index]->ctx, |
|
|
|
|
input_files[m->file_index]->ctx->streams[m->stream_index], |
|
|
|
|
*p == ':' ? p + 1 : p) > 0) |
|
|
|
|
m->disabled = 1; |
|
|
|
|
file_idx = strtol(map, &p, 0); |
|
|
|
|
if (file_idx >= nb_input_files || file_idx < 0) { |
|
|
|
|
av_log(NULL, AV_LOG_FATAL, "Invalid input file index: %d.\n", file_idx); |
|
|
|
|
exit_program(1); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
for (i = 0; i < input_files[file_idx]->nb_streams; i++) { |
|
|
|
|
if (check_stream_specifier(input_files[file_idx]->ctx, input_files[file_idx]->ctx->streams[i], |
|
|
|
|
*p == ':' ? p + 1 : p) <= 0) |
|
|
|
|
continue; |
|
|
|
|
o->stream_maps = grow_array(o->stream_maps, sizeof(*o->stream_maps), |
|
|
|
|
&o->nb_stream_maps, o->nb_stream_maps + 1); |
|
|
|
|
m = &o->stream_maps[o->nb_stream_maps - 1]; |
|
|
|
|
|
|
|
|
|
m->file_index = file_idx; |
|
|
|
|
m->stream_index = i; |
|
|
|
|
|
|
|
|
|
if (sync_file_idx >= 0) { |
|
|
|
|
m->sync_file_index = sync_file_idx; |
|
|
|
|
m->sync_stream_index = sync_stream_idx; |
|
|
|
|
} else { |
|
|
|
|
m->sync_file_index = file_idx; |
|
|
|
|
m->sync_stream_index = i; |
|
|
|
|
if (negative) |
|
|
|
|
/* disable some already defined maps */ |
|
|
|
|
for (i = 0; i < o->nb_stream_maps; i++) { |
|
|
|
|
m = &o->stream_maps[i]; |
|
|
|
|
if (file_idx == m->file_index && |
|
|
|
|
check_stream_specifier(input_files[m->file_index]->ctx, |
|
|
|
|
input_files[m->file_index]->ctx->streams[m->stream_index], |
|
|
|
|
*p == ':' ? p + 1 : p) > 0) |
|
|
|
|
m->disabled = 1; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
for (i = 0; i < input_files[file_idx]->nb_streams; i++) { |
|
|
|
|
if (check_stream_specifier(input_files[file_idx]->ctx, input_files[file_idx]->ctx->streams[i], |
|
|
|
|
*p == ':' ? p + 1 : p) <= 0) |
|
|
|
|
continue; |
|
|
|
|
o->stream_maps = grow_array(o->stream_maps, sizeof(*o->stream_maps), |
|
|
|
|
&o->nb_stream_maps, o->nb_stream_maps + 1); |
|
|
|
|
m = &o->stream_maps[o->nb_stream_maps - 1]; |
|
|
|
|
|
|
|
|
|
m->file_index = file_idx; |
|
|
|
|
m->stream_index = i; |
|
|
|
|
|
|
|
|
|
if (sync_file_idx >= 0) { |
|
|
|
|
m->sync_file_index = sync_file_idx; |
|
|
|
|
m->sync_stream_index = sync_stream_idx; |
|
|
|
|
} else { |
|
|
|
|
m->sync_file_index = file_idx; |
|
|
|
|
m->sync_stream_index = i; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!m) { |
|
|
|
@ -4316,24 +4316,24 @@ loop_end: |
|
|
|
|
} |
|
|
|
|
init_output_filter(ofilter, o, oc); |
|
|
|
|
} else { |
|
|
|
|
ist = input_streams[input_files[map->file_index]->ist_index + map->stream_index]; |
|
|
|
|
switch (ist->st->codec->codec_type) { |
|
|
|
|
case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_DATA: ost = new_data_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc); break; |
|
|
|
|
default: |
|
|
|
|
av_log(NULL, AV_LOG_FATAL, "Cannot map stream #%d:%d - unsupported type.\n", |
|
|
|
|
map->file_index, map->stream_index); |
|
|
|
|
exit_program(1); |
|
|
|
|
} |
|
|
|
|
ist = input_streams[input_files[map->file_index]->ist_index + map->stream_index]; |
|
|
|
|
switch (ist->st->codec->codec_type) { |
|
|
|
|
case AVMEDIA_TYPE_VIDEO: ost = new_video_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_AUDIO: ost = new_audio_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_SUBTITLE: ost = new_subtitle_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_DATA: ost = new_data_stream(o, oc); break; |
|
|
|
|
case AVMEDIA_TYPE_ATTACHMENT: ost = new_attachment_stream(o, oc); break; |
|
|
|
|
default: |
|
|
|
|
av_log(NULL, AV_LOG_FATAL, "Cannot map stream #%d:%d - unsupported type.\n", |
|
|
|
|
map->file_index, map->stream_index); |
|
|
|
|
exit_program(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ost->source_index = input_files[map->file_index]->ist_index + map->stream_index; |
|
|
|
|
ost->sync_ist = input_streams[input_files[map->sync_file_index]->ist_index + |
|
|
|
|
map->sync_stream_index]; |
|
|
|
|
ist->discard = 0; |
|
|
|
|
ist->st->discard = AVDISCARD_NONE; |
|
|
|
|
ost->source_index = input_files[map->file_index]->ist_index + map->stream_index; |
|
|
|
|
ost->sync_ist = input_streams[input_files[map->sync_file_index]->ist_index + |
|
|
|
|
map->sync_stream_index]; |
|
|
|
|
ist->discard = 0; |
|
|
|
|
ist->st->discard = AVDISCARD_NONE; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|