diff --git a/.gitignore b/.gitignore
index 8ed46cad4b..3d38bceb3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,6 +52,7 @@ Makefile
/gst-libs/gst/audio/audio-marshal.[ch]
/gst-libs/gst/video/video-marshal.[ch]
/gst-libs/gst/*/*-enumtypes.[ch]
+/tests/examples/compositor/crossfade
/tests/examples/playback/playback-test
tmp-orc.c
diff --git a/configure.ac b/configure.ac
index dfd22ccbcd..d6f2070d63 100644
--- a/configure.ac
+++ b/configure.ac
@@ -498,6 +498,7 @@ AG_GST_CHECK_PLUGIN(audioconvert)
AG_GST_CHECK_PLUGIN(audiomixer)
AG_GST_CHECK_PLUGIN(audiorate)
AG_GST_CHECK_PLUGIN(audiotestsrc)
+AG_GST_CHECK_PLUGIN(compositor)
AG_GST_CHECK_PLUGIN(encoding)
AG_GST_CHECK_PLUGIN(videoconvert)
AG_GST_CHECK_PLUGIN(gio)
@@ -922,6 +923,7 @@ gst/audiomixer/Makefile
gst/audiorate/Makefile
gst/audioresample/Makefile
gst/audiotestsrc/Makefile
+gst/compositor/Makefile
gst/encoding/Makefile
gst/videoconvert/Makefile
gst/gio/Makefile
@@ -1008,6 +1010,7 @@ tests/check/Makefile
tests/examples/Makefile
tests/examples/app/Makefile
tests/examples/audio/Makefile
+tests/examples/compositor/Makefile
tests/examples/decodebin_next/Makefile
tests/examples/dynamic/Makefile
tests/examples/encoding/Makefile
diff --git a/docs/plugins/gst-plugins-base-plugins-docs.sgml b/docs/plugins/gst-plugins-base-plugins-docs.sgml
index 8fd7d887ea..57659de187 100644
--- a/docs/plugins/gst-plugins-base-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-base-plugins-docs.sgml
@@ -31,6 +31,7 @@
+
@@ -140,6 +141,7 @@
+
diff --git a/docs/plugins/gst-plugins-base-plugins-sections.txt b/docs/plugins/gst-plugins-base-plugins-sections.txt
index 75f5dad8a3..c5c2b54b9a 100644
--- a/docs/plugins/gst-plugins-base-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-base-plugins-sections.txt
@@ -226,6 +226,23 @@ GST_TYPE_CLOCK_OVERLAY
gst_clock_overlay_get_type
+
+element-compositor
+compositor
+GstCompositor
+GstCompositorBackground
+
+GstCompositorClass
+GST_COMPOSITOR
+GST_COMPOSITOR_CAST
+GST_IS_COMPOSITOR
+GST_COMPOSITOR_CLASS
+GST_IS_COMPOSITOR_CLASS
+GST_TYPE_COMPOSITOR
+
+gst_compositor_get_type
+
+
element-decodebin
decodebin
diff --git a/docs/plugins/gst-plugins-base-plugins.hierarchy b/docs/plugins/gst-plugins-base-plugins.hierarchy
index 252b0bbac1..9f5109ba84 100644
--- a/docs/plugins/gst-plugins-base-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-base-plugins.hierarchy
@@ -19,6 +19,8 @@ GObject
GstAudioInterleave
GstAudioMixer
GstLiveAdder
+ GstVideoAggregator
+ GstCompositor
GstAudioDecoder
GstOpusDec
GstVorbisDec
diff --git a/docs/plugins/gst-plugins-base-plugins.interfaces b/docs/plugins/gst-plugins-base-plugins.interfaces
index 46b2a896b1..4f47ee0cbd 100644
--- a/docs/plugins/gst-plugins-base-plugins.interfaces
+++ b/docs/plugins/gst-plugins-base-plugins.interfaces
@@ -11,6 +11,7 @@ GstAudioInterleave GstChildProxy
GstAudioMixer GstChildProxy
GstBin GstChildProxy
GstCdParanoiaSrc GstURIHandler
+GstCompositor GstChildProxy
GstDecodeBin GstChildProxy
GstDecodebin3 GstChildProxy
GstEncodeBin GstChildProxy
diff --git a/docs/plugins/inspect/plugin-compositor.xml b/docs/plugins/inspect/plugin-compositor.xml
new file mode 100644
index 0000000000..75d99ba129
--- /dev/null
+++ b/docs/plugins/inspect/plugin-compositor.xml
@@ -0,0 +1,34 @@
+
+ compositor
+ Compositor
+ ../../gst/compositor/.libs/libgstcompositor.so
+ libgstcompositor.so
+ 1.15.0.1
+ LGPL
+
+ GStreamer Base Plug-ins git
+ Unknown package origin
+
+
+ compositor
+ Compositor
+ Filter/Editor/Video/Compositor
+ Composite multiple video streams
+ Wim Taymans <wim@fluendo.com>, Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+
+ sink_%u
+ sink
+ request
+ video/x-raw, format=(string){ AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, RGBx, BGRx }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
+
+
+ src
+ source
+ always
+ video/x-raw, format=(string){ AYUV, BGRA, ARGB, RGBA, ABGR, Y444, Y42B, YUY2, UYVY, YVYU, I420, YV12, NV12, NV21, Y41B, RGB, BGR, xRGB, xBGR, RGBx, BGRx }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]
+
+
+
+
+
\ No newline at end of file
diff --git a/gst/compositor/Makefile.am b/gst/compositor/Makefile.am
index 193d153d95..a3b1e8e422 100644
--- a/gst/compositor/Makefile.am
+++ b/gst/compositor/Makefile.am
@@ -11,14 +11,10 @@ libgstcompositor_la_SOURCES = \
nodist_libgstcompositor_la_SOURCES = $(ORC_NODIST_SOURCES)
libgstcompositor_la_CFLAGS = \
- -I$(top_srcdir)/gst-libs \
- -I$(top_builddir)/gst-libs \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(ORC_CFLAGS)
libgstcompositor_la_LIBADD = \
- $(top_builddir)/gst-libs/gst/video/libgstbadvideo-$(GST_API_VERSION).la \
- $(GST_PLUGINS_BASE_LIBS) \
- -lgstvideo-@GST_API_VERSION@ \
+ $(top_builddir)/gst-libs/gst/video/libgstvideo-$(GST_API_VERSION).la \
$(GST_BASE_LIBS) $(GST_LIBS) $(ORC_LIBS) $(LIBM)
libgstcompositor_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
diff --git a/gst/compositor/meson.build b/gst/compositor/meson.build
index f379a31a07..4f38fe7a3b 100644
--- a/gst/compositor/meson.build
+++ b/gst/compositor/meson.build
@@ -24,9 +24,9 @@ endif
gstcompositor = library('gstcompositor',
compositor_sources, orc_c, orc_h,
- c_args : gst_plugins_bad_args + ['-DGST_USE_UNSTABLE_API'],
+ c_args : gst_plugins_base_args,
include_directories : [configinc],
- dependencies : [gstbadvideo_dep, gstvideo_dep, gstbase_dep, orc_dep, libm],
+ dependencies : [video_dep, gst_base_dep, orc_dep, libm],
install : true,
install_dir : plugins_install_dir,
)
diff --git a/gst/meson.build b/gst/meson.build
index 8986eea8b4..91be2a00b7 100644
--- a/gst/meson.build
+++ b/gst/meson.build
@@ -1,5 +1,5 @@
foreach plugin : ['adder', 'app', 'audioconvert', 'audiomixer', 'audiorate', 'audioresample',
- 'audiotestsrc', 'encoding', 'gio', 'overlaycomposition', 'pbtypes', 'playback',
+ 'audiotestsrc', 'compositor', 'encoding', 'gio', 'overlaycomposition', 'pbtypes', 'playback',
'rawparse', 'subparse', 'tcp', 'typefind', 'videoconvert', 'videorate', 'videoscale',
'videotestsrc', 'volume']
if not get_option(plugin).disabled()
diff --git a/meson_options.txt b/meson_options.txt
index 4415c2f5a2..e7af4dd455 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -35,6 +35,7 @@ option('audiomixer', type : 'feature', value : 'auto')
option('audiorate', type : 'feature', value : 'auto')
option('audioresample', type : 'feature', value : 'auto')
option('audiotestsrc', type : 'feature', value : 'auto')
+option('compositor', type : 'feature', value : 'auto')
option('encoding', type : 'feature', value : 'auto')
option('gio', type : 'feature', value : 'auto')
option('overlaycomposition', type : 'feature', value : 'auto')
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 8fe1122151..76718eed9c 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -100,6 +100,12 @@ else
check_audiomixer =
endif
+if USE_PLUGIN_COMPOSITOR
+check_compositor = elements/compositor
+else
+check_compositor =
+endif
+
if USE_PLUGIN_PLAYBACK
check_playback = elements/decodebin elements/playbin \
elements/playbin-complex elements/streamsynchronizer \
@@ -182,7 +188,7 @@ check_adder =
endif
if HAVE_ORC
-check_orc = orc/video orc/audio orc/audiomixer orc/adder orc/volume orc/videotestsrc
+check_orc = orc/video orc/audio orc/audiomixer orc/adder orc/compositor orc/volume orc/videotestsrc
else
check_orc =
endif
@@ -274,6 +280,7 @@ check_PROGRAMS = \
$(check_audiorate) \
$(check_audioresample) \
$(check_audiotestsrc) \
+ $(check_compositor) \
$(check_encodebin) \
$(check_gio) \
$(check_gl) \
@@ -704,6 +711,13 @@ elements_audiotestsrc_CFLAGS = \
$(GST_BASE_CFLAGS) \
$(AM_CFLAGS)
+elements_compositor_LDADD = \
+ $(top_builddir)/gst-libs/gst/video/libgstvideo-@GST_API_VERSION@.la \
+ $(GST_BASE_LIBS) $(LDADD)
+elements_compositor_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+
elements_libvisual_LDADD = $(LDADD)
elements_libvisual_CFLAGS = $(CFLAGS) $(AM_CFLAGS)
@@ -939,6 +953,9 @@ nodist_orc_adder_SOURCES = orc/adder.c
orc_audiomixer_CFLAGS = $(ORC_CFLAGS)
orc_audiomixer_LDADD = $(ORC_LIBS) -lorc-test-0.4
nodist_orc_audiomixer_SOURCES = orc/audiomixer.c
+orc_compositor_CFLAGS = $(ORC_CFLAGS)
+orc_compositor_LDADD = $(ORC_LIBS) -lorc-test-0.4
+nodist_orc_compositor_SOURCES = orc/compositor.c
orc_volume_CFLAGS = $(ORC_CFLAGS)
orc_volume_LDADD = $(ORC_LIBS) -lorc-test-0.4
nodist_orc_volume_SOURCES = orc/volume.c
@@ -962,6 +979,10 @@ orc/adder.c: $(top_srcdir)/gst/adder/gstadderorc.orc
$(MKDIR_P) orc/
$(ORCC) --test -o $@ $<
+orc/compositor.c: $(top_srcdir)/gst/compositor/compositororc.orc
+ $(MKDIR_P) orc/
+ $(ORCC) --test -o $@ $<
+
orc/volume.c: $(top_srcdir)/gst/volume/gstvolumeorc.orc
$(MKDIR_P) orc/
$(ORCC) --test -o $@ $<
diff --git a/tests/check/elements/.gitignore b/tests/check/elements/.gitignore
index 3537acd134..4fa55bbfb3 100644
--- a/tests/check/elements/.gitignore
+++ b/tests/check/elements/.gitignore
@@ -9,6 +9,7 @@ audiomixer
audiorate
audioresample
audiotestsrc
+compositor
decodebin
encodebin
glbin
diff --git a/tests/check/meson.build b/tests/check/meson.build
index fdd4853c4c..e988dbf125 100644
--- a/tests/check/meson.build
+++ b/tests/check/meson.build
@@ -62,6 +62,7 @@ if host_machine.system() != 'windows'
[ 'libs/rtp.c' ],
[ 'libs/rtspconnection.c' ],
[ 'libs/video.c' ],
+ [ 'elements/compositor.c', not core_conf.has('HAVE_UNISTD_H') ],
[ 'elements/libvisual.c', not is_variable('libvisual_dep') or not libvisual_dep.found() ],
[ 'elements/encodebin.c', not theoraenc_dep.found() or not vorbisenc_dep.found() ],
[ 'elements/multifdsink.c', not core_conf.has('HAVE_SYS_SOCKET_H') or not core_conf.has('HAVE_UNISTD_H') ],
diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am
index 059a154355..0eed5739f8 100644
--- a/tests/examples/Makefile.am
+++ b/tests/examples/Makefile.am
@@ -8,8 +8,8 @@ else
GL_DIR=
endif
-SUBDIRS = app audio decodebin_next dynamic fft gio $(GL_DIR) $(GTK_SUBDIRS) overlay overlaycomposition playrec encoding
-DIST_SUBDIRS = app audio dynamic decodebin_next fft gio gl playback overlay overlaycomposition seek snapshot playrec encoding
+SUBDIRS = app audio compositor decodebin_next dynamic fft gio $(GL_DIR) $(GTK_SUBDIRS) overlay overlaycomposition playrec encoding
+DIST_SUBDIRS = app audio compositor decodebin_next dynamic fft gio gl playback overlay overlaycomposition seek snapshot playrec encoding
include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/tests/examples/compositor/Makefile.am b/tests/examples/compositor/Makefile.am
new file mode 100644
index 0000000000..a3bb99aefc
--- /dev/null
+++ b/tests/examples/compositor/Makefile.am
@@ -0,0 +1,5 @@
+noinst_PROGRAMS = crossfade
+
+crossfade_SOURCES = crossfade.c
+crossfade_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CONTROLLER_CFLAGS) $(GST_CFLAGS)
+crossfade_LDADD = $(GST_CONTROLLER_LIBS) $(GST_LIBS)
diff --git a/tests/examples/compositor/meson.build b/tests/examples/compositor/meson.build
new file mode 100644
index 0000000000..0ad55b41ab
--- /dev/null
+++ b/tests/examples/compositor/meson.build
@@ -0,0 +1,5 @@
+executable('crossfade', 'crossfade.c',
+ include_directories: [configinc],
+ c_args: ['-DHAVE_CONFIG_H'],
+ dependencies: [gst_controller_dep, gst_dep],
+ install: false)
diff --git a/tests/examples/meson.build b/tests/examples/meson.build
index 011b811b4a..44d28e298d 100644
--- a/tests/examples/meson.build
+++ b/tests/examples/meson.build
@@ -1,5 +1,6 @@
subdir('app')
subdir('audio')
+subdir('compositor')
subdir('dynamic')
subdir('decodebin_next')
subdir('encoding')