aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavilla <davilla@4pi.com>2014-01-01 14:08:29 -0500
committerdavilla <davilla@4pi.com>2014-01-01 14:09:51 -0500
commitb269e8c1191361f7f4e7b8e105452207a749a1ae (patch)
tree7b5cd2b46dd9f56e0cd507be3bcf03e7a2c7651c
parent0b98ba2470a091f25a54db0fa6c6c6247afba43d (diff)
droid: fixed crash, check for configure exceptions and bail if we throw
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp22
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h2
2 files changed, 20 insertions, 4 deletions
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
index 2e7d7fb853..70f75fb329 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
@@ -426,7 +426,12 @@ bool CDVDVideoCodecAndroidMediaCodec::Open(CDVDStreamInfo &hints, CDVDCodecOptio
}
}
- ConfigureMediaCodec();
+ if (!ConfigureMediaCodec())
+ {
+ m_codec.reset();
+ SAFE_DELETE(m_bitstream);
+ return false;
+ }
// setup a YUV420P DVDVideoPicture buffer.
// first make sure all properties are reset.
@@ -691,7 +696,7 @@ void CDVDVideoCodecAndroidMediaCodec::FlushInternal()
}
}
-void CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
+bool CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
{
// setup a MediaFormat to match the video content,
// used by codec during configure
@@ -740,12 +745,23 @@ void CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void)
{
m_codec->configure(mediaformat, *m_surface, crypto, flags);
}
+ // always, check/clear jni exceptions.
+ if (xbmc_jnienv()->ExceptionOccurred())
+ {
+ xbmc_jnienv()->ExceptionClear();
+ return false;
+ }
- m_codec->start();
+ m_codec->start();
// always, check/clear jni exceptions.
if (xbmc_jnienv()->ExceptionOccurred())
+ {
xbmc_jnienv()->ExceptionClear();
+ return false;
+ }
+
+ return true;
}
int CDVDVideoCodecAndroidMediaCodec::GetOutputPicture(void)
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h
index 930d445dd3..3f7d1c4ecd 100644
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h
@@ -104,7 +104,7 @@ public:
protected:
void FlushInternal(void);
- void ConfigureMediaCodec(void);
+ bool ConfigureMediaCodec(void);
int GetOutputPicture(void);
void OutputFormatChanged(void);