summaryrefslogtreecommitdiffstats
path: root/gst/matroska/matroska-demux.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/matroska/matroska-demux.c')
-rw-r--r--gst/matroska/matroska-demux.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index 19cfab63..d7f46d47 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -3069,21 +3069,29 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext *
}
if (context->default_duration > 0) {
- gdouble framerate = (gdouble) GST_SECOND / context->default_duration;
-
- gst_structure_set (structure,
- "framerate", G_TYPE_DOUBLE, framerate, NULL);
+ GValue fps_double = { 0 };
+ GValue fps_fraction = { 0 };
+
+ g_value_init (&fps_double, G_TYPE_DOUBLE);
+ g_value_init (&fps_fraction, GST_TYPE_FRACTION);
+ g_value_set_double (&fps_double,
+ GST_SECOND / context->default_duration);
+ g_value_transform (&fps_double, &fps_fraction);
+
+ gst_structure_set_value (structure, "framerate", &fps_fraction);
+ g_value_unset (&fps_double);
+ g_value_unset (&fps_fraction);
} else {
/* sort of a hack to get most codecs to support,
* even if the default_duration is missing */
- gst_structure_set (structure, "framerate", G_TYPE_DOUBLE,
- (gdouble) 25.0, NULL);
+ gst_structure_set (structure, "framerate", GST_TYPE_FRACTION,
+ 25, 1, NULL);
}
} else {
gst_structure_set (structure,
"width", GST_TYPE_INT_RANGE, 16, 4096,
"height", GST_TYPE_INT_RANGE, 16, 4096,
- "framerate", GST_TYPE_DOUBLE_RANGE, 0.0, G_MAXDOUBLE, NULL);
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
}
}
}