summaryrefslogtreecommitdiff
path: root/gst/videoparsers/gstmpegvideoparse.c
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-10-25 17:50:52 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-10-25 18:02:38 +0200
commit0d1c7f6ea28b957c5df560208d88fa5cbb8beac0 (patch)
tree35958ef91f7e25773cfb0e6dd91dfba90a8cde72 /gst/videoparsers/gstmpegvideoparse.c
parent58441bf262fea75b70504beb0187260c39bdb266 (diff)
downloadgstreamer-plugins-bad-0d1c7f6ea28b957c5df560208d88fa5cbb8beac0.tar.gz
videoparsers: use parsed or upstream fps to set some baseparse parameters
Diffstat (limited to 'gst/videoparsers/gstmpegvideoparse.c')
-rw-r--r--gst/videoparsers/gstmpegvideoparse.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c
index e3e6fa630..0143e6d47 100644
--- a/gst/videoparsers/gstmpegvideoparse.c
+++ b/gst/videoparsers/gstmpegvideoparse.c
@@ -659,17 +659,23 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse)
}
/* perhaps we have a framerate */
- if (mpvparse->fps_num > 0 && mpvparse->fps_den > 0 &&
- (!s || !gst_structure_has_field (s, "framerate"))) {
+ {
gint fps_num = mpvparse->fps_num;
gint fps_den = mpvparse->fps_den;
- GstClockTime latency = gst_util_uint64_scale (GST_SECOND, fps_den, fps_num);
-
- gst_caps_set_simple (caps, "framerate",
- GST_TYPE_FRACTION, fps_num, fps_den, NULL);
- gst_base_parse_set_frame_rate (GST_BASE_PARSE (mpvparse),
- fps_num, fps_den, 0, 0);
- gst_base_parse_set_latency (GST_BASE_PARSE (mpvparse), latency, latency);
+ GstClockTime latency;
+
+ /* upstream overrides */
+ if (s && gst_structure_has_field (s, "framerate"))
+ gst_structure_get_fraction (s, "framerate", &fps_num, &fps_den);
+
+ if (fps_den > 0 && fps_num > 0) {
+ gst_caps_set_simple (caps, "framerate",
+ GST_TYPE_FRACTION, fps_num, fps_den, NULL);
+ gst_base_parse_set_frame_rate (GST_BASE_PARSE (mpvparse),
+ fps_num, fps_den, 0, 0);
+ latency = gst_util_uint64_scale (GST_SECOND, fps_den, fps_num);
+ gst_base_parse_set_latency (GST_BASE_PARSE (mpvparse), latency, latency);
+ }
}
/* or pixel-aspect-ratio */