diff --git a/ChangeLog b/ChangeLog index 84a47891a7..88f2535fd6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-01-27 Sebastian Dröge + + Based on a patch by: + Hans de Goede + + * configure.ac: + * ext/mpeg2enc/gstmpeg2encoder.cc: + * ext/mpeg2enc/gstmpeg2encpicturereader.cc: + * ext/mpeg2enc/gstmpeg2encpicturereader.hh: + Add support for building against mjpegtools 1.9 while keeping + compatiblity with older versions. + 2008-01-27 Sebastian Dröge * ext/soundtouch/gstbpmdetect.cc: diff --git a/configure.ac b/configure.ac index f2477cef79..ce8e3a9dcd 100644 --- a/configure.ac +++ b/configure.ac @@ -676,7 +676,14 @@ AC_SUBST(LIBMMS_LIBS) dnl *** mjpegtools version info *** dnl some may prefer older version (given quirks above) dnl hm, no version info seems available within mjpegtools headers -PKG_CHECK_EXISTS(mjpegtools >= 1.8.0 mjpegtools < 1.9.0, [ + +PKG_CHECK_EXISTS(mjpegtools >= 1.9.0 mjpegtools < 1.10.0, [ + AC_DEFINE(GST_MJPEGTOOLS_19x, 1, [mjpegtools >= 1.9.0 is used]) + have_mpjegtools_19x=yes + ], [ + have_mpjegtools_19x=no]) + +PKG_CHECK_EXISTS(mjpegtools >= 1.8.0, [ AC_DEFINE(GST_MJPEGTOOLS_18x, 1, [mjpegtools >= 1.8.0 is used]) have_mpjegtools_18x=yes ], [ @@ -732,7 +739,10 @@ AG_GST_CHECK_FEATURE(MPEG2ENC, [mpeg2enc], mpeg2enc, [ ], [ mpeg2enc_headers_ok=no ]) + else + mpeg2enc_headers_ok=yes fi + if test "x$mpeg2enc_headers_ok" = "xyes"; then HAVE_MPEG2ENC="yes" fi diff --git a/ext/mpeg2enc/gstmpeg2encoder.cc b/ext/mpeg2enc/gstmpeg2encoder.cc index 866f63d8d7..c8d1b3e0f6 100644 --- a/ext/mpeg2enc/gstmpeg2encoder.cc +++ b/ext/mpeg2enc/gstmpeg2encoder.cc @@ -26,7 +26,11 @@ #include #include +#ifdef GST_MJPEGTOOLS_19x +#include +#else #include +#endif #include #include @@ -53,19 +57,18 @@ GstMpeg2Encoder::~GstMpeg2Encoder () gst_object_unref (element); } -gboolean GstMpeg2Encoder::setup () +gboolean +GstMpeg2Encoder::setup () { - MPEG2EncInVidParams - strm; - GstMpeg2enc * - enc; + MPEG2EncInVidParams strm; + GstMpeg2enc *enc; enc = GST_MPEG2ENC (element); /* I/O */ reader = new GstMpeg2EncPictureReader (element, caps, &parms); reader->StreamPictureParams (strm); -#ifdef GST_MJPEGTOOLS_18x +#if defined(GST_MJPEGTOOLS_18x) && !defined(GST_MJPEGTOOLS_19x) /* chain thread caters for reading, do not need another thread for this */ options.allow_parallel_read = FALSE; #endif @@ -76,11 +79,22 @@ gboolean GstMpeg2Encoder::setup () /* encoding internals */ quantizer = new Quantizer (parms); +#ifdef GST_MJPEGTOOLS_19x + pass1ratectl = new OnTheFlyPass1 (parms); + pass2ratectl = new OnTheFlyPass2 (parms); +#else bitrate_controller = new OnTheFlyRateCtl (parms); +#endif + #ifdef GST_MJPEGTOOLS_18x /* sequencer */ +# ifdef GST_MJPEGTOOLS_19x + seqencoder = new SeqEncoder (parms, *reader, *quantizer, + *writer, *pass1ratectl, *pass2ratectl); +# else seqencoder = new SeqEncoder (parms, *reader, *quantizer, *writer, *bitrate_controller); +# endif #else coder = new MPEG2Coder (parms, *writer); /* sequencer */ diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.cc b/ext/mpeg2enc/gstmpeg2encpicturereader.cc index 9bc59edf7f..57f95ccdd9 100644 --- a/ext/mpeg2enc/gstmpeg2encpicturereader.cc +++ b/ext/mpeg2enc/gstmpeg2encpicturereader.cc @@ -25,6 +25,10 @@ #include +#ifdef GST_MJPEGTOOLS_19x +#include +#endif + #include "gstmpeg2enc.hh" #include "gstmpeg2encpicturereader.hh" @@ -79,9 +83,17 @@ GstMpeg2EncPictureReader::StreamPictureParams (MPEG2EncInVidParams & strm) */ bool -GstMpeg2EncPictureReader::LoadFrame () +#ifdef GST_MJPEGTOOLS_19x + GstMpeg2EncPictureReader::LoadFrame (ImagePlanes & image) +#else + GstMpeg2EncPictureReader::LoadFrame () +#endif { - gint i, x, y, n; + +#ifndef GST_MJPEGTOOLS_19x + gint n; +#endif + gint i, x, y; guint8 *frame; GstMpeg2enc *enc; @@ -100,23 +112,39 @@ GstMpeg2EncPictureReader::LoadFrame () } frame = GST_BUFFER_DATA (enc->buffer); +#ifndef GST_MJPEGTOOLS_19x n = frames_read % input_imgs_buf_size; +#endif x = encparams.horizontal_size; y = encparams.vertical_size; for (i = 0; i < y; i++) { +#ifdef GST_MJPEGTOOLS_19x + memcpy (image.Plane (0) + i * encparams.phy_width, frame, x); +#else memcpy (input_imgs_buf[n][0] + i * encparams.phy_width, frame, x); +#endif frame += x; } +#ifndef GST_MJPEGTOOLS_19x lum_mean[n] = LumMean (input_imgs_buf[n][0]); +#endif x >>= 1; y >>= 1; for (i = 0; i < y; i++) { +#ifdef GST_MJPEGTOOLS_19x + memcpy (image.Plane (1) + i * encparams.phy_chrom_width, frame, x); +#else memcpy (input_imgs_buf[n][1] + i * encparams.phy_chrom_width, frame, x); +#endif frame += x; } for (i = 0; i < y; i++) { +#ifdef GST_MJPEGTOOLS_19x + memcpy (image.Plane (2) + i * encparams.phy_chrom_width, frame, x); +#else memcpy (input_imgs_buf[n][2] + i * encparams.phy_chrom_width, frame, x); +#endif frame += x; } gst_buffer_unref (enc->buffer); diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.hh b/ext/mpeg2enc/gstmpeg2encpicturereader.hh index 7f6c9c3c33..89fb58d8e5 100644 --- a/ext/mpeg2enc/gstmpeg2encpicturereader.hh +++ b/ext/mpeg2enc/gstmpeg2encpicturereader.hh @@ -37,7 +37,11 @@ public: protected: /* read a frame */ +#ifdef GST_MJPEGTOOLS_19x + bool LoadFrame (ImagePlanes &image); +#else bool LoadFrame (); +#endif private: GstElement *element;