From 8daf179ca4f46b51a79947dba8dc37ec8135790e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Fri, 23 Jun 2006 11:22:04 +0000 Subject: [PATCH] gst/mpegstream/: Flush packetizer cache when we get a FLUSH_STOP event; remove unused source pad member from packetiz... Original commit message from CVS: * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new), (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_destroy), (gst_mpeg_packetize_read): * gst/mpegstream/gstmpegpacketize.h: * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event), (gst_mpeg_parse_change_state): Flush packetizer cache when we get a FLUSH_STOP event; remove unused source pad member from packetizer; add debug category for packetizer. --- ChangeLog | 12 +++++++ gst/mpegstream/gstmpegpacketize.c | 54 +++++++++++++------------------ gst/mpegstream/gstmpegpacketize.h | 5 +-- gst/mpegstream/gstmpegparse.c | 8 ++--- 4 files changed, 41 insertions(+), 38 deletions(-) diff --git a/ChangeLog b/ChangeLog index a45b878a01..594aed624d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-06-23 Tim-Philipp Müller + + * gst/mpegstream/gstmpegpacketize.c: (gst_mpeg_packetize_new), + (gst_mpeg_packetize_flush_cache), (gst_mpeg_packetize_destroy), + (gst_mpeg_packetize_read): + * gst/mpegstream/gstmpegpacketize.h: + * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_process_event), + (gst_mpeg_parse_change_state): + Flush packetizer cache when we get a FLUSH_STOP event; + remove unused source pad member from packetizer; add debug + category for packetizer. + 2006-06-23 Jan Schmidt * ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (plugin_init): diff --git a/gst/mpegstream/gstmpegpacketize.c b/gst/mpegstream/gstmpegpacketize.c index 9f985533f9..bc5090f2b1 100644 --- a/gst/mpegstream/gstmpegpacketize.c +++ b/gst/mpegstream/gstmpegpacketize.c @@ -25,21 +25,17 @@ #include "gstmpegpacketize.h" +GST_DEBUG_CATEGORY_STATIC (gstmpegpacketize_debug); +#define GST_CAT_DEFAULT (gstmpegpacketize_debug) + GstMPEGPacketize * -gst_mpeg_packetize_new (GstPad * srcpad, GstMPEGPacketizeType type) +gst_mpeg_packetize_new (GstMPEGPacketizeType type) { GstMPEGPacketize *new; - g_return_val_if_fail (srcpad != NULL, NULL); - g_return_val_if_fail (GST_IS_PAD (srcpad), NULL); - g_return_val_if_fail (GST_PAD_IS_SRC (srcpad), NULL); - - gst_object_ref (GST_OBJECT (srcpad)); - - new = g_malloc (sizeof (GstMPEGPacketize)); + new = g_new0 (GstMPEGPacketize, 1); new->resync = TRUE; new->id = 0; - new->srcpad = srcpad; new->cache_head = 0; new->cache_tail = 0; new->cache_size = 0x4000; @@ -48,16 +44,31 @@ gst_mpeg_packetize_new (GstPad * srcpad, GstMPEGPacketizeType type) new->MPEG2 = FALSE; new->type = type; + if (gstmpegpacketize_debug == NULL) { + GST_DEBUG_CATEGORY_INIT (gstmpegpacketize_debug, "mpegpacketize", 0, + "MPEG parser element packetizer"); + } + return new; } +void +gst_mpeg_packetize_flush_cache (GstMPEGPacketize * packetize) +{ + g_return_if_fail (packetize != NULL); + + packetize->resync = TRUE; + packetize->cache_head = 0; + packetize->cache_tail = 0; + + GST_DEBUG ("flushed packetize cache"); +} + void gst_mpeg_packetize_destroy (GstMPEGPacketize * packetize) { g_return_if_fail (packetize != NULL); - gst_object_unref (GST_OBJECT (packetize->srcpad)); - g_free (packetize->cache); g_free (packetize); } @@ -333,26 +344,5 @@ gst_mpeg_packetize_read (GstMPEGPacketize * packetize, GstBuffer ** outbuf) } } -#if 0 - /* TODO: flush cache when newsegment is received */ - if (got_event) { - guint32 remaining; - GstEvent *event; - gint etype; - - gst_bytestream_get_status (packetize->bs, &remaining, &event); - etype = event ? GST_EVENT_TYPE (event) : GST_EVENT_EOS; - - switch (etype) { - case GST_EVENT_NEWSEGMENT: - GST_DEBUG ("packetize: discont\n"); - gst_bytestream_flush_fast (packetize->bs, remaining); - break; - } - - return GST_MINI_OBJECT (event); - } -#endif - g_assert_not_reached (); } diff --git a/gst/mpegstream/gstmpegpacketize.h b/gst/mpegstream/gstmpegpacketize.h index 380017ec9b..1511217097 100644 --- a/gst/mpegstream/gstmpegpacketize.h +++ b/gst/mpegstream/gstmpegpacketize.h @@ -54,7 +54,6 @@ struct _GstMPEGPacketize { /* current parse state */ guchar id; - GstPad *srcpad; GstMPEGPacketizeType type; guint8 *cache; /* cache for incoming data */ @@ -67,9 +66,11 @@ struct _GstMPEGPacketize { gboolean resync; }; -GstMPEGPacketize* gst_mpeg_packetize_new (GstPad *pad, GstMPEGPacketizeType type); +GstMPEGPacketize* gst_mpeg_packetize_new (GstMPEGPacketizeType type); void gst_mpeg_packetize_destroy (GstMPEGPacketize *packetize); +void gst_mpeg_packetize_flush_cache (GstMPEGPacketize *packetize); + guint64 gst_mpeg_packetize_tell (GstMPEGPacketize *packetize); void gst_mpeg_packetize_put (GstMPEGPacketize *packetize, GstBuffer * buf); GstFlowReturn gst_mpeg_packetize_read (GstMPEGPacketize *packetize, GstBuffer ** outbuf); diff --git a/gst/mpegstream/gstmpegparse.c b/gst/mpegstream/gstmpegparse.c index dec1fa5ccb..8a8230b5f2 100644 --- a/gst/mpegstream/gstmpegparse.c +++ b/gst/mpegstream/gstmpegparse.c @@ -394,7 +394,7 @@ gst_mpeg_parse_process_event (GstMPEGParse * mpeg_parse, GstEvent * event) ret = TRUE; break; } - case GST_EVENT_FLUSH_STOP: + case GST_EVENT_FLUSH_STOP:{ /* Forward the event. */ if (CLASS (mpeg_parse)->send_event) { ret = CLASS (mpeg_parse)->send_event (mpeg_parse, event); @@ -404,8 +404,9 @@ gst_mpeg_parse_process_event (GstMPEGParse * mpeg_parse, GstEvent * event) /* Reset the internal fields. */ gst_mpeg_parse_reset (mpeg_parse); - + gst_mpeg_packetize_flush_cache (mpeg_parse->packetize); break; + } default: if (CLASS (mpeg_parse)->send_event) { ret = CLASS (mpeg_parse)->send_event (mpeg_parse, event); @@ -1232,8 +1233,7 @@ gst_mpeg_parse_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_READY_TO_PAUSED: if (!mpeg_parse->packetize) { mpeg_parse->packetize = - gst_mpeg_packetize_new (mpeg_parse->srcpad, - GST_MPEG_PACKETIZE_SYSTEM); + gst_mpeg_packetize_new (GST_MPEG_PACKETIZE_SYSTEM); } /* Initialize parser state */