From 1a154e1d3d1bf32e4ab5f6a0700b43af7579ac97 Mon Sep 17 00:00:00 2001 From: j^ Date: Tue, 13 May 2008 07:28:21 +0000 Subject: [PATCH] ext/ogg/gstoggdemux.*: Parse presentation time from skeleton streams and use it as offset for the timestamps. Fixes b... Original commit message from CVS: Patch by: j^ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_parse_skeleton_fishead), (gst_ogg_pad_parse_skeleton_fisbone): * ext/ogg/gstoggdemux.h: Parse presentation time from skeleton streams and use it as offset for the timestamps. Fixes bug #530068. --- ChangeLog | 10 ++++++++++ common | 2 +- ext/ogg/gstoggdemux.c | 8 ++++++-- ext/ogg/gstoggdemux.h | 1 + 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index dcf603d835..b6d168a85e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-05-13 Sebastian Dröge + + Patch by: j^ + + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_parse_skeleton_fishead), + (gst_ogg_pad_parse_skeleton_fisbone): + * ext/ogg/gstoggdemux.h: + Parse presentation time from skeleton streams and use it as offset + for the timestamps. Fixes bug #530068. + 2008-05-12 Wim Taymans * gst-libs/gst/audio/gstbaseaudiosink.c: diff --git a/common b/common index dbf8f3aece..2d9c09df0f 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit dbf8f3aeceb6e57de097951a670cd853b4886ad8 +Subproject commit 2d9c09df0fe4ad3f570fea9f649cfc6c4511080d diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 9d6c65abc9..16c19d6fa7 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -547,13 +547,15 @@ gst_ogg_pad_parse_skeleton_fishead (GstOggPad * pad, ogg_packet * packet) data += 8; ogg->basetime = gst_util_uint64_scale (GST_SECOND, basetime_n, basetime_d); + ogg->prestime = gst_util_uint64_scale (GST_SECOND, prestime_n, prestime_d); ogg->have_fishead = TRUE; pad->is_skeleton = TRUE; pad->start_time = GST_CLOCK_TIME_NONE; pad->first_granule = -1; pad->first_time = GST_CLOCK_TIME_NONE; GST_INFO_OBJECT (ogg, "skeleton fishead parsed (basetime: %" - GST_TIME_FORMAT ")", GST_TIME_ARGS (ogg->basetime)); + GST_TIME_FORMAT ", prestime: %" GST_TIME_FORMAT ")", + GST_TIME_ARGS (ogg->basetime), GST_TIME_ARGS (ogg->prestime)); } /* function called when a skeleton fisbone is found. Caller ensures that @@ -561,6 +563,7 @@ gst_ogg_pad_parse_skeleton_fishead (GstOggPad * pad, ogg_packet * packet) static void gst_ogg_pad_parse_skeleton_fisbone (GstOggPad * pad, ogg_packet * packet) { + GstOggDemux *ogg = pad->ogg; GstOggPad *fisbone_pad; gint64 start_granule; guint32 serialno; @@ -596,7 +599,8 @@ gst_ogg_pad_parse_skeleton_fisbone (GstOggPad * pad, ogg_packet * packet) /* padding */ data += 3; - fisbone_pad->start_time = gst_annodex_granule_to_time (start_granule, + fisbone_pad->start_time = ogg->prestime - ogg->basetime; + fisbone_pad->start_time += gst_annodex_granule_to_time (start_granule, fisbone_pad->granulerate_n, fisbone_pad->granulerate_d, fisbone_pad->granuleshift); diff --git a/ext/ogg/gstoggdemux.h b/ext/ogg/gstoggdemux.h index f79fd8d8c4..a1d86c7157 100644 --- a/ext/ogg/gstoggdemux.h +++ b/ext/ogg/gstoggdemux.h @@ -169,6 +169,7 @@ struct _GstOggDemux /* annodex stuff */ gboolean have_fishead; gint64 basetime; + gint64 prestime; /* ogg stuff */ ogg_sync_state sync;