diff options
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 0d129fca4..ea5ad2c72 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -1004,8 +1004,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 */ @@ -2558,8 +2564,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); |