summaryrefslogtreecommitdiffstats
path: root/meta-openembedded/meta-multimedia
diff options
context:
space:
mode:
Diffstat (limited to 'meta-openembedded/meta-multimedia')
-rw-r--r--meta-openembedded/meta-multimedia/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-multimedia/README19
-rw-r--r--meta-openembedded/meta-multimedia/classes/juce.bbclass47
-rw-r--r--meta-openembedded/meta-multimedia/conf/layer.conf32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch102
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb9
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb7
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb8
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb68
-rw-r--r--meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch38
-rw-r--r--meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch496
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch163
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch26
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch43
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch180
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch40
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch54
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch87
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch96
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb216
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch57
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb59
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb37
-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
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb7
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch41
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch222
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch73
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb22
185 files changed, 9441 insertions, 0 deletions
diff --git a/meta-openembedded/meta-multimedia/COPYING.MIT b/meta-openembedded/meta-multimedia/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/meta-openembedded/meta-multimedia/README b/meta-openembedded/meta-multimedia/README
new file mode 100644
index 000000000..20f4fb863
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/README
@@ -0,0 +1,19 @@
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: master
+revision: HEAD
+
+URI: git://github.com/openembedded/meta-oe.git
+layers: meta-oe
+branch: master
+revision: HEAD
+
+Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-multimedia]' in the subject'
+
+When sending single patches, please use something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-multimedia][PATCH
+
+You are encouraged to fork the mirror on github https://github.com/openembedded/meta-oe/ to share your patches, this is preferred for patch sets consisting of more than one patch. Other services like gitorious, repo.or.cz or self hosted setups are of course accepted as well, 'git fetch <remote>' works the same on all of them. We recommend github because it is free, easy to use, has been proven to be reliable and has a really good web GUI.
+
+Layer maintainer: Andreas MĂĽller <schnitzeltony@googlemail.com>
diff --git a/meta-openembedded/meta-multimedia/classes/juce.bbclass b/meta-openembedded/meta-multimedia/classes/juce.bbclass
new file mode 100644
index 000000000..3927235ef
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/classes/juce.bbclass
@@ -0,0 +1,47 @@
+inherit pkgconfig
+
+# List of JUCE modules that requires external dependencies
+JUCE_MODULES ??= " \
+ juce_core \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'juce_audio_devices', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'juce_graphics juce_gui_basics', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'juce_opengl', '', d)} \
+"
+JUCE_X11_DEPS = "libx11 libxext libxinerama libxrandr libxcursor"
+
+PACKAGECONFIG_prepend= "${JUCE_MODULES} "
+PACKAGECONFIG[juce_core] = ",,curl,"
+PACKAGECONFIG[juce_audio_devices] = ",,alsa-lib,"
+PACKAGECONFIG[juce_graphics] = ",,${JUCE_X11_DEPS} freetype,"
+PACKAGECONFIG[juce_gui_basics] = ",,${JUCE_X11_DEPS},"
+PACKAGECONFIG[juce_opengl] = ",,virtual/libgl,"
+
+DEPENDS_prepend = "projucer-native "
+
+export OE_JUCE_PROJUCER = "${STAGING_BINDIR_NATIVE}/Projucer"
+
+juce_do_configure() {
+ if [ -z "${JUCE_JUCERS}" ]; then
+ JUCERS=`find . -type f -iname "*.jucer"` && IFS=$'\n'
+ else
+ JUCERS="${JUCE_JUCERS}"
+ fi
+
+ if [ -z "$JUCERS" ]; then
+ die "JUCE_JUCERS not set and no profiles found in $PWD"
+ fi
+
+ # XXX: Hack for Projucer, since it requires a X Display even when running in
+ # console mode. This will be fixed in future. Most cases DISPLAY=:0 will just work,
+ # the only case why we have JUCE_DISPLAY variable, is in case of a build system,
+ # such as jenkins, that can have multiple virtual X server running for each build.
+ test -z "${JUCE_DISPLAY}" && export DISPLAY=:0 || export DISPLAY=${JUCE_DISPLAY}
+
+ for i in $JUCERS; do
+ ${OE_JUCE_PROJUCER} --resave $i
+ done
+}
+
+EXPORT_FUNCTIONS do_configure
+
+addtask configure after do_unpack do_patch before do_compile
diff --git a/meta-openembedded/meta-multimedia/conf/layer.conf b/meta-openembedded/meta-multimedia/conf/layer.conf
new file mode 100644
index 000000000..cfedf2f6b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/conf/layer.conf
@@ -0,0 +1,32 @@
+# It really depends on order of the layers appearing in BBLAYERS
+# variable in toplevel bblayers.conf file, where bitbake will search
+# for .inc files and others where bitbake uses BBPATH since it will
+# search the directories from first to last as specified in BBPATH
+# Therefore if you want a given layer to be considered high priority
+# for the .inc and .conf etc. then consider it adding at the beginning
+# of BBPATH. For bblayers bitbake will use BBFILES_PRIORITY to resolve
+# the recipe contention so the order of directories in BBFILES does
+# not matter.
+
+# We have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have a recipes directory, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "multimedia-layer"
+BBFILE_PATTERN_multimedia-layer := "^${LAYERDIR}/"
+
+# Define the priority for recipes (.bb files) from this layer,
+# choosing carefully how this layer interacts with all of the
+# other layers.
+
+BBFILE_PRIORITY_multimedia-layer = "6"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_multimedia-layer = "1"
+
+LAYERDEPENDS_multimedia-layer = "core"
+
+LAYERSERIES_COMPAT_multimedia-layer = "sumo"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch
new file mode 100644
index 000000000..9bfc31b8e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch
@@ -0,0 +1,102 @@
+OE-Core's vala class known one type of vapigen.m4 and deletes it since its
+not cross compile friendly, but this is a different case here where its not
+same vapigen.m4 just name is same and it tends to inherit vala bbclass so
+save it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: gupnp-dlna-0.10.5/m4/vapigen-custom.m4
+===================================================================
+--- /dev/null
++++ gupnp-dlna-0.10.5/m4/vapigen-custom.m4
+@@ -0,0 +1,43 @@
++
++dnl vala.m4
++dnl
++dnl Copyright 2010 Marc-Andre Lureau
++dnl Copyright 2011 Rodney Dawes <dobey.pwns@gmail.com>
++dnl
++dnl This library is free software; you can redistribute it and/or
++dnl modify it under the terms of the GNU Lesser General Public
++dnl License as published by the Free Software Foundation; either
++dnl version 2.1 of the License, or (at your option) any later version.
++dnl
++dnl This library is distributed in the hope that it will be useful,
++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++dnl Lesser General Public License for more details.
++dnl
++dnl You should have received a copy of the GNU Lesser General Public
++dnl License along with this library; if not, write to the Free Software
++dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++
++dnl dropped everything but VALA_PROG_VAPIGEN - Jens Georg <mail@jensge.org>
++
++# Check whether the Vala API Generator exists in `PATH'. If it is found,
++# the variable VAPIGEN is set. Optionally a minimum release number of the
++# generator can be requested.
++#
++# VALA_PROG_VAPIGEN([MINIMUM-VERSION])
++# ------------------------------------
++AC_DEFUN([GUPNP_PROG_VAPIGEN],
++[AC_PATH_PROG([VAPIGEN], [vapigen], [])
++ AS_IF([test -z "$VAPIGEN"],
++ [AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],
++ [AS_IF([test -n "$1"],
++ [AC_MSG_CHECKING([$VAPIGEN is at least version $1])
++ am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator *//'`
++ AS_VERSION_COMPARE([$1], ["$am__vapigen_version"],
++ [AC_MSG_RESULT([yes])],
++ [AC_MSG_RESULT([yes])],
++ [AC_MSG_RESULT([no])
++ AC_MSG_WARN([Vala API Generator $1 not found.])
++ VAPIGEN=""
++ ])])])
++])
+Index: gupnp-dlna-0.10.5/m4/vapigen.m4
+===================================================================
+--- gupnp-dlna-0.10.5.orig/m4/vapigen.m4
++++ /dev/null
+@@ -1,43 +0,0 @@
+-
+-dnl vala.m4
+-dnl
+-dnl Copyright 2010 Marc-Andre Lureau
+-dnl Copyright 2011 Rodney Dawes <dobey.pwns@gmail.com>
+-dnl
+-dnl This library is free software; you can redistribute it and/or
+-dnl modify it under the terms of the GNU Lesser General Public
+-dnl License as published by the Free Software Foundation; either
+-dnl version 2.1 of the License, or (at your option) any later version.
+-dnl
+-dnl This library is distributed in the hope that it will be useful,
+-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-dnl Lesser General Public License for more details.
+-dnl
+-dnl You should have received a copy of the GNU Lesser General Public
+-dnl License along with this library; if not, write to the Free Software
+-dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-
+-dnl dropped everything but VALA_PROG_VAPIGEN - Jens Georg <mail@jensge.org>
+-
+-# Check whether the Vala API Generator exists in `PATH'. If it is found,
+-# the variable VAPIGEN is set. Optionally a minimum release number of the
+-# generator can be requested.
+-#
+-# VALA_PROG_VAPIGEN([MINIMUM-VERSION])
+-# ------------------------------------
+-AC_DEFUN([GUPNP_PROG_VAPIGEN],
+-[AC_PATH_PROG([VAPIGEN], [vapigen], [])
+- AS_IF([test -z "$VAPIGEN"],
+- [AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],
+- [AS_IF([test -n "$1"],
+- [AC_MSG_CHECKING([$VAPIGEN is at least version $1])
+- am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator *//'`
+- AS_VERSION_COMPARE([$1], ["$am__vapigen_version"],
+- [AC_MSG_RESULT([yes])],
+- [AC_MSG_RESULT([yes])],
+- [AC_MSG_RESULT([no])
+- AC_MSG_WARN([Vala API Generator $1 not found.])
+- VAPIGEN=""
+- ])])])
+-])
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc
new file mode 100644
index 000000000..23f17eddf
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc
@@ -0,0 +1,20 @@
+SUMMARY = "Resource discovery and announcement over SSDP"
+DESCRIPTION = "GSSDP implements resource discovery and announcement over SSDP (Simpe Service Discovery Protocol)."
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
+DEPENDS = "glib-2.0 libsoup-2.4"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gssdp the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+ cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk', '', d)}"
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk,gtk+"
+
+PACKAGES =+ "gssdp-tools"
+
+FILES_gssdp-tools = "${bindir}/gssdp* ${datadir}/gssdp/*.glade"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb
new file mode 100644
index 000000000..b60d1ea44
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb
@@ -0,0 +1,9 @@
+require gssdp.inc
+
+inherit gtk-doc
+
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk,gtk+3"
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/1.0/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "b30c9a406853c6a3a012d151d6e7ad2c"
+SRC_URI[sha256sum] = "a1e17c09c7e1a185b0bd84fd6ff3794045a3cd729b707c23e422ff66471535dc"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc
new file mode 100644
index 000000000..054450156
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Helpers for AV applications using UPnP"
+DESCRIPTION = "GUPnP-AV is a collection of helpers for building AV (audio/video) applications using GUPnP."
+LICENSE = "LGPLv2"
+DEPENDS = "gupnp"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gupnp-av the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+ cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb
new file mode 100644
index 000000000..cfd0227e4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb
@@ -0,0 +1,7 @@
+require gupnp-av.inc
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/0.12/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "215f626508d76b767f5da7c9b92e87d8"
+SRC_URI[sha256sum] = "8038ef84dddbe7ad91c205bf91dddf684f072df8623f39b6555a6bb72837b85a"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://libgupnp-av/gupnp-av.h;beginline=1;endline=22;md5=2b47b7b5f799d2ebabe62b895e848820"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb
new file mode 100644
index 000000000..3cafd6976
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Helpers for AV applications using DLNA"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libgupnp-dlna/gupnp-dlna-profile.h;beginline=1;endline=22;md5=1b85459f65cb1e73a885ca137aab6274"
+
+DEPENDS = "libxml2 glib-2.0"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.10/${BPN}-${PV}.tar.xz \
+ file://move_vapigen.patch \
+"
+SRC_URI[md5sum] = "2d0dc1e4189d0243ac3838ece1e8fea0"
+SRC_URI[sha256sum] = "123e368227c11d5c17fc1aa76cbdaffa345355eb51d172cd39fc74a5b468ff6a"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+PACKAGECONFIG ?= "gstreamer"
+PACKAGECONFIG[gstreamer] = "--enable-gstreamer-metadata-backend,--disable-gstreamer-metadata-backend,gstreamer1.0 gstreamer1.0-plugins-base"
+
+FILES_${PN} += "${datadir}/gupnp-dlna-2.0/dlna-profiles"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb
new file mode 100644
index 000000000..0aa594dc7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Helpers for interacting with Internet Gateway Devices over UPnP"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://libgupnp-igd/gupnp-simple-igd.c;beginline=1;endline=21;md5=aa292c0d9390463a6e1055dc5fc68e80"
+
+DEPENDS = "glib-2.0 gupnp sqlite3"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.2/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "124371136b5a7b1056a3681780a62772"
+SRC_URI[sha256sum] = "38c4a6d7718d17eac17df95a3a8c337677eda77e58978129ad3182d769c38e44"
+
+inherit autotools pkgconfig gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-python"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb
new file mode 100644
index 000000000..3ddb818df
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Tools for GUPnP"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
+ file://src/network-light/main.c;beginline=1;endline=21;md5=2c39b3a000495dabd4932f231c7efed8"
+DEPENDS = "gupnp gupnp-av gtk+3 intltool-native"
+RRECOMMENDS_${PN} = "adwaita-icon-theme"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.8/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "212d85ebce89b32468b59e1164050d40"
+SRC_URI[sha256sum] = "aa3decb9d532c0e2e505adc592f431fd81c0231ded2981129e87da13712479ed"
+inherit distro_features_check autotools pkgconfig gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc
new file mode 100644
index 000000000..6ce963161
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc
@@ -0,0 +1,25 @@
+SUMMARY = "UPnP framework"
+DESCRIPTION = "GUPnP is an elegant, object-oriented open source framework for creating UPnP devices and control points, written in C using GObject and libsoup. The GUPnP API is intended to be easy to use, efficient and flexible. It provides the same set of features as libupnp, but shields the developer from most of UPnP's internals."
+LICENSE = "LGPLv2+"
+
+DEPENDS = "e2fsprogs gssdp libsoup-2.4 libxml2"
+
+inherit autotools pkgconfig vala gobject-introspection
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gupnp the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+ cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_${PN}-dev += "${bindir}/gupnp-binding-tool"
+
+RDEPENDS_${PN}-dev = "python-textutils python-xml"
+
+SYSROOT_PREPROCESS_FUNCS += "gupnp_sysroot_preprocess"
+
+gupnp_sysroot_preprocess () {
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/gupnp-binding-tool ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb
new file mode 100644
index 000000000..1bdf7d79b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb
@@ -0,0 +1,8 @@
+require gupnp.inc
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/1.0/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "afd96fe73856b38aaf1baf7526e08edd"
+SRC_URI[sha256sum] = "5173fda779111c6b01cd4a5e41b594322be9d04f8c74d3361f0a0c2069c77610"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://libgupnp/gupnp.h;beginline=1;endline=20;md5=d78a69d9b6e63ee2dc72e7b674d97520"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb
new file mode 100644
index 000000000..7a524f2d5
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Portable SDK for UPnP* Devices"
+DESCRIPTION = "The Portable SDK for UPnP Devices is an SDK for development of \
+UPnP device and control point applications. It consists of the core UPnP \
+protocols along with a UPnP-specific eXtensible Markup Language (XML) parser \
+supporting the Document Object Model (DOM) Level 2 API and an optional, \
+integrated mini web server for serving UPnP related documents."
+HOMEPAGE = "http://pupnp.sourceforge.net/"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b3190d5244e08e78e4c8ee78544f4863"
+
+PV = "1.8.2+git${SRCPV}"
+SRCREV = "56d6042abae861e8838a4e6b6b5b575b99e38f34"
+SRC_URI = "git://github.com/mrjimenez/pupnp.git;protocol=https"
+
+S="${WORKDIR}/git"
+
+inherit autotools
+
+EXTRA_OECONF += "--enable-reuseaddr" \ No newline at end of file
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb
new file mode 100644
index 000000000..e94c9ff8d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb
@@ -0,0 +1,68 @@
+SUMMARY = "A UPnP AV media server and renderer"
+DESCRIPTION = "Rygel is a home media solution (UPnP AV MediaServer) that \
+allow you to easily share audio, video and pictures to other devices. \
+Additionally, media player software may use Rygel to become a MediaRenderer \
+that may be controlled remotely by a UPnP or DLNA Controller."
+HOMEPAGE = "http://live.gnome.org/Rygel"
+
+LICENSE = "LGPL1.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libxml2 glib-2.0 gssdp gupnp gupnp-av gupnp-dlna gstreamer1.0 gstreamer1.0-plugins-base ossp-uuid libgee libsoup-2.4 libmediaart-2.0 libunistring sqlite3 intltool-native"
+RDEPENDS_${PN} = "gstreamer1.0-plugins-base-playback shared-mime-info"
+RRECOMMENDS_${PN} = "rygel-plugin-media-export"
+
+GNOME_COMPRESS_TYPE = "xz"
+SRC_URI[archive.md5sum] = "7d8923324b280cd5452803d61176a34a"
+SRC_URI[archive.sha256sum] = "fbb2d46cbe4e750df6610b4c66b2278f06d1f71a257c7903e676ccb394dad418"
+
+inherit gnomebase vala gobject-introspection gettext systemd
+
+EXTRA_OECONF = "--disable-tracker-plugin --with-media-engine=gstreamer"
+
+PACKAGECONFIG ?= "external mpris ruih media-export gst-launch"
+
+PACKAGECONFIG_append = "${@bb.utils.contains("DISTRO_FEATURES", "x11", " gtk+3", "", d)}"
+
+PACKAGECONFIG[external] = "--enable-external-plugin,--disable-external-plugin"
+PACKAGECONFIG[mpris] = "--enable-mpris-plugin,--disable-mpris-plugin"
+PACKAGECONFIG[ruih] = "--enable-ruih-plugin,--disable-ruih-plugin"
+PACKAGECONFIG[media-export] = "--enable-media-export-plugin,--disable-media-export-plugin"
+PACKAGECONFIG[gst-launch] = "--enable-gst-launch-plugin,--disable-gst-launch-plugin"
+PACKAGECONFIG[gtk+3] = ",--without-ui,gtk+3"
+PACKAGECONFIG[lms] = "--enable-lms-plugin,--disable-lms-plugin"
+
+LIBV = "2.6"
+
+do_install_append() {
+ # Remove .la files for loadable modules
+ rm -f ${D}/${libdir}/rygel-${LIBV}/engines/*.la
+ rm -f ${D}/${libdir}/rygel-${LIBV}/plugins/*.la
+ if [ -e ${D}${libdir}/systemd/user/rygel.service ]; then
+ mkdir -p ${D}${systemd_unitdir}/system
+ mv ${D}${libdir}/systemd/user/rygel.service ${D}${systemd_unitdir}/system
+ rmdir ${D}${libdir}/systemd/user ${D}${libdir}/systemd
+ fi
+}
+
+FILES_${PN} += "${libdir}/rygel-${LIBV}/engines ${datadir}/dbus-1 ${datadir}/icons"
+FILES_${PN}-dbg += "${libdir}/rygel-${LIBV}/engines/.debug ${libdir}/rygel-${LIBV}/plugins/.debug"
+
+PACKAGES += "${PN}-meta"
+ALLOW_EMPTY_${PN}-meta = "1"
+
+PACKAGES_DYNAMIC = "${PN}-plugin-*"
+
+SYSTEMD_SERVICE_${PN} = "rygel.service"
+
+python populate_packages_prepend () {
+ rygel_libdir = d.expand('${libdir}/rygel-${LIBV}')
+ postinst = d.getVar('plugin_postinst')
+ pkgs = []
+
+ pkgs += do_split_packages(d, oe.path.join(rygel_libdir, "plugins"), 'librygel-(.*)\.so$', d.expand('${PN}-plugin-%s'), 'Rygel plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+ pkgs += do_split_packages(d, oe.path.join(rygel_libdir, "plugins"), '(.*)\.plugin$', d.expand('${PN}-plugin-%s'), 'Rygel plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+
+ metapkg = d.getVar('PN') + '-meta'
+ d.setVar('RDEPENDS_' + metapkg, ' '.join(pkgs))
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch
new file mode 100644
index 000000000..179d04a55
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch
@@ -0,0 +1,38 @@
+Upstream-Status: Backport
+http://www.streamboard.tv/oscam/changeset/10068
+http://www.streamboard.tv/oscam/changeset/10070
+
+Index: /CMakeLists.txt
+===================================================================
+--- a/CMakeLists.txt (revision 10067)
++++ b/CMakeLists.txt (revision 10068)
+@@ -625,8 +625,8 @@
+ list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
+ add_definitions ("-W -Wall ")
+- set (CMAKE_C_FLAGS "-Wall -O2")
+- set (CMAKE_CXX_FLAGS "-Wall -O2")
+- set (CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
+- set (CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
++ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
++ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
++ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ # some optimisations
+Index: /csctapi/CMakeLists.txt
+===================================================================
+--- a/csctapi/CMakeLists.txt (revision 10069)
++++ b/csctapi/CMakeLists.txt (revision 10070)
+@@ -6,8 +6,8 @@
+ list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
+ add_definitions ("-W -Wall ")
+- set (CMAKE_C_FLAGS "-Wall -O2")
+- set (CMAKE_CXX_FLAGS "-Wall -O2")
+- set (CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
+- set (CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
++ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
++ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
++ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ # Mac extra removes to avoid ranlib warnings in some situations
diff --git a/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb
new file mode 100644
index 000000000..cac517ff5
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb
@@ -0,0 +1,20 @@
+SUMMARY = "OSCam: Open Source Conditional Access Module"
+HOMEPAGE = "http://www.streamboard.tv/oscam/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "libusb1 openssl pcsc-lite"
+
+SRC_URI = "svn://www.streamboard.tv/svn/oscam;module=trunk;protocol=http \
+ file://respect-cflags.patch \
+"
+SRCREV = "9164"
+PV = "1.10+${SRCPV}"
+
+S = "${WORKDIR}/trunk"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-DDEFAULT_CS_CONFDIR=${sysconfdir} -DCMAKE_BUILD_TYPE=Debug"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb
new file mode 100644
index 000000000..fdb769943
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Kodi Media Center"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://JsonSchemaBuilder.cpp;beginline=2;endline=18;md5=1f67721215c03f66545390f6e45b99c7"
+
+SRCREV = "661dd08d221f5b2bf509a696a6aca5ee7d45bb27"
+
+PV = "17.1+gitr${SRCPV}"
+SRC_URI = "git://github.com/xbmc/xbmc.git;branch=Krypton"
+
+inherit autotools-brokensep gettext native
+
+S = "${WORKDIR}/git/tools/depends/native/JsonSchemaBuilder/src"
+
+do_compile_prepend() {
+ for i in $(find . -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' $i
+ done
+
+ for i in $(find . -name "*.mak*" -o -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' -e 's:-rpath \$(libdir):-rpath ${libdir}:g' $i
+ done
+}
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch
new file mode 100644
index 000000000..20b637788
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch
@@ -0,0 +1,496 @@
+From 7ae4fcf290ffb0b76374efafeaee575456ac9023 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Nov 2016 23:08:27 -0800
+Subject: [PATCH 01/10] Fix file_Emu on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/cores/DllLoader/exports/emu_msvcrt.cpp | 28 ++--
+ xbmc/cores/DllLoader/exports/emu_msvcrt.h | 2 +-
+ .../DllLoader/exports/util/EmuFileWrapper.cpp | 172 +++++++++------------
+ xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h | 27 ++--
+ xbmc/cores/DllLoader/exports/wrapper.c | 4 +-
+ 5 files changed, 99 insertions(+), 134 deletions(-)
+
+diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
+index ab14942..a39014a 100644
+--- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
++++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
+@@ -51,6 +51,7 @@
+ #include <fcntl.h>
+ #include <time.h>
+ #include <signal.h>
++#include <paths.h>
+ #ifdef TARGET_POSIX
+ #include "PlatformDefs.h" // for __stat64
+ #include "XFileUtils.h"
+@@ -476,13 +477,10 @@ extern "C"
+ EmuFileObject* o = g_emuFileWrapper.GetFileObjectByDescriptor(fd);
+ if (o)
+ {
+- if(!o->used)
+- return NULL;
+-
+ int nmode = convert_fmode(mode);
+ if( (o->mode & nmode) != nmode)
+ CLog::Log(LOGWARNING, "dll_fdopen - mode 0x%x differs from fd mode 0x%x", nmode, o->mode);
+- return &o->file_emu;
++ return g_emuFileWrapper.GetStreamByFileObject(o);
+ }
+ else if (!IS_STD_DESCRIPTOR(fd))
+ {
+@@ -545,7 +543,7 @@ extern "C"
+ return -1;
+ }
+ object->mode = iMode;
+- return g_emuFileWrapper.GetDescriptorByStream(&object->file_emu);
++ return g_emuFileWrapper.GetDescriptorByFileObject(object);
+ }
+ delete pFile;
+ return -1;
+@@ -1214,8 +1212,8 @@ extern "C"
+ {
+ FILE* file = NULL;
+ #if defined(TARGET_LINUX) && !defined(TARGET_ANDROID)
+- if (strcmp(filename, MOUNTED) == 0
+- || strcmp(filename, MNTTAB) == 0)
++ if (strcmp(filename, _PATH_MOUNTED) == 0
++ || strcmp(filename, _PATH_MNTTAB) == 0)
+ {
+ CLog::Log(LOGINFO, "%s - something opened the mount file, let's hope it knows what it's doing", __FUNCTION__);
+ return fopen(filename, mode);
+@@ -1622,7 +1620,7 @@ extern "C"
+ int ret;
+
+ ret = dll_fgetpos64(stream, &tmpPos);
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+ *pos = (fpos_t)tmpPos;
+ #else
+ pos->__pos = (off_t)tmpPos.__pos;
+@@ -1635,8 +1633,9 @@ extern "C"
+ CFile* pFile = g_emuFileWrapper.GetFileXbmcByStream(stream);
+ if (pFile != NULL)
+ {
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+- *pos = pFile->GetPosition();
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++ uint64_t *ppos = (uint64_t *) pos;
++ *ppos = pFile->GetPosition();
+ #else
+ pos->__pos = pFile->GetPosition();
+ #endif
+@@ -1657,8 +1656,9 @@ extern "C"
+ int fd = g_emuFileWrapper.GetDescriptorByStream(stream);
+ if (fd >= 0)
+ {
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+- if (dll_lseeki64(fd, *pos, SEEK_SET) >= 0)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++ const uint64_t *ppos = (const uint64_t *) pos;
++ if (dll_lseeki64(fd, *ppos, SEEK_SET) >= 0)
+ #else
+ if (dll_lseeki64(fd, (__off64_t)pos->__pos, SEEK_SET) >= 0)
+ #endif
+@@ -1674,7 +1674,7 @@ extern "C"
+ {
+ // it might be something else than a file, or the file is not emulated
+ // let the operating system handle it
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+ return fsetpos(stream, pos);
+ #else
+ return fsetpos64(stream, pos);
+@@ -1690,7 +1690,7 @@ extern "C"
+ if (fd >= 0)
+ {
+ fpos64_t tmpPos;
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+ tmpPos= *pos;
+ #else
+ tmpPos.__pos = (off64_t)(pos->__pos);
+diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.h b/xbmc/cores/DllLoader/exports/emu_msvcrt.h
+index 3294d9a..c7c483f 100644
+--- a/xbmc/cores/DllLoader/exports/emu_msvcrt.h
++++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.h
+@@ -24,7 +24,7 @@
+ #define _onexit_t void*
+ #endif
+
+-#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) || !defined(__GLIBC__)
+ typedef off_t __off_t;
+ typedef int64_t off64_t;
+ typedef off64_t __off64_t;
+diff --git a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp
+index 8927d41..e9a2ab0 100644
+--- a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp
++++ b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp
+@@ -52,16 +52,7 @@ constexpr bool isValidFilePtr(FILE* f)
+ }
+ CEmuFileWrapper::CEmuFileWrapper()
+ {
+- // since we always use dlls we might just initialize it directly
+- for (int i = 0; i < MAX_EMULATED_FILES; i++)
+- {
+- memset(&m_files[i], 0, sizeof(EmuFileObject));
+- m_files[i].used = false;
+-#if defined(TARGET_WINDOWS) && (_MSC_VER >= 1900)
+- m_files[i].file_emu._Placeholder = new kodi_iobuf();
+-#endif
+- FileDescriptor(m_files[i].file_emu)->_file = -1;
+- }
++ memset(m_files, 0, sizeof(m_files));
+ }
+
+ CEmuFileWrapper::~CEmuFileWrapper()
+@@ -73,29 +64,7 @@ void CEmuFileWrapper::CleanUp()
+ {
+ CSingleLock lock(m_criticalSection);
+ for (int i = 0; i < MAX_EMULATED_FILES; i++)
+- {
+- if (m_files[i].used)
+- {
+- m_files[i].file_xbmc->Close();
+- delete m_files[i].file_xbmc;
+-
+- if (m_files[i].file_lock)
+- {
+- delete m_files[i].file_lock;
+- m_files[i].file_lock = nullptr;
+- }
+-#if !defined(TARGET_WINDOWS)
+- //Don't memset on Windows as it overwrites our pointer
+- memset(&m_files[i], 0, sizeof(EmuFileObject));
+-#endif
+- m_files[i].used = false;
+- FileDescriptor(m_files[i].file_emu)->_file = -1;
+- }
+-#if defined(TARGET_WINDOWS) && (_MSC_VER >= 1900)
+- delete static_cast<kodi_iobuf*>(m_files[i].file_emu._Placeholder);
+- m_files[i].file_emu._Placeholder = nullptr;
+-#endif
+- }
++ UnRegisterFileObject(&m_files[i], true);
+ }
+
+ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile)
+@@ -106,13 +75,11 @@ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile)
+
+ for (int i = 0; i < MAX_EMULATED_FILES; i++)
+ {
+- if (!m_files[i].used)
++ if (!m_files[i].file_xbmc)
+ {
+ // found a free location
+ object = &m_files[i];
+- object->used = true;
+ object->file_xbmc = pFile;
+- FileDescriptor(object->file_emu)->_file = (i + FILE_WRAPPER_OFFSET);
+ object->file_lock = new CCriticalSection();
+ break;
+ }
+@@ -121,82 +88,74 @@ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile)
+ return object;
+ }
+
+-void CEmuFileWrapper::UnRegisterFileObjectByDescriptor(int fd)
++void CEmuFileWrapper::UnRegisterFileObject(EmuFileObject *object, bool free_file)
++
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (! (i >= 0 && i < MAX_EMULATED_FILES))
+- return;
++ if (object && object->file_xbmc)
++ {
++ if (object->file_xbmc && free_file)
++ {
++ object->file_xbmc->Close();
++ delete object->file_xbmc;
++ }
++ if (object->file_lock)
++ {
++ delete object->file_lock;
++ }
+
+- if (!m_files[i].used)
+- return;
++ memset(object, 0, sizeof(*object));
++ }
++}
+
++void CEmuFileWrapper::UnRegisterFileObjectByDescriptor(int fd)
++{
+ CSingleLock lock(m_criticalSection);
+-
+- // we assume the emulated function alreay deleted the CFile object
+- if (m_files[i].file_lock)
+- {
+- delete m_files[i].file_lock;
+- m_files[i].file_lock = nullptr;
+- }
+-#if !defined(TARGET_WINDOWS)
+- //Don't memset on Windows as it overwrites our pointer
+- memset(&m_files[i], 0, sizeof(EmuFileObject));
+-#endif
+- m_files[i].used = false;
+- FileDescriptor(m_files[i].file_emu)->_file = -1;
++ UnRegisterFileObject(GetFileObjectByDescriptor(fd), false);
+ }
+
+ void CEmuFileWrapper::UnRegisterFileObjectByStream(FILE* stream)
+ {
+ if (isValidFilePtr(stream))
+ {
+- return UnRegisterFileObjectByDescriptor(FileDescriptor(*stream)->_file);
++ CSingleLock lock(m_criticalSection);
++ UnRegisterFileObject(GetFileObjectByStream(stream), false);
+ }
+ }
+
+ void CEmuFileWrapper::LockFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
++ EmuFileObject* object = GetFileObjectByDescriptor(fd);
++ if (object && object->file_xbmc)
+ {
+- if (m_files[i].used)
+- {
+- m_files[i].file_lock->lock();
+- }
++ object->file_lock->lock();
+ }
+ }
+
+ bool CEmuFileWrapper::TryLockFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
++ EmuFileObject* object = GetFileObjectByDescriptor(fd);
++ if (object && object->file_xbmc)
+ {
+- if (m_files[i].used)
+- {
+- return m_files[i].file_lock->try_lock();
+- }
++ return object->file_lock->try_lock();
+ }
+ return false;
+ }
+
+ void CEmuFileWrapper::UnlockFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
++ EmuFileObject* object = GetFileObjectByDescriptor(fd);
++ if (object && object->file_xbmc)
+ {
+- if (m_files[i].used)
+- {
+- m_files[i].file_lock->unlock();
+- }
++ object->file_lock->unlock();
+ }
+ }
+
+ EmuFileObject* CEmuFileWrapper::GetFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
++ int i = fd - 0x7000000;
+ if (i >= 0 && i < MAX_EMULATED_FILES)
+ {
+- if (m_files[i].used)
++ if (m_files[i].file_xbmc)
+ {
+ return &m_files[i];
+ }
+@@ -204,20 +163,39 @@ EmuFileObject* CEmuFileWrapper::GetFileObjectByDescriptor(int fd)
+ return nullptr;
+ }
+
++int CEmuFileWrapper::GetDescriptorByFileObject(EmuFileObject *object)
++{
++ int i = object - m_files;
++ if (i >= 0 && i < MAX_EMULATED_FILES)
++ {
++ return 0x7000000 + i;
++ }
++
++ return -1;
++}
++
+ EmuFileObject* CEmuFileWrapper::GetFileObjectByStream(FILE* stream)
+ {
+- if (isValidFilePtr(stream))
++ EmuFileObject *object = (EmuFileObject*) stream;
++ if (object >= &m_files[0] || object < &m_files[MAX_EMULATED_FILES])
+ {
+- return GetFileObjectByDescriptor(FileDescriptor(*stream)->_file);
++ if (object->file_xbmc)
++ {
++ return object;
++ }
+ }
++ return NULL;
++}
+
+- return nullptr;
++FILE* CEmuFileWrapper::GetStreamByFileObject(EmuFileObject *object)
++{
++ return (FILE*) object;
+ }
+
+ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByDescriptor(int fd)
+ {
+ auto object = GetFileObjectByDescriptor(fd);
+- if (object != nullptr && object->used)
++ if (object != nullptr)
+ {
+ return object->file_xbmc;
+ }
+@@ -228,8 +206,9 @@ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByStream(FILE* stream)
+ {
+ if (isValidFilePtr(stream))
+ {
+- auto object = GetFileObjectByDescriptor(FileDescriptor(*stream)->_file);
+- if (object != nullptr && object->used)
++ EmuFileObject* object = GetFileObjectByStream(stream);
++ if (object != NULL)
++
+ {
+ return object->file_xbmc;
+ }
+@@ -239,32 +218,21 @@ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByStream(FILE* stream)
+
+ int CEmuFileWrapper::GetDescriptorByStream(FILE* stream)
+ {
+- if (isValidFilePtr(stream))
+- {
+- int i = FileDescriptor(*stream)->_file - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
+- {
+- return i + FILE_WRAPPER_OFFSET;
+- }
+- }
+- return -1;
++ return GetDescriptorByFileObject(GetFileObjectByStream(stream));
+ }
+
+ FILE* CEmuFileWrapper::GetStreamByDescriptor(int fd)
+ {
+- auto object = GetFileObjectByDescriptor(fd);
+- if (object != nullptr && object->used)
+- {
+- return &object->file_emu;
+- }
+- return nullptr;
++ return GetStreamByFileObject(GetFileObjectByDescriptor(fd));
++}
++
++bool CEmuFileWrapper::DescriptorIsEmulatedFile(int fd)
++{
++ return GetFileObjectByDescriptor(fd) != NULL;
+ }
+
+ bool CEmuFileWrapper::StreamIsEmulatedFile(FILE* stream)
+ {
+- if (isValidFilePtr(stream))
+- {
+- return DescriptorIsEmulatedFile(FileDescriptor(*stream)->_file);
+- }
+- return false;
++ return GetFileObjectByStream(stream) != NULL;
+ }
++
+diff --git a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
+index 786fa85..311a5cf 100644
+--- a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
++++ b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
+@@ -25,14 +25,14 @@
+ #include "system.h"
+ #include "threads/CriticalSection.h"
+
+-#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
+-#define _file _fileno
+-#elif defined(__UCLIBC__)
+-#define _file __filedes
+-#endif
++//#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
++//#define _file _fileno
++//#elif defined(__UCLIBC__)
++//#define _file __filedes
++//#endif
+
+ #define MAX_EMULATED_FILES 50
+-#define FILE_WRAPPER_OFFSET 0x00000200
++//#define FILE_WRAPPER_OFFSET 0x00000200
+
+ namespace XFILE
+ {
+@@ -47,12 +47,9 @@ struct kodi_iobuf {
+
+ typedef struct stEmuFileObject
+ {
+- FILE file_emu;
+ XFILE::CFile* file_xbmc;
+ CCriticalSection *file_lock;
+ int mode;
+- //Stick this last to avoid 3-7 bytes of padding
+- bool used;
+ } EmuFileObject;
+
+ class CEmuFileWrapper
+@@ -67,22 +64,22 @@ public:
+ void CleanUp();
+
+ EmuFileObject* RegisterFileObject(XFILE::CFile* pFile);
++ void UnRegisterFileObject(EmuFileObject*, bool free_file);
+ void UnRegisterFileObjectByDescriptor(int fd);
+ void UnRegisterFileObjectByStream(FILE* stream);
+ void LockFileObjectByDescriptor(int fd);
+ bool TryLockFileObjectByDescriptor(int fd);
+ void UnlockFileObjectByDescriptor(int fd);
+ EmuFileObject* GetFileObjectByDescriptor(int fd);
++ int GetDescriptorByFileObject(EmuFileObject*);
+ EmuFileObject* GetFileObjectByStream(FILE* stream);
++ FILE* GetStreamByFileObject(EmuFileObject*);
+ XFILE::CFile* GetFileXbmcByDescriptor(int fd);
+ XFILE::CFile* GetFileXbmcByStream(FILE* stream);
+- static int GetDescriptorByStream(FILE* stream);
++ int GetDescriptorByStream(FILE* stream);
+ FILE* GetStreamByDescriptor(int fd);
+- static constexpr bool DescriptorIsEmulatedFile(int fd)
+- {
+- return fd >= FILE_WRAPPER_OFFSET && fd < FILE_WRAPPER_OFFSET + MAX_EMULATED_FILES;
+- }
+- static bool StreamIsEmulatedFile(FILE* stream);
++ bool DescriptorIsEmulatedFile(int fd);
++ bool StreamIsEmulatedFile(FILE* stream);
+ private:
+ EmuFileObject m_files[MAX_EMULATED_FILES];
+ CCriticalSection m_criticalSection;
+diff --git a/xbmc/cores/DllLoader/exports/wrapper.c b/xbmc/cores/DllLoader/exports/wrapper.c
+index e363662..07825f3 100644
+--- a/xbmc/cores/DllLoader/exports/wrapper.c
++++ b/xbmc/cores/DllLoader/exports/wrapper.c
+@@ -39,13 +39,13 @@
+ #endif
+ #include <dlfcn.h>
+
+-#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) || !defined(__GLIBC__)
+ typedef off_t __off_t;
+ typedef int64_t off64_t;
+ typedef off64_t __off64_t;
+ typedef fpos_t fpos64_t;
+ #define stat64 stat
+-#if defined(TARGET_DARWIN) || defined(TARGET_ANDROID)
++#if defined(TARGET_DARWIN) || defined(TARGET_ANDROID) || !defined(__GLIBC__)
+ #define _G_va_list va_list
+ #endif
+ #endif
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch
new file mode 100644
index 000000000..12a6c06e8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch
@@ -0,0 +1,32 @@
+From 21524598110e7a55113205dda4bc1a6d5987111c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 9 May 2017 06:41:33 +0000
+Subject: [PATCH] change order of detecting libegl and libgles2
+
+This actually helps building it on rpi/userland
+where libEGL depends on few functions from libGLESv2
+see
+https://www.raspberrypi.org/forums/viewtopic.php?t=7090
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index b9e4240..1ca0297 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -951,8 +951,8 @@ if test "$use_gles" = "yes"; then
+ AC_MSG_RESULT(== WARNING: OpenGLES support is assumed.)
+ LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm -lmmal -lmmal_core -lmmal_util -lvcsm"
+ else
+- AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
+ AC_CHECK_LIB([GLESv2],[main],, AC_MSG_ERROR($missing_library))
++ AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
+ fi
+ fi
+ else
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch
new file mode 100644
index 000000000..463a5c4f8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch
@@ -0,0 +1,46 @@
+From ad1977a358319093b305df6d84be6db676ef1e4a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Nov 2016 22:35:16 -0800
+Subject: [PATCH 02/10] Remove FILEWRAP
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/utils/posix/PosixInterfaceForCLog.cpp | 6 +-----
+ xbmc/utils/posix/PosixInterfaceForCLog.h | 4 +---
+ 2 files changed, 2 insertions(+), 8 deletions(-)
+
+Index: git/xbmc/utils/posix/PosixInterfaceForCLog.cpp
+===================================================================
+--- git.orig/xbmc/utils/posix/PosixInterfaceForCLog.cpp
++++ git/xbmc/utils/posix/PosixInterfaceForCLog.cpp
+@@ -29,10 +29,6 @@
+ #include "platform/android/activity/XBMCApp.h"
+ #endif // TARGET_ANDROID
+
+-struct FILEWRAP : public FILE
+-{};
+-
+-
+ CPosixInterfaceForCLog::CPosixInterfaceForCLog() :
+ m_file(NULL)
+ { }
+@@ -52,7 +48,7 @@ bool CPosixInterfaceForCLog::OpenLogFile
+ (void)remove(backupOldLogToFilename.c_str()); // if it's failed, try to continue
+ (void)rename(logFilename.c_str(), backupOldLogToFilename.c_str()); // if it's failed, try to continue
+
+- m_file = (FILEWRAP*)fopen(logFilename.c_str(), "wb");
++ m_file = fopen(logFilename.c_str(), "wb");
+ if (!m_file)
+ return false; // error, can't open log file
+
+Index: git/xbmc/utils/posix/PosixInterfaceForCLog.h
+===================================================================
+--- git.orig/xbmc/utils/posix/PosixInterfaceForCLog.h
++++ git/xbmc/utils/posix/PosixInterfaceForCLog.h
+@@ -34,5 +34,5 @@ public:
+ void PrintDebugString(const std::string& debugString);
+ static void GetCurrentLocalTime(int& hour, int& minute, int& second, double& millisecond);
+ private:
+- FILEWRAP* m_file;
++ FILE* m_file;
+ };
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch
new file mode 100644
index 000000000..49217a4f7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch
@@ -0,0 +1,25 @@
+From a91a3ba229dc5903935f7dd98dd03bbb4fe5ac1f Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sat, 6 Feb 2016 15:43:01 +0100
+Subject: [PATCH 03/10] configure: don't try to run stuff to find tinyxml
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 34fe643..3132dc1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1043,7 +1043,7 @@ fi
+ AC_LANG_PUSH([C++])
+ PKG_CHECK_MODULES([TINYXML], [tinyxml >= 2.6.2],
+ [INCLUDES="$INCLUDES $TINYXML_CFLAGS"; LIBS="$LIBS $TINYXML_LIBS"],
+- [AC_RUN_IFELSE(
++ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <stdlib.h>
+ #include <tinyxml.h>
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch
new file mode 100644
index 000000000..dc3743935
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch
@@ -0,0 +1,163 @@
+From 49046c1685465a5486fe9e1c04b99c585aab6862 Mon Sep 17 00:00:00 2001
+From: Stefan Saraev <stefan@saraev.ca>
+Date: Wed, 2 Nov 2016 11:28:34 -0700
+Subject: [PATCH 04/10] handle SIGTERM
+
+0. CApplication::Stop cant be trusted. (deadlocks crashes and boo)
+
+so, when shutdown/reboot is requested:
+
+1. save an exit code (for CEC...)
+2. call CPowerManager::{Reboot,PowerDown}
+3. ... then systemd sends TERM and waits xx seconds before sending KILL
+4. CApplication::Stop has xx seconds to save guisettings.xml and boo
+5. CEC thread has xx seconds to switch off after it received OnQuit
+6. addons / pvrmanager / cec / everything else.. are free to deadlock / crash now, we dont care
+7. KILL
+
+Signed-off-by: Stefan Saraev <stefan@saraev.ca>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/Application.cpp | 17 ++++++++++++-----
+ xbmc/Application.h | 1 +
+ xbmc/XBApplicationEx.cpp | 1 +
+ xbmc/XBApplicationEx.h | 1 +
+ xbmc/platform/posix/main.cpp | 15 +++++++++++++++
+ 5 files changed, 30 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
+index 100a2f2..fda892d 100644
+--- a/xbmc/Application.cpp
++++ b/xbmc/Application.cpp
+@@ -2426,12 +2426,12 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg)
+ switch (pMsg->dwMessage)
+ {
+ case TMSG_POWERDOWN:
+- Stop(EXITCODE_POWERDOWN);
++ SetExitCode(EXITCODE_POWERDOWN);
+ g_powerManager.Powerdown();
+ break;
+
+ case TMSG_QUIT:
+- Stop(EXITCODE_QUIT);
++ SetExitCode(EXITCODE_QUIT);
+ break;
+
+ case TMSG_SHUTDOWN:
+@@ -2452,12 +2452,13 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg)
+
+ case TMSG_RESTART:
+ case TMSG_RESET:
+- Stop(EXITCODE_REBOOT);
++ SetExitCode(EXITCODE_REBOOT);
+ g_powerManager.Reboot();
+ break;
+
+ case TMSG_RESTARTAPP:
+ #if defined(TARGET_WINDOWS) || defined(TARGET_LINUX)
++ SetExitCode(EXITCODE_RESTARTAPP);
+ Stop(EXITCODE_RESTARTAPP);
+ #endif
+ break;
+@@ -2881,6 +2882,13 @@ bool CApplication::Cleanup()
+ }
+ }
+
++void CApplication::SetExitCode(int exitCode)
++{
++ // save it for CEC
++ m_ExitCode = exitCode;
++ m_ExitCodeSet = true;
++}
++
+ void CApplication::Stop(int exitCode)
+ {
+ try
+@@ -2888,7 +2896,7 @@ void CApplication::Stop(int exitCode)
+ m_frameMoveGuard.unlock();
+
+ CVariant vExitCode(CVariant::VariantTypeObject);
+- vExitCode["exitcode"] = exitCode;
++ vExitCode["exitcode"] = m_ExitCode;
+ CAnnouncementManager::GetInstance().Announce(System, "xbmc", "OnQuit", vExitCode);
+
+ // Abort any active screensaver
+@@ -2922,7 +2930,6 @@ void CApplication::Stop(int exitCode)
+
+ m_bStop = true;
+ m_AppFocused = false;
+- m_ExitCode = exitCode;
+ CLog::Log(LOGNOTICE, "stop all");
+
+ // cancel any jobs from the jobmanager
+diff --git a/xbmc/Application.h b/xbmc/Application.h
+index a9d9bf5..e536deb 100644
+--- a/xbmc/Application.h
++++ b/xbmc/Application.h
+@@ -159,6 +159,7 @@ public:
+ void StopPVRManager();
+ void ReinitPVRManager();
+ bool IsCurrentThread() const;
++ void SetExitCode(int exitCode);
+ void Stop(int exitCode);
+ void RestartApp();
+ void UnloadSkin(bool forReload = false);
+diff --git a/xbmc/XBApplicationEx.cpp b/xbmc/XBApplicationEx.cpp
+index 035aed2..34102f5 100644
+--- a/xbmc/XBApplicationEx.cpp
++++ b/xbmc/XBApplicationEx.cpp
+@@ -46,6 +46,7 @@ CXBApplicationEx::CXBApplicationEx()
+ m_bStop = false;
+ m_AppFocused = true;
+ m_ExitCode = EXITCODE_QUIT;
++ m_ExitCodeSet = false;
+ m_renderGUI = false;
+ }
+
+diff --git a/xbmc/XBApplicationEx.h b/xbmc/XBApplicationEx.h
+index 9bc14fa..f696b89 100644
+--- a/xbmc/XBApplicationEx.h
++++ b/xbmc/XBApplicationEx.h
+@@ -42,6 +42,7 @@ public:
+ // Variables for timing
+ bool m_bStop;
+ int m_ExitCode;
++ bool m_ExitCodeSet;
+ bool m_AppFocused;
+ bool m_renderGUI;
+
+diff --git a/xbmc/platform/posix/main.cpp b/xbmc/platform/posix/main.cpp
+index a8b64e5..3d80032 100644
+--- a/xbmc/platform/posix/main.cpp
++++ b/xbmc/platform/posix/main.cpp
+@@ -41,12 +41,27 @@
+ #include "input/linux/LIRC.h"
+ #endif
+ #include "platform/XbmcContext.h"
++#include "Application.h"
++
++void xbmc_term_handler(int signum)
++{
++ CLog::Log(LOGINFO, "Received SIGTERM...");
++ if (!g_application.m_ExitCodeSet)
++ g_application.SetExitCode(EXITCODE_RESTARTAPP);
++ g_application.Stop(EXITCODE_RESTARTAPP);
++}
+
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ int main(int argc, char* argv[])
+ {
++ // SIGTERM handler
++ struct sigaction action;
++ memset(&action, 0, sizeof(struct sigaction));
++ action.sa_handler = xbmc_term_handler;
++ sigaction(SIGTERM, &action, NULL);
++
+ // set up some xbmc specific relationships
+ XBMC::Context context;
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch
new file mode 100644
index 000000000..ee10c40ac
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch
@@ -0,0 +1,26 @@
+From 4d1368d20f04216aec9551d9845b305f96a21015 Mon Sep 17 00:00:00 2001
+From: Stephan Raue <stephan@openelec.tv>
+Date: Mon, 1 Sep 2014 03:16:37 +0200
+Subject: [PATCH 05/10] add support to read frequency output if using intel's
+ pstate driver
+
+---
+ xbmc/utils/CPUInfo.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/xbmc/utils/CPUInfo.cpp b/xbmc/utils/CPUInfo.cpp
+index 5e2ebbd..fd04d5a 100644
+--- a/xbmc/utils/CPUInfo.cpp
++++ b/xbmc/utils/CPUInfo.cpp
+@@ -274,6 +274,8 @@ CCPUInfo::CCPUInfo(void)
+ m_fProcTemperature = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); // On Raspberry PIs
+
+ m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
++ if (m_fCPUFreq == NULL)
++ m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq", "r");
+ if (!m_fCPUFreq)
+ {
+ m_cpuInfoForFreq = true;
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch
new file mode 100644
index 000000000..08dfac324
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch
@@ -0,0 +1,35 @@
+From 3d3ec391038c6ee73897a7fab753b11b589de1ed Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 2 Nov 2016 12:39:20 -0700
+Subject: [PATCH 06/10] Disable DVD support
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.in | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 0d70e9b..050c7ca 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -10,8 +10,7 @@ EC_DIRS= \
+ tools/EventClients
+
+ DVDPCODECS_DIRS= \
+- lib \
+- lib/libdvd
++ lib
+
+ VideoPlayer_ARCHIVES=xbmc/cores/VideoPlayer/VideoPlayer.a \
+ xbmc/cores/VideoPlayer/DVDCodecs/DVDCodecs.a \
+@@ -347,7 +346,6 @@ libaddon: exports
+ $(MAKE) -C lib/addons/library.xbmc.pvr
+ $(MAKE) -C lib/addons/library.kodi.inputstream
+ dvdpcodecs: dllloader
+- $(MAKE) -C lib/libdvd
+
+ dvdpextcodecs:
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch
new file mode 100644
index 000000000..8fd7ece05
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch
@@ -0,0 +1,30 @@
+From d989cbdb7686c3b95dc749967f89b93e47f955a6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 3 Nov 2016 13:10:00 -0700
+Subject: [PATCH 07/10] Always compile libcpluff as PIC
+
+Fixes errors e.g.
+
+ld: lib/cpluff/libcpluff/.libs/libcpluff.a(pcontrol.o): relocation R_X86_64_PC32 against symbol `cp_stop_plugins' can not be used when making a shared object; recompile with -fPIC
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3132dc1..ab4eea3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2385,7 +2385,7 @@ XB_CONFIG_MODULE([lib/cpluff], [
+ --prefix="${prefix}" --includedir="${includedir}" --libdir="${libdir}" --datadir="${datadir}" \
+ --host=$host_alias \
+ --build=$build_alias \
+- --target=$target_alias CFLAGS="$CFLAGS" CC="$CC" CXX="$CXX" LDFLAGS="$LDFLAGS" LIBS=""
++ --target=$target_alias --with-pic=yes CFLAGS="$CFLAGS" CC="$CC" CXX="$CXX" LDFLAGS="$LDFLAGS" LIBS=""
+ #LDFLAGS="$LDFLAGS -Wl,-read_only_relocs,suppress"
+ ], [0])
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch
new file mode 100644
index 000000000..9390144ce
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch
@@ -0,0 +1,43 @@
+From 51cd8d5f084013360b29fe497193288ebde2f4f9 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Wed, 29 Jul 2015 23:13:33 +0200
+Subject: [PATCH 08/10] kodi-config.cmake: use CMAKE_FIND_ROOT_PATH to fix
+ cross-compilation
+
+When cross-compiling, the location at build time of the libraries is
+not the same as the one at run-time. The CMAKE_FIND_ROOT_PATH variable
+is here to handle this difference, so use it in kodi-config.cmake.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ project/cmake/KodiConfig.cmake.in | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/project/cmake/KodiConfig.cmake.in b/project/cmake/KodiConfig.cmake.in
+index c02a680..9d6a566 100644
+--- a/project/cmake/KodiConfig.cmake.in
++++ b/project/cmake/KodiConfig.cmake.in
+@@ -7,10 +7,10 @@ if(NOT @APP_NAME_UC@_PREFIX)
+ set(@APP_NAME_UC@_PREFIX @APP_PREFIX@)
+ endif()
+ if(NOT @APP_NAME_UC@_INCLUDE_DIR)
+- set(@APP_NAME_UC@_INCLUDE_DIR @APP_INCLUDE_DIR@)
++ set(@APP_NAME_UC@_INCLUDE_DIR ${CMAKE_FIND_ROOT_PATH}/@APP_INCLUDE_DIR@)
+ endif()
+ if(NOT @APP_NAME_UC@_LIB_DIR)
+- set(@APP_NAME_UC@_LIB_DIR @APP_LIB_DIR@)
++ set(@APP_NAME_UC@_LIB_DIR ${CMAKE_FIND_ROOT_PATH}/@APP_LIB_DIR@)
+ endif()
+ if(NOT @APP_NAME_UC@_DATA_DIR)
+ set(@APP_NAME_UC@_DATA_DIR @APP_DATA_DIR@)
+@@ -19,6 +19,7 @@ if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} @CXX11_SWITCH@")
+ endif()
+ list(APPEND CMAKE_MODULE_PATH @APP_LIB_DIR@ @APP_DATA_DIR@/cmake)
++list(APPEND CMAKE_MODULE_PATH ${CMAKE_FIND_ROOT_PATH}/@APP_LIB_DIR@ ${CMAKE_FIND_ROOT_PATH}/@APP_DATA_DIR@/cmake)
+
+ string(REPLACE ";" " " ARCH_DEFINES "@ARCH_DEFINES@")
+ add_definitions(${ARCH_DEFINES} -DBUILD_KODI_ADDON)
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch
new file mode 100644
index 000000000..f3e739aed
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch
@@ -0,0 +1,180 @@
+From 8b2bad58585af0f829fb06e19c9bd2b6caf30808 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Nov 2016 11:54:41 -0800
+Subject: [PATCH 09/10] build: Add support for musl triplets
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 12 ++++++------
+ m4/xbmc_arch.m4 | 22 +++++++++++-----------
+ tools/depends/configure.ac | 12 ++++++------
+ 3 files changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index ab4eea3..925466a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -526,7 +526,7 @@ case $host in
+ use_x11=no
+ build_shared_lib=yes
+ ;;
+- i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
++ i*86*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="i486-linux"
+@@ -549,7 +549,7 @@ case $host in
+ fi
+ fi
+ ;;
+- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="x86_64-linux"
+@@ -601,17 +601,17 @@ case $host in
+ DEPENDS_ROOT_FOR_XCODE=$(echo ${prefix%/*})
+ AC_SUBST([DEPENDS_ROOT_FOR_XCODE])
+ ;;
+- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
++ powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*|powerpc-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="powerpc-linux"
+ ;;
+- powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*)
++ powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*|powerpc64*-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="powerpc64-linux"
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="arm"
+@@ -621,7 +621,7 @@ case $host in
+ use_gl=no
+ USE_STATIC_FFMPEG=1
+ ;;
+- aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*)
++ aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*|aarch64*-*-linux-musl*)
+ target_platform=target_linux
+ ARCH="aarch64"
+ use_arch="aarch64"
+diff --git a/m4/xbmc_arch.m4 b/m4/xbmc_arch.m4
+index d28f263..ff5dc20 100644
+--- a/m4/xbmc_arch.m4
++++ b/m4/xbmc_arch.m4
+@@ -2,10 +2,10 @@ AC_DEFUN([XBMC_SETUP_ARCH_DEFINES],[
+
+ # build detection and setup - this is the native arch
+ case $build in
+- i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
++ i*86*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ i386-*-freebsd*)
+@@ -17,13 +17,13 @@ case $build in
+ *86*-apple-darwin*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
+ ;;
+- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
++ powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*|powerpc-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC")
+ ;;
+- powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*)
++ powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*|powerpc64-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC64")
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ *)
+@@ -33,10 +33,10 @@ esac
+
+ # host detection and setup - this is the target arch
+ case $host in
+- i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
++ i*86*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ i386-*-freebsd*)
+@@ -54,16 +54,16 @@ case $host in
+ powerpc-apple-darwin*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
+ ;;
+- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
++ powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*|powerpc-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC")
+ ;;
+- powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*)
++ powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*|powerpc64*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC64")
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*|aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*|aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*|aarch64*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+- mips*-*-linux-gnu*|mips*-*-linux-uclibc*)
++ mips*-*-linux-gnu*|mips*-*-linux-uclibc*|mips*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ *-*linux-android*)
+diff --git a/tools/depends/configure.ac b/tools/depends/configure.ac
+index f438e5d..409f4d7 100644
+--- a/tools/depends/configure.ac
++++ b/tools/depends/configure.ac
+@@ -120,13 +120,13 @@ platform_cc=gcc
+ platform_cxx=g++
+
+ case $build in
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ build_os="linux"
+ ;;
+- *i686*-linux-gnu*|i*86*-*-linux-uclibc*)
++ *i686*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ build_os="linux"
+ ;;
+- x86_64*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ build_os="linux"
+ ;;
+ *darwin*)
+@@ -186,7 +186,7 @@ case $host in
+ #android builds are always cross
+ cross_compiling="yes"
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ if test "$use_platform" = "auto"; then
+ if test "x$use_cpu" = "xauto"; then
+ use_cpu=$host_cpu
+@@ -210,12 +210,12 @@ case $host in
+ platform_os="linux"
+ fi
+ ;;
+- *i686*-linux-gnu*|i*86*-*-linux-uclibc*)
++ *i686*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ use_cpu=$host_cpu
+ use_toolchain="${use_toolchain:-/usr}"
+ platform_os="linux"
+ ;;
+- x86_64*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ use_cpu=$host_cpu
+ use_toolchain="${use_toolchain:-/usr}"
+ platform_cflags="-fPIC -DPIC"
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch
new file mode 100644
index 000000000..e34a5b71e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch
@@ -0,0 +1,40 @@
+From 55233024648b5673dbf223586968e71cc4c70711 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 16 Nov 2016 18:49:36 -0800
+Subject: [PATCH 10/10] RssReader: Fix compiler warning comparing pointer to
+ zero
+
+Clang finds this warning
+RssReader.cpp:272:19: error: ordered comparison between pointer and zero ('TiXmlElement *' and 'int')
+ while (itemNode > 0)
+ ~~~~~~~~ ^ ~
+RssReader.cpp:276:22: error: ordered comparison between pointer and zero ('TiXmlNode *' and 'int')
+ while (childNode > 0)
+ ~~~~~~~~~ ^ ~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/utils/RssReader.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/xbmc/utils/RssReader.cpp b/xbmc/utils/RssReader.cpp
+index 9186f56..2494dc8 100644
+--- a/xbmc/utils/RssReader.cpp
++++ b/xbmc/utils/RssReader.cpp
+@@ -269,11 +269,11 @@ void CRssReader::GetNewsItems(TiXmlElement* channelXmlNode, int iFeed)
+ if (m_tagSet.empty())
+ AddTag("title");
+
+- while (itemNode > 0)
++ while (itemNode != NULL)
+ {
+ TiXmlNode* childNode = itemNode->FirstChild();
+ mTagElements.clear();
+- while (childNode > 0)
++ while (childNode != NULL)
+ {
+ std::string strName = childNode->ValueStr();
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch
new file mode 100644
index 000000000..7ee44f1c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch
@@ -0,0 +1,54 @@
+From 19a1ffc1450bd3ecfb7419d74c733b2e16bf47f3 Mon Sep 17 00:00:00 2001
+From: Balint Reczey <balint@balintreczey.hu>
+Date: Wed, 26 Aug 2015 08:14:41 +0200
+Subject: [PATCH 11/12] Let configure pass on unknown architectures setting
+ sane defaults
+
+This helps porting Kodi to new architectures while emitting warnings about
+entering uncharted territory.
+---
+ configure.ac | 3 ++-
+ m4/xbmc_arch.m4 | 6 ++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 925466a..8369615 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -658,7 +658,8 @@ case $host in
+ USE_STATIC_FFMPEG=1
+ ;;
+ *)
+- AC_MSG_ERROR(unsupported host ($host))
++ ARCH=$host_cpu"-"$host_os
++ AC_MSG_WARN([unsupported host ($host), guessing ARCH as $ARCH.])
+ esac
+ AC_SUBST([ARCH])
+
+diff --git a/m4/xbmc_arch.m4 b/m4/xbmc_arch.m4
+index ff5dc20..dfb45fd 100644
+--- a/m4/xbmc_arch.m4
++++ b/m4/xbmc_arch.m4
+@@ -27,7 +27,8 @@ case $build in
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ *)
+- AC_MSG_ERROR(unsupported native build platform: $build)
++ AC_MSG_WARN([unsupported native build platform: $build])
++ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ esac
+
+
+@@ -70,7 +71,8 @@ case $host in
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID")
+ ;;
+ *)
+- AC_MSG_ERROR(unsupported build target: $host)
++ AC_MSG_WARN([unsupported native build platform: $build])
++ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ esac
+
+ if test "$target_platform" = "target_android" ; then
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch
new file mode 100644
index 000000000..8d70b3f8f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch
@@ -0,0 +1,87 @@
+From 9e88aa086083b80c05b2bf057b92682186c4e6dc Mon Sep 17 00:00:00 2001
+From: Balint Reczey <balint@balintreczey.hu>
+Date: Thu, 6 Oct 2016 18:12:18 +0200
+Subject: [PATCH 12/12] Revert "[droid] fix builds with AML disabled"
+
+This reverts commit 4733383b8f1c1dd0b95e9e5358425d8a0b7ba8fc.
+---
+ xbmc/utils/SystemInfo.cpp | 4 ----
+ xbmc/windowing/egl/EGLWrapper.cpp | 16 ++++++----------
+ 2 files changed, 6 insertions(+), 14 deletions(-)
+
+diff --git a/xbmc/utils/SystemInfo.cpp b/xbmc/utils/SystemInfo.cpp
+index fcc6733..52e7fa3 100644
+--- a/xbmc/utils/SystemInfo.cpp
++++ b/xbmc/utils/SystemInfo.cpp
+@@ -57,10 +57,8 @@
+ #include "utils/XMLUtils.h"
+ #if defined(TARGET_ANDROID)
+ #include "platform/android/jni/Build.h"
+-#if defined(HAS_LIBAMCODEC)
+ #include "utils/AMLUtils.h"
+ #endif
+-#endif
+
+ /* Platform identification */
+ #if defined(TARGET_DARWIN)
+@@ -873,11 +871,9 @@ bool CSysInfo::IsAeroDisabled()
+ bool CSysInfo::HasHW3DInterlaced()
+ {
+ #if defined(TARGET_ANDROID)
+-#if defined(HAS_LIBAMCODEC)
+ if (aml_hw3d_present())
+ return true;
+ #endif
+-#endif
+ return false;
+ }
+
+diff --git a/xbmc/windowing/egl/EGLWrapper.cpp b/xbmc/windowing/egl/EGLWrapper.cpp
+index 30f5757..583d43a 100644
+--- a/xbmc/windowing/egl/EGLWrapper.cpp
++++ b/xbmc/windowing/egl/EGLWrapper.cpp
+@@ -24,19 +24,15 @@
+ #include <assert.h>
+ #if defined(TARGET_ANDROID)
+ #include "EGLNativeTypeAndroid.h"
+-#if defined(HAS_LIBAMCODEC)
+ #include "EGLNativeTypeAmlAndroid.h"
+ #endif
+-#endif
+ #if defined(TARGET_RASPBERRY_PI)
+ #include "EGLNativeTypeRaspberryPI.h"
+ #endif
+ #if defined(HAS_IMXVPU)
+ #include "EGLNativeTypeIMX.h"
+ #endif
+-#if defined(TARGET_LINUX) && defined(HAS_LIBAMCODEC)
+ #include "EGLNativeTypeAmlogic.h"
+-#endif
+ #include "EGLWrapper.h"
+
+ #define CheckError() m_result = eglGetError(); if(m_result != EGL_SUCCESS) CLog::Log(LOGERROR, "EGL error in %s: %x",__FUNCTION__, m_result);
+@@ -91,15 +87,15 @@ bool CEGLWrapper::Initialize(const std::string &implementation)
+ // Try to create each backend in sequence and go with the first one
+ // that we know will work
+ if (
+-#if defined(TARGET_ANDROID) && defined(HAS_LIBAMCODEC)
+- (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlAndroid>(implementation))
+-#elif defined(TARGET_ANDROID)
+- (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAndroid>(implementation))
+-#elif defined(TARGET_RASPBERRY_PI)
++#if defined(TARGET_ANDROID)
++ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlAndroid>(implementation)) ||
++ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAndroid>(implementation)) ||
++#endif
++#if defined(TARGET_RASPBERRY_PI)
+ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeRaspberryPI>(implementation))
+ #elif defined(HAS_IMXVPU)
+ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeIMX>(implementation))
+-#elif defined(TARGET_LINUX) && defined(HAS_LIBAMCODEC)
++#else
+ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlogic>(implementation))
+ #endif
+ )
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch
new file mode 100644
index 000000000..c9c906644
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch
@@ -0,0 +1,96 @@
+From 5fa10ff6b1b60abee172296d9c1dec8dfc10615c Mon Sep 17 00:00:00 2001
+From: Stefan Saraev <stefan@saraev.ca>
+Date: Sun, 7 May 2017 17:30:47 +0300
+Subject: [PATCH] FTPParse.cpp: use std::string
+
+Fixes build with newer gcc versions.
+
+Taken from [1]
+
+Upstream-Status: Backport [2]
+
+[1] https://git.busybox.net/buildroot/plain/package/kodi/0003-FTPParse.cpp-use-std-string.patch?id=e2f03a6bde19766a1ac047c5ccfb049b5c4f61ca
+[2] https://github.com/xbmc/xbmc/commit/5fa10ff6b1b60abee172296d9c1dec8dfc10615c
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ xbmc/filesystem/FTPParse.cpp | 44 ++++++++++++++++++++++----------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/xbmc/filesystem/FTPParse.cpp b/xbmc/filesystem/FTPParse.cpp
+index cfcc7c64ed..b0f676ae1a 100644
+--- a/xbmc/filesystem/FTPParse.cpp
++++ b/xbmc/filesystem/FTPParse.cpp
+@@ -34,7 +34,7 @@ CFTPParse::CFTPParse()
+ m_time = 0;
+ }
+
+-string CFTPParse::getName()
++std::string CFTPParse::getName()
+ {
+ return m_name;
+ }
+@@ -59,16 +59,16 @@ time_t CFTPParse::getTime()
+ return m_time;
+ }
+
+-void CFTPParse::setTime(string str)
++void CFTPParse::setTime(std::string str)
+ {
+ /* Variables used to capture patterns via the regexes */
+- string month;
+- string day;
+- string year;
+- string hour;
+- string minute;
+- string second;
+- string am_or_pm;
++ std::string month;
++ std::string day;
++ std::string year;
++ std::string hour;
++ std::string minute;
++ std::string second;
++ std::string am_or_pm;
+
+ /* time struct used to set the time_t variable */
+ struct tm time_struct = {};
+@@ -338,21 +338,21 @@ int CFTPParse::getDayOfWeek(int month, int date, int year)
+ return day_of_week;
+ }
+
+-int CFTPParse::FTPParse(string str)
++int CFTPParse::FTPParse(std::string str)
+ {
+ /* Various variable to capture patterns via the regexes */
+- string permissions;
+- string link_count;
+- string owner;
+- string group;
+- string size;
+- string date;
+- string name;
+- string type;
+- string stuff;
+- string facts;
+- string version;
+- string file_id;
++ std::string permissions;
++ std::string link_count;
++ std::string owner;
++ std::string group;
++ std::string size;
++ std::string date;
++ std::string name;
++ std::string type;
++ std::string stuff;
++ std::string facts;
++ std::string version;
++ std::string file_id;
+
+ /* Regex for standard Unix listing formats */
+ pcrecpp::RE unix_re("^([-bcdlps])" // type
+--
+2.11.0
+
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service
new file mode 100644
index 000000000..29d0394e4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Kodi media thing
+
+[Service]
+User=root
+Type=simple
+SuccessExitStatus=0 1
+IOSchedulingClass=realtime
+IOSchedulingPriority=0
+
+ExecStart=/usr/bin/xinit /usr/bin/kodi-standalone -- /usr/bin/X :0
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb
new file mode 100644
index 000000000..295618914
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb
@@ -0,0 +1,216 @@
+SUMMARY = "Kodi Media Center"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=930e2a5f63425d8dd72dbd7391c43c46"
+
+FILESPATH =. "${FILE_DIRNAME}/kodi-17:"
+
+DEPENDS = " \
+ cmake-native \
+ curl-native \
+ gperf-native \
+ jsonschemabuilder-native \
+ nasm-native \
+ swig-native \
+ unzip-native \
+ yasm-native \
+ zip-native \
+ avahi \
+ boost \
+ bzip2 \
+ crossguid \
+ curl \
+ dcadec \
+ enca \
+ expat \
+ faad2 \
+ ffmpeg \
+ fontconfig \
+ fribidi \
+ giflib \
+ jasper \
+ libass \
+ libcdio \
+ libcec \
+ libmad \
+ libmicrohttpd \
+ libmms \
+ libmms \
+ libmodplug \
+ libpcre \
+ libplist \
+ libsamplerate0 \
+ libsdl-image \
+ libsdl-mixer \
+ libsquish \
+ libssh \
+ libtinyxml \
+ libusb1 \
+ libxslt \
+ lzo \
+ mpeg2dec \
+ python \
+ sqlite3 \
+ taglib \
+ virtual/egl \
+ virtual/libsdl \
+ wavpack \
+ yajl \
+ zlib \
+ ${@enable_glew(bb, d)} \
+"
+
+PROVIDES = "xbmc"
+
+SRCREV = "6abeebd5ba371547c8f04272296433f5e4e28e86"
+PV = "17.3+gitr${SRCPV}"
+ADDONSPV = "17.1"
+SRC_URI = "git://github.com/xbmc/xbmc.git;branch=Krypton \
+ https://repo.voidlinux.eu/distfiles/${BPN}-${ADDONSPV}-generated-addons.tar.xz;name=addons;unpack=0 \
+ file://0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch \
+ file://0004-handle-SIGTERM.patch \
+ file://0005-add-support-to-read-frequency-output-if-using-intel-.patch \
+ file://0006-Disable-DVD-support.patch \
+ file://0007-Always-compile-libcpluff-as-PIC.patch \
+ file://0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch \
+ file://0009-build-Add-support-for-musl-triplets.patch \
+ file://0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch \
+ file://0011-Let-configure-pass-on-unknown-architectures-setting-.patch \
+ file://0012-Revert-droid-fix-builds-with-AML-disabled.patch \
+ file://0001-change-order-of-detecting-libegl-and-libgles2.patch \
+ file://0013-FTPParse.cpp-use-std-string.patch \
+"
+
+SRC_URI_append_libc-musl = " \
+ file://0001-Fix-file_Emu-on-musl.patch \
+ file://0002-Remove-FILEWRAP.patch \
+"
+SRC_URI[addons.md5sum] = "719614fa764011a18665d08af5c8c92f"
+SRC_URI[addons.sha256sum] = "350da57408c27473eaf40e7f544bc94841bf101dc4346085260c5c4af0adac97"
+
+inherit autotools-brokensep gettext pythonnative distro_features_check
+
+REQUIRED_DISTRO_FEATURES += "opengl"
+
+S = "${WORKDIR}/git"
+
+# breaks compilation
+ASNEEDED = ""
+
+ACCEL ?= ""
+ACCEL_x86 = "vaapi vdpau"
+ACCEL_x86-64 = "vaapi vdpau"
+
+PACKAGECONFIG ??= "${ACCEL} opengl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', 'openglesv2', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'samba', '', d)} \
+"
+
+PACKAGECONFIG[opengl] = "--enable-gl,--enable-gles,"
+PACKAGECONFIG[openglesv2] = "--enable-gles,--enable-gl,virtual/egl"
+PACKAGECONFIG[vaapi] = "--enable-vaapi,--disable-vaapi,libva"
+PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
+PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5"
+PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,libxinerama libxmu libxrandr libxtst"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[lcms] = "--enable-lcms2,--disable-lcms2,lcms"
+PACKAGECONFIG[samba] = "--enable-samba,--disable-samba,samba"
+
+EXTRA_OECONF = " \
+ --disable-debug \
+ --disable-libcap \
+ --disable-ccache \
+ --disable-mid \
+ --enable-libusb \
+ --enable-alsa \
+ --enable-airplay \
+ --disable-optical-drive \
+ --with-ffmpeg=shared \
+ --enable-texturepacker=no \
+ ac_cv_path_JAVA_EXE=/bin/true \
+"
+
+FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -O3 -ffast-math"
+FULL_OPTIMIZATION_armv7ve = "-fexpensive-optimizations -fomit-frame-pointer -O3 -ffast-math"
+BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
+
+LDFLAGS_append_mips = " -latomic"
+LDFLAGS_append_mipsel = " -latomic"
+LDFLAGS_append_powerpc = " -latomic"
+LDFLAGS_append_arm = " -latomic"
+
+EXTRA_OECONF_append = " LIBTOOL=${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool"
+
+# for python modules
+export HOST_SYS
+export BUILD_SYS
+export STAGING_LIBDIR
+export STAGING_INCDIR
+export PYTHON_DIR
+
+def enable_glew(bb, d):
+ if bb.utils.contains('PACKAGECONFIG', 'x11', True, False, d) and bb.utils.contains('DISTRO_FEATURES', 'opengl', True, False, d):
+ return "glew"
+ return ""
+
+do_configure() {
+ tar xf ${WORKDIR}/${BPN}-${ADDONSPV}-generated-addons.tar.xz -C ${S}/
+
+ ( for i in $(find ${S} -name configure.ac -or -name configure.in|grep -v ".pc") ; do
+ cd $(dirname $i) && gnu-configize --force || true
+ done )
+ ( for f in ${S}/xbmc/interfaces/python/generated/*.cpp; do
+ touch `echo $f|sed -e 's/.cpp$/.xml/g'`
+ done )
+
+ BOOTSTRAP_STANDALONE=1 make -f bootstrap.mk JSON_BUILDER="${STAGING_BINDIR_NATIVE}/JsonSchemaBuilder"
+ BOOTSTRAP_STANDALONE=1 make JAVA=/bin/true -f codegenerator.mk JSON_BUILDER="${STAGING_BINDIR_NATIVE}/JsonSchemaBuilder"
+ oe_runconf
+}
+
+do_compile_prepend() {
+ for i in $(find . -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' $i
+ done
+
+ for i in $(find . -name "*.mak*" -o -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' -e 's:-rpath \$(libdir):-rpath ${libdir}:g' $i
+ done
+}
+
+INSANE_SKIP_${PN} = "rpaths"
+
+FILES_${PN} += "${datadir}/xsessions ${datadir}/icons ${libdir}/xbmc ${datadir}/xbmc"
+FILES_${PN}-dbg += "${libdir}/kodi/.debug ${libdir}/kodi/*/.debug ${libdir}/kodi/*/*/.debug ${libdir}/kodi/*/*/*/.debug"
+
+# kodi uses some kind of dlopen() method for libcec so we need to add it manually
+# OpenGL builds need glxinfo, that's in mesa-demos
+RRECOMMENDS_${PN}_append = " \
+ libcec \
+ python \
+ python-ctypes \
+ python-lang \
+ python-re \
+ python-netclient \
+ python-html \
+ python-difflib \
+ python-json \
+ python-zlib \
+ python-shell \
+ python-sqlite3 \
+ python-compression \
+ libcurl \
+ ${@bb.utils.contains('PACKAGECONFIG', 'x11', 'xrandr xdpyinfo', '', d)} \
+"
+RRECOMMENDS_${PN}_append_libc-glibc = " \
+ glibc-charmap-ibm850 \
+ glibc-gconv-ibm850 \
+ glibc-gconv-unicode \
+ glibc-gconv-utf-32 \
+ glibc-charmap-utf-8 \
+ glibc-localedata-en-us \
+"
+
+RPROVIDES_${PN} += "xbmc"
+
+TOOLCHAIN = "gcc"
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch
new file mode 100644
index 000000000..a01c7544b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch
@@ -0,0 +1,57 @@
+Use LD and obey LDFLAGS
+
+Signed-off-by: Christopher Larson <chris_larson@mentor.com>
+Upstream-Status: Pending
+
+diff --git a/make/linux/Makefile b/make/linux/Makefile
+index 391b6e3..a2ac13e 100644
+--- a/make/linux/Makefile
++++ b/make/linux/Makefile
+@@ -64,6 +64,7 @@ objects_so:=$(patsubst %$(EXTENSION),%.lo,$(sources))
+ WARNINGFLAGS=-Wall -Wextra -Wno-unknown-pragmas -ansi -fno-gnu-keywords -Wshadow
+ COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
+ DEPENDFLAGS = $(CXXFLAGS) $(INCLUDE)
++LINKFLAGS=$(LDFLAGS)
+
+ ifeq (Darwin,$(shell uname -s))
+ all: staticlib
+@@ -91,7 +92,7 @@ $(LIBRARY): $(objects)
+ $(RANLIB) $@
+
+ $(LIBRARY_SO): $(objects_so)
+- $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
++ $(LD) $(LINKFLAGS) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
+ rm -f $(LIBRARY_SO)
+ ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
+
+diff --git a/make/mingw32/Makefile b/make/mingw32/Makefile
+index e5986ef..6ca16aa 100644
+--- a/make/mingw32/Makefile
++++ b/make/mingw32/Makefile
+@@ -18,6 +18,7 @@ DEBUGFLAGS=-g -DDEBUG
+ endif
+ CROSS =
+ CXX = $(CROSS)g++
++LD = $(CXX)
+ CC = $(CROSS)gcc
+ WINDRES = $(CROSS)windres
+ RANLIB = $(CROSS)ranlib
+@@ -33,6 +34,7 @@ LIBS = libebml.a
+ endif
+ INCS = -I"$(shell pwd)/../.."
+ COMPILEFLAGS = $(DEBUGFLAGS) $(INCS) $(DLLFLAGS) $(CXXFLAGS)
++LINKFLAGS = $(LDFLAGS)
+
+ .PHONY: all all-before all-after clean clean-custom
+
+@@ -54,7 +56,7 @@ libebml.a: $(OBJ)
+ $(RANLIB) $@
+
+ libebml.dll: $(OBJ)
+- $(CXX) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
++ $(LD) $(LINKFLAGS) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
+
+ depend:
+ @echo Calculating dependecies:
+--
+2.8.0
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch
new file mode 100644
index 000000000..57eb3450d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch
@@ -0,0 +1,42 @@
+Allow override of the 'uname -s' for cross-compilation
+
+Signed-off-by: Christopher Larson <chris_larson@mentor.com>
+Upstream-Status: Pending
+
+diff --git a/make/linux/Makefile b/make/linux/Makefile
+index a2ac13e..4188bee 100644
+--- a/make/linux/Makefile
++++ b/make/linux/Makefile
+@@ -9,9 +9,11 @@
+ # 'make DEBUG=yes'.
+ #
+
++TARGET_OS ?= $(shell uname -s)
++
+ # Paths
+ # BeOS wants the libs and headers in /boot/home/config
+-ifeq (BeOS,$(shell uname -s))
++ifeq (BeOS,$(TARGET_OS))
+ prefix=/boot/home/config
+ else
+ prefix=/usr/local
+@@ -66,7 +68,7 @@ COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
+ DEPENDFLAGS = $(CXXFLAGS) $(INCLUDE)
+ LINKFLAGS=$(LDFLAGS)
+
+-ifeq (Darwin,$(shell uname -s))
++ifeq (Darwin,$(TARGET_OS))
+ all: staticlib
+ else
+ all: staticlib sharedlib
+@@ -116,7 +118,7 @@ depend:
+ $(CXX) $(DEPENDFLAGS) -MM -MT $$o $$i >> .depend ; \
+ done
+
+-ifeq (Darwin,$(shell uname -s))
++ifeq (Darwin,$(TARGET_OS))
+ install: install_staticlib install_headers
+ else
+ install: install_staticlib install_sharedlib install_headers
+--
+2.8.0
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
new file mode 100644
index 000000000..16e17e9ab
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
@@ -0,0 +1,59 @@
+SUMMARY = "libebml is a C++ libary to parse EBML files"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+SRC_URI = "\
+ http://dl.matroska.org/downloads/libebml/libebml-${PV}.tar.bz2 \
+ file://ldflags.patch \
+ file://override-uname.patch \
+"
+SRC_URI[md5sum] = "efec729bf5a51e649e1d9d1f61c0ae7a"
+SRC_URI[sha256sum] = "83b074d6b62715aa0080406ea84d33df2e44b5d874096640233a4db49b8096de"
+
+inherit dos2unix
+
+LIBEBML_OS = "Unknown"
+LIBEBML_OS_linux = "Linux"
+LIBEBML_OS_darwin = "Darwin"
+LIBEBML_OS_mingw32 = "Windows"
+
+EXTRA_OEMAKE = "\
+ 'TARGET_OS=${LIBEBML_OS}' \
+ \
+ 'CXX=${CXX}' \
+ 'LD=${CXX}' \
+ 'AR=${AR}' \
+ 'RANLIB=${RANLIB}' \
+ \
+ 'DEBUGFLAGS=' \
+ 'CPPFLAGS=${CPPFLAGS}' \
+ 'CXXFLAGS=${CXXFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+ \
+ 'prefix=${prefix}' \
+ 'libdir=${libdir}' \
+ 'includedir=${includedir}/ebml' \
+"
+
+do_compile () {
+ oe_runmake -C make/linux
+}
+
+do_install() {
+ cd ${S}/make/linux
+
+ install -d ${D}${libdir}
+ install -m 0644 libebml.a ${D}${libdir}
+ install -m 0755 libebml.so.* ${D}${libdir}
+ cp -R --no-dereference --preserve=mode,links -v libebml.so ${D}${libdir}
+
+ install -d ${D}${includedir}/ebml
+ for i in ../../ebml/*.h; do
+ install -m 0644 $i ${D}${includedir}/ebml
+ done
+
+ install -d ${D}${includedir}/ebml/c
+ for i in ../../ebml/c/*.h; do
+ install -m 0644 $i ${D}${includedir}/ebml/c
+ done
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch
new file mode 100644
index 000000000..90e997561
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch
@@ -0,0 +1,28 @@
+From f0c879097c331d1dabe6ee92b583a8badb62ea6d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 08:26:35 -0700
+Subject: [PATCH] Makefile: Use LINKFLAGS during link step
+
+Adds much needed GNU_HASH section into the .so
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ make/linux/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/make/linux/Makefile b/make/linux/Makefile
+index 3ca7b0f..b5c9645 100644
+--- a/make/linux/Makefile
++++ b/make/linux/Makefile
+@@ -104,7 +104,7 @@ $(LIBRARY): $(objects)
+ $(RANLIB) $@
+
+ $(LIBRARY_SO): $(objects_so)
+- $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml
++ $(CXX) $(LINKFLAGS) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml
+ rm -f $(LIBRARY_SO)
+ ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
+
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
new file mode 100644
index 000000000..fdffa41ec
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
@@ -0,0 +1,37 @@
+SUMMARY = "libmatroska is a C++ libary to parse Matroska files (.mkv and .mka)"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libebml"
+
+SRC_URI = "http://dl.matroska.org/downloads/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-Makefile-Use-LINKFLAGS-during-link-step.patch \
+ "
+SRC_URI[md5sum] = "f61b2e5086f4bb9d24a43cc8af43a719"
+SRC_URI[sha256sum] = "086f21873e925679babdabf793c3bb85c353d0cd79423543a3355e08e8a4efb7"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_compile() {
+ cd ${S}/make/linux
+ oe_runmake CROSS="${TARGET_PREFIX}"
+}
+
+do_install() {
+ cd ${S}/make/linux
+
+ install -d ${D}${libdir}
+ install -m 0644 libmatroska.a ${D}${libdir}
+ install -m 0755 libmatroska.so.* ${D}${libdir}
+ cp -R --no-dereference --preserve=mode,links -v libmatroska.so ${D}${libdir}
+
+ install -d ${D}${includedir}/matroska
+ for i in ../../matroska/*.h; do
+ install -m 0644 $i ${D}${includedir}/matroska
+ done
+
+ install -d ${D}${includedir}/matroska/c
+ for i in ../../matroska/c/*.h; do
+ install -m 0644 $i ${D}${includedir}/matroska/c
+ done
+}
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
diff --git a/meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb b/meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb
new file mode 100644
index 000000000..228b8b654
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb
@@ -0,0 +1,25 @@
+# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Lightweight cross platform C++ GUID/UUID library"
+HOMEPAGE = "https://github.com/graeme-hill/crossguid"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1373274bc8d8001edc54933919f36f68"
+DEPENDS += "util-linux"
+
+PV = "0.0+git${SRCPV}"
+
+SRCREV = "b56957ac453575e91ca1b63a80c0077c2b0d011a"
+SRC_URI = "git://github.com/graeme-hill/crossguid;protocol=https"
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+ ${CXX} -c guid.cpp -o guid.o ${CXXFLAGS} -std=c++11 -DGUID_LIBUUID
+ ${AR} rvs libcrossguid.a guid.o
+}
+
+do_install() {
+ install -D -m 0644 ${B}/libcrossguid.a ${D}${libdir}/libcrossguid.a
+ install -D -m 0644 ${S}/guid.h ${D}${includedir}/guid.h
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb b/meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb
new file mode 100644
index 000000000..07d0c5561
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Profiling utilities for GStreamer 1.0 pipelines"
+HOMEPAGE = "https://github.com/kirushyk/gst-instruments"
+SECTION = "multimedia"
+
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+DEPENDS = "gstreamer1.0"
+
+S = "${WORKDIR}/git"
+SRCREV = "4ce8092636ee6572148b5fa044080734cf5a6b8d"
+SRC_URI = "git://github.com/kirushyk/gst-instruments.git;protocol=https;"
+
+FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*a"
+FILES_${PN} += "${libdir}/*"
+
+INSANE_SKIP_${PN} = "dev-so"
+
+inherit autotools pkgconfig
+
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb
new file mode 100644
index 000000000..44f135a21
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb
@@ -0,0 +1,7 @@
+require libmediaart.inc
+
+SRC_URI = "${GNOME_MIRROR}/libmediaart/1.9/libmediaart-${PV}.tar.xz"
+SRC_URI[md5sum] = "0b65d64398d2f3dff89534c9dfffab4f"
+SRC_URI[sha256sum] = "94668adb29d4dc3115b0fd105942ebd5ca6f5f9dbb2afa8a191a73a747dd506f"
+
+S = "${WORKDIR}/libmediaart-${PV}"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc
new file mode 100644
index 000000000..57dca9c17
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Library tasked with managing, extracting and handling media art caches"
+
+LICENSE = "LGPLv2+ & GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c \
+ file://libmediaart/extract.c;endline=18;md5=dff2b6328ab067b5baadc135f9876c36 \
+ file://tests/mediaarttest.c;endline=18;md5=067106eaa1f7a9d918759a096667f18e"
+
+DEPENDS = "glib-2.0 gdk-pixbuf"
+
+GNOME_COMPRESS_TYPE = "xz"
+
+inherit gnomebase gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-qt --enable-gdkpixbuf"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb
new file mode 100644
index 000000000..ae95d4f69
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb
@@ -0,0 +1,6 @@
+require libmediaart.inc
+
+SRC_URI[archive.md5sum] = "1a44933d4cd0064e3c76d8d0ddacddc9"
+SRC_URI[archive.sha256sum] = "3a9dffcad862aed7c0921579b93080d694b8a66f3676bfee8037867f653a1cd3"
+
+EXTRA_OECONF_append = " --disable-gtk-doc"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch
new file mode 100644
index 000000000..aff1cb184
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch
@@ -0,0 +1,41 @@
+Upstream-Status: Inappropriate [configuration]
+
+From 1921498bcc06408e8b051a3a9e9ce4182998f748 Mon Sep 17 00:00:00 2001
+From: David Schleef <ds@schleef.org>
+Date: Fri, 8 Apr 2011 10:05:49 -0700
+Subject: [PATCH 10/10] Fix --enable-vfp flag
+
+Patch from Christophe Lyon, fixes #36084.
+---
+ configure.ac | 4 ++--
+ liboil/arm/Makefile.am | 1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 98c81fb..407d88c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -188,8 +188,8 @@ fi
+ AC_ARG_ENABLE(vfp,
+ AC_HELP_STRING([--enable-vfp],[compile with Vector Floating-point unit support]),
+ enable_vfp=$enableval,enable_vfp=yes)
+-if test "x$enable-vfp" = xyes -a x$HAVE_GCC_ASM = xyes -a x$HAVE_ARM = xyes; then
+- AS_COMPILER_FLAG(["-Wa,-mfpu=vfp"],
++if test "x$enable_vfp" = xyes -a x$HAVE_GCC_ASM = xyes -a x$HAVE_ARM = xyes; then
++ AS_COMPILER_FLAG(["-mfpu=vfp"],
+ [VFP_CFLAGS="$VFP_CFLAGS -mfpu=vfp"],
+ true)
+ #AS_COMPILER_FLAG(["-Wa,-mfloat-abi=softfp"],
+diff --git a/liboil/arm/Makefile.am b/liboil/arm/Makefile.am
+index ead08ed..cd8d9fa 100644
+--- a/liboil/arm/Makefile.am
++++ b/liboil/arm/Makefile.am
+@@ -6,4 +6,5 @@ libarm_la_SOURCES = \
+ math_vfp_asm.S
+
+ libarm_la_CFLAGS = $(LIBOIL_CFLAGS) $(VFP_CFLAGS)
++libarm_la_CCASFLAGS = $(LIBOIL_CFLAGS) $(VFP_CFLAGS)
+
+--
+1.7.6
+
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch
new file mode 100644
index 000000000..c8e3c1f72
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch
@@ -0,0 +1,19 @@
+Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=31358
+
+configure: fix whitelisting of x86_64 unaligned memory access
+
+Fix typo in whitelist so cross-compile works for x86_64.
+
+Upstream-Status: Inappropriate [configuration]
+
+--- liboil-0.3.17/m4/as-unaligned-access.m4.orig 2009-02-26 14:40:08.000000000 -0500
++++ liboil-0.3.17/m4/as-unaligned-access.m4 2010-11-03 12:19:55.000000000 -0400
+@@ -9,7 +9,7 @@
+ _AS_ECHO_N([(blacklisted) ])
+ as_cv_unaligned_access=no
+ ;;
+- i?86*|x86_64|amd64|powerpc*|m68k*|cris*)
++ i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*)
+ _AS_ECHO_N([(whitelisted) ])
+ as_cv_unaligned_access=yes
+ ;;
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch
new file mode 100644
index 000000000..473380e9f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch
@@ -0,0 +1,222 @@
+Upstream-Status: Pending
+
+Make the assembly syntax compatible with x32 gcc. Othewise x32 gcc throws errors.
+
+Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
+2011/12/01
+
+
+Index: liboil-0.3.17/liboil/amd64/wavelet.c
+===================================================================
+--- liboil-0.3.17.orig/liboil/amd64/wavelet.c
++++ liboil-0.3.17/liboil/amd64/wavelet.c
+@@ -21,14 +21,14 @@ deinterleave2_asm (int16_t *d1, int16_t
+ asm volatile ("\n"
+ " sub $2, %%rcx\n"
+ "1:\n"
+- " movw (%1,%%rcx,4), %%ax\n"
+- " movw %%ax, (%0,%%rcx,2)\n"
+- " movw 2(%1,%%rcx,4), %%ax\n"
+- " movw %%ax, (%2,%%rcx,2)\n"
+- " movw 4(%1,%%rcx,4), %%ax\n"
+- " movw %%ax, 2(%0,%%rcx,2)\n"
+- " movw 6(%1,%%rcx,4), %%ax\n"
+- " movw %%ax, 2(%2,%%rcx,2)\n"
++ " movw (%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, (%q0,%%rcx,2)\n"
++ " movw 2(%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, (%q2,%%rcx,2)\n"
++ " movw 4(%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, 2(%q0,%%rcx,2)\n"
++ " movw 6(%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, 2(%q2,%%rcx,2)\n"
+ " sub $2, %%rcx\n"
+ " jge 1b\n"
+ : "+r" (d1), "+r" (s_2xn), "+r" (d2), "+c" (n)
+@@ -53,20 +53,20 @@ deinterleave2_mmx (int16_t *d1, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,4), %%mm0\n"
+- " movq 8(%1,%%rcx,4), %%mm1\n"
++ " movq (%q1,%%rcx,4), %%mm0\n"
++ " movq 8(%q1,%%rcx,4), %%mm1\n"
+ " pslld $16, %%mm0\n"
+ " pslld $16, %%mm1\n"
+ " psrad $16, %%mm0\n"
+ " psrad $16, %%mm1\n"
+ " packssdw %%mm1, %%mm0\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
+- " movq (%1,%%rcx,4), %%mm0\n"
+- " movq 8(%1,%%rcx,4), %%mm1\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
++ " movq (%q1,%%rcx,4), %%mm0\n"
++ " movq 8(%q1,%%rcx,4), %%mm1\n"
+ " psrad $16, %%mm0\n"
+ " psrad $16, %%mm1\n"
+ " packssdw %%mm1, %%mm0\n"
+- " movq %%mm0, (%2,%%rcx,2)\n"
++ " movq %%mm0, (%q2,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -93,10 +93,10 @@ deinterleave2_mmx_2 (int16_t *d1, int16_
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " pshufw $0xd8, (%1,%%rcx,4), %%mm0\n"
+- " movd %%mm0, (%0,%%rcx,2)\n"
+- " pshufw $0x8d, (%1,%%rcx,4), %%mm0\n"
+- " movd %%mm0, (%2,%%rcx,2)\n"
++ " pshufw $0xd8, (%q1,%%rcx,4), %%mm0\n"
++ " movd %%mm0, (%q0,%%rcx,2)\n"
++ " pshufw $0x8d, (%q1,%%rcx,4), %%mm0\n"
++ " movd %%mm0, (%q2,%%rcx,2)\n"
+ " add $2, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -123,16 +123,16 @@ deinterleave2_mmx_3 (int16_t *d1, int16_
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,4), %%mm1\n"
+- " movq (%1,%%rcx,4), %%mm2\n"
+- " movq 8(%1,%%rcx,4), %%mm0\n"
++ " movq (%q1,%%rcx,4), %%mm1\n"
++ " movq (%q1,%%rcx,4), %%mm2\n"
++ " movq 8(%q1,%%rcx,4), %%mm0\n"
+ " punpcklwd %%mm0, %%mm1\n"
+ " punpckhwd %%mm0, %%mm2\n"
+ " movq %%mm1, %%mm0\n"
+ " punpcklwd %%mm2, %%mm0\n"
+ " punpckhwd %%mm2, %%mm1\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
+- " movq %%mm1, (%2,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
++ " movq %%mm1, (%q2,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -159,26 +159,26 @@ deinterleave2_mmx_4 (int16_t *d1, int16_
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,4), %%mm1\n"
++ " movq (%q1,%%rcx,4), %%mm1\n"
+ " movq %%mm1, %%mm2\n"
+- " movq 8(%1,%%rcx,4), %%mm0\n"
+- " movq 16(%1,%%rcx,4), %%mm5\n"
++ " movq 8(%q1,%%rcx,4), %%mm0\n"
++ " movq 16(%q1,%%rcx,4), %%mm5\n"
+ " punpcklwd %%mm0, %%mm1\n"
+ " movq %%mm5, %%mm6\n"
+ " punpckhwd %%mm0, %%mm2\n"
+- " movq 24(%1,%%rcx,4), %%mm4\n"
++ " movq 24(%q1,%%rcx,4), %%mm4\n"
+ " movq %%mm1, %%mm0\n"
+ " punpcklwd %%mm4, %%mm5\n"
+ " punpcklwd %%mm2, %%mm0\n"
+ " punpckhwd %%mm4, %%mm6\n"
+ " punpckhwd %%mm2, %%mm1\n"
+ " movq %%mm5, %%mm4\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
+ " punpcklwd %%mm6, %%mm4\n"
+- " movq %%mm1, (%2,%%rcx,2)\n"
++ " movq %%mm1, (%q2,%%rcx,2)\n"
+ " punpckhwd %%mm6, %%mm5\n"
+- " movq %%mm4, 8(%0,%%rcx,2)\n"
+- " movq %%mm5, 8(%2,%%rcx,2)\n"
++ " movq %%mm4, 8(%q0,%%rcx,2)\n"
++ " movq %%mm5, 8(%q2,%%rcx,2)\n"
+ " add $8, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -252,13 +252,13 @@ interleave2_mmx (int16_t *d_2xn, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,2), %%mm0\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
++ " movq (%q1,%%rcx,2), %%mm0\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
+ " movq %%mm0, %%mm2\n"
+ " punpckhwd %%mm1, %%mm0\n"
+ " punpcklwd %%mm1, %%mm2\n"
+- " movq %%mm2, (%0,%%rcx,4)\n"
+- " movq %%mm0, 8(%0,%%rcx,4)\n"
++ " movq %%mm2, (%q0,%%rcx,4)\n"
++ " movq %%mm0, 8(%q0,%%rcx,4)\n"
+ " add $4, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -285,12 +285,12 @@ lift_add_shift1_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $1, %%mm1\n"
+- " paddw (%1,%%rcx,2), %%mm1\n"
+- " movq %%mm1, (%0,%%rcx,2)\n"
++ " paddw (%q1,%%rcx,2), %%mm1\n"
++ " movq %%mm1, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
+@@ -317,13 +317,13 @@ lift_sub_shift1_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
+- " movq (%1,%%rcx,2), %%mm0\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
++ " movq (%q1,%%rcx,2), %%mm0\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $1, %%mm1\n"
+ " psubw %%mm1, %%mm0\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
+@@ -350,12 +350,12 @@ lift_add_shift2_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $2, %%mm1\n"
+- " paddw (%1,%%rcx,2), %%mm1\n"
+- " movq %%mm1, (%0,%%rcx,2)\n"
++ " paddw (%q1,%%rcx,2), %%mm1\n"
++ " movq %%mm1, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
+@@ -382,13 +382,13 @@ lift_sub_shift2_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
+- " movq (%1,%%rcx,2), %%mm0\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
++ " movq (%q1,%%rcx,2), %%mm0\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $2, %%mm1\n"
+ " psubw %%mm1, %%mm0\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch
new file mode 100644
index 000000000..892d44131
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch
@@ -0,0 +1,24 @@
+Upstream-Status: Inappropriate [disable feature]
+
+--- liboil-0.3.9/liboil/liboilfunction.c.old 2006-09-18 13:03:20.000000000 +0100
++++ liboil-0.3.9/liboil/liboilfunction.c 2006-09-18 13:04:10.000000000 +0100
+@@ -345,7 +345,9 @@
+ return;
+ }
+
+- test = oil_test_new (klass);
++ klass->chosen_impl = klass->reference_impl;
++ klass->func = klass->reference_impl->func;
++/* test = oil_test_new (klass);
+ if (test == NULL) {
+ OIL_ERROR ("failed to test function class %s", klass->name);
+ return;
+@@ -385,7 +387,7 @@
+ klass->chosen_impl = min_impl;
+ klass->func = min_impl->func;
+
+- oil_test_free (test);
++ oil_test_free (test);*/
+ }
+
+ static void
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb
new file mode 100644
index 000000000..03b778521
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Library of simple functions optimized for various CPUs"
+HOMEPAGE = "http://liboil.freedesktop.org/"
+BUGTRACKER = "https://bugs.freedesktop.org/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ad80780d9c5205d63481a0184e199a15 \
+ file://liboil/liboil.h;endline=28;md5=95c794a66b88800d949fed17e437d9fb \
+ file://liboil/liboilcpu.c;endline=28;md5=89da69a61d88eedcba066f42353fb75a \
+ file://examples/example1.c;endline=29;md5=9d4dad9fcbbdf0441ee063f8af5170c9 \
+ file://testsuite/trans.c;endline=29;md5=380ecd43121fe3dcc0d8d7e5984f283d"
+
+DEPENDS = "glib-2.0"
+PR = "r5"
+
+SRC_URI = "http://liboil.freedesktop.org/download/${BPN}-${PV}.tar.gz \
+ file://no-tests.patch \
+ file://fix-unaligned-whitelist.patch \
+ file://0001-Fix-enable-vfp-flag.patch \
+ file://liboil_fix_for_x32.patch \
+ "
+
+SRC_URI[md5sum] = "47dc734f82faeb2964d97771cfd2e701"
+SRC_URI[sha256sum] = "105f02079b0b50034c759db34b473ecb5704ffa20a5486b60a8b7698128bfc69"
+
+inherit autotools pkgconfig
+
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch
new file mode 100644
index 000000000..b56c78959
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch
@@ -0,0 +1,73 @@
+From 3dc8a678a844247d0afcf7e30fb3cbd5ccbd828f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Jun 2017 14:05:06 -0700
+Subject: [PATCH] Rename conflicting variable 'mips'
+
+Fixes
+test/srtp_driver.c:344:12: error: expected identifier or '(' before numeric constant
+ double mips = mips_estimate(1000000000, &ignore);
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ test/srtp_driver.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/test/srtp_driver.c b/test/srtp_driver.c
+index 8872971..d38ea19 100644
+--- a/test/srtp_driver.c
++++ b/test/srtp_driver.c
+@@ -341,7 +341,7 @@ main (int argc, char *argv[]) {
+ if (do_codec_timing) {
+ srtp_policy_t policy;
+ int ignore;
+- double mips = mips_estimate(1000000000, &ignore);
++ double est = mips_estimate(1000000000, &ignore);
+
+ crypto_policy_set_rtp_default(&policy.rtp);
+ crypto_policy_set_rtcp_default(&policy.rtcp);
+@@ -353,33 +353,33 @@ main (int argc, char *argv[]) {
+ policy.allow_repeat_tx = 0;
+ policy.next = NULL;
+
+- printf("mips estimate: %e\n", mips);
++ printf("mips estimate: %e\n", est);
+
+ printf("testing srtp processing time for voice codecs:\n");
+ printf("codec\t\tlength (octets)\t\tsrtp instructions/second\n");
+ printf("G.711\t\t%d\t\t\t%e\n", 80,
+- (double) mips * (80 * 8) /
++ (double) est * (80 * 8) /
+ srtp_bits_per_second(80, &policy) / .01 );
+ printf("G.711\t\t%d\t\t\t%e\n", 160,
+- (double) mips * (160 * 8) /
++ (double) est * (160 * 8) /
+ srtp_bits_per_second(160, &policy) / .02);
+ printf("G.726-32\t%d\t\t\t%e\n", 40,
+- (double) mips * (40 * 8) /
++ (double) est * (40 * 8) /
+ srtp_bits_per_second(40, &policy) / .01 );
+ printf("G.726-32\t%d\t\t\t%e\n", 80,
+- (double) mips * (80 * 8) /
++ (double) est * (80 * 8) /
+ srtp_bits_per_second(80, &policy) / .02);
+ printf("G.729\t\t%d\t\t\t%e\n", 10,
+- (double) mips * (10 * 8) /
++ (double) est * (10 * 8) /
+ srtp_bits_per_second(10, &policy) / .01 );
+ printf("G.729\t\t%d\t\t\t%e\n", 20,
+- (double) mips * (20 * 8) /
++ (double) est * (20 * 8) /
+ srtp_bits_per_second(20, &policy) / .02 );
+ printf("Wideband\t%d\t\t\t%e\n", 320,
+- (double) mips * (320 * 8) /
++ (double) est * (320 * 8) /
+ srtp_bits_per_second(320, &policy) / .01 );
+ printf("Wideband\t%d\t\t\t%e\n", 640,
+- (double) mips * (640 * 8) /
++ (double) est * (640 * 8) /
+ srtp_bits_per_second(640, &policy) / .02 );
+ }
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb
new file mode 100644
index 000000000..ee8c68bc1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "library implementing Secure RTP (RFC 3711)"
+HOMEPAGE = "https://github.com/cisco/libsrtp"
+SECTION = "libs"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=15bc16b9d2e305974dde47e733883714"
+
+S = "${WORKDIR}/git"
+SRCREV = "e806a66bad35f4b215b7a825c24ef0ec4cc19569"
+SRC_URI = "git://github.com/cisco/libsrtp.git;protocol=https; \
+ file://0001-Rename-conflicting-variable-mips.patch \
+ "
+
+inherit autotools
+
+do_install[postfuncs] += " rm_unused_bindir "
+
+rm_unused_bindir() {
+ rmdir ${D}/${bindir}
+}
+
+ALLOW_EMPTY_${PN} = "1"
OpenPOWER on IntegriCloud