movenc: write the display transform matrix

This commit is contained in:
Anton Khirnov 2015-03-12 23:14:08 +01:00
parent 30a041887f
commit cf18e777ae

View File

@ -1507,12 +1507,19 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
int flags = MOV_TKHD_FLAG_IN_MOVIE; int flags = MOV_TKHD_FLAG_IN_MOVIE;
int group = 0; int group = 0;
uint32_t *display_matrix = NULL;
int display_matrix_size, i;
if (st) { if (st) {
if (mov->per_stream_grouping) if (mov->per_stream_grouping)
group = st->index; group = st->index;
else else
group = st->codec->codec_type; group = st->codec->codec_type;
display_matrix = (uint32_t*)av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX,
&display_matrix_size);
if (display_matrix_size < 9 * sizeof(*display_matrix))
display_matrix = NULL;
} }
if (track->flags & MOV_TRACK_ENABLED) if (track->flags & MOV_TRACK_ENABLED)
@ -1553,15 +1560,20 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
avio_wb16(pb, 0); /* reserved */ avio_wb16(pb, 0); /* reserved */
/* Matrix structure */ /* Matrix structure */
avio_wb32(pb, 0x00010000); /* reserved */ if (display_matrix) {
avio_wb32(pb, 0x0); /* reserved */ for (i = 0; i < 9; i++)
avio_wb32(pb, 0x0); /* reserved */ avio_wb32(pb, display_matrix[i]);
avio_wb32(pb, 0x0); /* reserved */ } else {
avio_wb32(pb, 0x00010000); /* reserved */ avio_wb32(pb, 0x00010000); /* reserved */
avio_wb32(pb, 0x0); /* reserved */ avio_wb32(pb, 0x0); /* reserved */
avio_wb32(pb, 0x0); /* reserved */ avio_wb32(pb, 0x0); /* reserved */
avio_wb32(pb, 0x0); /* reserved */ avio_wb32(pb, 0x0); /* reserved */
avio_wb32(pb, 0x40000000); /* 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 */
}
/* Track width and height, for visual only */ /* Track width and height, for visual only */
if (st && (track->enc->codec_type == AVMEDIA_TYPE_VIDEO || if (st && (track->enc->codec_type == AVMEDIA_TYPE_VIDEO ||