static gboolean gst_rtp_sbc_pay_sink_event (GstRTPBasePayload * payload, GstEvent * event) { GstRtpSBCPay *sbcpay = GST_RTP_SBC_PAY (payload); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: gst_rtp_sbc_pay_flush_buffers (sbcpay); break; default: break; } return GST_RTP_BASE_PAYLOAD_CLASS (parent_class)->sink_event (payload, event); }
static gboolean gst_rtp_sbc_pay_handle_event(GstPad *pad, GstEvent *event) { GstRtpSBCPay *sbcpay = GST_RTP_SBC_PAY(GST_PAD_PARENT(pad)); switch (GST_EVENT_TYPE(event)) { case GST_EVENT_EOS: gst_rtp_sbc_pay_flush_buffers(sbcpay); break; default: break; } return FALSE; }
static GstFlowReturn gst_rtp_sbc_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer) { GstRtpSBCPay *sbcpay; guint available; /* FIXME check for negotiation */ sbcpay = GST_RTP_SBC_PAY (payload); sbcpay->timestamp = GST_BUFFER_PTS (buffer); gst_adapter_push (sbcpay->adapter, buffer); available = gst_adapter_available (sbcpay->adapter); if (available + RTP_SBC_HEADER_TOTAL >= GST_RTP_BASE_PAYLOAD_MTU (sbcpay) || (available > (sbcpay->min_frames * sbcpay->frame_length))) return gst_rtp_sbc_pay_flush_buffers (sbcpay); return GST_FLOW_OK; }