baseparse: remove pending_segment as it was being misused

It wasn't required, instead baseparse was using it to check the media
caps to identify if it was handling audio or video.

The pending_segment was removed and a checked_media boolean
replaced it for a more accurate naming.

https://bugzilla.gnome.org/show_bug.cgi?id=721350
This commit is contained in:
Thiago Santos 2014-01-02 16:22:37 -03:00
parent accaadf52a
commit e02c00a58a

View file

@ -330,8 +330,10 @@ struct _GstBaseParsePrivate
/* Pending serialized events */ /* Pending serialized events */
GList *pending_events; GList *pending_events;
/* Newsegment event to be sent after SEEK */
gboolean pending_segment; /* If baseparse has checked the caps to identify if it is
* handling video or audio */
gboolean checked_media;
/* offset of last parsed frame/data */ /* offset of last parsed frame/data */
gint64 prev_offset; gint64 prev_offset;
@ -509,7 +511,8 @@ gst_base_parse_clear_queues (GstBaseParse * parse)
g_list_foreach (parse->priv->pending_events, (GFunc) gst_event_unref, NULL); g_list_foreach (parse->priv->pending_events, (GFunc) gst_event_unref, NULL);
g_list_free (parse->priv->pending_events); g_list_free (parse->priv->pending_events);
parse->priv->pending_events = NULL; parse->priv->pending_events = NULL;
parse->priv->pending_segment = FALSE;
parse->priv->checked_media = FALSE;
} }
static void static void
@ -528,7 +531,6 @@ gst_base_parse_finalize (GObject * object)
NULL); NULL);
g_list_free (parse->priv->pending_events); g_list_free (parse->priv->pending_events);
parse->priv->pending_events = NULL; parse->priv->pending_events = NULL;
parse->priv->pending_segment = FALSE;
if (parse->priv->index) { if (parse->priv->index) {
gst_object_unref (parse->priv->index); gst_object_unref (parse->priv->index);
@ -828,6 +830,7 @@ gst_base_parse_reset (GstBaseParse * parse)
parse->priv->idx_byte_interval = 0; parse->priv->idx_byte_interval = 0;
parse->priv->exact_position = TRUE; parse->priv->exact_position = TRUE;
parse->priv->seen_keyframe = FALSE; parse->priv->seen_keyframe = FALSE;
parse->priv->checked_media = FALSE;
parse->priv->last_dts = GST_CLOCK_TIME_NONE; parse->priv->last_dts = GST_CLOCK_TIME_NONE;
parse->priv->last_pts = GST_CLOCK_TIME_NONE; parse->priv->last_pts = GST_CLOCK_TIME_NONE;
@ -837,7 +840,6 @@ gst_base_parse_reset (GstBaseParse * parse)
NULL); NULL);
g_list_free (parse->priv->pending_events); g_list_free (parse->priv->pending_events);
parse->priv->pending_events = NULL; parse->priv->pending_events = NULL;
parse->priv->pending_segment = FALSE;
if (parse->priv->cache) { if (parse->priv->cache) {
gst_buffer_unref (parse->priv->cache); gst_buffer_unref (parse->priv->cache);
@ -1094,13 +1096,11 @@ gst_base_parse_sink_event_default (GstBaseParse * parse, GstEvent * event)
applied_rate, format, start, stop, start); applied_rate, format, start, stop, start);
*/ */
/* save the segment for later, right before we push a new buffer so that
* the caps are fixed and the next linked element can receive
* the segment. */
parse->priv->pending_segment = TRUE;
ret = TRUE; ret = TRUE;
/* but finish the current segment */ /* save the segment for later, right before we push a new buffer so that
* the caps are fixed and the next linked element can receive
* the segment but finish the current segment */
GST_DEBUG_OBJECT (parse, "draining current segment"); GST_DEBUG_OBJECT (parse, "draining current segment");
if (in_segment->rate > 0.0) if (in_segment->rate > 0.0)
gst_base_parse_drain (parse); gst_base_parse_drain (parse);
@ -1856,6 +1856,7 @@ gst_base_parse_check_media (GstBaseParse * parse)
if (caps) if (caps)
gst_caps_unref (caps); gst_caps_unref (caps);
parse->priv->checked_media = TRUE;
GST_DEBUG_OBJECT (parse, "media is video: %d", parse->priv->is_video); GST_DEBUG_OBJECT (parse, "media is video: %d", parse->priv->is_video);
} }
@ -2022,7 +2023,6 @@ gst_base_parse_push_pending_events (GstBaseParse * parse)
gst_pad_push_event (parse->srcpad, GST_EVENT_CAST (l->data)); gst_pad_push_event (parse->srcpad, GST_EVENT_CAST (l->data));
} }
g_list_free (r); g_list_free (r);
parse->priv->pending_segment = FALSE;
} }
} }
@ -2192,7 +2192,7 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
if (!gst_pad_has_current_caps (parse->srcpad)) if (!gst_pad_has_current_caps (parse->srcpad))
goto no_caps; goto no_caps;
if (G_UNLIKELY (parse->priv->pending_segment)) { if (G_UNLIKELY (!parse->priv->checked_media)) {
/* have caps; check identity */ /* have caps; check identity */
gst_base_parse_check_media (parse); gst_base_parse_check_media (parse);
} }
@ -3319,7 +3319,6 @@ gst_base_parse_sink_activate_mode (GstPad * pad, GstObject * parent,
parse->priv->pending_events = parse->priv->pending_events =
g_list_prepend (parse->priv->pending_events, g_list_prepend (parse->priv->pending_events,
gst_event_new_segment (&parse->segment)); gst_event_new_segment (&parse->segment));
parse->priv->pending_segment = TRUE;
result = TRUE; result = TRUE;
} else { } else {
result = gst_pad_stop_task (pad); result = gst_pad_stop_task (pad);
@ -4211,7 +4210,6 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
/* store the newsegment event so it can be sent from the streaming thread. */ /* store the newsegment event so it can be sent from the streaming thread. */
/* This will be sent later in _loop() */ /* This will be sent later in _loop() */
parse->priv->pending_segment = TRUE;
segment_event = gst_event_new_segment (&parse->segment); segment_event = gst_event_new_segment (&parse->segment);
gst_event_set_seqnum (segment_event, seqnum); gst_event_set_seqnum (segment_event, seqnum);
parse->priv->pending_events = parse->priv->pending_events =