diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-01-29 19:42:09 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2009-01-31 11:02:25 +0100 |
commit | dfa0e43848cf9206c061f01ef7c0aae3f68e7c98 (patch) | |
tree | b0eef16d8e31e9d98f3b6a3236015b3f9ae2e40d /gst/mxf/mxfdemux.c | |
parent | a930b36adc21a938e457666b86f8f3e11c7996fb (diff) | |
download | gst-plugins-bad-dfa0e43848cf9206c061f01ef7c0aae3f68e7c98.tar.gz gst-plugins-bad-dfa0e43848cf9206c061f01ef7c0aae3f68e7c98.tar.bz2 gst-plugins-bad-dfa0e43848cf9206c061f01ef7c0aae3f68e7c98.zip |
Compensate for timestamp/duration rounding errors
Diffstat (limited to 'gst/mxf/mxfdemux.c')
-rw-r--r-- | gst/mxf/mxfdemux.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c index 63cd1ac9..64bbf7fb 100644 --- a/gst/mxf/mxfdemux.c +++ b/gst/mxf/mxfdemux.c @@ -1534,6 +1534,18 @@ gst_mxf_demux_handle_generic_container_essence_element (GstMXFDemux * demux, GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET_NONE; GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_NONE; + /* Update accumulated error and compensate */ + { + guint64 abs_error = (GST_SECOND * pad->material_track->edit_rate.d) % + pad->material_track->edit_rate.n; + pad->last_stop_accumulated_error += + ((gdouble) abs_error) / ((gdouble) pad->material_track->edit_rate.n); + } + if (pad->last_stop_accumulated_error >= 1.0) { + GST_BUFFER_DURATION (outbuf) += 1; + pad->last_stop_accumulated_error -= 1.0; + } + if (pad->need_segment) { gst_pad_push_event (GST_PAD_CAST (pad), gst_event_new_new_segment (FALSE, 1.0, GST_FORMAT_TIME, 0, -1, |