diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-05-02 10:30:24 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2005-05-02 10:30:24 +0000 |
commit | 40327aec0fa6bd9d176d5552c2691a6b3c1313f6 (patch) | |
tree | b961200c7a856160537ea63798d61070ae34340d | |
parent | 8f5846b9e5db060ceadc9431f61730ffde88febc (diff) | |
download | gstreamer-plugins-base-40327aec0fa6bd9d176d5552c2691a6b3c1313f6.tar.gz |
ext/pango/gsttextoverlay.*: Handle EOS better (#302220).
Original commit message from CVS:
* ext/pango/gsttextoverlay.c: (gst_textoverlay_event),
(gst_textoverlay_loop), (gst_textoverlay_change_state),
(gst_textoverlay_init):
* ext/pango/gsttextoverlay.h:
Handle EOS better (#302220).
-rw-r--r-- | ext/pango/gsttextoverlay.c | 40 | ||||
-rw-r--r-- | ext/pango/gsttextoverlay.h | 1 |
2 files changed, 24 insertions, 17 deletions
diff --git a/ext/pango/gsttextoverlay.c b/ext/pango/gsttextoverlay.c index ef704ed64..e35004f73 100644 --- a/ext/pango/gsttextoverlay.c +++ b/ext/pango/gsttextoverlay.c @@ -303,6 +303,8 @@ gst_textoverlay_event (GstPad * pad, GstEvent * event) gst_data_unref (overlay->current_data); overlay->current_data = NULL; } + overlay->need_render = TRUE; + overlay->text_eos = FALSE; } return gst_pad_send_event (GST_PAD_PEER (overlay->video_sinkpad), event); @@ -486,17 +488,18 @@ gst_textoverlay_loop (GstElement * element) } gst_pad_event_default (overlay->video_sinkpad, event); if (type == GST_EVENT_EOS) { - /* EOS text stream */ - GstData *data = NULL; - - do { - if (data) - gst_data_unref (data); - data = gst_pad_pull (overlay->text_sinkpad); - } while (!GST_IS_EVENT (data) || - GST_EVENT_TYPE (data) == GST_EVENT_EOS); - gst_data_unref (data); - + if (!overlay->text_eos) { + /* EOS text stream */ + GstData *data = NULL; + + do { + if (data) + gst_data_unref (data); + data = gst_pad_pull (overlay->text_sinkpad); + } while (!GST_IS_EVENT (data) || + GST_EVENT_TYPE (data) == GST_EVENT_EOS); + gst_data_unref (data); + } return; } video_frame = NULL; @@ -522,7 +525,7 @@ gst_textoverlay_loop (GstElement * element) GST_DEBUG ("attempting to pull text data"); /* read all text buffers until we get one "in the future" */ - if (!GST_PAD_IS_USABLE (overlay->text_sinkpad)) { + if (!GST_PAD_IS_USABLE (overlay->text_sinkpad) || overlay->text_eos) { break; } do { @@ -535,13 +538,16 @@ gst_textoverlay_loop (GstElement * element) GST_DEBUG ("Received text data event of type %d", type); overlay->next_data = NULL; gst_event_unref (event); - if (type == GST_EVENT_EOS) + if (type == GST_EVENT_EOS) { + overlay->text_eos = TRUE; break; - else if (type == GST_EVENT_INTERRUPT) + } else if (type == GST_EVENT_INTERRUPT) return; } } while (!overlay->next_data); + if (!overlay->next_data) + break; if (PAST_END (overlay->next_data, now)) { GST_DEBUG ("Received %s is past end (%" GST_TIME_FORMAT " + %" GST_TIME_FORMAT " < %" GST_TIME_FORMAT ")", @@ -630,12 +636,11 @@ gst_textoverlay_change_state (GstElement * element) case GST_STATE_PLAYING_TO_PAUSED: break; case GST_STATE_PAUSED_TO_READY: + overlay->text_eos = FALSE; break; } - parent_class->change_state (element); - - return GST_STATE_SUCCESS; + return parent_class->change_state (element); } static void @@ -703,6 +708,7 @@ gst_textoverlay_init (GstTextOverlay * overlay) overlay->default_text = g_strdup (""); overlay->need_render = TRUE; + overlay->text_eos = FALSE; gst_element_set_loop_function (GST_ELEMENT (overlay), gst_textoverlay_loop); diff --git a/ext/pango/gsttextoverlay.h b/ext/pango/gsttextoverlay.h index 669f88d44..0ee982122 100644 --- a/ext/pango/gsttextoverlay.h +++ b/ext/pango/gsttextoverlay.h @@ -43,6 +43,7 @@ struct _GstTextOverlay { GstPad *video_sinkpad; GstPad *text_sinkpad; + gboolean text_eos; GstPad *srcpad; gint width; gint height; |