ext/ogg/gstoggdemux.c: add more debugging clean up printf formats for granulepos and serialno
Original commit message from CVS: * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind), (gst_ogg_demux_chain_elem_pad), (gst_ogg_demux_queue_data), (gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet), (gst_ogg_pad_submit_page), (gst_ogg_chain_new_stream), (gst_ogg_demux_seek), (gst_ogg_demux_get_data), (gst_ogg_demux_get_next_page), (gst_ogg_demux_do_seek), (gst_ogg_demux_bisect_forward_serialno), (gst_ogg_demux_read_chain), (gst_ogg_demux_find_chains), (gst_ogg_demux_chain), (gst_ogg_demux_loop), (gst_ogg_print): add more debugging clean up printf formats for granulepos and serialno
This commit is contained in:
parent
71284c3f9c
commit
83675f78ec
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
|||||||
|
2006-05-30 Thomas Vander Stichele <thomas at apestaart dot org>
|
||||||
|
|
||||||
|
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind),
|
||||||
|
(gst_ogg_demux_chain_elem_pad), (gst_ogg_demux_queue_data),
|
||||||
|
(gst_ogg_demux_chain_peer), (gst_ogg_pad_submit_packet),
|
||||||
|
(gst_ogg_pad_submit_page), (gst_ogg_chain_new_stream),
|
||||||
|
(gst_ogg_demux_seek), (gst_ogg_demux_get_data),
|
||||||
|
(gst_ogg_demux_get_next_page), (gst_ogg_demux_do_seek),
|
||||||
|
(gst_ogg_demux_bisect_forward_serialno),
|
||||||
|
(gst_ogg_demux_read_chain), (gst_ogg_demux_find_chains),
|
||||||
|
(gst_ogg_demux_chain), (gst_ogg_demux_loop), (gst_ogg_print):
|
||||||
|
add more debugging
|
||||||
|
clean up printf formats for granulepos and serialno
|
||||||
|
|
||||||
2006-05-30 Michael Smith <msmith@fluendo.com>
|
2006-05-30 Michael Smith <msmith@fluendo.com>
|
||||||
|
|
||||||
* ext/vorbis/vorbisenc.c: (raw_caps_factory),
|
* ext/vorbis/vorbisenc.c: (raw_caps_factory),
|
||||||
|
2
common
2
common
@ -1 +1 @@
|
|||||||
Subproject commit 2f06c5cbc778e158d2429b09efc6740ff5281295
|
Subproject commit b0fd90b1cfb51107e8a511a1f3983a06bdd18638
|
@ -29,7 +29,6 @@
|
|||||||
|
|
||||||
#include <gst/base/gsttypefindhelper.h>
|
#include <gst/base/gsttypefindhelper.h>
|
||||||
|
|
||||||
|
|
||||||
static const GstElementDetails gst_ogg_demux_details =
|
static const GstElementDetails gst_ogg_demux_details =
|
||||||
GST_ELEMENT_DETAILS ("Ogg demuxer",
|
GST_ELEMENT_DETAILS ("Ogg demuxer",
|
||||||
"Codec/Demuxer",
|
"Codec/Demuxer",
|
||||||
@ -809,7 +808,7 @@ gst_ogg_pad_typefind (GstOggPad * pad, ogg_packet * packet)
|
|||||||
|
|
||||||
if (caps == NULL) {
|
if (caps == NULL) {
|
||||||
GST_WARNING_OBJECT (ogg,
|
GST_WARNING_OBJECT (ogg,
|
||||||
"couldn't find caps for stream with serial %08lx", pad->serialno);
|
"couldn't find caps for stream with serial %08x", pad->serialno);
|
||||||
caps = gst_caps_new_simple ("application/octet-stream", NULL);
|
caps = gst_caps_new_simple ("application/octet-stream", NULL);
|
||||||
} else {
|
} else {
|
||||||
/* ogg requires you to use a decoder element to define the
|
/* ogg requires you to use a decoder element to define the
|
||||||
@ -890,7 +889,7 @@ gst_ogg_demux_chain_elem_pad (GstOggPad * pad, ogg_packet * packet)
|
|||||||
if (!pad->elem_pad)
|
if (!pad->elem_pad)
|
||||||
goto no_decoder;
|
goto no_decoder;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg, "%p init decoder serial %08lx", pad, pad->serialno);
|
GST_DEBUG_OBJECT (ogg, "%p init decoder serial %08x", pad, pad->serialno);
|
||||||
|
|
||||||
buf = gst_buffer_new_and_alloc (packet->bytes);
|
buf = gst_buffer_new_and_alloc (packet->bytes);
|
||||||
memcpy (GST_BUFFER_DATA (buf), packet->packet, packet->bytes);
|
memcpy (GST_BUFFER_DATA (buf), packet->packet, packet->bytes);
|
||||||
@ -907,7 +906,7 @@ gst_ogg_demux_chain_elem_pad (GstOggPad * pad, ogg_packet * packet)
|
|||||||
no_decoder:
|
no_decoder:
|
||||||
{
|
{
|
||||||
GST_WARNING_OBJECT (ogg,
|
GST_WARNING_OBJECT (ogg,
|
||||||
"pad %08lx does not have elem_pad, no decoder ?", pad);
|
"pad %08x does not have elem_pad, no decoder ?", pad);
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
decoder_error:
|
decoder_error:
|
||||||
@ -927,7 +926,7 @@ gst_ogg_demux_queue_data (GstOggPad * pad, ogg_packet * packet)
|
|||||||
GstOggDemux *ogg = pad->ogg;
|
GstOggDemux *ogg = pad->ogg;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg, "%p queueing data serial %08lx", pad, pad->serialno);
|
GST_DEBUG_OBJECT (ogg, "%p queueing data serial %08x", pad, pad->serialno);
|
||||||
|
|
||||||
buf = gst_buffer_new_and_alloc (packet->bytes);
|
buf = gst_buffer_new_and_alloc (packet->bytes);
|
||||||
memcpy (buf->data, packet->packet, packet->bytes);
|
memcpy (buf->data, packet->packet, packet->bytes);
|
||||||
@ -951,7 +950,7 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet)
|
|||||||
GstOggChain *chain;
|
GstOggChain *chain;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg,
|
GST_DEBUG_OBJECT (ogg,
|
||||||
"%p streaming to peer serial %08lx", pad, pad->serialno);
|
"%p streaming to peer serial %08x", pad, pad->serialno);
|
||||||
|
|
||||||
ret =
|
ret =
|
||||||
gst_pad_alloc_buffer_and_set_caps (GST_PAD (pad), GST_BUFFER_OFFSET_NONE,
|
gst_pad_alloc_buffer_and_set_caps (GST_PAD (pad), GST_BUFFER_OFFSET_NONE,
|
||||||
@ -1012,7 +1011,7 @@ done:
|
|||||||
no_buffer:
|
no_buffer:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (ogg,
|
GST_DEBUG_OBJECT (ogg,
|
||||||
"%p could not get buffer from peer %08lx, %d (%s)", pad,
|
"%p could not get buffer from peer %08x, %d (%s)", pad,
|
||||||
pad->serialno, ret, gst_flow_get_name (ret));
|
pad->serialno, ret, gst_flow_get_name (ret));
|
||||||
if (ret == GST_FLOW_NOT_LINKED)
|
if (ret == GST_FLOW_NOT_LINKED)
|
||||||
ret = GST_FLOW_OK;
|
ret = GST_FLOW_OK;
|
||||||
@ -1037,7 +1036,7 @@ gst_ogg_pad_submit_packet (GstOggPad * pad, ogg_packet * packet)
|
|||||||
|
|
||||||
GstOggDemux *ogg = pad->ogg;
|
GstOggDemux *ogg = pad->ogg;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg, "%p submit packet serial %08lx", pad, pad->serialno);
|
GST_DEBUG_OBJECT (ogg, "%p submit packet serial %08x", pad, pad->serialno);
|
||||||
|
|
||||||
if (!pad->have_type) {
|
if (!pad->have_type) {
|
||||||
if (!ogg->have_fishead && packet->bytes == SKELETON_FISHEAD_SIZE &&
|
if (!ogg->have_fishead && packet->bytes == SKELETON_FISHEAD_SIZE &&
|
||||||
@ -1055,7 +1054,7 @@ gst_ogg_pad_submit_packet (GstOggPad * pad, ogg_packet * packet)
|
|||||||
|
|
||||||
granule = packet->granulepos;
|
granule = packet->granulepos;
|
||||||
if (granule != -1) {
|
if (granule != -1) {
|
||||||
GST_DEBUG_OBJECT (ogg, "%p has granulepos %lld", pad, granule);
|
GST_DEBUG_OBJECT (ogg, "%p has granulepos %" G_GINT64_FORMAT, pad, granule);
|
||||||
ogg->current_granule = granule;
|
ogg->current_granule = granule;
|
||||||
pad->current_granule = granule;
|
pad->current_granule = granule;
|
||||||
/* granulepos 0 and -1 are considered header packets.
|
/* granulepos 0 and -1 are considered header packets.
|
||||||
@ -1064,7 +1063,8 @@ gst_ogg_pad_submit_packet (GstOggPad * pad, ogg_packet * packet)
|
|||||||
* internal decoder produced a frame and we don't have a
|
* internal decoder produced a frame and we don't have a
|
||||||
* granulepos because in that case the granulpos must have been 0 */
|
* granulepos because in that case the granulpos must have been 0 */
|
||||||
if (pad->first_granule == -1 && granule != 0) {
|
if (pad->first_granule == -1 && granule != 0) {
|
||||||
GST_DEBUG_OBJECT (ogg, "%p found first granulepos %lld", pad, granule);
|
GST_DEBUG_OBJECT (ogg, "%p found first granulepos %" G_GINT64_FORMAT, pad,
|
||||||
|
granule);
|
||||||
pad->first_granule = granule;
|
pad->first_granule = granule;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1136,7 +1136,7 @@ gst_ogg_pad_submit_packet (GstOggPad * pad, ogg_packet * packet)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we are building a chain, store buffer for when we activate
|
/* if we are building a chain, store buffer for when we activate
|
||||||
* it. This path is taken if we operate in streaming mode. */
|
* it. This path is taken if we operate in streaming mode. */
|
||||||
if (ogg->building_chain) {
|
if (ogg->building_chain) {
|
||||||
ret = gst_ogg_demux_queue_data (pad, packet);
|
ret = gst_ogg_demux_queue_data (pad, packet);
|
||||||
@ -1194,7 +1194,7 @@ gst_ogg_pad_submit_page (GstOggPad * pad, ogg_page * page)
|
|||||||
choked:
|
choked:
|
||||||
{
|
{
|
||||||
GST_WARNING_OBJECT (ogg,
|
GST_WARNING_OBJECT (ogg,
|
||||||
"ogg stream choked on page (serial %08lx), resetting stream",
|
"ogg stream choked on page (serial %08x), resetting stream",
|
||||||
pad->serialno);
|
pad->serialno);
|
||||||
gst_ogg_pad_reset (pad);
|
gst_ogg_pad_reset (pad);
|
||||||
/* we continue to recover */
|
/* we continue to recover */
|
||||||
@ -1261,7 +1261,7 @@ gst_ogg_chain_new_stream (GstOggChain * chain, glong serialno)
|
|||||||
GstTagList *list;
|
GstTagList *list;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (chain->ogg, "creating new stream %08lx in chain %p",
|
GST_DEBUG_OBJECT (chain->ogg, "creating new stream %08x in chain %p",
|
||||||
serialno, chain);
|
serialno, chain);
|
||||||
|
|
||||||
ret = g_object_new (GST_TYPE_OGG_PAD, NULL);
|
ret = g_object_new (GST_TYPE_OGG_PAD, NULL);
|
||||||
@ -1270,7 +1270,7 @@ gst_ogg_chain_new_stream (GstOggChain * chain, glong serialno)
|
|||||||
gst_object_sink (GST_OBJECT (ret));
|
gst_object_sink (GST_OBJECT (ret));
|
||||||
|
|
||||||
list = gst_tag_list_new ();
|
list = gst_tag_list_new ();
|
||||||
name = g_strdup_printf ("serial_%08lx", serialno);
|
name = g_strdup_printf ("serial_%08x", serialno);
|
||||||
|
|
||||||
GST_PAD_DIRECTION (ret) = GST_PAD_SRC;
|
GST_PAD_DIRECTION (ret) = GST_PAD_SRC;
|
||||||
ret->chain = chain;
|
ret->chain = chain;
|
||||||
@ -1281,7 +1281,7 @@ gst_ogg_chain_new_stream (GstOggChain * chain, glong serialno)
|
|||||||
|
|
||||||
ret->serialno = serialno;
|
ret->serialno = serialno;
|
||||||
if (ogg_stream_init (&ret->stream, serialno) != 0) {
|
if (ogg_stream_init (&ret->stream, serialno) != 0) {
|
||||||
GST_ERROR ("Could not initialize ogg_stream struct for serial %08lx.",
|
GST_ERROR ("Could not initialize ogg_stream struct for serial %08x.",
|
||||||
serialno);
|
serialno);
|
||||||
gst_object_unref (ret);
|
gst_object_unref (ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1293,7 +1293,7 @@ gst_ogg_chain_new_stream (GstOggChain * chain, glong serialno)
|
|||||||
gst_tag_list_free (list);
|
gst_tag_list_free (list);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (chain->ogg,
|
GST_DEBUG_OBJECT (chain->ogg,
|
||||||
"created new ogg src %p for stream with serial %08lx", ret, serialno);
|
"created new ogg src %p for stream with serial %08x", ret, serialno);
|
||||||
|
|
||||||
g_array_append_val (chain->streams, ret);
|
g_array_append_val (chain->streams, ret);
|
||||||
|
|
||||||
@ -1486,7 +1486,7 @@ gst_ogg_demux_submit_buffer (GstOggDemux * ogg, GstBuffer * buffer)
|
|||||||
static void
|
static void
|
||||||
gst_ogg_demux_seek (GstOggDemux * ogg, gint64 offset)
|
gst_ogg_demux_seek (GstOggDemux * ogg, gint64 offset)
|
||||||
{
|
{
|
||||||
GST_LOG_OBJECT (ogg, "seeking to %lld", offset);
|
GST_LOG_OBJECT (ogg, "seeking to %" G_GINT64_FORMAT, offset);
|
||||||
|
|
||||||
ogg->offset = offset;
|
ogg->offset = offset;
|
||||||
ogg_sync_reset (&ogg->sync);
|
ogg_sync_reset (&ogg->sync);
|
||||||
@ -1504,7 +1504,8 @@ gst_ogg_demux_get_data (GstOggDemux * ogg)
|
|||||||
GstBuffer *buffer;
|
GstBuffer *buffer;
|
||||||
gint size;
|
gint size;
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg, "get data %lld %lld", ogg->offset, ogg->length);
|
GST_LOG_OBJECT (ogg, "get data %" G_GINT64_FORMAT " %" G_GINT64_FORMAT,
|
||||||
|
ogg->offset, ogg->length);
|
||||||
if (ogg->offset == ogg->length)
|
if (ogg->offset == ogg->length)
|
||||||
goto eos;
|
goto eos;
|
||||||
|
|
||||||
@ -1532,13 +1533,19 @@ error:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Read the next page from the current offset.
|
/* Read the next page from the current offset.
|
||||||
|
* boundary: number of bytes ahead we allow looking for;
|
||||||
|
* -1 if no boundary
|
||||||
|
* returns the offset the next page starts at, or OV_FALSE if we couldn't
|
||||||
|
* find a new page within the boundary
|
||||||
*/
|
*/
|
||||||
static gint64
|
static gint64
|
||||||
gst_ogg_demux_get_next_page (GstOggDemux * ogg, ogg_page * og, gint64 boundary)
|
gst_ogg_demux_get_next_page (GstOggDemux * ogg, ogg_page * og, gint64 boundary)
|
||||||
{
|
{
|
||||||
gint64 end_offset = 0;
|
gint64 end_offset = 0;
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg, "get next page %lld", boundary);
|
GST_LOG_OBJECT (ogg,
|
||||||
|
"get next page, current offset %" G_GINT64_FORMAT ", bytes boundary %"
|
||||||
|
G_GINT64_FORMAT, ogg->offset, boundary);
|
||||||
|
|
||||||
if (boundary > 0)
|
if (boundary > 0)
|
||||||
end_offset = ogg->offset + boundary;
|
end_offset = ogg->offset + boundary;
|
||||||
@ -1547,8 +1554,9 @@ gst_ogg_demux_get_next_page (GstOggDemux * ogg, ogg_page * og, gint64 boundary)
|
|||||||
glong more;
|
glong more;
|
||||||
|
|
||||||
if (boundary > 0 && ogg->offset >= end_offset) {
|
if (boundary > 0 && ogg->offset >= end_offset) {
|
||||||
GST_LOG_OBJECT (ogg, "offset %lld >= end_offset %lld", ogg->offset,
|
GST_LOG_OBJECT (ogg,
|
||||||
end_offset);
|
"offset %" G_GINT64_FORMAT " >= end_offset %" G_GINT64_FORMAT,
|
||||||
|
ogg->offset, end_offset);
|
||||||
return OV_FALSE;
|
return OV_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1581,7 +1589,8 @@ gst_ogg_demux_get_next_page (GstOggDemux * ogg, ogg_page * og, gint64 boundary)
|
|||||||
ogg_sync_reset (&ogg->sync);
|
ogg_sync_reset (&ogg->sync);
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg,
|
GST_LOG_OBJECT (ogg,
|
||||||
"got page at %lld, serial %08lx, end at %lld, granule %lld", ret,
|
"got page at %" G_GINT64_FORMAT ", serial %08x, end at %"
|
||||||
|
G_GINT64_FORMAT ", granule %" G_GINT64_FORMAT, ret,
|
||||||
ogg_page_serialno (og), ogg->offset, ogg_page_granulepos (og));
|
ogg_page_serialno (og), ogg->offset, ogg_page_granulepos (og));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -1802,6 +1811,7 @@ gst_ogg_demux_do_seek (GstOggDemux * ogg, gint64 position, gboolean accurate,
|
|||||||
|
|
||||||
if (bisect <= begin)
|
if (bisect <= begin)
|
||||||
bisect = begin;
|
bisect = begin;
|
||||||
|
GST_DEBUG_OBJECT (ogg, "Initial guess: %" G_GINT64_FORMAT, bisect);
|
||||||
}
|
}
|
||||||
gst_ogg_demux_seek (ogg, bisect);
|
gst_ogg_demux_seek (ogg, bisect);
|
||||||
|
|
||||||
@ -1813,6 +1823,8 @@ gst_ogg_demux_do_seek (GstOggDemux * ogg, gint64 position, gboolean accurate,
|
|||||||
", end %" G_GINT64_FORMAT, bisect, begin, end);
|
", end %" G_GINT64_FORMAT, bisect, begin, end);
|
||||||
|
|
||||||
result = gst_ogg_demux_get_next_page (ogg, &og, end - ogg->offset);
|
result = gst_ogg_demux_get_next_page (ogg, &og, end - ogg->offset);
|
||||||
|
GST_LOG_OBJECT (ogg, "looking for next page returned %" G_GINT64_FORMAT,
|
||||||
|
result);
|
||||||
if (result == OV_EREAD) {
|
if (result == OV_EREAD) {
|
||||||
goto seek_error;
|
goto seek_error;
|
||||||
}
|
}
|
||||||
@ -1831,14 +1843,19 @@ gst_ogg_demux_do_seek (GstOggDemux * ogg, gint64 position, gboolean accurate,
|
|||||||
gst_ogg_demux_seek (ogg, bisect);
|
gst_ogg_demux_seek (ogg, bisect);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/* found offset of next ogg page */
|
||||||
gint64 granulepos;
|
gint64 granulepos;
|
||||||
GstClockTime granuletime;
|
GstClockTime granuletime;
|
||||||
GstFormat format;
|
GstFormat format;
|
||||||
GstOggPad *pad;
|
GstOggPad *pad;
|
||||||
|
|
||||||
|
GST_LOG_OBJECT (ogg, "found next ogg page at %" G_GINT64_FORMAT,
|
||||||
|
result);
|
||||||
granulepos = ogg_page_granulepos (&og);
|
granulepos = ogg_page_granulepos (&og);
|
||||||
if (granulepos == -1)
|
if (granulepos == -1) {
|
||||||
|
GST_LOG_OBJECT (ogg, "granulepos of next page is -1");
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
pad = gst_ogg_chain_get_stream (chain, ogg_page_serialno (&og));
|
pad = gst_ogg_chain_get_stream (chain, ogg_page_serialno (&og));
|
||||||
if (pad == NULL || pad->is_skeleton)
|
if (pad == NULL || pad->is_skeleton)
|
||||||
@ -1853,6 +1870,8 @@ gst_ogg_demux_do_seek (GstOggDemux * ogg, gint64 position, gboolean accurate,
|
|||||||
} else {
|
} else {
|
||||||
if (granuletime < pad->first_time)
|
if (granuletime < pad->first_time)
|
||||||
continue;
|
continue;
|
||||||
|
GST_LOG_OBJECT (ogg, "granulepos %" G_GINT64_FORMAT "maps to time %"
|
||||||
|
GST_TIME_FORMAT, granulepos, GST_TIME_ARGS (granuletime));
|
||||||
|
|
||||||
granuletime -= pad->first_time;
|
granuletime -= pad->first_time;
|
||||||
}
|
}
|
||||||
@ -2097,8 +2116,8 @@ gst_ogg_demux_bisect_forward_serialno (GstOggDemux * ogg,
|
|||||||
GstOggChain *nextchain;
|
GstOggChain *nextchain;
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg,
|
GST_LOG_OBJECT (ogg,
|
||||||
"bisect begin: %lld, searched: %lld, end %lld, chain: %p", begin,
|
"bisect begin: %" G_GINT64_FORMAT ", searched: %" G_GINT64_FORMAT
|
||||||
searched, end, chain);
|
", end %" G_GINT64_FORMAT ", chain: %p", begin, searched, end, chain);
|
||||||
|
|
||||||
/* the below guards against garbage seperating the last and
|
/* the below guards against garbage seperating the last and
|
||||||
* first pages of two links. */
|
* first pages of two links. */
|
||||||
@ -2132,12 +2151,12 @@ gst_ogg_demux_bisect_forward_serialno (GstOggDemux * ogg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg, "current chain ends at %lld", searched);
|
GST_LOG_OBJECT (ogg, "current chain ends at %" G_GINT64_FORMAT, searched);
|
||||||
|
|
||||||
chain->end_offset = searched;
|
chain->end_offset = searched;
|
||||||
gst_ogg_demux_read_end_chain (ogg, chain);
|
gst_ogg_demux_read_end_chain (ogg, chain);
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg, "found begin at %lld", next);
|
GST_LOG_OBJECT (ogg, "found begin at %" G_GINT64_FORMAT, next);
|
||||||
|
|
||||||
gst_ogg_demux_seek (ogg, next);
|
gst_ogg_demux_seek (ogg, next);
|
||||||
nextchain = gst_ogg_demux_read_chain (ogg);
|
nextchain = gst_ogg_demux_read_chain (ogg);
|
||||||
@ -2174,7 +2193,7 @@ gst_ogg_demux_read_chain (GstOggDemux * ogg)
|
|||||||
gboolean done;
|
gboolean done;
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg, "reading chain at %lld", offset);
|
GST_LOG_OBJECT (ogg, "reading chain at %" G_GINT64_FORMAT, offset);
|
||||||
|
|
||||||
/* first read the BOS pages, do typefind on them, create
|
/* first read the BOS pages, do typefind on them, create
|
||||||
* the decoders, send data to the decoders. */
|
* the decoders, send data to the decoders. */
|
||||||
@ -2239,7 +2258,7 @@ gst_ogg_demux_read_chain (GstOggDemux * ogg)
|
|||||||
}
|
}
|
||||||
/* the timestamp will be filled in when we submit the pages */
|
/* the timestamp will be filled in when we submit the pages */
|
||||||
done &= (pad->start_time != GST_CLOCK_TIME_NONE);
|
done &= (pad->start_time != GST_CLOCK_TIME_NONE);
|
||||||
GST_LOG_OBJECT (ogg, "done %08lx now %d", serial, done);
|
GST_LOG_OBJECT (ogg, "done %08x now %d", serial, done);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we read a page not belonging to the current chain: seek back to the
|
/* we read a page not belonging to the current chain: seek back to the
|
||||||
@ -2277,7 +2296,7 @@ gst_ogg_demux_read_chain (GstOggDemux * ogg)
|
|||||||
return chain;
|
return chain;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* read the last pages from the ogg stream to get the final
|
/* read the last pages from the ogg stream to get the final
|
||||||
* page end_offsets.
|
* page end_offsets.
|
||||||
*/
|
*/
|
||||||
static gint
|
static gint
|
||||||
@ -2471,7 +2490,7 @@ gst_ogg_demux_find_chains (GstOggDemux * ogg)
|
|||||||
if (!res || ogg->length <= 0)
|
if (!res || ogg->length <= 0)
|
||||||
goto no_length;
|
goto no_length;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg, "file length %lld", ogg->length);
|
GST_DEBUG_OBJECT (ogg, "file length %" G_GINT64_FORMAT, ogg->length);
|
||||||
|
|
||||||
/* read chain from offset 0, this is the first chain of the
|
/* read chain from offset 0, this is the first chain of the
|
||||||
* ogg file. */
|
* ogg file. */
|
||||||
@ -2555,7 +2574,8 @@ gst_ogg_demux_chain (GstPad * pad, GstBuffer * buffer)
|
|||||||
granule = ogg_page_granulepos (&page);
|
granule = ogg_page_granulepos (&page);
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg,
|
GST_LOG_OBJECT (ogg,
|
||||||
"processing ogg page (serial %08lx, pageno %ld, granule pos %llu, bos %d)",
|
"processing ogg page (serial %08x, pageno %ld, granulepos %"
|
||||||
|
G_GINT64_FORMAT ", bos %d)",
|
||||||
serialno, ogg_page_pageno (&page), granule, ogg_page_bos (&page));
|
serialno, ogg_page_pageno (&page), granule, ogg_page_bos (&page));
|
||||||
|
|
||||||
if (ogg_page_bos (&page)) {
|
if (ogg_page_bos (&page)) {
|
||||||
@ -2634,7 +2654,7 @@ unknown_chain:
|
|||||||
unknown_pad:
|
unknown_pad:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_ERROR (ogg, STREAM, DECODE,
|
GST_ELEMENT_ERROR (ogg, STREAM, DECODE,
|
||||||
(NULL), ("unknown ogg pad for serial %08d detected", serialno));
|
(NULL), ("unknown ogg pad for serial %08x detected", serialno));
|
||||||
gst_ogg_demux_send_event (ogg, gst_event_new_eos ());
|
gst_ogg_demux_send_event (ogg, gst_event_new_eos ());
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
@ -2659,14 +2679,11 @@ gst_ogg_demux_send_event (GstOggDemux * ogg, GstEvent * event)
|
|||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* random access code
|
/* random access code
|
||||||
*
|
*
|
||||||
* - first find all the chains and streams by scanning the
|
* - first find all the chains and streams by scanning the file.
|
||||||
* file.
|
* - then get and chain buffers, just like the streaming case.
|
||||||
* - then get and chain buffers, just like the streaming
|
* - when seeking, we can use the chain info to perform the seek.
|
||||||
* case.
|
|
||||||
* - when seeking, we can use the chain info to perform the
|
|
||||||
* seek.
|
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
gst_ogg_demux_loop (GstOggPad * pad)
|
gst_ogg_demux_loop (GstOggPad * pad)
|
||||||
@ -2703,7 +2720,7 @@ gst_ogg_demux_loop (GstOggPad * pad)
|
|||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_LOG_OBJECT (ogg, "pull data %lld", ogg->offset);
|
GST_LOG_OBJECT (ogg, "pull data %" G_GINT64_FORMAT, ogg->offset);
|
||||||
if (ogg->offset == ogg->length)
|
if (ogg->offset == ogg->length)
|
||||||
goto eos;
|
goto eos;
|
||||||
|
|
||||||
@ -2970,7 +2987,7 @@ gst_ogg_print (GstOggDemux * ogg)
|
|||||||
for (j = 0; j < chain->streams->len; j++) {
|
for (j = 0; j < chain->streams->len; j++) {
|
||||||
GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, j);
|
GstOggPad *stream = g_array_index (chain->streams, GstOggPad *, j);
|
||||||
|
|
||||||
GST_INFO_OBJECT (ogg, " stream %08lx:", stream->serialno);
|
GST_INFO_OBJECT (ogg, " stream %08x:", stream->serialno);
|
||||||
GST_INFO_OBJECT (ogg, " start time: %" GST_TIME_FORMAT,
|
GST_INFO_OBJECT (ogg, " start time: %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (stream->start_time));
|
GST_TIME_ARGS (stream->start_time));
|
||||||
GST_INFO_OBJECT (ogg, " first granulepos: %" G_GINT64_FORMAT,
|
GST_INFO_OBJECT (ogg, " first granulepos: %" G_GINT64_FORMAT,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user