matroskamux: Add support for interlaced field order

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5534>
This commit is contained in:
Doug Nazar 2019-08-07 17:48:47 -04:00
parent 671dd6a61e
commit 123a7a515f

View File

@ -1107,8 +1107,12 @@ gst_matroska_mux_video_pad_setcaps (GstMatroskaMux * mux,
if (interlace_mode != NULL) {
if (strcmp (interlace_mode, "progressive") == 0)
videocontext->interlace_mode = GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE;
else
else {
videocontext->interlace_mode = GST_MATROSKA_INTERLACE_MODE_INTERLACED;
if ((s = gst_structure_get_string (structure, "field-order"))) {
videocontext->field_order = gst_video_field_order_from_string (s);
}
}
} else {
videocontext->interlace_mode = GST_MATROSKA_INTERLACE_MODE_UNKNOWN;
}
@ -2844,6 +2848,18 @@ gst_matroska_mux_track_header (GstMatroskaMux * mux, GstMatroskaMuxPad * pad)
switch (videocontext->interlace_mode) {
case GST_MATROSKA_INTERLACE_MODE_INTERLACED:
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFLAGINTERLACED, 1);
if (videocontext->field_order != GST_VIDEO_FIELD_ORDER_UNKNOWN) {
if (videocontext->field_order ==
GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST) {
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFIELDORDER, 9);
} else if (videocontext->field_order ==
GST_VIDEO_FIELD_ORDER_BOTTOM_FIELD_FIRST) {
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFIELDORDER, 14);
} else {
GST_FIXME_OBJECT (mux, "unhandled video field order %d",
videocontext->field_order);
}
}
break;
case GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE:
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFLAGINTERLACED, 2);