From a48fffedbf730150a6792a45773b15d2a1dda911 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 28 Feb 2011 18:32:54 +0100 Subject: [PATCH 01/15] Automatic update of common submodule From 1de7f6a to 6aec6b9 --- common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common b/common index 1de7f6ab2d..6aec6b9716 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 1de7f6ab2d4bc1af69f06079cf0f4e2cbbfdc178 +Subproject commit 6aec6b9716c184c60c4bc6a5916a2471cfa8c8cd From ac6535560eaad91fe1eed4c1de7d159e66dfd2f7 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 28 Feb 2011 19:13:41 +0100 Subject: [PATCH 02/15] configure.ac: export plugin description more platform independent Fixes #642504. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index d86ffde1af..311c3bc467 100644 --- a/configure.ac +++ b/configure.ac @@ -1103,7 +1103,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 *** From 1ccadf5c308239df22ad429788fc81b7b152feaf Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 28 Feb 2011 19:16:00 +0100 Subject: [PATCH 03/15] configure.ac: cygwin/mingw; enable plugin linking to static lib Useful for DirectX plugin(s). Fixes #642507. --- configure.ac | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac index 311c3bc467..dd0507aa14 100644 --- a/configure.ac +++ b/configure.ac @@ -43,6 +43,8 @@ dnl we override it here if we need to for the release candidate of new series GST_MAJORMINOR=0.10 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 From 4e9daf0e494048939668402e220842f248058eb6 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Tue, 1 Mar 2011 22:40:19 +0200 Subject: [PATCH 04/15] example: fix the variable name for the ip-address Fix the name in the launch pipeline and use a value of "localhost" by default. --- tests/examples/rtp/server-v4l2-H263p-alsasrc-AMR.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/examples/rtp/server-v4l2-H263p-alsasrc-AMR.sh b/tests/examples/rtp/server-v4l2-H263p-alsasrc-AMR.sh index dd7fc8997a..d8c13a748a 100755 --- a/tests/examples/rtp/server-v4l2-H263p-alsasrc-AMR.sh +++ b/tests/examples/rtp/server-v4l2-H263p-alsasrc-AMR.sh @@ -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 From d2ee8b979d84f0e714e502116b6fafd9f1d68d16 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Wed, 2 Mar 2011 10:56:33 +0200 Subject: [PATCH 05/15] monoscope: stack needs to be size+1 as we put a end-marker into it Valgrind is still complaining about one bad read, but this takes care of the crash mentioned in the comment and in bug #564122. --- gst/monoscope/convolve.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/gst/monoscope/convolve.c b/gst/monoscope/convolve.c index 070baa4d98..584f680dae 100644 --- a/gst/monoscope/convolve.c +++ b/gst/monoscope/convolve.c @@ -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; From 0ffd4ff8c06d655477928d562a1c896c2a2e4faa Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Wed, 2 Mar 2011 10:25:29 +0100 Subject: [PATCH 06/15] qtdemux: arrange for non-fatal error when parsing non-vital parts --- gst/qtdemux/qtdemux.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 22803745d5..b043920f5f 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -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); From 7bc3344131a307a4da3b0f65c1d6ca6968226f6e Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Wed, 2 Mar 2011 12:59:35 +0200 Subject: [PATCH 07/15] monoscope: we have 64 colors, don't access colors[64] Fixes remaining invalid read. --- gst/monoscope/monoscope.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gst/monoscope/monoscope.c b/gst/monoscope/monoscope.c index b3fce24ac2..e6e43468c3 100644 --- a/gst/monoscope/monoscope.c +++ b/gst/monoscope/monoscope.c @@ -119,8 +119,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))) { From 3ec3bed497b488364726c87e522c05b846ed4e70 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Wed, 2 Mar 2011 13:00:31 +0200 Subject: [PATCH 08/15] monoscope: don't leak the monoscope_state data The monoscope_close() implementation was empty. --- gst/monoscope/monoscope.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/gst/monoscope/monoscope.c b/gst/monoscope/monoscope.c index e6e43468c3..98822d322c 100644 --- a/gst/monoscope/monoscope.c +++ b/gst/monoscope/monoscope.c @@ -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. @@ -155,8 +162,3 @@ monoscope_update (struct monoscope_state * stateptr, gint16 data[512]) return stateptr->display; } - -void -monoscope_close (struct monoscope_state *stateptr) -{ -} From 32dff9df75942c51b3ecbd7ffa394ef755881d50 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Fri, 28 Jan 2011 02:14:04 +0200 Subject: [PATCH 09/15] cairooverlay: Add generic Cairo overlay video element. Allows applications to connect to the "draw" signal of the element and do their custom drawing there. Includes an example application demonstrating usage. Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=595520 --- configure.ac | 9 + docs/plugins/Makefile.am | 1 + .../gst-plugins-good-plugins-docs.sgml | 1 + .../gst-plugins-good-plugins-sections.txt | 12 + ext/cairo/.gitignore | 2 + ext/cairo/Makefile.am | 39 ++- ext/cairo/gstcairo-marshal.list | 2 + ext/cairo/gstcairo.c | 9 + ext/cairo/gstcairooverlay.c | 245 ++++++++++++++++++ ext/cairo/gstcairooverlay.h | 60 +++++ tests/examples/Makefile.am | 12 +- tests/examples/cairo/.gitignore | 1 + tests/examples/cairo/Makefile.am | 11 + tests/examples/cairo/cairo_overlay.c | 199 ++++++++++++++ 14 files changed, 594 insertions(+), 9 deletions(-) create mode 100644 ext/cairo/.gitignore create mode 100644 ext/cairo/gstcairo-marshal.list create mode 100644 ext/cairo/gstcairooverlay.c create mode 100644 ext/cairo/gstcairooverlay.h create mode 100644 tests/examples/cairo/.gitignore create mode 100644 tests/examples/cairo/Makefile.am create mode 100644 tests/examples/cairo/cairo_overlay.c diff --git a/configure.ac b/configure.ac index dd0507aa14..2c87768b05 100644 --- a/configure.ac +++ b/configure.ac @@ -715,6 +715,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, [ @@ -1021,6 +1028,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) @@ -1191,6 +1199,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 diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am index 975e465ab9..f620de147d 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -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 \ diff --git a/docs/plugins/gst-plugins-good-plugins-docs.sgml b/docs/plugins/gst-plugins-good-plugins-docs.sgml index ade8dfde20..459a064c83 100644 --- a/docs/plugins/gst-plugins-good-plugins-docs.sgml +++ b/docs/plugins/gst-plugins-good-plugins-docs.sgml @@ -51,6 +51,7 @@ + diff --git a/docs/plugins/gst-plugins-good-plugins-sections.txt b/docs/plugins/gst-plugins-good-plugins-sections.txt index 60d2c45a2d..6081c67633 100644 --- a/docs/plugins/gst-plugins-good-plugins-sections.txt +++ b/docs/plugins/gst-plugins-good-plugins-sections.txt @@ -465,6 +465,18 @@ GST_CAIRO_RENDER_CLASS gst_cairo_render_get_type +
+element-cairooverlay +cairooverlay +GstCairoOverlay + +GstCairoOverlayClass +GST_TYPE_CAIRO_OVERLAY +GST_CAIRO_OVERLAY +GST_CAIRO_OVERLAY_CLASS +gst_cairo_overlay_get_type +
+
element-capssetter capssetter diff --git a/ext/cairo/.gitignore b/ext/cairo/.gitignore new file mode 100644 index 0000000000..662efe7acb --- /dev/null +++ b/ext/cairo/.gitignore @@ -0,0 +1,2 @@ +gstcairo-marshal.c +gstcairo-marshal.h diff --git a/ext/cairo/Makefile.am b/ext/cairo/Makefile.am index 40eb01bb7c..b9d97e6246 100644 --- a/ext/cairo/Makefile.am +++ b/ext/cairo/Makefile.am @@ -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 + diff --git a/ext/cairo/gstcairo-marshal.list b/ext/cairo/gstcairo-marshal.list new file mode 100644 index 0000000000..b6378703b9 --- /dev/null +++ b/ext/cairo/gstcairo-marshal.list @@ -0,0 +1,2 @@ +VOID:BOXED,UINT64,UINT64 +VOID:BOXED diff --git a/ext/cairo/gstcairo.c b/ext/cairo/gstcairo.c index d821728f33..5d4c323f01 100644 --- a/ext/cairo/gstcairo.c +++ b/ext/cairo/gstcairo.c @@ -25,6 +25,11 @@ #include #include #include + +#ifdef HAVE_CAIRO_GOBJECT +#include +#endif + #include #include @@ -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); diff --git a/ext/cairo/gstcairooverlay.c b/ext/cairo/gstcairooverlay.c new file mode 100644 index 0000000000..7bddb30b7d --- /dev/null +++ b/ext/cairo/gstcairooverlay.c @@ -0,0 +1,245 @@ +/* GStreamer + * Copyright (C) <2011> Jon Nordby + * + * 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 + * + * Example code + * |[ + * + * #include <gst/gst.h> + * #include <gst/video/video.h> + * + * ... + * + * 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, &state->width, &state->height); + * state->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->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); + * } + * + * ... + * + * cairo_overlay = gst_element_factory_make ("cairooverlay", "overlay"); + * + * 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); + * ... + * + * ]| + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gstcairooverlay.h" +#include "gstcairo-marshal.h" + +#include + +#include + +#if G_BYTE_ORDER == G_LITTLE_ENDIAN +#define ARGB_CAPS GST_VIDEO_CAPS_BGRx " ; " GST_VIDEO_CAPS_BGRA " ; " +#else +#define ARGB_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 (ARGB_CAPS) + ); + +static GstStaticPadTemplate gst_cairo_overlay_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (ARGB_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); + GstStructure *s = gst_caps_get_structure (incaps, 0); + + if (!gst_structure_get_int (s, "bpp", &(overlay->bpp))) { + return FALSE; + } + + g_signal_emit (overlay, gst_cairo_overlay_signals[SIGNAL_CAPS_CHANGED], 0, + incaps, NULL); + + return G_LIKELY (gst_video_format_parse_caps (incaps, + &overlay->caps_format, &overlay->caps_width, &overlay->caps_height)); +} + +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->bpp == 32) ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24; + + surface = + cairo_image_surface_create_for_data (GST_BUFFER_DATA (buf), format, + overlay->caps_width, overlay->caps_height, overlay->caps_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 "); + + 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 caps 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) +{ +} diff --git a/ext/cairo/gstcairooverlay.h b/ext/cairo/gstcairooverlay.h new file mode 100644 index 0000000000..a293507137 --- /dev/null +++ b/ext/cairo/gstcairooverlay.h @@ -0,0 +1,60 @@ +/* GStreamer + * Copyright (C) <2011> Jon Nordby + * + * 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 +#include +#include + +#include +#include + +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 { + GstVideoFilter parent_instance; + /* < private > */ + GstVideoFormat caps_format; + int caps_width; + int caps_height; + int bpp; +} GstCairoOverlay; + +typedef struct _GstCairoOverlayClass { + GstVideoFilterClass parent_class; +} GstCairoOverlayClass; + +GType gst_cairo_overlay_get_type(void); + +G_END_DECLS + +#endif /* __GST_CAIRO_OVERLAY_H__ */ diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am index 54e53bafb7..8faf93d8ac 100644 --- a/tests/examples/Makefile.am +++ b/tests/examples/Makefile.am @@ -4,8 +4,16 @@ else JACK_DIR= endif -SUBDIRS = audiofx equalizer $(JACK_DIR) level pulse rtp shapewipe spectrum v4l2 +if USE_CAIRO +CAIRO_DIR=cairo +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 diff --git a/tests/examples/cairo/.gitignore b/tests/examples/cairo/.gitignore new file mode 100644 index 0000000000..690585cd20 --- /dev/null +++ b/tests/examples/cairo/.gitignore @@ -0,0 +1 @@ +cairo_overlay diff --git a/tests/examples/cairo/Makefile.am b/tests/examples/cairo/Makefile.am new file mode 100644 index 0000000000..1585961acd --- /dev/null +++ b/tests/examples/cairo/Makefile.am @@ -0,0 +1,11 @@ +if USE_CAIRO_GOBJECT +if HAVE_GTK +noinst_PROGRAMS = cairo_overlay +endif +endif + +cairo_overlay_SOURCES = cairo_overlay.c +cairo_overlay_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) $(CAIRO_CFLAGS) +cairo_overlay_LDFLAGS = \ + $(GST_LIBS) -lgstinterfaces-0.10 -lgstvideo-$(GST_MAJORMINOR) \ + $(GTK_LIBS) $(CAIRO_LIBS) diff --git a/tests/examples/cairo/cairo_overlay.c b/tests/examples/cairo/cairo_overlay.c new file mode 100644 index 0000000000..f4604845ad --- /dev/null +++ b/tests/examples/cairo/cairo_overlay.c @@ -0,0 +1,199 @@ +/* GStreamer + * Copyright (C) 2011 Jon Nordby + * + * 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 +#include +#include + +#include +#include +#include + +#ifdef GDK_WINDOWING_X11 +#include +#endif + +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) +{ +#ifdef GDK_WINDOWING_X11 + video_window_xid = GDK_WINDOW_XID (widget->window); +#endif +} + +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_new (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); +} From 6810b1bab97068ecd16ad5c5f830e4ab7183a81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 2 Mar 2011 23:09:21 +0100 Subject: [PATCH 10/15] docs: Update inspected plugin data --- docs/plugins/gst-plugins-good-plugins.args | 10 ++++ .../gst-plugins-good-plugins.hierarchy | 3 +- .../gst-plugins-good-plugins.interfaces | 54 +++++++++---------- .../gst-plugins-good-plugins.prerequisites | 2 +- docs/plugins/gst-plugins-good-plugins.signals | 18 +++++++ docs/plugins/inspect/plugin-avi.xml | 2 +- docs/plugins/inspect/plugin-cairo.xml | 21 ++++++++ docs/plugins/inspect/plugin-deinterlace.xml | 4 +- 8 files changed, 82 insertions(+), 32 deletions(-) diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args index 3553b914d4..27b2788770 100644 --- a/docs/plugins/gst-plugins-good-plugins.args +++ b/docs/plugins/gst-plugins-good-plugins.args @@ -20768,6 +20768,16 @@ FALSE + +GstRtpSession::rtcp-min-interval +guint64 + +rw +Minimum RTCP interval +Minimum interval between Regular RTCP packet (in ns). +5000000000 + + GstV4l2Sink::device gchar* diff --git a/docs/plugins/gst-plugins-good-plugins.hierarchy b/docs/plugins/gst-plugins-good-plugins.hierarchy index 5585c4a857..b8e1a82619 100644 --- a/docs/plugins/gst-plugins-good-plugins.hierarchy +++ b/docs/plugins/gst-plugins-good-plugins.hierarchy @@ -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 diff --git a/docs/plugins/gst-plugins-good-plugins.interfaces b/docs/plugins/gst-plugins-good-plugins.interfaces index 7d98456987..1d66c50f5b 100644 --- a/docs/plugins/gst-plugins-good-plugins.interfaces +++ b/docs/plugins/gst-plugins-good-plugins.interfaces @@ -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 diff --git a/docs/plugins/gst-plugins-good-plugins.prerequisites b/docs/plugins/gst-plugins-good-plugins.prerequisites index 3f9042f552..743a46ffb0 100644 --- a/docs/plugins/gst-plugins-good-plugins.prerequisites +++ b/docs/plugins/gst-plugins-good-plugins.prerequisites @@ -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 diff --git a/docs/plugins/gst-plugins-good-plugins.signals b/docs/plugins/gst-plugins-good-plugins.signals index 99fec5ea36..37613c7350 100644 --- a/docs/plugins/gst-plugins-good-plugins.signals +++ b/docs/plugins/gst-plugins-good-plugins.signals @@ -662,3 +662,21 @@ guint arg1 GstPad *arg2 + +GstCairoOverlay::caps-changed +void + +GstCairoOverlay *gstcairooverlay +GstCaps *arg1 + + + +GstCairoOverlay::draw +void + +GstCairoOverlay *gstcairooverlay +CairoContext *arg1 +guint64 arg2 +guint64 arg3 + + diff --git a/docs/plugins/inspect/plugin-avi.xml b/docs/plugins/inspect/plugin-avi.xml index 8407f16c7d..d0487b2080 100644 --- a/docs/plugins/inspect/plugin-avi.xml +++ b/docs/plugins/inspect/plugin-avi.xml @@ -38,7 +38,7 @@ video_%02d source sometimes -
video/x-3ivx, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-rgb, bpp=(int){ 8, 24, 32 }, depth=(int){ 8, 24 }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xvid, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YVU9, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)true; video/x-avi-unknown
+
video/x-3ivx, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-asus, asusversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cirrus-logic-accupak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camstudio, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-compressed-yuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-rgb, bpp=(int){ 8, 24, 32 }, depth=(int){ 8, 24 }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)25, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)false, dvversion=(int)50, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-divx, divxversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-flash-video, flvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lucent, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-huffyuv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-intel-h263, variant=(string)intel, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)lead, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)microsoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, mpegversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/jpeg, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)42, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)43, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/mpeg, systemstream=(boolean)false, mpegversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msmpeg, msmpegversion=(int)41, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mszh, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; image/png, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-rle, layout=(string)microsoft, depth=(int)[ 1, 64 ], framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-indeo, indeoversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/sp5x, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-truemotion, trueversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-camtasia, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ultimotion, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)UYVY, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ati-vcr, vcrversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vdolive, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)vivo, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vmnc, version=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)videosoft, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-wmv, wmvversion=(int)3, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xvid, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-xan, wcversion=(int)4, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YUY2, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YVU9, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zlib, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-cinepak, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h264, variant=(string)itu, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-msvideocodec, msvideoversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-h263, variant=(string)xirlink, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dirac, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-ffv, ffvversion=(int)1, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-kmvc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp5, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp6-flash, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp7, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-vp8, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-mimic, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-apple-video, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-theora, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-fraps, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-aasc, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-raw-yuv, format=(fourcc)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-loco, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-zmbv, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]; video/x-dv, systemstream=(boolean)true; video/x-avi-unknown
diff --git a/docs/plugins/inspect/plugin-cairo.xml b/docs/plugins/inspect/plugin-cairo.xml index e240b369b2..80074fe064 100644 --- a/docs/plugins/inspect/plugin-cairo.xml +++ b/docs/plugins/inspect/plugin-cairo.xml @@ -9,6 +9,27 @@ GStreamer Good Plug-ins git Unknown package origin + + cairooverlay + Cairo overlay + Filter/Editor/Video + Render overlay on a video stream using Cairo + Jon Nordby <jononor@gmail.com> + + + sink + sink + always +
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 ]
+
+ + src + source + always +
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 ]
+
+
+
cairorender Cairo encoder diff --git a/docs/plugins/inspect/plugin-deinterlace.xml b/docs/plugins/inspect/plugin-deinterlace.xml index 35a5156783..791001506c 100644 --- a/docs/plugins/inspect/plugin-deinterlace.xml +++ b/docs/plugins/inspect/plugin-deinterlace.xml @@ -20,13 +20,13 @@ sink sink always -
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 ]
+
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 ]
src source always -
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 ]
+
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 ]
From fdbdbfefd2972f99e2e8566c446542fdf204b554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 2 Mar 2011 23:14:36 +0100 Subject: [PATCH 11/15] cairooverlay: Some minor cleanup --- ext/cairo/gstcairooverlay.c | 33 +++++++++++++++++++-------------- ext/cairo/gstcairooverlay.h | 23 +++++++++++++---------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/ext/cairo/gstcairooverlay.c b/ext/cairo/gstcairooverlay.c index 7bddb30b7d..bdb0a39d1b 100644 --- a/ext/cairo/gstcairooverlay.c +++ b/ext/cairo/gstcairooverlay.c @@ -98,9 +98,9 @@ #include #if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define ARGB_CAPS GST_VIDEO_CAPS_BGRx " ; " GST_VIDEO_CAPS_BGRA " ; " +#define TEMPLATE_CAPS GST_VIDEO_CAPS_BGRx " ; " GST_VIDEO_CAPS_BGRA " ; " #else -#define ARGB_CAPS GST_VIDEO_CAPS_xRGB " ; " GST_VIDEO_CAPS_ARGB " ; " +#define TEMPLATE_CAPS GST_VIDEO_CAPS_xRGB " ; " GST_VIDEO_CAPS_ARGB " ; " #endif @@ -108,14 +108,14 @@ static GstStaticPadTemplate gst_cairo_overlay_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS (ARGB_CAPS) + 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 (ARGB_CAPS) + GST_STATIC_CAPS (TEMPLATE_CAPS) ); @@ -128,6 +128,7 @@ enum SIGNAL_CAPS_CHANGED, N_SIGNALS }; + static guint gst_cairo_overlay_signals[N_SIGNALS]; static gboolean @@ -135,17 +136,18 @@ gst_cairo_overlay_set_caps (GstBaseTransform * btrans, GstCaps * incaps, GstCaps * outcaps) { GstCairoOverlay *overlay = GST_CAIRO_OVERLAY (btrans); - GstStructure *s = gst_caps_get_structure (incaps, 0); + gboolean ret; - if (!gst_structure_get_int (s, "bpp", &(overlay->bpp))) { + 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 G_LIKELY (gst_video_format_parse_caps (incaps, - &overlay->caps_format, &overlay->caps_width, &overlay->caps_height)); + return ret; } static GstFlowReturn @@ -157,11 +159,13 @@ gst_cairo_overlay_transform_ip (GstBaseTransform * btrans, GstBuffer * buf) cairo_t *cr; cairo_format_t format; - format = (overlay->bpp == 32) ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24; + 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->caps_width, overlay->caps_height, overlay->caps_width * 4); + overlay->width, overlay->height, overlay->width * 4); if (G_UNLIKELY (!surface)) return GST_FLOW_ERROR; @@ -176,6 +180,7 @@ gst_cairo_overlay_transform_ip (GstBaseTransform * btrans, GstBuffer * buf) cairo_destroy (cr); cairo_surface_destroy (surface); + return GST_FLOW_OK; } @@ -209,8 +214,8 @@ gst_cairo_overlay_class_init (GstCairoOverlayClass * klass) * 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. + * @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. */ @@ -227,7 +232,7 @@ gst_cairo_overlay_class_init (GstCairoOverlayClass * klass) /** * GstCairoOverlay::caps-changed: * @overlay: Overlay element emitting the signal. - * @caps: The caps of the element. + * @caps: The #GstCaps of the element. * * This signal is emitted when the caps of the element has changed. */ diff --git a/ext/cairo/gstcairooverlay.h b/ext/cairo/gstcairooverlay.h index a293507137..0c1ad27112 100644 --- a/ext/cairo/gstcairooverlay.h +++ b/ext/cairo/gstcairooverlay.h @@ -40,18 +40,21 @@ G_BEGIN_DECLS #define GST_IS_CAIRO_OVERLAY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_CAIRO_OVERLAY)) -typedef struct _GstCairoOverlay { - GstVideoFilter parent_instance; - /* < private > */ - GstVideoFormat caps_format; - int caps_width; - int caps_height; - int bpp; -} GstCairoOverlay; +typedef struct _GstCairoOverlay GstCairoOverlay; +typedef struct _GstCairoOverlayClass GstCairoOverlayClass; -typedef struct _GstCairoOverlayClass { +struct _GstCairoOverlay { + GstVideoFilter parent_instance; + + /* < private > */ + GstVideoFormat format; + gint width; + gint height; +}; + +struct _GstCairoOverlayClass { GstVideoFilterClass parent_class; -} GstCairoOverlayClass; +}; GType gst_cairo_overlay_get_type(void); From 08232b470e59499b547a192098e96b369c4d5359 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 2 Mar 2011 23:21:15 +0100 Subject: [PATCH 12/15] cairooverlay: The example always requires gtk-x11 Check for gtk-x11 and only build the example if it's available. --- configure.ac | 3 +++ tests/examples/Makefile.am | 6 +++++- tests/examples/cairo/Makefile.am | 5 +++-- tests/examples/cairo/cairo_overlay.c | 10 +++------- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/configure.ac b/configure.ac index 2c87768b05..dd36366d81 100644 --- a/configure.ac +++ b/configure.ac @@ -258,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) diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am index 8faf93d8ac..4437a80185 100644 --- a/tests/examples/Makefile.am +++ b/tests/examples/Makefile.am @@ -4,11 +4,15 @@ else JACK_DIR= endif -if USE_CAIRO +if USE_CAIRO_GOBJECT +if HAVE_GTK_X11 CAIRO_DIR=cairo else CAIRO_DIR= endif +else +CAIRO_DIR= +endif SUBDIRS = audiofx equalizer $(JACK_DIR) level pulse \ rtp shapewipe spectrum v4l2 $(CAIRO_DIR) diff --git a/tests/examples/cairo/Makefile.am b/tests/examples/cairo/Makefile.am index 1585961acd..5fa772d952 100644 --- a/tests/examples/cairo/Makefile.am +++ b/tests/examples/cairo/Makefile.am @@ -1,11 +1,12 @@ if USE_CAIRO_GOBJECT -if HAVE_GTK +if HAVE_GTK_X11 noinst_PROGRAMS = cairo_overlay endif endif cairo_overlay_SOURCES = cairo_overlay.c -cairo_overlay_CFLAGS = $(GST_CFLAGS) $(GTK_CFLAGS) $(CAIRO_CFLAGS) +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) diff --git a/tests/examples/cairo/cairo_overlay.c b/tests/examples/cairo/cairo_overlay.c index f4604845ad..52c947b1c2 100644 --- a/tests/examples/cairo/cairo_overlay.c +++ b/tests/examples/cairo/cairo_overlay.c @@ -25,18 +25,16 @@ * roughly based on gst_x_overlay documentation. */ - #include #include #include -#include #include #include -#ifdef GDK_WINDOWING_X11 #include -#endif + +#include static gulong video_window_xid = 0; @@ -64,9 +62,7 @@ bus_sync_handler (GstBus * bus, GstMessage * message, gpointer user_data) static void video_widget_realize_cb (GtkWidget * widget, gpointer data) { -#ifdef GDK_WINDOWING_X11 video_window_xid = GDK_WINDOW_XID (widget->window); -#endif } static GtkWidget * @@ -187,7 +183,7 @@ main (int argc, char **argv) gst_init (&argc, &argv); window = setup_gtk_window (); - overlay_state = g_new (CairoOverlayState, 1); + overlay_state = g_new0 (CairoOverlayState, 1); pipeline = setup_gst_pipeline (overlay_state); gst_element_set_state (pipeline, GST_STATE_PLAYING); From 0cd62a10ad471601b9dc5420de8548fe21d25e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Thu, 3 Mar 2011 00:16:47 +0000 Subject: [PATCH 13/15] v4l2: remove unnecessary linux/videodev.h include Causes compilation issues with newer kernel headers where the old v4l interface has been removed. https://bugzilla.gnome.org/show_bug.cgi?id=643716 --- sys/v4l2/v4l2_calls.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sys/v4l2/v4l2_calls.h b/sys/v4l2/v4l2_calls.h index a47872dd43..d2e2c723e5 100644 --- a/sys/v4l2/v4l2_calls.h +++ b/sys/v4l2/v4l2_calls.h @@ -30,7 +30,6 @@ # include #else # include -# include # include # define v4l2_fd_open(fd, flags) (fd) # define v4l2_close close From edfa99ef3176678d8c435097a82695724d5f1e76 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Fri, 4 Mar 2011 15:42:19 +0200 Subject: [PATCH 14/15] pulsesink: fix the xml in the docs --- ext/pulse/pulsesink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index c45acb93e0..adeae04dc7 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -1915,7 +1915,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 pulseaudio api docs. + * found in the pulseaudio api docs. * * Below is an example for registering as a music application to pulseaudio. * |[ From 89914439b79309f1adc5b9272c84682181b5c895 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Fri, 4 Mar 2011 15:50:01 +0200 Subject: [PATCH 15/15] pulsesink: add a doc example for setting stream-properties --- ext/pulse/pulsesink.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index adeae04dc7..59e14058d1 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -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". * */