From 0afd3d77334fac3654fa433abf3dab611ea95493 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Fri, 16 Jan 2004 14:14:58 +0000 Subject: ext/mpeg2enc/: Bugfix with respect to EOS handling. Original commit message from CVS: 2004-01-16 Ronald Bultje * ext/mpeg2enc/Makefile.am: * ext/mpeg2enc/gstmpeg2enc.cc: * ext/mpeg2enc/gstmpeg2encpicturereader.cc: Bugfix with respect to EOS handling. --- ext/mpeg2enc/Makefile.am | 3 +-- ext/mpeg2enc/gstmpeg2enc.cc | 3 +++ ext/mpeg2enc/gstmpeg2encpicturereader.cc | 14 +++++++++++--- 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'ext/mpeg2enc') diff --git a/ext/mpeg2enc/Makefile.am b/ext/mpeg2enc/Makefile.am index da5d01d1..15174006 100644 --- a/ext/mpeg2enc/Makefile.am +++ b/ext/mpeg2enc/Makefile.am @@ -7,8 +7,7 @@ libgstmpeg2enc_la_SOURCES = \ gstmpeg2encstreamwriter.cc \ gstmpeg2encpicturereader.cc libgstmpeg2enc_la_CXXFLAGS = $(MPEG2ENC_CFLAGS) $(GST_CFLAGS) -libgstmpeg2enc_la_LIBADD = $(MPEG2ENC_LIBS) -libgstmpeg2enc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstmpeg2enc_la_LIBADD = $(MPEG2ENC_LIBS) $(GST_PLUGIN_LDFLAGS) noinst_HEADERS = \ gstmpeg2enc.hh \ diff --git a/ext/mpeg2enc/gstmpeg2enc.cc b/ext/mpeg2enc/gstmpeg2enc.cc index 902497ab..e3af35bb 100644 --- a/ext/mpeg2enc/gstmpeg2enc.cc +++ b/ext/mpeg2enc/gstmpeg2enc.cc @@ -205,6 +205,8 @@ gst_mpeg2enc_init (GstMpeg2enc *enc) GstElement *element = GST_ELEMENT (enc); GstElementClass *klass = GST_ELEMENT_GET_CLASS (element); + GST_FLAG_SET (element, GST_ELEMENT_EVENT_AWARE); + enc->sinkpad = gst_pad_new_from_template ( gst_element_class_get_pad_template (klass, "sink"), "sink"); gst_pad_set_link_function (enc->sinkpad, gst_mpeg2enc_sink_link); @@ -258,6 +260,7 @@ gst_mpeg2enc_loop (GstElement *element) } enc->encoder->encodePicture (); + gst_pad_event_default (enc->sinkpad, gst_event_new (GST_EVENT_EOS)); } static GstPadLinkReturn diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.cc b/ext/mpeg2enc/gstmpeg2encpicturereader.cc index 004495e7..57e4110b 100644 --- a/ext/mpeg2enc/gstmpeg2encpicturereader.cc +++ b/ext/mpeg2enc/gstmpeg2encpicturereader.cc @@ -79,7 +79,7 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams &strm) } /* - * Read a frame. + * Read a frame. Return true means EOS or error. */ bool @@ -89,19 +89,27 @@ GstMpeg2EncPictureReader::LoadFrame () GstBuffer *buf = NULL; gint i, x, y, n; guint8 *frame; + GstFormat fmt = GST_FORMAT_DEFAULT; + gint64 pos = 0, tot = 0; + gst_pad_query (GST_PAD_PEER (pad), GST_QUERY_POSITION, &fmt, &pos); + gst_pad_query (GST_PAD_PEER (pad), GST_QUERY_TOTAL, &fmt, &tot); do { if ((data = (GstData *) gst_pad_get_element_private (pad))) { gst_pad_set_element_private (pad, NULL); } else if (!(data = gst_pad_pull (pad))) { + gst_element_error (gst_pad_get_parent (pad), + "Failed to read data"); return true; } + if (GST_IS_EVENT (data)) { if (GST_EVENT_TYPE (data) == GST_EVENT_EOS) { - gst_pad_event_default (pad, GST_EVENT (data)); + gst_event_unref (GST_EVENT (data)); return true; + } else { + gst_pad_event_default (pad, GST_EVENT (data)); } - gst_pad_event_default (pad, GST_EVENT (data)); } else { buf = GST_BUFFER (data); } -- cgit v1.2.1