aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-05-18 00:28:57 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-05-18 00:52:36 +0200
commit57e38043def65418333885c7481b197d470af336 (patch)
treead7db8e3a215ef014a7ac07fbe857c8edb7624e3
parent14c4b2515836811d53bb5696951637537353387f (diff)
downloadffmpeg-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.c6
-rw-r--r--ffmpeg.h1
-rw-r--r--ffmpeg_opt.c4
3 files changed, 10 insertions, 1 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 6fe169a1a8..a89ae399bf 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -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)
diff --git a/ffmpeg.h b/ffmpeg.h
index 800bd0ab0e..7fd129a283 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -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);
}