summaryrefslogtreecommitdiff
path: root/libavformat/matroskaenc.c
diff options
context:
space:
mode:
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>2016-05-08 23:25:58 +0100
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>2016-05-08 23:25:58 +0100
commitee865e9780b40294f073d590f66f7df54745ad9f (patch)
tree48e38cc899aadef5bf22ded8d1f18ccb5c97cb88 /libavformat/matroskaenc.c
parent2d2af18f42c908d3126c105b0e8745ac7ba39350 (diff)
parente3453fd44480d903338c663238bf280215dd9a07 (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.c43
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,