From 39a338d51c31e3e77a4f00cbcf415c5822762ed0 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Thu, 1 Jan 2004 22:45:57 +0000 Subject: configure.ac: Fix configure check for mpeg2enc. We need 1.6.1.93 instead of 1.6.1.92, since the pkg-config file of 1.... Original commit message from CVS: 2004-01-01 Ronald Bultje * configure.ac: Fix configure check for mpeg2enc. We need 1.6.1.93 instead of 1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and it therefore uses the wrong include paths. Too bad... Note that 1.6.1.93 is not release yet. ;). Also add a check for mplex, which is now using the lib'ified mplex from mjpegtools, too. * ext/ffmpeg/gstffmpegcodecmap.c: Add codec_tag for 3ivx/xvid. For xvid, this should fix playback issues. I don't think ffmpeg handles 3ivx correctly, so this probably won't work. But it won't hurt either. * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect), (gst_ffmpegdec_chain): * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect), (gst_ffmpegenc_chain_audio): Fix memleak in audio encoding. Close codec if open fails, this calls the cleanup routines so we can re-use the context. * ext/mpeg2enc/gstmpeg2enc.cc: Fix pad template names/types, fix memory issue with getcaps(). * ext/mpeg2enc/gstmpeg2encoder.cc: * ext/mpeg2enc/gstmpeg2encoder.hh: Fix compile issue with new caps system (const thingy). * ext/mpeg2enc/gstmpeg2encpicturereader.cc: * ext/mpeg2enc/gstmpeg2encpicturereader.hh: We read a first frame right on initing, so that we have a caps when we init the output. This caps is cached in padprivate and read as first frame. * ext/mplex/Makefile.am: * ext/mplex/gstmplex.cc: * ext/mplex/gstmplex.h: * ext/mplex/gstmplex.hh: * ext/mplex/gstmplexibitstream.cc: * ext/mplex/gstmplexibitstream.hh: * ext/mplex/gstmplexjob.cc: * ext/mplex/gstmplexjob.hh: * ext/mplex/gstmplexoutputstream.cc: * ext/mplex/gstmplexoutputstream.hh: We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin had issues, didn't do capsnego, supported only a subset of the mplex features and required a mplex fork in our local CVS. Plus that it worked agaist a very old mplex version. Rewriting was faster than updating it. * gst-libs/ext/Makefile.am: * gst-libs/ext/mplex/INSTRUCT: * gst-libs/ext/mplex/Makefile.am: * gst-libs/ext/mplex/README: * gst-libs/ext/mplex/TODO: * gst-libs/ext/mplex/ac3strm_in.cc: * gst-libs/ext/mplex/audiostrm.hh: * gst-libs/ext/mplex/audiostrm_out.cc: * gst-libs/ext/mplex/aunit.hh: * gst-libs/ext/mplex/bits.cc: * gst-libs/ext/mplex/bits.hh: * gst-libs/ext/mplex/buffer.cc: * gst-libs/ext/mplex/buffer.hh: * gst-libs/ext/mplex/fastintfns.h: * gst-libs/ext/mplex/format_codes.h: * gst-libs/ext/mplex/inputstrm.cc: * gst-libs/ext/mplex/inputstrm.hh: * gst-libs/ext/mplex/lpcmstrm_in.cc: * gst-libs/ext/mplex/mjpeg_logging.cc: * gst-libs/ext/mplex/mjpeg_logging.h: * gst-libs/ext/mplex/mjpeg_types.h: * gst-libs/ext/mplex/mpastrm_in.cc: * gst-libs/ext/mplex/mpegconsts.cc: * gst-libs/ext/mplex/mpegconsts.h: * gst-libs/ext/mplex/mplexconsts.hh: * gst-libs/ext/mplex/multplex.cc: * gst-libs/ext/mplex/outputstream.hh: * gst-libs/ext/mplex/padstrm.cc: * gst-libs/ext/mplex/padstrm.hh: * gst-libs/ext/mplex/stillsstream.cc: * gst-libs/ext/mplex/stillsstream.hh: * gst-libs/ext/mplex/systems.cc: * gst-libs/ext/mplex/systems.hh: * gst-libs/ext/mplex/vector.cc: * gst-libs/ext/mplex/vector.hh: * gst-libs/ext/mplex/videostrm.hh: * gst-libs/ext/mplex/videostrm_in.cc: * gst-libs/ext/mplex/videostrm_out.cc: * gst-libs/ext/mplex/yuv4mpeg.cc: * gst-libs/ext/mplex/yuv4mpeg.h: * gst-libs/ext/mplex/yuv4mpeg_intern.h: * gst-libs/ext/mplex/yuv4mpeg_ratio.cc: We don't fork mjpegtools' mplex in our CVS anymore. * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps), (gst_avi_demux_add_stream): * gst/avi/gstavidemux.h: Add getcaps() function for proper caps nego. This makes some parts of AVI playback/reading work. * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect): Resize window on new capsnego. This is probably wrong, but I'm still committing it because with current capsnego, the first successfull capsnego is auto-fixated, therefore rounded down to the lowest values in the caps. this results in a 16x16 XWindow that is not reized when real capsnego finishes. Dave, I see more cases of this, do you know a proper solution? * tools/gst-launch-ext.in: Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline. --- ChangeLog | 102 ++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 59 ++++++++++++++++++++++++++-- gst/avi/gstavidemux.c | 13 +++++- gst/avi/gstavidemux.h | 1 + tools/gst-launch-ext.in | 2 +- 5 files changed, 171 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7d2996e5..156f7af8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,105 @@ +2004-01-01 Ronald Bultje + + * configure.ac: + Fix configure check for mpeg2enc. We need 1.6.1.93 instead of + 1.6.1.92, since the pkg-config file of 1.6.1.92 is borked and + it therefore uses the wrong include paths. Too bad... Note + that 1.6.1.93 is not release yet. ;). + Also add a check for mplex, which is now using the lib'ified + mplex from mjpegtools, too. + * ext/ffmpeg/gstffmpegcodecmap.c: + Add codec_tag for 3ivx/xvid. For xvid, this should fix playback + issues. I don't think ffmpeg handles 3ivx correctly, so this + probably won't work. But it won't hurt either. + * ext/ffmpeg/gstffmpegdec.c: (gst_ffmpegdec_connect), + (gst_ffmpegdec_chain): + * ext/ffmpeg/gstffmpegenc.c: (gst_ffmpegenc_connect), + (gst_ffmpegenc_chain_audio): + Fix memleak in audio encoding. Close codec if open fails, this + calls the cleanup routines so we can re-use the context. + * ext/mpeg2enc/gstmpeg2enc.cc: + Fix pad template names/types, fix memory issue with getcaps(). + * ext/mpeg2enc/gstmpeg2encoder.cc: + * ext/mpeg2enc/gstmpeg2encoder.hh: + Fix compile issue with new caps system (const thingy). + * ext/mpeg2enc/gstmpeg2encpicturereader.cc: + * ext/mpeg2enc/gstmpeg2encpicturereader.hh: + We read a first frame right on initing, so that we have a caps + when we init the output. This caps is cached in padprivate and + read as first frame. + * ext/mplex/Makefile.am: + * ext/mplex/gstmplex.cc: + * ext/mplex/gstmplex.h: + * ext/mplex/gstmplex.hh: + * ext/mplex/gstmplexibitstream.cc: + * ext/mplex/gstmplexibitstream.hh: + * ext/mplex/gstmplexjob.cc: + * ext/mplex/gstmplexjob.hh: + * ext/mplex/gstmplexoutputstream.cc: + * ext/mplex/gstmplexoutputstream.hh: + We wrap mjpegtools mplex. So I rewrote the plugin. The old plugin + had issues, didn't do capsnego, supported only a subset of the + mplex features and required a mplex fork in our local CVS. Plus + that it worked agaist a very old mplex version. Rewriting was + faster than updating it. + * gst-libs/ext/Makefile.am: + * gst-libs/ext/mplex/INSTRUCT: + * gst-libs/ext/mplex/Makefile.am: + * gst-libs/ext/mplex/README: + * gst-libs/ext/mplex/TODO: + * gst-libs/ext/mplex/ac3strm_in.cc: + * gst-libs/ext/mplex/audiostrm.hh: + * gst-libs/ext/mplex/audiostrm_out.cc: + * gst-libs/ext/mplex/aunit.hh: + * gst-libs/ext/mplex/bits.cc: + * gst-libs/ext/mplex/bits.hh: + * gst-libs/ext/mplex/buffer.cc: + * gst-libs/ext/mplex/buffer.hh: + * gst-libs/ext/mplex/fastintfns.h: + * gst-libs/ext/mplex/format_codes.h: + * gst-libs/ext/mplex/inputstrm.cc: + * gst-libs/ext/mplex/inputstrm.hh: + * gst-libs/ext/mplex/lpcmstrm_in.cc: + * gst-libs/ext/mplex/mjpeg_logging.cc: + * gst-libs/ext/mplex/mjpeg_logging.h: + * gst-libs/ext/mplex/mjpeg_types.h: + * gst-libs/ext/mplex/mpastrm_in.cc: + * gst-libs/ext/mplex/mpegconsts.cc: + * gst-libs/ext/mplex/mpegconsts.h: + * gst-libs/ext/mplex/mplexconsts.hh: + * gst-libs/ext/mplex/multplex.cc: + * gst-libs/ext/mplex/outputstream.hh: + * gst-libs/ext/mplex/padstrm.cc: + * gst-libs/ext/mplex/padstrm.hh: + * gst-libs/ext/mplex/stillsstream.cc: + * gst-libs/ext/mplex/stillsstream.hh: + * gst-libs/ext/mplex/systems.cc: + * gst-libs/ext/mplex/systems.hh: + * gst-libs/ext/mplex/vector.cc: + * gst-libs/ext/mplex/vector.hh: + * gst-libs/ext/mplex/videostrm.hh: + * gst-libs/ext/mplex/videostrm_in.cc: + * gst-libs/ext/mplex/videostrm_out.cc: + * gst-libs/ext/mplex/yuv4mpeg.cc: + * gst-libs/ext/mplex/yuv4mpeg.h: + * gst-libs/ext/mplex/yuv4mpeg_intern.h: + * gst-libs/ext/mplex/yuv4mpeg_ratio.cc: + We don't fork mjpegtools' mplex in our CVS anymore. + * gst/avi/gstavidemux.c: (gst_avi_demux_src_getcaps), + (gst_avi_demux_add_stream): + * gst/avi/gstavidemux.h: + Add getcaps() function for proper caps nego. This makes some + parts of AVI playback/reading work. + * sys/ximage/ximagesink.c: (gst_ximagesink_sinkconnect): + Resize window on new capsnego. This is probably wrong, but + I'm still committing it because with current capsnego, the + first successfull capsnego is auto-fixated, therefore rounded + down to the lowest values in the caps. this results in a 16x16 + XWindow that is not reized when real capsnego finishes. + Dave, I see more cases of this, do you know a proper solution? + * tools/gst-launch-ext.in: + Fix MPEG-4 AAC (Apple iPod/iTunes) file commandline. + 2003-12-31 David Schleef * gst/tcp/gsttcpsrc.c: (gst_tcpsrc_get): diff --git a/configure.ac b/configure.ac index 84157620..e096694f 100644 --- a/configure.ac +++ b/configure.ac @@ -1084,7 +1084,7 @@ GST_CHECK_FEATURE(MPEG2ENC, [mpeg2enc], mpeg2enc, [ dnl libmpeg2enc was first included in mjpegtools-1.6.2-rc3 (1.6.1.92) dnl since many distros include mjpegtools specifically without mplex dnl and mpeg2enc, we check for mpeg2enc on its own, too. - PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.92, [ + PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.93, [ dnl switch over to c++ to test things AC_LANG_CPLUSPLUS OLD_CPPFLAGS="$CPPFLAGS" @@ -1123,7 +1123,61 @@ main (int argc, dnl *** mplex *** translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true) -GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [HAVE_MPLEX=$HAVE_CXX]) +GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [ + HAVE_MPLEX="no" + dnl we require a c++ compiler for this one + if [ test x$HAVE_CXX = xyes ]; then + dnl libmplex was first included in mjpegtools-1.6.2-rc4 (1.6.1.93) + dnl since many distros include mjpegtools specifically without mplex + dnl and mpeg2enc, we check for mplex on its own, too. + PKG_CHECK_MODULES(MPLEX, mjpegtools >= 1.6.1.93, [ + dnl switch over to c++ to test things + AC_LANG_CPLUSPLUS + OLD_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $MPLEX_CFLAGS" + AC_CHECK_HEADER(interact.hpp, [ + MPLEX_LIBS="$MPLEX_LIBS -lmplex2 -lm" + OLD_LIBS="$LIBS" + LIBS="$LIBS $MPLEX_LIBS" + AC_MSG_CHECKING([for valid mplex objects]) + AC_TRY_RUN([ +#include +#include +#include + +int +main (int argc, + char *argv[]) +{ + class TestOutputStream : public OutputStream { + public: + TestOutputStream () : OutputStream () { } + void Write (uint8_t *a, unsigned int b) { } + void NextSegment () { } + off_t SegmentSize () { } + void Close () { } + int Open () { } + }; + MultiplexJob *job = new MultiplexJob (); + vector inputs; + job->SetupInputStreams (inputs); + TestOutputStream *out = new TestOutputStream (); + Multiplexor mux (*job, *out); + return 0; +} + ],[ + HAVE_MPLEX="yes" + AC_SUBST(MPLEX_CFLAGS) + AC_SUBST(MPLEX_LIBS) + AC_MSG_RESULT(yes) + ], AC_MSG_RESULT(no)) + LIBS="$OLD_LIBS" + ]) + CPPFLAGS="$OLD_CPPFLAGS" + AC_LANG_C + ], HAVE_MPLEX="no") + fi +]) dnl *** pango *** translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true) @@ -1588,7 +1642,6 @@ gst-libs/gst/xoverlay/Makefile gst-libs/gst/xwindowlistener/Makefile gst-libs/ext/Makefile gst-libs/ext/ffmpeg/Makefile -gst-libs/ext/mplex/Makefile examples/dynparams/Makefile examples/capsfilter/Makefile examples/seeking/Makefile diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 04c5c8c9..2f4aebf7 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -497,6 +497,14 @@ gst_avi_demux_handle_src_query (GstPad *pad, return res; } +static GstCaps * +gst_avi_demux_src_getcaps (GstPad *pad) +{ + avi_stream_context *stream = gst_pad_get_element_private (pad); + + return gst_caps_copy (stream->caps); +} + static gint32 gst_avi_demux_sync_streams (GstAviDemux *avi, guint64 time) @@ -884,8 +892,6 @@ gst_avi_demux_add_stream (GstAviDemux *avi) /* set proper settings and add it */ pad = gst_pad_new_from_template (templ, padname); g_free (padname); - if (caps != NULL) - gst_pad_try_set_caps (pad, caps); gst_pad_set_formats_function (pad, gst_avi_demux_get_src_formats); gst_pad_set_event_mask_function (pad, gst_avi_demux_get_event_mask); @@ -893,8 +899,10 @@ gst_avi_demux_add_stream (GstAviDemux *avi) gst_pad_set_query_type_function (pad, gst_avi_demux_get_src_query_types); gst_pad_set_query_function (pad, gst_avi_demux_handle_src_query); gst_pad_set_convert_function (pad, gst_avi_demux_src_convert); + gst_pad_set_getcaps_function (pad, gst_avi_demux_src_getcaps); stream = &avi->stream[avi->num_streams]; + stream->caps = caps ? caps : gst_caps_new_empty (); stream->pad = pad; stream->strh = strh; stream->num = avi->num_streams; @@ -908,6 +916,7 @@ gst_avi_demux_add_stream (GstAviDemux *avi) gst_pad_set_element_private (pad, stream); avi->num_streams++; + /* auto-negotiates */ gst_element_add_pad (GST_ELEMENT (avi), pad); return TRUE; diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h index 15eec1f3..d94433ae 100644 --- a/gst/avi/gstavidemux.h +++ b/gst/avi/gstavidemux.h @@ -61,6 +61,7 @@ typedef struct { /* pad, strh */ GstPad *pad; + GstCaps *caps; gst_riff_strh *strh; /* current position (byte, frame, time) */ diff --git a/tools/gst-launch-ext.in b/tools/gst-launch-ext.in index 643ba877..add6e032 100755 --- a/tools/gst-launch-ext.in +++ b/tools/gst-launch-ext.in @@ -109,7 +109,7 @@ read_config ($0); "fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}", "m1v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }", "m2v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }", - "m4a", "qtdemux ! { queue .audio_00! faad ! $cfg{AUDIOSINK} }", + "m4a", "qtdemux .audio_00 ! { queue ! faad ! $cfg{AUDIOSINK} }", "mod", "modplug ! $cfg{AUDIOSINK}", "mp2", "mad ! $cfg{AUDIOSINK}", "mp3", "mad ! $cfg{AUDIOSINK}", -- cgit