summaryrefslogtreecommitdiffstats
path: root/ext/mpeg2enc/gstmpeg2encoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mpeg2enc/gstmpeg2encoder.cc')
-rw-r--r--ext/mpeg2enc/gstmpeg2encoder.cc95
1 files changed, 95 insertions, 0 deletions
diff --git a/ext/mpeg2enc/gstmpeg2encoder.cc b/ext/mpeg2enc/gstmpeg2encoder.cc
new file mode 100644
index 00000000..e0952db1
--- /dev/null
+++ b/ext/mpeg2enc/gstmpeg2encoder.cc
@@ -0,0 +1,95 @@
+/* GStreamer mpeg2enc (mjpegtools) wrapper
+ * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
+ *
+ * gstmpeg2encoder.cc: gstreamer/mpeg2enc encoder class
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <mpegconsts.h>
+#include <quantize.hh>
+#include <ratectl.hh>
+#include <seqencoder.hh>
+#include <mpeg2coder.hh>
+
+#include "gstmpeg2encoder.hh"
+
+/*
+ * Class init stuff.
+ */
+
+GstMpeg2Encoder::GstMpeg2Encoder (GstMpeg2EncOptions *options,
+ GstPad *sinkpad,
+ GstCaps *caps,
+ GstPad *srcpad) :
+ MPEG2Encoder (*options)
+{
+ MPEG2EncInVidParams strm;
+
+ /* I/O */
+ reader = new GstMpeg2EncPictureReader (sinkpad, caps, &parms);
+ reader->StreamPictureParams (strm);
+ if (options->SetFormatPresets (strm)) {
+ g_warning ("Eek! Format presets failed. This is really bad!");
+ }
+ writer = new GstMpeg2EncStreamWriter (srcpad, &parms);
+
+ /* encoding internals */
+ quantizer = new Quantizer (parms);
+ coder = new MPEG2Coder (parms, *writer);
+ bitrate_controller = new OnTheFlyRateCtl (parms);
+
+ /* sequencer */
+ seqencoder = new SeqEncoder (parms, *reader, *quantizer,
+ *writer, *coder, *bitrate_controller);
+
+ parms.Init (*options);
+ reader->Init ();
+ quantizer->Init ();
+}
+
+/*
+ * One image.
+ */
+
+void
+GstMpeg2Encoder::encodePicture ()
+{
+ /* hm, this is all... eek! */
+ seqencoder->Encode ();
+}
+
+/*
+ * Get current output format.
+ */
+
+GstCaps *
+GstMpeg2Encoder::getFormat ()
+{
+ gdouble fps = Y4M_RATIO_DBL (mpeg_framerate (options.frame_rate));
+
+ return GST_CAPS_NEW ("mpeg2enc_src",
+ "video/mpeg",
+ "systemstream", GST_PROPS_BOOLEAN (FALSE),
+ "mpegversion", GST_PROPS_INT (options.mpeg),
+ "width", GST_PROPS_INT (options.in_img_width),
+ "height", GST_PROPS_INT (options.in_img_height),
+ "framerate", GST_PROPS_FLOAT (fps));
+}