1 diff --git a/.gitignore b/.gitignore
2 index c0631de..8392f6b 100644
5 @@ -371,6 +371,7 @@ lib/cpluff/stamp-h1
10 /tools/Linux/kodi-standalone.sh
11 /tools/Linux/kodi-xsession.desktop
13 diff --git a/Makefile.in b/Makefile.in
14 index 0d70e9b..a6ee74b 100644
17 @@ -237,7 +237,7 @@ INCLUDES=$(sort @INCLUDES@)
19 CLEAN_FILES=@APP_NAME_LC@.bin @APP_NAME_LC@-xrandr lib@APP_NAME_LC@.so
21 -DISTCLEAN_FILES=config.h config.log config.status tools/Linux/kodi.sh \
22 +DISTCLEAN_FILES=config.h config.log config.status tools/Linux/kodi.sh tools/Linux/kodi.run \
23 tools/Linux/kodi-standalone.sh autom4te.cache config.h.in~ \
24 system/libcpluff-@ARCH@.so
26 @@ -273,9 +273,12 @@ CHECK_LIBS = xbmc/addons/test/addonsTest.a \
27 xbmc/video/test/videoTest.a \
28 xbmc/threads/test/threadTest.a \
29 xbmc/interfaces/python/test/pythonSwigTest.a \
30 - xbmc/cores/AudioEngine/Sinks/test/AESinkTest.a \
33 +ifneq (@VUPLUS_COMPILE@,yes)
34 +CHECK_LIBS += xbmc/cores/AudioEngine/Sinks/test/AESinkTest.a
40 @@ -407,6 +410,10 @@ FFMPEGOBJS = @FFMPEG_LIBDIR@/libavcodec.a \
41 DYNOBJSXBMC+= $(FFMPEGOBJS)
42 LIBS+= @GNUTLS_ALL_LIBS@
44 +ifeq (@VUPLUS_COMPILE@,yes)
45 +LIBS+= -lKodiGLESPL -ldvb_base -lnxpl -ldvb_client
48 $(FFMPEGOBJS): dvdpcodecs
51 @@ -522,6 +529,9 @@ install-scripts:
52 @install -d $(DESTDIR)$(datarootdir)/xsessions
53 @install -m 0644 tools/Linux/kodi-xsession.desktop $(DESTDIR)$(datarootdir)/xsessions/@APP_NAME_LC@.desktop
54 @cd $(DESTDIR)$(datarootdir)/xsessions; [ -L xbmc.desktop ] || [ -f xbmc.desktop ] || ln -s @APP_NAME_LC@.desktop xbmc.desktop
55 + @install -d $(DESTDIR)$(libdir)
56 + @install -d $(DESTDIR)$(libdir)/@APP_NAME_LC@
57 + @install tools/Linux/@APP_NAME_LC@.run $(DESTDIR)$(libdir)/@APP_NAME_LC@/@APP_NAME_LC@.run
59 install-datas: install-scripts
60 @echo "Copying support and legal files..."
61 diff --git a/addons/skin.estouchy/xml/Home.xml b/addons/skin.estouchy/xml/Home.xml
62 index 971f04b..4d96119 100644
63 --- a/addons/skin.estouchy/xml/Home.xml
64 +++ b/addons/skin.estouchy/xml/Home.xml
69 - <onclick>Shutdown</onclick>
70 + <onclick>XBMC.Quit()</onclick>
71 <icon>icon_button_shutdown.png</icon>
74 diff --git a/addons/skin.estuary/xml/Home.xml b/addons/skin.estuary/xml/Home.xml
75 index 16187cc..89feb5b 100644
76 --- a/addons/skin.estuary/xml/Home.xml
77 +++ b/addons/skin.estuary/xml/Home.xml
79 <align>justify</align>
80 <include content="IconButton">
81 <param name="control_id" value="804" />
82 - <param name="onclick" value="ActivateWindow(shutdownmenu)" />
83 + <param name="onclick" value="XBMC.Quit()" />
84 <param name="icon" value="icons/power.png" />
85 <param name="label" value="$LOCALIZE[33060]" />
87 diff --git a/configure.ac b/configure.ac
88 index 0609390..f223baf 100644
91 @@ -681,6 +681,16 @@ case $use_platform in
96 + target_platform=target_vuplus
101 + target_platform=target_vuplus
107 if test "$target_platform" = "target_raspberry_pi" ; then
108 @@ -696,6 +706,22 @@ if test "$target_platform" = "target_raspberry_pi" ; then
112 +if test "$target_platform" = "target_vuplus" ; then
113 + ffmpeg_target_os=linux
120 + use_optical_drive=no
121 + USE_STATIC_FFMPEG=1
122 + AC_DEFINE(HAS_EGLGLES, [1], [Define if supporting EGL based GLES Framebuffer])
125 + CXXFLAGS="$CXXFLAGS"
128 if test "$host_vendor" = "apple"; then
131 @@ -1056,7 +1082,7 @@ int main() {
135 -if test "${target_platform}" = "target_linux" || test "${target_platform}" = "target_raspberry_pi" || test "${target_platform}" = "target_android"; then
136 +if test "${target_platform}" = "target_linux" || test "${target_platform}" = "target_raspberry_pi" || test "${target_platform}" = "target_android" || test "${target_platform}" = "target_vuplus"; then
137 PKG_CHECK_MODULES([UUID], [uuid],, AC_MSG_ERROR(libuuid not found))
140 @@ -1556,7 +1582,21 @@ if test "${USE_STATIC_FFMPEG}" = "1"; then
141 pkg_cfg_prefix=${SYSROOT}
144 - if test "$cross_compiling" != "yes"; then
145 + if test "${target_platform}" = "target_vuplus"; then
146 + # always build our ffmpeg
147 + if test "$use_debug" != "yes"; then
150 + if test "$use_optimizations" != "yes"; then
151 + FFMPEG_OPTS="${FFMPEG_OPTS} --disable-optimizations"
153 + AC_MSG_NOTICE("FFmpeg installation forced by user - installing our version")
154 + CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" NM="$NM" AR="$AR" \
155 + AS="$AS" STRIP="$STRIP" CC="$CC" CXX="$CXX" LD="$CCLD" RANLIB="$RANLIB" \
156 + ${ffmpeg_build}/autobuild.sh ${FFMPEG_OPTS} ${PARALLEL_MAKE} --arch=generic
157 + export PKG_CONFIG_PATH="${ffmpeg_build}/ffmpeg-install/lib/pkgconfig:$PKG_CONFIG_PATH"
159 + elif test "$cross_compiling" != "yes"; then
160 if test "$use_debug" != "yes"; then
163 @@ -1589,14 +1629,18 @@ if test "${USE_STATIC_FFMPEG}" = "1"; then
164 if test "$with_ffmpeg" = "yes" || test "$FFMPEG_FOUND" = "false"; then
165 # ffmpeg not found with pkg-config, lets install it
166 AC_MSG_NOTICE("Installing FFmpeg")
167 - CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" ${ffmpeg_build}/autobuild.sh ${FFMPEG_OPTS}
168 + CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" NM="$NM" AR="$AR" \
169 + AS="$AS" STRIP="$STRIP" CC="$CC" CXX="$CXX" LD="$CCLD" RANLIB="$RANLIB" \
170 + ${ffmpeg_build}/autobuild.sh ${FFMPEG_OPTS}
171 export PKG_CONFIG_PATH="${ffmpeg_build}/ffmpeg-install/lib/pkgconfig:$PKG_CONFIG_PATH"
174 elif test "$with_ffmpeg" = "force"; then
175 # always build our ffmpeg
176 AC_MSG_NOTICE("FFmpeg installation forced by user - installing our version")
177 - CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" ${ffmpeg_build}/autobuild.sh ${FFMPEG_OPTS}
178 + CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" NM="$NM" AR="$AR" \
179 + AS="$AS" STRIP="$STRIP" CC="$CC" CXX="$CXX" LD="$CCLD" RANLIB="$RANLIB" \
180 + ${ffmpeg_build}/autobuild.sh ${FFMPEG_OPTS}
181 export PKG_CONFIG_PATH="${ffmpeg_build}/ffmpeg-install/lib/pkgconfig:$PKG_CONFIG_PATH"
183 elif test "$with_ffmpeg" != "no"; then
184 @@ -1609,13 +1653,17 @@ fi
186 if test "$FFMPEG_FOUND" != "true"; then
187 PKG_CHECK_MODULES([FFMPEG], [$FFMPEG_LIBNAMES],
188 - [INCLUDES="$INCLUDES $FFMPEG_CFLAGS"; LIBS="$LIBS $FFMPEG_LIBS"; FFMPEG_FOUND="true"],
189 + [FFMPEG_FOUND="true"],
190 [AC_MSG_ERROR("ffmpeg not found")])
191 + FFMPEG_LIBS=$(PKG_CONFIG_SYSROOT_DIR="" ${PKG_CONFIG} --libs libavcodec 2>/dev/null)
192 + FFMPEG_CFLAGS=$(PKG_CONFIG_SYSROOT_DIR="" ${PKG_CONFIG} --cflags libavcodec 2>/dev/null)
193 + INCLUDES="$INCLUDES $FFMPEG_CFLAGS"
194 + LIBS="$LIBS $FFMPEG_LIBS"
197 if test "${USE_STATIC_FFMPEG}" = "1"; then
198 # get the libdir for static linking
199 - FFMPEG_LIBDIR=${pkg_cfg_prefix}$(PKG_CONFIG_SYSROOT_DIR="" ${PKG_CONFIG} --static --variable=libdir libavcodec)
200 + FFMPEG_LIBDIR=$(PKG_CONFIG_SYSROOT_DIR="" ${PKG_CONFIG} --static --variable=libdir libavcodec)
201 GNUTLS_ALL_LIBS=$(${PKG_CONFIG} --static --libs-only-l --silence-errors gnutls)
203 # check if static libs are available
204 @@ -2200,6 +2248,7 @@ OUTPUT_FILES="Makefile \
205 lib/addons/library.kodi.inputstream/Makefile \
206 tools/Linux/kodi.sh \
207 tools/Linux/kodi-standalone.sh \
208 + tools/Linux/kodi.run \
209 tools/Linux/kodi-xsession.desktop \
210 tools/EventClients/Makefile \
211 tools/EventClients/Clients/OSXRemote/Makefile \
212 @@ -2329,6 +2378,7 @@ AC_SUBST(HAVE_SSE4)
215 AC_SUBST(USE_OPTICAL_DRIVE)
216 +AC_SUBST(VUPLUS_COMPILE)
218 # pushd and popd are not available in other shells besides bash, so implement
219 # our own pushd/popd functions
220 diff --git a/lib/libdvd/Makefile.in b/lib/libdvd/Makefile.in
221 index 5a4508b..11cb139 100644
222 --- a/lib/libdvd/Makefile.in
223 +++ b/lib/libdvd/Makefile.in
224 @@ -4,6 +4,12 @@ ARCH=@ARCH@
228 +ifeq (@VUPLUS_COMPILE@,yes)
229 + DVDNAV_A = @abs_top_srcdir@/tools/depends/target/libdvdnav/dvdnav-install/lib/libdvdnav.a
230 + DVDREAD_A = @abs_top_srcdir@/tools/depends/target/libdvdread/dvdread-install/lib/libdvdread.a
231 + DVDCSS_A = @abs_top_srcdir@/tools/depends/target/libdvdcss/dvdcss-install/lib/libdvdcss.a
234 ifeq (@CROSS_COMPILING@,yes)
235 DEPENDS_DIR = $(shell grep "^PREFIX=/" @abs_top_srcdir@/tools/depends/Makefile.include | sed 's/PREFIX=//g')
236 DVDNAV_A = $(DEPENDS_DIR)/lib/libdvdnav.a
237 @@ -15,6 +21,8 @@ else
238 DVDCSS_A = @abs_top_srcdir@/tools/depends/target/libdvdcss/dvdcss-install/lib/libdvdcss.a
243 SYSDIR = @abs_top_srcdir@/system/players/VideoPlayer
244 SOS = libdvdnav-$(ARCH).so
246 diff --git a/m4/xbmc_arch.m4 b/m4/xbmc_arch.m4
247 index d28f263..a51286d 100644
248 --- a/m4/xbmc_arch.m4
249 +++ b/m4/xbmc_arch.m4
250 @@ -80,4 +80,14 @@ fi
251 if test "$target_platform" = "target_raspberry_pi" ; then
252 AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_ARMEL -DTARGET_RASPBERRY_PI")
255 +case $use_platform in
257 + AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_VUPLUS")
260 + AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_VUPLUS -D_MIPSEL")
265 diff --git a/system/playercorefactory.xml b/system/playercorefactory.xml
266 index be6b721..3e50877 100644
267 --- a/system/playercorefactory.xml
268 +++ b/system/playercorefactory.xml
270 <player name="VideoPlayer" /> placeholder for MPlayer
271 <player name="PAPlayer" audio="true" />
273 + <player name="E2Player" type="ExternalPlayer" audio="false" video="true">
274 + <filename>xbmc.helper</filename>
275 + <args>--url="{1}" --owner="$PPID"</args>
276 + <hidexbmc>true</hidexbmc>
277 + <hideconsole>true</hideconsole>
278 + <warpcursor>none</warpcursor>
282 <rules name="system rules">
285 <!-- pvr radio channels should be played by VideoPlayer because they need buffering -->
286 <rule name="radio" filetypes="pvr" filename=".*/radio/.*" player="VideoPlayer" />
288 + <rule name="dgb" filetypes="*" player="E2Player"/>
291 diff --git a/tools/Linux/kodi.run.in b/tools/Linux/kodi.run.in
293 index 0000000..f1091ca
295 +++ b/tools/Linux/kodi.run.in
299 +/usr/bin/kodi > /dev/null 2>&1 &
301 diff --git a/tools/Linux/kodi.sh.in b/tools/Linux/kodi.sh.in
302 index 9fc75dd..66946fe 100644
303 --- a/tools/Linux/kodi.sh.in
304 +++ b/tools/Linux/kodi.sh.in
305 @@ -25,7 +25,23 @@ prefix="@prefix@"
306 exec_prefix="@exec_prefix@"
307 datarootdir="@datarootdir@"
309 -CRASHLOG_DIR=${CRASHLOG_DIR:-$HOME}
311 +HDD_MOUNT_POINT="$(grep '/media/hdd' /proc/mounts)"
312 +if [ "$HDD_MOUNT_POINT" != "" ]; then
313 + export HOME="/media/hdd"
315 + export HOME="/home/root"
318 +export KODI_TEMP="/tmp/kodi"
319 +CRASHLOG_DIR=${CRASHLOG_DIR:-$KODI_TEMP}
321 +echo "-----------------+ XBMC ENVIRONMENTS +"
322 +echo " + CRASHLOG_DIR : "$CRASHLOG_DIR
323 +echo " + HOME : "$HOME
324 +echo " + HDD_MOUNT_POINT : "$HDD_MOUNT_POINT
327 USERDATA_DIR="${HOME}/.${bin_name}"
330 @@ -161,14 +177,14 @@ while [ $(( $LOOP )) = "1" ]
333 "$LIBDIR/${bin_name}/${bin_name}.bin" $SAVED_ARGS
335 - if [ $(( $RET == 65 )) = "1" ]
336 - then # User requested to restart app
338 - elif [ $(( ($RET >= 131 && $RET <= 136) || $RET == 139 )) = "1" ]
339 - then # Crashed with core dump
343 +# if [ $(( $RET == 65 )) = "1" ]
344 +# then # User requested to restart app
346 +# elif [ $(( ($RET >= 131 && $RET <= 136) || $RET == 139 )) = "1" ]
347 +# then # Crashed with core dump
348 +# print_crash_report
353 diff --git a/tools/depends/configure.ac b/tools/depends/configure.ac
354 index 3626ea5..0da8d18 100644
355 --- a/tools/depends/configure.ac
356 +++ b/tools/depends/configure.ac
357 @@ -186,6 +186,14 @@ case $host in
358 #android builds are always cross
359 cross_compiling="yes"
363 + use_toolchain="${use_toolchain:-/usr}"
364 + platform_cflags="-Os -fPIC -DPIC"
365 + platform_ldflags="-Wl,-rpath-link=$prefix/$deps_dir/lib"
366 + platform_cxxflags="$platform_cflags"
367 + platform_os="linux"
369 arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
370 if test "$use_platform" = "auto"; then
371 if test "x$use_cpu" = "xauto"; then
372 diff --git a/tools/depends/native/JsonSchemaBuilder/Makefile b/tools/depends/native/JsonSchemaBuilder/Makefile
373 index cf5d20b..0bca981 100644
374 --- a/tools/depends/native/JsonSchemaBuilder/Makefile
375 +++ b/tools/depends/native/JsonSchemaBuilder/Makefile
381 ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
382 -include ../../Makefile.include
384 @@ -21,6 +25,7 @@ APPBIN=$(PREFIX)/bin/JsonSchemaBuilder
386 all: .installed-$(PLATFORM)
390 -rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM)
391 cd $(PLATFORM); cp -a $(SOURCE)/* .
392 diff --git a/tools/depends/target/ffmpeg/autobuild.sh b/tools/depends/target/ffmpeg/autobuild.sh
393 index 5c29762..a3e7806 100755
394 --- a/tools/depends/target/ffmpeg/autobuild.sh
395 +++ b/tools/depends/target/ffmpeg/autobuild.sh
396 @@ -134,6 +134,20 @@ tar --strip-components=1 -xf $MYDIR/${ARCHIVE}
398 CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" \
399 ./configure --prefix=$FFMPEG_PREFIX \
400 + --bindir="$FFMPEG_PREFIX/bin" \
401 + --libdir="$FFMPEG_PREFIX/lib" \
402 + --incdir="$FFMPEG_PREFIX/include" \
403 + --pkgconfigdir="$FFMPEG_PREFIX/lib/pkgconfig" \
404 + --target-os=linux \
405 + --enable-cross-compile \
413 + --ranlib="$RANLIB" \
414 --extra-version="kodi-${VERSION}" \
417 diff --git a/tools/depends/target/libdvdcss/Makefile b/tools/depends/target/libdvdcss/Makefile
418 index 518ce2b..6a66382 100644
419 --- a/tools/depends/target/libdvdcss/Makefile
420 +++ b/tools/depends/target/libdvdcss/Makefile
421 @@ -3,7 +3,7 @@ include DVDCSS-VERSION
422 DEPS= DVDCSS-VERSION Makefile
424 ifeq ($(CROSS_COMPILING), yes)
425 - DEPS += ../../Makefile.include
428 ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
429 PREFIX := $(ROOT_DIR)/dvdcss-install
430 @@ -19,8 +19,7 @@ RETRIEVE_TOOL := curl -Ls --create-dirs --retry 10 --retry-delay 3
431 ARCHIVE_TOOL := tar --strip-components=1 -xf
433 # configuration settings
434 -config = --prefix=$(PREFIX) --disable-shared --enable-static --with-pic
436 +config = --build=$(BUILD_SYS) --host=$(HOST_SYS) --prefix=$(PREFIX) --disable-shared --enable-static --with-pic
437 CLEAN_FILES=$(ARCHIVE) $(PLATFORM)
439 GITREV=$(shell git ls-remote $(BASE_URL) $(VERSION) | awk '{print $$1}')
440 diff --git a/tools/depends/target/libdvdnav/Makefile b/tools/depends/target/libdvdnav/Makefile
441 index cd44351..1a27e12 100644
442 --- a/tools/depends/target/libdvdnav/Makefile
443 +++ b/tools/depends/target/libdvdnav/Makefile
444 @@ -3,11 +3,11 @@ include DVDNAV-VERSION
445 DEPS = DVDNAV-VERSION Makefile
447 # configuration settings
448 -config = --prefix=$(PREFIX) --disable-shared --enable-static --with-pic
449 +config = --build=$(BUILD_SYS) --host=$(HOST_SYS) --prefix=$(PREFIX) --disable-shared --enable-static --with-pic
450 EXTRA_CFLAGS = -D_XBMC -DHAVE_DVDCSS_DVDCSS_H
452 ifeq ($(CROSS_COMPILING), yes)
453 - DEPS += ../../Makefile.include
456 ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
457 PREFIX := $(ROOT_DIR)/dvdnav-install
458 diff --git a/tools/depends/target/libdvdread/Makefile b/tools/depends/target/libdvdread/Makefile
459 index 3652f1b..4ef12ac 100644
460 --- a/tools/depends/target/libdvdread/Makefile
461 +++ b/tools/depends/target/libdvdread/Makefile
462 @@ -3,11 +3,11 @@ include DVDREAD-VERSION
463 DEPS = DVDREAD-VERSION Makefile
465 # configuration settings
466 -config = --prefix=$(PREFIX) --disable-shared --enable-static --with-pic
467 +config = --build=$(BUILD_SYS) --host=$(HOST_SYS) --prefix=$(PREFIX) --disable-shared --enable-static --with-pic
468 EXTRA_CFLAGS = -D_XBMC
470 ifeq ($(CROSS_COMPILING), yes)
471 - DEPS += ../../Makefile.include
474 ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
475 PREFIX := $(ROOT_DIR)/dvdread-install
476 diff --git a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
477 index 2ad960c..7d273ff 100644
478 --- a/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
479 +++ b/xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp
480 @@ -672,8 +672,11 @@ void CActiveAESink::EnumerateSinkList(bool force)
482 if (!m_sinkInfoList.empty() && !force)
485 +#if defined(TARGET_VUPLUS)
486 + unsigned int c_retry = 0;
488 unsigned int c_retry = 4;
490 m_sinkInfoList.clear();
491 CAESinkFactory::EnumerateEx(m_sinkInfoList);
492 while(m_sinkInfoList.empty() && c_retry > 0)
493 diff --git a/xbmc/cores/DllLoader/ldt_keeper.h b/xbmc/cores/DllLoader/ldt_keeper.h
494 index 8f14576..b0fcf06 100644
495 --- a/xbmc/cores/DllLoader/ldt_keeper.h
496 +++ b/xbmc/cores/DllLoader/ldt_keeper.h
497 @@ -32,9 +32,14 @@ typedef struct {
502 +#if !defined(__mips__)
503 void Setup_FS_Segment(void);
504 ldt_fs_t* Setup_LDT_Keeper(void);
505 void Restore_LDT_Keeper(ldt_fs_t* ldt_fs);
512 diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/OpenMaxVideo.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/OpenMaxVideo.cpp
513 index 3d5744b..011316a 100644
514 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/OpenMaxVideo.cpp
515 +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/OpenMaxVideo.cpp
516 @@ -68,8 +68,10 @@ using namespace KODI::MESSAGING;
517 #define OMX_VC1_DECODER "OMX.Nvidia.vc1.decode"
519 // EGL extension functions
520 +#ifndef EGL_EGLEXT_PROTOTYPES
521 static PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;
522 static PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR;
525 #if defined(EGL_KHR_reusable_sync)
526 static PFNEGLCREATESYNCKHRPROC eglCreateSyncKHR;
527 @@ -77,6 +79,7 @@ static PFNEGLDESTROYSYNCKHRPROC eglDestroySyncKHR;
528 static PFNEGLCLIENTWAITSYNCKHRPROC eglClientWaitSyncKHR;
531 +#ifndef EGL_EGLEXT_PROTOTYPES
532 #define GETEXTENSION(type, ext) \
535 @@ -86,6 +89,7 @@ do \
536 CLog::Log(LOGERROR, "%s::%s - ERROR getting proc addr of " #ext "\n", CLASSNAME, __func__); \
541 #define OMX_INIT_STRUCTURE(a) \
542 memset(&(a), 0, sizeof(a)); \
543 @@ -718,10 +722,12 @@ void OpenMaxDeleteTextures(void *userdata)
544 EGLDisplay eglDisplay = eglGetCurrentDisplay();
545 EGLContext eglContext = eglGetCurrentContext();
547 +#ifndef EGL_EGLEXT_PROTOTYPES
548 if (!eglDestroyImageKHR)
550 GETEXTENSION(PFNEGLDESTROYIMAGEKHRPROC, eglDestroyImageKHR);
554 DeleteImageInfo *deleteInfo = (DeleteImageInfo*)userdata;
556 @@ -784,6 +790,7 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void)
558 OMX_ERRORTYPE omx_err;
560 +#ifndef EGL_EGLEXT_PROTOTYPES
561 if (!eglCreateImageKHR)
563 GETEXTENSION(PFNEGLCREATEIMAGEKHRPROC, eglCreateImageKHR);
564 @@ -793,6 +800,7 @@ OMX_ERRORTYPE COpenMaxVideo::AllocOMXOutputEGLTextures(void)
565 GETEXTENSION(PFNEGLCLIENTWAITSYNCKHRPROC, eglClientWaitSyncKHR);
570 EGLint attrib = EGL_NONE;
571 OpenMaxVideoBuffer *egl_buffer;
572 @@ -1213,7 +1221,9 @@ void OpenMaxVideoBuffer::ReleaseTexture()
573 // add egl resources to deletion info
574 //! @todo delete from constructor!
575 deleteInfo->egl_image = egl_image;
576 +#if defined(EGL_KHR_reusable_sync)
577 deleteInfo->egl_sync = eglSync;
579 deleteInfo->texture_id = texture_id;
581 if ( g_application.IsCurrentThread() )
582 diff --git a/xbmc/filesystem/FileCache.h b/xbmc/filesystem/FileCache.h
583 index cd3b5c2..082ac33 100644
584 --- a/xbmc/filesystem/FileCache.h
585 +++ b/xbmc/filesystem/FileCache.h
587 #include "threads/CriticalSection.h"
589 #include "threads/Thread.h"
594 @@ -78,7 +77,7 @@ namespace XFILE
595 unsigned m_writeRate;
596 unsigned m_writeRateActual;
597 int64_t m_forwardCacheSize;
598 - std::atomic<int64_t> m_fileSize;
599 + int64_t m_fileSize;
600 unsigned int m_flags;
601 CCriticalSection m_sync;
603 diff --git a/xbmc/input/InputManager.cpp b/xbmc/input/InputManager.cpp
604 index 80c89f0..3957144 100644
605 --- a/xbmc/input/InputManager.cpp
606 +++ b/xbmc/input/InputManager.cpp
607 @@ -511,6 +511,18 @@ bool CInputManager::OnKey(const CKey& key)
611 +#if defined(TARGET_VUPLUS)
612 + switch(key.GetVKey()) {
618 + if (iWin == WINDOW_DIALOG_KEYBOARD)
619 + useKeyboard = false;
625 // use the virtualkeyboard section of the keymap, and send keyboard-specific or navigation
626 diff --git a/xbmc/input/linux/LinuxInputDevices.cpp b/xbmc/input/linux/LinuxInputDevices.cpp
627 index 3875138..e3397d2 100644
628 --- a/xbmc/input/linux/LinuxInputDevices.cpp
629 +++ b/xbmc/input/linux/LinuxInputDevices.cpp
630 @@ -275,6 +275,27 @@ KeyMap keyMap[] = {
631 { 378 , XBMCK_RIGHT }, // Green
632 { 381 , XBMCK_UP }, // Yellow
633 { 366 , XBMCK_DOWN }, // Blue
634 +#if defined(TARGET_VUPLUS)
635 + { KEY_OK , XBMCK_RETURN }, // Ok
636 + { KEY_EXIT , XBMCK_ESCAPE }, // EXIT
637 + { 139 , XBMCK_MENU }, // Menu
638 + { 358 , XBMCK_e }, // EPG
639 + { 370 , XBMCK_l }, // Subtitle
640 + { 377 , XBMCK_z }, // TV
641 + { 385 , XBMCK_j }, // Radio
642 + { 388 , XBMCK_y }, // Teletext
643 + { 392 , XBMCK_o }, // Audio
644 + { 393 , XBMCK_x }, // Unknown
645 + { 398 , XBMCK_F1 }, // Red
646 + { 399 , XBMCK_F2 }, // Green
647 + { 400 , XBMCK_F3 }, // Yellow
648 + { 401 , XBMCK_F4 }, // Blue
649 + { 402 , XBMCK_PAGEUP }, // PageUP
650 + { 403 , XBMCK_PAGEDOWN }, // PageDown
651 + { 407 , XBMCK_MEDIA_NEXT_TRACK }, // Next
652 + { 412 , XBMCK_MEDIA_PREV_TRACK }, // Prev
658 @@ -416,13 +437,14 @@ unsigned short CLinuxInputDevice::KeyboardReadValue(unsigned char table, unsigne
659 entry.kb_index = index;
662 +#if !defined(TARGET_VUPLUS)
663 if (ioctl(m_vt_fd, KDGKBENT, &entry))
665 CLog::Log(LOGWARNING, "CLinuxInputDevice::KeyboardReadValue: KDGKBENT (table: %d, index: %d) "
666 "failed!\n", table, index);
671 return entry.kb_value;
674 @@ -552,6 +574,15 @@ bool CLinuxInputDevice::KeyEvent(const struct input_event& levt, XBMC_Event& dev
680 +#if defined(TARGET_VUPLUS)
681 + if (devt.key.keysym.mod & (XBMCKMOD_SHIFT | XBMCKMOD_CAPS)) keyMapValue = entry.shift;
682 + else if (devt.key.keysym.mod & XBMCKMOD_ALT) keyMapValue = entry.alt;
683 + else if (devt.key.keysym.mod & XBMCKMOD_META) keyMapValue = entry.altShift;
684 + else keyMapValue = entry.base;
685 + devt.key.keysym.unicode = devt.key.keysym.sym;
687 if (GetKeymapEntry(entry))
690 @@ -569,6 +600,7 @@ bool CLinuxInputDevice::KeyEvent(const struct input_event& levt, XBMC_Event& dev
698 @@ -857,6 +889,12 @@ XBMC_Event CLinuxInputDevice::ReadEvent()
702 +#if defined(TARGET_VUPLUS)
703 + if (access("/tmp/playing.lock", F_OK) == 0) {
708 //printf("read event readlen = %d device name %s m_fileName %s\n", readlen, m_deviceName, m_fileName.c_str());
710 // sanity check if we realy read the event
711 @@ -1194,6 +1232,7 @@ bool CLinuxInputDevices::CheckDevice(const char *device)
715 +#if !defined(TARGET_VUPLUS)
716 if (ioctl(fd, EVIOCGRAB, 1) && errno != EINVAL)
719 @@ -1201,6 +1240,7 @@ bool CLinuxInputDevices::CheckDevice(const char *device)
722 ioctl(fd, EVIOCGRAB, 0);
727 @@ -1293,6 +1333,7 @@ bool CLinuxInputDevice::Open()
731 +#if !defined(TARGET_VUPLUS)
733 ret = ioctl(fd, EVIOCGRAB, 1);
734 if (ret && errno != EINVAL)
735 @@ -1301,6 +1342,7 @@ bool CLinuxInputDevice::Open()
741 // Set the socket to non-blocking
743 @@ -1327,7 +1369,7 @@ bool CLinuxInputDevice::Open()
748 +#if !defined(TARGET_VUPLUS)
749 if (m_deviceMinKeyCode >= 0 && m_deviceMaxKeyCode >= m_deviceMinKeyCode)
752 @@ -1339,7 +1381,7 @@ bool CLinuxInputDevice::Open()
754 CLog::Log(LOGWARNING, "no keymap support (requires /dev/tty0 - CONFIG_VT)");
758 /* check if the device has LEDs */
759 ret = ioctl(fd, EVIOCGBIT(EV_LED, sizeof(ledbit)), ledbit);
761 @@ -1367,13 +1409,14 @@ bool CLinuxInputDevice::Open()
764 driver_open_device_error:
766 +#if !defined(TARGET_VUPLUS)
767 ioctl(fd, EVIOCGRAB, 0);
777 @@ -1442,11 +1485,12 @@ bool CLinuxInputDevice::GetKeymapEntry(KeymapEntry& entry)
779 void CLinuxInputDevice::Close()
781 +#if !defined(TARGET_VUPLUS)
783 ioctl(m_fd, EVIOCGRAB, 0);
791 diff --git a/xbmc/platform/xbmc.cpp b/xbmc/platform/xbmc.cpp
792 index 34e5ea6..52cb33a 100644
793 --- a/xbmc/platform/xbmc.cpp
794 +++ b/xbmc/platform/xbmc.cpp
795 @@ -117,5 +117,9 @@ extern "C" int XBMC_Run(bool renderGUI, CFileItemList &playlist)
796 g_RBP.Deinitialize();
799 +#if defined(TARGET_VUPLUS)
800 + system("xbmc.helper --stop");
805 diff --git a/xbmc/utils/CPUInfo.cpp b/xbmc/utils/CPUInfo.cpp
806 index 5e2ebbd..89aecbd 100644
807 --- a/xbmc/utils/CPUInfo.cpp
808 +++ b/xbmc/utils/CPUInfo.cpp
809 @@ -272,8 +272,11 @@ CCPUInfo::CCPUInfo(void)
810 m_fProcTemperature = fopen("/sys/class/hwmon/hwmon0/temp1_input", "r");
811 if (m_fProcTemperature == NULL)
812 m_fProcTemperature = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); // On Raspberry PIs
814 +#if defined(TARGET_VUPLUS)
815 + m_fCPUFreq = fopen ("/sys/devices/platform/brcmstb/cpu_khz", "r");
817 m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
821 m_cpuInfoForFreq = true;
822 @@ -325,6 +328,29 @@ CCPUInfo::CCPUInfo(void)
823 StringUtils::Trim(m_cores[nCurrId].m_strModel);
826 +#if defined(TARGET_VUPLUS)
827 + else if (strncmp(buffer, "system type", strlen("system type"))==0)
829 + char *needle = strstr(buffer, ":");
830 + if (needle && strlen(needle)>3)
833 + m_cpuModel = needle;
834 + m_cores[nCurrId].m_strModel = m_cpuModel;
835 + StringUtils::Trim(m_cores[nCurrId].m_strModel);
838 + else if (strncmp(buffer, "cpu model", strlen("cpu model"))==0)
840 + char *needle = strstr(buffer, ":");
841 + if (needle && strlen(needle)>3)
844 + m_cores[nCurrId].m_strVendor = needle;
845 + StringUtils::Trim(m_cores[nCurrId].m_strVendor);
849 else if (strncmp(buffer, "BogoMIPS", strlen("BogoMIPS"))==0)
851 char *needle = strstr(buffer, ":");
852 diff --git a/xbmc/utils/posix/PosixInterfaceForCLog.cpp b/xbmc/utils/posix/PosixInterfaceForCLog.cpp
853 index a3d4983..0daee19 100644
854 --- a/xbmc/utils/posix/PosixInterfaceForCLog.cpp
855 +++ b/xbmc/utils/posix/PosixInterfaceForCLog.cpp
856 @@ -48,11 +48,19 @@ bool CPosixInterfaceForCLog::OpenLogFile(const std::string &logFilename, const s
859 return false; // file was already opened
860 +#if defined(TARGET_VUPLUS)
861 + if (getenv("SUPPORT_CONSOLE_LOG")) {
862 + m_file = (FILEWRAP*) stdout;
866 + (void)remove(backupOldLogToFilename.c_str()); // if it's failed, try to continue
867 + (void)rename(logFilename.c_str(), backupOldLogToFilename.c_str()); // if it's failed, try to continue
868 + m_file = (FILEWRAP*)fopen(logFilename.c_str(), "wb");
869 +#if defined(TARGET_VUPLUS)
873 - (void)remove(backupOldLogToFilename.c_str()); // if it's failed, try to continue
874 - (void)rename(logFilename.c_str(), backupOldLogToFilename.c_str()); // if it's failed, try to continue
876 - m_file = (FILEWRAP*)fopen(logFilename.c_str(), "wb");
878 return false; // error, can't open log file
880 diff --git a/xbmc/windowing/egl/EGLNativeTypeVuplus.cpp b/xbmc/windowing/egl/EGLNativeTypeVuplus.cpp
882 index 0000000..84e72af
884 +++ b/xbmc/windowing/egl/EGLNativeTypeVuplus.cpp
887 + * Copyright (C) 2011-2017 Team XBMC
890 + * This Program is free software; you can redistribute it and/or modify
891 + * it under the terms of the GNU General Public License as published by
892 + * the Free Software Foundation; either version 2, or (at your option)
893 + * any later version.
895 + * This Program is distributed in the hope that it will be useful,
896 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
897 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
898 + * GNU General Public License for more details.
900 + * You should have received a copy of the GNU General Public License
901 + * along with XBMC; see the file COPYING. If not, see
902 + * <http://www.gnu.org/licenses/>.
906 +#if defined(TARGET_VUPLUS)
909 +#include "EGLNativeTypeVuplus.h"
910 +#include "utils/StringUtils.h"
911 +#include "utils/log.h"
912 +#include "guilib/gui3d.h"
913 +#include "linux/DllBCM.h"
922 +#include "KodiGLESPL.h"
924 +using namespace std;
926 +bool CEGLNativeTypeVuplus::CheckCompatibility()
931 +void CEGLNativeTypeVuplus::Initialize()
935 +void CEGLNativeTypeVuplus::Destroy()
939 +bool CEGLNativeTypeVuplus::CreateNativeDisplay()
941 + GLES_Native_Init();
942 + return GLES_Native_CreateNativeDisplay(&m_nativeDisplay);
945 +bool CEGLNativeTypeVuplus::CreateNativeWindow()
947 + m_nativeWindow = GLES_Native_CreateNativeWindow();
948 + if (!m_nativeWindow) {
954 +bool CEGLNativeTypeVuplus::GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const
956 + *nativeDisplay = (XBNativeDisplayType*) &m_nativeDisplay;
960 +bool CEGLNativeTypeVuplus::GetNativeWindow(XBNativeDisplayType **nativeWindow) const
962 + *nativeWindow = (XBNativeWindowType*) &m_nativeWindow;
966 +bool CEGLNativeTypeVuplus::DestroyNativeDisplay()
968 + GLES_Native_DestroyNativeDisplay();
972 +bool CEGLNativeTypeVuplus::DestroyNativeWindow()
974 + GLES_Native_DestroyNativeWindow();
978 +bool CEGLNativeTypeVuplus::GetNativeResolution(RESOLUTION_INFO *res) const
980 + *res = m_desktopRes;
984 +bool CEGLNativeTypeVuplus::SetNativeResolution(const RESOLUTION_INFO &res)
986 + m_desktopRes = res;
990 +bool CEGLNativeTypeVuplus::ProbeResolutions(std::vector<RESOLUTION_INFO> &resolutions)
992 + resolutions.clear();
994 + m_desktopResAll[0].iScreen = 0;
995 + m_desktopResAll[0].bFullScreen = true;
996 + m_desktopResAll[0].iWidth = 1280;
997 + m_desktopResAll[0].iHeight = 720;
998 + m_desktopResAll[0].iScreenWidth = 1280;
999 + m_desktopResAll[0].iScreenHeight= 720;
1000 + m_desktopResAll[0].dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
1001 + m_desktopResAll[0].fRefreshRate = 50;
1002 + m_desktopResAll[0].strMode = StringUtils::Format("%dx%d", 1280, 720);
1003 + m_desktopResAll[0].strMode = StringUtils::Format("%s @ %.2f%s - Full Screen", m_desktopRes.strMode.c_str(), (float)50,m_desktopRes.dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
1005 + m_desktopResAll[0].iSubtitles = (int)(0.965 * m_desktopResAll[0].iHeight);
1007 + CLog::Log(LOGDEBUG, "EGL initial desktop resolution %s\n", m_desktopResAll[0].strMode.c_str());
1009 + resolutions.push_back(m_desktopResAll[0]);
1011 + m_desktopResAll[1].iScreen = 0;
1012 + m_desktopResAll[1].bFullScreen = true;
1013 + m_desktopResAll[1].iWidth = 1280;
1014 + m_desktopResAll[1].iHeight = 720;
1015 + m_desktopResAll[1].iScreenWidth = 1280;
1016 + m_desktopResAll[1].iScreenHeight= 720;
1017 + m_desktopResAll[1].dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
1019 + m_desktopResAll[1].dwFlags |= D3DPRESENTFLAG_MODE3DSBS;
1020 + m_desktopResAll[1].fRefreshRate = 50;
1021 + m_desktopResAll[1].strMode = StringUtils::Format("%dx%d", 1280, 720);
1022 + m_desktopResAll[1].strMode = StringUtils::Format("%s @ %.2f%s - Full Screen 3DSBS", m_desktopResAll[1].strMode.c_str(), (float)50,m_desktopResAll[1].dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
1024 + m_desktopResAll[1].iSubtitles = (int)(0.965 * m_desktopResAll[1].iHeight);
1026 + CLog::Log(LOGDEBUG, "EGL initial desktop resolution %s\n", m_desktopResAll[1].strMode.c_str());
1028 + resolutions.push_back(m_desktopResAll[1]);
1030 + m_desktopResAll[2].iScreen = 0;
1031 + m_desktopResAll[2].bFullScreen = true;
1032 + m_desktopResAll[2].iWidth = 1280;
1033 + m_desktopResAll[2].iHeight = 720;
1034 + m_desktopResAll[2].iScreenWidth = 1280;
1035 + m_desktopResAll[2].iScreenHeight= 720;
1036 + m_desktopResAll[2].dwFlags = D3DPRESENTFLAG_PROGRESSIVE;
1038 + m_desktopResAll[2].dwFlags |= D3DPRESENTFLAG_MODE3DTB;
1039 + m_desktopResAll[2].fRefreshRate = 50;
1040 + m_desktopResAll[2].strMode = StringUtils::Format("%dx%d", 1280, 720);
1041 + m_desktopResAll[2].strMode = StringUtils::Format("%s @ %.2f%s - Full Screen 3DTB", m_desktopResAll[2].strMode.c_str(), (float)50,m_desktopResAll[2].dwFlags & D3DPRESENTFLAG_INTERLACED ? "i" : "");
1043 + m_desktopResAll[2].iSubtitles = (int)(0.965 * m_desktopResAll[2].iHeight);
1045 + CLog::Log(LOGDEBUG, "EGL initial desktop resolution %s\n", m_desktopResAll[2].strMode.c_str());
1047 + resolutions.push_back(m_desktopResAll[2]);
1049 + m_desktopRes = m_desktopResAll[0];
1054 +bool CEGLNativeTypeVuplus::GetPreferredResolution(RESOLUTION_INFO *res) const
1056 + *res = m_desktopResAll[0];
1060 +bool CEGLNativeTypeVuplus::ShowWindow(bool show)
1065 +#endif /*TARGET_VUPLUS*/
1067 diff --git a/xbmc/windowing/egl/EGLNativeTypeVuplus.h b/xbmc/windowing/egl/EGLNativeTypeVuplus.h
1068 new file mode 100644
1069 index 0000000..aa65dc8
1071 +++ b/xbmc/windowing/egl/EGLNativeTypeVuplus.h
1076 + * Copyright (C) 2011-2017 Team XBMC
1079 + * This Program is free software; you can redistribute it and/or modify
1080 + * it under the terms of the GNU General Public License as published by
1081 + * the Free Software Foundation; either version 2, or (at your option)
1082 + * any later version.
1084 + * This Program is distributed in the hope that it will be useful,
1085 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
1086 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1087 + * GNU General Public License for more details.
1089 + * You should have received a copy of the GNU General Public License
1090 + * along with XBMC; see the file COPYING. If not, see
1091 + * <http://www.gnu.org/licenses/>.
1095 +#if defined(TARGET_VUPLUS)
1097 +#include "EGLNativeType.h"
1102 +class CEGLNativeTypeVuplus : public CEGLNativeType
1105 + CEGLNativeTypeVuplus()
1107 + m_nativeWindow = 0;
1108 + m_nativeDisplay = 0;
1110 + virtual ~CEGLNativeTypeVuplus() {};
1111 + virtual std::string GetNativeName() const { return "vuplus"; };
1112 + virtual bool CheckCompatibility();
1113 + virtual void Initialize();
1114 + virtual void Destroy();
1115 + virtual int GetQuirks() { return EGL_QUIRK_NONE; };
1117 + virtual bool CreateNativeDisplay();
1118 + virtual bool CreateNativeWindow();
1119 + virtual bool GetNativeDisplay(XBNativeDisplayType **nativeDisplay) const;
1120 + virtual bool GetNativeWindow(XBNativeWindowType **nativeWindow) const;
1122 + virtual bool DestroyNativeWindow();
1123 + virtual bool DestroyNativeDisplay();
1125 + virtual bool GetNativeResolution(RESOLUTION_INFO *res) const;
1126 + virtual bool SetNativeResolution(const RESOLUTION_INFO &res);
1127 + virtual bool ProbeResolutions(std::vector<RESOLUTION_INFO> &resolutions);
1128 + virtual bool GetPreferredResolution(RESOLUTION_INFO *res) const;
1130 + virtual bool ShowWindow(bool show);
1132 + RESOLUTION_INFO m_desktopRes;
1133 + RESOLUTION_INFO m_desktopResAll[3];
1136 +#endif /*TARGET_VUPLUS*/
1138 diff --git a/xbmc/windowing/egl/EGLWrapper.cpp b/xbmc/windowing/egl/EGLWrapper.cpp
1139 index 30f5757..ca05ae7 100644
1140 --- a/xbmc/windowing/egl/EGLWrapper.cpp
1141 +++ b/xbmc/windowing/egl/EGLWrapper.cpp
1143 #if defined(TARGET_LINUX) && defined(HAS_LIBAMCODEC)
1144 #include "EGLNativeTypeAmlogic.h"
1146 +#if defined(TARGET_VUPLUS)
1147 + #include "EGLNativeTypeVuplus.h"
1149 #include "EGLWrapper.h"
1151 #define CheckError() m_result = eglGetError(); if(m_result != EGL_SUCCESS) CLog::Log(LOGERROR, "EGL error in %s: %x",__FUNCTION__, m_result);
1152 @@ -101,6 +104,8 @@ bool CEGLWrapper::Initialize(const std::string &implementation)
1153 (nativeGuess = CreateEGLNativeType<CEGLNativeTypeIMX>(implementation))
1154 #elif defined(TARGET_LINUX) && defined(HAS_LIBAMCODEC)
1155 (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlogic>(implementation))
1156 +#elif defined(TARGET_VUPLUS)
1157 + (nativeGuess = CreateEGLNativeType<CEGLNativeTypeVuplus>(implementation))
1161 diff --git a/xbmc/windowing/egl/Makefile.in b/xbmc/windowing/egl/Makefile.in
1162 index 68f7862..7fc6144 100644
1163 --- a/xbmc/windowing/egl/Makefile.in
1164 +++ b/xbmc/windowing/egl/Makefile.in
1165 @@ -12,6 +12,9 @@ endif
1166 ifeq (@USE_IMXVPU@,1)
1167 SRCS+= EGLNativeTypeIMX.cpp
1169 +ifeq (@VUPLUS_COMPILE@,yes)
1170 +SRCS+= EGLNativeTypeVuplus.cpp
1172 SRCS+= EGLWrapper.cpp
1174 LIB = windowing_egl.a