baseparse: Allow chaining of subclass event handlers
[platform/upstream/gst-plugins-good.git] / gst / audioparsers / gstbaseparse.c
index b2f7f2a..3bea83b 100644 (file)
@@ -361,7 +361,6 @@ gst_base_parse_class_init (GstBaseParseClass * klass)
   /* Default handlers */
   klass->check_valid_frame = gst_base_parse_check_frame;
   klass->parse_frame = gst_base_parse_parse_frame;
-  klass->event = gst_base_parse_sink_eventfunc;
   klass->src_event = gst_base_parse_src_eventfunc;
   klass->is_seekable = gst_base_parse_is_seekable;
   klass->convert = gst_base_parse_convert;
@@ -549,6 +548,9 @@ gst_base_parse_sink_event (GstPad * pad, GstEvent * event)
       handled = bclass->event (parse, event);
 
     if (!handled)
+      handled = gst_base_parse_sink_eventfunc (parse, event);
+
+    if (!handled)
       ret = gst_pad_event_default (pad, event);
   }
 
@@ -1493,7 +1495,9 @@ gst_base_parse_loop (GstPad * pad)
 
   if (ret != GST_FLOW_OK) {
     GST_DEBUG_OBJECT (parse, "flow: %s", gst_flow_get_name (ret));
-    if (GST_FLOW_IS_FATAL (ret)) {
+    if (ret == GST_FLOW_UNEXPECTED) {
+      gst_pad_push_event (parse->srcpad, gst_event_new_eos ());
+    } else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_UNEXPECTED) {
       GST_ELEMENT_ERROR (parse, STREAM, FAILED, (NULL),
           ("streaming task paused, reason: %s", gst_flow_get_name (ret)));
       gst_pad_push_event (parse->srcpad, gst_event_new_eos ());
@@ -2063,7 +2067,8 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
    * it directly or fail. For TIME, try upstream, but do it ourselves if
    * it fails upstream */
   if (format != GST_FORMAT_TIME) {
-    return gst_pad_push_event (parse->sinkpad, event);
+    /* default action delegates to upstream */
+    return FALSE;
   } else {
     gst_event_ref (event);
     if (gst_pad_push_event (parse->sinkpad, event)) {