static gboolean gst_dshowvideodec_sink_event (GstPad * pad, GstEvent * event) { gboolean ret = TRUE; GstDshowVideoDec *vdec = (GstDshowVideoDec *) gst_pad_get_parent (pad); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_STOP: gst_dshowvideodec_flush (vdec); ret = gst_pad_event_default (pad, event); break; case GST_EVENT_NEWSEGMENT: { GstFormat format; gdouble rate; gint64 start, stop, time; gboolean update; gst_event_parse_new_segment (event, &update, &rate, &format, &start, &stop, &time); /* save the new segment in our local current segment */ gst_segment_set_newsegment (vdec->segment, update, rate, format, start, stop, time); GST_CAT_DEBUG_OBJECT (dshowvideodec_debug, vdec, "new segment received => start=%" GST_TIME_FORMAT " stop=%" GST_TIME_FORMAT, GST_TIME_ARGS (vdec->segment->start), GST_TIME_ARGS (vdec->segment->stop)); if (update) { GST_CAT_DEBUG_OBJECT (dshowvideodec_debug, vdec, "closing current segment flushing.."); gst_dshowvideodec_flush (vdec); } ret = gst_pad_event_default (pad, event); break; } default: ret = gst_pad_event_default (pad, event); break; } gst_object_unref (vdec); return ret; }
static gboolean gst_basertppayload_event (GstPad * pad, GstEvent * event) { GstBaseRTPPayload *basertppayload; GstBaseRTPPayloadClass *basertppayload_class; gboolean res; basertppayload = GST_BASE_RTP_PAYLOAD (gst_pad_get_parent (pad)); basertppayload_class = GST_BASE_RTP_PAYLOAD_GET_CLASS (basertppayload); if (basertppayload_class->handle_event) { res = basertppayload_class->handle_event (pad, event); if (res) goto done; } switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: res = gst_pad_event_default (pad, event); break; case GST_EVENT_FLUSH_STOP: res = gst_pad_event_default (pad, event); gst_segment_init (&basertppayload->segment, GST_FORMAT_UNDEFINED); break; case GST_EVENT_NEWSEGMENT: { gboolean update; gdouble rate; GstFormat fmt; gint64 start, stop, position; gst_event_parse_new_segment (event, &update, &rate, &fmt, &start, &stop, &position); gst_segment_set_newsegment (&basertppayload->segment, update, rate, fmt, start, stop, position); /* fallthrough */ } default: res = gst_pad_event_default (pad, event); break; } done: gst_object_unref (basertppayload); return res; }
static gboolean pad_event_handler(GstPad *pad, GstEvent *event) { // Establish thread-local. MpfComponent *component = MPF_COMPONENT(GST_OBJECT_PARENT(pad)); mpf_component_set_curcomponent(component); GstElement *element = gst_pad_get_parent_element(pad); gchar *elementname = gst_element_get_name(element); gchar *padname = gst_pad_get_name(pad); const gchar *eventname = gst_event_type_get_name(event->type); MPF_PRIVATE_ALWAYS("element=%s pad=%s event=%s\n", elementname, padname, eventname); // If EOS, poke a message out of the events pad. if (event->type == GST_EVENT_EOS) { GstPad *events = gst_element_get_pad(element, "events"); printf("GstPad *events=%p\n", events); GString *string = g_string_new(""); g_string_printf(string, "%s: EOS buffer_count=%d\n", elementname, mpf_private.buffer_count); mpf_voidstar_push("events", mpf_voidstar_stralloc(string->str)); mpf_voidstar_send_outbuffers(); gst_pad_push_event(events, gst_event_new_eos()); } g_free(elementname); g_free(padname); return gst_pad_event_default(pad, event); }
static gboolean gst_freeze_sink_event (GstPad * pad, GstEvent * event) { gboolean ret = TRUE; GstFreeze *freeze = GST_FREEZE (gst_pad_get_parent (pad)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: GST_DEBUG_OBJECT (freeze, "EOS on sink pad %s", gst_pad_get_name (GST_PAD (freeze->sinkpad))); gst_event_unref (event); break; case GST_EVENT_NEWSEGMENT: /* FALL TROUGH */ case GST_EVENT_FLUSH_STOP: gst_freeze_clear_buffer (freeze); /* FALL TROUGH */ default: ret = gst_pad_event_default (GST_PAD (freeze->sinkpad), event); break; } gst_object_unref (freeze); return ret; }
static gboolean gst_wavpack_dec_sink_event (GstPad * pad, GstEvent * event) { GstWavpackDec *dec = GST_WAVPACK_DEC (gst_pad_get_parent (pad)); GST_LOG_OBJECT (dec, "Received %s event", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT: { GstFormat fmt; gboolean is_update; gint64 start, end, base; gdouble rate; gst_event_parse_new_segment (event, &is_update, &rate, &fmt, &start, &end, &base); if (fmt == GST_FORMAT_TIME) { GST_DEBUG ("Got NEWSEGMENT event in GST_FORMAT_TIME, passing on (%" GST_TIME_FORMAT " - %" GST_TIME_FORMAT ")", GST_TIME_ARGS (start), GST_TIME_ARGS (end)); gst_segment_set_newsegment (&dec->segment, is_update, rate, fmt, start, end, base); } else { gst_segment_init (&dec->segment, GST_FORMAT_TIME); } break; } default: break; } gst_object_unref (dec); return gst_pad_event_default (pad, event); }
static gboolean gst_goo_encpcm_event (GstPad* pad, GstEvent* event) { GstGooEncPcm* self = GST_GOO_ENCPCM (gst_pad_get_parent (pad)); gboolean ret = FALSE; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT: GST_INFO_OBJECT (self, "New segement event"); ret = gst_pad_push_event (self->srcpad, event); break; case GST_EVENT_EOS: GST_INFO_OBJECT (self, "EOS event"); omx_wait_for_done (self); ret = gst_pad_push_event (self->srcpad, event); break; default: ret = gst_pad_event_default (pad, event); break; } gst_object_unref (self); return ret; }
static gboolean gst_rdt_manager_event_rdt (GstPad * pad, GstObject * parent, GstEvent * event) { GstRDTManager *rdtmanager; GstRDTManagerSession *session; gboolean res; rdtmanager = GST_RDT_MANAGER (parent); /* find session */ session = gst_pad_get_element_private (pad); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (event, &caps); res = gst_rdt_manager_parse_caps (rdtmanager, session, caps); gst_event_unref (event); break; } default: res = gst_pad_event_default (pad, parent, event); break; } return res; }
static gboolean gst_midi_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res; GstMidiParse *midiparse = GST_MIDI_PARSE (parent); GST_DEBUG_OBJECT (pad, "%s event received", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: midiparse->state = GST_MIDI_PARSE_STATE_PARSE; /* now start the parsing task */ res = gst_pad_start_task (midiparse->sinkpad, (GstTaskFunction) gst_midi_parse_loop, midiparse->sinkpad, NULL); /* don't forward the event */ gst_event_unref (event); break; case GST_EVENT_CAPS: case GST_EVENT_STREAM_START: case GST_EVENT_SEGMENT: res = TRUE; gst_event_unref (event); break; default: res = gst_pad_event_default (pad, parent, event); break; } return res; }
/* this function handles the link with other elements */ static gboolean gst_template_match_handle_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstTemplateMatch *filter; GstVideoInfo info; gboolean res = TRUE; filter = GST_TEMPLATE_MATCH (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (event, &caps); gst_video_info_from_caps (&info, caps); if (filter->cvImage) { cvReleaseImageHeader (&filter->cvImage); } filter->cvImage = cvCreateImageHeader (cvSize (info.width, info.height), IPL_DEPTH_8U, 3); break; } default: break; } res = gst_pad_event_default (pad, parent, event); return res; }
static gboolean gst_goo_filter_sink_event (GstPad* pad, GstEvent* event) { GST_LOG (""); GstGooFilter* self = GST_GOO_FILTER (gst_pad_get_parent (pad)); GstGooFilterPrivate* priv = GST_GOO_FILTER_GET_PRIVATE (self); gboolean ret; g_assert (self->component != NULL); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT: GST_INFO ("New segement event"); ret = gst_pad_push_event (self->srcpad, event); break; case GST_EVENT_EOS: GST_INFO ("EOS event"); gst_goo_filter_wait_for_done (self); ret = gst_pad_push_event (self->srcpad, event); break; default: ret = gst_pad_event_default (pad, event); break; } gst_object_unref (self); return ret; }
static gboolean gst_opencv_text_overlay_handle_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstOpencvTextOverlay *filter; gint width, height; GstStructure *structure; gboolean res = TRUE; filter = GST_OPENCV_TEXT_OVERLAY (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (event, &caps); structure = gst_caps_get_structure (caps, 0); gst_structure_get_int (structure, "width", &width); gst_structure_get_int (structure, "height", &height); if (filter->cvImage) { cvReleaseImage (&filter->cvImage); } filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3); break; } default: break; } res = gst_pad_event_default (pad, parent, event); return res; }
static gboolean dxr3spusink_handle_event (GstPad * pad, GstEvent * event) { GstEventType type; Dxr3SpuSink *sink; sink = DXR3SPUSINK (gst_pad_get_parent (pad)); type = event ? GST_EVENT_TYPE (event) : GST_EVENT_UNKNOWN; switch (type) { case GST_EVENT_FLUSH: if (sink->control_fd >= 0) { int subdevice; subdevice = EM8300_SUBDEVICE_SUBPICTURE; ioctl (sink->control_fd, EM8300_IOCTL_FLUSH, &subdevice); /* FIXME: There should be a nicer way to do this, but I tried everything and nothing else seems to really reset the video fifo. */ /* dxr3spusink_close (sink); */ /* dxr3spusink_open (sink); */ /* Report the flush operation. */ g_signal_emit (G_OBJECT (sink), dxr3spusink_signals[SIGNAL_FLUSHED], 0); } break; default: gst_pad_event_default (pad, event); break; } return TRUE; }
/* this function handles the link with other elements */ static gboolean gst_face_blur_handle_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstFaceBlur *filter; gint width, height; GstStructure *structure; gboolean res = TRUE; filter = GST_FACE_BLUR (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (event, &caps); structure = gst_caps_get_structure (caps, 0); gst_structure_get_int (structure, "width", &width); gst_structure_get_int (structure, "height", &height); filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3); filter->cvGray = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 1); filter->cvStorage = cvCreateMemStorage (0); break; } default: break; } res = gst_pad_event_default (pad, parent, event); return res; }
static gboolean gst_a2dp_sink_handle_event (GstPad * pad, GstObject * pad_parent, GstEvent * event) { GstA2dpSink *self; GstTagList *taglist = NULL; self = GST_A2DP_SINK (pad_parent); if (GST_EVENT_TYPE (event) == GST_EVENT_TAG) { if (self->taglist == NULL) gst_event_parse_tag (event, &self->taglist); else { gst_event_parse_tag (event, &taglist); gst_tag_list_insert (self->taglist, taglist, GST_TAG_MERGE_REPLACE); } } else if (GST_EVENT_TYPE (event) == GST_EVENT_CAPS) { GstCaps *caps = NULL; gst_event_parse_caps (event, &caps); gst_a2dp_sink_init_dynamic_elements (self, caps); } return gst_pad_event_default (pad, pad_parent, event); }
gboolean eos_callback(GstPad *pad, GstObject *parent, GstEvent *event) { GstEvent *seek_event; GstElement *bkgdec; GValue v=G_VALUE_INIT; GstPad *srcpad; GstIterator *srcpads; gboolean result; g_print("Decodebin received EOS. Someone should handle that...\n"); bkgdec=gst_pad_get_parent_element(pad); if(bkgdec->numsrcpads>0) { srcpads=gst_element_iterate_src_pads(bkgdec); gst_iterator_next(srcpads,&v); srcpad=GST_PAD(g_value_get_object(&v)); seek_event=gst_event_new_seek ( 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE); result=gst_pad_send_event(srcpad,seek_event); if(result==TRUE) { g_print("seek event sent OK.\n"); } else { g_print("seek sent FAILED.\n"); } g_value_reset(&v); g_value_unset(&v); gst_iterator_free(srcpads); return TRUE; } return gst_pad_event_default(pad,parent,event); }
static gboolean gst_play_sink_convert_bin_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstPlaySinkConvertBin *self = GST_PLAY_SINK_CONVERT_BIN (parent); gboolean ret; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (event, &caps); ret = gst_play_sink_convert_bin_sink_setcaps (self, caps); break; } default: break; } ret = gst_pad_event_default (pad, parent, gst_event_ref (event)); gst_event_unref (event); return ret; }
static gboolean gst_rtp_ssrc_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstRtpSsrcDemux *demux; const GstStructure *s; demux = GST_RTP_SSRC_DEMUX (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CUSTOM_UPSTREAM: case GST_EVENT_CUSTOM_BOTH: case GST_EVENT_CUSTOM_BOTH_OOB: s = gst_event_get_structure (event); if (s && !gst_structure_has_field (s, "ssrc")) { GstRtpSsrcDemuxPad *dpad = find_demux_pad_for_pad (demux, pad); if (dpad) { GstStructure *ws; event = gst_event_make_writable (event); ws = gst_event_writable_structure (event); gst_structure_set (ws, "ssrc", G_TYPE_UINT, dpad->ssrc, NULL); } } break; default: break; } return gst_pad_event_default (pad, parent, event); }
static gboolean gst_gcs_sink_event(GstPad *pad, GstEvent * event) { GstGcs *gcs = GST_GCS (gst_pad_get_parent( pad )); gboolean ret = FALSE, facefound; double x,y,w,h; switch (GST_EVENT_TYPE(event)) { case GST_EVENT_CUSTOM_DOWNSTREAM: if (gst_event_has_name(event, "facelocation")) { const GstStructure* str = gst_event_get_structure(event); gst_structure_get_double(str, "x", &x); // check bool return gst_structure_get_double(str, "y", &y); // check bool return gst_structure_get_double(str, "width", &w); // check bool return gst_structure_get_double(str, "height", &h);// check bool return gst_structure_get_boolean(str,"facefound", &facefound);// check bool return gcs->facepos.x = (int)x; gcs->facepos.y = (int)y; gcs->facepos.width = (int)w; gcs->facepos.height = (int)h; gcs->facefound = facefound; gst_event_unref(event); ret = TRUE; } break; case GST_EVENT_EOS: GST_INFO("Received EOS"); default: ret = gst_pad_event_default(pad, event); } gst_object_unref(gcs); return ret; }
static gboolean gst_kate_tiger_kate_event (GstPad * pad, GstEvent * event) { GstKateTiger *tiger = (GstKateTiger *) (gst_object_get_parent (GST_OBJECT (pad))); gboolean res = TRUE; g_return_val_if_fail (tiger != NULL, FALSE); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_NEWSEGMENT: GST_INFO_OBJECT (tiger, "New segment on Kate pad"); gst_event_unref (event); break; case GST_EVENT_EOS: /* we ignore this, it just means we don't have anymore Kate packets, but the Tiger renderer will still draw (if appropriate) on incoming video */ GST_INFO_OBJECT (tiger, "EOS on Kate pad"); gst_event_unref (event); break; default: res = gst_pad_event_default (pad, event); break; } gst_object_unref (tiger); return res; }
static gboolean gst_sub_parse_src_event (GstPad * pad, GstEvent * event) { GstSubParse *self = GST_SUBPARSE (gst_pad_get_parent (pad)); gboolean ret = FALSE; GST_DEBUG ("Handling %s event", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: { GstFormat format; GstSeekType start_type, stop_type; gint64 start, stop; gdouble rate; gboolean update; gst_event_parse_seek (event, &rate, &format, &self->segment_flags, &start_type, &start, &stop_type, &stop); if (format != GST_FORMAT_TIME) { GST_WARNING_OBJECT (self, "we only support seeking in TIME format"); gst_event_unref (event); goto beach; } /* Convert that seek to a seeking in bytes at position 0, FIXME: could use an index */ ret = gst_pad_push_event (self->sinkpad, gst_event_new_seek (rate, GST_FORMAT_BYTES, self->segment_flags, GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, 0)); if (ret) { /* Apply the seek to our segment */ gst_segment_set_seek (&self->segment, rate, format, self->segment_flags, start_type, start, stop_type, stop, &update); GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT, &self->segment); self->next_offset = 0; self->need_segment = TRUE; } else { GST_WARNING_OBJECT (self, "seek to 0 bytes failed"); } gst_event_unref (event); break; } default: ret = gst_pad_event_default (pad, event); break; } beach: gst_object_unref (self); return ret; }
static gboolean gst_dvd_sub_parse_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstDvdSubParse *parse; gboolean ret; parse = GST_DVD_SUB_PARSE (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_unref (event); caps = gst_static_pad_template_get_caps (&src_template); gst_pad_push_event (parse->srcpad, gst_event_new_caps (caps)); gst_caps_unref (caps); ret = TRUE; break; } case GST_EVENT_FLUSH_STOP: gst_dvd_sub_parse_reset (parse); /* fall-through */ default: ret = gst_pad_event_default (pad, parent, event); break; } return ret; }
static gboolean gst_merger_event_sinkr (GstPad * pad, GstObject * parent, GstEvent * event) { GstMerger *merger = GST_MERGER (parent); gboolean ret; GST_DEBUG_OBJECT (pad, "got %s event", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; gst_event_parse_caps (event, &caps); GST_DEBUG_OBJECT (pad, "event caps are %" GST_PTR_FORMAT, caps); ret = gst_merger_setcaps_srcv (merger, caps); break; } default: ret = gst_pad_event_default (pad, parent, event); break; } return ret; }
static gboolean gst_output_selector_forward_event (GstOutputSelector * sel, GstEvent * event) { gboolean res = TRUE; GstPad *active; switch (sel->pad_negotiation_mode) { case GST_OUTPUT_SELECTOR_PAD_NEGOTIATION_MODE_ALL: /* Send to all src pads */ res = gst_pad_event_default (sel->sinkpad, GST_OBJECT_CAST (sel), event); break; case GST_OUTPUT_SELECTOR_PAD_NEGOTIATION_MODE_NONE: gst_event_unref (event); break; default: active = gst_output_selector_get_active (sel); if (active) { res = gst_pad_push_event (active, event); gst_object_unref (active); } else { gst_event_unref (event); } break; } return res; }
static gboolean gst_srt_enc_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstSrtEnc *srtenc = GST_SRT_ENC (parent); gboolean ret; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps *caps; caps = gst_static_pad_template_get_caps (&src_template); gst_pad_set_caps (srtenc->srcpad, caps); gst_caps_unref (caps); gst_event_unref (event); ret = TRUE; break; } default: ret = gst_pad_event_default (pad, parent, event); break; } return ret; }
static gboolean gst_flxdec_sink_event_handler (GstPad * pad, GstObject * parent, GstEvent * event) { GstFlxDec *flxdec; gboolean ret; flxdec = GST_FLXDEC (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEGMENT: { GstSegment segment; gst_event_copy_segment (event, &segment); if (segment.format != GST_FORMAT_TIME) { GST_DEBUG_OBJECT (flxdec, "generating TIME segment"); gst_segment_init (&segment, GST_FORMAT_TIME); gst_event_unref (event); event = gst_event_new_segment (&segment); } /* fall-through */ } default: ret = gst_pad_event_default (pad, parent, event); break; } return ret; }
static gboolean gst_vdp_vpp_sink_event (GstPad * pad, GstEvent * event) { GstVdpVideoPostProcess *vpp = GST_VDP_VIDEO_POST_PROCESS (gst_pad_get_parent (pad)); gboolean res; switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_STOP: { GST_DEBUG_OBJECT (vpp, "flush stop"); gst_vdp_vpp_flush (vpp); res = gst_pad_push_event (vpp->srcpad, event); break; } default: res = gst_pad_event_default (pad, event); } gst_object_unref (vpp); return res; }
static gboolean gst_valve_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstValve *valve; gboolean is_sticky = GST_EVENT_IS_STICKY (event); gboolean ret = TRUE; valve = GST_VALVE (parent); if (g_atomic_int_get (&valve->drop)) { valve->need_repush_sticky |= is_sticky; gst_event_unref (event); } else { if (valve->need_repush_sticky) gst_valve_repush_sticky (valve); ret = gst_pad_event_default (pad, parent, event); } /* Ignore errors if "drop" was changed while the thread was blocked * downwards. */ if (g_atomic_int_get (&valve->drop)) { valve->need_repush_sticky |= is_sticky; ret = TRUE; } return ret; }
static gboolean gst_uri_downloader_sink_event (GstPad * pad, GstEvent * event) { gboolean ret = FALSE; GstUriDownloader *downloader; downloader = GST_URI_DOWNLOADER (gst_pad_get_element_private (pad)); switch (event->type) { case GST_EVENT_EOS:{ GST_OBJECT_LOCK (downloader); GST_DEBUG_OBJECT (downloader, "Got EOS on the fetcher pad"); if (downloader->priv->download != NULL) { /* signal we have fetched the URI */ downloader->priv->download->completed = TRUE; downloader->priv->download->download_stop_time = gst_util_get_timestamp (); GST_OBJECT_UNLOCK (downloader); GST_DEBUG_OBJECT (downloader, "Signaling chain funtion"); g_cond_signal (downloader->priv->cond); } else { GST_OBJECT_UNLOCK (downloader); } gst_event_unref (event); break; } default: ret = gst_pad_event_default (pad, event); break; } return ret; }
static gboolean gst_mim_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res = TRUE; gboolean forward = TRUE; GstMimDec *mimdec = GST_MIM_DEC (parent); /* * Ignore upstream segment event, its EVIL, we should implement * proper seeking instead */ switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEGMENT: forward = FALSE; break; case GST_EVENT_STREAM_START: case GST_EVENT_FLUSH_STOP: case GST_EVENT_EOS: gst_adapter_clear (mimdec->adapter); break; default: break; } if (forward) res = gst_pad_event_default (pad, parent, event); else gst_event_unref (event); return res; }
static gboolean gst_srtp_dec_sink_event_rtcp (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean ret; GstCaps *caps; GstSrtpDec *filter = GST_SRTP_DEC (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: gst_event_parse_caps (event, &caps); ret = gst_srtp_dec_sink_setcaps (pad, parent, caps, TRUE); gst_event_unref (event); return ret; case GST_EVENT_SEGMENT: /* Make sure to send a caps event downstream before the segment event, * even if upstream didn't */ if (!gst_pad_has_current_caps (filter->rtcp_srcpad)) { GstCaps *caps = gst_caps_new_empty_simple ("application/x-rtcp"); gst_pad_set_caps (filter->rtcp_srcpad, caps); gst_caps_unref (caps); } filter->rtcp_has_segment = TRUE; break; case GST_EVENT_FLUSH_STOP: filter->rtcp_has_segment = FALSE; break; default: break; } return gst_pad_event_default (pad, parent, event); }