diff options
-rw-r--r-- | ext/ogg/gstoggdemux.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c index 191ae264e..e86809c6c 100644 --- a/ext/ogg/gstoggdemux.c +++ b/ext/ogg/gstoggdemux.c @@ -416,6 +416,10 @@ gst_ogg_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) res = gst_ogg_demux_perform_seek (ogg, event); gst_event_unref (event); break; + case GST_EVENT_RECONFIGURE: + GST_OGG_PAD (pad)->last_ret = GST_FLOW_OK; + res = gst_pad_event_default (pad, parent, event); + break; default: res = gst_pad_event_default (pad, parent, event); break; @@ -667,7 +671,13 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet, /* don't push the header packets when we are asked to skip them */ if (!packet->b_o_s || push_headers) { - ret = gst_pad_push (GST_PAD_CAST (pad), buf); + if (pad->last_ret == GST_FLOW_OK) { + ret = gst_pad_push (GST_PAD_CAST (pad), buf); + } else { + GST_DEBUG_OBJECT (ogg, "not pushing buffer on error pad"); + ret = pad->last_ret; + gst_buffer_unref (buf); + } buf = NULL; /* combine flows */ |