diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2004-01-16 14:14:58 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2004-01-16 14:14:58 +0000 |
commit | 0afd3d77334fac3654fa433abf3dab611ea95493 (patch) | |
tree | 4eceb4609c92648309858682a669c7fddd5682ab /ext/mpeg2enc | |
parent | a9904a33bcd273aebd3000c793c2da51ed48d31a (diff) | |
download | gst-plugins-bad-0afd3d77334fac3654fa433abf3dab611ea95493.tar.gz gst-plugins-bad-0afd3d77334fac3654fa433abf3dab611ea95493.tar.bz2 gst-plugins-bad-0afd3d77334fac3654fa433abf3dab611ea95493.zip |
ext/mpeg2enc/: Bugfix with respect to EOS handling.
Original commit message from CVS:
2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
* ext/mpeg2enc/Makefile.am:
* ext/mpeg2enc/gstmpeg2enc.cc:
* ext/mpeg2enc/gstmpeg2encpicturereader.cc:
Bugfix with respect to EOS handling.
Diffstat (limited to 'ext/mpeg2enc')
-rw-r--r-- | ext/mpeg2enc/Makefile.am | 3 | ||||
-rw-r--r-- | ext/mpeg2enc/gstmpeg2enc.cc | 3 | ||||
-rw-r--r-- | ext/mpeg2enc/gstmpeg2encpicturereader.cc | 14 |
3 files changed, 15 insertions, 5 deletions
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); } |