From 676eafc77c2799521925d54ba43b26df72c76b14 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Thu, 13 Jul 2006 11:06:45 +0000 Subject: Port mpeg2enc to 0.10 (#343184). Original commit message from CVS: Patch by: Mark Nauwelaerts * 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. --- ext/mpeg2enc/gstmpeg2encoder.cc | 78 ++++++++++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 16 deletions(-) (limited to 'ext/mpeg2enc/gstmpeg2encoder.cc') 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 + * (c) 2006 Mark Nauwelaerts * * gstmpeg2encoder.cc: gstreamer/mpeg2enc encoder class * @@ -29,49 +30,94 @@ #include #include +#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); } -- cgit v1.2.1