diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-05-18 00:28:57 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-05-18 00:52:36 +0200 |
commit | 57e38043def65418333885c7481b197d470af336 (patch) | |
tree | ad7db8e3a215ef014a7ac07fbe857c8edb7624e3 | |
parent | 14c4b2515836811d53bb5696951637537353387f (diff) | |
download | ffmpeg-57e38043def65418333885c7481b197d470af336.tar.gz |
ffmpeg: Do not copy the display matrix if rotation meta-data is manually added
Fixes Ticket4560
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | ffmpeg.c | 6 | ||||
-rw-r--r-- | ffmpeg.h | 1 | ||||
-rw-r--r-- | ffmpeg_opt.c | 4 |
3 files changed, 10 insertions, 1 deletions
@@ -2757,9 +2757,13 @@ static int transcode_init(void) if (!ost->st->side_data) return AVERROR(ENOMEM); + ost->st->nb_side_data = 0; for (j = 0; j < ist->st->nb_side_data; j++) { const AVPacketSideData *sd_src = &ist->st->side_data[j]; - AVPacketSideData *sd_dst = &ost->st->side_data[j]; + AVPacketSideData *sd_dst = &ost->st->side_data[ost->st->nb_side_data]; + + if (ost->rotate_overridden && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX) + continue; sd_dst->data = av_malloc(sd_src->size); if (!sd_dst->data) @@ -405,6 +405,7 @@ typedef struct OutputStream { AVRational frame_rate; int force_fps; int top_field_first; + int rotate_overridden; AVRational frame_aspect_ratio; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index 240f727010..5731299ddd 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -2209,8 +2209,12 @@ loop_end: parse_meta_type(o->metadata[i].specifier, &type, &index, &stream_spec); if (type == 's') { for (j = 0; j < oc->nb_streams; j++) { + ost = output_streams[nb_output_streams - oc->nb_streams + j]; if ((ret = check_stream_specifier(oc, oc->streams[j], stream_spec)) > 0) { av_dict_set(&oc->streams[j]->metadata, o->metadata[i].u.str, *val ? val : NULL, 0); + if (!strcmp(o->metadata[i].u.str, "rotate")) { + ost->rotate_overridden = 1; + } } else if (ret < 0) exit_program(1); } |