Merge commit 'cf18e777aed9f73011c7ab7cbab8003189d4b9d8'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Mar 2015 00:10:06 +0000 (01:10 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 20 Mar 2015 00:10:06 +0000 (01:10 +0100)
* commit 'cf18e777aed9f73011c7ab7cbab8003189d4b9d8':
  movenc: write the display transform matrix

Conflicts:
libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/movenc.c

@@@ -2288,9 -1505,10 +2288,11 @@@ static int mov_write_tkhd_tag(AVIOConte
                                        track->timescale, AV_ROUND_UP);
      int version = duration < INT32_MAX ? 0 : 1;
      int flags   = MOV_TKHD_FLAG_IN_MOVIE;
 +    int rotation = 0;
      int group   = 0;
  
+     uint32_t *display_matrix = NULL;
+     int      display_matrix_size, i;
  
      if (st) {
          if (mov->per_stream_grouping)
      avio_wb16(pb, 0); /* reserved */
  
      /* Matrix structure */
-     if (rotation == 90) {
 +    if (st && st->metadata) {
 +        AVDictionaryEntry *rot = av_dict_get(st->metadata, "rotate", NULL, 0);
 +        rotation = (rot && rot->value) ? atoi(rot->value) : 0;
 +    }
+     if (display_matrix) {
+         for (i = 0; i < 9; i++)
+             avio_wb32(pb, display_matrix[i]);
++    } else if (rotation == 90) {
 +        write_matrix(pb,  0,  1, -1,  0, track->enc->height, 0);
 +    } else if (rotation == 180) {
 +        write_matrix(pb, -1,  0,  0, -1, track->enc->width, track->enc->height);
 +    } else if (rotation == 270) {
 +        write_matrix(pb,  0, -1,  1,  0, 0, track->enc->width);
      } else {
 -        avio_wb32(pb, 0x00010000); /* reserved */
 -        avio_wb32(pb, 0x0); /* reserved */
 -        avio_wb32(pb, 0x0); /* reserved */
 -        avio_wb32(pb, 0x0); /* reserved */
 -        avio_wb32(pb, 0x00010000); /* reserved */
 -        avio_wb32(pb, 0x0); /* reserved */
 -        avio_wb32(pb, 0x0); /* reserved */
 -        avio_wb32(pb, 0x0); /* reserved */
 -        avio_wb32(pb, 0x40000000); /* reserved */
 +        write_matrix(pb,  1,  0,  0,  1, 0, 0);
      }
 -
      /* Track width and height, for visual only */
      if (st && (track->enc->codec_type == AVMEDIA_TYPE_VIDEO ||
                 track->enc->codec_type == AVMEDIA_TYPE_SUBTITLE)) {