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.
This commit is contained in:
Ronald S. Bultje 2004-01-16 14:14:58 +00:00
parent a9904a33bc
commit 0afd3d7733
4 changed files with 22 additions and 5 deletions

View file

@ -1,3 +1,10 @@
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.
2004-01-16 Ronald Bultje <rbultje@ronald.bitfreak.net>
* ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect):

View file

@ -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 \

View file

@ -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

View file

@ -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);
}