summaryrefslogtreecommitdiffstats
path: root/ext/mpeg2enc/gstmpeg2encstreamwriter.cc
diff options
context:
space:
mode:
authorMark Nauwelaerts <manauw@skynet.be>2006-07-13 11:06:45 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-07-13 11:06:45 +0000
commit676eafc77c2799521925d54ba43b26df72c76b14 (patch)
treede46f5bf8f22a83cd7a55fa1cdb26507986e22fd /ext/mpeg2enc/gstmpeg2encstreamwriter.cc
parent0e9af4401ec81f82b3b4d7f548a96b2585f1e0e1 (diff)
downloadgst-plugins-bad-676eafc77c2799521925d54ba43b26df72c76b14.tar.gz
gst-plugins-bad-676eafc77c2799521925d54ba43b26df72c76b14.tar.bz2
gst-plugins-bad-676eafc77c2799521925d54ba43b26df72c76b14.zip
Port mpeg2enc to 0.10 (#343184).
Original commit message from CVS: Patch by: Mark Nauwelaerts <manauw at skynet be> * configure.ac: * ext/Makefile.am: * ext/mpeg2enc/Makefile.am: * ext/mpeg2enc/gstmpeg2enc.cc: * ext/mpeg2enc/gstmpeg2enc.hh: * ext/mpeg2enc/gstmpeg2encoder.cc: * ext/mpeg2enc/gstmpeg2encoder.hh: * ext/mpeg2enc/gstmpeg2encoptions.cc: * ext/mpeg2enc/gstmpeg2encpicturereader.cc: * ext/mpeg2enc/gstmpeg2encpicturereader.hh: * ext/mpeg2enc/gstmpeg2encstreamwriter.cc: * ext/mpeg2enc/gstmpeg2encstreamwriter.hh: Port mpeg2enc to 0.10 (#343184). * tests/check/Makefile.am: * tests/check/elements/.cvsignore: * tests/check/elements/mpeg2enc.c: Add unit test for mpeg2enc. * tests/icles/.cvsignore: Ignore pitch-test.
Diffstat (limited to 'ext/mpeg2enc/gstmpeg2encstreamwriter.cc')
-rw-r--r--ext/mpeg2enc/gstmpeg2encstreamwriter.cc67
1 files changed, 65 insertions, 2 deletions
diff --git a/ext/mpeg2enc/gstmpeg2encstreamwriter.cc b/ext/mpeg2enc/gstmpeg2encstreamwriter.cc
index 39c705ac..ee3fefd6 100644
--- a/ext/mpeg2enc/gstmpeg2encstreamwriter.cc
+++ b/ext/mpeg2enc/gstmpeg2encstreamwriter.cc
@@ -1,5 +1,6 @@
/* GStreamer mpeg2enc (mjpegtools) wrapper
* (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * (c) 2006 Mark Nauwelaerts <manauw@skynet.be>
*
* gstmpeg2encstreamwriter.cc: GStreamer/mpeg2enc output wrapper
*
@@ -23,7 +24,55 @@
#include "config.h"
#endif
+#include "gstmpeg2enc.hh"
#include "gstmpeg2encstreamwriter.hh"
+#include <string.h>
+
+#ifdef GST_MJPEGTOOLS_18x
+
+/*
+ * Class init stuff.
+ */
+
+GstMpeg2EncStreamWriter::GstMpeg2EncStreamWriter (GstPad * in_pad,
+ EncoderParams * params)
+{
+ pad = in_pad;
+ gst_object_ref (pad);
+ buf = NULL;
+}
+
+GstMpeg2EncStreamWriter::~GstMpeg2EncStreamWriter ()
+{
+ gst_object_unref (pad);
+}
+
+void
+GstMpeg2EncStreamWriter::WriteOutBufferUpto (const guint8 * buffer,
+ const guint32 flush_upto)
+{
+ GstBuffer *buf;
+ GstMpeg2enc *enc = GST_MPEG2ENC (GST_PAD_PARENT (pad));
+
+ buf = gst_buffer_new_and_alloc (flush_upto);
+
+ memcpy (GST_BUFFER_DATA (buf), buffer, flush_upto);
+ flushed += flush_upto;
+
+ /* this should not block anything else (e.g. chain), but if it does,
+ * it's ok as mpeg2enc is not really a loop-based element, but push-based */
+ GST_MPEG2ENC_MUTEX_LOCK (enc);
+ gst_buffer_set_caps (buf, GST_PAD_CAPS (pad));
+ enc->srcresult = gst_pad_push (pad, buf);
+ GST_MPEG2ENC_MUTEX_UNLOCK (enc);
+}
+
+guint64 GstMpeg2EncStreamWriter::BitCount ()
+{
+ return flushed * 8ll;
+}
+
+#else
#define BUFSIZE (128*1024)
@@ -35,9 +84,15 @@ GstMpeg2EncStreamWriter::GstMpeg2EncStreamWriter (GstPad * in_pad, EncoderParams
ElemStrmWriter (*params)
{
pad = in_pad;
+ gst_object_ref (pad);
buf = NULL;
}
+GstMpeg2EncStreamWriter::~GstMpeg2EncStreamWriter ()
+{
+ gst_object_unref (pad);
+}
+
/*
* Output functions.
*/
@@ -66,7 +121,7 @@ GstMpeg2EncStreamWriter::PutBits (guint32 val, gint n)
outcnt = 8;
bytecnt++;
- if (GST_BUFFER_SIZE (buf) >= GST_BUFFER_MAXSIZE (buf))
+ if (GST_BUFFER_SIZE (buf) >= BUFSIZE)
FrameFlush ();
}
@@ -85,8 +140,15 @@ GstMpeg2EncStreamWriter::FrameBegin ()
void
GstMpeg2EncStreamWriter::FrameFlush ()
{
+ GstMpeg2enc *enc = GST_MPEG2ENC (GST_PAD_PARENT (pad));
+
if (buf) {
- gst_pad_push (pad, GST_DATA (buf));
+ /* this should not block anything else (e.g. chain), but if it does,
+ * it's ok as mpeg2enc is not really a loop-based element, but push-based */
+ GST_MPEG2ENC_MUTEX_LOCK (enc);
+ gst_buffer_set_caps (buf, GST_PAD_CAPS (pad));
+ enc->srcresult = gst_pad_push (pad, buf);
+ GST_MPEG2ENC_MUTEX_UNLOCK (enc);
buf = NULL;
}
}
@@ -95,3 +157,4 @@ void
GstMpeg2EncStreamWriter::FrameDiscard ()
{
}
+#endif /* GST_MJPEGTOOLS_18x */