summaryrefslogtreecommitdiffstats
path: root/ext/mpeg2enc/gstmpeg2encoder.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/gstmpeg2encoder.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/gstmpeg2encoder.cc')
-rw-r--r--ext/mpeg2enc/gstmpeg2encoder.cc78
1 files changed, 62 insertions, 16 deletions
diff --git a/ext/mpeg2enc/gstmpeg2encoder.cc b/ext/mpeg2enc/gstmpeg2encoder.cc
index 5a77b58b..866f63d8 100644
--- a/ext/mpeg2enc/gstmpeg2encoder.cc
+++ b/ext/mpeg2enc/gstmpeg2encoder.cc
@@ -1,5 +1,6 @@
/* GStreamer mpeg2enc (mjpegtools) wrapper
* (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * (c) 2006 Mark Nauwelaerts <manauw@skynet.be>
*
* gstmpeg2encoder.cc: gstreamer/mpeg2enc encoder class
*
@@ -29,49 +30,94 @@
#include <seqencoder.hh>
#include <mpeg2coder.hh>
+#include "gstmpeg2enc.hh"
#include "gstmpeg2encoder.hh"
/*
* Class init stuff.
*/
-GstMpeg2Encoder::GstMpeg2Encoder (GstMpeg2EncOptions * options,
- GstPad * sinkpad, const GstCaps * caps, GstPad * srcpad):
+GstMpeg2Encoder::GstMpeg2Encoder (GstMpeg2EncOptions * options, GstElement * in_element, GstCaps * in_caps):
MPEG2Encoder (*options)
{
- MPEG2EncInVidParams strm;
+ element = in_element;
+ gst_object_ref (element);
+ caps = in_caps;
+ gst_caps_ref (in_caps);
+ init_done = FALSE;
+}
+
+GstMpeg2Encoder::~GstMpeg2Encoder ()
+{
+ gst_caps_unref (caps);
+ gst_object_unref (element);
+}
+
+gboolean GstMpeg2Encoder::setup ()
+{
+ MPEG2EncInVidParams
+ strm;
+ GstMpeg2enc *
+ enc;
+
+ enc = GST_MPEG2ENC (element);
/* I/O */
- reader = new GstMpeg2EncPictureReader (sinkpad, caps, &parms);
+ reader = new GstMpeg2EncPictureReader (element, caps, &parms);
reader->StreamPictureParams (strm);
- if (options->SetFormatPresets (strm)) {
- g_warning ("Eek! Format presets failed. This is really bad!");
+#ifdef GST_MJPEGTOOLS_18x
+ /* chain thread caters for reading, do not need another thread for this */
+ options.allow_parallel_read = FALSE;
+#endif
+ if (options.SetFormatPresets (strm)) {
+ return FALSE;
}
- writer = new GstMpeg2EncStreamWriter (srcpad, &parms);
+ writer = new GstMpeg2EncStreamWriter (enc->srcpad, &parms);
/* encoding internals */
quantizer = new Quantizer (parms);
- coder = new MPEG2Coder (parms, *writer);
bitrate_controller = new OnTheFlyRateCtl (parms);
-
+#ifdef GST_MJPEGTOOLS_18x
+ /* sequencer */
+ seqencoder = new SeqEncoder (parms, *reader, *quantizer,
+ *writer, *bitrate_controller);
+#else
+ coder = new MPEG2Coder (parms, *writer);
/* sequencer */
seqencoder = new SeqEncoder (parms, *reader, *quantizer,
*writer, *coder, *bitrate_controller);
+#endif
+
+ return TRUE;
+}
- parms.Init (*options);
- reader->Init ();
- quantizer->Init ();
+void
+GstMpeg2Encoder::init ()
+{
+ if (!init_done) {
+ parms.Init (options);
+ reader->Init ();
+ quantizer->Init ();
+#ifdef GST_MJPEGTOOLS_18x
+ seqencoder->Init ();
+#endif
+ init_done = TRUE;
+ }
}
/*
- * One image.
+ * Process all input provided by the reader until it signals eos.
*/
void
-GstMpeg2Encoder::encodePicture ()
+GstMpeg2Encoder::encode ()
{
/* hm, this is all... eek! */
+#ifdef GST_MJPEGTOOLS_18x
+ seqencoder->EncodeStream ();
+#else
seqencoder->Encode ();
+#endif
}
/*
@@ -81,12 +127,12 @@ GstMpeg2Encoder::encodePicture ()
GstCaps *
GstMpeg2Encoder::getFormat ()
{
- gdouble fps = Y4M_RATIO_DBL (mpeg_framerate (options.frame_rate));
+ y4m_ratio_t fps = mpeg_framerate (options.frame_rate);
return gst_caps_new_simple ("video/mpeg",
"systemstream", G_TYPE_BOOLEAN, FALSE,
"mpegversion", G_TYPE_INT, options.mpeg,
"width", G_TYPE_INT, options.in_img_width,
"height", G_TYPE_INT, options.in_img_height,
- "framerate", G_TYPE_DOUBLE, fps, NULL);
+ "framerate", GST_TYPE_FRACTION, fps.n, fps.d, NULL);
}