diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-05-08 23:25:58 +0100 |
---|---|---|
committer | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2016-05-08 23:25:58 +0100 |
commit | ee865e9780b40294f073d590f66f7df54745ad9f (patch) | |
tree | 48e38cc899aadef5bf22ded8d1f18ccb5c97cb88 /libavformat/matroskaenc.c | |
parent | 2d2af18f42c908d3126c105b0e8745ac7ba39350 (diff) | |
parent | e3453fd44480d903338c663238bf280215dd9a07 (diff) |
Merge commit 'e3453fd44480d903338c663238bf280215dd9a07'
* commit 'e3453fd44480d903338c663238bf280215dd9a07':
matroska: Write the field order information
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Diffstat (limited to 'libavformat/matroskaenc.c')
-rw-r--r-- | libavformat/matroskaenc.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 205bc1cad4..4cd987824b 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -789,6 +789,44 @@ static int mkv_write_video_color(AVIOContext *pb, AVCodecParameters *par, AVStre return 0; } +static void mkv_write_field_order(AVIOContext *pb, + enum AVFieldOrder field_order) +{ + switch (field_order) { + case AV_FIELD_UNKNOWN: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFLAGINTERLACED, + MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED); + break; + case AV_FIELD_PROGRESSIVE: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFLAGINTERLACED, + MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE); + break; + case AV_FIELD_TT: + case AV_FIELD_BB: + case AV_FIELD_TB: + case AV_FIELD_BT: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFLAGINTERLACED, + MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED); + switch (field_order) { + case AV_FIELD_TT: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_TT); + break; + case AV_FIELD_BB: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_BB); + break; + case AV_FIELD_TB: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_TB); + break; + case AV_FIELD_BT: + put_ebml_uint(pb, MATROSKA_ID_VIDEOFIELDORDER, + MATROSKA_VIDEO_FIELDORDER_BT); + break; + } + } +} static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, AVStream *st, int mode, int *h_width, int *h_height) @@ -1041,10 +1079,13 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, } subinfo = start_ebml_master(pb, MATROSKA_ID_TRACKVIDEO, 0); - // XXX: interlace flag? + put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELWIDTH , par->width); put_ebml_uint (pb, MATROSKA_ID_VIDEOPIXELHEIGHT, par->height); + if (mkv->mode != MODE_WEBM) + mkv_write_field_order(pb, par->field_order); + // check both side data and metadata for stereo information, // write the result to the bitstream if any is found ret = mkv_write_stereo_mode(s, pb, st, mkv->mode, |