diff options
author | Tim-Philipp Müller <tim@centricular.com> | 2018-08-23 22:57:35 +0200 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2018-08-23 23:32:06 +0200 |
commit | fd0afe033b6f1cef781309e18146e2d04043f625 (patch) | |
tree | 734a4d204eb0b963be661b37021f8d37dd77b0f1 /gst/matroska/matroska-mux.c | |
parent | 00143ca5547993148e40f807f823e3be25bf980d (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.c | 23 |
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); |