GstMpegtsSection * section);
static void mpegts_parse_inspect_packet (MpegTSBase * base,
MpegTSPacketizerPacket * packet);
+static GstFlowReturn mpegts_parse_have_buffer (MpegTSBase * base,
+ GstBuffer * buffer);
static MpegTSParsePad *mpegts_parse_create_tspad (MpegTSParse2 * parse,
const gchar * name);
#define mpegts_parse_parent_class parent_class
G_DEFINE_TYPE (MpegTSParse2, mpegts_parse, GST_TYPE_MPEGTS_BASE);
static void mpegts_parse_reset (MpegTSBase * base);
-static GstFlowReturn mpegts_parse_input_done (MpegTSBase * base,
- GstBuffer * buffer);
static GstFlowReturn
drain_pending_buffers (MpegTSParse2 * parse, gboolean drain_all);
ts_class->program_started = GST_DEBUG_FUNCPTR (mpegts_parse_program_started);
ts_class->program_stopped = GST_DEBUG_FUNCPTR (mpegts_parse_program_stopped);
ts_class->reset = GST_DEBUG_FUNCPTR (mpegts_parse_reset);
- ts_class->input_done = GST_DEBUG_FUNCPTR (mpegts_parse_input_done);
ts_class->inspect_packet = GST_DEBUG_FUNCPTR (mpegts_parse_inspect_packet);
}
MpegTSBase *base = (MpegTSBase *) parse;
base->program_size = sizeof (MpegTSParseProgram);
- /* We will only need to handle data/section if we have request pads */
- base->push_data = FALSE;
- base->push_section = FALSE;
+ base->push_data = TRUE;
+ base->push_section = TRUE;
parse->user_pcr_pid = parse->pcr_pid = -1;
mpegts_parse_pad_removed (GstElement * element, GstPad * pad)
{
MpegTSParsePad *tspad;
- MpegTSBase *base = (MpegTSBase *) element;
MpegTSParse2 *parse = GST_MPEGTS_PARSE (element);
if (gst_pad_get_direction (pad) == GST_PAD_SINK)
parse->srcpads = g_list_remove_all (parse->srcpads, pad);
}
- if (parse->srcpads == NULL) {
- base->push_data = FALSE;
- base->push_section = FALSE;
- }
if (GST_ELEMENT_CLASS (parent_class)->pad_removed)
GST_ELEMENT_CLASS (parent_class)->pad_removed (element, pad);
mpegts_parse_request_new_pad (GstElement * element, GstPadTemplate * template,
const gchar * padname, const GstCaps * caps)
{
- MpegTSBase *base = (MpegTSBase *) element;
MpegTSParse2 *parse;
MpegTSParsePad *tspad;
MpegTSParseProgram *parseprogram;
pad = tspad->pad;
parse->srcpads = g_list_append (parse->srcpads, pad);
- base->push_data = TRUE;
- base->push_section = TRUE;
gst_pad_set_active (pad, TRUE);
MpegTSParsePad *tspad;
GstFlowReturn ret;
GList *srcpads;
+ GstBuffer *buf;
GST_OBJECT_LOCK (parse);
srcpads = parse->srcpads;
}
GST_OBJECT_UNLOCK (parse);
+ buf = mpegts_packet_to_buffer (packet);
+ ret = mpegts_parse_have_buffer (base, buf);
+
while (pad && !done) {
tspad = gst_pad_get_element_private (pad);
}
static GstFlowReturn
-mpegts_parse_input_done (MpegTSBase * base, GstBuffer * buffer)
+mpegts_parse_have_buffer (MpegTSBase * base, GstBuffer * buffer)
{
MpegTSParse2 *parse = GST_MPEGTS_PARSE (base);
GstFlowReturn ret = GST_FLOW_OK;