diff options
author | Mark Nauwelaerts <manauw@skynet.be> | 2006-07-13 11:06:45 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2006-07-13 11:06:45 +0000 |
commit | 676eafc77c2799521925d54ba43b26df72c76b14 (patch) | |
tree | de46f5bf8f22a83cd7a55fa1cdb26507986e22fd /ext/mpeg2enc/gstmpeg2encstreamwriter.cc | |
parent | 0e9af4401ec81f82b3b4d7f548a96b2585f1e0e1 (diff) | |
download | gst-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.cc | 67 |
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 */ |