diff options
-rw-r--r-- | configure.ac | 30 | ||||
-rw-r--r-- | tools/android/packaging/Makefile.in | 9 | ||||
-rw-r--r-- | tools/android/packaging/make_symbols.sh | 6 | ||||
-rw-r--r-- | tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in | 17 | ||||
-rw-r--r-- | tools/buildsteps/android/package | 1 | ||||
-rw-r--r-- | tools/depends/native/Makefile | 3 | ||||
-rw-r--r-- | tools/depends/native/google-breakpad-native/Makefile | 45 | ||||
-rw-r--r-- | tools/depends/target/Makefile | 2 | ||||
-rw-r--r-- | tools/depends/target/google-breakpad/Makefile | 43 | ||||
-rw-r--r-- | tools/depends/target/xbmc/Makefile | 2 | ||||
-rw-r--r-- | xbmc/Application.cpp | 4 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp | 39 | ||||
-rw-r--r-- | xbmc/interfaces/python/PythonSwig.cpp.template | 4 | ||||
-rw-r--r-- | xbmc/interfaces/swig/AddonModuleXbmcwsgi.i | 4 | ||||
-rw-r--r-- | xbmc/music/MusicDatabase.cpp | 3 | ||||
-rw-r--r-- | xbmc/settings/AdvancedSettings.cpp | 4 | ||||
-rw-r--r-- | xbmc/xbmc.cpp | 17 |
17 files changed, 197 insertions, 36 deletions
diff --git a/configure.ac b/configure.ac index b377e8c1d2..71c1ac5159 100644 --- a/configure.ac +++ b/configure.ac @@ -221,6 +221,8 @@ libcap_disabled="== Capabilities detection support disabled. ==" libcap_not_found="== Could not find libcap. Capabilities detection support disabled. ==" gtest_enabled="== Google Test Framework will be configured. ==" gtest_disabled="== Google Test Framework will not be configured. ==" +breakpad_enabled="== Google Breakpad will be configured. ==" +breakpad_disabled="== Google Breakpad Framework will not be configured. ==" libudev_not_found="== Could not find libudev. Will use polling to check for device changes. ==" libudev_disabled="== udev support disabled. Will use polling to check for device changes. ==" @@ -543,6 +545,12 @@ AC_ARG_ENABLE([gtest], [configure_gtest=$enableval], [configure_gtest=yes]) +AC_ARG_ENABLE([breakpad], + [AS_HELP_STRING([--enable-breakpad], + [configure Google Breakpad (default is no)])], + [use_breakpad=$enableval], + [use_breakpad=no]) + AC_ARG_ENABLE([codec], [AS_HELP_STRING([--enable-codec], [enable additional codecs from a list of comma separated names, (default is none, choices are amcodec, libstagefright and imxvpu)])], @@ -777,7 +785,11 @@ else DEBUG_FLAGS="-pg -DNDEBUG=1" else final_message="$final_message\n Profiling:\tNo" - DEBUG_FLAGS="-DNDEBUG=1" + if test "$use_breakpad" = "yes"; then + DEBUG_FLAGS="-g -DNDEBUG=1" + else + DEBUG_FLAGS="-DNDEBUG=1" + fi fi fi CFLAGS="$DEBUG_FLAGS $CFLAGS" @@ -2296,6 +2308,21 @@ else SKIP_CONFIG_GTEST=1 fi +# Google Breakpad +if test "$use_breakpad" = "yes"; then + USE_BREAKPAD=1 + PKG_CHECK_MODULES([BREAKPAD], [breakpad-client], + [INCLUDES="$INCLUDES $BREAKPAD_CFLAGS"; LIBS="$LIBS $BREAKPAD_LIBS"], + AC_MSG_ERROR("breakpad-client not found")) + AC_DEFINE([HAVE_BREAKPAD],[1],["Define to 1 if Google Breakpad is installed"]) + AC_MSG_NOTICE($breakpad_enabled) + final_message="$final_message\n Google Breakpad Configured:\tYes" +else + AC_MSG_NOTICE($breakpad_disabled) + final_message="$final_message\n Google Breakpad Configured:\tNo" + USE_BREAKPAD=0 +fi + if test "$use_avahi" = "yes"; then final_message="$final_message\n Avahi:\tYes" else @@ -2630,6 +2657,7 @@ AC_SUBST(UPNP_DEFINES) AC_SUBST(USE_SSE4) AC_SUBST(USE_MMAL) AC_SUBST(USE_X11) +AC_SUBST(USE_BREAKPAD) # pushd and popd are not available in other shells besides bash, so implement # our own pushd/popd functions diff --git a/tools/android/packaging/Makefile.in b/tools/android/packaging/Makefile.in index 69bc9ffc54..15f2ba7cc3 100644 --- a/tools/android/packaging/Makefile.in +++ b/tools/android/packaging/Makefile.in @@ -72,6 +72,12 @@ apk-noobb: apk-clean package apk-sign xbmc/assets: mkdir -p xbmc/assets +symbols: libs +ifeq (1,@USE_BREAKPAD@) + for f in xbmc/obj/local/$(CPU)/*.so; do sh ./make_symbols.sh $$f; done + tar -cjf @APP_NAME@.symbols-$(CPU)-`$(XBMCROOT)/tools/darwin/packaging/gitrev-posix`.tar.bz2 symbols +endif + shared: mkdir -p assets cp -rfp $(PREFIX)/share/@APP_NAME_LC@/* ./assets @@ -133,7 +139,7 @@ xbmc/classes.dex: res @javac -classpath $(SDKROOT)/platforms/$(SDK_PLATFORM)/android.jar:xbmc/obj -d xbmc/obj -sourcepath xbmc/src xbmc/src/org/xbmc/@APP_NAME_LC@/*.java @$(DX) --dex --output=xbmc/classes.dex xbmc/obj -package: libs python xbmc/classes.dex +package: libs symbols python xbmc/classes.dex @echo "Creating package..." @cp images/@APP_NAME_LC@app-debug-skeleton.apk images/@APP_NAME_LC@app-debug-$(CPU)-unaligned.apk @cd xbmc; $(ZIP) -r -q ../images/@APP_NAME_LC@app-debug-$(CPU)-unaligned.apk lib/$(CPU) assets classes.dex @@ -152,6 +158,7 @@ $(SRCLIBS): apk-clean: rm -rf images + rm -rf symbols rm -rf xbmc/lib rm -rf xbmc/libs rm -rf xbmc/assets diff --git a/tools/android/packaging/make_symbols.sh b/tools/android/packaging/make_symbols.sh new file mode 100644 index 0000000000..7961ce4dab --- /dev/null +++ b/tools/android/packaging/make_symbols.sh @@ -0,0 +1,6 @@ +FN=$(basename "$1") +dump_syms "$1" > $FN.sym +HASH=`head -n 1 $FN.sym | cut -d " " -f 4` +mkdir -p symbols/$FN/$HASH +mv $FN.sym symbols/$FN/$HASH +echo "$FN.sym generated" diff --git a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in index 0e2e44e1e3..ce65b8a192 100644 --- a/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in +++ b/tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in @@ -96,7 +96,7 @@ public class Splash extends Activity { mSplash.mState = msg.what; switch(mSplash.mState) { case InError: - mSplash.finish(); + showErrorDialog(mSplash, "Error", mErrorMsg); break; case Checking: break; @@ -122,6 +122,9 @@ public class Splash extends Activity { sendEmptyMessage(StartingXBMC); else { SetupEnvironment(); + if (mState == InError) { + sendEmptyMessage(InError); + } if (fXbmcHome.exists() && fXbmcHome.lastModified() >= fPackagePath.lastModified() && !mInstallLibs) { mState = CachingDone; mCachingDone = true; @@ -268,7 +271,6 @@ public class Splash extends Activity { protected void onPostExecute(Integer result) { super.onPostExecute(result); if (result < 0) { - showErrorDialog(mSplash, "Error", mErrorMsg); mState = InError; } @@ -276,11 +278,11 @@ public class Splash extends Activity { } } - public void showErrorDialog(Context context, String title, String message) { + public void showErrorDialog(final Activity act, final String title, final String message) { if (myAlertDialog != null && myAlertDialog.isShowing()) return; - AlertDialog.Builder builder = new AlertDialog.Builder(context); + AlertDialog.Builder builder = new AlertDialog.Builder(act); builder.setTitle(title); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setMessage(Html.fromHtml(message)); @@ -288,6 +290,7 @@ public class Splash extends Activity { new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int arg1) { dialog.dismiss(); + act.finish(); } }); builder.setCancelable(false); @@ -640,13 +643,13 @@ public class Splash extends Activity { SetupEnvironment(); MigrateUserData(); - if (fXbmcHome.exists() && fXbmcHome.lastModified() >= fPackagePath.lastModified() && !mInstallLibs) { + if (mState != InError && fXbmcHome.exists() && fXbmcHome.lastModified() >= fPackagePath.lastModified() && !mInstallLibs) { mState = CachingDone; mCachingDone = true; } } - if (mCachingDone && mExternalStorageChecked) { + if (mState != InError && mCachingDone && mExternalStorageChecked) { startXBMC(); return; } @@ -656,7 +659,7 @@ public class Splash extends Activity { mTextView = (TextView) findViewById(R.id.textView1); if (mState == InError) { - showErrorDialog(this, "Error", mErrorMsg); + mStateMachine.sendEmptyMessage(InError); return; } diff --git a/tools/buildsteps/android/package b/tools/buildsteps/android/package index 5501d35ded..cbbfb731c7 100644 --- a/tools/buildsteps/android/package +++ b/tools/buildsteps/android/package @@ -18,3 +18,4 @@ if [ -f *.obb ] then mv *.obb $UPLOAD_FILENAME.obb fi +mv tools/android/packaging/Kodi.symbols*.tar.bz2 $ANDROID_DEV_ROOT/debug-symbols/ diff --git a/tools/depends/native/Makefile b/tools/depends/native/Makefile index 9b42c196d2..1538ed9600 100644 --- a/tools/depends/native/Makefile +++ b/tools/depends/native/Makefile @@ -9,7 +9,8 @@ NATIVE= m4-native gettext-native autoconf-native automake-native \ gas-preprocessor-native python26-native zlib-native \ pcre-native swig-native rpl-native libsdl_image-native libsquish-native \ tiff-native libpng-native libjpeg-turbo-native liblzo2-native giflib-native \ - libsdl-native distribute-native distutilscross-native JsonSchemaBuilder TexturePacker + libsdl-native distribute-native distutilscross-native JsonSchemaBuilder TexturePacker \ + google-breakpad-native ifeq ($(OS),ios) diff --git a/tools/depends/native/google-breakpad-native/Makefile b/tools/depends/native/google-breakpad-native/Makefile new file mode 100644 index 0000000000..282f1f5edd --- /dev/null +++ b/tools/depends/native/google-breakpad-native/Makefile @@ -0,0 +1,45 @@ +include ../../Makefile.include +DEPS= ../../Makefile.include Makefile + +PREFIX=$(NATIVEPREFIX) +PLATFORM=$(NATIVEPLATFORM) + +# lib name, version +LIBNAME=google-breakpad +VERSION=1434 +ARCHIVE=$(LIBNAME)-$(VERSION).tar.bz2 + +LIBDYLIB=$(PLATFORM)/src/client/linux/libbreakpad_client.a + +# configuration settings +CONFIGURE= ./configure --prefix=$(PREFIX) + +CLEAN_FILES=$(ARCHIVE) $(PLATFORM) + +all: .installed-$(PLATFORM) + +$(TARBALLS_LOCATION)/$(ARCHIVE): + cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS) + rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) + cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + cd $(PLATFORM); $(CONFIGURE) + +$(LIBDYLIB): $(PLATFORM) + $(MAKE) -C $(PLATFORM) + +.installed-$(PLATFORM): $(LIBDYLIB) + $(MAKE) -C $(PLATFORM) install + cp -Rf $(PLATFORM)/src/common/android/include/* $(PREFIX)/include/breakpad/ + mkdir -p $(PREFIX)/include/breakpad/client/linux/dump_writer_common + cp -f $(PLATFORM)/src/client/linux/dump_writer_common/*.h $(PREFIX)/include/breakpad/client/linux/dump_writer_common/ + touch $@ + +clean: + $(MAKE) -C $(PLATFORM) clean + rm -f .installed-$(PLATFORM) + +distclean:: + rm -rf $(PLATFORM) .installed-$(PLATFORM) + diff --git a/tools/depends/target/Makefile b/tools/depends/target/Makefile index 4cb3dcf09b..89612f42f9 100644 --- a/tools/depends/target/Makefile +++ b/tools/depends/target/Makefile @@ -36,7 +36,7 @@ ifeq ($(OS),osx) endif ifeq ($(OS),android) - DEPENDS += mdnsresponder android-sources-ics + DEPENDS += mdnsresponder android-sources-ics google-breakpad endif DEPENDS := $(filter-out $(EXCLUDED_DEPENDS),$(DEPENDS)) diff --git a/tools/depends/target/google-breakpad/Makefile b/tools/depends/target/google-breakpad/Makefile new file mode 100644 index 0000000000..e9b140c799 --- /dev/null +++ b/tools/depends/target/google-breakpad/Makefile @@ -0,0 +1,43 @@ +include ../../Makefile.include +DEPS= ../../Makefile.include Makefile + +# lib name, version +LIBNAME=google-breakpad +VERSION=1434 +ARCHIVE=$(LIBNAME)-$(VERSION).tar.bz2 + +LIBDYLIB=$(PLATFORM)/src/client/linux/libbreakpad_client.a + +# configuration settings +CONFIGURE= ./configure --prefix=$(PREFIX) \ + --disable-processor --disable-tools + +CLEAN_FILES=$(ARCHIVE) $(PLATFORM) + +all: .installed-$(PLATFORM) + +$(TARBALLS_LOCATION)/$(ARCHIVE): + cd $(TARBALLS_LOCATION); $(RETRIEVE_TOOL) $(RETRIEVE_TOOL_FLAGS) $(BASE_URL)/$(ARCHIVE) + +$(PLATFORM): $(TARBALLS_LOCATION)/$(ARCHIVE) $(DEPS) + rm -rf $(PLATFORM)/*; mkdir -p $(PLATFORM) + cd $(PLATFORM); $(ARCHIVE_TOOL) $(ARCHIVE_TOOL_FLAGS) $(TARBALLS_LOCATION)/$(ARCHIVE) + cd $(PLATFORM); $(CONFIGURE) + +$(LIBDYLIB): $(PLATFORM) + $(MAKE) -C $(PLATFORM) + +.installed-$(PLATFORM): $(LIBDYLIB) + $(MAKE) -C $(PLATFORM) install + cp -Rf $(PLATFORM)/src/common/android/include/* $(PREFIX)/include/breakpad/ + mkdir -p $(PREFIX)/include/breakpad/client/linux/dump_writer_common + cp -f $(PLATFORM)/src/client/linux/dump_writer_common/*.h $(PREFIX)/include/breakpad/client/linux/dump_writer_common/ + touch $@ + +clean: + $(MAKE) -C $(PLATFORM) clean + rm -f .installed-$(PLATFORM) + +distclean:: + rm -rf $(PLATFORM) .installed-$(PLATFORM) + diff --git a/tools/depends/target/xbmc/Makefile b/tools/depends/target/xbmc/Makefile index 9b0263913d..2371fd0213 100644 --- a/tools/depends/target/xbmc/Makefile +++ b/tools/depends/target/xbmc/Makefile @@ -13,7 +13,7 @@ CONFIGURE = cp -f $(CONFIG_SUB) $(CONFIG_GUESS) build-aux/ ;\ ./configure --prefix=$(PREFIX) $(DEBUG) ifeq ($(OS),android) -CONFIGURE += --enable-codec=libstagefright,amcodec +CONFIGURE += --enable-codec=libstagefright,amcodec --enable-breakpad endif ifeq ($(Configuration),Release) diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 69b1cd789c..d88b9c5ca5 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -2404,9 +2404,9 @@ bool CApplication::OnAction(const CAction &action) step *= action.GetRepeat() * 50; // 50 fps #endif if (action.GetID() == ACTION_VOLUME_UP) - volume += (float)fabs(action.GetAmount()) * action.GetAmount() * step; + volume += action.GetAmount() * action.GetAmount() * step; else - volume -= (float)fabs(action.GetAmount()) * action.GetAmount() * step; + volume -= action.GetAmount() * action.GetAmount() * step; SetVolume(volume, false); } // show visual feedback of volume change... diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp index 1dbd2c83ed..8c7d4a11d3 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp @@ -910,23 +910,19 @@ static int divx3_write_header(am_private_t *para, am_packet_t *pkt) static int h264_add_header(unsigned char *buf, int size, am_packet_t *pkt) { - // h264 annex-b - if ((buf[0]==0 && buf[1]==0 && buf[2]==0 && buf[3]==1) && size < HDR_BUF_SIZE) { - CLog::Log(LOGDEBUG, "add four byte NAL 264 header in stream before header len=%d",size); - memcpy(pkt->hdr->data, buf, size); - pkt->hdr->size = size; - return PLAYER_SUCCESS; - } - - if ((buf[0]==0 && buf[1]==0 && buf[2]==1) && size < HDR_BUF_SIZE) { - CLog::Log(LOGDEBUG, "add three byte NAL 264 header in stream before header len=%d",size); - memcpy(pkt->hdr->data, buf, size); - pkt->hdr->size = size; - return PLAYER_SUCCESS; + if (size > HDR_BUF_SIZE) + { + free(pkt->hdr->data); + pkt->hdr->data = (char *)malloc(size); + if (!pkt->hdr->data) + return PLAYER_NOMEM; } - return PLAYER_FAILED; + memcpy(pkt->hdr->data, buf, size); + pkt->hdr->size = size; + return PLAYER_SUCCESS; } + static int h264_write_header(am_private_t *para, am_packet_t *pkt) { // CLog::Log(LOGDEBUG, "h264_write_header"); @@ -948,6 +944,14 @@ static int h264_write_header(am_private_t *para, am_packet_t *pkt) static int hevc_add_header(unsigned char *buf, int size, am_packet_t *pkt) { + if (size > HDR_BUF_SIZE) + { + free(pkt->hdr->data); + pkt->hdr->data = (char *)malloc(size); + if (!pkt->hdr->data) + return PLAYER_NOMEM; + } + memcpy(pkt->hdr->data, buf, size); pkt->hdr->size = size; return PLAYER_SUCCESS; @@ -1554,7 +1558,7 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints) if (am_private->stream_type == AM_STREAM_ES && am_private->video_codec_tag != 0) am_private->video_codec_type = codec_tag_to_vdec_type(am_private->video_codec_tag); - else + if (am_private->video_codec_type == VIDEO_DEC_FORMAT_UNKNOW) am_private->video_codec_type = codec_tag_to_vdec_type(am_private->video_codec_id); am_private->flv_flag = 0; @@ -1734,6 +1738,10 @@ void CAMLCodec::CloseDecoder() SysfsUtils::SetInt("/sys/class/tsync/enable", 1); ShowMainVideo(false); + + // add a little delay after closing in case + // we are reopened too fast. + usleep(500 * 1000); } void CAMLCodec::Reset() @@ -2128,6 +2136,7 @@ void CAMLCodec::GetRenderFeatures(Features &renderFeatures) renderFeatures.push_back(RENDERFEATURE_BRIGHTNESS); renderFeatures.push_back(RENDERFEATURE_STRETCH); renderFeatures.push_back(RENDERFEATURE_PIXEL_RATIO); + renderFeatures.push_back(RENDERFEATURE_ROTATION); return; } diff --git a/xbmc/interfaces/python/PythonSwig.cpp.template b/xbmc/interfaces/python/PythonSwig.cpp.template index 8a009a606b..e6b7c59421 100644 --- a/xbmc/interfaces/python/PythonSwig.cpp.template +++ b/xbmc/interfaces/python/PythonSwig.cpp.template @@ -953,3 +953,7 @@ namespace PythonBindings } } // end PythonBindings namespace for python type definitions + +<% +Helper.getInsertNodes(module, 'footer').each { %>${Helper.unescape(it)}<% } +%> diff --git a/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i b/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i index 6d5d520185..3ed481c2d0 100644 --- a/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i +++ b/xbmc/interfaces/swig/AddonModuleXbmcwsgi.i @@ -18,7 +18,7 @@ * */ -%{ +%begin %{ #include "system.h" #ifdef HAS_WEB_SERVER @@ -56,7 +56,7 @@ using namespace xbmcwsgi; %include "interfaces/legacy/wsgi/WsgiResponse.h" %include "interfaces/legacy/wsgi/WsgiResponseBody.h" -%{ +%insert("footer") %{ #endif %} diff --git a/xbmc/music/MusicDatabase.cpp b/xbmc/music/MusicDatabase.cpp index 8497507e90..9cd434e471 100644 --- a/xbmc/music/MusicDatabase.cpp +++ b/xbmc/music/MusicDatabase.cpp @@ -181,9 +181,6 @@ void CMusicDatabase::CreateTables() CLog::Log(LOGINFO, "create cue table"); m_pDS->exec("CREATE TABLE cue (idPath integer, strFileName text, strCuesheet text)"); - - // Add 'Karaoke' genre - AddGenre( "Karaoke" ); } void CMusicDatabase::CreateAnalytics() diff --git a/xbmc/settings/AdvancedSettings.cpp b/xbmc/settings/AdvancedSettings.cpp index 4598624b4a..fbfd89b963 100644 --- a/xbmc/settings/AdvancedSettings.cpp +++ b/xbmc/settings/AdvancedSettings.cpp @@ -221,8 +221,8 @@ void CAdvancedSettings::Initialize() m_folderStackRegExps.push_back("((cd|dvd|dis[ck])[0-9]+)$"); m_videoStackRegExps.clear(); - m_videoStackRegExps.push_back("(.*?)([ _.-]*(?:cd|dvd|p(?:(?:ar)?t)|dis[ck]|d)[ _.-]*[0-9]+)(.*?)(\\.[^.]+)$"); - m_videoStackRegExps.push_back("(.*?)([ _.-]*(?:cd|dvd|p(?:(?:ar)?t)|dis[ck]|d)[ _.-]*[a-d])(.*?)(\\.[^.]+)$"); + m_videoStackRegExps.push_back("(.*?)([ _.-]*(?:cd|dvd|p(?:(?:ar)?t)|dis[ck])[ _.-]*[0-9]+)(.*?)(\\.[^.]+)$"); + m_videoStackRegExps.push_back("(.*?)([ _.-]*(?:cd|dvd|p(?:(?:ar)?t)|dis[ck])[ _.-]*[a-d])(.*?)(\\.[^.]+)$"); m_videoStackRegExps.push_back("(.*?)([ ._-]*[a-d])(.*?)(\\.[^.]+)$"); // This one is a bit too greedy to enable by default. It will stack sequels // in a flat dir structure, but is perfectly safe in a dir-per-vid one. diff --git a/xbmc/xbmc.cpp b/xbmc/xbmc.cpp index 4d1047edd9..57d2158685 100644 --- a/xbmc/xbmc.cpp +++ b/xbmc/xbmc.cpp @@ -25,6 +25,11 @@ #include "linux/RBP.h" #endif +#if defined(HAVE_BREAKPAD) +#include "filesystem/SpecialProtocol.h" +#include "client/linux/handler/exception_handler.h" +#endif + extern "C" int XBMC_Run(bool renderGUI) { int status = -1; @@ -47,6 +52,18 @@ extern "C" int XBMC_Run(bool renderGUI) return status; } +#if defined(HAVE_BREAKPAD) + // Must have our TEMP dir fixed first + std::string tempPath = CSpecialProtocol::TranslatePath("special://temp/"); + google_breakpad::MinidumpDescriptor descriptor(tempPath.c_str()); + google_breakpad::ExceptionHandler eh(descriptor, + NULL, + NULL, + NULL, + true, + -1); +#endif + #ifdef TARGET_RASPBERRY_PI if(!g_RBP.Initialize()) return false; |