From: Ronald S. Bultje Date: Sun, 21 Dec 2003 18:44:34 +0000 (+0000) Subject: configure.ac: Improve mpeg2enc detection. This is for distributions that do ship... X-Git-Tag: BEFORE_INDENT~478 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=31b52089cc4490ba89d6cc58e1183774264dd940;p=platform%2Fupstream%2Fgst-plugins-base.git configure.ac: Improve mpeg2enc detection. This is for distributions that do ship mjpegtools, but without mpeg2enc. Al... Original commit message from CVS: 2003-12-21 Ronald Bultje * configure.ac: Improve mpeg2enc detection. This is for distributions that do ship mjpegtools, but without mpeg2enc. Also does object check for might there ever be ABI incompatibility. * ext/mpeg2enc/gstmpeg2enc.cc: Add Andrew as second maintainer (he's helping me), and also add an error if no caps was set. This happens if I pull before capsnego and that's something I should solve sometime else. * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_blockgroup): Fix time parsing. * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link), (gst_matroska_mux_track_header): Add caps to templates. * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory): Add mpegversion=1 to prevent confusion with MPEG/AAC. * gst/mpegstream/gstmpegdemux.c: Remove layer since it causes warnings about unfixed caps. * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get): Fix obvious typo (we error out if caps were set, we should of course error out if *no* caps were set). * sys/oss/gstosselement.c: (gst_osselement_convert): Fix format conversion, we confused bits/bytes. * sys/oss/gstosselement.h: Improve documentation for 'bps'. * sys/v4l/TODO: Remove stuff about plugins that need removing - this was done ages ago. * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init), (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query): * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert), (gst_v4lsrc_src_query): * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init), (gst_v4l2src_src_convert), (gst_v4l2src_src_query): Add get_query_types(), get_formats() and query() functions. --- diff --git a/ChangeLog b/ChangeLog index 735bd58..5c3eb26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,41 @@ +2003-12-21 Ronald Bultje + + * configure.ac: + Improve mpeg2enc detection. This is for distributions that do + ship mjpegtools, but without mpeg2enc. Also does object check + for might there ever be ABI incompatibility. + * ext/mpeg2enc/gstmpeg2enc.cc: + Add Andrew as second maintainer (he's helping me), and also add + an error if no caps was set. This happens if I pull before capsnego + and that's something I should solve sometime else. + * gst/matroska/matroska-demux.c: + (gst_matroska_demux_parse_blockgroup): + Fix time parsing. + * gst/matroska/matroska-mux.c: (gst_matroska_mux_audio_pad_link), + (gst_matroska_mux_track_header): + Add caps to templates. + * gst/mpegaudioparse/gstmpegaudioparse.c: (mp3_sink_factory): + Add mpegversion=1 to prevent confusion with MPEG/AAC. + * gst/mpegstream/gstmpegdemux.c: + Remove layer since it causes warnings about unfixed caps. + * gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get): + Fix obvious typo (we error out if caps were set, we should of + course error out if *no* caps were set). + * sys/oss/gstosselement.c: (gst_osselement_convert): + Fix format conversion, we confused bits/bytes. + * sys/oss/gstosselement.h: + Improve documentation for 'bps'. + * sys/v4l/TODO: + Remove stuff about plugins that need removing - this was done + ages ago. + * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_init), + (gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query): + * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_init), (gst_v4lsrc_src_convert), + (gst_v4lsrc_src_query): + * sys/v4l2/gstv4l2src.c: (gst_v4l2src_init), + (gst_v4l2src_src_convert), (gst_v4l2src_src_query): + Add get_query_types(), get_formats() and query() functions. + 2003-12-21 Thomas Vander Stichele * ChangeLog: moved to gstreamer/docs/random/old/ChangeLog.gst-plugins diff --git a/configure.ac b/configure.ac index 2557072..6055d3b 100644 --- a/configure.ac +++ b/configure.ac @@ -1076,16 +1076,52 @@ GST_CHECK_FEATURE(MPEG2DEC, [mpeg2dec], mpeg2dec, [ dnl *** mpeg2enc *** translit(dnm, m, l) AM_CONDITIONAL(USE_MPEG2ENC, true) GST_CHECK_FEATURE(MPEG2ENC, [mpeg2enc], mpeg2enc, [ - PKG_CHECK_MODULES(MPEG2ENC, mjpegtools >= 1.6.1.92, - HAVE_MPEG2ENC="yes", HAVE_MPEG2ENC="no") - MPEG2ENC_LIBS="$MPEG2ENC_LIBS -lmpeg2encpp" - AC_SUBST(MPEG2ENC_CFLAGS) - AC_SUBST(MPEG2ENC_LIBS) + HAVE_MPEG2ENC="no" + dnl we require a c++ compiler for this one + if [ test x$HAVE_CXX = xyes ]; then + 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, [ + dnl switch over to c++ to test things + AC_LANG_CPLUSPLUS + OLD_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $MPEG2ENC_CFLAGS" + AC_CHECK_HEADER(mpeg2encoder.hh, [ + MPEG2ENC_LIBS="$MPEG2ENC_LIBS -lmpeg2encpp -lm -lpthread" + OLD_LIBS="$LIBS" + LIBS="$LIBS $MPEG2ENC_LIBS" + AC_MSG_CHECKING([for valid mpeg2enc objects]) + AC_TRY_RUN([ +#include +#include + +int +main (int argc, + char *argv[]) +{ + MPEG2EncOptions *options = new MPEG2EncOptions (); + MPEG2Encoder encoder (*options); + return 0; +} + ],[ + HAVE_MPEG2ENC="yes" + AC_SUBST(MPEG2ENC_CFLAGS) + AC_SUBST(MPEG2ENC_LIBS) + AC_MSG_RESULT(yes) + ], AC_MSG_RESULT(no)) + LIBS="$OLD_LIBS" + ]) + CPPFLAGS="$OLD_CPPFLAGS" + AC_LANG_C + ]) + fi ]) dnl *** mplex *** translit(dnm, m, l) AM_CONDITIONAL(USE_MPLEX, true) GST_CHECK_FEATURE(MPLEX, [mplex], mplex, [HAVE_MPLEX=$HAVE_CXX]) +]) dnl *** pango *** translit(dnm, m, l) AM_CONDITIONAL(USE_PANGO, true) diff --git a/gst/videotestsrc/gstvideotestsrc.c b/gst/videotestsrc/gstvideotestsrc.c index fc1d24c..adf25ab 100644 --- a/gst/videotestsrc/gstvideotestsrc.c +++ b/gst/videotestsrc/gstvideotestsrc.c @@ -482,7 +482,7 @@ gst_videotestsrc_get (GstPad * pad) videotestsrc = GST_VIDEOTESTSRC (gst_pad_get_parent (pad)); - if (videotestsrc->fourcc != NULL) { + if (!videotestsrc->fourcc) { gst_element_error (GST_ELEMENT (videotestsrc), "No color format set - aborting"); return NULL; diff --git a/sys/v4l/TODO b/sys/v4l/TODO index 02720e1..e24ccb1 100644 --- a/sys/v4l/TODO +++ b/sys/v4l/TODO @@ -1,19 +1,3 @@ -REMOVE list (HEAD) -================== -* xmms (depends on glib-1.2) -* avifile (ffmpeg) -* openquicktime (qtdemux) -* stereo2mono/mono2stereo/int2float/float2int (audioconvert) -* hermes (lcs) -* mjpegtools (jpeg does the same, make it depend on libjpegmmx instead) -* modplug (mikmod) -* vga (unmaintained, not-working) -* videosink (xvideo) -* aviaudiodecoder (useless) -* monkeymedia (licensing issues) -* wavparse/enc goes in same dir -* mulaw/alaw become separate mimetypes - TODO list (short term): ======================= * v4lsrc/v4lmjpegsrc/v4l2src: fix interlacing (not handled at all...) diff --git a/sys/v4l/gstv4lmjpegsrc.c b/sys/v4l/gstv4lmjpegsrc.c index e9c916e..1ab2233 100644 --- a/sys/v4l/gstv4lmjpegsrc.c +++ b/sys/v4l/gstv4lmjpegsrc.c @@ -58,21 +58,31 @@ enum { ARG_USE_FIXED_FPS }; +GST_FORMATS_FUNCTION (GstPad *, gst_v4lmjpegsrc_get_formats, + GST_FORMAT_TIME, GST_FORMAT_DEFAULT); +GST_QUERY_TYPE_FUNCTION (GstPad *, gst_v4lmjpegsrc_get_query_types, + GST_QUERY_POSITION); /* init functions */ static void gst_v4lmjpegsrc_base_init (gpointer g_class); static void gst_v4lmjpegsrc_class_init (GstV4lMjpegSrcClass *klass); static void gst_v4lmjpegsrc_init (GstV4lMjpegSrc *v4lmjpegsrc); -/* pad/buffer functions */ -static gboolean gst_v4lmjpegsrc_srcconvert (GstPad *pad, +/* pad/info functions */ +static gboolean gst_v4lmjpegsrc_src_convert (GstPad *pad, GstFormat src_format, gint64 src_value, GstFormat *dest_format, gint64 *dest_value); +static gboolean gst_v4lmjpegsrc_src_query (GstPad *pad, + GstQueryType type, + GstFormat *format, + gint64 *value); + +/* buffer functions */ static GstPadLinkReturn gst_v4lmjpegsrc_srcconnect (GstPad *pad, GstCaps *caps); -static GstData* gst_v4lmjpegsrc_get (GstPad *pad); +static GstData* gst_v4lmjpegsrc_get (GstPad *pad); static GstCaps* gst_v4lmjpegsrc_getcaps (GstPad *pad, GstCaps *caps); @@ -245,7 +255,10 @@ gst_v4lmjpegsrc_init (GstV4lMjpegSrc *v4lmjpegsrc) gst_pad_set_get_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_get); gst_pad_set_getcaps_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_getcaps); gst_pad_set_link_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_srcconnect); - gst_pad_set_convert_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_srcconvert); + gst_pad_set_convert_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_src_convert); + gst_pad_set_formats_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_get_formats); + gst_pad_set_query_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_src_query); + gst_pad_set_query_type_function (v4lmjpegsrc->srcpad, gst_v4lmjpegsrc_get_query_types); v4lmjpegsrc->bufferpool = gst_buffer_pool_new( NULL, @@ -304,13 +317,12 @@ gst_v4lmjpegsrc_get_fps (GstV4lMjpegSrc *v4lmjpegsrc) return fps; } - static gboolean -gst_v4lmjpegsrc_srcconvert (GstPad *pad, - GstFormat src_format, - gint64 src_value, - GstFormat *dest_format, - gint64 *dest_value) +gst_v4lmjpegsrc_src_convert (GstPad *pad, + GstFormat src_format, + gint64 src_value, + GstFormat *dest_format, + gint64 *dest_value) { GstV4lMjpegSrc *v4lmjpegsrc; gdouble fps; @@ -348,6 +360,40 @@ gst_v4lmjpegsrc_srcconvert (GstPad *pad, return TRUE; } +static gboolean +gst_v4lmjpegsrc_src_query (GstPad *pad, + GstQueryType type, + GstFormat *format, + gint64 *value) +{ + GstV4lMjpegSrc *v4lmjpegsrc = GST_V4LMJPEGSRC (gst_pad_get_parent (pad)); + gboolean res = TRUE; + gdouble fps; + + if ((fps = gst_v4lmjpegsrc_get_fps(v4lmjpegsrc)) == 0) + return FALSE; + + switch (type) { + case GST_QUERY_POSITION: + switch (*format) { + case GST_FORMAT_TIME: + *value = v4lmjpegsrc->handled * GST_SECOND / fps; + break; + case GST_FORMAT_DEFAULT: + *value = v4lmjpegsrc->handled; + break; + default: + res = FALSE; + break; + } + break; + default: + res = FALSE; + break; + } + + return res; +} static inline gulong calc_bufsize (int hor_dec, diff --git a/sys/v4l/gstv4lsrc.c b/sys/v4l/gstv4lsrc.c index d145d87..4bb1104 100644 --- a/sys/v4l/gstv4lsrc.c +++ b/sys/v4l/gstv4lsrc.c @@ -51,23 +51,33 @@ enum { ARG_USE_FIXED_FPS }; +GST_FORMATS_FUNCTION (GstPad *, gst_v4lsrc_get_formats, + GST_FORMAT_TIME, GST_FORMAT_DEFAULT); +GST_QUERY_TYPE_FUNCTION (GstPad *, gst_v4lsrc_get_query_types, + GST_QUERY_POSITION); /* init functions */ static void gst_v4lsrc_base_init (gpointer g_class); static void gst_v4lsrc_class_init (GstV4lSrcClass *klass); static void gst_v4lsrc_init (GstV4lSrc *v4lsrc); -/* pad/buffer functions */ -static gboolean gst_v4lsrc_srcconvert (GstPad *pad, +/* pad/info functions */ +static gboolean gst_v4lsrc_src_convert (GstPad *pad, GstFormat src_format, gint64 src_value, GstFormat *dest_format, gint64 *dest_value); +static gboolean gst_v4lsrc_src_query (GstPad *pad, + GstQueryType type, + GstFormat *format, + gint64 *value); + +/* buffer functions */ static GstPadLinkReturn gst_v4lsrc_srcconnect (GstPad *pad, GstCaps *caps); static GstCaps* gst_v4lsrc_getcaps (GstPad *pad, GstCaps *caps); -static GstData* gst_v4lsrc_get (GstPad *pad); +static GstData* gst_v4lsrc_get (GstPad *pad); /* get/set params */ static void gst_v4lsrc_set_property (GObject *object, @@ -199,7 +209,10 @@ gst_v4lsrc_init (GstV4lSrc *v4lsrc) gst_pad_set_get_function (v4lsrc->srcpad, gst_v4lsrc_get); gst_pad_set_getcaps_function (v4lsrc->srcpad, gst_v4lsrc_getcaps); gst_pad_set_link_function (v4lsrc->srcpad, gst_v4lsrc_srcconnect); - gst_pad_set_convert_function (v4lsrc->srcpad, gst_v4lsrc_srcconvert); + gst_pad_set_convert_function (v4lsrc->srcpad, gst_v4lsrc_src_convert); + gst_pad_set_formats_function (v4lsrc->srcpad, gst_v4lsrc_get_formats); + gst_pad_set_query_function (v4lsrc->srcpad, gst_v4lsrc_src_query); + gst_pad_set_query_type_function (v4lsrc->srcpad, gst_v4lsrc_get_query_types); v4lsrc->bufferpool = gst_buffer_pool_new( NULL, @@ -249,13 +262,12 @@ gst_v4lsrc_get_fps (GstV4lSrc *v4lsrc) return fps; } - static gboolean -gst_v4lsrc_srcconvert (GstPad *pad, - GstFormat src_format, - gint64 src_value, - GstFormat *dest_format, - gint64 *dest_value) +gst_v4lsrc_src_convert (GstPad *pad, + GstFormat src_format, + gint64 src_value, + GstFormat *dest_format, + gint64 *dest_value) { GstV4lSrc *v4lsrc; gdouble fps; @@ -293,6 +305,41 @@ gst_v4lsrc_srcconvert (GstPad *pad, return TRUE; } +static gboolean +gst_v4lsrc_src_query (GstPad *pad, + GstQueryType type, + GstFormat *format, + gint64 *value) +{ + GstV4lSrc *v4lsrc = GST_V4LSRC (gst_pad_get_parent (pad)); + gboolean res = TRUE; + gdouble fps; + + if ((fps = gst_v4lsrc_get_fps(v4lsrc)) == 0) + return FALSE; + + switch (type) { + case GST_QUERY_POSITION: + switch (*format) { + case GST_FORMAT_TIME: + *value = v4lsrc->handled * GST_SECOND / fps; + break; + case GST_FORMAT_DEFAULT: + *value = v4lsrc->handled; + break; + default: + res = FALSE; + break; + } + break; + default: + res = FALSE; + break; + } + + return res; +} + static GstCaps * gst_v4lsrc_palette_to_caps (int palette, GstPropsEntry *width, @@ -568,7 +615,7 @@ gst_v4lsrc_getcaps (GstPad *pad, } -static GstData* +static GstData * gst_v4lsrc_get (GstPad *pad) { GstV4lSrc *v4lsrc;