aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac30
-rw-r--r--tools/android/packaging/Makefile.in9
-rw-r--r--tools/android/packaging/make_symbols.sh6
-rw-r--r--tools/android/packaging/xbmc/src/org/xbmc/kodi/Splash.java.in17
-rw-r--r--tools/buildsteps/android/package1
-rw-r--r--tools/depends/native/Makefile3
-rw-r--r--tools/depends/native/google-breakpad-native/Makefile45
-rw-r--r--tools/depends/target/Makefile2
-rw-r--r--tools/depends/target/google-breakpad/Makefile43
-rw-r--r--tools/depends/target/xbmc/Makefile2
-rw-r--r--xbmc/Application.cpp4
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp39
-rw-r--r--xbmc/interfaces/python/PythonSwig.cpp.template4
-rw-r--r--xbmc/interfaces/swig/AddonModuleXbmcwsgi.i4
-rw-r--r--xbmc/music/MusicDatabase.cpp3
-rw-r--r--xbmc/settings/AdvancedSettings.cpp4
-rw-r--r--xbmc/xbmc.cpp17
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;