- next_ts = gst_util_uint64_scale_int (
- (dvdemux->frame_offset + 1) * GST_SECOND,
- dvdemux->framerate_denominator, dvdemux->framerate_numerator);
- duration = next_ts - dvdemux->time_segment.position;
+ if (dvdemux->time_segment.rate < 0) {
+ next_ts = gst_util_uint64_scale_int (
+ (dvdemux->frame_offset >
+ 0 ? dvdemux->frame_offset - 1 : 0) * GST_SECOND,
+ dvdemux->framerate_denominator, dvdemux->framerate_numerator);
+ duration = dvdemux->time_segment.position - next_ts;
+ } else {
+ next_ts = gst_util_uint64_scale_int (
+ (dvdemux->frame_offset + 1) * GST_SECOND,
+ dvdemux->framerate_denominator, dvdemux->framerate_numerator);
+ duration = next_ts - dvdemux->time_segment.position;
+ }