diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2005-11-30 19:02:35 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2005-11-30 19:02:35 +0000 |
commit | 0b3776c0b80196d747c351ebf3e165434a38a22b (patch) | |
tree | dfe1c797f0b80eea288ee9b1024bc3d3b6a84401 /ext/dv/gstdvdemux.c | |
parent | abe61f0d33796594721b58c9e6eb6f333a958b12 (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.c | 17 |
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; |