summaryrefslogtreecommitdiffstats
path: root/meta-openembedded/meta-multimedia/recipes-multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openembedded/meta-multimedia/recipes-multimedia')
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch83
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch92
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb44
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch50
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb31
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb34
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch70
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch31
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch49
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch605
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb23
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb21
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch76
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb73
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch36
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb61
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb43
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch33
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch45
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch47
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb47
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch193
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch58
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch38
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c487
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h194
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb53
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch63
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb34
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb18
-rwxr-xr-xmeta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch14
-rwxr-xr-xmeta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch21
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb38
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch10
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in420
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb100
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch34
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb40
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch49
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch15
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch104
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc113
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch279
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch293
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch45
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch49
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch26
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch96
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch41
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch116
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb28
133 files changed, 6620 insertions, 0 deletions
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch
new file mode 100644
index 000000000..64130d900
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch
@@ -0,0 +1,37 @@
+From c17129561e784bb9efebee2380349f121db0a9db Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Wed, 5 Oct 2016 10:56:33 -0300
+Subject: [PATCH 1/3] Fix asneeded
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://git.backbone.ws/portage/overlay/commit/7a069112054fbb5dc94a857e9c020a38cb1c6fde
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 3b2aa7d..0489fc1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -29,11 +29,11 @@ dep:
+
+ $(SND_PCM_BIN): $(SND_PCM_OBJECTS)
+ @echo LD $@
+- $(Q)$(LD) $(LDFLAGS) $(SND_PCM_LIBS) $(SND_PCM_OBJECTS) -o $(SND_PCM_BIN)
++ $(Q)$(LD) $(LDFLAGS) $(SND_PCM_OBJECTS) -o $(SND_PCM_BIN) $(SND_PCM_LIBS)
+
+ $(SND_CTL_BIN): $(SND_CTL_OBJECTS)
+ @echo LD $@
+- $(Q)$(LD) $(LDFLAGS) $(SND_CTL_LIBS) $(SND_CTL_OBJECTS) -o $(SND_CTL_BIN)
++ $(Q)$(LD) $(LDFLAGS) $(SND_CTL_OBJECTS) -o $(SND_CTL_BIN) $(SND_CTL_LIBS)
+
+ %.o: %.c
+ @echo GCC $<
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch
new file mode 100644
index 000000000..efce38070
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch
@@ -0,0 +1,83 @@
+From d5c6c92045f9b6ad32365f39b8cc77f2fcd7d0f5 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Wed, 5 Oct 2016 10:57:29 -0300
+Subject: [PATCH 2/3] Fix Eq CAPS plugin name
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://git.backbone.ws/portage/overlay/commit/7a069112054fbb5dc94a857e9c020a38cb1c6fde
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ README | 8 ++++----
+ ctl_equal.c | 2 +-
+ pcm_equal.c | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/README b/README
+index b77fd2d..2df3dc5 100644
+--- a/README
++++ b/README
+@@ -1,11 +1,11 @@
+ Alsaequal is a real-time adjustable equalizer plugin for ALSA. It can
+ be adjusted using any ALSA compatible mixer, e.g. alsamixergui.
+
+-Alsaequal uses the Eq CAPS LADSPA Plugin for audio processing, actually
++Alsaequal uses the Eq10 CAPS LADSPA Plugin for audio processing, actually
+ alsaequal is a generic LADSPA plugin interface with real-time access to
+ the LADSPA controls (the LADSPA plugin included with alsa doesn't allow
+ for real-time controls) but it was developed for and only tested with
+-Eq CAPS LADSPA plugin. You are welcome to try it with other plugins, it
++Eq10 CAPS LADSPA plugin. You are welcome to try it with other plugins, it
+ may work. Let me know how it goes, you can reach me at
+ <charles@thedigitalmachine.net>.
+
+@@ -66,7 +66,7 @@ ctl.<name_equal> {
+ library -- location of the LADSPA library, the default is
+ "/usr/lib/ladspa/caps.so"
+ module -- module name within the LADSPA library, the deafault
+- is "Eq"
++ is "Eq10"
+ channels -- number of channels, the default is 2
+ }
+
+@@ -81,7 +81,7 @@ pcm.<name_pcm> {
+ library -- location of the LADSPA library, the default is
+ "/usr/lib/ladspa/caps.so"
+ module -- module name within the LADSPA library, the deafault
+- is "Eq"
++ is "Eq10"
+ channels -- number of channels, the default is 2
+ }
+
+diff --git a/ctl_equal.c b/ctl_equal.c
+index 40747d4..afba793 100644
+--- a/ctl_equal.c
++++ b/ctl_equal.c
+@@ -167,7 +167,7 @@ SND_CTL_PLUGIN_DEFINE_FUNC(equal)
+ snd_ctl_equal_t *equal;
+ const char *controls = ".alsaequal.bin";
+ const char *library = "/usr/lib/ladspa/caps.so";
+- const char *module = "Eq";
++ const char *module = "Eq10";
+ long channels = 2;
+ const char *sufix = " Playback Volume";
+ int err, i, index;
+diff --git a/pcm_equal.c b/pcm_equal.c
+index 2bc87fb..b0b4265 100644
+--- a/pcm_equal.c
++++ b/pcm_equal.c
+@@ -151,7 +151,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(equal)
+ snd_config_t *sconf = NULL;
+ const char *controls = ".alsaequal.bin";
+ const char *library = "/usr/lib/ladspa/caps.so";
+- const char *module = "Eq";
++ const char *module = "Eq10";
+ long channels = 2;
+ int err;
+
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch
new file mode 100644
index 000000000..1c2503ed9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch
@@ -0,0 +1,92 @@
+From 665f68a863b4ac2e21b0a994dce7e2720c03aa9d Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Wed, 5 Oct 2016 11:02:18 -0300
+Subject: [PATCH 3/3] Fix mixer
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://git.backbone.ws/portage/overlay/commit/7a069112054fbb5dc94a857e9c020a38cb1c6fde
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ ctl_equal.c | 9 ++++++---
+ ladspa_utils.c | 6 ++++--
+ pcm_equal.c | 6 ++++--
+ 3 files changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/ctl_equal.c b/ctl_equal.c
+index afba793..dd90e88 100644
+--- a/ctl_equal.c
++++ b/ctl_equal.c
+@@ -263,7 +263,8 @@ SND_CTL_PLUGIN_DEFINE_FUNC(equal)
+ for(i = 0; i < equal->num_input_controls; i++) {
+ if(equal->control_data->control[i].type == LADSPA_CNTRL_INPUT) {
+ index = equal->control_data->control[i].index;
+- if(equal->klass->PortDescriptors[index] !=
++ if((equal->klass->PortDescriptors[index] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL)) !=
+ (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL)) {
+ SNDERR("Problem with control file %s, %d.", controls, index);
+ return -1;
+@@ -284,12 +285,14 @@ SND_CTL_PLUGIN_DEFINE_FUNC(equal)
+ }
+
+ /* Make sure that the control file makes sense */
+- if(equal->klass->PortDescriptors[equal->control_data->input_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->input_index] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO))!=
+ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+ }
+- if(equal->klass->PortDescriptors[equal->control_data->output_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->output_index] &
++ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO))!=
+ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+diff --git a/ladspa_utils.c b/ladspa_utils.c
+index 7b596da..0c00800 100644
+--- a/ladspa_utils.c
++++ b/ladspa_utils.c
+@@ -354,10 +354,12 @@ LADSPA_Control * LADSPAcontrolMMAP(const LADSPA_Descriptor *psDescriptor,
+ default_controls->control[index].type = LADSPA_CNTRL_OUTPUT;
+ }
+ index++;
+- } else if(psDescriptor->PortDescriptors[i] ==
++ } else if((psDescriptor->PortDescriptors[i] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) ==
+ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) {
+ default_controls->input_index = i;
+- } else if(psDescriptor->PortDescriptors[i] ==
++ } else if((psDescriptor->PortDescriptors[i] &
++ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) ==
+ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) {
+ default_controls->output_index = i;
+ }
+diff --git a/pcm_equal.c b/pcm_equal.c
+index b0b4265..8d98371 100644
+--- a/pcm_equal.c
++++ b/pcm_equal.c
+@@ -231,12 +231,14 @@ SND_PCM_PLUGIN_DEFINE_FUNC(equal)
+ }
+
+ /* Make sure that the control file makes sense */
+- if(equal->klass->PortDescriptors[equal->control_data->input_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->input_index] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) !=
+ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+ }
+- if(equal->klass->PortDescriptors[equal->control_data->output_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->output_index] &
++ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) !=
+ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb
new file mode 100644
index 000000000..3bed70e1a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "A real-time adjustable equalizer plugin for ALSA"
+HOMEPAGE = "https://web.archive.org/web/20161105202833/http://thedigitalmachine.net/alsaequal.html"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
+
+DEPENDS = "alsa-lib"
+
+SRC_URI = " \
+ https://launchpad.net/ubuntu/+archive/primary/+files/alsaequal_${PV}.orig.tar.bz2 \
+ file://0001-Fix-asneeded.patch \
+ file://0002-Fix-Eq-CAPS-plugin-name.patch \
+ file://0003-Fix-mixer.patch \
+"
+
+SRC_URI[md5sum] = "d2edc7710c72cbf3ab297c414e35ebda"
+SRC_URI[sha256sum] = "916e7d152added24617efc350142438a46099efe062bd8781d36dbf10b4e6ff0"
+
+S = "${WORKDIR}/alsaequal"
+
+EXTRA_OEMAKE = " \
+ Q='' \
+ CC='${CC}' \
+ LD='${CC}' \
+ LDFLAGS='${LDFLAGS} -shared -lasound' \
+ CFLAGS='${CFLAGS} -I. -funroll-loops -ffast-math -fPIC -DPIC' \
+ SND_PCM_LIBS='-lasound' \
+ SND_CTL_LIBS='-lasound' \
+"
+
+do_compile() {
+ oe_runmake all
+}
+
+do_install() {
+ install -Dm 0644 libasound_module_ctl_equal.so ${D}${libdir}/alsa-lib/libasound_module_ctl_equal.so
+ install -Dm 0644 libasound_module_pcm_equal.so ${D}${libdir}/alsa-lib/libasound_module_pcm_equal.so
+}
+
+RDEPENDS_${PN} += " \
+ alsa-utils \
+ caps \
+"
+
+FILES_${PN} = "${libdir}/alsa-lib/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch
new file mode 100644
index 000000000..bd5e1b603
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch
@@ -0,0 +1,50 @@
+From 0cc7362e171616dcfeb93c6e1576362761bf14e5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 31 Jan 2018 18:37:16 -0800
+Subject: [PATCH] Do not use obsolete pow10f() function
+
+exp10 name is standardized in TS 18661-4 and its
+available in glibc since version 2.1
+it has been now removed from glibc 2.27+
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dsp/v4f_IIR2.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/dsp/v4f_IIR2.h b/dsp/v4f_IIR2.h
+index a68ecf5..ebd1234 100644
+--- a/dsp/v4f_IIR2.h
++++ b/dsp/v4f_IIR2.h
+@@ -33,7 +33,7 @@
+ namespace DSP {
+
+ #ifdef __APPLE__
+-inline float pow10f(float f) {return pow(10,f);}
++inline float exp10f(float f) {return __exp10f(f);}
+ #endif
+
+ class RBJv4
+@@ -142,7 +142,7 @@ class IIR2v4
+ /* A = pow (10, gain / 40) */
+ v4f_t A = (v4f_t) {.025,.025,.025,.025};
+ A *= gain;
+- A = v4f_map<pow10f> (A);
++ A = v4f_map<exp10f> (A);
+
+ RBJv4 p (f, Q);
+
+@@ -429,7 +429,7 @@ class IIR2v4Bank
+ /* A = pow (10, gain / 40) */
+ v4f_t A = (v4f_t) {.025,.025,.025,.025};
+ A *= gain[i];
+- A = v4f_map<pow10f> (A);
++ A = v4f_map<exp10f> (A);
+
+ RBJv4 p (f[i], Q[i]);
+
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch
new file mode 100644
index 000000000..1087b0e79
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch
@@ -0,0 +1,46 @@
+From a5cea22294a9acb6eed955bd415f562a6cc36482 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 22 Mar 2017 11:54:23 -0700
+Subject: [PATCH] basic.h: Use c99 supported stdint types
+
+include stdint.h for getting the definitions for int types
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ basics.h | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/basics.h b/basics.h
+index 643d96e..1dc2fa7 100644
+--- a/basics.h
++++ b/basics.h
+@@ -46,17 +46,18 @@
+
+ #include <assert.h>
+ #include <stdio.h>
++#include <stdint.h>
+
+ #include "ladspa.h"
+
+-typedef __int8_t int8;
+-typedef __uint8_t uint8;
+-typedef __int16_t int16;
+-typedef __uint16_t uint16;
+-typedef __int32_t int32;
+-typedef __uint32_t uint32;
+-typedef __int64_t int64;
+-typedef __uint64_t uint64;
++typedef int8_t int8;
++typedef uint8_t uint8;
++typedef int16_t int16;
++typedef uint16_t uint16;
++typedef int32_t int32;
++typedef uint32_t uint32;
++typedef int64_t int64;
++typedef uint64_t uint64;
+
+ #define MIN_GAIN 1e-6 /* -120 dB */
+ /* smallest non-denormal 32 bit IEEE float is 1.18e-38 */
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch
new file mode 100644
index 000000000..1a050af91
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch
@@ -0,0 +1,32 @@
+From 1ea09653692efdd6443fb6770e8523bf6c9e49b9 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Thu, 6 Oct 2016 11:54:07 -0300
+Subject: Avoid ambiguity in div invocation
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://anonscm.debian.org/cgit/pkg-multimedia/caps.git/commit/?id=9a99c225fb813ae69f146e3d90f7b47bdbd97708
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ AutoFilter.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/AutoFilter.cc b/AutoFilter.cc
+index fc087d0..bd6b12f 100644
+--- a/AutoFilter.cc
++++ b/AutoFilter.cc
+@@ -69,7 +69,7 @@ AutoFilter::activate()
+ void
+ AutoFilter::cycle (uint frames)
+ {
+- div_t qr = div (frames, blocksize);
++ div_t qr = div ((int)frames, (int)blocksize);
+ int blocks = qr.quot;
+ if (qr.rem) ++blocks;
+ double over_blocks = 1./blocks;
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch
new file mode 100644
index 000000000..3abd38189
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch
@@ -0,0 +1,18 @@
+Change the order of linker flags such that -shared is appearig after -pie/-fpie
+this helps in building the package when secuiry flags are enabled
+
+-Khem
+
+Index: caps-0.9.24/Makefile
+===================================================================
+--- caps-0.9.24.orig/Makefile
++++ caps-0.9.24/Makefile
+@@ -14,7 +14,7 @@ STRIP = strip
+ -include defines.make
+
+ CFLAGS += $(OPTS) $(_CFLAGS)
+-LDFLAGS += $(_LDFLAGS) $(CFLAGS)
++LDFLAGS += $(CFLAGS) $(_LDFLAGS)
+
+ PLUG = caps
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb
new file mode 100644
index 000000000..fe864c49c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "The CAPS Audio Plugin Suite - LADSPA plugin suite"
+HOMEPAGE = "http://quitte.de/dsp/caps.html"
+LICENSE = "GPL-3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "http://quitte.de/dsp/${PN}_${PV}.tar.bz2 \
+ file://Avoid-ambiguity-in-div-invocation.patch \
+ file://0001-basic.h-Use-c99-supported-stdint-types.patch \
+ file://append_ldflags.patch \
+ file://0001-Do-not-use-obsolete-pow10f-function.patch \
+ "
+
+SRC_URI[md5sum] = "c1d634038dcb54702306c0e30cb1c626"
+SRC_URI[sha256sum] = "f746feba57af316b159f0169de5d78b4fd1064c2c0c8017cb5856b2f22e83f20"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+EXTRA_OEMAKE = " \
+ CC='${CXX}' \
+ CFLAGS='${CFLAGS} -ffast-math -funroll-loops -fPIC -DPIC' \
+ ARCH='' \
+"
+do_compile() {
+ oe_runmake all
+}
+
+do_install() {
+ install -Dm 0644 caps.so ${D}${libdir}/ladspa/caps.so
+}
+
+FILES_${PN} = "${libdir}/ladspa/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
new file mode 100644
index 000000000..27fa0e585
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
@@ -0,0 +1,34 @@
+SUMMARY = "cdparanoia library"
+DESCRIPTION = "library used to read audio CDs, which is able to perform \
+error corrections, hence the name paranoia."
+HOMEPAGE = "https://www.xiph.org/"
+SECTION = "multimedia"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING-LGPL;md5=d370feaa1c9edcdbd29ca27ea3d2304d"
+
+SRC_URI = "http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-${PV}.src.tgz \
+ file://0001-Use-DESTDIR-in-install-Makefile-rule.patch \
+ file://0002-interface-remove-C-reserved-keyword.patch \
+ file://0003-Fix-missing-shared-object-LDFLAGS.patch \
+ file://dont-use-internal-configs.patch \
+ file://out-of-tree-build.patch \
+ file://0001-check-for-null-buffer-before-trying-a-byteswap.patch \
+ file://0002-Fix-printf-format-errors.patch \
+ file://0001-utils-Use-c99-compiler-independent-types.patch \
+ "
+SRC_URI[md5sum] = "b304bbe8ab63373924a744eac9ebc652"
+SRC_URI[sha256sum] = "005db45ef4ee017f5c32ec124f913a0546e77014266c6a1c50df902a55fe64df"
+
+# Uppercase letters are not allowed in the recipe name, thus the recipe can not be named cdparanoia-III and
+# we need to add the path to the extracted sources explicitely:
+S = "${WORKDIR}/cdparanoia-III-${PV}"
+
+# cdparanoia Makefile can not be used with several threads (because the static library target and the shared
+# library target use object files which are compiled in the same directory, the object files are just removed
+# between the compilation of those two targets)
+PARALLEL_MAKE = ""
+
+EXTRA_OECONF = "CC='${CC}' CFLAGS='${CFLAGS}'"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
new file mode 100644
index 000000000..7b0830034
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
@@ -0,0 +1,70 @@
+From 97c06ae955b270851f4fd2396c715f9c76591f37 Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Thu, 2 Apr 2015 10:15:08 +0200
+Subject: [PATCH] Use DESTDIR in "install" Makefile rule
+
+This change allows to perform installations in a sysroot folder, which is required e.g. by
+the recipes inheriting yocto autotool class, and is an autotool standard:
+make install DESTDIR=~/mysysroot
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ Makefile.in | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 3d235ad..df544c7 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -63,28 +63,28 @@ slib:
+ cd paranoia && $(MAKE) slib
+
+ install:
+- $(INSTALL) -d -m 0755 $(BINDIR)
+- $(INSTALL) -m 755 $(srcdir)/cdparanoia $(BINDIR)
+- $(INSTALL) -d -m 0755 $(MANDIR)
+- $(INSTALL) -d -m 0755 $(MANDIR)/man1
+- $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(MANDIR)/man1
+- $(INSTALL) -d -m 0755 $(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(INCLUDEDIR)
+- $(INSTALL) -d -m 0755 $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/utils.h $(INCLUDEDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR)
++ $(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1
++ $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
+ ln -fs libcdda_interface.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_interface.so.0
++ $(DESTDIR)$(LIBDIR)/libcdda_interface.so.0
+ ln -fs libcdda_interface.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_interface.so
++ $(DESTDIR)$(LIBDIR)/libcdda_interface.so
+ ln -fs libcdda_paranoia.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_paranoia.so.0
++ $(DESTDIR)$(LIBDIR)/libcdda_paranoia.so.0
+ ln -fs libcdda_paranoia.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_paranoia.so
++ $(DESTDIR)$(LIBDIR)/libcdda_paranoia.so
+
+ cdparanoia: $(OFILES) $(LIBDEP)
+ $(LD) $(CFLAGS) $(LDFLAGS) $(OFILES) \
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch
new file mode 100644
index 000000000..682cf6e03
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch
@@ -0,0 +1,31 @@
+From c760c5d31f2412a5be5ac6896e6069d1cea08527 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Jun 2017 22:31:45 -0700
+Subject: [PATCH 1/2] check for null buffer before trying a byteswap
+
+Author: Monty <paranoia@xiph.org>
+
+Patch from debian
+http://sources.debian.net/src/cdparanoia/3.10.2%2Bdebian-11/debian/patches/04-endian.patch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ interface/interface.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/interface/interface.c b/interface/interface.c
+index 526c2a9..763a0ea 100644
+--- a/interface/interface.c
++++ b/interface/interface.c
+@@ -118,7 +118,7 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, long beginsector, long sector
+ if(d->bigendianp==-1) /* not determined yet */
+ d->bigendianp=data_bigendianp(d);
+
+- if(d->bigendianp!=bigendianp()){
++ if(buffer && d->bigendianp!=bigendianp()){
+ int i;
+ u_int16_t *p=(u_int16_t *)buffer;
+ long els=sectors*CD_FRAMESIZE_RAW/2;
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch
new file mode 100644
index 000000000..7699017f7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch
@@ -0,0 +1,49 @@
+From 89071cbc8d3ab9a15503f397580b7590338e5e91 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 17:23:45 -0700
+Subject: [PATCH] utils: Use c99 compiler independent types
+
+Make it portable across different platforms
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils.h | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/utils.h b/utils.h
+index 10dce58..73bba92 100644
+--- a/utils.h
++++ b/utils.h
+@@ -3,6 +3,7 @@
+ #include <stdio.h>
+ #include <errno.h>
+ #include <string.h>
++#include <stdint.h>
+
+ extern long buffering_write(int outf, char *buffer, long num);
+ extern int buffering_close(int fd);
+@@ -18,15 +19,15 @@ static inline int bigendianp(void){
+ }
+
+ static inline int32_t swap32(int32_t x){
+- return((((u_int32_t)x & 0x000000ffU) << 24) |
+- (((u_int32_t)x & 0x0000ff00U) << 8) |
+- (((u_int32_t)x & 0x00ff0000U) >> 8) |
+- (((u_int32_t)x & 0xff000000U) >> 24));
++ return((((uint32_t)x & 0x000000ffU) << 24) |
++ (((uint32_t)x & 0x0000ff00U) << 8) |
++ (((uint32_t)x & 0x00ff0000U) >> 8) |
++ (((uint32_t)x & 0xff000000U) >> 24));
+ }
+
+ static inline int16_t swap16(int16_t x){
+- return((((u_int16_t)x & 0x00ffU) << 8) |
+- (((u_int16_t)x & 0xff00U) >> 8));
++ return((((uint16_t)x & 0x00ffU) << 8) |
++ (((uint16_t)x & 0xff00U) >> 8));
+ }
+
+ #if BYTE_ORDER == LITTLE_ENDIAN
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch
new file mode 100644
index 000000000..024479ca7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch
@@ -0,0 +1,32 @@
+From f4f81bdadb9515938b3b5d13707bd4b9322fd967 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Jun 2017 22:37:13 -0700
+Subject: [PATCH 2/2] Fix printf format errors
+
+error: format not a string literal and no format arguments
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ main.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/main.c b/main.c
+index 664acac..d568fb1 100644
+--- a/main.c
++++ b/main.c
+@@ -588,10 +588,10 @@ static void callback(long inpos, int function){
+ buffer[aheadposition+19]='>';
+ }
+
+- fprintf(stderr,buffer);
++ fprintf(stderr, "%s", buffer);
+
+ if (logfile != NULL && function==-1) {
+- fprintf(logfile,buffer+1);
++ fprintf(logfile, "%s", buffer+1);
+ fprintf(logfile,"\n\n");
+ fflush(logfile);
+ }
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
new file mode 100644
index 000000000..a5600a1c3
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
@@ -0,0 +1,605 @@
+From 12ea28398f8e5d4a4a23c62d511fc4f53584e51d Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Tue, 7 Apr 2015 11:07:56 +0200
+Subject: [PATCH] interface: remove C++ reserved keyword
+
+Because "private" was used in cdda_interface.h, this header file could not be
+compiled in C++.
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ interface/cdda_interface.h | 2 +-
+ interface/cooked_interface.c | 8 +--
+ interface/interface.c | 8 +--
+ interface/scan_devices.c | 22 ++++----
+ interface/scsi_interface.c | 128 +++++++++++++++++++++----------------------
+ interface/test_interface.c | 4 +-
+ 6 files changed, 86 insertions(+), 86 deletions(-)
+
+diff --git a/interface/cdda_interface.h b/interface/cdda_interface.h
+index 8487cb7..b738825 100644
+--- a/interface/cdda_interface.h
++++ b/interface/cdda_interface.h
+@@ -84,7 +84,7 @@ typedef struct cdrom_drive{
+ int is_atapi;
+ int is_mmc;
+
+- cdda_private_data_t *private;
++ cdda_private_data_t *priv; /* private is a C++ reserved keyword */
+ void *reserved;
+ unsigned char inqbytes[4];
+
+diff --git a/interface/cooked_interface.c b/interface/cooked_interface.c
+index de29055..ea9d0fc 100644
+--- a/interface/cooked_interface.c
++++ b/interface/cooked_interface.c
+@@ -13,13 +13,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+ struct timespec tv1;
+ struct timespec tv2;
+- int ret1=clock_gettime(d->private->clock,&tv1);
++ int ret1=clock_gettime(d->priv->clock,&tv1);
+ int ret2=ioctl(fd, command,arg);
+- int ret3=clock_gettime(d->private->clock,&tv2);
++ int ret3=clock_gettime(d->priv->clock,&tv2);
+ if(ret1<0 || ret3<0){
+- d->private->last_milliseconds=-1;
++ d->priv->last_milliseconds=-1;
+ }else{
+- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++ d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+ }
+ return ret2;
+ }
+diff --git a/interface/interface.c b/interface/interface.c
+index e8a90cd..526c2a9 100644
+--- a/interface/interface.c
++++ b/interface/interface.c
+@@ -39,9 +39,9 @@ int cdda_close(cdrom_drive *d){
+ if(d->drive_model)free(d->drive_model);
+ if(d->cdda_fd!=-1)close(d->cdda_fd);
+ if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd);
+- if(d->private){
+- if(d->private->sg_hd)free(d->private->sg_hd);
+- free(d->private);
++ if(d->priv){
++ if(d->priv->sg_hd)free(d->priv->sg_hd);
++ free(d->priv);
+ }
+
+ free(d);
+@@ -127,7 +127,7 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, long beginsector, long sector
+ }
+ }
+ }
+- if(ms)*ms=d->private->last_milliseconds;
++ if(ms)*ms=d->priv->last_milliseconds;
+ return(sectors);
+ }
+
+diff --git a/interface/scan_devices.c b/interface/scan_devices.c
+index fc58110..5f6c4e3 100644
+--- a/interface/scan_devices.c
++++ b/interface/scan_devices.c
+@@ -264,11 +264,11 @@ cdrom_drive *cdda_identify_cooked(const char *dev, int messagedest,
+ d->interface=COOKED_IOCTL;
+ d->bigendianp=-1; /* We don't know yet... */
+ d->nsectors=-1;
+- d->private=calloc(1,sizeof(*d->private));
++ d->priv=calloc(1,sizeof(*d->priv));
+ {
+ /* goddamnit */
+ struct timespec tv;
+- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++ d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+ }
+ idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description);
+ return(d);
+@@ -674,15 +674,15 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+ d->bigendianp=-1; /* We don't know yet... */
+ d->nsectors=-1;
+ d->messagedest = messagedest;
+- d->private=calloc(1,sizeof(*d->private));
++ d->priv=calloc(1,sizeof(*d->priv));
+ {
+ /* goddamnit */
+ struct timespec tv;
+- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++ d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+ }
+ if(use_sgio){
+ d->interface=SGIO_SCSI;
+- d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
++ d->priv->sg_buffer=(unsigned char *)(d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
+ g_fd=d->cdda_fd=dup(d->ioctl_fd);
+ }else{
+ version=verify_SG_version(d,messagedest,messages);
+@@ -696,8 +696,8 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+ }
+
+ /* malloc our big buffer for scsi commands */
+- d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
+- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++ d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
++ d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+ }
+
+ {
+@@ -772,9 +772,9 @@ cdda_identify_scsi_fail:
+ if(i_fd!=-1)close(i_fd);
+ if(g_fd!=-1)close(g_fd);
+ if(d){
+- if(d->private){
+- if(d->private->sg_hd)free(d->private->sg_hd);
+- free(d->private);
++ if(d->priv){
++ if(d->priv->sg_hd)free(d->priv->sg_hd);
++ free(d->priv);
+ }
+ free(d);
+ }
+@@ -821,7 +821,7 @@ cdrom_drive *cdda_identify_test(const char *filename, int messagedest,
+ d->interface=TEST_INTERFACE;
+ d->bigendianp=-1; /* We don't know yet... */
+ d->nsectors=-1;
+- d->private=calloc(1,sizeof(*d->private));
++ d->priv=calloc(1,sizeof(*d->priv));
+ d->drive_model=copystring("File based test interface");
+ idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model);
+
+diff --git a/interface/scsi_interface.c b/interface/scsi_interface.c
+index adbb9bf..75d90d4 100644
+--- a/interface/scsi_interface.c
++++ b/interface/scsi_interface.c
+@@ -15,13 +15,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+ struct timespec tv1;
+ struct timespec tv2;
+- int ret1=clock_gettime(d->private->clock,&tv1);
++ int ret1=clock_gettime(d->priv->clock,&tv1);
+ int ret2=ioctl(fd, command,arg);
+- int ret3=clock_gettime(d->private->clock,&tv2);
++ int ret3=clock_gettime(d->priv->clock,&tv2);
+ if(ret1<0 || ret3<0){
+- d->private->last_milliseconds=-1;
++ d->priv->last_milliseconds=-1;
+ }else{
+- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++ d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+ }
+ return ret2;
+ }
+@@ -96,7 +96,7 @@ static void tweak_SG_buffer(cdrom_drive *d) {
+ static void clear_garbage(cdrom_drive *d){
+ fd_set fdset;
+ struct timeval tv;
+- struct sg_header *sg_hd=d->private->sg_hd;
++ struct sg_header *sg_hd=d->priv->sg_hd;
+ int flag=0;
+
+ /* clear out any possibly preexisting garbage */
+@@ -185,7 +185,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ struct timespec tv2;
+ int tret1,tret2;
+ int status = 0;
+- struct sg_header *sg_hd=d->private->sg_hd;
++ struct sg_header *sg_hd=d->priv->sg_hd;
+ long writebytes=SG_OFF+cmd_len+in_size;
+
+ /* generic scsi device services */
+@@ -195,7 +195,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+
+ memset(sg_hd,0,sizeof(sg_hd));
+ memset(sense_buffer,0,SG_MAX_SENSE);
+- memcpy(d->private->sg_buffer,cmd,cmd_len+in_size);
++ memcpy(d->priv->sg_buffer,cmd,cmd_len+in_size);
+ sg_hd->twelve_byte = cmd_len == 12;
+ sg_hd->result = 0;
+ sg_hd->reply_len = SG_OFF + out_size;
+@@ -209,7 +209,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ tell if the command failed. Scared yet? */
+
+ if(bytecheck && out_size>in_size){
+- memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size);
++ memset(d->priv->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size);
+ /* the size does not remove cmd_len due to the way the kernel
+ driver copies buffers */
+ writebytes+=(out_size-in_size);
+@@ -243,7 +243,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ }
+
+ sigprocmask (SIG_BLOCK, &(d->sigset), NULL );
+- tret1=clock_gettime(d->private->clock,&tv1);
++ tret1=clock_gettime(d->priv->clock,&tv1);
+ errno=0;
+ status = write(d->cdda_fd, sg_hd, writebytes );
+
+@@ -289,7 +289,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ }
+ }
+
+- tret2=clock_gettime(d->private->clock,&tv2);
++ tret2=clock_gettime(d->priv->clock,&tv2);
+ errno=0;
+ status = read(d->cdda_fd, sg_hd, SG_OFF + out_size);
+ sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL );
+@@ -313,7 +313,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ if(bytecheck && in_size+cmd_len<out_size){
+ long i,flag=0;
+ for(i=in_size;i<out_size;i++)
+- if(d->private->sg_buffer[i]!=bytefill){
++ if(d->priv->sg_buffer[i]!=bytefill){
+ flag=1;
+ break;
+ }
+@@ -326,9 +326,9 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+
+ errno=0;
+ if(tret1<0 || tret2<0){
+- d->private->last_milliseconds=-1;
++ d->priv->last_milliseconds=-1;
+ }else{
+- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
++ d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
+ }
+ return(0);
+ }
+@@ -347,7 +347,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+
+ memset(&hdr,0,sizeof(hdr));
+ memset(sense,0,sizeof(sense));
+- memcpy(d->private->sg_buffer,cmd+cmd_len,in_size);
++ memcpy(d->priv->sg_buffer,cmd+cmd_len,in_size);
+
+ hdr.cmdp = cmd;
+ hdr.cmd_len = cmd_len;
+@@ -355,7 +355,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ hdr.mx_sb_len = SG_MAX_SENSE;
+ hdr.timeout = 50000;
+ hdr.interface_id = 'S';
+- hdr.dxferp = d->private->sg_buffer;
++ hdr.dxferp = d->priv->sg_buffer;
+ hdr.flags = SG_FLAG_DIRECT_IO; /* direct IO if we can get it */
+
+ /* scary buffer fill hack */
+@@ -400,7 +400,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ if(bytecheck && in_size<out_size){
+ long i,flag=0;
+ for(i=in_size;i<out_size;i++)
+- if(d->private->sg_buffer[i]!=bytefill){
++ if(d->priv->sg_buffer[i]!=bytefill){
+ flag=1;
+ break;
+ }
+@@ -412,7 +412,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ }
+
+ /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */
+- /* d->private->last_milliseconds = hdr.duration; */
++ /* d->priv->last_milliseconds = hdr.duration; */
+
+ errno = 0;
+ return 0;
+@@ -445,9 +445,9 @@ static int test_unit_ready(cdrom_drive *d){
+
+ handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense);
+
+- key = d->private->sg_buffer[2] & 0xf;
+- ASC = d->private->sg_buffer[12];
+- ASCQ = d->private->sg_buffer[13];
++ key = d->priv->sg_buffer[2] & 0xf;
++ ASC = d->priv->sg_buffer[12];
++ ASCQ = d->priv->sg_buffer[13];
+
+ if(key == 2 && ASC == 4 && ASCQ == 1) return 0;
+ return 1;
+@@ -492,7 +492,7 @@ static int mode_sense_atapi(cdrom_drive *d,int size,int page){
+ if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1);
+
+ {
+- unsigned char *b=d->private->sg_buffer;
++ unsigned char *b=d->priv->sg_buffer;
+ if(b[0])return(1); /* Handles only up to 256 bytes */
+ if(b[6])return(1); /* Handles only up to 256 bytes */
+
+@@ -604,8 +604,8 @@ static int mode_select(cdrom_drive *d,int density,int secsize){
+ static unsigned int get_orig_sectorsize(cdrom_drive *d){
+ if(mode_sense(d,12,0x01))return(-1);
+
+- d->orgdens = d->private->sg_buffer[4];
+- return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]);
++ d->orgdens = d->priv->sg_buffer[4];
++ return(d->orgsize = ((int)(d->priv->sg_buffer[10])<<8)+d->priv->sg_buffer[11]);
+ }
+
+ /* switch CDROM scsi drives to given sector size */
+@@ -664,8 +664,8 @@ static int scsi_read_toc (cdrom_drive *d){
+ return(-4);
+ }
+
+- first=d->private->sg_buffer[2];
+- last=d->private->sg_buffer[3];
++ first=d->priv->sg_buffer[2];
++ last=d->priv->sg_buffer[3];
+ tracks=last-first+1;
+
+ if (last > MAXTRK || first > MAXTRK || last<0 || first<0) {
+@@ -683,7 +683,7 @@ static int scsi_read_toc (cdrom_drive *d){
+ return(-5);
+ }
+ {
+- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++ scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+
+ d->disc_toc[i-first].bFlags=toc->bFlags;
+ d->disc_toc[i-first].bTrack=i;
+@@ -704,7 +704,7 @@ static int scsi_read_toc (cdrom_drive *d){
+ return(-2);
+ }
+ {
+- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++ scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+
+ d->disc_toc[i-first].bFlags=toc->bFlags;
+ d->disc_toc[i-first].bTrack=0xAA;
+@@ -738,7 +738,7 @@ static int scsi_read_toc2 (cdrom_drive *d){
+ }
+
+ /* copy to our structure and convert start sector */
+- tracks = d->private->sg_buffer[1];
++ tracks = d->priv->sg_buffer[1];
+ if (tracks > MAXTRK) {
+ cderror(d,"003: CDROM reporting illegal number of tracks\n");
+ return(-3);
+@@ -754,33 +754,33 @@ static int scsi_read_toc2 (cdrom_drive *d){
+ return(-5);
+ }
+
+- d->disc_toc[i].bFlags = d->private->sg_buffer[10];
++ d->disc_toc[i].bFlags = d->priv->sg_buffer[10];
+ d->disc_toc[i].bTrack = i + 1;
+
+ d->disc_toc[i].dwStartSector= d->adjust_ssize *
+- (((signed char)(d->private->sg_buffer[2])<<24) |
+- (d->private->sg_buffer[3]<<16)|
+- (d->private->sg_buffer[4]<<8)|
+- (d->private->sg_buffer[5]));
++ (((signed char)(d->priv->sg_buffer[2])<<24) |
++ (d->priv->sg_buffer[3]<<16)|
++ (d->priv->sg_buffer[4]<<8)|
++ (d->priv->sg_buffer[5]));
+ }
+
+ d->disc_toc[i].bFlags = 0;
+ d->disc_toc[i].bTrack = i + 1;
+- memcpy (&foo, d->private->sg_buffer+2, 4);
+- memcpy (&bar, d->private->sg_buffer+6, 4);
++ memcpy (&foo, d->priv->sg_buffer+2, 4);
++ memcpy (&bar, d->priv->sg_buffer+6, 4);
+ d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) +
+ be32_to_cpu(bar));
+
+ d->disc_toc[i].dwStartSector= d->adjust_ssize *
+- ((((signed char)(d->private->sg_buffer[2])<<24) |
+- (d->private->sg_buffer[3]<<16)|
+- (d->private->sg_buffer[4]<<8)|
+- (d->private->sg_buffer[5]))+
++ ((((signed char)(d->priv->sg_buffer[2])<<24) |
++ (d->priv->sg_buffer[3]<<16)|
++ (d->priv->sg_buffer[4]<<8)|
++ (d->priv->sg_buffer[5]))+
+
+- ((((signed char)(d->private->sg_buffer[6])<<24) |
+- (d->private->sg_buffer[7]<<16)|
+- (d->private->sg_buffer[8]<<8)|
+- (d->private->sg_buffer[9]))));
++ ((((signed char)(d->priv->sg_buffer[6])<<24) |
++ (d->priv->sg_buffer[7]<<16)|
++ (d->priv->sg_buffer[8]<<8)|
++ (d->priv->sg_buffer[9]))));
+
+
+ d->cd_extra = FixupTOC(d,tracks+1);
+@@ -817,7 +817,7 @@ static int i_read_28 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -836,7 +836,7 @@ static int i_read_A8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[9] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -854,7 +854,7 @@ static int i_read_D4_10 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -872,7 +872,7 @@ static int i_read_D4_12 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[9] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -890,7 +890,7 @@ static int i_read_D5 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -908,7 +908,7 @@ static int i_read_D8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[9] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -922,7 +922,7 @@ static int i_read_mmc (cdrom_drive *d, void *p, long begin, long sectors, unsign
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -936,7 +936,7 @@ static int i_read_mmcB (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -950,7 +950,7 @@ static int i_read_mmc2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -964,7 +964,7 @@ static int i_read_mmc2B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -978,7 +978,7 @@ static int i_read_mmc3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -992,7 +992,7 @@ static int i_read_mmc3B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1026,7 +1026,7 @@ static int i_read_msf (cdrom_drive *d, void *p, long begin, long sectors, unsign
+
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1039,7 +1039,7 @@ static int i_read_msf2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1052,7 +1052,7 @@ static int i_read_msf3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1275,7 +1275,7 @@ long scsi_read_msf3 (cdrom_drive *d, void *p, long begin,
+ static int count_2352_bytes(cdrom_drive *d){
+ long i;
+ for(i=2351;i>=0;i--)
+- if(d->private->sg_buffer[i]!=(unsigned char)'\177')
++ if(d->priv->sg_buffer[i]!=(unsigned char)'\177')
+ return(((i+3)>>2)<<2);
+
+ return(0);
+@@ -1284,7 +1284,7 @@ static int count_2352_bytes(cdrom_drive *d){
+ static int verify_nonzero(cdrom_drive *d){
+ long i,flag=0;
+ for(i=0;i<2352;i++)
+- if(d->private->sg_buffer[i]!=0){
++ if(d->priv->sg_buffer[i]!=0){
+ flag=1;
+ break;
+ }
+@@ -1625,7 +1625,7 @@ static int check_mmc(cdrom_drive *d){
+ d->is_mmc=0;
+ if(mode_sense(d,22,0x2A)==0){
+
+- b=d->private->sg_buffer;
++ b=d->priv->sg_buffer;
+ b+=b[3]+4;
+
+ if((b[0]&0x3F)==0x2A){
+@@ -1673,7 +1673,7 @@ unsigned char *scsi_inquiry(cdrom_drive *d){
+ cderror(d,"008: Unable to identify CDROM model\n");
+ return(NULL);
+ }
+- return (d->private->sg_buffer);
++ return (d->priv->sg_buffer);
+ }
+
+ int scsi_init_drive(cdrom_drive *d){
+@@ -1742,8 +1742,8 @@ int scsi_init_drive(cdrom_drive *d){
+ check_cache(d);
+
+ d->error_retry=1;
+- d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
+- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++ d->priv->sg_hd=realloc(d->priv->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
++ d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+ d->report_all=1;
+ return(0);
+ }
+diff --git a/interface/test_interface.c b/interface/test_interface.c
+index 11bec25..e1cefaa 100644
+--- a/interface/test_interface.c
++++ b/interface/test_interface.c
+@@ -66,9 +66,9 @@ static long test_read(cdrom_drive *d, void *p, long begin, long sectors){
+ if(!fd)fd=fdopen(d->cdda_fd,"r");
+
+ if(begin<lastread)
+- d->private->last_milliseconds=20;
++ d->priv->last_milliseconds=20;
+ else
+- d->private->last_milliseconds=sectors;
++ d->priv->last_milliseconds=sectors;
+
+ #ifdef CDDA_TEST_UNDERRUN
+ sectors-=1;
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch
new file mode 100644
index 000000000..5298a3dcf
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch
@@ -0,0 +1,42 @@
+From c0b77aeb2127da821ae1c03c2f98aaf4db65277d Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Sat, 10 Sep 2016 21:15:18 +0200
+Subject: [PATCH] Fix missing shared object LDFLAGS
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ interface/Makefile.in | 2 +-
+ paranoia/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/interface/Makefile.in b/interface/Makefile.in
+index 40c6098..020bf2a 100644
+--- a/interface/Makefile.in
++++ b/interface/Makefile.in
+@@ -46,7 +46,7 @@ libcdda_interface.a: $(OFILES)
+ $(RANLIB) libcdda_interface.a
+
+ libcdda_interface.so: $(OFILES)
+- $(CC) -fpic -shared -o libcdda_interface.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_interface.so.0 $(OFILES) $(LIBS)
++ $(CC) -fpic -shared -o libcdda_interface.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_interface.so.0 $(LDFLAGS) $(OFILES) $(LIBS)
+ [ -e libcdda_interface.so.0 ] || ln -s libcdda_interface.so.0.$(VERSION) libcdda_interface.so.0
+ [ -e libcdda_interface.so ] || ln -s libcdda_interface.so.0.$(VERSION) libcdda_interface.so
+
+diff --git a/paranoia/Makefile.in b/paranoia/Makefile.in
+index 89d0328..ffb4e70 100644
+--- a/paranoia/Makefile.in
++++ b/paranoia/Makefile.in
+@@ -44,7 +44,7 @@ libcdda_paranoia.a: $(OFILES)
+ $(RANLIB) libcdda_paranoia.a
+
+ libcdda_paranoia.so: $(OFILES)
+- $(CC) -fpic -shared -o libcdda_paranoia.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_paranoia.so.0 $(OFILES) -L ../interface -lcdda_interface
++ $(CC) -fpic -shared -o libcdda_paranoia.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_paranoia.so.0 $(LDFLAGS) $(OFILES) -L ../interface -lcdda_interface
+ [ -e libcdda_paranoia.so.0 ] || ln -s libcdda_paranoia.so.0.$(VERSION) libcdda_paranoia.so.0
+ [ -e libcdda_paranoia.so ] || ln -s libcdda_paranoia.so.0.$(VERSION) libcdda_paranoia.so
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch
new file mode 100644
index 000000000..9b268b7ed
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch
@@ -0,0 +1,30 @@
+Index: cdparanoia-III-10.2/configure.in
+===================================================================
+--- cdparanoia-III-10.2.orig/configure.in
++++ cdparanoia-III-10.2/configure.in
+@@ -1,13 +1,8 @@
+ AC_INIT(interface/interface.c)
+
+-cp $srcdir/configure.guess $srcdir/config.guess
+-cp $srcdir/configure.sub $srcdir/config.sub
+-
+ AC_CANONICAL_HOST
+
+-if test -z "$CC"; then
+- AC_PROG_CC
+-fi
++AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_CHECK_PROG(AR,ar,ar)
+ AC_CHECK_PROG(INSTALL,install,install)
+@@ -44,8 +39,8 @@ case 4 in
+ $ac_cv_sizeof_long) SIZE32="long";;
+ esac
+
+-AC_CHECK_TYPE(int16_t,SIZE16="int16_t",,)
+-AC_CHECK_TYPE(int32_t,SIZE32="size32_t",,)
++AC_CHECK_TYPES([int16_t], [SIZE16="int16_t"], [], [[#include <stdint.h>]])
++AC_CHECK_TYPES([int32_t], [SIZE32="int32_t"], [], [[#include <stdint.h>]])
+
+ if test -z "$SIZE16"; then
+ AC_MSG_ERROR(No 16 bit type found on this platform!)
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch
new file mode 100644
index 000000000..06ee82099
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch
@@ -0,0 +1,42 @@
+Index: cdparanoia-III-10.2/Makefile.in
+===================================================================
+--- cdparanoia-III-10.2.orig/Makefile.in
++++ cdparanoia-III-10.2/Makefile.in
+@@ -6,6 +6,8 @@
+ VERSION=10.2
+ VPATH=@srcdir@
+ srcdir=@srcdir@
++top_srcdir=@top_srcdir@
++top_builddir=@top_builddir@
+
+ @SET_MAKE@
+ FLAGS=@TYPESIZES@ @CFLAGS@
+@@ -64,19 +66,19 @@ slib:
+
+ install:
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR)
+- $(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR)
++ $(INSTALL) -m 755 $(top_builddir)/cdparanoia $(DESTDIR)$(BINDIR)
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1
+- $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
++ $(INSTALL) -m 0644 $(top_srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(top_srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
+ ln -fs libcdda_interface.so.0.$(VERSION) \
+ $(DESTDIR)$(LIBDIR)/libcdda_interface.so.0
+ ln -fs libcdda_interface.so.0.$(VERSION) \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb
new file mode 100644
index 000000000..45b53c119
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "DTS Coherent Acoustics decoder with support for HD extensions"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LGPLv2.1;md5=4fbd65380cdd255951079008b364516c"
+
+SRCREV = "b93deed1a231dd6dd7e39b9fe7d2abe05aa00158"
+SRC_URI = "git://github.com/foo86/dcadec.git;protocol=http"
+
+S = "${WORKDIR}/git"
+
+inherit lib_package
+
+EXTRA_OEMAKE = "CONFIG_SHARED=1"
+
+do_install() {
+ oe_runmake install DESTDIR="${D}" PREFIX="${prefix}"
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
new file mode 100644
index 000000000..f23bc6ca8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "D-Bus connector for dLeyna libraries"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://src/connector-dbus.c;endline=21;md5=0a1695cef53beefc36651de439f643b5"
+
+DEPENDS = "glib-2.0 dbus dleyna-core"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "de913c35e5c936e2d40ddbd276ee902cd802bd3a"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${libdir}/dleyna-1.0/connectors/*.so"
+FILES_${PN}-dev += "${libdir}/dleyna-1.0/connectors/*.la"
+FILES_${PN}-dbg += "${libdir}/dleyna-1.0/connectors/.debug/*.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
new file mode 100644
index 000000000..a3b279372
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Utility functions for dLeyna libraries"
+DESCRIPTION = "dleyna-core is a library of utility functions that are used \
+by the higher level dLeyna libraries that communicate with DLNA devices, \
+e.g., dleyna-server. In brief, it provides APIs for logging, error, settings \
+and task management and an IPC asbstraction API."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libdleyna/core/core.c;endline=21;md5=139cba0c634344abc9456694fbb5083b"
+
+DEPENDS = "glib-2.0 gupnp"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "27a3786ec013f64fd58243410a60798f824acec3"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
new file mode 100644
index 000000000..b30aee9fb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "DLNA renderer libraries"
+DESCRIPTION = "dleyna-renderer is a library for implementing services \
+that allow clients to discover and manipulate Digital Media Renderers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libdleyna/renderer/server.c;endline=21;md5=f51acd4757fb6a779a87122c43cf1346"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "50fd1ec9d51328e7dea98874129dc8d6fe3ea1dd"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+CFLAGS += " -I${S}"
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
new file mode 100644
index 000000000..a8e5406d0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "DLNA server libraries"
+DESCRIPTION = "dleyna-server is a library for implementing services that \
+allow clients to discover, browse and manipulate Digital Media Servers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libdleyna/server/server.c;endline=22;md5=437455d8aeff69ebd0996a76c67397bb"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 libxml2 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "776950d5d96ac9dbf5c5c47bde8ac06f50a3cf46"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb
new file mode 100644
index 000000000..4765c6c9c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Freeware Advanced Audio Coder (MPEG2-AAC, MPEG4-AAC)"
+SECTION = "libs"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://libfaac/coder.h;beginline=5;endline=17;md5=fa1fd6a5fa8cdc877d63a12530d273e0"
+
+inherit autotools
+
+SRC_URI = " \
+ ${SOURCEFORGE_MIRROR}/faac/${BP}.tar.gz \
+ file://0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch \
+"
+
+SRC_URI[md5sum] = "78603720f655180059d6970c582a3005"
+SRC_URI[sha256sum] = "8cc7b03ceb2722223a6457e95d4c994731d80214a03ba33d1af76ba53f4b3197"
+
+EXTRA_OECONF += "--without-mp4v2"
+
+PACKAGES =+ "lib${BPN} lib${BPN}-dev"
+
+FILES_${PN} = " ${bindir}/faac "
+FILES_lib${PN} = " ${libdir}/*.so.*"
+FILES_lib${PN}-dev = " \
+ ${includedir} \
+ ${libdir}/*.so \
+ ${libdir}/*.la \
+"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch
new file mode 100644
index 000000000..d845ddf59
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch
@@ -0,0 +1,28 @@
+From 46cc9298c38b9dd735fec3f39aa2d6e56a362410 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 21:33:36 -0700
+Subject: [PATCH 2/2] mp4v2: Define __STRING if cdefs.h does not exist
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ common/mp4v2/mp4util.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/common/mp4v2/mp4util.h b/common/mp4v2/mp4util.h
+index 1f9cb64..1e7aced 100644
+--- a/common/mp4v2/mp4util.h
++++ b/common/mp4v2/mp4util.h
+@@ -23,6 +23,10 @@
+ #define __MP4_UTIL_INCLUDED__
+ #include <assert.h>
+
++#ifndef __STRING
++#define __STRING(x) #x
++#endif
++
+ #ifndef ASSERT
+ #define ASSERT(expr) \
+ if (!(expr)) { \
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch
new file mode 100644
index 000000000..0e1846e31
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch
@@ -0,0 +1,76 @@
+From 2de7e128fbdf528716b500cf27ed9a4358c931c9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 24 Nov 2017 00:05:35 +0100
+Subject: [PATCH 2/2] Use ARM-NEON accelaration for float-multithreaded setups
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ src/rvoice/fluid_rvoice_mixer.c | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/src/rvoice/fluid_rvoice_mixer.c b/src/rvoice/fluid_rvoice_mixer.c
+index 9616518..dbf8057 100644
+--- a/src/rvoice/fluid_rvoice_mixer.c
++++ b/src/rvoice/fluid_rvoice_mixer.c
+@@ -27,6 +27,10 @@
+ #include "fluid_ladspa.h"
+ #include "fluid_synth.h"
+
++#if defined(__ARM_NEON__)
++#include "arm_neon.h"
++#endif
++
+
+ #define ENABLE_MIXER_THREADS 1
+
+@@ -794,20 +798,42 @@ fluid_mixer_buffers_mix(fluid_mixer_buffers_t* dest, fluid_mixer_buffers_t* src)
+ if (minbuf > src->buf_count)
+ minbuf = src->buf_count;
+ for (i=0; i < minbuf; i++) {
++#if defined(__ARM_NEON__) && defined(WITH_FLOAT)
++ for (j=0; j < scount; j+=4) {
++ float32x4_t vleft = vld1q_f32(&dest->left_buf[i][j]);
++ float32x4_t vright = vld1q_f32(&dest->right_buf[i][j]);
++ vleft = vaddq_f32(vleft, vld1q_f32(&src->left_buf[i][j]));
++ vright = vaddq_f32(vright, vld1q_f32(&src->right_buf[i][j]));
++ vst1q_f32(&dest->left_buf[i][j], vleft);
++ vst1q_f32(&dest->right_buf[i][j], vright);
++ }
++#else
+ for (j=0; j < scount; j++) {
+ dest->left_buf[i][j] += src->left_buf[i][j];
+ dest->right_buf[i][j] += src->right_buf[i][j];
+ }
++#endif
+ }
+
+ minbuf = dest->fx_buf_count;
+ if (minbuf > src->fx_buf_count)
+ minbuf = src->fx_buf_count;
+ for (i=0; i < minbuf; i++) {
++#if defined(__ARM_NEON__) && defined(WITH_FLOAT)
++ for (j=0; j < scount; j+=4) {
++ float32x4_t vleft = vld1q_f32(&dest->fx_left_buf[i][j]);
++ float32x4_t vright = vld1q_f32(&dest->fx_right_buf[i][j]);
++ vleft = vaddq_f32(vleft, vld1q_f32(&src->fx_left_buf[i][j]));
++ vright = vaddq_f32(vright, vld1q_f32(&src->fx_right_buf[i][j]));
++ vst1q_f32(&dest->fx_left_buf[i][j], vleft);
++ vst1q_f32(&dest->fx_right_buf[i][j], vright);
++ }
++#else
+ for (j=0; j < scount; j++) {
+ dest->fx_left_buf[i][j] += src->fx_left_buf[i][j];
+ dest->fx_right_buf[i][j] += src->fx_right_buf[i][j];
+ }
++#endif
+ }
+ }
+
+--
+2.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb
new file mode 100644
index 000000000..0ec4c49ce
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Fluidsynth is a software synthesizer"
+HOMEPAGE = "http://www.fluidsynth.org/"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fc178bcd425090939a8b634d1d6a9594"
+
+DEPENDS = "alsa-lib ncurses glib-2.0"
+
+SRC_URI = " \
+ git://github.com/FluidSynth/fluidsynth.git;branch=1.1.x \
+ file://0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch \
+"
+SRCREV = "f5a0fee6f7f2b2ab4c866df1acb649333464b3fd"
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig lib_package
+
+EXTRA_OECMAKE = "-Denable-floats=ON -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)}"
+PACKAGECONFIG[sndfile] = "-Denable-libsndfile-support=ON,-Denable-libsndfile-support=OFF,libsndfile1"
+PACKAGECONFIG[jack] = "-Denable-jack-support=ON,-Denable-jack-support=OFF,jack"
+PACKAGECONFIG[pulseaudio] = "-Denable-pulseaudio=ON,--Denable-pulseaudio=OFF,pulseaudio"
+PACKAGECONFIG[portaudio] = "-Denable-portaudio=ON,-Denable-portaudio=OFF,portaudio-v19"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service
new file mode 100644
index 000000000..1b5a3ad3e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Start Gerbera, an UPnP media server
+After=multi-user.target network-online.target
+Wants=network-online.target
+
+[Service]
+ExecStart=/usr/bin/gerbera
+Environment='HOME=/root'
+Type=simple
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target \ No newline at end of file
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb
new file mode 100644
index 000000000..f763cf1e4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb
@@ -0,0 +1,32 @@
+Description = "Gerbera - An UPnP media server"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=25cdec9afe3f1f26212ead6bd2f7fac8"
+
+SRC_URI = "git://github.com/v00d00/gerbera.git;protocol=https \
+ file://gerbera.service \
+"
+
+PV = "1.0+git${SRCPV}"
+SRCREV = "4435b165d121195aefd67d0287f7f9349e181d45"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "expat zlib curl libupnp e2fsprogs sqlite3 "
+
+SYSTEMD_SERVICE_${PN} = "gerbera.service"
+
+inherit cmake systemd
+
+PACKAGECONFIG = ""
+PACKAGECONFIG[taglib] = "-DWITH_TAGLIB=TRUE,-DWITH_TAGLIB=FALSE,taglib"
+
+EXTRA_OECMAKE = "-DWITH_JS=FALSE -DWITH_MAGIC=FALSE -DWITH_EXIF=FALSE -DLIBUUID_INCLUDE_DIRS=${STAGING_INCDIR} -DLIBUUID_LIBRARIES=-luuid"
+
+do_install_append() {
+ install -d ${D}/root/.config/
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/gerbera.service ${D}${systemd_system_unitdir}/
+}
+
+FILES_${PN} += "/root/.config/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
new file mode 100644
index 000000000..1e2cd2a4a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
@@ -0,0 +1,14 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo closed-format mp3 GStreamer plug-in"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=259a43dd1c9854b71fc396f74699f4d2"
+LICENSE_FLAGS = "commercial"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF += "${GSTREAMER_DEBUG} --with-gstreamer-api=0.10"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "adf0390f3416bb72f91c358528be0c38"
+SRC_URI[sha256sum] = "dae0d0559a4e159c0dd92b7e18de059a5783f8d038904c7de4ca6393f7d55c7d"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
new file mode 100644
index 000000000..7bba41a34
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
@@ -0,0 +1,12 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo MPEG Transport Stream and Program Stream demuxer for GStreamer"
+LICENSE = "MPLv1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=be282f1c3cc9a98cc0dc5c2b25dfc510 \
+ file://src/gstmpegdemux.h;beginline=1;endline=19;md5=a9e90033f59897b91664d9f2a2ff01dd"
+LICENSE_FLAGS = "commercial"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "7c4fb993f80b9ae631b11897733f0970"
+SRC_URI[sha256sum] = "df04c91cc8e5d9a892c2492ed989974b4547beaa2a3647649e85113317897424"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
new file mode 100644
index 000000000..7a77d624f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Fluendo closed-format GStreamer plug-in"
+SECTION = "multimedia"
+HOMEPAGE = "https://core.fluendo.com/gstreamer/trac/wiki"
+DEPENDS = "gstreamer gst-plugins-base zlib"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://core.fluendo.com/gstreamer/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = "--disable-valgrind"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
new file mode 100644
index 000000000..88f1abf68
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
@@ -0,0 +1,73 @@
+SUMMARY = "GStreamer package groups"
+LICENSE = "MIT"
+
+COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}"
+DEPENDS_UGLY="${@'gst-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS_BAD="${@'gst-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS = "gstreamer gst-plugins-base gst-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}"
+
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
+ file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+
+PR = "r13"
+
+PACKAGES = "\
+ gst-meta-base \
+ gst-meta-x11-base \
+ gst-meta-audio \
+ gst-meta-debug \
+ gst-meta-video"
+
+ALLOW_EMPTY_gst-meta-base = "1"
+ALLOW_EMPTY_gst-meta-x11-base = "1"
+ALLOW_EMPTY_gst-meta-audio = "1"
+ALLOW_EMPTY_gst-meta-debug = "1"
+ALLOW_EMPTY_gst-meta-video = "1"
+
+RDEPENDS_gst-meta-base = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gst-meta-x11-base', '', d)} \
+ gstreamer \
+ gst-plugins-base-playbin \
+ gst-plugins-base-decodebin \
+ gst-plugins-base-decodebin2 \
+ gst-plugins-base-gio \
+ gst-plugins-base-alsa \
+ gst-plugins-base-volume \
+ gst-plugins-base-audioconvert \
+ gst-plugins-base-audioresample \
+ gst-plugins-base-typefindfunctions \
+ gst-plugins-base-videoscale \
+ gst-plugins-base-ffmpegcolorspace \
+ gst-plugins-good-autodetect \
+ gst-plugins-good-souphttpsrc"
+
+RRECOMMENDS_gst-meta-x11-base = "\
+ gst-plugins-base-ximagesink \
+ gst-plugins-base-xvimagesink"
+
+RDEPENDS_gst-meta-audio = "\
+ gst-meta-base \
+ gst-plugins-base-vorbis \
+ gst-plugins-base-ogg \
+ gst-plugins-good-wavparse \
+ gst-plugins-good-flac \
+ ${COMMERCIAL_AUDIO_PLUGINS}"
+
+
+RDEPENDS_gst-meta-debug = "\
+ gst-meta-base \
+ gst-plugins-good-debug \
+ gst-plugins-base-audiotestsrc \
+ gst-plugins-base-videotestsrc"
+
+
+RDEPENDS_gst-meta-video = "\
+ gst-meta-base \
+ gst-plugins-good-avi \
+ gst-plugins-good-matroska \
+ gst-plugins-base-theora \
+ ${COMMERCIAL_VIDEO_PLUGINS}"
+
+RRECOMMENDS_gst-meta-video = "\
+ gst-meta-audio"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
new file mode 100644
index 000000000..57a63b5a0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
@@ -0,0 +1,18 @@
+Upstream-Status: Pending
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+Index: gst-openmax-0.10.1/omx/gstomx.c
+===================================================================
+--- gst-openmax-0.10.1.orig/omx/gstomx.c 2010-09-30 18:00:24.000000000 -0700
++++ gst-openmax-0.10.1/omx/gstomx.c 2011-05-17 23:08:08.794535872 -0700
+@@ -238,7 +238,8 @@
+ const gchar *element_name = gst_structure_nth_field_name (element_table, i);
+ GstStructure *element = get_element_entry (element_name);
+ const gchar *type_name, *parent_type_name;
+- const gchar *component_name, *component_role, *library_name;
++ const gchar *component_name, *library_name;
++ const gchar __attribute__((__unused__)) *component_role;
+ GType type;
+ gint rank;
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
new file mode 100644
index 000000000..5965bbafb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
@@ -0,0 +1,46 @@
+Rename static functions that use GLib naming conventions as one of them
+(g_ptr_array_insert) has now been added to GLib.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c
+index 423e441..579dbf5 100644
+--- a/omx/gstomx_util.c
++++ b/omx/gstomx_util.c
+@@ -85,7 +85,7 @@ static gboolean initialized;
+ */
+
+ static void
+-g_ptr_array_clear (GPtrArray * array)
++omx_g_ptr_array_clear (GPtrArray * array)
+ {
+ guint index;
+ for (index = 0; index < array->len; index++)
+@@ -93,7 +93,7 @@ g_ptr_array_clear (GPtrArray * array)
+ }
+
+ static void
+-g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
++omx_g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
+ {
+ if (index + 1 > array->len) {
+ g_ptr_array_set_size (array, index + 1);
+@@ -394,7 +394,7 @@ g_omx_core_unload (GOmxCore * core)
+ }
+
+ core_for_each_port (core, g_omx_port_free);
+- g_ptr_array_clear (core->ports);
++ omx_g_ptr_array_clear (core->ports);
+ }
+
+ static inline GOmxPort *
+@@ -418,7 +418,7 @@ g_omx_core_new_port (GOmxCore * core, guint index)
+ }
+
+ port = g_omx_port_new (core, index);
+- g_ptr_array_insert (core->ports, index, port);
++ omx_g_ptr_array_insert (core->ports, index, port);
+
+ return port;
+ }
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
new file mode 100644
index 000000000..2e0157956
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "GStreamer plug-in for communication with OpenMAX IL components"
+DESCRIPTION = "GstOpenMAX is a GStreamer plug-in that allows \
+communication with OpenMAX Integration Layer (IL) components. OpenMAX \
+IL is an industry standard that provides an abstraction layer for \
+computer graphics, video, and sound routines."
+HOMEPAGE = "http://freedesktop.org/wiki/GstOpenMAX"
+DEPENDS = "gstreamer"
+RDEPENDS_${PN} = "libomxil"
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
+ file://util/sem.h;beginline=1;endline=20;md5=accce5550d5583b839b441a0623f09fc"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gst-openmax/gst-openmax-${PV}.tar.bz2 \
+ file://gcc_4.6.patch \
+ file://ptr-array.patch \
+ "
+
+inherit autotools pkgconfig
+
+# Tell configure that this isn't a development snapshot so we don't want
+# -Werror (hopefully fixed in 0.10.2)
+export GST_CVS="no"
+
+EXTRA_OECONF += "--disable-valgrind"
+
+PR = "r4"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/libgstomx.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/libgstomx.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/libgstomx.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug/"
+
+SRC_URI[md5sum] = "4d0370bfe99dea20918c84347abadb4e"
+SRC_URI[sha256sum] = "9074d5a0591995133d19cfb15144f19664f902c1623f996595695cf2c2070e1f"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
new file mode 100644
index 000000000..235acda8b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
@@ -0,0 +1,36 @@
+Description: Fix buffer overflow in mp4 parsing
+Author: Ralph Giles <giles@mozilla.com>
+---
+Backport patch from debian to fix CVE-2015-0797.
+https://sources.debian.net/data/main/g/gst-plugins-bad0.10/0.10.23-7.1+deb7u2/debian/patches/buffer-overflow-mp4.patch
+
+Upstream-Status: Backport
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+--- gst-plugins-bad0.10-0.10.23.orig/gst/videoparsers/gsth264parse.c
++++ gst-plugins-bad0.10-0.10.23/gst/videoparsers/gsth264parse.c
+@@ -384,6 +384,11 @@ gst_h264_parse_wrap_nal (GstH264Parse *
+
+ GST_DEBUG_OBJECT (h264parse, "nal length %d", size);
+
++ if (size > G_MAXUINT32 - nl) {
++ GST_ELEMENT_ERROR (h264parse, STREAM, FAILED, (NULL),
++ ("overflow in nal size"));
++ return NULL;
++ }
+ buf = gst_buffer_new_and_alloc (size + nl + 4);
+ if (format == GST_H264_PARSE_FORMAT_AVC) {
+ GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), size << (32 - 8 * nl));
+@@ -452,6 +457,11 @@ gst_h264_parse_process_nal (GstH264Parse
+ GST_DEBUG_OBJECT (h264parse, "not processing nal size %u", nalu->size);
+ return;
+ }
++ if (G_UNLIKELY (nalu->size > 20 * 1024 * 1024)) {
++ GST_DEBUG_OBJECT (h264parse, "not processing nal size %u (too big)",
++ nalu->size);
++ return;
++ }
+
+ /* we have a peek as well */
+ nal_type = nalu->type;
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
new file mode 100644
index 000000000..38fccc8d0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
@@ -0,0 +1,61 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://gst/tta/filters.h;beginline=12;endline=29;md5=629b0c7a665d155a6677778f4460ec06 \
+ file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+ file://gst/tta/crc32.h;beginline=12;endline=29;md5=71a904d99ce7ae0c1cf129891b98145c"
+
+DEPENDS += "gst-plugins-base"
+
+PR = "r4"
+
+SRC_URI += "file://buffer-overflow-mp4.patch"
+
+inherit gettext gsettings
+
+EXTRA_OECONF += "--disable-experimental \
+ --disable-sdl --disable-cdaudio --disable-directfb \
+ --disable-vdpau --disable-apexsink"
+
+PACKAGECONFIG ??= "bzip curl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'rsvg', '', d)}"
+
+PACKAGECONFIG[bzip] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[rsvg] = "--enable-rsvg,--disable-rsvg,librsvg,"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[neon] = "--enable-neon,--disable-neon,neon"
+PACKAGECONFIG[mms] = "--enable-libmms,--disable-libmms,libmms"
+PACKAGECONFIG[cog] = "--enable-cog,--disable-cog,libpng"
+PACKAGECONFIG[faad] = "--enable-faad,--disable-faad,faad2"
+PACKAGECONFIG[jp2k] = "--enable-jp2k,--disable-jp2k,jasper"
+PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug"
+PACKAGECONFIG[opus] = "--enable-opus,--disable-opus,libopus"
+PACKAGECONFIG[sndfile] = "--enable-sndfile,--disable-sndfile,libsndfile1"
+PACKAGECONFIG[vp8] = "--enable-vp8,--disable-vp8,libvpx"
+PACKAGECONFIG[ass] = "--enable-assrender,--disable-assrender,libass"
+PACKAGECONFIG[openal] = "--enable-openal,--disable-openal,openal-soft"
+PACKAGECONFIG[schro] = "--enable-schro,--disable-schro,schroedinger"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[faac] = "--enable-faac,--disable-faac,faac"
+PACKAGECONFIG[rtmp] = "--enable-rtmp,--disable-rtmp,rtmpdump"
+PACKAGECONFIG[voamrwbenc] = "--enable-voamrwbenc,--disable-voamrwbenc,vo-amrwbenc"
+PACKAGECONFIG[voaacenc] = "--enable-voaacenc,--disable-voaacenc,vo-aacenc"
+PACKAGECONFIG[resindvd] = "--enable-resindvd,--disable-resindvd,libdvdnav libdvdread"
+PACKAGECONFIG[zbar] = "--enable-zbar,--disable-zbar,zbar jpeg"
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES =+ "${PN}-resindvd"
+FILES_${PN}-resindvd = "${libdir}/gstreamer-${LIBV}/libresindvd.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-${LIBV}/libresindvd.la"
+FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-${LIBV}/presets/GstVoAmrwbEnc.prs"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "fcb09798114461955260e4d940db5987"
+SRC_URI[sha256sum] = "0eae7d1a1357ae8377fded6a1b42e663887beabe0e6cc336e2ef9ada42e11491"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
new file mode 100644
index 000000000..29fbec5f8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
@@ -0,0 +1,32 @@
+From 5478eafecf618cd8e742cc1b96d688a2c7ce5a79 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sun, 2 Oct 2016 21:49:33 +0200
+Subject: [PATCH] gst-glib2.m4: don't do crazy things to GLIB_CFLAGS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+we are definitely not one of those poor souls mentioned
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ common/m4/gst-glib2.m4 | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
+index b01f02f..4569ae5 100644
+--- a/common/m4/gst-glib2.m4
++++ b/common/m4/gst-glib2.m4
+@@ -69,7 +69,6 @@ AC_DEFUN([AG_GST_GLIB_CHECK],
+ fi
+
+ dnl for the poor souls who for example have glib in /usr/local
+- AS_SCRUB_INCLUDE(GLIB_CFLAGS)
+
+ AC_SUBST(GLIB_EXTRA_CFLAGS)
+ ])
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
new file mode 100644
index 000000000..52142562a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
@@ -0,0 +1,37 @@
+audioresample: Fix build on x86 if emmintrin.h is available but can't be used
+
+On x86, EMMINTRIN is defined but not usable without SSE so check for
+__SSE__ and __SSE2__ as well.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=670690
+
+Upstream-Status: Backport
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ gst/audioresample/resample.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
+index 98d006c..481fa01 100644
+--- a/gst/audioresample/resample.c
++++ b/gst/audioresample/resample.c
+@@ -77,13 +77,13 @@
+ #define EXPORT G_GNUC_INTERNAL
+
+ #ifdef _USE_SSE
+-#ifndef HAVE_XMMINTRIN_H
++#if !defined(__SSE__) || !defined(HAVE_XMMINTRIN_H)
+ #undef _USE_SSE
+ #endif
+ #endif
+
+ #ifdef _USE_SSE2
+-#ifndef HAVE_EMMINTRIN_H
++#if !defined(__SSE2__) || !defined(HAVE_EMMINTRIN_H)
+ #undef _USE_SSE2
+ #endif
+ #endif
+--
+1.7.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
new file mode 100644
index 000000000..b8602c80d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
@@ -0,0 +1,27 @@
+Upstream-Status: Submitted [similar patch by other author, bugzilla]
+Bugtracker-URL: https://bugzilla.gnome.org/show_bug.cgi?id=663600
+
+Prepend PKG_CONFIG_SYSROOT to includedir, so configure doesn't
+search for gstconfig.h in /usr/include.
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+---
+ configure.ac | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1901bcf..460fb0a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -435,7 +435,7 @@ AG_GST_CHECK_PLUGIN(volume)
+ dnl check for gstreamer core features (subsystems)
+ dnl FIXME: this assumes srcdir == builddir for uninstalled setups
+ GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
+-AG_GST_PARSE_SUBSYSTEM_DISABLES($GST_CONFIGPATH)
++AG_GST_PARSE_SUBSYSTEM_DISABLES($PKG_CONFIG_SYSROOT_DIR$GST_CONFIGPATH)
+ AM_CONDITIONAL(USE_XML, test $GST_DISABLE_XML != "1")
+
+ dnl disable plug-ins that require libxml2's HTML support if it is not available
+--
+1.7.5.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
new file mode 100644
index 000000000..99dbc9d52
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
@@ -0,0 +1,20 @@
+Remove -DTREMOR option since Tremor has dropped its internal
+libogg2, and gst-plugins-base has dependency on that.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+
+diff -r 70065fb4e085 ext/vorbis/Makefile.am
+--- a/ext/vorbis/Makefile.am Tue Mar 13 16:36:56 2012 +0800
++++ b/ext/vorbis/Makefile.am Tue Mar 13 16:38:53 2012 +0800
+@@ -30,7 +30,7 @@
+ gstvorbisdec.c gstvorbisdeclib.c gstvorbiscommon.c
+ libgstivorbisdec_la_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+- -DTREMOR $(IVORBIS_CFLAGS)
++ $(IVORBIS_CFLAGS)
+ libgstivorbisdec_la_LIBADD = \
+ $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+ $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
new file mode 100644
index 000000000..f2354648d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
@@ -0,0 +1,43 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+ file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+ file://gst/ffmpegcolorspace/utils.c;beginline=1;endline=20;md5=9c83a200b8e597b26ca29df20fc6ecd0"
+
+DEPENDS += "alsa-lib libogg libvorbis libtheora util-linux tremor glib-2.0-native"
+
+SRC_URI += "file://gst-plugins-base-tremor.patch \
+ file://configure.ac-fix-subparse-plugin.patch \
+ file://audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch \
+ file://0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch \
+"
+
+SRC_URI[md5sum] = "776c73883e567f67b9c4a2847d8d041a"
+SRC_URI[sha256sum] = "2cd3b0fa8e9b595db8f514ef7c2bdbcd639a0d63d154c00f8c9b609321f49976"
+
+PR = "r8"
+
+inherit gettext
+
+EXTRA_OECONF += "--disable-freetypetest"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango"
+PACKAGECONFIG[x11] = "--enable-x --enable-xvideo,--disable-x --disable-xvideo,virtual/libx11 libxv libsm libice"
+PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm -f ${S}/m4/lib-link.m4
+}
+
+FILES_${PN} += "${datadir}/${BPN}"
+
+CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no"
+
+# /usr/bin/gst-visualise-0.10 is a perl script.
+RDEPENDS_${PN}-apps += "perl"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
new file mode 100644
index 000000000..bc2f88b24
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
@@ -0,0 +1,35 @@
+From 14d51cbefef19737e7ab2b6818ee1d3bdb248d12 Mon Sep 17 00:00:00 2001
+From: Jeremy Stashluk <jstashluk@dekaresearch.com>
+Date: Wed, 6 Feb 2013 09:59:48 -0500
+Subject: [PATCH] conditional gl framebuffer undefined use
+
+The OpenGL extension GL_ARB_framebuffer_object defines the macro
+GL_FRAMEBUFFER_UNDEFINED. The macro will only need to map to an error
+string if the extension provides functions that might return the macro.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jeremy Stashluk <jstashluk@dekaresearch.com>
+---
+ gst-libs/gst/gl/gstgldisplay.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
+index 3ed0b71..64c6c2c 100644
+--- a/gst-libs/gst/gl/gstgldisplay.c
++++ b/gst-libs/gst/gl/gstgldisplay.c
+@@ -2177,9 +2177,11 @@ gst_gl_display_check_framebuffer_status (void)
+ GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
+ break;
+
++#if defined(GL_ARB_framebuffer_object)
+ case GL_FRAMEBUFFER_UNDEFINED:
+ GST_ERROR ("GL_FRAMEBUFFER_UNDEFINED");
+ break;
++#endif
+
+ default:
+ GST_ERROR ("General FBO error");
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch
new file mode 100644
index 000000000..7db1c5afc
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch
@@ -0,0 +1,22 @@
+Check for header and library separately and check for GLESv2 before egl
+this is to overcome an annoying issue with rpi/userland where egl depends
+on sysmbols from libGLESv2
+
+-Khem
+Index: gst-plugins-gl-0.10.3/configure.ac
+===================================================================
+--- gst-plugins-gl-0.10.3.orig/configure.ac
++++ gst-plugins-gl-0.10.3/configure.ac
+@@ -183,8 +183,10 @@ case $host in
+ else
+ AC_CHECK_HEADERS([EGL/egl.h], [HAVE_EGL=yes], [HAVE_EGL=no])
+ if test "x$HAVE_EGL" = "xyes"; then
+- AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h,, AC_MSG_ERROR([EGL is required]))
+- AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h,, AC_MSG_ERROR([OpenGLES2 is required]))
++ AC_CHECK_HEADERS([GLES2/gl2.h],, AC_MSG_ERROR([OpenGLES2 is required]))
++ AC_CHECK_LIB(GLESv2,[glTexImage2D],, AC_MSG_ERROR([OpenGLES2 is required]))
++ AC_CHECK_HEADERS([EGL/egl.h],, AC_MSG_ERROR([EGL is required]))
++ AC_CHECK_LIB(EGL,[eglGetError],, AC_MSG_ERROR([EGL is required]))
+ GL_LIBS="$LIBS $X_LIBS -lEGL -lGLESv2"
+ GL_BACKEND=x11ES2
+ GL_TYPE=gles
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
new file mode 100644
index 000000000..f3eaf3094
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
@@ -0,0 +1,29 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI[md5sum] = "ac70ede13f79978d56eaed8abaa3c938"
+SRC_URI[sha256sum] = "48340b6a4b8abce16344a7bc33e74a94fdcce4f57ef6342cdf2f941c429bf210"
+
+SRC_URI += " file://0001-conditional-gl-framebuffer-undefined-use.patch \
+ file://rpi-egl-gles2-dep.patch \
+"
+
+DEPENDS += "gst-plugins-base virtual/libgles2 virtual/egl jpeg libpng glew"
+
+PR = "r4"
+
+inherit gettext distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+# This package doesn't have a configure switch for EGL or GL, so forcibly tell
+# configure that it can't find gl.h so it always uses EGL. If/when we have some
+# way for machines to specify their preferred GL flavour this can be
+# automatically adapted.
+EXTRA_OECONF += "ac_cv_header_GL_gl_h=no"
+
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-apps = "1"
+ALLOW_EMPTY_${PN}-glib = "1"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
new file mode 100644
index 000000000..6456d3c6c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
@@ -0,0 +1,33 @@
+From 12d18fe4e98e7c232d59b56d529a0521f293fe6d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 5 Sep 2012 18:54:42 +0200
+Subject: [PATCH] v4l2: fix build with recent kernels, the v4l2_buffer input
+ field was removed
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Backport
+
+[1] http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=9f2aa8d47f835ea155aaf635f618c0fc1ca87012
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ sys/v4l2/gstv4l2bufferpool.c | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
+index b81c6a4..51cc0ce 100644
+--- a/sys/v4l2/gstv4l2bufferpool.c
++++ b/sys/v4l2/gstv4l2bufferpool.c
+@@ -181,7 +181,6 @@ gst_v4l2_buffer_new (GstV4l2BufferPool * pool, guint index, GstCaps * caps)
+ GST_LOG_OBJECT (pool->v4l2elem, " MMAP offset: %u",
+ ret->vbuffer.m.offset);
+ GST_LOG_OBJECT (pool->v4l2elem, " length: %u", ret->vbuffer.length);
+- GST_LOG_OBJECT (pool->v4l2elem, " input: %u", ret->vbuffer.input);
+
+ data = (guint8 *) v4l2_mmap (0, ret->vbuffer.length,
+ PROT_READ | PROT_WRITE, MAP_SHARED, pool->video_fd,
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
new file mode 100644
index 000000000..bd0de583a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
@@ -0,0 +1,45 @@
+From ccb01de8096a32d86d47b0d92ec3416c57ee4d25 Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Thu, 22 Aug 2013 12:15:54 -0400
+Subject: [PATCH] v4l2_calls: define V4L2_CID_HCENTER and V4L2_CID_VCENTER
+
+kernel commit 24b9f5017 [[media] V4L: Remove deprecated image centering controls]
+removed the definitions of V4L2_CID_HCENTER and V4L2_CID_VCENTER after three
+years of depreciation.
+
+The ioctl values are still free, and the case statement which processess them
+in v4l2 userspace falls through to the proper replacement. So in the short
+term, we can explicitly define them using the old absolute values, and everything
+will work.
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+---
+ sys/v4l2/v4l2_calls.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
+index 309bfb6..3c64544 100644
+--- a/sys/v4l2/v4l2_calls.c
++++ b/sys/v4l2/v4l2_calls.c
+@@ -54,11 +54,16 @@
+ #include "gst/gst-i18n-plugin.h"
+
+ /* Those are ioctl calls */
++
++/* V4L2_CID_HCENTER has been removed from the mainline kernel, but
++ the ioctl space is still present. Since these values fall through
++ to their replacement, it is safe (in the short term) to re-use the
++ old values explictily */
+ #ifndef V4L2_CID_HCENTER
+-#define V4L2_CID_HCENTER V4L2_CID_HCENTER_DEPRECATED
++#define V4L2_CID_HCENTER V4L2_CID_BASE+22
+ #endif
+ #ifndef V4L2_CID_VCENTER
+-#define V4L2_CID_VCENTER V4L2_CID_VCENTER_DEPRECATED
++#define V4L2_CID_VCENTER V4L2_CID_BASE+23
+ #endif
+
+ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
new file mode 100644
index 000000000..48b8e98b8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
@@ -0,0 +1,47 @@
+From ce94b2c2b91b6db190c121860e12a6afafce7ae1 Mon Sep 17 00:00:00 2001
+From: Roland Krikava <rkrikava@gmail.com>
+Date: Fri, 2 Nov 2012 12:38:44 -0400
+Subject: [PATCH 407/440] mulawdec: fix integer overrun
+
+There might be more than 65535 samples in a chunk of data.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=687469
+
+Commit - 3be45f70220310ec1c60d819f90b5f2ae03b5d83 in 0.10 branch
+
+Upstream Status: Backported
+
+Signed-off-by: Roland Krikava <rkrikava@gmail.com>
+---
+ gst/law/mulaw-conversion.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/gst/law/mulaw-conversion.c b/gst/law/mulaw-conversion.c
+index 8afae80..190a9f5 100644
+--- a/gst/law/mulaw-conversion.c
++++ b/gst/law/mulaw-conversion.c
+@@ -51,9 +51,10 @@ mulaw_encode (gint16 * in, guint8 * out, gint numsamples)
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
+ };
+- gint16 sign, exponent, mantissa, i;
++ gint16 sign, exponent, mantissa;
+ gint16 sample;
+ guint8 ulawbyte;
++ gint i;
+
+ for (i = 0; i < numsamples; i++) {
+ sample = in[i];
+@@ -102,7 +103,8 @@ mulaw_decode (guint8 * in, gint16 * out, gint numsamples)
+ static gint16 exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
+ gint16 sign, exponent, mantissa;
+ guint8 ulawbyte;
+- gint16 linear, i;
++ gint16 linear;
++ gint i;
+
+ for (i = 0; i < numsamples; i++) {
+ ulawbyte = in[i];
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
new file mode 100644
index 000000000..f993cfc11
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
@@ -0,0 +1,47 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+ file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+
+PR = "r8"
+
+PACKAGECONFIG ?= "jpeg v4l \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \
+"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[wavpack] = "--enable-wavpack,--disable-wavpack,wavpack"
+PACKAGECONFIG[gdkpixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf"
+PACKAGECONFIG[v4l] = "--enable-gst_v4l2 --with-gudev,--disable-gst_v4l2 --without-gudev,libgudev"
+# sub-feature of v4l, but control separately since libv4l is not part of oe-core
+PACKAGECONFIG[libv4l] = "--with-libv4l2,--without-libv4l2,libv4l"
+PACKAGECONFIG[bzip2] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[x11] = "--enable-x,--disable-x,virtual/libx11 libxfixes libxdamage"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libiec61883 libavc1394"
+
+DEPENDS += "gst-plugins-base gconf cairo libpng zlib libid3tag flac \
+ speex libsoup-2.4 libcap"
+
+inherit gettext gconf
+
+SRC_URI += "file://0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch \
+ file://0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch \
+ file://0407-mulawdec-fix-integer-overrun.patch \
+"
+EXTRA_OECONF += "--disable-aalib --disable-esd --disable-shout2 --disable-libcaca --disable-hal \
+ --disable-examples --disable-taglib"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "24f98a294a2b521e1b29412bdadae2e6"
+SRC_URI[sha256sum] = "7e27840e40a7932ef2dc032d7201f9f41afcaf0b437daf5d1d44dc96d9e35ac6"
+
+FILES_${PN}-gconfelements += "${sysconfdir}/gconf/schemas/gstreamer-0.10.schemas"
+FILES_${PN}-equalizer += "${datadir}/gstreamer-0.10/presets/*.prs"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
new file mode 100644
index 000000000..1f72fc036
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
@@ -0,0 +1,193 @@
+From 649bd92cd2600719862ad5189899212409dd0a67 Mon Sep 17 00:00:00 2001
+From: Leon Merten Lohse <leon@green-side.de>
+Date: Thu, 3 May 2012 23:50:30 +0100
+Subject: [PATCH] cdio: compensate for libcdio's recent cd-text api changes
+
+https://bugzilla.gnome.org/show_bug.cgi?id=675112
+
+Conflicts:
+
+ ext/cdio/gstcdiocddasrc.c
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+Upstream-Status: Backport
+---
+ ext/cdio/gstcdio.c | 35 ++++++++++++++++++++++++++++-------
+ ext/cdio/gstcdio.h | 16 ++++++++++++++++
+ ext/cdio/gstcdiocddasrc.c | 19 +++++++++++++++++++
+ 3 files changed, 63 insertions(+), 7 deletions(-)
+
+diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c
+index 2f58d18..483ebf5 100644
+--- a/ext/cdio/gstcdio.c
++++ b/ext/cdio/gstcdio.c
+@@ -30,12 +30,16 @@
+ GST_DEBUG_CATEGORY (gst_cdio_debug);
+
+ void
+-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
++gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
+ cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
+ {
+ const gchar *txt;
+
++#if LIBCDIO_VERSION_NUM > 83
++ txt = cdtext_get_const (cdtext, field, track);
++#else
+ txt = cdtext_get_const (field, cdtext);
++#endif
+ if (txt == NULL || *txt == '\0') {
+ GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
+ return;
+@@ -57,6 +61,12 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
+ }
+
+ GstTagList *
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
++{
++ GstTagList *tags = NULL;
++
++#else
+ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+ {
+ GstTagList *tags = NULL;
+@@ -67,14 +77,22 @@ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+ GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
+ return NULL;
+ }
++#endif
+
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_PERFORMER, GST_TAG_ARTIST, &tags);
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_TITLE, &tags);
++ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
++ GST_TAG_ARTIST, &tags);
++ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
++ &tags);
+
+ return tags;
+ }
+
+ void
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
++ GstTagList * tags)
++{
++#else
+ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+ {
+ cdtext_t *t;
+@@ -84,11 +102,14 @@ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+ GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
+ return;
+ }
++#endif
+
+- /* FIXME: map CDTEXT_PERFORMER to GST_TAG_ALBUM_ARTIST once we have that */
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_ALBUM, &tags);
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_GENRE, GST_TAG_GENRE, &tags);
+-
++ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
++ GST_TAG_ALBUM_ARTIST, &tags);
++ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
++ &tags);
++ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
++ &tags);
+ GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
+ }
+
+diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h
+index ef31ed0..c6da580 100644
+--- a/ext/cdio/gstcdio.h
++++ b/ext/cdio/gstcdio.h
+@@ -24,22 +24,38 @@
+ #include <gst/gst.h>
+ #include <cdio/cdio.h>
+ #include <cdio/cdtext.h>
++#include <cdio/version.h>
++
++#if LIBCDIO_VERSION_NUM <= 83
++ #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
++ #define CDTEXT_FIELD_GENRE CDTEXT_GENRE
++ #define CDTEXT_FIELD_TITLE CDTEXT_TITLE
++#endif
+
+ GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
+ #define GST_CAT_DEFAULT gst_cdio_debug
+
+ void gst_cdio_add_cdtext_field (GstObject * src,
+ cdtext_t * cdtext,
++ track_t track,
+ cdtext_field_t field,
+ const gchar * gst_tag,
+ GstTagList ** p_tags);
+
+ GstTagList * gst_cdio_get_cdtext (GstObject * src,
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext_t * t,
++#else
+ CdIo * cdio,
++#endif
+ track_t track);
+
+ void gst_cdio_add_cdtext_album_tags (GstObject * src,
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext_t * t,
++#else
+ CdIo * cdio,
++#endif
+ GstTagList * tags);
+
+ #endif /* __GST_CDIO_H__ */
+diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c
+index 615a0c8..830839e 100644
+--- a/ext/cdio/gstcdiocddasrc.c
++++ b/ext/cdio/gstcdiocddasrc.c
+@@ -206,6 +206,9 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+ GstCdioCddaSrc *src;
+ discmode_t discmode;
+ gint first_track, num_tracks, i;
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext_t *cdtext;
++#endif
+
+ src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+@@ -244,8 +244,18 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
+ if (src->read_speed != -1)
+ cdio_set_speed (src->cdio, src->read_speed);
+
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext = cdio_get_cdtext (src->cdio);
++
++ if (NULL == cdtext)
++ GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
++ else
++ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
++ cddabasesrc->tags);
++#else
+ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
+ cddabasesrc->tags);
++#endif
+
+ GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
+
+@@ -250,8 +263,14 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+ * the right thing here (for cddb id calculations etc. as well) */
+ track.start = cdio_get_track_lsn (src->cdio, i + first_track);
+ track.end = track.start + len_sectors - 1; /* -1? */
++#if LIBCDIO_VERSION_NUM > 83
++ if (NULL != cdtext)
++ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
++ i + first_track);
++#else
+ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
+ i + first_track);
++#endif
+
+ gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
+ }
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
new file mode 100644
index 000000000..3fd6a2697
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
@@ -0,0 +1,58 @@
+From e634bc6420826f760f6519a9f134c6a4d3412ef8 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Mon, 19 Oct 2015 15:26:24 +0200
+Subject: [PATCH] Fix opencore include paths
+
+Upstream-Status: Inappropriate [no upstream - GStreamer 0.10 is no longer being maintained]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ ext/amrnb/amrnbdec.h | 2 +-
+ ext/amrnb/amrnbenc.h | 2 +-
+ ext/amrwbdec/amrwbdec.h | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/ext/amrnb/amrnbdec.h b/ext/amrnb/amrnbdec.h
+index 1e81839..01b7154 100644
+--- a/ext/amrnb/amrnbdec.h
++++ b/ext/amrnb/amrnbdec.h
+@@ -22,7 +22,7 @@
+
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <interf_dec.h>
++#include <opencore-amrnb/interf_dec.h>
+
+ G_BEGIN_DECLS
+
+diff --git a/ext/amrnb/amrnbenc.h b/ext/amrnb/amrnbenc.h
+index 7f673ac..5be39b5 100644
+--- a/ext/amrnb/amrnbenc.h
++++ b/ext/amrnb/amrnbenc.h
+@@ -21,7 +21,7 @@
+ #define __GST_AMRNBENC_H__
+
+ #include <gst/gst.h>
+-#include <interf_enc.h>
++#include <opencore-amrnb/interf_enc.h>
+ #include <gst/audio/gstaudioencoder.h>
+
+ G_BEGIN_DECLS
+diff --git a/ext/amrwbdec/amrwbdec.h b/ext/amrwbdec/amrwbdec.h
+index c3528fc..f27c6d2 100644
+--- a/ext/amrwbdec/amrwbdec.h
++++ b/ext/amrwbdec/amrwbdec.h
+@@ -22,8 +22,8 @@
+
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <dec_if.h>
+-#include <if_rom.h>
++#include <opencore-amrwb/dec_if.h>
++#include <opencore-amrwb/if_rom.h>
+
+ G_BEGIN_DECLS
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
new file mode 100644
index 000000000..199b47d76
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
@@ -0,0 +1,35 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://gst/synaesthesia/synaescope.h;beginline=1;endline=20;md5=99f301df7b80490c6ff8305fcc712838 \
+ file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 \
+ file://gst/mpegstream/gstmpegparse.h;beginline=1;endline=18;md5=ff65467b0c53cdfa98d0684c1bc240a9"
+
+DEPENDS += "gst-plugins-base libid3tag libmad mpeg2dec liba52 lame"
+PR = "r3"
+
+inherit gettext
+
+EXTRA_OECONF += "--with-plugins=a52dec,lame,id3tag,mad,mpeg2dec,mpegstream,mpegaudioparse,asfdemux,realmedia \
+ --disable-orc"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x264] = "--enable-x264,--disable-x264,x264"
+PACKAGECONFIG[cdio] = "--enable-cdio,--disable-cdio,libcdio"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread,libdvdread"
+PACKAGECONFIG[amrnb] = "--enable-amrnb,--disable-amrnb,opencore-amr"
+PACKAGECONFIG[amrwb] = "--enable-amrwb,--disable-amrwb,opencore-amr"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "1d81c593e22a6cdf0f2b4f57eae93df2"
+SRC_URI[sha256sum] = "1ca90059275c0f5dca71d4d1601a8f429b7852baed0723e820703b977e2c8df0"
+SRC_URI += "file://0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch \
+ file://0002-Fix-opencore-include-paths.patch"
+
+FILES_${PN}-amrnb += "${datadir}/gstreamer-0.10/presets/GstAmrnbEnc.prs"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
new file mode 100644
index 000000000..6e163a8c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Plugins for the GStreamer multimedia framework"
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+DEPENDS = "gstreamer"
+
+# gobject-introspection to get --disable-introspection into UNKNOWN_CONFIGURE_WHITELIST
+inherit autotools pkgconfig gobject-introspection
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_DEBUG} --disable-examples --disable-introspection"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+LIBV = "0.10"
+require recipes-multimedia/gstreamer/gst-plugins-package.inc
+
+PACKAGES_DYNAMIC += "^${PN}-.*"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+ if [ -e ${S}/po/Makefile.in.in ]; then
+ sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+ fi
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
new file mode 100644
index 000000000..69b21dd87
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
@@ -0,0 +1,38 @@
+index gst-rtsp_0.10.8/bindings/python/Makefile.am
+Index: gst-rtsp-0.10.8/bindings/python/Makefile.am
+===================================================================
+--- gst-rtsp-0.10.8.orig/bindings/python/Makefile.am
++++ gst-rtsp-0.10.8/bindings/python/Makefile.am
+@@ -14,7 +14,7 @@ defs_DATA = $(DEFS)
+ defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs
+ OVERRIDES = rtspserver.override
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
+
+ rtspserver_la_CFLAGS = -I$(top_srcdir)/src \
+ $(PYGOBJECT_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+Index: gst-rtsp-0.10.8/examples/Makefile.am
+===================================================================
+--- gst-rtsp-0.10.8.orig/examples/Makefile.am
++++ gst-rtsp-0.10.8/examples/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-video test-ogg test-mp4 test-readme test-launch test-sdp test-uri test-auth
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
+Index: gst-rtsp-0.10.8/tests/Makefile.am
+===================================================================
+--- gst-rtsp-0.10.8.orig/tests/Makefile.am
++++ gst-rtsp-0.10.8/tests/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-cleanup
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
new file mode 100644
index 000000000..b78bcaf5a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
@@ -0,0 +1,18 @@
+SUMMARY = "GStreamer RTSP server"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch"
+SRC_URI[md5sum] = "b511af07000595f63c3a705946221643"
+SRC_URI[sha256sum] = "9915887cf8515bda87462c69738646afb715b597613edc7340477ccab63a6617"
+
+DEPENDS = "gst-plugins-base gstreamer"
+
+EXTRA_OECONF = "--disable-introspection"
+
+# Configure always checks for Python so inherit pythonnative. Better solution
+# would be to disable the checks entirely.
+inherit autotools pythonnative gettext
+
+FILES_${PN}-dev += "${datadir}/vala/vapi/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
new file mode 100644
index 000000000..d07749682
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
@@ -0,0 +1,32 @@
+From ed7f4802222234eef192aa3f74bc92268f338f97 Mon Sep 17 00:00:00 2001
+From: Sebastian Droege <sebastian.droege@collabora.co.uk>
+Date: Tue, 6 Mar 2012 12:28:02 +0100
+Subject: [PATCH] baseparse: Fix 'self-comparison always evaluates to true'
+
+This was really a bug.
+
+Commit is ed7f4802222234eef192aa3f74bc92268f338f97 in 0.10 branch
+
+Upstream Status: Backported
+
+Signed-off-by: Sebastian Droege <sebastian.droege@collabora.co.uk>
+---
+ libs/gst/base/gstbaseparse.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
+index 851ec1d..108ee89 100644
+--- a/libs/gst/base/gstbaseparse.c
++++ b/libs/gst/base/gstbaseparse.c
+@@ -3899,7 +3899,7 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
+ seek event (in bytes) to upstream. Segment / flush handling happens
+ in corresponding src event handlers */
+ GST_DEBUG_OBJECT (parse, "seek in PUSH mode");
+- if (seekstop >= 0 && seekpos <= seekpos)
++ if (seekstop >= 0 && seekstop <= seekpos)
+ seekstop = seekpos;
+ new_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+ GST_SEEK_TYPE_SET, seekpos, stop_type, seekstop);
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
new file mode 100644
index 000000000..dc2d60612
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
@@ -0,0 +1,35 @@
+From 60516f4798894f958fc53b470e1283318d0f8706 Mon Sep 17 00:00:00 2001
+From: Kerrick Staley <kerrick@kerrickstaley.com>
+Date: Tue, 20 Aug 2013 23:59:29 -0700
+Subject: [PATCH 1/2] parse: make grammar.y work with Bison 3
+
+YYLEX_PARAM is no longer supported in Bison 3.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=706462
+---
+ gst/parse/grammar.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst/parse/grammar.y b/gst/parse/grammar.y
+index 24fc87b..7f9dd16 100644
+--- a/gst/parse/grammar.y
++++ b/gst/parse/grammar.y
+@@ -26,7 +26,6 @@
+ */
+
+ #define YYERROR_VERBOSE 1
+-#define YYLEX_PARAM scanner
+
+ #define YYENABLE_NLS 0
+
+@@ -648,6 +647,7 @@ static int yyerror (void *scanner, graph_t *graph, const char *s);
+ %right '.'
+ %left '!' '='
+
++%lex-param { void *scanner }
+ %parse-param { void *scanner }
+ %parse-param { graph_t *graph }
+ %pure-parser
+--
+2.7.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
new file mode 100644
index 000000000..8db396631
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
@@ -0,0 +1,32 @@
+From 4b145ceb22bbce7ba6e209c6ab61f2d5867e69f9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 1 Nov 2016 19:02:30 +0100
+Subject: [PATCH] gst-glib2.m4: don't do crazy things to GLIB_CFLAGS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+we are definitely not one of those poor souls mentioned
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ common/m4/gst-glib2.m4 | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
+index b01f02f..4569ae5 100644
+--- a/common/m4/gst-glib2.m4
++++ b/common/m4/gst-glib2.m4
+@@ -69,7 +69,6 @@ AC_DEFUN([AG_GST_GLIB_CHECK],
+ fi
+
+ dnl for the poor souls who for example have glib in /usr/local
+- AS_SCRUB_INCLUDE(GLIB_CFLAGS)
+
+ AC_SUBST(GLIB_EXTRA_CFLAGS)
+ ])
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
new file mode 100644
index 000000000..5d8bb1340
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
@@ -0,0 +1,19 @@
+# gstreamer: Fix a problem with configure if check has already been built
+# Richard Purdie <rpurdie@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+diff -urN gstreamer-0.10.29-orig/configure.ac gstreamer-0.10.29/configure.ac
+--- gstreamer-0.10.29-orig/configure.ac 2010-06-26 12:49:27.774930773 +0800
++++ gstreamer-0.10.29/configure.ac 2010-06-26 12:51:12.899200233 +0800
+@@ -543,8 +543,10 @@
+ *) BUILD_CHECK=yes ;;
+ esac
+ ])
++
+ dnl bit of a misnomer, but keep the conditional named like this so we don't
+ dnl have to change too much elsewhere
++HAVE_CHECK=no
+ AM_CONDITIONAL(HAVE_CHECK, test "x$BUILD_CHECK" = "xyes")
+
+ dnl configure the desired buffer alignment
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
new file mode 100644
index 000000000..30be85f59
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
@@ -0,0 +1,16 @@
+# Fix crash with gst-inspect
+# Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+--- gstreamer-0.10.9/tools/gst-inspect.c.old 2006-09-12 11:56:53.000000000 +0100
++++ gstreamer-0.10.9/tools/gst-inspect.c 2006-09-12 11:57:27.000000000 +0100
+@@ -1123,7 +1123,7 @@
+ g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+ g_option_context_add_group (ctx, gst_init_get_option_group ());
+ if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+- g_print ("Error initializing: %s\n", err->message);
++ g_print ("Error initializing: %s\n", err ? err->message : "(null)");
+ exit (1);
+ }
+ g_option_context_free (ctx);
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
new file mode 100644
index 000000000..c1f3e71af
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
@@ -0,0 +1,487 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ * 2000 Wim Taymans <wtay@chello.be>
+ * 2005 David A. Schleef <ds@schleef.org>
+ *
+ * gstregistryxml.c: GstRegistry object, support routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it ulnder 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.
+ */
+
+
+#include <gst/gstregistrybinary.h>
+
+/*
+** Simple handy function to write a memory location to the registry cache file
+*/
+inline static gboolean
+gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size)
+{
+ if (write(registry->cache_file, mem, size) != size)
+ {
+ GST_ERROR("Failed to write binary registry element: ptr=%p size=%u error=%s\n",
+ mem, size, strerror(errno));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*
+** Save features GstBinary style
+*/
+static gboolean
+gst_registry_binary_fill_feature(GList **list, GstPluginFeature *orig, GstBinaryPluginFeature *dest, const char *name)
+{
+ GstBinaryChunck *chk;
+
+ if ((chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+ return FALSE;
+
+ chk->data = dest;
+ chk->size = sizeof (GstBinaryPluginFeature);
+
+ *list = g_list_append(*list, chk);
+
+ dest->rank = orig->rank;
+ if (!strncpy(dest->typename, name, GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN) ||
+ !strncpy(dest->name, orig->name, GST_BINARY_REGISTRY_TYPENAME_NAME_LEN))
+ {
+ GST_ERROR("Failed to write binary registry feature");
+ goto fail;
+ }
+
+ if (GST_IS_ELEMENT_FACTORY(orig))
+ {
+ GstElementFactory *factory = GST_ELEMENT_FACTORY(orig);
+
+ if (!strncpy(dest->longname, factory->details.longname, GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN) ||
+ !strncpy(dest->class, factory->details.klass, GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN) ||
+ !strncpy(dest->description, factory->details.description, GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN) ||
+ !strncpy(dest->author, factory->details.author, GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN))
+ {
+ GST_ERROR("Failed to write binary registry feature");
+ goto fail;
+ }
+ }
+
+ dest->npadtemplates = dest->ninterfaces = dest->nuritypes = 0;
+ return TRUE;
+
+ fail:
+ free(chk);
+ return FALSE;
+}
+
+
+/*
+** Initialize the GstBinaryRegistryMagic, setting both our magic number and gstreamer major/minor version
+*/
+inline static gboolean
+gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m)
+{
+ if (!strncpy(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) ||
+ !strncpy(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+ {
+ GST_ERROR("Failed to write magic to the registry magic structure");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*
+** Check GstBinaryRegistryMagic validity.
+** Return a pointer pointing right after the magic structure
+*/
+static gchar *
+gst_registry_binary_check_magic(gchar *in)
+{
+ GstBinaryRegistryMagic *m = (GstBinaryRegistryMagic *) in;
+
+ if (m == NULL || m->magic == NULL || m->version == NULL)
+ {
+ GST_ERROR("Binary registry magic structure is broken");
+ return NULL;
+ }
+ if (strncmp(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) != 0)
+ {
+ GST_ERROR("Binary registry magic is different : %02x%02x%02x%02x != %02x%02x%02x%02x",
+ GST_MAGIC_BINARY_REGISTRY_STR[0] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[1] & 0xff,
+ GST_MAGIC_BINARY_REGISTRY_STR[2] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[3] & 0xff,
+ m->magic[0] & 0xff, m->magic[1] & 0xff, m->magic[2] & 0xff, m->magic[3] & 0xff);
+ return NULL;
+ }
+ if (strncmp(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+ {
+ GST_ERROR("Binary registry magic version is different : %s != %s",
+ GST_MAJORMINOR, m->version);
+ return NULL;
+ }
+ return (in + sizeof (GstBinaryRegistryMagic));
+}
+
+/*
+** Adapt a GstPlugin to our GstBinaryPluginElement structure, and write it to the
+** registry file.
+*/
+static gboolean
+gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin)
+{
+ GstBinaryPluginElement *e;
+ GstBinaryChunck *chk;
+ GList *walk;
+
+ if ((e = calloc(1, sizeof (GstBinaryPluginElement))) == NULL ||
+ (chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+ return FALSE;
+
+ chk->data = e;
+ chk->size = sizeof (GstBinaryPluginElement);
+ *list = g_list_append(*list, chk);
+
+ if (!strncpy(e->name, plugin->desc.name, GST_BINARY_REGISTRY_NAME_LEN) ||
+ !strncpy(e->description, plugin->desc.description, GST_BINARY_REGISTRY_DESCRIPTION_LEN) ||
+ !strncpy(e->filename, plugin->filename, _POSIX_PATH_MAX) ||
+ !strncpy(e->version, plugin->desc.version, GST_BINARY_REGISTRY_VERSION_LEN) ||
+ !strncpy(e->license, plugin->desc.license, GST_BINARY_REGISTRY_LICENSE_LEN) ||
+ !strncpy(e->source, plugin->desc.source, GST_BINARY_REGISTRY_SOURCE_LEN) ||
+ !strncpy(e->package, plugin->desc.package, GST_BINARY_REGISTRY_PACKAGE_LEN) ||
+ !strncpy(e->origin, plugin->desc.origin, GST_BINARY_REGISTRY_ORIGIN_LEN))
+ {
+ GST_DEBUG("Can't adapt GstPlugin to GstBinaryPluginElement");
+ goto fail;
+ }
+
+ e->size = plugin->file_size;
+ e->m32p = plugin->file_mtime;
+
+ GList *ft_list = gst_registry_get_feature_list_by_plugin(registry, plugin->desc.name);
+
+ for (walk = ft_list; walk; walk = g_list_next(walk), e->nfeatures++)
+ {
+ GstPluginFeature *curfeat = GST_PLUGIN_FEATURE (walk->data);
+ GstBinaryPluginFeature *newfeat;
+ const char *feat_name = g_type_name(G_OBJECT_TYPE(curfeat));
+
+ if ((newfeat = calloc(1, sizeof (GstBinaryPluginFeature))) == NULL)
+ goto fail;
+
+ if (!feat_name || !gst_registry_binary_fill_feature(list, curfeat, newfeat, feat_name))
+ {
+ GST_ERROR("Can't fill plugin feature, aborting.");
+ goto fail;
+ }
+ }
+
+ GST_DEBUG("Found %d features in plugin \"%s\"\n", e->nfeatures, e->name);
+ return TRUE;
+
+ fail:
+ free(chk);
+ free(e);
+ return FALSE;
+}
+
+/*
+** Write the cache to file. Part of the code was taken from gstregistryxml.c
+*/
+gboolean
+gst_registry_binary_write_cache(GstRegistry *registry, const char *location)
+{
+ GList *walk;
+ char *tmp_location;
+ GstBinaryRegistryMagic *magic;
+ GstBinaryChunck *magic_chunck;
+ GList *to_write = NULL;
+
+ GST_INFO("Writing binary registry cache");
+
+ g_return_val_if_fail (GST_IS_REGISTRY (registry), FALSE);
+ tmp_location = g_strconcat (location, ".tmpXXXXXX", NULL);
+ registry->cache_file = g_mkstemp (tmp_location);
+ if (registry->cache_file == -1)
+ {
+ char *dir;
+
+ /* oops, I bet the directory doesn't exist */
+ dir = g_path_get_dirname (location);
+ g_mkdir_with_parents (dir, 0777);
+ g_free (dir);
+
+ registry->cache_file = g_mkstemp (tmp_location);
+ }
+
+ if (registry->cache_file == -1)
+ goto fail;
+
+ if ((magic = calloc(1, sizeof (GstBinaryRegistryMagic))) == NULL ||
+ !gst_registry_binary_initialize_magic(magic))
+ goto fail;
+
+ if ((magic_chunck = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+ goto fail;
+
+ magic_chunck->data = magic;
+ magic_chunck->size = sizeof (GstBinaryRegistryMagic);
+ to_write = g_list_append(to_write, magic_chunck);
+
+ /* Iterate trough the list of plugins in the GstRegistry and adapt them to our structures */
+ for (walk = g_list_last(registry->plugins); walk; walk = g_list_previous(walk))
+ {
+ GstPlugin *plugin = GST_PLUGIN(walk->data);
+
+ if (!plugin->filename)
+ continue;
+
+ if (plugin->flags & GST_PLUGIN_FLAG_CACHED)
+ {
+ int ret;
+ struct stat statbuf;
+
+ ret = g_stat (plugin->filename, &statbuf);
+ if ((ret = g_stat (plugin->filename, &statbuf)) < 0 ||
+ plugin->file_mtime != statbuf.st_mtime ||
+ plugin->file_size != statbuf.st_size)
+ continue;
+ }
+
+ if (!gst_registry_binary_save_plugin(&to_write, registry, plugin))
+ {
+ GST_ERROR("Can't write binary plugin information for \"%s\"", plugin->filename);
+ continue; /* Try anyway */
+ }
+ }
+
+ for (walk = g_list_first(to_write); walk; walk = g_list_next(walk))
+ {
+ GstBinaryChunck *cur = walk->data;
+
+ if (!gst_registry_binary_write(registry, cur->data, cur->size))
+ {
+ free(cur->data);
+ free(cur);
+ g_list_free(to_write);
+ goto fail;
+ }
+ free(cur->data);
+ free(cur);
+ }
+ g_list_free(to_write);
+
+ if (close(registry->cache_file) < 0)
+ {
+ GST_DEBUG("Can't close registry file : %s", strerror(errno));
+ goto fail;
+ }
+
+ if (g_file_test (tmp_location, G_FILE_TEST_EXISTS)) {
+#ifdef WIN32
+ remove (location);
+#endif
+ rename (tmp_location, location);
+ }
+
+ g_free (tmp_location);
+ return TRUE;
+
+ fail:
+ g_free(tmp_location);
+ return FALSE;
+}
+
+static GstPluginFeature*
+gst_registry_binary_load_feature(GstBinaryPluginFeature *in)
+{
+ GstPluginFeature *feature;
+ GType type;
+
+ if (!in->typename || !*(in->typename))
+ return NULL;
+
+ /* GST_INFO("Plugin feature typename : %s", in->typename);*/
+
+ if (!(type = g_type_from_name(in->typename)))
+ {
+ GST_ERROR("Unknown type from typename");
+ return NULL;
+ }
+ feature = g_object_new (type, NULL);
+
+ if (!feature) {
+ GST_ERROR("Can't create feature from type");
+ return NULL;
+ }
+
+ if (!GST_IS_PLUGIN_FEATURE (feature)) {
+ /* don't really know what it is */
+ if (GST_IS_OBJECT (feature))
+ gst_object_unref (feature);
+ else
+ g_object_unref (feature);
+ return NULL;
+ }
+
+ feature->name = g_strdup(in->name);
+ feature->rank = in->rank;
+
+ if (GST_IS_ELEMENT_FACTORY(feature))
+ {
+ GstElementFactory *factory = GST_ELEMENT_FACTORY(feature);
+
+ factory->details.longname = g_strdup(in->longname);
+ factory->details.klass = g_strdup(in->class);
+ factory->details.description = g_strdup(in->description);
+ factory->details.author = g_strdup(in->author);
+
+ /* GST_INFO("Element factory : %s", factory->details.longname); */
+ }
+
+ GST_DEBUG("Added feature %p with name %s", feature, feature->name);
+ return feature;
+}
+
+/*
+** Make a new plugin from current GstBinaryPluginElement structure
+** and save it to the GstRegistry. Return an offset to the next
+** GstBinaryPluginElement structure.
+*/
+static unsigned long
+gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in)
+{
+ GstBinaryPluginElement *p = (GstBinaryPluginElement *) in;
+ GstPlugin *plugin = NULL;
+ GList *plugin_features = NULL;
+ GstBinaryPluginFeature *feat;
+ unsigned int i;
+ unsigned long offset;
+
+ plugin = g_object_new (GST_TYPE_PLUGIN, NULL);
+
+ plugin->flags |= GST_PLUGIN_FLAG_CACHED;
+
+ plugin->desc.name = g_strdup(p->name);
+ plugin->desc.description= g_strdup(p->description);
+ plugin->filename = g_strdup(p->filename);
+ plugin->desc.version = g_strdup(p->version);
+ plugin->desc.license = g_strdup(p->license);
+ plugin->desc.source = g_strdup(p->source);
+ plugin->desc.package = g_strdup(p->package);
+ plugin->desc.origin = g_strdup(p->origin);
+ plugin->file_mtime = p->m32p;
+ plugin->file_size = p->size;
+ plugin->basename = g_path_get_basename (plugin->filename);
+
+ if (plugin->file_mtime < 0 || plugin->file_size < 0)
+ {
+ GST_ERROR("Plugin time or file size is not valid !");
+ g_free(plugin);
+ return -1;
+ }
+
+ if (p->nfeatures < 0)
+ {
+ GST_ERROR("The number of feature structure is not valid !");
+ gst_object_unref(plugin);
+ return -1;
+ }
+
+ for (feat = (GstBinaryPluginFeature *) (in + sizeof (GstBinaryPluginElement)), i = 0;
+ i < p->nfeatures; i++, feat++)
+ {
+ GstPluginFeature *gstfeat;
+
+ if ((gstfeat = gst_registry_binary_load_feature(feat)) == NULL)
+ {
+ g_list_free(plugin_features);
+ g_free(plugin);
+ GST_ERROR("Error while loading binary feature");
+ return -1;
+ }
+ gstfeat->plugin_name = g_strdup(plugin->desc.name);
+ plugin_features = g_list_prepend(plugin_features, gstfeat);
+ }
+
+ GST_DEBUG("Added plugin \"%s\" to global registry from binary registry", plugin->desc.name);
+ GList *g;
+
+ gst_registry_add_plugin (registry, plugin);
+ for (g = plugin_features; g; g = g_list_next (g))
+ gst_registry_add_feature (registry, GST_PLUGIN_FEATURE (g->data));
+ /* g_list_free(plugin_features); */
+
+ offset = sizeof (GstBinaryPluginElement) + p->nfeatures * sizeof (GstBinaryPluginFeature);
+ return offset;
+}
+
+
+/*
+** Read the cache and adapt it to fill GstRegistry
+*/
+gboolean
+gst_registry_binary_read_cache(GstRegistry *registry, const char *location)
+{
+ GMappedFile *mapped = NULL;
+ GTimer *timer = NULL;
+ gchar *contents = NULL;
+ gdouble seconds;
+ unsigned long offset, inc;
+ gsize size;
+
+ /* make sure these types exist */
+ GST_TYPE_ELEMENT_FACTORY;
+ GST_TYPE_TYPE_FIND_FACTORY;
+ GST_TYPE_INDEX_FACTORY;
+
+ timer = g_timer_new ();
+
+ if ((mapped = g_mapped_file_new(location, FALSE, NULL)) == NULL ||
+ (contents = g_mapped_file_get_contents(mapped)) == NULL)
+ {
+ GST_ERROR("Can't load file : %s", strerror(errno));
+ return FALSE;
+ }
+ if ((contents = gst_registry_binary_check_magic(contents)) == NULL)
+ {
+ GST_ERROR("Binary registry type not recognized (invalid magic)");
+ g_mapped_file_free(mapped);
+ return FALSE;
+ }
+
+ if ((size = g_mapped_file_get_length(mapped)) < sizeof (GstBinaryPluginElement))
+ {
+ GST_INFO("No binary plugins structure to read");
+ return TRUE; /* This is not really an error */
+ }
+
+ for (offset = inc = 0; (offset + sizeof (GstBinaryPluginElement)) < size &&
+ (inc = gst_registry_binary_get_binary_plugin(registry, contents + offset)) > 0;
+ offset += inc)
+ ; /* May want in the future to do something here */
+ if (inc < 0)
+ {
+ GST_DEBUG("Problem while reading binary registry");
+ return FALSE;
+ }
+
+ g_timer_stop (timer);
+ seconds = g_timer_elapsed (timer, NULL);
+ g_timer_destroy (timer);
+
+ GST_INFO ("loaded %s in %f seconds", location, seconds);
+
+ if (mapped)
+ g_mapped_file_free (mapped);
+ return TRUE;
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
new file mode 100644
index 000000000..2ef24d765
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
@@ -0,0 +1,194 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ * 2000 Wim Taymans <wim.taymans@chello.be>
+ *
+ * gstregistry.h: Header for registry handling
+ *
+ * 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.
+ */
+
+/* SUGGESTIONS AND TODO :
+** ====================
+** - Use a compressed registry, but would induce performance loss
+** - Encrypt the registry, for security purpose, but would also reduce performances
+** - Also have a non-mmap based cache reading (work with file descriptors)
+*/
+
+#ifndef __GST_REGISTRYBINARY_H__
+#define __GST_REGISTRYBINARY_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <gst/gst_private.h>
+#include <gst/gstelement.h>
+#include <gst/gsttypefind.h>
+#include <gst/gsttypefindfactory.h>
+#include <gst/gsturi.h>
+#include <gst/gstinfo.h>
+#include <gst/gstenumtypes.h>
+#include <gst/gstregistry.h>
+#include <gst/gstpadtemplate.h>
+
+#include "glib-compat-private.h"
+#include <glib/gstdio.h>
+
+/* A magic, written at the beginning of the file */
+#define GST_MAGIC_BINARY_REGISTRY_STR "\xc0\xde\xf0\x0d"
+#define GST_MAGIC_BINARY_REGISTRY_LEN (4)
+#define GST_MAGIC_BINARY_VERSION_LEN (64)
+
+typedef struct _GstBinaryRegistryMagic
+{
+ char magic[GST_MAGIC_BINARY_REGISTRY_LEN];
+ char version[GST_MAGIC_BINARY_VERSION_LEN];
+} GstBinaryRegistryMagic;
+
+
+/* Used to store pointers to write */
+typedef struct _GstBinaryChunck
+{
+ void *data;
+ unsigned int size;
+} GstBinaryChunck;
+
+
+/* A structure containing (staticely) every information needed for a plugin
+**
+** Notes :
+** "nfeatures" is used to say how many GstBinaryPluginFeature structures we will have
+** right after the structure itself.
+*/
+
+/* Various lenght defines for our GstBinaryPluginElement structure
+** Note : We could eventually use smaller size
+*/
+#define GST_BINARY_REGISTRY_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_VERSION_LEN (64)
+#define GST_BINARY_REGISTRY_LICENSE_LEN (256)
+#define GST_BINARY_REGISTRY_SOURCE_LEN (256)
+#define GST_BINARY_REGISTRY_PACKAGE_LEN (1024)
+#define GST_BINARY_REGISTRY_ORIGIN_LEN (1024)
+
+typedef struct _GstBinaryPluginElement
+{
+ char name[GST_BINARY_REGISTRY_NAME_LEN];
+ char description[GST_BINARY_REGISTRY_DESCRIPTION_LEN];
+ char filename[_POSIX_PATH_MAX];
+ char version[GST_BINARY_REGISTRY_VERSION_LEN];
+ char license[GST_BINARY_REGISTRY_LICENSE_LEN];
+ char source[GST_BINARY_REGISTRY_SOURCE_LEN];
+ char package[GST_BINARY_REGISTRY_PACKAGE_LEN];
+ char origin[GST_BINARY_REGISTRY_ORIGIN_LEN];
+ unsigned long size;
+ unsigned long m32p;
+ unsigned int nfeatures;
+} GstBinaryPluginElement;
+
+
+/* A structure containing the plugin features
+**
+** Note :
+** "npadtemplates" is used to store the number of GstBinaryPadTemplate structures following the structure itself.
+** "ninterfaces" is used to store the number of GstBinaryInterface structures following the structure itself.
+** "nuritypes" is used to store the number of GstBinaryUriType structures following the structure itself.
+*/
+#define GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN (512)
+#define GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN (256)
+
+typedef struct _GstBinaryPluginFeature
+{
+ char typename[GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN];
+ char name[GST_BINARY_REGISTRY_TYPENAME_NAME_LEN];
+ unsigned long rank;
+ char longname[GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN];
+ char class[GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN];
+ char description[GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN];
+ char author[GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN];
+ unsigned int npadtemplates;
+ unsigned int ninterfaces;
+ unsigned int nuritypes;
+} GstBinaryPluginFeature;
+
+
+/*
+** A structure containing the static pad templates of a plugin feature
+*/
+#define GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN (1024)
+
+typedef struct _GstBinaryPadTemplate
+{
+ char name[GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN];
+ char cap[GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN];
+ int direction; /* Either 0:"sink" or 1:"src" */
+ GstPadPresence presence;
+} GstBinaryPadTemplate;
+
+/*
+** A very simple structure defining the plugin feature interface string
+*/
+#define GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN (512)
+typedef struct _GstBinaryInterface
+{
+ char interface[GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN];
+ unsigned long size;
+} GstBinaryInterface;
+
+/* Uri Type */
+typedef struct _GstBinaryUriType
+{
+ GstURIType type;
+ unsigned long nuriprotocols;
+} GstBinaryUriType;
+
+/*
+** Function prototypes
+*/
+
+/* Local prototypes */
+inline static gboolean gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size);
+inline static gboolean gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m);
+static gboolean gst_registry_binary_fill_feature(GList **list, GstPluginFeature *, GstBinaryPluginFeature *, const char *);
+static gboolean gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin);
+static gchar *gst_registry_binary_check_magic(gchar *in);
+static GstPluginFeature *gst_registry_binary_load_feature(GstBinaryPluginFeature *);
+static unsigned long gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in);
+
+/* Exportable */
+gboolean gst_registry_binary_write_cache(GstRegistry *registry, const char *location);
+gboolean gst_registry_binary_read_cache(GstRegistry *registry, const char *location);
+
+#endif /* !__GST_REGISTRYBINARY_H__ */
+
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
new file mode 100644
index 000000000..5f97a20fd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
@@ -0,0 +1,53 @@
+SUMMARY = "GStreamer multimedia framework"
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
+ file://gst/gst.h;beginline=1;endline=21;md5=8e5fe5e87d33a04479fde862e238eaa4"
+DEPENDS = "glib-2.0 libxml2 bison-native flex-native glib-2.0-native"
+
+PR = "r2"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2 \
+ file://check_fix.patch \
+ file://gst-inspect-check-error.patch \
+ file://0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch \
+ file://0001-parse-make-grammar.y-work-with-Bison-3.patch \
+ file://0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch \
+"
+
+SRC_URI[md5sum] = "a0cf7d6877f694a1a2ad2b4d1ecb890b"
+SRC_URI[sha256sum] = "e556a529e0a8cf1cd0afd0cab2af5488c9524e7c3f409de29b5d82bb41ae7a30"
+
+inherit autotools pkgconfig gettext
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \
+ --disable-dependency-tracking --disable-check \
+ --disable-examples --disable-tests \
+ --disable-valgrind ${GSTREAMER_DEBUG} \
+ --disable-introspection \
+ "
+
+CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+ sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+}
+
+#do_compile_prepend () {
+# mv ${WORKDIR}/gstregistrybinary.[ch] ${S}/gst/
+#}
+
+RRECOMMENDS_${PN}_qemux86 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+
+FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+FILES_${PN}-dbg += " ${libdir}/gstreamer-0.10/.debug/ ${libexecdir}/gstreamer-0.10/.debug/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc
new file mode 100644
index 000000000..10ee5bcb2
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Gstreamer Daemon 1.0"
+SUMMARY = "GStreamer framework for controlling audio and video streaming using TCP connection messages"
+HOMEPAGE = "https://developer.ridgerun.com/wiki/index.php?title=Gstd-1.0"
+SECTION = "multimedia"
+LICENSE = "GPLv2+"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-rtsp-server json-glib libdaemon"
+
+SRCBRANCH ?= "master"
+SRCREV = "097a086a8606dcb368c7d38c7ec4fefc2497401b"
+SRC_URI = "git://git@github.com/RidgeRun/gstd-1.x.git;protocol=https;branch=${SRCBRANCH} \
+ file://0001-gstd-yocto-compatibility.patch"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG_CONFARGS = " \
+ --disable-gtk-doc \
+"
+
+inherit autotools pkgconfig gettext
+
+do_configure() {
+${S}/autogen.sh
+oe_runconf
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch
new file mode 100644
index 000000000..ddc183193
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch
@@ -0,0 +1,63 @@
+From eaf51d6420c63713f62025583681007c3502d387 Mon Sep 17 00:00:00 2001
+From: Carlos <carlos.rodriguez@ridgerun.com>
+Date: Fri, 15 Dec 2017 10:14:05 -0600
+Subject: [PATCH] gstd:yocto compatibility
+
+---
+ autogen.sh | 8 +++++++-
+ docs/reference/gstd/Makefile.am | 2 +-
+ gstd/Makefile.am | 2 +-
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/autogen.sh b/autogen.sh
+index 66dbd42..793ee2f 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -21,7 +21,11 @@
+ # ACLOCAL, AUTOPOINT and/or LIBTOOLIZE to the right versions, or leave them
+ # unset and get the defaults
+
+-gtkdocize || exit 1
++test -n "$srcdir" || srcdir=`dirname "$0"`
++test -n "$srcdir" || srcdir=.
++
++olddir=`pwd`
++cd "$srcdir"
+
+ autoreconf --verbose --force --install || {
+ echo 'autogen.sh failed';
+@@ -31,3 +35,5 @@ autoreconf --verbose --force --install || {
+ echo
+ echo "Now run './configure' with your system settings followed by 'make' to compile this module."
+ echo
++
++cd "$olddir"
+diff --git a/docs/reference/gstd/Makefile.am b/docs/reference/gstd/Makefile.am
+index f860fa1..153a13b 100644
+--- a/docs/reference/gstd/Makefile.am
++++ b/docs/reference/gstd/Makefile.am
+@@ -66,7 +66,7 @@ GTKDOC_LIBS=$(top_builddir)/gstd/libgstd-core.la
+
+
+ # This includes the standard gtk-doc make rules, copied by gtkdocize.
+-include $(top_srcdir)/docs/gtk-doc.make
++# include $(top_srcdir)/docs/gtk-doc.make
+
+ # Comment this out if you want 'make check' to test you doc status
+ # and run some sanity checks
+diff --git a/gstd/Makefile.am b/gstd/Makefile.am
+index 13c551d..11fe202 100644
+--- a/gstd/Makefile.am
++++ b/gstd/Makefile.am
+@@ -49,7 +49,7 @@ bin_PROGRAMS = gstd
+
+ gstd_SOURCES = gstd.c
+ gstd_CFLAGS = $(GST_CFLAGS) $(GIO_CFLAGS) $(GJSON_CFLAGS)
+-gstd_LDFLAGS = $(GST_LIBS) $(GIO_LIBS) $(GJSON_LIBS) -Wl,-rpath -Wl,$(libdir)
++gstd_LDFLAGS = $(GST_LIBS) $(GIO_LIBS) $(GJSON_LIBS)
+ gstd_LDADD = libgstd-core.la
+
+ gstdincludedir = $(includedir)/gstd
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb
new file mode 100644
index 000000000..94f6b575b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb
@@ -0,0 +1,3 @@
+require gstd.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb
new file mode 100644
index 000000000..7836bae69
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb
@@ -0,0 +1,3 @@
+inherit nativesdk
+include projucer.inc
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb
new file mode 100644
index 000000000..fb54fb9e9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb
@@ -0,0 +1,3 @@
+inherit native
+include projucer.inc
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
new file mode 100644
index 000000000..63ed9e90e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
@@ -0,0 +1,37 @@
+SUMMARY = "JUCE's Projucer"
+DESCRIPTION = "Projucer is used to build and generate support files and build infrastructure for all \
+JUCE supported platforms, including Linux and Embedded Linux."
+SECTION = "utils"
+HOMEPAGE = "http://juce.com/"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://README.md;md5=65c50b4ff3522b99436da100536ccd1c"
+
+inherit pkgconfig
+
+DEPENDS = "libx11 libxext libxinerama libxrandr libxcursor freetype alsa-lib curl"
+
+SRCREV = "4f41f28b47d01b939559123d145b4e5860528bb7"
+BRANCH = "master"
+SRC_URI = "git://github.com/WeAreROLI/JUCE.git;protocol=https;branch=${BRANCH}"
+
+S = "${WORKDIR}/git"
+PV = "5.0.1"
+
+JUCE_PROJUCER_BUILD_PATH = "${B}/extras/Projucer/Builds"
+JUCE_PROJUCER_MAKEFILE_PATH = "${JUCE_PROJUCER_BUILD_PATH}/LinuxMakefile"
+JUCE_PROJUCER = "${JUCE_PROJUCER_MAKEFILE_PATH}/build/Projucer"
+
+do_configure() {
+ cd ${JUCE_PROJUCER_MAKEFILE_PATH}
+ CONFIG=Release oe_runmake clean
+}
+
+do_compile() {
+ cd ${JUCE_PROJUCER_MAKEFILE_PATH}
+ CONFIG=Release oe_runmake
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${JUCE_PROJUCER} ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
new file mode 100644
index 000000000..4c0976e43
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Cross-platform audio output library and plugins"
+DESCRIPTION = "Libao is a cross-platform audio library that allows programs to \
+ output audio using a simple API on a wide variety of platforms."
+SECTION = "multimedia"
+HOMEPAGE = "https://www.xiph.org/ao/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI="http://downloads.xiph.org/releases/ao/${BP}.tar.gz"
+SRC_URI[md5sum] = "9f5dd20d7e95fd0dd72df5353829f097"
+SRC_URI[sha256sum] = "03ad231ad1f9d64b52474392d63c31197b0bc7bd416e58b1c10a329a5ed89caf"
+
+inherit autotools
+
+PACKAGES += "${BPN}-ckport"
+PACKAGES_DYNAMIC += "^${BPN}-plugin-.*"
+
+do_install_append () {
+ find "${D}" -name '*.la' -exec rm -f {} +
+}
+
+python populate_packages_prepend () {
+ rootdir = bb.data.expand('${libdir}/ao/plugins-4', d)
+ rootdir_dbg = bb.data.expand('${libdir}/ao/plugins-4/.debug', d)
+ do_split_packages(d, rootdir, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s', description='AO %s plugin')
+ do_split_packages(d, rootdir_dbg, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s-dbg', description='AO %s plugin debug data')
+}
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)}"
+PACKAGECONFIG[esound] = "--enable-esd,--disable-esd,esound"
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+FILES_${BPN}-ckport = "${libdir}/ckport"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
new file mode 100644
index 000000000..f5b0d48c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "libavc1394 is a programming interface for the 1394 Trade \
+Association AV/C (Audio/Video Control) Digital Interface Command Set"
+HOMEPAGE = "http://sourceforge.net/projects/libavc1394/"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+DEPENDS_append_libc-musl = " argp-standalone"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "caf0db059d8b8d35d6f08e6c0e1c7dfe"
+SRC_URI[sha256sum] = "7cb1ff09506ae911ca9860bef4af08c2403f3e131f6c913a2cbd6ddca4215b53"
+
+inherit autotools pkgconfig
+
+LDFLAGS_append_libc-musl = " -largp"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
new file mode 100755
index 000000000..df0c2355d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
@@ -0,0 +1,14 @@
+Index: libdc1394/examples/Makefile.am
+===================================================================
+--- libdc1394.orig/examples/Makefile.am
++++ libdc1394/examples/Makefile.am
+@@ -36,8 +36,7 @@ if HAVE_MACOSX
+ AM_LDFLAGS = -framework CoreFoundation $(FRAMEWORK_IOKIT)
+ endif
+
+-noinst_PROGRAMS = $(A)
+-bin_PROGRAMS = $(B)
++bin_PROGRAMS = $(A) $(B)
+
+ LDADD = ../dc1394/libdc1394.la
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
new file mode 100755
index 000000000..8a9e9a1d7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Capture and control API for IIDC compliant cameras"
+HOMEPAGE = "http://sourceforge.net/projects/libdc1394/"
+SECTION = "libs"
+LICENSE = "LGPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c848e78d9a4a5cc69906178e4d6fbd64"
+
+# libsdl to provide sdl.m4 with AM_PATH_SDL
+DEPENDS += "libusb1 libraw1394 libsdl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxv virtual/libx11', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virtual/libgl libglu', '', d)} \
+"
+
+PV = "2.2.5+gitr${SRCPV}"
+
+SRCREV = "5e78f51936fd09db0c0f742c7d2c0e5bdbbeed56"
+
+SRC_URI = "git://git.code.sf.net/p/libdc1394/code;branch=master;protocol=git \
+ file://install_examples.patch \
+ "
+
+S = "${WORKDIR}/git/${PN}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OECONF += "--disable-doxygen-doc --disable-examples"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb
new file mode 100644
index 000000000..cd075ffe1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "libde265 is an open source implementation of the h.265 \
+video codec. It is written from scratch and has a plain C API to enable a \
+simple integration into other software."
+HOMEPAGE = "http://www.libde265.org/"
+SECTION = "libs/multimedia"
+
+LICENSE = "LGPLv3"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=852f345c1c52c9160f9a7c36bb997546"
+
+SRC_URI = "https://github.com/strukturag/libde265/releases/download/v${PV}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "93520b378df25f3a94e962f2b54872cc"
+SRC_URI[sha256sum] = "eaa0348839c2935dd90647d72c6dd4a043e36361cb3c33d2b04df10fbcebd3cb"
+
+EXTRA_OECONF = "--disable-sherlock265 --disable-dec265"
+
+inherit autotools-brokensep pkgconfig
+
+PACKAGES =+ "${PN}-tools"
+FILES_${PN}-tools = "${bindir}/*"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
new file mode 100644
index 000000000..48b011104
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvbpsi is a simple library designed for decoding \
+and generation of MPEG TS and DVB PSI tables according to standards \
+ISO/IEC 13818 and ITU-T H.222.0."
+HOMEPAGE = "http://www.videolan.org/developers/libdvbpsi.html"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "http://download.videolan.org/pub/libdvbpsi/${PV}/libdvbpsi-${PV}.tar.bz2"
+SRC_URI[md5sum] = "2b217039a1299000c39423441f77e76a"
+SRC_URI[sha256sum] = "a2fed1d11980662f919bbd1f29e2462719e0f6227e1a531310bd5a706db0a1fe"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
new file mode 100644
index 000000000..c2dd96f9d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "library for DVD navigation features"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "libdvdread"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.bz2"
+SRC_URI[md5sum] = "e9ea4de3bd8f204e61301d407d09f033"
+SRC_URI[sha256sum] = "5097023e3d2b36944c763f1df707ee06b19dc639b2b68fb30113a5f2cbf60b6d"
+
+inherit autotools lib_package binconfig pkgconfig
+
+CONFIGUREOPTS_remove = "--disable-silent-rules"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
new file mode 100644
index 000000000..e6079bd75
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "An implementation of the most relevant parts of IEC 61883 over \
+libraw1394 for transmission, reception, and management of media streams and \
+devices such as DV, MPEG2-TS, audio, and MIDI"
+HOMEPAGE = "https://ieee1394.wiki.kernel.org/index.php/Libraries#libiec61883"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=771782cb6245c7fbbe74bc0ec059beff"
+
+SRC_URI = "https://www.kernel.org/pub/linux/libs/ieee1394/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "ed91bc1727fac8e019402fc3724a283d"
+SRC_URI[sha256sum] = "d1e02c7e276fac37313a2f8c1c33d7a9e19282ff16f32e72435428ff5121f09e"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb
new file mode 100644
index 000000000..f060f1e80
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb
@@ -0,0 +1,19 @@
+SUMMARY = "The squish library (abbreviated to libsquish) is an open source DXT compression library written in C++ "
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://alpha.cpp;beginline=3;endline=22;md5=6665e479f71feb92d590ea9ae9b9f6d5"
+
+PV = "1.10+git${SRCPV}"
+
+SRCREV = "52e7d93c5947f72380521116c05d97c528863ba8"
+SRC_URI = "git://github.com/OpenELEC/libsquish.git;protocol=https"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "INSTALL_DIR=${D}${prefix}"
+
+do_install() {
+ install -d ${D}${includedir}
+ install -d ${D}${libdir}/pkgconfig
+ oe_runmake install
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
new file mode 100644
index 000000000..db4d6e8c9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
@@ -0,0 +1,21 @@
+Allow LIB_INSTALL_DIR to be set by the the cmake configure invocation. We dont
+easily have a way of determining something that patches ${LIB_SUFFIX} so we'll
+set LIB_INSTALL_DIR.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+Index: git/CMakeLists.txt
+===================================================================
+--- git.orig/CMakeLists.txt
++++ git/CMakeLists.txt
+@@ -36,7 +36,7 @@ FIND_PACKAGE(LibXml2 REQUIRED)
+ SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
+ SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE)
+ SET(BIN_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/bin CACHE PATH "Installation prefix for user executables" FORCE)
+-SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Installation prefix for object code libraries" FORCE)
++SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Installation prefix for object code libraries")
+ SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include CACHE PATH "Installation prefix for C header files" FORCE)
+
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libmusicbrainz5.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libmusicbrainz5.pc)
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
new file mode 100644
index 000000000..16e52134b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
@@ -0,0 +1,38 @@
+SUMMARY = "MusicBrainz client library"
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. The library allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
+DEPENDS = "expat libxml2 libxml2-native neon neon-native"
+
+PV = "5.1.0+git${SRCPV}"
+
+SRCREV = "44c05779dd996035758f5ec426766aeedce29cc3"
+SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
+ file://allow-libdir-override.patch "
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+do_configure_prepend() {
+ # The native build really doesn't like being rebuilt, so delete
+ # it if it's already present. Also delete all other files not
+ # known to Git to fix subsequent invocations of do_configure.
+ git clean -dfx -e /.pc/ -e /patches/ .
+ mkdir build-native
+ cd build-native
+ cmake -DCMAKE_C_FLAGS=${BUILD_CFLAGS} \
+ -DCMAKE_C_COMPILER=${BUILD_CC} \
+ -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
+ -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
+ ..
+ make make-c-interface
+ cd ..
+}
+
+EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:PATH=${libdir} \
+ -DIMPORT_EXECUTABLES=build-native/ImportExecutables.cmake"
+
+# out-of-tree building doesn't appear to work for this package.
+B = "${S}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
new file mode 100644
index 000000000..4a2b25cdd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
@@ -0,0 +1,10 @@
+--- libmpd-11.8.17/src/libmpd-internal.h.orig 2014-09-30 04:08:50.963292427 +0200
++++ libmpd-11.8.17/src/libmpd-internal.h 2014-09-30 04:08:30.595292223 +0200
+@@ -21,6 +21,7 @@
+ #define __MPD_INTERNAL_LIB_
+
+ #include "libmpdclient.h"
++#include "config.h"
+ struct _MpdData_real;
+
+ typedef struct _MpdData_real {
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
new file mode 100644
index 000000000..54d79109d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Music Player Daemon library"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://sourceforge.net/projects/musicpd"
+DEPENDS = "glib-2.0"
+
+SRC_URI = "http://www.musicpd.org/download/${BPN}/${PV}/${BP}.tar.gz \
+ file://glibc-2.20.patch \
+"
+SRC_URI[md5sum] = "5ae3d87467d52aef3345407adb0a2488"
+SRC_URI[sha256sum] = "fe20326b0d10641f71c4673fae637bf9222a96e1712f71f170fca2fc34bf7a83"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
new file mode 100644
index 000000000..f9f92c98b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
@@ -0,0 +1,420 @@
+# An example configuration file for MPD
+# See the mpd.conf man page for a more detailed description of each parameter.
+
+
+# Files and directories #######################################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+music_directory "%music_directory%"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+playlist_directory "%playlist_directory%"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+db_file "%db_file%"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog, otherwise logging is disabled.
+#
+log_file "%log_file%"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+#pid_file "/var/run/mpd/mpd.pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+state_file "%state_file%"
+#
+# The location of the sticker database. This is a database which
+# manages dynamic information attached to songs.
+#
+#sticker_file "~/.mpd/sticker.sql"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
+#
+user "mpd"
+#
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
+#
+group "audio"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon.
+#
+# For network
+bind_to_address "any"
+#
+# And for Unix Socket
+#bind_to_address "~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+#port "6600"
+#
+# This setting controls the type of information which is logged. Available
+# setting arguments are "default", "secure" or "verbose". The "verbose" setting
+# argument is recommended for troubleshooting, though can quickly stretch
+# available resources on limited hardware storage.
+#
+#log_level "default"
+#
+# If you have a problem with your MP3s ending abruptly it is recommended that
+# you set this argument to "no" to attempt to fix the problem. If this solves
+# the problem, it is highly recommended to fix the MP3 files with vbrfix
+# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
+# point gapless MP3 playback can be enabled.
+#
+#gapless_mp3_playback "yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists "no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. Optionally, 'comment' can be added to this
+# list.
+#
+#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update "yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself. There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
+
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks "yes"
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks "yes"
+#
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+#zeroconf_enabled "yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network.
+#
+#zeroconf_name "Music Player"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# can setting can be specified multiple times for different password profiles.
+#
+#password "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions "read,add,control,admin"
+#
+###############################################################################
+
+
+# Input #######################################################################
+#
+
+input {
+ plugin "curl"
+# proxy "proxy.isp.com:8080"
+# proxy_user "user"
+# proxy_password "password"
+}
+
+#
+###############################################################################
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
+# other audio outputs.
+#
+# board specific examples #####################################################
+# (feel free to add futher)
+#
+# gumstix overo (tested with TOBI expansion board)
+#audio_output {
+# type "alsa"
+# name "overo"
+# mixer_control "Headset"
+# mixer_index "0"
+#}
+#
+# general examples ############################################################
+#
+# An example of an ALSA output:
+#
+#audio_output {
+# type "alsa"
+# name "My ALSA Device"
+## device "hw:0,0" # optional
+## format "44100:16:2" # optional
+## mixer_type "hardware" # optional
+## mixer_device "default" # optional
+## mixer_control "PCM" # optional
+## mixer_index "0" # optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+# type "oss"
+# name "My OSS Device"
+## device "/dev/dsp" # optional
+## format "44100:16:2" # optional
+## mixer_type "hardware" # optional
+## mixer_device "/dev/mixer" # optional
+## mixer_control "PCM" # optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+# type "shout"
+# encoding "ogg" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+## protocol "icecast2" # optional
+## user "source" # optional
+## description "My Stream Description" # optional
+## genre "jazz" # optional
+## public "no" # optional
+## timeout "2" # optional
+## mixer_type "software" # optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+# type "recorder"
+# name "My recorder"
+# encoder "vorbis" # optional, vorbis or lame
+# path "/var/lib/mpd/recorder/mpd.ogg"
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+#}
+#
+# An example of a httpd output (built-in HTTP streaming server):
+#
+#audio_output {
+# type "httpd"
+# name "My HTTP Stream"
+# encoder "vorbis" # optional, vorbis or lame
+# port "8000"
+# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+# max_clients "0" # optional 0=no limit
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+#audio_output {
+# type "pulse"
+# name "My Pulse Output"
+## server "remote_server" # optional
+## sink "remote_server_sink" # optional
+#}
+#
+## Example "pipe" output:
+#
+#audio_output {
+# type "pipe"
+# name "my pipe"
+# command "aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+# command "AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+# command "nc example.org 8765"
+# format "44100:16:2"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+# type "null"
+# name "My Null Output"
+# mixer_type "none" # optional
+#}
+#
+# This setting will change all decoded audio to be converted to the specified
+# format before being passed to the audio outputs. By default, this setting is
+# disabled.
+#
+#audio_output_format "44100:16:2"
+#
+# If MPD has been compiled with libsamplerate support, this setting specifies
+# the sample rate converter to use. Possible values can be found in the
+# mpd.conf man page or the libsamplerate documentation. By default, this is
+# setting is disabled.
+#
+#samplerate_converter "Fastest Sinc Interpolator"
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album" or "track". See <http://www.replaygain.org>
+# for more details. This setting is off by default.
+#
+#replaygain "album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp "0"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
+#
+#volume_normalization "no"
+#
+###############################################################################
+
+
+# MPD Internal Buffering ######################################################
+#
+# This setting adjusts the size of internal decoded audio buffering. Changing
+# this may have undesired effects. Don't change this if you don't know what you
+# are doing.
+#
+#audio_buffer_size "2048"
+#
+# This setting controls the percentage of the buffer which is filled before
+# beginning to play. Increasing this reduces the chance of audio file skipping,
+# at the cost of increased time prior to audio playback.
+#
+#buffer_before_play "10%"
+#
+###############################################################################
+
+
+# Resource Limitations ########################################################
+#
+# These settings are various limitations to prevent MPD from using too many
+# resources. Generally, these settings should be minimized to prevent security
+# risks, depending on the operating resources.
+#
+#connection_timeout "60"
+#max_connections "10"
+#max_playlist_length "16384"
+#max_command_list_size "2048"
+#max_output_buffer_size "8192"
+#
+###############################################################################
+
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting.
+#
+#filesystem_charset "UTF-8"
+#
+# This setting controls the encoding that ID3v1 tags should be converted from.
+#
+#id3v1_encoding "ISO-8859-1"
+#
+###############################################################################
+
+
+# SIDPlay decoder #############################################################
+#
+# songlength_database:
+# Location of your songlengths file, as distributed with the HVSC.
+# The sidplay plugin checks this for matching MD5 fingerprints.
+# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
+#
+# default_songlength:
+# This is the default playing time in seconds for songs not in the
+# songlength database, or in case you're not using a database.
+# A value of 0 means play indefinitely.
+#
+# filter:
+# Turns the SID filter emulation on or off.
+#
+#decoder {
+# plugin "sidplay"
+# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt"
+# default_songlength "120"
+# filter "true"
+#}
+#
+###############################################################################
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb
new file mode 100644
index 000000000..6754f347e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb
@@ -0,0 +1,100 @@
+SUMMARY = "Music Player Daemon"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://www.musicpd.org"
+
+inherit autotools useradd systemd pkgconfig
+
+DEPENDS += " \
+ alsa-lib \
+ libsamplerate0 \
+ libsndfile1 \
+ libvorbis \
+ libogg \
+ faad2 \
+ ffmpeg \
+ curl \
+ sqlite \
+ bzip2 \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)} \
+ tcp-wrappers \
+ openal-soft \
+ yajl \
+ jack \
+ faad2 \
+ flac \
+ libao \
+ fluidsynth \
+ libcdio \
+ wavpack \
+ libopus \
+ mpg123 \
+ libmms \
+ libmodplug \
+ boost \
+ icu \
+ dbus \
+ expat \
+ zlib \
+ libupnp \
+"
+
+# While this item does not require it, it depends on mpg123 which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = " \
+ http://www.musicpd.org/download/${BPN}/0.20/${BP}.tar.xz \
+ file://mpd.conf.in \
+"
+SRC_URI[md5sum] = "8dc87ba95473fd738f2aff9bd69cc212"
+SRC_URI[sha256sum] = "6a582dc2ae90b94ff3853f9ffd7d80b2c2b5fe2e2c35cb1da0b36f3f3dfad434"
+
+EXTRA_OECONF = "enable_bzip2=yes"
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
+
+PACKAGECONFIG[audiofile] = "--enable-audiofile,--disable-audiofile,audiofile"
+PACKAGECONFIG[cdioparanoia] = "--enable-cdio-paranoia,--disable-cdio-paranoia,libcdio-paranoia"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[id3tag] = "--enable-id3,--disable-id3,libid3tag"
+PACKAGECONFIG[lame] = "--enable-lame-encoder,--disable-lame-encoder,lame"
+PACKAGECONFIG[smb] = "--enable-smbclient,--disable-smbclient,samba"
+
+do_configure_prepend() {
+ sed -i -e 's|libsystemd-daemon|libsystemd|' ${S}/configure.ac
+}
+
+do_install_append() {
+ install -d ${D}/${localstatedir}/lib/mpd/music
+ chmod 775 ${D}/${localstatedir}/lib/mpd/music
+ install -d ${D}/${localstatedir}/lib/mpd/playlists
+ chown -R mpd ${D}/${localstatedir}/lib/mpd
+ chown mpd:mpd ${D}/${localstatedir}/lib/mpd/music
+
+ install -d ${D}/${sysconfdir}
+ install -m 644 ${WORKDIR}/mpd.conf.in ${D}/${sysconfdir}/mpd.conf
+ sed -i \
+ -e 's|%music_directory%|${localstatedir}/lib/mpd/music|' \
+ -e 's|%playlist_directory%|${localstatedir}/lib/mpd/playlists|' \
+ -e 's|%db_file%|${localstatedir}/lib/mpd/mpd.db|' \
+ -e 's|%log_file%|${localstatedir}/log/mpd.log|' \
+ -e 's|%state_file%|${localstatedir}/lib/mpd/state|' \
+ ${D}/${sysconfdir}/mpd.conf
+
+ if [ -e ${D}/${systemd_unitdir}/system/mpd.service ] ; then
+ sed -i \
+ 's|^ExecStart=.*|ExecStart=${bindir}/mpd --no-daemon|' \
+ ${D}/${systemd_unitdir}/system/mpd.service
+ fi
+}
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "mpd.socket"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = " \
+ --system --no-create-home \
+ --home ${localstatedir}/lib/mpd \
+ --groups audio \
+ --user-group mpd"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
new file mode 100644
index 000000000..e0f1a26de
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "OpenAL is a cross-platform 3D audio API"
+HOMEPAGE = "http://kcat.strangesoft.net/openal.html"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=facc3a8f452930083bbb95d82b989c35"
+
+inherit cmake
+
+SRC_URI = "http://kcat.strangesoft.net/openal-releases/${BP}.tar.bz2"
+SRC_URI[md5sum] = "ea83dec3b9655a27d28e7bc7cae9cd71"
+SRC_URI[sha256sum] = "0e29a162f0841ccb4135ce76e92e8a704589b680a85eddf76f898de5236eb056"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)}"
+PACKAGECONFIG[alsa] = "-DALSA=TRUE, -DALSA=FALSE, alsa-lib"
+PACKAGECONFIG[pulseaudio] = "-DPULSEAUDIO=TRUE, -DPULSEAUDIO=FALSE, pulseaudio"
+# currently doesn't work with libav-9
+# PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
+# but alffmpeg.c:418:44: error: 'AV_CH_LAYOUT_MONO' undeclared (first use in this function)
+PACKAGECONFIG[examples] = "-DEXAMPLES=TRUE, -DEXAMPLES=FALSE, libav"
+
+FILES_${PN} += "${datadir}/openal"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
new file mode 100644
index 000000000..ab5813ebe
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "OpenCORE Adaptive Multi Rate (AMR) speech codec library implementation"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "09d2c5dfb43a9f6e9fec8b1ae678e725"
+SRC_URI[sha256sum] = "106bf811c1f36444d7671d8fd2589f8b2e0cca58a2c764da62ffc4a070595385"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
new file mode 100644
index 000000000..ce3736294
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Advanced Audio Coding (AAC) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "b574da1d92d75fc40b0b75aa16f24ac4"
+SRC_URI[sha256sum] = "e51a7477a359f18df7c4f82d195dab4e14e7414cbd48cf79cc195fc446850f36"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
new file mode 100644
index 000000000..cc049edb8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Adaptive Multi Rate Wideband (AMR-WB) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "f63bb92bde0b1583cb3cb344c12922e0"
+SRC_URI[sha256sum] = "5652b391e0f0e296417b841b02987d3fd33e6c0af342c69542cbb016a71d9d4e"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb
new file mode 100644
index 000000000..44c46f81e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "OpenH264 is a codec library which supports H.264 encoding and \
+decoding. It is suitable for use in real time applications such as WebRTC."
+HOMEPAGE = "http://www.openh264.org/"
+SECTION = "libs/multimedia"
+
+DEPENDS_x86 += "nasm-native"
+DEPENDS_x86-64 += "nasm-native"
+
+LICENSE = "BSD-2-Clause"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bb6d3771da6a07d33fd50d4d9aa73bcf"
+
+S = "${WORKDIR}/git"
+SRCREV = "a180c9d4d6f1a4830ca9eed9d159d54996bd63cb"
+BRANCH = "openh264v1.7"
+SRC_URI = "git://github.com/cisco/openh264.git;protocol=https;branch=${BRANCH};"
+
+COMPATIBLE_MACHINE_armv7a = "(.*)"
+COMPATIBLE_MACHINE_aarch64 = "(.*)"
+COMPATIBLE_MACHINE_x86 = "(.*)"
+COMPATIBLE_MACHINE_x86-64 = "(.*)"
+COMPATIBLE_MACHINE_mips = "(.*)"
+COMPATIBLE_MACHINE_mips64 = "(.*)"
+
+EXTRA_OEMAKE_armv7a = "ARCH=arm"
+EXTRA_OEMAKE_aarch64 = "ARCH=arm64"
+EXTRA_OEMAKE_x86 = "ARCH=i386"
+EXTRA_OEMAKE_x86-64 = "ARCH=x86_64"
+EXTRA_OEMAKE_mips = "ARCH=mips"
+EXTRA_OEMAKE_mips64 = "ARCH=mips64"
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} PREFIX=${prefix}
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb
new file mode 100644
index 000000000..189dc87c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Library for opening, seeking, and decoding opus audio files"
+HOMEPAGE = "https://www.opus-codec.org/"
+SECTION = "audio"
+
+DEPENDS = "libogg openssl libopus"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6ac22b992dde6a891f8949c3e2da8576"
+
+SRC_URI = "https://downloads.xiph.org/releases/opus/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "ab3f7d15d766f5b36b0951ee435f9ebf"
+SRC_URI[sha256sum] = "48e03526ba87ef9cf5f1c47b5ebe3aa195bd89b912a57060c36184a6cd19412f"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
new file mode 100644
index 000000000..bb3d8b0ef
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
@@ -0,0 +1,18 @@
+Make sure libdir (SODIR) is created when running parallel make.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+Index: git/librtmp/Makefile
+===================================================================
+--- git.orig/librtmp/Makefile
++++ git/librtmp/Makefile
+@@ -107,6 +107,7 @@ install_base: librtmp.a librtmp.pc
+ cp librtmp.3 $(MANDIR)/man3
+
+ install_so: librtmp.$(SO_EXT)
++ -mkdir -p $(SODIR)
+ cp librtmp.$(SO_EXT) $(SODIR)
+ cd $(SODIR); ln -sf librtmp.$(SO_EXT) librtmp.$(SOX)
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
new file mode 100644
index 000000000..c5513b025
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
@@ -0,0 +1,22 @@
+SUMMARY = "RTMP Dump"
+DESCRIPTION = "rtmpdump is a toolkit for RTMP streams. All forms of RTMP are \
+supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://."
+HOMEPAGE = "http://rtmpdump.mplayerhq.hu/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "openssl zlib"
+
+SRCREV = "3121324046e4ca1934e7e28293fc8326475d5053"
+SRC_URI = " \
+ git://git.ffmpeg.org/rtmpdump \
+ file://fix-racing-build-issue.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
+
+EXTRA_OEMAKE = " \
+ CC='${CC}' LD='${LD} ${STAGING_LIBDIR}' XCFLAGS='${CFLAGS}' XLDFLAGS='${LDFLAGS}' \
+ SYS=posix INC=-I=/usr/include DESTDIR=${D} \
+ prefix=${prefix} libdir=${libdir} incdir=${includedir}/librtmp bindir=${bindir} mandir=${mandir}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
new file mode 100644
index 000000000..a80fc10ac
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 1080P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_surround.avi"
+SRC_URI[md5sum] = "223991c8b33564eb77988a4c13c1c76a"
+SRC_URI[sha256sum] = "69fe2cfe7154a6e752688e3a0d7d6b07b1605bbaf75b56f6470dc7b4c20c06ea"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_1080p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
new file mode 100644
index 000000000..59ac4788c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 480P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi"
+SRC_URI[md5sum] = "ed7ed01e9aefba8ddd77c13332cec120"
+SRC_URI[sha256sum] = "40d1cf5bc8e1b0e55dac7bb2e3fbc2aea05b6679444864781299b24db044634f"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_480p_surround-fix.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
new file mode 100644
index 000000000..21b8f8f0f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 720P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi"
+SRC_URI[md5sum] = "0da8fe124595f5b206d64cb1400bbefc"
+SRC_URI[sha256sum] = "b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_720p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
new file mode 100644
index 000000000..0582a4856
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Tears of Steel movie - 1080P"
+LICENSE = "CC-BY-3.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://ftp.nluug.nl/pub/graphics/blender/demo/movies/ToS/ToS-4k-1920.mov"
+SRC_URI[md5sum] = "e3fee55b1779c553e37b1d3988e6fad6"
+SRC_URI[sha256sum] = "bd2b5bc6c16d4085034f47ef7e4b3938afe86b4eec4ac3cf2685367d3b0b23b0"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/ToS-4k-1920.mov ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
new file mode 100644
index 000000000..838400f07
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
@@ -0,0 +1,20 @@
+Use the version of orcc in the sysroot not the one from the host
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: schroedinger-1.0.11/configure.ac
+===================================================================
+--- schroedinger-1.0.11.orig/configure.ac
++++ schroedinger-1.0.11/configure.ac
+@@ -54,7 +54,7 @@ if test "x${HAVE_ORC}" != xyes ; then
+ AC_ERROR([orc-0.4 >= $ORC_VER is required])
+ fi
+ SCHRO_PKG_DEPS="$SCHRO_PKG_DEPS orc-0.4 >= $ORC_VER"
+-ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
++ORCC=$STAGING_DIR`$PKG_CONFIG --variable=orcc orc-0.4`
+ AC_SUBST(ORCC)
+ AM_CONDITIONAL(HAVE_ORCC, test "x$cross_compiling" != xyes)
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
new file mode 100644
index 000000000..d38eb9477
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Dirac compressed video encoder/decoder"
+HOMEPAGE = "http://schrodinger.sourceforge.net/"
+LICENSE = "MPL-1.1 | GPLv2 | LGPLv2 | MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d91a46405fc074b88c963cc4f2a0aae9 \
+ file://COPYING.GPL;md5=e181e3b7c66f5f96921d813c1074f833 \
+ file://COPYING.LGPL;md5=38c893e21baec4cd75ad800ba9e2410a \
+ file://COPYING.MIT;md5=8b345371b3536b4ce37ead1eafc88221 \
+ file://COPYING.MPL;md5=0117647fecb9a932c25a7bbfc0333c37"
+
+DEPENDS = "liboil orc-native orc"
+
+SRC_URI = "http://www.diracvideo.org/download/schroedinger/${BP}.tar.gz \
+ file://configure.ac.patch"
+
+SRC_URI[md5sum] = "da6af08e564ca1157348fb8d92efc891"
+SRC_URI[sha256sum] = "1e572a0735b92aca5746c4528f9bebd35aa0ccf8619b22fa2756137a8cc9f912"
+
+EXTRA_OECONF += "STAGING_DIR=${STAGING_DIR_NATIVE}"
+
+inherit autotools-brokensep pkgconfig
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch
new file mode 100644
index 000000000..44c6b19be
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch
@@ -0,0 +1,34 @@
+From b1809d82031aa7c5bcaad58bcb4b59e082e0446e Mon Sep 17 00:00:00 2001
+From: Mans Rullgard <mans@mansr.com>
+Date: Sun, 5 Nov 2017 15:40:16 +0000
+Subject: [PATCH] Update exported symbol list
+
+commit 5c58413544 ("Don't export (most) internal libsox symbols")
+breaks dynamic flac builds as flac.c references lsx.error, so add it
+to the list of exceptions.
+
+| .libs/flac.o: In function `decoder_read_callback':
+| /usr/src/debug/sox/14.4.2-r0/sox-14.4.2/src/flac.c:63: undefined reference to `lsx_error'
+
+Upstream-Status: Backport [https://bogomips.org/sox.git ("pu" branch)]
+
+---
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 7cceaafd..a3a04ed1 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -95,7 +95,7 @@ libsox_la_LIBADD += @GOMP_LIBS@
+
+ libsox_la_CFLAGS = @WARN_CFLAGS@
+ libsox_la_LDFLAGS = @APP_LDFLAGS@ -version-info @SHLIB_VERSION@ \
+- -export-symbols-regex '^(sox_.*|lsx_(check_read_params|(close|open)_dllibrary|(debug(_more|_most)?|fail|report|warn)_impl|eof|fail_errno|filelength|find_(enum_(text|value)|file_extension)|getopt(_init)?|lpc10_(create_(de|en)coder_state|(de|en)code)|raw(read|write)|read(_b_buf|buf|chars)|realloc|rewind|seeki|sigfigs3p?|strcasecmp|tell|unreadb|write(b|_b_buf|buf|s)))$$'
++ -export-symbols-regex '^(sox_.*|lsx_(([cm]|re)alloc|check_read_params|(close|open)_dllibrary|(debug(_more|_most)?|fail|report|warn)_impl|eof|error|fail_errno|filelength|find_(enum_(text|value)|file_extension)|flush|getopt(_init)?|id3_read_tag|lpc10_(create_(de|en)coder_state|(de|en)code)|raw(read|write)|read(_b_buf|buf|chars)|rewind|seeki|sigfigs3p?|strcasecmp|strdup|tell|unreadb|write(b|_b_buf|buf|s)))$$'
+
+ if HAVE_WIN32_LTDL
+ libsox_la_SOURCES += win32-ltdl.c win32-ltdl.h
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch
new file mode 100644
index 000000000..4f02a66fc
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch
@@ -0,0 +1,28 @@
+From d0313be5fb947df399a4db24a5f9244510d2ce87 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 16:36:06 -0700
+Subject: [PATCH] remove the #error line and live without file-type detection
+ with pipes
+
+this fallback is executed with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/formats.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/formats.c b/src/formats.c
+index 724a4cda..f683a922 100644
+--- a/src/formats.c
++++ b/src/formats.c
+@@ -422,7 +422,6 @@ static void UNUSED rewind_pipe(FILE * fp)
+ /* To fix this #error, either simply remove the #error line and live without
+ * file-type detection with pipes, or add support for your compiler in the
+ * lines above. Test with cat monkey.wav | ./sox --info - */
+- #error FIX NEEDED HERE
+ #define NO_REWIND_PIPE
+ (void)fp;
+ #endif
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
new file mode 100644
index 000000000..21fddd1e1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
@@ -0,0 +1,40 @@
+DESCRIPTION="SoX is the Swiss Army knife of sound processing tools. \
+It converts audio files among various standard audio file formats \
+and can apply different effects and filters to the audio data."
+HOMEPAGE = "http://sox.sourceforge.net"
+SECTION = "audio"
+
+DEPENDS = "libpng ffmpeg libsndfile1"
+
+# While this item does not require it, it depends on ffmpeg which does
+LICENSE_FLAGS = "commercial"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)} \
+ magic \
+"
+PACKAGECONFIG[pulseaudio] = "--with-pulseaudio=dyn,--with-pulseaudio=no,pulseaudio,"
+PACKAGECONFIG[alsa] = "--with-alsa=dyn,--with-alsa=no,alsa-lib,"
+PACKAGECONFIG[wavpack] = "--with-wavpack=dyn,--with-wavpack=no,wavpack,"
+PACKAGECONFIG[flac] = "--with-flac=dyn,--with-flac=no,flac,"
+PACKAGECONFIG[amrwb] = "--with-amrwb=dyn,--with-amrwb=no,opencore-amr,"
+PACKAGECONFIG[amrnb] = "--with-amrnb=dyn,--with-amrnb=no,opencore-amr,"
+PACKAGECONFIG[oggvorbis] = "--with-oggvorbis=dyn,--with-oggvorbis=no,libvorbis"
+PACKAGECONFIG[opus] = "--with-opus=dyn,--with-opus=no,opusfile"
+PACKAGECONFIG[magic] = "--with-magic,--without-magic,file,"
+PACKAGECONFIG[mad] = "--with-mad,--without-mad,libmad,"
+PACKAGECONFIG[id3tag] = "--with-id3tag,--without-id3tag,libid3tag,"
+PACKAGECONFIG[lame] = "--with-lame,--without-lame,lame,"
+PACKAGECONFIG[ao] = "--with-ao,--without-ao,libao,"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=751419260aa954499f7abaabaa882bbe \
+ file://LICENSE.LGPL;md5=fbc093901857fcd118f065f900982c24"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sox/sox-${PV}.tar.gz \
+ file://0001-remove-the-error-line-and-live-without-file-type-det.patch \
+ file://0001-Update-exported-symbol-list.patch \
+ "
+SRC_URI[md5sum] = "d04fba2d9245e661f245de0577f48a33"
+SRC_URI[sha256sum] = "b45f598643ffbd8e363ff24d61166ccec4836fea6d3888881b8df53e3bb55f6c"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch
new file mode 100644
index 000000000..c0f4692d1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch
@@ -0,0 +1,49 @@
+From 4c7165b3fbc0e99e7cdd77031e8a001440d0629d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Thu, 3 Nov 2016 20:53:21 +0000
+Subject: [PATCH 1/3] build: these are 'foreign' automake projects
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In order to prevent automake from complaining about missing
+
+files ChangeLog, AUTHORS, etc., use the 'foreign' automake
+option to instruct it so.
+
+Upstream-Status: Inappropriate [no upstream activity for 7+ years]
+Signed-off-by: André Draszik <git@andred.net>
+---
+ configure.ac | 2 +-
+ libmad-0.15.1b/configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index b12d11f..96300d6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -11,7 +11,7 @@ dnl AC_CHECK_FUNC: defines a shell variable
+
+ AC_PREREQ(2.59)
+ AC_INIT(streamripper,1.64.6)
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+
+ AC_CONFIG_HEADERS([lib/config.h])
+
+diff --git a/libmad-0.15.1b/configure.ac b/libmad-0.15.1b/configure.ac
+index 8fb35ee..ab116a6 100644
+--- a/libmad-0.15.1b/configure.ac
++++ b/libmad-0.15.1b/configure.ac
+@@ -26,7 +26,7 @@ AC_PREREQ(2.53)
+
+ AC_CONFIG_SRCDIR([decoder.h])
+
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+
+ AM_CONFIG_HEADER([config.h])
+
+--
+2.10.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch
new file mode 100644
index 000000000..58473f611
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch
@@ -0,0 +1,30 @@
+From 2fcf2b164e25c4b2523dea4b04094916e57ba19e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Thu, 3 Nov 2016 20:53:26 +0000
+Subject: [PATCH 2/3] build: don't ignore CPPFLAGS from environment
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [no upstream activity for 7+ years]
+Signed-off-by: André Draszik <git@andred.net>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 96300d6..1600c88 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -56,7 +56,7 @@ AC_ARG_WITH(curses,
+ [ --with-curses(=XXX) compile curses front-end (XXX is curses (default), ncurses, ncursesw, pdcurses or slang)])
+
+
+-CPPFLAGS="-D__UNIX__"
++CPPFLAGS="$CPPFLAGS -D__UNIX__"
+ AC_SUBST(CPPFLAGS)
+
+
+--
+2.10.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch
new file mode 100644
index 000000000..065254ec8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch
@@ -0,0 +1,42 @@
+From 6d59b60ff5108357ad2c2951a97112e713ee5368 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Thu, 3 Nov 2016 20:53:32 +0000
+Subject: [PATCH 3/3] ripstream: fix compilation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+| ../../streamripper-1.64.6/lib/ripstream.c: In function 'write_id3v2_frame':
+| ../../streamripper-1.64.6/lib/ripstream.c:717:5: error: unknown type name '__uint32_t'
+| __uint32_t framesize = 0;
+| ^~~~~~~~~~
+
+The already included srtypes.h does the right thing for all
+platforms (I think). It certainly works well here.
+
+Upstream-Status: Inappropriate [no upstream activity for 7+ years]
+Signed-off-by: André Draszik <git@andred.net>
+---
+ lib/ripstream.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/lib/ripstream.c b/lib/ripstream.c
+index c671e18..7f311c6 100644
+--- a/lib/ripstream.c
++++ b/lib/ripstream.c
+@@ -713,11 +713,7 @@ write_id3v2_frame(RIP_MANAGER_INFO* rmi, char* tag_name, mchar* data,
+ int rc;
+ char bigbuf[HEADER_SIZE] = "";
+ ID3V2frame id3v2frame;
+-#ifndef WIN32
+- __uint32_t framesize = 0;
+-#else
+- unsigned long int framesize = 0;
+-#endif
++ uint32_t framesize = 0;
+
+ memset(&id3v2frame, '\000', sizeof(id3v2frame));
+ strncpy(id3v2frame.id, tag_name, 4);
+--
+2.10.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb
new file mode 100644
index 000000000..722815ab6
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb
@@ -0,0 +1,32 @@
+SUMMARY = "download online streams into audio files"
+DESCRIPTION = "This command-line tool can be used to record MPEG III \
+and OGG online radio-streams into track-separated audio files."
+HOMEPAGE = "http://streamripper.sourceforge.net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "glib-2.0 libmad libogg libvorbis"
+
+# While this item does not require it, it depends on libmad which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://0001-build-these-are-foreign-automake-projects.patch \
+ file://0002-build-don-t-ignore-CPPFLAGS-from-environment.patch \
+ file://0003-ripstream-fix-compilation.patch \
+"
+SRC_URI[mdsum] = "a37a1a8b8f9228522196a122a1c2dd32"
+SRC_URI[sha256sum] = "c1d75f2e9c7b38fd4695be66eff4533395248132f3cc61f375196403c4d8de42"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--with-included-argv=yes --with-included-libmad=no"
+EXTRA_OECONF += "\
+ --with-ogg-includes=${STAGING_INCDIR} \
+ --with-ogg-libraries=${STAGING_LIBDIR} \
+ --with-vorbis-includes=${STAGING_INCDIR} \
+ --with-vorbis-libraries=${STAGING_LIBDIR} \
+"
+
+# the included argv library needs this
+CPPFLAGS_append = " -DANSI_PROTOTYPES"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb
new file mode 100644
index 000000000..66b95db00
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "TinyALSA is a small library to interface with ALSA in \
+the Linux kernel. It is a lightweight alternative to libasound."
+HOMEPAGE = "https://github.com/tinyalsa/tinyalsa"
+SECTION = "libs/multimedia"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://NOTICE;md5=dbdefe400d894b510a9de14813181d0b"
+
+S = "${WORKDIR}/git"
+SRCREV = "df11091086b56e5fb71887f2fa320e1d2ffeff58"
+SRC_URI = "git://github.com/tinyalsa/tinyalsa.git;protocol=https;"
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ oe_runmake CC='${CC}' LD='${CC}' AR='${AR}'
+}
+
+do_install() {
+ oe_runmake install \
+ PREFIX="${prefix}" DESTDIR="${D}" INCDIR="${includedir}/tinyalsa" \
+ LIBDIR="${libdir}" BINDIR="${bindir}" MANDIR="${mandir}"
+}
+
+PACKAGES =+ "${PN}-tools"
+FILES_${PN}-tools = "${bindir}/*"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch
new file mode 100644
index 000000000..7e5102903
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Submitted [https://trac.xiph.org/ticket/1922]
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+Index: configure.in
+===================================================================
+--- configure.in (revision 18764)
++++ configure.in (working copy)
+@@ -9,7 +9,7 @@
+ AC_CANONICAL_HOST
+ AC_CANONICAL_TARGET
+
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+
+ AM_INIT_AUTOMAKE(libvorbisidec,1.2.1)
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch
new file mode 100644
index 000000000..204954222
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch
@@ -0,0 +1,104 @@
+From: Xin Ouyang <Xin.Ouyang@windriver.com>
+Date: Mon, 16 Jul 2012 13:29:34 +0800
+Subject: [PATCH] tremor: add IT instructions for arm thumb2 tune flags.
+
+Upstream-Status: Pending
+
+In Thumb-2, most instructions do not have a built in condition code (except for
+conditional branches). Instead, short sequences of instructions which are to be
+executed conditionally can be preceded by a special "IT instruction" which
+describes the condition and which of the following instructions should be
+executed if the condition is false respectively.
+
+For the ARM/Thumb IT(If-Then) instruction:
+http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjabicci.html
+
+Signed-off-by: Xin Ouyang <Xin.Ouyang@windriver.com>
+---
+ asm_arm.h | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/asm_arm.h b/asm_arm.h
+index c3bda00..823c54f 100755
+--- a/asm_arm.h
++++ b/asm_arm.h
+@@ -108,9 +108,11 @@ static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b,
+ static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
+ int tmp;
+ asm volatile("subs %1, %0, #32768\n\t"
++ "itt pl\n\t"
+ "movpl %0, #0x7f00\n\t"
+ "orrpl %0, %0, #0xff\n"
+ "adds %1, %0, #32768\n\t"
++ "it mi\n\t"
+ "movmi %0, #0x8000"
+ : "+r"(x),"=r"(tmp)
+ :
+@@ -139,10 +141,12 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+
+ "ldmdb r0!,{r1,r3};"
+ "subs r1,r1,%4;" //ilsp[j]-wi
++ "it mi;"
+ "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi)
+ "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi)
+
+ "subs r1,r3,%4;" //ilsp[j+1]-wi
++ "it mi;"
+ "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi)
+ "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi)
+
+@@ -167,6 +171,7 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+ "mov r0,#0x4000;\n"
+
+ "subs r1,r1,%4;\n" //ilsp[j]-wi
++ "it mi;\n"
+ "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi)
+ "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi)
+ "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi)
+@@ -190,18 +195,23 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+ "mov r2,#0;"
+ "orr r1,%0,%1;"
+ "tst r1,#0xff000000;"
++ "itt ne;"
+ "addne r2,r2,#8;"
+ "movne r1,r1,lsr #8;"
+ "tst r1,#0x00f00000;"
++ "itt ne;"
+ "addne r2,r2,#4;"
+ "movne r1,r1,lsr #4;"
+ "tst r1,#0x000c0000;"
++ "itt ne;"
+ "addne r2,r2,#2;"
+ "movne r1,r1,lsr #2;"
+ "tst r1,#0x00020000;"
++ "itt ne;"
+ "addne r2,r2,#1;"
+ "movne r1,r1,lsr #1;"
+ "tst r1,#0x00010000;"
++ "it ne;"
+ "addne r2,r2,#1;"
+ "mov %0,%0,lsr r2;"
+ "mov %1,%1,lsr r2;"
+@@ -222,15 +232,19 @@ static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){
+ ogg_int32_t qexp=*qexpp;
+
+ asm("tst %0,#0x0000ff00;"
++ "itt eq;"
+ "moveq %0,%0,lsl #8;"
+ "subeq %1,%1,#8;"
+ "tst %0,#0x0000f000;"
++ "itt eq;"
+ "moveq %0,%0,lsl #4;"
+ "subeq %1,%1,#4;"
+ "tst %0,#0x0000c000;"
++ "itt eq;"
+ "moveq %0,%0,lsl #2;"
+ "subeq %1,%1,#2;"
+ "tst %0,#0x00008000;"
++ "itt eq;"
+ "moveq %0,%0,lsl #1;"
+ "subeq %1,%1,#1;"
+ : "+r"(qi),"+r"(qexp)
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb
new file mode 100644
index 000000000..937894a73
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Fixed-point decoder"
+DESCRIPTION = "tremor is a fixed point implementation of the vorbis codec."
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=db1b7a668b2a6f47b2af88fb008ad555 \
+ file://os.h;beginline=3;endline=14;md5=5c0af5e1bedef3ce8178c89f48cd6f1f"
+DEPENDS = "libogg"
+SRCDATE = "${PV}"
+PR = "r1"
+
+# SVN support for upstream version check isn't implemented yet
+RECIPE_UPSTREAM_VERSION = "20150107"
+RECIPE_UPSTREAM_DATE = "Jan 07, 2015"
+CHECK_DATE = "Aug 12, 2015"
+
+SRC_URI = "svn://svn.xiph.org/trunk;module=Tremor;rev=19427;protocol=http \
+ file://obsolete_automake_macros.patch;striplevel=0 \
+ file://tremor-arm-thumb2.patch \
+"
+
+S = "${WORKDIR}/Tremor"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-shared"
+
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
new file mode 100644
index 000000000..79e64aebd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://download.videolan.org/pub/libdvdcss/${PV}/libdvdcss-${PV}.tar.bz2"
+
+inherit autotools
+
+EXTRA_OECONF = " --disable-doc "
+
+SRC_URI[md5sum] = "7f0fdb3ff91d638f5e45ed7536f7eb67"
+SRC_URI[sha256sum] = "7c414acd520c4e4dd7267952f72d738ff50321a7869af4d75c65aefad44f1395"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
new file mode 100644
index 000000000..8e82b3bd3
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
@@ -0,0 +1,113 @@
+DESCRIPTION = "Video player and streamer - davinci edition"
+HOMEPAGE = "http://www.videolan.org"
+SECTION = "multimedia"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libfribidi libtool libgcrypt libgcrypt-native \
+ dbus dbus-glib libxml2 gnutls \
+ tremor faad2 ffmpeg flac fluidsynth alsa-lib \
+ lua-native lua libidn \
+ avahi jpeg xz libmodplug mpeg2dec \
+ libmtp libopus orc libsamplerate0 libusb1 schroedinger taglib \
+ tiff"
+
+# While this item does not require it, it depends on ffmpeg which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.xz"
+
+inherit autotools gettext pkgconfig distro_features_check
+
+ARM_INSTRUCTION_SET = "arm"
+
+EXTRA_OECONF = "\
+ --enable-run-as-root \
+ --enable-xvideo \
+ --disable-screen --disable-caca \
+ --enable-httpd --enable-vlm \
+ --enable-freetype \
+ --enable-tremor \
+ --enable-v4l2 --disable-aa --disable-faad \
+ --enable-dbus \
+ --without-contrib \
+ --without-kde-solid \
+ --enable-realrtsp \
+ --disable-libtar \
+ ac_cv_path_MOC=${STAGING_BINDIR_NATIVE}/moc4 \
+ ac_cv_path_RCC=${STAGING_BINDIR_NATIVE}/rcc4 \
+ ac_cv_path_UIC=${STAGING_BINDIR_NATIVE}/uic4 \
+"
+
+PACKAGECONFIG ?= " live555 dc1394 dv1394 notify fontconfig freetype dvdread png ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 sdl vdpau', '', d)}"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,virtual/libsdl libsdl-image "
+PACKAGECONFIG[a52] = "--enable-a52,--disable-a52,liba52"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[live555] = "--enable-live555,--disable-live555,live555"
+PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
+PACKAGECONFIG[mkv] = "--enable-mkv,--disable-mkv,libmatroska libebml"
+PACKAGECONFIG[postproc] = "--enable-postproc,--disable-postproc,libpostproc"
+PACKAGECONFIG[opencv] = "--enable-opencv,--disable-opencv,opencv"
+PACKAGECONFIG[libva] = "--enable-libva --enable-avcodec,--disable-libva --disable-avcodec,libva libav"
+PACKAGECONFIG[speex] = "--enable-speex,--disable-speex,speex"
+PACKAGECONFIG[gstreamer] = "--enable-gst-decode,--disable-gst-decode,gstreamer1.0 gstreamer1.0-plugins-base gst-plugins-bad"
+PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx, libvpx"
+PACKAGECONFIG[qt4] = "--enable-qt,--disable-qt, qt4-x11-free"
+PACKAGECONFIG[freerdp] = "--enable-freerdp,--disable-freerdp, freerdp"
+PACKAGECONFIG[dvbpsi] = "--enable-dvbpsi,--disable-dvbpsi, libdvbpsi"
+PACKAGECONFIG[samba] = "--enable-smbclient,--disable-smbclient, samba"
+PACKAGECONFIG[upnp] = "--enable-upnp,--disable-upnp,libupnp"
+PACKAGECONFIG[dvdnav] = "--enable-dvdnav,--disable-dvdnav,libdvdnav libdvdcss"
+PACKAGECONFIG[sftp] = "--enable-sftp,--disable-sftp,libssh2"
+PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis libogg"
+PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libvorbis libogg"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libavc1394"
+PACKAGECONFIG[svg] = "--enable-svg,--disable-svg,librsvg"
+PACKAGECONFIG[svgdec] = "--enable-svgdec,--disable-svgdec,librsvg cairo"
+PACKAGECONFIG[notify] = "--enable-notify,--disable-notify, libnotify gtk+"
+PACKAGECONFIG[fontconfig] = "--enable-fontconfig,--disable-fontconfig, fontconfig"
+PACKAGECONFIG[freetype] = "--enable-freetype,--disable-freetype, freetype"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread, libdvdread libdvdcss"
+PACKAGECONFIG[vnc] = "--enable-vnc,--disable-vnc, libvncserver"
+PACKAGECONFIG[x11] = "--with-x --enable-xcb,--without-x --disable-xcb, xcb-util-keysyms libxpm libxinerama"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,libpng"
+PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
+
+do_configure_prepend() {
+ cp ${STAGING_DATADIR}/libtool/config.* ${S}/autotools/ || true
+}
+
+do_configure_append() {
+ sed -i -e s:'$(MOC) $(DEFS) $(CPPFLAGS)':'$(MOC) $(DEFS)'\ -I${B}/include\ -DSYS_LINUX:g ${B}/modules/gui/qt4/Makefile
+ sed -i -e s:'${top_builddir_slash}libtool':'${top_builddir_slash}'${TARGET_SYS}-libtool:g ${B}/doltlibtool
+}
+
+# This recipe packages vlc as a library as well, so qt4 dependencies
+# can be avoided when only the library is installed.
+PACKAGES =+ "libvlc"
+
+LEAD_SONAME_libvlc = "libvlc.so.5"
+FILES_libvlc = "${libdir}/lib*.so.*"
+
+FILES_${PN} += "\
+ ${bindir}/vlc \
+ ${datadir}/applications \
+ ${datadir}/vlc/ \
+ ${datadir}/icons \
+ ${lindir}/vlc/vlc/libvlc_vdpau.so \
+"
+
+FILES_${PN}-dbg += "\
+ ${libdir}/vlc/*/.debug \
+ ${libdir}/vlc/plugins/*/.debug \
+"
+
+FILES_${PN}-staticdev += "\
+ ${libdir}/vlc/plugins/*/*.a \
+"
+
+INSANE_SKIP_${PN} = "dev-so"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
new file mode 100644
index 000000000..9f0e708ed
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
@@ -0,0 +1,13 @@
+Index: vlc-2.1.2/configure.ac
+===================================================================
+--- vlc-2.1.2.orig/configure.ac
++++ vlc-2.1.2/configure.ac
+@@ -24,7 +24,7 @@ AC_CANONICAL_BUILD
+ AC_CANONICAL_HOST
+ AC_PRESERVE_HELP_ORDER
+
+-AM_INIT_AUTOMAKE(tar-ustar color-tests foreign)
++AM_INIT_AUTOMAKE(tar-ustar color-tests foreign subdir-objects)
+ AC_CONFIG_HEADERS([config.h])
+
+ # Disable with "./configure --disable-silent-rules" or "make V=1"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
new file mode 100644
index 000000000..6d2a46fb3
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
@@ -0,0 +1,17 @@
+Index: vlc-2.1.2/src/input/subtitles.c
+===================================================================
+--- vlc-2.1.2.orig/src/input/subtitles.c
++++ vlc-2.1.2/src/input/subtitles.c
+@@ -44,6 +44,12 @@
+ #include "input_internal.h"
+
+ /**
++ * Drepper's alternative
++ * http://en.wikibooks.org/wiki/C_Programming/C_Reference/nonstandard/strlcpy
++ */
++#define strlcpy(dst, src, n) *((char* ) mempcpy(dst, src, n)) = '\0'
++
++/**
+ * We are not going to autodetect more subtitle files than this.
+ */
+ #define MAX_SUBTITLE_FILES 128
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
new file mode 100644
index 000000000..8e881d093
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
@@ -0,0 +1,46 @@
+* The upstream tests for libgcrypt are awkward and not working.
+ - Requires libgcrypt-config, which seems broken?
+* AM_PATH_LIBGCRYPT exists for a reason, why not use it? KISS.
+* Upstream abandoned AM_PATH_LIBGCRYPT in the past...newer automake ok?
+
+Upstream status: Pending
+
+Index: vlc-2.2.1/configure.ac
+===================================================================
+--- vlc-2.2.1.orig/configure.ac
++++ vlc-2.2.1/configure.ac
+@@ -4017,25 +4017,19 @@ PKG_ENABLE_MODULES_VLC([LIBXML2], [xml],
+ dnl
+ dnl libgcrypt
+ dnl
++GCRYPT_LIBVER=1
++GCRYPT_REQ=1.1.94
+ AC_ARG_ENABLE(libgcrypt,
+ [ --disable-libgcrypt gcrypt support (default enabled)])
+ AS_IF([test "${enable_libgcrypt}" != "no"], [
+- AC_CHECK_DECL([GCRYCTL_SET_THREAD_CBS], [
+- libgcrypt-config --version >/dev/null || \
+- AC_MSG_ERROR([gcrypt.h present but libgcrypt-config could not be found])
+- AC_CHECK_LIB(gcrypt, gcry_control, [
+- have_libgcrypt="yes"
+- GCRYPT_CFLAGS="`libgcrypt-config --cflags`"
+- GCRYPT_LIBS="`libgcrypt-config --libs`"
+- ], [
+- AC_MSG_ERROR([libgcrypt not found. Install libgcrypt or pass --disable-libgcrypt.])
+- ], [`libgcrypt-config --libs`])
+- ], [
+- AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
+- ], [#include <gcrypt.h>]
+- )
++ AM_PATH_LIBGCRYPT($GCRYPT_LIBVER:$GCRYPT_REQ,
++ [
++ GCRYPT_CFLAGS="$LIBGCRYPT_CFLAGS"
++ GCRYPT_LIBS="$LIBGCRYPT_LIBS"
++ ],[
++ AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or use --disable-libgcrypt. Have a nice day.])
++ ])
+ ])
+-
+ AC_SUBST(GCRYPT_CFLAGS)
+ AC_SUBST(GCRYPT_LIBS)
+ AM_CONDITIONAL([HAVE_GCRYPT], [test "${have_libgcrypt}" = "yes"])
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
new file mode 100644
index 000000000..53df1c6eb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
@@ -0,0 +1,19 @@
+* modules/gui/qt4/Makefile.am not B!=S friendly
+* Simple solution to missing directories in ${B}
+
+Upstream status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/gui/qt4/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/gui/qt4/Makefile.am
++++ vlc-2.2.1/modules/gui/qt4/Makefile.am
+@@ -127,6 +127,7 @@ moc_verbose_0 = @echo " MOC " $@;
+ moc_verbose__0 = $(moc_verbose_0)
+
+ .hpp.moc.cpp:
++ [ -d $(dir $@) ] || mkdir -p $(dir $@)
+ $(moc_verbose)$(MOC) $(MOC_CPPFLAGS) -o $@ $<
+
+ # These MOC files depend on the configure settings:
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
new file mode 100644
index 000000000..2d84ffd2f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
@@ -0,0 +1,17 @@
+* Also look for postprocess.h under libpostproc/
+
+Upstream-status: Pending
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -2444,7 +2444,7 @@ then
+ VLC_SAVE_FLAGS
+ CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
+ CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
+- AC_CHECK_HEADERS(postproc/postprocess.h)
++ AC_CHECK_HEADERS(postproc/postprocess.h,[],[AC_CHECK_HEADERS(libpostproc/postprocess.h)])
+ VLC_ADD_PLUGIN([postproc])
+ VLC_ADD_LIBS([postproc],[$POSTPROC_LIBS $AVUTIL_LIBS])
+ VLC_ADD_CFLAGS([postproc],[$POSTPROC_CFLAGS $AVUTIL_CFLAGS])
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
new file mode 100644
index 000000000..950c09b8a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
@@ -0,0 +1,29 @@
+Recent opencv API changes break upstream filter and example.
+Make opencv explicitly configurable.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -1693,7 +1693,16 @@ PKG_ENABLE_MODULES_VLC([BLURAY], [libblu
+ dnl
+ dnl OpenCV wrapper and example filters
+ dnl
+-PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
++AC_ARG_ENABLE(opencv,
++ [AS_HELP_STRING([--disable-opencv],
++ [disable OpenCV computer vision filter and example (default auto)])])
++if test "${enable_opencv}" != "no"
++then
++ PKG_ENABLE_MODULES_VLC([OPENCV],
++ [opencv_example opencv_wrapper],
++ [opencv > 2.0],
++ (OpenCV (computer vision) filter), [auto])
++fi
+
+
+ dnl
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
new file mode 100644
index 000000000..d05cf02b7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
@@ -0,0 +1,19 @@
+* tremor provides libvorbisidec, use it instead of libvorbisdec
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/codec/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/codec/Makefile.am
++++ vlc-2.2.1/modules/codec/Makefile.am
+@@ -234,7 +234,7 @@ codec_LTLIBRARIES += $(LTLIBtheora)
+ libtremor_plugin_la_SOURCES = codec/vorbis.c
+ libtremor_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -DMODULE_NAME_IS_tremor
+ libtremor_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(codecdir)'
+-libtremor_plugin_la_LIBADD = -lvorbisdec -logg
++libtremor_plugin_la_LIBADD = -lvorbisidec -logg
+ EXTRA_LTLIBRARIES += libtremor_plugin.la
+ codec_LTLIBRARIES += $(LTLIBtremor)
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
new file mode 100644
index 000000000..145e1ab82
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
@@ -0,0 +1,279 @@
+* luaL_checkint and luaL_optint were deprecated in lua 5.3
+* replacement functions are luaL_checkinteger and luaL_optinteger
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/lua/demux.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/demux.c
++++ vlc-2.2.1/modules/lua/demux.c
+@@ -52,7 +52,7 @@ struct demux_sys_t
+ static int vlclua_demux_peek( lua_State *L )
+ {
+ demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+- int n = luaL_checkint( L, 1 );
++ int n = luaL_checkinteger( L, 1 );
+ const uint8_t *p_peek;
+
+ int i_peek = stream_Peek( p_demux->s, &p_peek, n );
+@@ -67,7 +67,7 @@ static int vlclua_demux_read( lua_State
+ {
+ demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+ const uint8_t *p_read;
+- int n = luaL_checkint( L, 1 );
++ int n = luaL_checkinteger( L, 1 );
+ int i_read = stream_Peek( p_demux->s, &p_read, n );
+
+ if( i_read > 0 )
+Index: vlc-2.2.1/modules/lua/libs/configuration.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/configuration.c
++++ vlc-2.2.1/modules/lua/libs/configuration.c
+@@ -84,7 +84,7 @@ static int vlclua_config_set( lua_State
+ break;
+
+ case VLC_VAR_INTEGER:
+- config_PutInt( p_this, psz_name, luaL_checkint( L, 2 ) );
++ config_PutInt( p_this, psz_name, luaL_checkinteger( L, 2 ) );
+ break;
+
+ case VLC_VAR_BOOL:
+Index: vlc-2.2.1/modules/lua/libs/net.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/net.c
++++ vlc-2.2.1/modules/lua/libs/net.c
+@@ -202,7 +202,7 @@ static int vlclua_net_listen_tcp( lua_St
+ {
+ vlc_object_t *p_this = vlclua_get_this( L );
+ const char *psz_host = luaL_checkstring( L, 1 );
+- int i_port = luaL_checkint( L, 2 );
++ int i_port = luaL_checkinteger( L, 2 );
+ int *pi_fd = net_ListenTCP( p_this, psz_host, i_port );
+ if( pi_fd == NULL )
+ return luaL_error( L, "Cannot listen on %s:%d", psz_host, i_port );
+@@ -274,7 +274,7 @@ static int vlclua_net_connect_tcp( lua_S
+ {
+ vlc_object_t *p_this = vlclua_get_this( L );
+ const char *psz_host = luaL_checkstring( L, 1 );
+- int i_port = luaL_checkint( L, 2 );
++ int i_port = luaL_checkinteger( L, 2 );
+ int i_fd = net_Connect( p_this, psz_host, i_port, SOCK_STREAM, IPPROTO_TCP );
+ lua_pushinteger( L, vlclua_fd_map_safe( L, i_fd ) );
+ return 1;
+@@ -282,26 +282,26 @@ static int vlclua_net_connect_tcp( lua_S
+
+ static int vlclua_net_close( lua_State *L )
+ {
+- int i_fd = luaL_checkint( L, 1 );
++ int i_fd = luaL_checkinteger( L, 1 );
+ vlclua_fd_unmap_safe( L, i_fd );
+ return 0;
+ }
+
+ static int vlclua_net_send( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+ size_t i_len;
+ const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+
+- i_len = luaL_optint( L, 3, i_len );
++ i_len = luaL_optinteger( L, 3, i_len );
+ lua_pushinteger( L, (fd != -1) ? send( fd, psz_buffer, i_len, 0 ) : -1 );
+ return 1;
+ }
+
+ static int vlclua_net_recv( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+- size_t i_len = luaL_optint( L, 2, 1 );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++ size_t i_len = luaL_optinteger( L, 2, 1 );
+ char psz_buffer[i_len];
+
+ ssize_t i_ret = (fd != -1) ? recv( fd, psz_buffer, i_len, 0 ) : -1;
+@@ -382,19 +382,19 @@ static int vlclua_fd_open( lua_State *L
+ #ifndef _WIN32
+ static int vlclua_fd_write( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+ size_t i_len;
+ const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+
+- i_len = luaL_optint( L, 3, i_len );
++ i_len = luaL_optinteger( L, 3, i_len );
+ lua_pushinteger( L, (fd != -1) ? write( fd, psz_buffer, i_len ) : -1 );
+ return 1;
+ }
+
+ static int vlclua_fd_read( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+- size_t i_len = luaL_optint( L, 2, 1 );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++ size_t i_len = luaL_optinteger( L, 2, 1 );
+ char psz_buffer[i_len];
+
+ ssize_t i_ret = (fd != -1) ? read( fd, psz_buffer, i_len ) : -1;
+Index: vlc-2.2.1/modules/lua/libs/osd.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/osd.c
++++ vlc-2.2.1/modules/lua/libs/osd.c
+@@ -67,7 +67,7 @@ static int vlclua_osd_icon( lua_State *L
+ {
+ const char *psz_icon = luaL_checkstring( L, 1 );
+ int i_icon = vlc_osd_icon_from_string( psz_icon );
+- int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++ int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+ if( !i_icon )
+ return luaL_error( L, "\"%s\" is not a valid osd icon.", psz_icon );
+
+@@ -114,9 +114,9 @@ static int vlc_osd_position_from_string(
+ static int vlclua_osd_message( lua_State *L )
+ {
+ const char *psz_message = luaL_checkstring( L, 1 );
+- int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++ int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+ const char *psz_position = luaL_optstring( L, 3, "top-right" );
+- mtime_t duration = luaL_optint( L, 4, 1000000 );
++ mtime_t duration = luaL_optinteger( L, 4, 1000000 );
+
+ input_thread_t *p_input = vlclua_get_input_internal( L );
+ if( p_input )
+@@ -154,10 +154,10 @@ static int vlc_osd_slider_type_from_stri
+
+ static int vlclua_osd_slider( lua_State *L )
+ {
+- int i_position = luaL_checkint( L, 1 );
++ int i_position = luaL_checkinteger( L, 1 );
+ const char *psz_type = luaL_checkstring( L, 2 );
+ int i_type = vlc_osd_slider_type_from_string( psz_type );
+- int i_chan = luaL_optint( L, 3, SPU_DEFAULT_CHANNEL );
++ int i_chan = luaL_optinteger( L, 3, SPU_DEFAULT_CHANNEL );
+ if( !i_type )
+ return luaL_error( L, "\"%s\" is not a valid slider type.",
+ psz_type );
+@@ -198,7 +198,7 @@ static int vlclua_spu_channel_register(
+
+ static int vlclua_spu_channel_clear( lua_State *L )
+ {
+- int i_chan = luaL_checkint( L, 1 );
++ int i_chan = luaL_checkinteger( L, 1 );
+ input_thread_t *p_input = vlclua_get_input_internal( L );
+ if( !p_input )
+ return luaL_error( L, "Unable to find input." );
+Index: vlc-2.2.1/modules/lua/libs/playlist.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/playlist.c
++++ vlc-2.2.1/modules/lua/libs/playlist.c
+@@ -69,7 +69,7 @@ static int vlclua_playlist_next( lua_Sta
+
+ static int vlclua_playlist_skip( lua_State * L )
+ {
+- int i_skip = luaL_checkint( L, 1 );
++ int i_skip = luaL_checkinteger( L, 1 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ playlist_Skip( p_playlist, i_skip );
+ return 0;
+@@ -127,7 +127,7 @@ static int vlclua_playlist_random( lua_S
+
+ static int vlclua_playlist_gotoitem( lua_State * L )
+ {
+- int i_id = luaL_checkint( L, 1 );
++ int i_id = luaL_checkinteger( L, 1 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ PL_LOCK;
+ int i_ret = playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
+@@ -139,7 +139,7 @@ static int vlclua_playlist_gotoitem( lua
+
+ static int vlclua_playlist_delete( lua_State * L )
+ {
+- int i_id = luaL_checkint( L, 1 );
++ int i_id = luaL_checkinteger( L, 1 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ PL_LOCK;
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_id );
+@@ -155,8 +155,8 @@ static int vlclua_playlist_delete( lua_S
+
+ static int vlclua_playlist_move( lua_State * L )
+ {
+- int i_item = luaL_checkint( L, 1 );
+- int i_target = luaL_checkint( L, 2 );
++ int i_item = luaL_checkinteger( L, 1 );
++ int i_target = luaL_checkinteger( L, 2 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ PL_LOCK;
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_item );
+Index: vlc-2.2.1/modules/lua/libs/stream.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/stream.c
++++ vlc-2.2.1/modules/lua/libs/stream.c
+@@ -101,7 +101,7 @@ static int vlclua_stream_read( lua_State
+ {
+ int i_read;
+ stream_t **pp_stream = (stream_t **)luaL_checkudata( L, 1, "stream" );
+- int n = luaL_checkint( L, 2 );
++ int n = luaL_checkinteger( L, 2 );
+ uint8_t *p_read = malloc( n );
+ if( !p_read ) return vlclua_error( L );
+
+Index: vlc-2.2.1/modules/lua/libs/variables.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/variables.c
++++ vlc-2.2.1/modules/lua/libs/variables.c
+@@ -103,7 +103,7 @@ static int vlclua_tovalue( lua_State *L,
+ val->b_bool = luaL_checkboolean( L, -1 );
+ break;
+ case VLC_VAR_INTEGER:
+- val->i_int = luaL_checkint( L, -1 );
++ val->i_int = luaL_checkinteger( L, -1 );
+ break;
+ case VLC_VAR_STRING:
+ val->psz_string = (char*)luaL_checkstring( L, -1 ); /* XXX: Beware, this only stays valid as long as (L,-1) stays in the stack */
+Index: vlc-2.2.1/modules/lua/libs/volume.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/volume.c
++++ vlc-2.2.1/modules/lua/libs/volume.c
+@@ -48,7 +48,7 @@
+ static int vlclua_volume_set( lua_State *L )
+ {
+ playlist_t *p_this = vlclua_get_playlist_internal( L );
+- int i_volume = luaL_checkint( L, 1 );
++ int i_volume = luaL_checkinteger( L, 1 );
+ if( i_volume < 0 )
+ i_volume = 0;
+ int i_ret = playlist_VolumeSet( p_this, i_volume/(float)AOUT_VOLUME_DEFAULT );
+@@ -68,7 +68,7 @@ static int vlclua_volume_up( lua_State *
+ playlist_t *p_this = vlclua_get_playlist_internal( L );
+ float volume;
+
+- playlist_VolumeUp( p_this, luaL_optint( L, 1, 1 ), &volume );
++ playlist_VolumeUp( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+ lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+ return 1;
+ }
+@@ -78,7 +78,7 @@ static int vlclua_volume_down( lua_State
+ playlist_t *p_this = vlclua_get_playlist_internal( L );
+ float volume;
+
+- playlist_VolumeDown( p_this, luaL_optint( L, 1, 1 ), &volume );
++ playlist_VolumeDown( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+ lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+ return 1;
+ }
+Index: vlc-2.2.1/modules/lua/libs/win.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/win.c
++++ vlc-2.2.1/modules/lua/libs/win.c
+@@ -123,7 +123,7 @@ static int vlclua_console_init( lua_Stat
+
+ static int vlclua_console_wait( lua_State *L )
+ {
+- int i_timeout = luaL_optint( L, 1, 0 );
++ int i_timeout = luaL_optinteger( L, 1, 0 );
+ DWORD status = WaitForSingleObject( GetConsole( L ), i_timeout );
+ lua_pushboolean( L, status == WAIT_OBJECT_0 );
+ return 1;
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
new file mode 100644
index 000000000..cb3ba71dd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
@@ -0,0 +1,293 @@
+From 427732a379893491eac27aeadff0e0b3e252d158 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 08:19:00 +0200
+Subject: [PATCH] Avcodec/swscale: use AV_PIX_FMT consistently
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit faa7bd357b1f9e07a6ffbc451a188773fad7a275)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+
+Conflicts:
+ modules/codec/avcodec/chroma.c
+ modules/codec/avcodec/video.c
+---
+ modules/codec/avcodec/chroma.c | 104 ++++++++++++++++++++---------------------
+ modules/codec/avcodec/video.c | 10 ++--
+ modules/video_chroma/swscale.c | 28 +++++------
+ 3 files changed, 71 insertions(+), 71 deletions(-)
+
+diff --git a/modules/codec/avcodec/chroma.c b/modules/codec/avcodec/chroma.c
+index 393364b..c31f93d 100644
+--- a/modules/codec/avcodec/chroma.c
++++ b/modules/codec/avcodec/chroma.c
+@@ -62,77 +62,77 @@ static const struct
+ } chroma_table[] =
+ {
+ /* Planar YUV formats */
+- {VLC_CODEC_I444, PIX_FMT_YUV444P, 0, 0, 0 },
+- {VLC_CODEC_J444, PIX_FMT_YUVJ444P, 0, 0, 0 },
+-
+- {VLC_CODEC_I440, PIX_FMT_YUV440P, 0, 0, 0 },
+- {VLC_CODEC_J440, PIX_FMT_YUVJ440P, 0, 0, 0 },
+-
+- {VLC_CODEC_I422, PIX_FMT_YUV422P, 0, 0, 0 },
+- {VLC_CODEC_J422, PIX_FMT_YUVJ422P, 0, 0, 0 },
+-
+- {VLC_CODEC_I420, PIX_FMT_YUV420P, 0, 0, 0 },
+- {VLC_CODEC_YV12, PIX_FMT_YUV420P, 0, 0, 0 },
+- {VLC_FOURCC('I','Y','U','V'), PIX_FMT_YUV420P, 0, 0, 0 },
+- {VLC_CODEC_J420, PIX_FMT_YUVJ420P, 0, 0, 0 },
+- {VLC_CODEC_I411, PIX_FMT_YUV411P, 0, 0, 0 },
+- {VLC_CODEC_I410, PIX_FMT_YUV410P, 0, 0, 0 },
+- {VLC_FOURCC('Y','V','U','9'), PIX_FMT_YUV410P, 0, 0, 0 },
+-
+- {VLC_FOURCC('N','V','1','2'), PIX_FMT_NV12, 0, 0, 0 },
+- {VLC_FOURCC('N','V','2','1'), PIX_FMT_NV21, 0, 0, 0 },
+-
+- {VLC_CODEC_I420_9L, PIX_FMT_YUV420P9LE, 0, 0, 0 },
+- {VLC_CODEC_I420_9B, PIX_FMT_YUV420P9BE, 0, 0, 0 },
+- {VLC_CODEC_I420_10L, PIX_FMT_YUV420P10LE, 0, 0, 0 },
+- {VLC_CODEC_I420_10B, PIX_FMT_YUV420P10BE, 0, 0, 0 },
++ {VLC_CODEC_I444, AV_PIX_FMT_YUV444P, 0, 0, 0 },
++ {VLC_CODEC_J444, AV_PIX_FMT_YUVJ444P, 0, 0, 0 },
++
++ {VLC_CODEC_I440, AV_PIX_FMT_YUV440P, 0, 0, 0 },
++ {VLC_CODEC_J440, AV_PIX_FMT_YUVJ440P, 0, 0, 0 },
++
++ {VLC_CODEC_I422, AV_PIX_FMT_YUV422P, 0, 0, 0 },
++ {VLC_CODEC_J422, AV_PIX_FMT_YUVJ422P, 0, 0, 0 },
++
++ {VLC_CODEC_I420, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++ {VLC_CODEC_YV12, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++ {VLC_FOURCC('I','Y','U','V'), AV_PIX_FMT_YUV420P, 0, 0, 0 },
++ {VLC_CODEC_J420, AV_PIX_FMT_YUVJ420P, 0, 0, 0 },
++ {VLC_CODEC_I411, AV_PIX_FMT_YUV411P, 0, 0, 0 },
++ {VLC_CODEC_I410, AV_PIX_FMT_YUV410P, 0, 0, 0 },
++ {VLC_FOURCC('Y','V','U','9'), AV_PIX_FMT_YUV410P, 0, 0, 0 },
++
++ {VLC_FOURCC('N','V','1','2'), AV_PIX_FMT_NV12, 0, 0, 0 },
++ {VLC_FOURCC('N','V','2','1'), AV_PIX_FMT_NV21, 0, 0, 0 },
++
++ {VLC_CODEC_I420_9L, AV_PIX_FMT_YUV420P9LE, 0, 0, 0 },
++ {VLC_CODEC_I420_9B, AV_PIX_FMT_YUV420P9BE, 0, 0, 0 },
++ {VLC_CODEC_I420_10L, AV_PIX_FMT_YUV420P10LE, 0, 0, 0 },
++ {VLC_CODEC_I420_10B, AV_PIX_FMT_YUV420P10BE, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,13,0)
+- {VLC_CODEC_I422_9L, PIX_FMT_YUV422P9LE, 0, 0, 0 },
+- {VLC_CODEC_I422_9B, PIX_FMT_YUV422P9BE, 0, 0, 0 },
++ {VLC_CODEC_I422_9L, AV_PIX_FMT_YUV422P9LE, 0, 0, 0 },
++ {VLC_CODEC_I422_9B, AV_PIX_FMT_YUV422P9BE, 0, 0, 0 },
+ #endif
+- {VLC_CODEC_I422_10L, PIX_FMT_YUV422P10LE, 0, 0, 0 },
+- {VLC_CODEC_I422_10B, PIX_FMT_YUV422P10BE, 0, 0, 0 },
++ {VLC_CODEC_I422_10L, AV_PIX_FMT_YUV422P10LE, 0, 0, 0 },
++ {VLC_CODEC_I422_10B, AV_PIX_FMT_YUV422P10BE, 0, 0, 0 },
+
+- {VLC_CODEC_YUV420A, PIX_FMT_YUVA420P, 0, 0, 0 },
++ {VLC_CODEC_YUV420A, AV_PIX_FMT_YUVA420P, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_CHECK( 51, 45, 0, 74, 100 )
+ {VLC_CODEC_YUV422A, AV_PIX_FMT_YUVA422P, 0, 0, 0 },
+ #endif
+
+- {VLC_CODEC_I444_9L, PIX_FMT_YUV444P9LE, 0, 0, 0 },
+- {VLC_CODEC_I444_9B, PIX_FMT_YUV444P9BE, 0, 0, 0 },
+- {VLC_CODEC_I444_10L, PIX_FMT_YUV444P10LE, 0, 0, 0 },
+- {VLC_CODEC_I444_10B, PIX_FMT_YUV444P10BE, 0, 0, 0 },
+- {VLC_CODEC_I444_16L, PIX_FMT_YUV444P16LE, 0, 0, 0 },
+- {VLC_CODEC_I444_16B, PIX_FMT_YUV444P16BE, 0, 0, 0 },
++ {VLC_CODEC_I444_9L, AV_PIX_FMT_YUV444P9LE, 0, 0, 0 },
++ {VLC_CODEC_I444_9B, AV_PIX_FMT_YUV444P9BE, 0, 0, 0 },
++ {VLC_CODEC_I444_10L, AV_PIX_FMT_YUV444P10LE, 0, 0, 0 },
++ {VLC_CODEC_I444_10B, AV_PIX_FMT_YUV444P10BE, 0, 0, 0 },
++ {VLC_CODEC_I444_16L, AV_PIX_FMT_YUV444P16LE, 0, 0, 0 },
++ {VLC_CODEC_I444_16B, AV_PIX_FMT_YUV444P16BE, 0, 0, 0 },
+
+ /* Packed YUV formats */
+- {VLC_CODEC_YUYV, PIX_FMT_YUYV422, 0, 0, 0 },
+- {VLC_FOURCC('Y','U','Y','V'), PIX_FMT_YUYV422, 0, 0, 0 },
+- {VLC_CODEC_UYVY, PIX_FMT_UYVY422, 0, 0, 0 },
+- {VLC_FOURCC('Y','4','1','1'), PIX_FMT_UYYVYY411, 0, 0, 0 },
++ {VLC_CODEC_YUYV, AV_PIX_FMT_YUYV422, 0, 0, 0 },
++ {VLC_FOURCC('Y','U','Y','V'), AV_PIX_FMT_YUYV422, 0, 0, 0 },
++ {VLC_CODEC_UYVY, AV_PIX_FMT_UYVY422, 0, 0, 0 },
++ {VLC_FOURCC('Y','4','1','1'), AV_PIX_FMT_UYYVYY411, 0, 0, 0 },
+
+ /* Packed RGB formats */
+- VLC_RGB( VLC_FOURCC('R','G','B','4'), PIX_FMT_RGB4, PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
+- VLC_RGB( VLC_FOURCC('R','G','B','8'), PIX_FMT_RGB8, PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
++ VLC_RGB( VLC_FOURCC('R','G','B','4'), AV_PIX_FMT_RGB4, AV_PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
++ VLC_RGB( VLC_FOURCC('R','G','B','8'), AV_PIX_FMT_RGB8, AV_PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
+
+- VLC_RGB( VLC_CODEC_RGB15, PIX_FMT_RGB555, PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
+- VLC_RGB( VLC_CODEC_RGB16, PIX_FMT_RGB565, PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
+- VLC_RGB( VLC_CODEC_RGB24, PIX_FMT_BGR24, PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
++ VLC_RGB( VLC_CODEC_RGB15, AV_PIX_FMT_RGB555, AV_PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
++ VLC_RGB( VLC_CODEC_RGB16, AV_PIX_FMT_RGB565, AV_PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
++ VLC_RGB( VLC_CODEC_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
+
+- VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32, PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
+- VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32_1, PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
++ VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32, AV_PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
++ VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32_1, AV_PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
+
+ #ifdef AV_PIX_FMT_0BGR32
+ VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_0BGR32, AV_PIX_FMT_0RGB32, 0x000000ff, 0x0000ff00, 0x00ff0000 )
+ #endif
+
+- {VLC_CODEC_RGBA, PIX_FMT_RGBA, 0, 0, 0 },
+- {VLC_CODEC_ARGB, PIX_FMT_ARGB, 0, 0, 0 },
+- {VLC_CODEC_BGRA, PIX_FMT_BGRA, 0, 0, 0 },
+- {VLC_CODEC_GREY, PIX_FMT_GRAY8, 0, 0, 0},
++ {VLC_CODEC_RGBA, AV_PIX_FMT_RGBA, 0, 0, 0 },
++ {VLC_CODEC_ARGB, AV_PIX_FMT_ARGB, 0, 0, 0 },
++ {VLC_CODEC_BGRA, AV_PIX_FMT_BGRA, 0, 0, 0 },
++ {VLC_CODEC_GREY, AV_PIX_FMT_GRAY8, 0, 0, 0},
+
+ /* Paletized RGB */
+- {VLC_CODEC_RGBP, PIX_FMT_PAL8, 0, 0, 0},
++ {VLC_CODEC_RGBP, AV_PIX_FMT_PAL8, 0, 0, 0},
+
+ #if LIBAVUTIL_VERSION_CHECK(51, 42, 0, 74,100)
+ {VLC_CODEC_GBR_PLANAR, AV_PIX_FMT_GBRP, 0, 0, 0 },
+@@ -201,5 +201,5 @@ int FindFfmpegChroma( vlc_fourcc_t fourcc )
+ for( int i = 0; chroma_table[i].i_chroma != 0; i++ )
+ if( chroma_table[i].i_chroma == fourcc )
+ return chroma_table[i].i_chroma_id;
+- return PIX_FMT_NONE;
++ return AV_PIX_FMT_NONE;
+ }
+diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
+index c115db9..ae600e8 100644
+--- a/modules/codec/avcodec/video.c
++++ b/modules/codec/avcodec/video.c
+@@ -1004,7 +1004,7 @@ static picture_t *lavc_dr_GetFrame(struct AVCodecContext *ctx,
+ if (GetVlcChroma(&dec->fmt_out.video, ctx->pix_fmt) != VLC_SUCCESS)
+ return NULL;
+ dec->fmt_out.i_codec = dec->fmt_out.video.i_chroma;
+- if (ctx->pix_fmt == PIX_FMT_PAL8)
++ if (ctx->pix_fmt == AV_PIX_FMT_PAL8)
+ return NULL;
+
+ int width = frame->width;
+@@ -1180,7 +1180,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+ if (GetVlcChroma(&p_dec->fmt_out.video, p_context->pix_fmt) != VLC_SUCCESS)
+ goto no_dr;
+
+- if (p_context->pix_fmt == PIX_FMT_PAL8)
++ if (p_context->pix_fmt == AV_PIX_FMT_PAL8)
+ goto no_dr;
+
+ p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma;
+@@ -1215,7 +1215,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+ goto no_dr;
+ }
+
+- if( p_context->pix_fmt == PIX_FMT_YUV422P )
++ if( p_context->pix_fmt == AV_PIX_FMT_YUV422P )
+ {
+ if( 2 * p_pic->p[1].i_pitch != p_pic->p[0].i_pitch ||
+ 2 * p_pic->p[2].i_pitch != p_pic->p[0].i_pitch )
+@@ -1325,7 +1325,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+
+ /* Enumerate available formats */
+ bool can_hwaccel = false;
+- for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++ for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+ {
+ const AVPixFmtDescriptor *dsc = av_pix_fmt_desc_get(pi_fmt[i]);
+ if (dsc == NULL)
+@@ -1352,7 +1352,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+ if( p_va == NULL )
+ goto end;
+
+- for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++ for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+ {
+ if( p_va->pix_fmt != pi_fmt[i] )
+ continue;
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 569e0f5..4e0ecf1 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -257,35 +257,35 @@ static void FixParameters( int *pi_fmt, bool *pb_has_a, bool *pb_swap_uv, vlc_fo
+ switch( fmt )
+ {
+ case VLC_CODEC_YUV422A:
+- *pi_fmt = PIX_FMT_YUV422P;
++ *pi_fmt = AV_PIX_FMT_YUV422P;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_YUV420A:
+- *pi_fmt = PIX_FMT_YUV420P;
++ *pi_fmt = AV_PIX_FMT_YUV420P;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_YUVA:
+- *pi_fmt = PIX_FMT_YUV444P;
++ *pi_fmt = AV_PIX_FMT_YUV444P;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_RGBA:
+- *pi_fmt = PIX_FMT_BGR32;
++ *pi_fmt = AV_PIX_FMT_BGR32;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_ARGB:
+- *pi_fmt = PIX_FMT_BGR32_1;
++ *pi_fmt = AV_PIX_FMT_BGR32_1;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_BGRA:
+- *pi_fmt = PIX_FMT_RGB32;
++ *pi_fmt = AV_PIX_FMT_RGB32;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_YV12:
+- *pi_fmt = PIX_FMT_YUV420P;
++ *pi_fmt = AV_PIX_FMT_YUV420P;
+ *pb_swap_uv = true;
+ break;
+ case VLC_CODEC_YV9:
+- *pi_fmt = PIX_FMT_YUV410P;
++ *pi_fmt = AV_PIX_FMT_YUV410P;
+ *pb_swap_uv = true;
+ break;
+ default:
+@@ -314,7 +314,7 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+ {
+ if( p_fmti->i_chroma == VLC_CODEC_YUVP && ALLOW_YUVP )
+ {
+- i_fmti = i_fmto = PIX_FMT_GRAY8;
++ i_fmti = i_fmto = AV_PIX_FMT_GRAY8;
+ i_sws_flags = SWS_POINT;
+ }
+ }
+@@ -327,9 +327,9 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+ * Without SWS_ACCURATE_RND the quality is really bad for some conversions */
+ switch( i_fmto )
+ {
+- case PIX_FMT_ARGB:
+- case PIX_FMT_RGBA:
+- case PIX_FMT_ABGR:
++ case AV_PIX_FMT_ARGB:
++ case AV_PIX_FMT_RGBA:
++ case AV_PIX_FMT_ABGR:
+ i_sws_flags |= SWS_ACCURATE_RND;
+ break;
+ }
+@@ -403,8 +403,8 @@ static int Init( filter_t *p_filter )
+ const unsigned i_fmto_visible_width = p_fmto->i_visible_width * p_sys->i_extend_factor;
+ for( int n = 0; n < (cfg.b_has_a ? 2 : 1); n++ )
+ {
+- const int i_fmti = n == 0 ? cfg.i_fmti : PIX_FMT_GRAY8;
+- const int i_fmto = n == 0 ? cfg.i_fmto : PIX_FMT_GRAY8;
++ const int i_fmti = n == 0 ? cfg.i_fmti : AV_PIX_FMT_GRAY8;
++ const int i_fmto = n == 0 ? cfg.i_fmto : AV_PIX_FMT_GRAY8;
+ struct SwsContext *ctx;
+
+ ctx = sws_getContext( i_fmti_visible_width, p_fmti->i_visible_height, i_fmti,
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
new file mode 100644
index 000000000..56744e7de
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
@@ -0,0 +1,45 @@
+From 6fa8a4a9bb64ff34328aae46acd600f8502b2c05 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 09:07:39 +0200
+Subject: [PATCH] SWSCALE: fix compilation with 4.x
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit 2b23857c68622edda76b72b74aeb3d943ee277c9)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+---
+ modules/video_chroma/swscale.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 4e0ecf1..26d0d6f 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -36,6 +36,7 @@
+ #include <vlc_cpu.h>
+
+ #include <libswscale/swscale.h>
++#include <libswscale/version.h>
+
+ #ifdef __APPLE__
+ # include <TargetConditionals.h>
+@@ -235,6 +236,7 @@ static int GetSwsCpuMask(void)
+ {
+ int i_sws_cpu = 0;
+
++#if LIBSWSCALE_VERSION_MAJOR < 4
+ #if defined(__i386__) || defined(__x86_64__)
+ if( vlc_CPU_MMX() )
+ i_sws_cpu |= SWS_CPU_CAPS_MMX;
+@@ -248,6 +250,7 @@ static int GetSwsCpuMask(void)
+ if( vlc_CPU_ALTIVEC() )
+ i_sws_cpu |= SWS_CPU_CAPS_ALTIVEC;
+ #endif
++#endif
+
+ return i_sws_cpu;
+ }
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
new file mode 100644
index 000000000..b5be04cb9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
@@ -0,0 +1,19 @@
+require ${BPN}.inc
+
+# work around build failure
+EXTRA_OECONF += " --enable-libxml2=no"
+
+SRC_URI += "file://0001-enable-subdir-objects.patch \
+ file://0002-glibc-does-not-provide-strlcpy.patch \
+ file://0003-use-am-path-libgcrypt.patch \
+ file://0004-modules-gui-qt4-out-of-tree-build.patch \
+ file://0005-libpostproc-header-check.patch \
+ file://0006-make-opencv-configurable.patch \
+ file://0007-use-vorbisidec.patch \
+ file://0008-fix-luaL-checkint.patch \
+ file://0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch \
+ file://0010-SWSCALE-fix-compilation-with-4.x.patch \
+"
+
+SRC_URI[md5sum] = "f98d60f0f59ef72b6e3407f2ff09bda6"
+SRC_URI[sha256sum] = "9ad23128be16f9b40ed772961272cb0748ed8e4aa1bc79c129e589feebea5fb5"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
new file mode 100644
index 000000000..b623dbf37
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
@@ -0,0 +1,49 @@
+Upstream-Status: Backport
+
+Backport patch to fix CVE-2015-6749 from:
+
+https://trac.xiph.org/ticket/2212
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 04815d3e1bfae3a6cdfb2c25358a5a72b61299f7 Mon Sep 17 00:00:00 2001
+From: Mark Harris <mark.hsj@gmail.com>
+Date: Sun, 30 Aug 2015 05:54:46 -0700
+Subject: [PATCH] oggenc: Fix large alloca on bad AIFF input
+
+Fixes #2212
+---
+ oggenc/audio.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/oggenc/audio.c b/oggenc/audio.c
+index 477da8c..4921fb9 100644
+--- a/oggenc/audio.c
++++ b/oggenc/audio.c
+@@ -245,8 +245,8 @@ static int aiff_permute_matrix[6][6] =
+ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ {
+ int aifc; /* AIFC or AIFF? */
+- unsigned int len;
+- unsigned char *buffer;
++ unsigned int len, readlen;
++ unsigned char buffer[22];
+ unsigned char buf2[8];
+ aiff_fmt format;
+ aifffile *aiff = malloc(sizeof(aifffile));
+@@ -269,9 +269,9 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ return 0; /* Weird common chunk */
+ }
+
+- buffer = alloca(len);
+-
+- if(fread(buffer,1,len,in) < len)
++ readlen = len < sizeof(buffer) ? len : sizeof(buffer);
++ if(fread(buffer,1,readlen,in) < readlen ||
++ (len > readlen && !seek_forward(in, len-readlen)))
+ {
+ fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n"));
+ return 0;
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch
new file mode 100644
index 000000000..111e98ac1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch
@@ -0,0 +1,26 @@
+From: Petter Reinholdtsen <pere@hungry.com>
+Date: Wed, 22 Oct 2014 13:25:21 +0200
+Subject: Fix format error blocking compilation with hardening
+
+Last-Update: 2014-10-22
+Forwarded: no
+
+Enabling hardening refuses to compile code with sprintf() calls
+with no formatting string. Adjust the code to work with hardening.
+---
+ ogg123/status.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ogg123/status.c b/ogg123/status.c
+index 92b8ff1..ccec389 100644
+--- a/ogg123/status.c
++++ b/ogg123/status.c
+@@ -148,7 +148,7 @@ int print_statistics_line (stat_format_t stats[])
+
+ switch (stats->type) {
+ case stat_noarg:
+- len += sprintf(str+len, stats->formatstr);
++ len += sprintf(str+len, "%s", stats->formatstr);
+ break;
+ case stat_intarg:
+ len += sprintf(str+len, stats->formatstr, stats->arg.intarg);
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
new file mode 100644
index 000000000..e43cb4032
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Vorbis Tools"
+DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \
+that is free of intellectual property restrictions. vorbis-tools \
+include some command line applications to use the libraries."
+HOMEPAGE = "http://www.vorbis.com/"
+BUGTRACKER = "https://trac.xiph.org"
+SECTION = "multimedia"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libogg libvorbis curl libao"
+
+SRC_URI = "http://downloads.xiph.org/releases/vorbis/${BP}.tar.gz \
+ file://0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch \
+ file://0004-Fix-format-error-blocking-compilation-with-hardening.patch \
+ "
+
+SRC_URI[md5sum] = "567e0fb8d321b2cd7124f8208b8b90e6"
+SRC_URI[sha256sum] = "a389395baa43f8e5a796c99daf62397e435a7e73531c9f44d9084055a05d22bc"
+
+inherit autotools pkgconfig gettext
+
+PACKAGECONFIG ??= "flac"
+PACKAGECONFIG[flac] = ",--without-flac,flac,libflac"
+PACKAGECONFIG[speex] = ",--without-speex,speex,speex"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch
new file mode 100644
index 000000000..7668df35d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch
@@ -0,0 +1,29 @@
+From 4945dca11bc4ddec60bd858f45212dc8f39638e0 Mon Sep 17 00:00:00 2001
+From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+Date: Tue, 5 Jul 2016 18:07:45 -0400
+Subject: [PATCH 1/6] build: Protect against unsupported CPU types
+
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+Upstream-Status: Accepted [expected in 0.4]
+---
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6f9553b..f5304b8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -70,8 +70,9 @@ AS_CASE(["${host_cpu}"],
+ [
+ HAVE_ARM=1
+ ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
+- ]
++ ],
+ # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
++ [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
+ )
+ AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
+ AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"])
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch
new file mode 100644
index 000000000..2e202b03c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch
@@ -0,0 +1,30 @@
+From b5bda3431159b6505dcd069641c863018c4d4309 Mon Sep 17 00:00:00 2001
+From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+Date: Wed, 6 Jul 2016 15:18:15 -0400
+Subject: [PATCH 2/6] build: Add ARM 64bit support
+
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+Upstream-Status: Accepted [expected in 0.4]
+---
+ configure.ac | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index f5304b8..be20514 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,6 +71,11 @@ AS_CASE(["${host_cpu}"],
+ HAVE_ARM=1
+ ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
+ ],
++ [aarch64*],
++ [
++ HAVE_NEON=1
++ ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"
++ ],
+ # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
+ [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
+ )
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch
new file mode 100644
index 000000000..82e270fac
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch
@@ -0,0 +1,96 @@
+From 7722fb8a3189fea0f6381f02a0e4f63c847f0393 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Sat, 6 Aug 2016 11:02:43 +0200
+Subject: [PATCH 3/6] build: fix architecture detection
+
+The current architecture detection, based on the "host_cpu" part of the
+tuple does not work properly for a number of reason:
+
+ - The code assumes that if host_cpu starts with "arm" then ARM
+ instructions are available, which is incorrect. Indeed, Cortex-M
+ platforms can run Linux, they are ARM platforms (so host_cpu = arm),
+ but they don't support ARM instructions: they support only the
+ Thumb-2 instruction set.
+
+ - The armv7 case is also not very useful, as it is not standard at all
+ to pass armv7 as host_cpu even if the host system is actually ARMv7
+ based.
+
+ - For the same reason, the armv8 case is not very useful: ARMv8 is
+ AArch64, and there is already a separate case to handle this
+ architecture.
+
+So, this commit moves away from a host_cpu based logic, and instead
+tests using AC_CHECK_DECLS() the built-in definitions of the compiler:
+
+ - If we have __ARM_ARCH_ISA_ARM defined, then it's an ARM processor
+ that supports the ARM instruction set (this allows to exclude Thumb-2
+ only processors).
+
+ - If we have __ARM_ARCH_7A__, then we have an ARMv7-A processor, and
+ we can enable the corresponding optimizations
+
+ - Same for __aarch64__, __i386__ and __x86_64__.
+
+In addition, we remove the AC_MSG_ERROR() that makes the build fail for
+all architectures but the ones that are explicitly supported. Indeed,
+webrtc-audio-processing builds just fine for other architectures (tested
+on MIPS), it's just that none of the architecture-specific optimizations
+will be used.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+Upstream-Status: Accepted [expected in 0.4]
+---
+ configure.ac | 35 +++++++++++------------------------
+ 1 file changed, 11 insertions(+), 24 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index be20514..e898014 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,30 +55,17 @@ AS_CASE(["${host}"],
+ )
+ AC_SUBST(PLATFORM_CFLAGS)
+
+-AS_CASE(["${host_cpu}"],
+- [i?86|x86_64],
+- [
+- HAVE_X86=1
+- ],
+- [armv7*|armv8*],
+- [
+- HAVE_ARM=1
+- HAVE_ARMV7=1
+- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM -DWEBRTC_ARCH_ARM_V7"
+- ],
+- [arm*],
+- [
+- HAVE_ARM=1
+- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
+- ],
+- [aarch64*],
+- [
+- HAVE_NEON=1
+- ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"
+- ],
+- # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
+- [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
+-)
++# Testing __ARM_ARCH_ISA_ARM since the code contains ARM instructions,
++# which don't work on Thumb-2 only platforms (ARMv7-M).
++AC_CHECK_DECLS([__ARM_ARCH_ISA_ARM],
++ [HAVE_ARM=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM"])
++AC_CHECK_DECLS([__ARM_ARCH_7A__],
++ [HAVE_ARMV7=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM_V7"])
++AC_CHECK_DECLS([__aarch64__],
++ [HAVE_NEON=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"])
++AC_CHECK_DECLS([__i386__], [HAVE_X86=1])
++AC_CHECK_DECLS([__x86_64__], [HAVE_X86=1])
++
+ AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
+ AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"])
+ AM_CONDITIONAL(HAVE_ARMV7, [test "x${HAVE_ARMV7}" = "x1"])
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch
new file mode 100644
index 000000000..c96f10ed9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch
@@ -0,0 +1,41 @@
+From 0c332b7d94f8425c4f33344ddf406b6eea458861 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Mon, 8 May 2017 17:01:49 +0300
+Subject: [PATCH 4/6] typedefs.h: add support for 64-bit and big endian MIPS
+
+The 64-bit check is taken from the upstream webrtc project, the big
+endian check is my own addition.
+
+Upstream-Status: Pending
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+---
+ webrtc/typedefs.h | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/webrtc/typedefs.h b/webrtc/typedefs.h
+index d875490..d1b2f54 100644
+--- a/webrtc/typedefs.h
++++ b/webrtc/typedefs.h
+@@ -41,9 +41,18 @@
+ //#define WEBRTC_ARCH_ARMEL
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
+-#elif defined(__MIPSEL__)
++#elif defined(__MIPSEL__) || defined(__MIPSEB__)
++#define WEBRTC_ARCH_MIPS_FAMILY
++#if defined(__LP64__)
++#define WEBRTC_ARCH_64_BITS
++#else
+ #define WEBRTC_ARCH_32_BITS
++#endif
++#if defined(__MIPSEL__)
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
++#else
++#define WEBRTC_ARCH_BIG_ENDIAN
++#endif
+ #elif defined(__pnacl__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch
new file mode 100644
index 000000000..e16b57ecb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch
@@ -0,0 +1,28 @@
+From db5f570e928c8ca5b0b8dc702e1af0a57277f092 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Mon, 3 Jul 2017 16:20:08 +0300
+Subject: [PATCH 5/6] typedefs.h: add support for PowerPC
+
+Upstream-Status: Pending
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+---
+ webrtc/typedefs.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/webrtc/typedefs.h b/webrtc/typedefs.h
+index d1b2f54..6e34d9e 100644
+--- a/webrtc/typedefs.h
++++ b/webrtc/typedefs.h
+@@ -53,6 +53,9 @@
+ #else
+ #define WEBRTC_ARCH_BIG_ENDIAN
+ #endif
++#elif defined(__powerpc__)
++#define WEBRTC_ARCH_32_BITS
++#define WEBRTC_ARCH_BIG_ENDIAN
+ #elif defined(__pnacl__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch
new file mode 100644
index 000000000..5826ab00d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch
@@ -0,0 +1,116 @@
+From 7d31da8ef93987000f297d435dbacaf7d436107b Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Thu, 15 Jun 2017 18:38:30 +0300
+Subject: [PATCH 6/6] common_audio: implement endianness conversion in wav file
+ handling
+
+The code didn't build for big endian machines due to the missing
+endianness conversions.
+
+Upstream-Status: Pending
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+---
+ webrtc/common_audio/wav_file.cc | 27 +++++++++++++++++++++------
+ webrtc/common_audio/wav_header.cc | 32 +++++++++++++++++++++++++++++++-
+ 2 files changed, 52 insertions(+), 7 deletions(-)
+
+diff --git a/webrtc/common_audio/wav_file.cc b/webrtc/common_audio/wav_file.cc
+index b14b620..e2f7738 100644
+--- a/webrtc/common_audio/wav_file.cc
++++ b/webrtc/common_audio/wav_file.cc
+@@ -64,9 +64,6 @@ WavReader::~WavReader() {
+ }
+
+ size_t WavReader::ReadSamples(size_t num_samples, int16_t* samples) {
+-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to big-endian when reading from WAV file"
+-#endif
+ // There could be metadata after the audio; ensure we don't read it.
+ num_samples = std::min(rtc::checked_cast<uint32_t>(num_samples),
+ num_samples_remaining_);
+@@ -76,6 +73,13 @@ size_t WavReader::ReadSamples(size_t num_samples, int16_t* samples) {
+ RTC_CHECK(read == num_samples || feof(file_handle_));
+ RTC_CHECK_LE(read, num_samples_remaining_);
+ num_samples_remaining_ -= rtc::checked_cast<uint32_t>(read);
++
++#ifdef WEBRTC_ARCH_BIG_ENDIAN
++ // Convert the read samples from little-endian to big-endian.
++ for (size_t i = 0; i < read; i++)
++ samples[i] = ((uint16_t) samples[i] >> 8) | ((uint16_t) samples[i] << 8);
++#endif
++
+ return read;
+ }
+
+@@ -119,11 +123,22 @@ WavWriter::~WavWriter() {
+ }
+
+ void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) {
+-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to little-endian when writing to WAV file"
+-#endif
++#ifdef WEBRTC_ARCH_BIG_ENDIAN
++ // Convert the samples from big-endian samples to little-endian.
++ int16_t* converted_samples = static_cast<int16_t*>(malloc(num_samples * sizeof(*samples)));
++ RTC_CHECK(converted_samples) << "Out of memory.";
++ for (int i = 0; i < num_samples; i++)
++ converted_samples[i] =
++ ((uint16_t) samples[i] >> 8) | ((uint16_t) samples[i] << 8);
++
++ const size_t written =
++ fwrite(converted_samples, sizeof(*converted_samples), num_samples,
++ file_handle_);
++ free(converted_samples);
++#else
+ const size_t written =
+ fwrite(samples, sizeof(*samples), num_samples, file_handle_);
++#endif
+ RTC_CHECK_EQ(num_samples, written);
+ num_samples_ += static_cast<uint32_t>(written);
+ RTC_CHECK(written <= std::numeric_limits<uint32_t>::max() ||
+diff --git a/webrtc/common_audio/wav_header.cc b/webrtc/common_audio/wav_header.cc
+index 61cfffe..382bfc7 100644
+--- a/webrtc/common_audio/wav_header.cc
++++ b/webrtc/common_audio/wav_header.cc
+@@ -129,7 +129,37 @@ static inline std::string ReadFourCC(uint32_t x) {
+ return std::string(reinterpret_cast<char*>(&x), 4);
+ }
+ #else
+-#error "Write be-to-le conversion functions"
++static inline void WriteLE16(uint16_t* f, uint16_t x) {
++ *f = x >> 8 | x << 8;
++}
++static inline void WriteLE32(uint32_t* f, uint32_t x) {
++ *f = x >> 24
++ | (x && 0xFF0000) >> 8
++ | (x && 0xFF00) << 8
++ | x << 24;
++}
++static inline void WriteFourCC(uint32_t* f, char a, char b, char c, char d) {
++ *f = static_cast<uint32_t>(d)
++ | static_cast<uint32_t>(c) << 8
++ | static_cast<uint32_t>(b) << 16
++ | static_cast<uint32_t>(a) << 24;
++}
++
++static inline uint32_t ReadLE16(uint16_t x) {
++ return x >> 8 | x << 8;
++}
++
++static inline uint32_t ReadLE32(uint32_t x) {
++ return x >> 24
++ | (x && 0xFF0000) >> 8
++ | (x && 0xFF00) << 8
++ | x << 24;
++}
++
++static inline std::string ReadFourCC(uint32_t x) {
++ x = ReadLE32(x);
++ return std::string(reinterpret_cast<char*>(&x), 4);
++}
+ #endif
+
+ static inline uint32_t RiffChunkSize(uint32_t bytes_in_payload) {
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb
new file mode 100644
index 000000000..2b0f7c684
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Audio processing bits of the WebRTC reference implementation"
+HOMEPAGE = "https://www.freedesktop.org/software/pulseaudio/webrtc-audio-processing/"
+SECTION = "audio"
+
+DEPENDS_append_libc-musl = " libexecinfo"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da08a38a32a340c5d91e13ee86a118f2 \
+ file://webrtc/common.h;beginline=1;endline=9;md5=41f7322d91deabaf0acbbd0b8d0bc548 \
+"
+
+# Note that patch 3 effectively reverts patches 1 and 2. The only reason
+# why patches 1 and 2 are included is that otherwise patch 3 wouldn't
+# apply cleanly.
+SRC_URI = "http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/${BP}.tar.xz \
+ file://0001-build-Protect-against-unsupported-CPU-types.patch \
+ file://0002-build-Add-ARM-64bit-support.patch \
+ file://0003-build-fix-architecture-detection.patch \
+ file://0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch \
+ file://0005-typedefs.h-add-support-for-PowerPC.patch \
+ file://0006-common_audio-implement-endianness-conversion-in-wav-.patch \
+"
+
+SRC_URI[md5sum] = "336ae032f608e65808ac577cde0ab72c"
+SRC_URI[sha256sum] = "756e291d4f557d88cd50c4fe3b8454ec238362d22cedb3e6173240d90f0a80fa"
+
+LDFLAGS_append_libc-musl = " -lexecinfo"
+inherit autotools
OpenPOWER on IntegriCloud