summaryrefslogtreecommitdiffstats
path: root/ext/dv/gstdvdemux.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2005-11-30 19:02:35 +0000
committerWim Taymans <wim.taymans@gmail.com>2005-11-30 19:02:35 +0000
commit0b3776c0b80196d747c351ebf3e165434a38a22b (patch)
treedfe1c797f0b80eea288ee9b1024bc3d3b6a84401 /ext/dv/gstdvdemux.c
parentabe61f0d33796594721b58c9e6eb6f333a958b12 (diff)
ext/dv/: Fix seeking in dvdemux again, add some more debug info.
Original commit message from CVS: * ext/dv/gstdvdec.c: (gst_dvdec_chain): * ext/dv/gstdvdemux.c: (gst_dvdemux_demux_frame): * ext/dv/gstdvdemux.h: Fix seeking in dvdemux again, add some more debug info.
Diffstat (limited to 'ext/dv/gstdvdemux.c')
-rw-r--r--ext/dv/gstdvdemux.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c
index f7f90f80..291f44d1 100644
--- a/ext/dv/gstdvdemux.c
+++ b/ext/dv/gstdvdemux.c
@@ -882,9 +882,16 @@ gst_dvdemux_demux_frame (GstDVDemux * dvdemux, const guint8 * data)
dvdemux->start_byte, &format, &dvdemux->start_timestamp))) {
goto discont_error;
}
-
dvdemux->timestamp = dvdemux->start_timestamp;
+ /* calculate current frame number */
+ format = GST_FORMAT_DEFAULT;
+ if (!(res = gst_pad_query_convert (dvdemux->videosrcpad,
+ GST_FORMAT_TIME,
+ dvdemux->start_timestamp, &format, &dvdemux->total_frames))) {
+ goto discont_error;
+ }
+
if (dvdemux->stop_byte == -1) {
dvdemux->stop_timestamp = -1;
} else {
@@ -904,10 +911,9 @@ gst_dvdemux_demux_frame (GstDVDemux * dvdemux, const guint8 * data)
dvdemux->need_discont = FALSE;
}
- dvdemux->total_frames++;
-
- next_ts = dvdemux->total_frames * GST_SECOND *
- dvdemux->framerate_denominator / dvdemux->framerate_numerator;
+ next_ts = gst_util_uint64_scale_int (
+ (dvdemux->total_frames + 1) * GST_SECOND,
+ dvdemux->framerate_denominator, dvdemux->framerate_numerator);
dvdemux->duration = next_ts - dvdemux->timestamp;
dv_parse_packs (dvdemux->decoder, data);
@@ -929,6 +935,7 @@ gst_dvdemux_demux_frame (GstDVDemux * dvdemux, const guint8 * data)
ret = GST_FLOW_OK;
dvdemux->timestamp = next_ts;
+ dvdemux->total_frames++;
done:
return ret;