summaryrefslogtreecommitdiffstats
path: root/ext/mpeg2enc
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-01-16 14:14:58 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-01-16 14:14:58 +0000
commit0afd3d77334fac3654fa433abf3dab611ea95493 (patch)
tree4eceb4609c92648309858682a669c7fddd5682ab /ext/mpeg2enc
parenta9904a33bcd273aebd3000c793c2da51ed48d31a (diff)
downloadgst-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.am3
-rw-r--r--ext/mpeg2enc/gstmpeg2enc.cc3
-rw-r--r--ext/mpeg2enc/gstmpeg2encpicturereader.cc14
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);
}