diff options
author | davilla <davilla@4pi.com> | 2014-01-01 14:08:29 -0500 |
---|---|---|
committer | davilla <davilla@4pi.com> | 2014-01-01 14:09:51 -0500 |
commit | b269e8c1191361f7f4e7b8e105452207a749a1ae (patch) | |
tree | 7b5cd2b46dd9f56e0cd507be3bcf03e7a2c7651c | |
parent | 0b98ba2470a091f25a54db0fa6c6c6247afba43d (diff) |
droid: fixed crash, check for configure exceptions and bail if we throw
-rw-r--r-- | xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp | 22 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h | 2 |
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); |