static gboolean gst_dtmf_src_handle_event (GstBaseSrc * src, GstEvent * event) { GstDTMFSrc *dtmfsrc; gboolean result = FALSE; dtmfsrc = GST_DTMF_SRC (src); GST_LOG_OBJECT (dtmfsrc, "Received an %s event on the src pad", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CUSTOM_UPSTREAM: if (gst_event_has_name (event, "dtmf-event")) { result = gst_dtmf_src_handle_dtmf_event (dtmfsrc, event); break; } /* fall through */ default: result = GST_BASE_SRC_CLASS (parent_class)->event (src, event); break; } return result; }
static gboolean gst_dtmf_src_send_event (GstElement * element, GstEvent * event) { GstDTMFSrc *dtmfsrc = GST_DTMF_SRC (element); gboolean ret; GST_LOG_OBJECT (dtmfsrc, "Received an %s event via send_event", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CUSTOM_BOTH: case GST_EVENT_CUSTOM_BOTH_OOB: case GST_EVENT_CUSTOM_UPSTREAM: case GST_EVENT_CUSTOM_DOWNSTREAM: case GST_EVENT_CUSTOM_DOWNSTREAM_OOB: if (gst_event_has_name (event, "dtmf-event")) { ret = gst_dtmf_src_handle_dtmf_event (dtmfsrc, event); break; } /* fall through */ default: ret = GST_ELEMENT_CLASS (parent_class)->send_event (element, event); break; } return ret; }
static gboolean gst_dtmf_src_handle_custom_upstream (GstDTMFSrc * dtmfsrc, GstEvent * event) { gboolean result = FALSE; const GstStructure *structure; GstState state; GstStateChangeReturn ret; ret = gst_element_get_state (GST_ELEMENT (dtmfsrc), &state, NULL, 0); if (ret != GST_STATE_CHANGE_SUCCESS || state != GST_STATE_PLAYING) { GST_DEBUG_OBJECT (dtmfsrc, "Received event while not in PLAYING state"); goto ret; } GST_DEBUG_OBJECT (dtmfsrc, "Received event is of our interest"); structure = gst_event_get_structure (event); if (structure && gst_structure_has_name (structure, "dtmf-event")) result = gst_dtmf_src_handle_dtmf_event (dtmfsrc, structure); ret: return result; }