Browse Source

ffmpeg: Do not copy the display matrix if rotation meta-data is manually added

Fixes Ticket4560

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.7
Michael Niedermayer 10 years ago
parent
commit
57e38043de
3 changed files with 10 additions and 1 deletions
  1. +5
    -1
      ffmpeg.c
  2. +1
    -0
      ffmpeg.h
  3. +4
    -0
      ffmpeg_opt.c

+ 5
- 1
ffmpeg.c View File

@@ -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)


+ 1
- 0
ffmpeg.h View File

@@ -405,6 +405,7 @@ typedef struct OutputStream {
AVRational frame_rate;
int force_fps;
int top_field_first;
int rotate_overridden;

AVRational frame_aspect_ratio;



+ 4
- 0
ffmpeg_opt.c View File

@@ -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);
}


Loading…
Cancel
Save