summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog102
-rw-r--r--configure.ac59
-rw-r--r--gst/avi/gstavidemux.c13
-rw-r--r--gst/avi/gstavidemux.h1
-rwxr-xr-xtools/gst-launch-ext.in2
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 <rbultje@ronald.bitfreak.net>
+
+ * 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 <ds@schleef.org>
* 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 <interact.hpp>
+#include <outputstrm.hpp>
+#include <multiplexor.hpp>
+
+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<IBitStream *> 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}",