Merge branch 'master' into 0.11

This commit is contained in:
Wim Taymans 2011-03-04 16:30:36 +01:00
commit 338c300f5f
29 changed files with 729 additions and 69 deletions

2
common

@ -1 +1 @@
Subproject commit 1de7f6ab2d4bc1af69f06079cf0f4e2cbbfdc178
Subproject commit 6aec6b9716c184c60c4bc6a5916a2471cfa8c8cd

View file

@ -43,6 +43,8 @@ dnl we override it here if we need to for the release candidate of new series
GST_MAJORMINOR=0.11
AC_SUBST(GST_MAJORMINOR)
AG_GST_LIBTOOL_PREPARE
dnl FIXME: this macro doesn't actually work;
dnl the generated libtool script has no support for the listed tags.
dnl So this needs to be fixed first if we want to use this
@ -256,10 +258,13 @@ if test "x$BUILD_EXAMPLES" = "xyes"; then
GTK_REQ=$GTK2_REQ])
AC_MSG_RESULT([$with_gtk (>= $GTK_REQ)])
PKG_CHECK_MODULES(GTK, gtk+-$with_gtk >= $GTK_REQ, HAVE_GTK=yes, HAVE_GTK=no)
dnl some examples need gtk+-x11
PKG_CHECK_MODULES(GTK_X11, gtk+-x11-$with_gtk >= $GTK_REQ, HAVE_GTK_X11=yes, HAVE_GTK_X11=no)
AC_SUBST(GTK_LIBS)
AC_SUBST(GTK_CFLAGS)
fi
AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
AM_CONDITIONAL(HAVE_GTK_X11, test "x$HAVE_GTK_X11" = "xyes")
dnl should we install schemas ?
translit(dnm, m, l) AM_CONDITIONAL(USE_GCONFTOOL, true)
@ -713,6 +718,13 @@ AG_GST_CHECK_FEATURE(CAIRO, [Cairo graphics rendering], cairo, [
AG_GST_PKG_CHECK_MODULES(CAIRO, cairo >= 1.0.0)
])
dnl *** cairo-gobject ***
translit(dnm, m, l) AM_CONDITIONAL(USE_CAIRO_GOBJECT, true)
AG_GST_CHECK_FEATURE(CAIRO_GOBJECT,
[Cairo graphics rendering gobject bindings], cairooverlay, [
AG_GST_PKG_CHECK_MODULES(CAIRO_GOBJECT, cairo-gobject >= 1.10.0)
])
dnl **** ESound ****
translit(dnm, m, l) AM_CONDITIONAL(USE_ESD, true)
AG_GST_CHECK_FEATURE(ESD, [ESounD sound daemon], esdsink, [
@ -1019,6 +1031,7 @@ AM_CONDITIONAL(USE_AALIB, false)
AM_CONDITIONAL(USE_ANNODEX, false)
AM_CONDITIONAL(USE_BZ2, false)
AM_CONDITIONAL(USE_CAIRO, false)
AM_CONDITIONAL(USE_CAIRO_GOBJECT, false)
AM_CONDITIONAL(USE_DIRECTSOUND, false)
AM_CONDITIONAL(USE_DV1394, false)
AM_CONDITIONAL(USE_ESD, false)
@ -1103,7 +1116,7 @@ AC_SUBST(GST_ALL_LDFLAGS)
dnl this really should only contain flags, not libs - they get added before
dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_desc\$\$' $GST_ALL_LDFLAGS"
GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_desc.*' $GST_ALL_LDFLAGS"
AC_SUBST(GST_PLUGIN_LDFLAGS)
dnl *** output files ***
@ -1189,6 +1202,7 @@ tests/Makefile
tests/check/Makefile
tests/examples/Makefile
tests/examples/audiofx/Makefile
tests/examples/cairo/Makefile
tests/examples/equalizer/Makefile
tests/examples/jack/Makefile
tests/examples/level/Makefile

View file

@ -81,6 +81,7 @@ EXTRA_HFILES = \
$(top_srcdir)/ext/cairo/gsttextoverlay.h \
$(top_srcdir)/ext/cairo/gsttimeoverlay.h \
$(top_srcdir)/ext/cairo/gstcairorender.h \
$(top_srcdir)/ext/cairo/gstcairooverlay.h \
$(top_srcdir)/ext/dv/gstdvdec.h \
$(top_srcdir)/ext/dv/gstdvdemux.h \
$(top_srcdir)/ext/esd/esdsink.h \

View file

@ -51,6 +51,7 @@
<xi:include href="xml/element-cairotextoverlay.xml" />
<xi:include href="xml/element-cairotimeoverlay.xml" />
<xi:include href="xml/element-cairorender.xml" />
<xi:include href="xml/element-cairooverlay.xml" />
<xi:include href="xml/element-capssetter.xml" />
<xi:include href="xml/element-cmmldec.xml" />
<xi:include href="xml/element-cmmlenc.xml" />

View file

@ -465,6 +465,18 @@ GST_CAIRO_RENDER_CLASS
gst_cairo_render_get_type
</SECTION>
<SECTION>
<FILE>element-cairooverlay</FILE>
<TITLE>cairooverlay</TITLE>
GstCairoOverlay
<SUBSECTION Standard>
GstCairoOverlayClass
GST_TYPE_CAIRO_OVERLAY
GST_CAIRO_OVERLAY
GST_CAIRO_OVERLAY_CLASS
gst_cairo_overlay_get_type
</SECTION>
<SECTION>
<FILE>element-capssetter</FILE>
<TITLE>capssetter</TITLE>

View file

@ -20768,6 +20768,16 @@
<DEFAULT>FALSE</DEFAULT>
</ARG>
<ARG>
<NAME>GstRtpSession::rtcp-min-interval</NAME>
<TYPE>guint64</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Minimum RTCP interval</NICK>
<BLURB>Minimum interval between Regular RTCP packet (in ns).</BLURB>
<DEFAULT>5000000000</DEFAULT>
</ARG>
<ARG>
<NAME>GstV4l2Sink::device</NAME>
<TYPE>gchar*</TYPE>

View file

@ -63,8 +63,8 @@ GObject
GstRtpG722Pay
GstRtpG726Pay
GstRtpL16Pay
GstRtpPcmaPay
GstRtpPcmuPay
GstRtpPmcaPay
GstRTPDVPay
GstRTPG723Pay
GstRTPG729Pay
@ -160,6 +160,7 @@ GObject
GstAgingTV
GstAlpha
GstAlphaColor
GstCairoOverlay
GstDiceTV
GstEdgeTV
GstGamma

View file

@ -1,55 +1,55 @@
GstBin GstChildProxy
GstPipeline GstChildProxy
GstHalAudioSink GstChildProxy
GstHalAudioSrc GstChildProxy
GstSwitchSink GstChildProxy
GstGConfVideoSink GstChildProxy
GstGConfAudioSink GstChildProxy
GstSwitchSrc GstChildProxy
GstGConfVideoSrc GstChildProxy
GstGConfAudioSrc GstChildProxy
GstHalAudioSink GstChildProxy
GstHalAudioSrc GstChildProxy
GstRTSPSrc GstChildProxy GstURIHandler
GstRtpBin GstChildProxy
GstPushFileSrc GstChildProxy GstURIHandler
GstAutoVideoSink GstChildProxy
GstAutoVideoSrc GstChildProxy
GstAutoAudioSink GstChildProxy
GstAutoAudioSrc GstChildProxy
GstPushFileSrc GstChildProxy GstURIHandler
GstRTSPSrc GstChildProxy GstURIHandler
GstRgVolume GstChildProxy
GstAspectRatioCrop GstChildProxy
GstPulseSink GstStreamVolume GstImplementsInterface GstPropertyProbe
GstOss4Sink GstStreamVolume GstPropertyProbe
GstV4l2Sink GstImplementsInterface GstXOverlay GstNavigation GstColorBalance GstVideoOrientation GstPropertyProbe
GstShout2send GstTagSetter
GstUDPSink GstURIHandler
GstDV1394Src GstURIHandler GstPropertyProbe
GstHDV1394Src GstURIHandler GstPropertyProbe
GstSoupHTTPSrc GstURIHandler
GstPulseSrc GstImplementsInterface GstMixer GstPropertyProbe
GstOssSrc GstImplementsInterface GstMixer
GstOss4Source GstImplementsInterface GstMixer GstPropertyProbe
GstV4l2Src GstURIHandler GstImplementsInterface GstTuner GstColorBalance GstVideoOrientation GstPropertyProbe
GstUDPSrc GstURIHandler
GstWavpackEnc GstPreset
GstTagLibMux GstTagSetter
GstId3v2Mux GstTagSetter
GstApev2Mux GstTagSetter
GstFlacEnc GstTagSetter GstPreset
GstFlacTag GstTagSetter
GstVideoBalance GstImplementsInterface GstColorBalance
GstIirEqualizer GstChildProxy
GstIirEqualizerNBands GstChildProxy
GstIirEqualizer3Bands GstChildProxy GstPreset
GstIirEqualizer10Bands GstChildProxy GstPreset
GstSoupHTTPSrc GstURIHandler
GstPulseSrc GstImplementsInterface GstMixer GstPropertyProbe
GstOss4Source GstImplementsInterface GstMixer GstPropertyProbe
GstOssSrc GstImplementsInterface GstMixer
GstDV1394Src GstURIHandler GstPropertyProbe
GstHDV1394Src GstURIHandler GstPropertyProbe
GstV4l2Src GstURIHandler GstImplementsInterface GstTuner GstColorBalance GstVideoOrientation GstPropertyProbe
GstUDPSrc GstURIHandler
GstPulseSink GstStreamVolume GstImplementsInterface GstPropertyProbe
GstOss4Sink GstStreamVolume GstPropertyProbe
GstV4l2Sink GstImplementsInterface GstXOverlay GstNavigation GstColorBalance GstVideoOrientation GstPropertyProbe
GstShout2send GstTagSetter
GstUDPSink GstURIHandler
GstPulseMixer GstImplementsInterface GstMixer GstPropertyProbe
GstTagLibMux GstTagSetter
GstId3v2Mux GstTagSetter
GstApev2Mux GstTagSetter
GstFlacEnc GstTagSetter GstPreset
GstFlacTag GstTagSetter
GstWavpackEnc GstPreset
GstSpeexEnc GstTagSetter GstPreset
GstOssMixerElement GstImplementsInterface GstMixer
GstOss4Mixer GstImplementsInterface GstMixer GstPropertyProbe
GstAviMux GstTagSetter
GstOssMixerElement GstImplementsInterface GstMixer
GstMatroskaMux GstTagSetter
GstWebMMux GstTagSetter
GstDeinterlace GstChildProxy
GstFlvMux GstTagSetter
GstVideoMixer GstChildProxy
GstVideoMixer2 GstChildProxy
GstFlvMux GstTagSetter
GstAviMux GstTagSetter
GstDeinterlace GstChildProxy
GdkPixbuf GIcon

View file

@ -1,8 +1,8 @@
GstChildProxy GstObject
GstTagSetter GstElement
GstStreamVolume GObject
GstImplementsInterface GstElement
GstMixer GstImplementsInterface GstElement
GstTagSetter GstElement
GstTuner GstImplementsInterface GstElement
GstColorBalance GstImplementsInterface GstElement
GstVideoOrientation GstImplementsInterface GstElement

View file

@ -662,3 +662,21 @@ guint arg1
GstPad *arg2
</SIGNAL>
<SIGNAL>
<NAME>GstCairoOverlay::caps-changed</NAME>
<RETURNS>void</RETURNS>
<FLAGS></FLAGS>
GstCairoOverlay *gstcairooverlay
GstCaps *arg1
</SIGNAL>
<SIGNAL>
<NAME>GstCairoOverlay::draw</NAME>
<RETURNS>void</RETURNS>
<FLAGS></FLAGS>
GstCairoOverlay *gstcairooverlay
CairoContext *arg1
guint64 arg2
guint64 arg3
</SIGNAL>

File diff suppressed because one or more lines are too long

View file

@ -9,6 +9,27 @@
<package>GStreamer Good Plug-ins git</package>
<origin>Unknown package origin</origin>
<elements>
<element>
<name>cairooverlay</name>
<longname>Cairo overlay</longname>
<class>Filter/Editor/Video</class>
<description>Render overlay on a video stream using Cairo</description>
<author>Jon Nordby &lt;jononor@gmail.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
<element>
<name>cairorender</name>
<longname>Cairo encoder</longname>

View file

@ -20,13 +20,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
<details>video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y444, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YVYU, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y42B, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y41B, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
<details>video/x-raw-yuv, format=(fourcc){ AYUV, Y444, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
<details>video/x-raw-yuv, format=(fourcc)AYUV, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y444, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YVYU, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y42B, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)Y41B, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
<details>video/x-raw-yuv, format=(fourcc){ AYUV, Y444, YUY2, YVYU, UYVY, Y42B, I420, YV12, Y41B, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>

2
ext/cairo/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
gstcairo-marshal.c
gstcairo-marshal.h

View file

@ -1,20 +1,45 @@
plugin_LTLIBRARIES = libgstcairo.la
noinst_HEADERS = gsttimeoverlay.h gsttextoverlay.h gstcairorender.h
if USE_CAIRO_GOBJECT
glib_enum_define = GST_CAIRO
glib_gen_prefix = gst_cairo
glib_gen_basename = gstcairo
include $(top_srcdir)/common/gst-glib-gen.mak
built_sources = gstcairo-marshal.c
built_headers = gstcairo-marshal.h
BUILT_SOURCES = $(built_sources) $(built_headers)
gstcairo_gobject_dep_sources = gstcairooverlay.c
gstcairo_gobject_dep_headers = gstcairooverlay.h
CLEANFILES = $(BUILT_SOURCES)
endif
noinst_HEADERS = \
gsttimeoverlay.h \
gsttextoverlay.h \
gstcairorender.h \
$(gstcairo_gobject_dep_headers)
libgstcairo_la_SOURCES = \
gstcairo.c \
gsttimeoverlay.c \
gsttextoverlay.c \
gstcairorender.c
gstcairorender.c \
$(gstcairo_gobject_dep_sources)
nodist_libgstcairo_la_SOURCES = \
$(built_sources)
libgstcairo_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
$(GST_CFLAGS) $(CAIRO_CFLAGS)
$(GST_CFLAGS) $(CAIRO_CFLAGS) $(CAIRO_GOBJECT_CFLAGS)
libgstcairo_la_LIBADD = \
$(GST_BASE_LIBS) \
$(GST_LIBS) $(CAIRO_LIBS) $(LIBM)
$(GST_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \
$(GST_LIBS) $(CAIRO_LIBS) $(CAIRO_GOBJECT_LIBS) $(LIBM)
libgstcairo_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstcairo_la_LIBTOOLFLAGS = --tag=disable-static
EXTRA_DIST = cairo-marshal.list

View file

@ -0,0 +1,2 @@
VOID:BOXED,UINT64,UINT64
VOID:BOXED

View file

@ -25,6 +25,11 @@
#include <gsttimeoverlay.h>
#include <gsttextoverlay.h>
#include <gstcairorender.h>
#ifdef HAVE_CAIRO_GOBJECT
#include <gstcairooverlay.h>
#endif
#include <string.h>
#include <math.h>
@ -37,6 +42,10 @@ plugin_init (GstPlugin * plugin)
GST_TYPE_CAIRO_TEXT_OVERLAY);
gst_element_register (plugin, "cairotimeoverlay", GST_RANK_NONE,
GST_TYPE_CAIRO_TIME_OVERLAY);
#ifdef HAVE_CAIRO_GOBJECT
gst_element_register (plugin, "cairooverlay", GST_RANK_NONE,
GST_TYPE_CAIRO_OVERLAY);
#endif
gst_element_register (plugin, "cairorender", GST_RANK_SECONDARY,
GST_TYPE_CAIRO_RENDER);

250
ext/cairo/gstcairooverlay.c Normal file
View file

@ -0,0 +1,250 @@
/* GStreamer
* Copyright (C) <2011> Jon Nordby <jononor@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/**
* SECTION:element-cairooverlay
*
* cairooverlay renders an overlay using a application provided render function.
*
* The full example can be found in tests/examples/cairo/cairo_overlay.c
* <refsect2>
* <title>Example code</title>
* |[
*
* #include &lt;gst/gst.h&gt;
* #include &lt;gst/video/video.h&gt;
*
* ...
*
* typedef struct {
* gboolean valid;
* int width;
* int height;
* } CairoOverlayState;
*
* ...
*
* static void
* prepare_overlay (GstElement * overlay, GstCaps * caps, gpointer user_data)
* {
* CairoOverlayState *state = (CairoOverlayState *)user_data;
*
* gst_video_format_parse_caps (caps, NULL, &amp;state-&gt;width, &amp;state-&gt;height);
* state-&gt;valid = TRUE;
* }
*
* static void
* draw_overlay (GstElement * overlay, cairo_t * cr, guint64 timestamp,
* guint64 duration, gpointer user_data)
* {
* CairoOverlayState *s = (CairoOverlayState *)user_data;
* double scale;
*
* if (!s-&gt;valid)
* return;
*
* scale = 2*(((timestamp/(int)1e7) % 70)+30)/100.0;
* cairo_translate(cr, s-&gt;width/2, (s-&gt;height/2)-30);
* cairo_scale (cr, scale, scale);
*
* cairo_move_to (cr, 0, 0);
* cairo_curve_to (cr, 0,-30, -50,-30, -50,0);
* cairo_curve_to (cr, -50,30, 0,35, 0,60 );
* cairo_curve_to (cr, 0,35, 50,30, 50,0 ); *
* cairo_curve_to (cr, 50,-30, 0,-30, 0,0 );
* cairo_set_source_rgba (cr, 0.9, 0.0, 0.1, 0.7);
* cairo_fill (cr);
* }
*
* ...
*
* cairo_overlay = gst_element_factory_make (&quot;cairooverlay&quot;, &quot;overlay&quot;);
*
* g_signal_connect (cairo_overlay, &quot;draw&quot;, G_CALLBACK (draw_overlay),
* overlay_state);
* g_signal_connect (cairo_overlay, &quot;caps-changed&quot;,
* G_CALLBACK (prepare_overlay), overlay_state);
* ...
*
* ]|
* </refsect2>
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gstcairooverlay.h"
#include "gstcairo-marshal.h"
#include <gst/video/video.h>
#include <cairo.h>
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
#define TEMPLATE_CAPS GST_VIDEO_CAPS_BGRx " ; " GST_VIDEO_CAPS_BGRA " ; "
#else
#define TEMPLATE_CAPS GST_VIDEO_CAPS_xRGB " ; " GST_VIDEO_CAPS_ARGB " ; "
#endif
static GstStaticPadTemplate gst_cairo_overlay_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (TEMPLATE_CAPS)
);
static GstStaticPadTemplate gst_cairo_overlay_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (TEMPLATE_CAPS)
);
GST_BOILERPLATE (GstCairoOverlay, gst_cairo_overlay, GstVideoFilter,
GST_TYPE_VIDEO_FILTER);
enum
{
SIGNAL_DRAW,
SIGNAL_CAPS_CHANGED,
N_SIGNALS
};
static guint gst_cairo_overlay_signals[N_SIGNALS];
static gboolean
gst_cairo_overlay_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
GstCaps * outcaps)
{
GstCairoOverlay *overlay = GST_CAIRO_OVERLAY (btrans);
gboolean ret;
ret =
gst_video_format_parse_caps (incaps, &overlay->format, &overlay->width,
&overlay->height);
if (G_UNLIKELY (!ret))
return FALSE;
g_signal_emit (overlay, gst_cairo_overlay_signals[SIGNAL_CAPS_CHANGED], 0,
incaps, NULL);
return ret;
}
static GstFlowReturn
gst_cairo_overlay_transform_ip (GstBaseTransform * btrans, GstBuffer * buf)
{
GstCairoOverlay *overlay = GST_CAIRO_OVERLAY (btrans);
cairo_surface_t *surface;
cairo_t *cr;
cairo_format_t format;
format = (overlay->format == GST_VIDEO_FORMAT_ARGB
|| overlay->format == GST_VIDEO_FORMAT_BGRA) ?
CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24;
surface =
cairo_image_surface_create_for_data (GST_BUFFER_DATA (buf), format,
overlay->width, overlay->height, overlay->width * 4);
if (G_UNLIKELY (!surface))
return GST_FLOW_ERROR;
cr = cairo_create (surface);
if (G_UNLIKELY (!cr)) {
cairo_surface_destroy (surface);
return GST_FLOW_ERROR;
}
g_signal_emit (overlay, gst_cairo_overlay_signals[SIGNAL_DRAW], 0,
cr, GST_BUFFER_TIMESTAMP (buf), GST_BUFFER_DURATION (buf), NULL);
cairo_destroy (cr);
cairo_surface_destroy (surface);
return GST_FLOW_OK;
}
static void
gst_cairo_overlay_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
gst_element_class_set_details_simple (element_class, "Cairo overlay",
"Filter/Editor/Video",
"Render overlay on a video stream using Cairo",
"Jon Nordby <jononor@gmail.com>");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_cairo_overlay_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_cairo_overlay_src_template));
}
static void
gst_cairo_overlay_class_init (GstCairoOverlayClass * klass)
{
GstBaseTransformClass *trans_class;
trans_class = (GstBaseTransformClass *) klass;
trans_class->set_caps = gst_cairo_overlay_set_caps;
trans_class->transform_ip = gst_cairo_overlay_transform_ip;
/**
* GstCairoOverlay::draw:
* @overlay: Overlay element emitting the signal.
* @cr: Cairo context to draw to.
* @timestamp: Timestamp (see #GstClockTime) of the current buffer.
* @duration: Duration (see #GstClockTime) of the current buffer.
*
* This signal is emitted when the overlay should be drawn.
*/
gst_cairo_overlay_signals[SIGNAL_DRAW] =
g_signal_new ("draw",
G_TYPE_FROM_CLASS (klass),
0,
0,
NULL,
NULL,
gst_cairo_marshal_VOID__BOXED_UINT64_UINT64,
G_TYPE_NONE, 3, CAIRO_GOBJECT_TYPE_CONTEXT, G_TYPE_UINT64, G_TYPE_UINT64);
/**
* GstCairoOverlay::caps-changed:
* @overlay: Overlay element emitting the signal.
* @caps: The #GstCaps of the element.
*
* This signal is emitted when the caps of the element has changed.
*/
gst_cairo_overlay_signals[SIGNAL_CAPS_CHANGED] =
g_signal_new ("caps-changed",
G_TYPE_FROM_CLASS (klass),
0,
0,
NULL, NULL, gst_cairo_marshal_VOID__BOXED, G_TYPE_NONE, 1, GST_TYPE_CAPS);
}
static void
gst_cairo_overlay_init (GstCairoOverlay * overlay, GstCairoOverlayClass * klass)
{
}

View file

@ -0,0 +1,63 @@
/* GStreamer
* Copyright (C) <2011> Jon Nordby <jononor@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#ifndef __GST_CAIRO_OVERLAY_H__
#define __GST_CAIRO_OVERLAY_H__
#include <gst/gst.h>
#include <gst/video/video.h>
#include <gst/video/gstvideofilter.h>
#include <cairo.h>
#include <cairo-gobject.h>
G_BEGIN_DECLS
#define GST_TYPE_CAIRO_OVERLAY \
(gst_cairo_overlay_get_type())
#define GST_CAIRO_OVERLAY(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_CAIRO_OVERLAY,GstCairoOverlay))
#define GST_CAIRO_OVERLAY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_CAIRO_OVERLAY,GstCairoOverlayClass))
#define GST_IS_CAIRO_OVERLAY(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_CAIRO_OVERLAY))
#define GST_IS_CAIRO_OVERLAY_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CAIRO_OVERLAY))
typedef struct _GstCairoOverlay GstCairoOverlay;
typedef struct _GstCairoOverlayClass GstCairoOverlayClass;
struct _GstCairoOverlay {
GstVideoFilter parent_instance;
/* < private > */
GstVideoFormat format;
gint width;
gint height;
};
struct _GstCairoOverlayClass {
GstVideoFilterClass parent_class;
};
GType gst_cairo_overlay_get_type(void);
G_END_DECLS
#endif /* __GST_CAIRO_OVERLAY_H__ */

View file

@ -36,6 +36,10 @@
* |[
* gst-launch -v audiotestsrc ! audioconvert ! volume volume=0.4 ! pulsesink
* ]| Play a 440Hz sine wave.
* |[
* gst-launch -v audiotestsrc ! pulsesink stream-properties="props,media.title=test"
* ]] Play a sine wave and set a stream property. The property can be checked
* with "pactl list".
* </refsect2>
*/
@ -1915,7 +1919,7 @@ gst_pulsesink_class_init (GstPulseSinkClass * klass)
* GstPulseSink:stream-properties
*
* List of pulseaudio stream properties. A list of defined properties can be
* found in the <ulink href="http://0pointer.de/lennart/projects/pulseaudio/doxygen/proplist_8h.html">pulseaudio api docs</ulink>.
* found in the <ulink url="http://0pointer.de/lennart/projects/pulseaudio/doxygen/proplist_8h.html">pulseaudio api docs</ulink>.
*
* Below is an example for registering as a music application to pulseaudio.
* |[

View file

@ -90,7 +90,7 @@ struct _struct_convolve_state
double left[CONVOLVE_BIG];
double right[CONVOLVE_SMALL * 3];
double scratch[CONVOLVE_SMALL * 3];
stack_entry stack[STACK_SIZE];
stack_entry stack[STACK_SIZE + 1];
};
/*
@ -102,7 +102,7 @@ struct _struct_convolve_state
convolve_state *
convolve_init (void)
{
return (convolve_state *) malloc (sizeof (convolve_state));
return (convolve_state *) calloc (1, sizeof (convolve_state));
}
/*
@ -111,8 +111,7 @@ convolve_init (void)
void
convolve_close (convolve_state * state)
{
if (state)
free (state);
free (state);
}
static void
@ -267,7 +266,7 @@ convolve_match (const int *lastchoice,
double *left = state->left;
double *right = state->right;
double *scratch = state->scratch;
stack_entry *top = state->stack + STACK_SIZE - 1;
stack_entry *top = state->stack + (STACK_SIZE - 1);
#if 1
for (i = 0; i < 512; i++)
@ -288,9 +287,7 @@ convolve_match (const int *lastchoice,
for (i = 0; i < 256; i++)
right[i] -= avg;
/* End-of-stack marker. */
#if 0 /* The following line produces a CRASH, need to figure out why?!! */
top[1].b.null = scratch;
#endif
top[1].b.main = NULL;
/* The low 256x256, of which we want the high 256 outputs. */
top->v.left = left;

View file

@ -73,8 +73,15 @@ monoscope_init (guint32 resx, guint32 resy)
return stateptr;
}
void
monoscope_close (struct monoscope_state *stateptr)
{
convolve_close (stateptr->cstate);
free (stateptr);
}
guint32 *
monoscope_update (struct monoscope_state * stateptr, gint16 data[512])
monoscope_update (struct monoscope_state *stateptr, gint16 data[512])
{
/* Note that CONVOLVE_BIG must == data size here, ie 512. */
/* Really, we want samples evenly spread over the available data.
@ -119,8 +126,8 @@ monoscope_update (struct monoscope_state * stateptr, gint16 data[512])
foo >>= 18;
if (foo > 63)
foo = 63;
if (foo < -64)
foo = -64;
if (foo < -63)
foo = -63;
val = (i + ((foo + 64) << 8));
bar = val;
if ((bar > 0) && (bar < (256 * 128))) {
@ -155,8 +162,3 @@ monoscope_update (struct monoscope_state * stateptr, gint16 data[512])
return stateptr->display;
}
void
monoscope_close (struct monoscope_state *stateptr)
{
}

View file

@ -547,10 +547,18 @@ gst_qtdemux_pull_atom (GstQTDemux * qtdemux, guint64 offset, guint64 size,
/* Sanity check: catch bogus sizes (fuzzed/broken files) */
if (G_UNLIKELY (size > QTDEMUX_MAX_ATOM_SIZE)) {
GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX,
(_("This file is invalid and cannot be played.")),
("atom has bogus size %" G_GUINT64_FORMAT, size));
return GST_FLOW_ERROR;
if (qtdemux->state != QTDEMUX_STATE_MOVIE && qtdemux->got_moov) {
/* we're pulling header but already got most interesting bits,
* so never mind the rest (e.g. tags) (that much) */
GST_WARNING_OBJECT (qtdemux, "atom has bogus size %" G_GUINT64_FORMAT,
size);
return GST_FLOW_UNEXPECTED;
} else {
GST_ELEMENT_ERROR (qtdemux, STREAM, DEMUX,
(_("This file is invalid and cannot be played.")),
("atom has bogus size %" G_GUINT64_FORMAT, size));
return GST_FLOW_ERROR;
}
}
flow = gst_pad_pull_range (qtdemux->sinkpad, offset, size, buf);

View file

@ -30,7 +30,6 @@
# include <libv4l2.h>
#else
# include <sys/ioctl.h>
# include <linux/videodev.h>
# include <linux/videodev2.h>
# define v4l2_fd_open(fd, flags) (fd)
# define v4l2_close close

View file

@ -4,8 +4,20 @@ else
JACK_DIR=
endif
SUBDIRS = audiofx equalizer $(JACK_DIR) level pulse rtp shapewipe spectrum v4l2
if USE_CAIRO_GOBJECT
if HAVE_GTK_X11
CAIRO_DIR=cairo
else
CAIRO_DIR=
endif
else
CAIRO_DIR=
endif
DIST_SUBDIRS = audiofx equalizer jack level pulse rtp shapewipe spectrum v4l2
SUBDIRS = audiofx equalizer $(JACK_DIR) level pulse \
rtp shapewipe spectrum v4l2 $(CAIRO_DIR)
DIST_SUBDIRS = audiofx equalizer jack level pulse \
rtp shapewipe spectrum v4l2 $(CAIRO_DIR)
include $(top_srcdir)/common/parallel-subdirs.mak

1
tests/examples/cairo/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
cairo_overlay

View file

@ -0,0 +1,12 @@
if USE_CAIRO_GOBJECT
if HAVE_GTK_X11
noinst_PROGRAMS = cairo_overlay
endif
endif
cairo_overlay_SOURCES = cairo_overlay.c
cairo_overlay_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
$(GTK_CFLAGS) $(CAIRO_CFLAGS)
cairo_overlay_LDFLAGS = \
$(GST_LIBS) -lgstinterfaces-0.10 -lgstvideo-$(GST_MAJORMINOR) \
$(GTK_LIBS) $(CAIRO_LIBS)

View file

@ -0,0 +1,195 @@
/* GStreamer
* Copyright (C) 2011 Jon Nordby <jononor@gmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/*
* Example showing usage of the cairooverlay element
*
* Note: The example program not run on non-X11 platforms because
* it is using the xvimageoverlay element. That part of the code was
* roughly based on gst_x_overlay documentation.
*/
#include <gst/gst.h>
#include <gst/video/video.h>
#include <gst/interfaces/xoverlay.h>
#include <cairo.h>
#include <cairo-gobject.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
static gulong video_window_xid = 0;
static GstBusSyncReply
bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data)
{
if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
return GST_BUS_PASS;
if (!gst_structure_has_name (message->structure, "prepare-xwindow-id"))
return GST_BUS_PASS;
if (video_window_xid != 0) {
GstXOverlay *xoverlay;
xoverlay = GST_X_OVERLAY (GST_MESSAGE_SRC (message));
gst_x_overlay_set_window_handle (xoverlay, video_window_xid);
} else {
g_warning ("Should have obtained video_window_xid by now!");
}
gst_message_unref (message);
return GST_BUS_DROP;
}
static void
video_widget_realize_cb (GtkWidget * widget, gpointer data)
{
video_window_xid = GDK_WINDOW_XID (widget->window);
}
static GtkWidget *
setup_gtk_window (void)
{
GtkWidget *video_window;
GtkWidget *app_window;
app_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
video_window = gtk_drawing_area_new ();
g_signal_connect (video_window, "realize",
G_CALLBACK (video_widget_realize_cb), NULL);
gtk_widget_set_double_buffered (video_window, FALSE);
gtk_container_add (GTK_CONTAINER (app_window), video_window);
gtk_widget_show_all (app_window);
gtk_widget_realize (app_window);
g_assert (video_window_xid != 0);
return app_window;
}
/* Datastructure to share the state we are interested in between
* prepare and render function. */
typedef struct
{
gboolean valid;
int width;
int height;
} CairoOverlayState;
/* Store the information from the caps that we are interested in. */
static void
prepare_overlay (GstElement * overlay, GstCaps * caps, gpointer user_data)
{
CairoOverlayState *state = (CairoOverlayState *) user_data;
gst_video_format_parse_caps (caps, NULL, &state->width, &state->height);
state->valid = TRUE;
}
/* Draw the overlay.
* This function draws a cute "beating" heart. */
static void
draw_overlay (GstElement * overlay, cairo_t * cr, guint64 timestamp,
guint64 duration, gpointer user_data)
{
CairoOverlayState *s = (CairoOverlayState *) user_data;
double scale;
if (!s->valid)
return;
scale = 2 * (((timestamp / (int) 1e7) % 70) + 30) / 100.0;
cairo_translate (cr, s->width / 2, (s->height / 2) - 30);
cairo_scale (cr, scale, scale);
cairo_move_to (cr, 0, 0);
cairo_curve_to (cr, 0, -30, -50, -30, -50, 0);
cairo_curve_to (cr, -50, 30, 0, 35, 0, 60);
cairo_curve_to (cr, 0, 35, 50, 30, 50, 0);
cairo_curve_to (cr, 50, -30, 0, -30, 0, 0);
cairo_set_source_rgba (cr, 0.9, 0.0, 0.1, 0.7);
cairo_fill (cr);
}
static GstElement *
setup_gst_pipeline (CairoOverlayState * overlay_state)
{
GstElement *pipeline;
GstElement *cairo_overlay;
GstElement *source, *adaptor1, *adaptor2, *sink;
GstBus *bus;
pipeline = gst_pipeline_new ("cairo-overlay-example");
/* Adaptors needed because cairooverlay only supports ARGB data */
source = gst_element_factory_make ("videotestsrc", "source");
adaptor1 = gst_element_factory_make ("ffmpegcolorspace", "adaptor1");
cairo_overlay = gst_element_factory_make ("cairooverlay", "overlay");
adaptor2 = gst_element_factory_make ("ffmpegcolorspace", "adaptor2");
sink = gst_element_factory_make ("xvimagesink", "sink");
/* If failing, the element could not be created */
g_assert (cairo_overlay);
/* Hook up the neccesary signals for cairooverlay */
g_signal_connect (cairo_overlay, "draw",
G_CALLBACK (draw_overlay), overlay_state);
g_signal_connect (cairo_overlay, "caps-changed",
G_CALLBACK (prepare_overlay), overlay_state);
gst_bin_add_many (GST_BIN (pipeline), source, adaptor1,
cairo_overlay, adaptor2, sink, NULL);
if (!gst_element_link_many (source, adaptor1,
cairo_overlay, adaptor2, sink, NULL)) {
g_warning ("Failed to link elements!");
}
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, NULL);
gst_object_unref (bus);
return pipeline;
}
int
main (int argc, char **argv)
{
GtkWidget *window;
GstElement *pipeline;
CairoOverlayState *overlay_state;
gtk_init (&argc, &argv);
gst_init (&argc, &argv);
window = setup_gtk_window ();
overlay_state = g_new0 (CairoOverlayState, 1);
pipeline = setup_gst_pipeline (overlay_state);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
gtk_main ();
gst_object_unref (pipeline);
gtk_widget_destroy (GTK_WIDGET (window));
g_free (overlay_state);
}

View file

@ -11,14 +11,15 @@ VOFFSET=0
VCAPS="video/x-raw-yuv,width=352,height=288,framerate=15/1"
DEST=192.168.1.126
#DEST=192.168.1.126
DEST=localhost
gst-launch -v gstrtpbin name=rtpbin \
v4l2src ! videorate ! ffmpegcolorspace ! $VCAPS ! ffenc_h263p ! rtph263ppay ! rtpbin.send_rtp_sink_0 \
rtpbin.send_rtp_src_0 ! queue ! udpsink host=$HOST port=5000 ts-offset=$AOFFSET \
rtpbin.send_rtcp_src_0 ! udpsink host=$HOST port=5001 sync=false async=false \
rtpbin.send_rtp_src_0 ! queue ! udpsink host=$DEST port=5000 ts-offset=$AOFFSET \
rtpbin.send_rtcp_src_0 ! udpsink host=$DEST port=5001 sync=false async=false \
udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0 \
autoaudiosrc ! audioconvert ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1 \
rtpbin.send_rtp_src_1 ! queue ! udpsink host=$HOST port=5002 ts-offset=$VOFFSET \
rtpbin.send_rtcp_src_1 ! udpsink host=$HOST port=5003 sync=false async=false \
rtpbin.send_rtp_src_1 ! queue ! udpsink host=$DEST port=5002 ts-offset=$VOFFSET \
rtpbin.send_rtcp_src_1 ! udpsink host=$DEST port=5003 sync=false async=false \
udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1