summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-08-07 14:42:35 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-08-07 14:51:59 +0200
commit8fa695a9e37933f4f943028c0dbcc35b1fb68d28 (patch)
tree67046888cef444f9fdf76527f3c63c1d13abb28f
parent350f4be12dbc1825f310d230acc431f47ab4bca4 (diff)
parent7d585bc94c494f73a390fd38e78500f136e59992 (diff)
Merge remote-tracking branch 'cehoyos/master'
* cehoyos/master: Do not automatically map subtitles if the decoder and encoder properties are different. Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--ffmpeg_opt.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 9604a6a5d5..1962cf48cb 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -1870,8 +1870,27 @@ static int open_output_file(OptionsContext *o, const char *filename)
if (!o->subtitle_disable && (avcodec_find_encoder(oc->oformat->subtitle_codec) || subtitle_codec_name)) {
for (i = 0; i < nb_input_streams; i++)
if (input_streams[i]->st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
- new_subtitle_stream(o, oc, i);
- break;
+ AVCodecDescriptor const *input_descriptor =
+ avcodec_descriptor_get(input_streams[i]->st->codec->codec_id);
+ AVCodecDescriptor const *output_descriptor = NULL;
+ AVCodec const *output_codec =
+ avcodec_find_encoder(oc->oformat->subtitle_codec);
+ int input_props = 0, output_props = 0;
+ if (output_codec)
+ output_descriptor = avcodec_descriptor_get(output_codec->id);
+ if (input_descriptor)
+ input_props = input_descriptor->props & (AV_CODEC_PROP_TEXT_SUB | AV_CODEC_PROP_BITMAP_SUB);
+ if (output_descriptor)
+ output_props = output_descriptor->props & (AV_CODEC_PROP_TEXT_SUB | AV_CODEC_PROP_BITMAP_SUB);
+ if (subtitle_codec_name ||
+ input_props & output_props ||
+ // Map dvb teletext which has neither property to any output subtitle encoder
+ input_descriptor && output_descriptor &&
+ (!input_descriptor->props ||
+ !output_descriptor->props)) {
+ new_subtitle_stream(o, oc, i);
+ break;
+ }
}
}
/* do something with data? */