summaryrefslogtreecommitdiff
path: root/gst/matroska/matroska-mux.c
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2018-08-23 22:57:35 +0200
committerTim-Philipp Müller <tim@centricular.com>2018-08-23 23:32:06 +0200
commitfd0afe033b6f1cef781309e18146e2d04043f625 (patch)
tree734a4d204eb0b963be661b37021f8d37dd77b0f1 /gst/matroska/matroska-mux.c
parent00143ca5547993148e40f807f823e3be25bf980d (diff)
matroska: fix handling of FlagInterlaced
This is an enum not a boolean, and a value of 2 signals that the video is progressive, but we would mistakenly set interlace-mode=mixed on the output caps. https://bugzilla.gnome.org/show_bug.cgi?id=787206
Diffstat (limited to 'gst/matroska/matroska-mux.c')
-rw-r--r--gst/matroska/matroska-mux.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 2fd6c2cdb..d487a8245 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -1005,8 +1005,14 @@ gst_matroska_mux_video_pad_setcaps (GstPad * pad, GstCaps * caps)
mimetype = gst_structure_get_name (structure);
interlace_mode = gst_structure_get_string (structure, "interlace-mode");
- if (interlace_mode != NULL && strcmp (interlace_mode, "progressive") != 0)
- context->flags |= GST_MATROSKA_VIDEOTRACK_INTERLACED;
+ if (interlace_mode != NULL) {
+ if (strcmp (interlace_mode, "progressive") == 0)
+ videocontext->interlace_mode = GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE;
+ else
+ videocontext->interlace_mode = GST_MATROSKA_INTERLACE_MODE_INTERLACED;
+ } else {
+ videocontext->interlace_mode = GST_MATROSKA_INTERLACE_MODE_UNKNOWN;
+ }
if (!strcmp (mimetype, "video/x-theora")) {
/* we'll extract the details later from the theora identification header */
@@ -2693,8 +2699,17 @@ gst_matroska_mux_track_header (GstMatroskaMux * mux,
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEODISPLAYHEIGHT,
videocontext->display_height);
}
- if (context->flags & GST_MATROSKA_VIDEOTRACK_INTERLACED)
- gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFLAGINTERLACED, 1);
+ switch (videocontext->interlace_mode) {
+ case GST_MATROSKA_INTERLACE_MODE_INTERLACED:
+ gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFLAGINTERLACED, 1);
+ break;
+ case GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE:
+ gst_ebml_write_uint (ebml, GST_MATROSKA_ID_VIDEOFLAGINTERLACED, 2);
+ break;
+ default:
+ break;
+ }
+
if (videocontext->fourcc) {
guint32 fcc_le = GUINT32_TO_LE (videocontext->fourcc);