diff options
Diffstat (limited to 'gst/matroska/matroska-demux.c')
-rw-r--r-- | gst/matroska/matroska-demux.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index 284cb6276..f18e1d537 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -844,13 +844,18 @@ gst_matroska_demux_parse_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml, if ((ret = gst_ebml_read_uint (ebml, &id, &num)) != GST_FLOW_OK) break; - if (num) - context->flags |= GST_MATROSKA_VIDEOTRACK_INTERLACED; + if (num == 1) + videocontext->interlace_mode = + GST_MATROSKA_INTERLACE_MODE_INTERLACED; + else if (num == 2) + videocontext->interlace_mode = + GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE; else - context->flags &= ~GST_MATROSKA_VIDEOTRACK_INTERLACED; - GST_DEBUG_OBJECT (demux, "TrackVideoInterlaced: %d", - (context->flags & GST_MATROSKA_VIDEOTRACK_INTERLACED) ? 1 : - 0); + videocontext->interlace_mode = + GST_MATROSKA_INTERLACE_MODE_UNKNOWN; + + GST_DEBUG_OBJECT (demux, "video track interlacing mode: %d", + videocontext->interlace_mode); break; } @@ -5868,9 +5873,18 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext * 0, 1, NULL); } - if (videocontext->parent.flags & GST_MATROSKA_VIDEOTRACK_INTERLACED) - gst_structure_set (structure, "interlace-mode", G_TYPE_STRING, - "mixed", NULL); + switch (videocontext->interlace_mode) { + case GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE: + gst_structure_set (structure, + "interlace-mode", G_TYPE_STRING, "progressive", NULL); + break; + case GST_MATROSKA_INTERLACE_MODE_INTERLACED: + gst_structure_set (structure, + "interlace-mode", G_TYPE_STRING, "mixed", NULL); + break; + default: + break; + } } if (videocontext->multiview_mode != GST_VIDEO_MULTIVIEW_MODE_NONE) { if (gst_video_multiview_guess_half_aspect (videocontext->multiview_mode, |