droid: fixed crash, check for configure exceptions and bail if we throw
authordavilla <davilla@4pi.com>
Wed, 1 Jan 2014 19:08:29 +0000 (14:08 -0500)
committerdavilla <davilla@4pi.com>
Wed, 1 Jan 2014 19:09:51 +0000 (14:09 -0500)
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h

index 2e7d7fb..70f75fb 100644 (file)
@@ -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)
index 930d445..3f7d1c4 100644 (file)
@@ -104,7 +104,7 @@ public:
 
 protected:
   void            FlushInternal(void);
-  void            ConfigureMediaCodec(void);
+  bool            ConfigureMediaCodec(void);
   int             GetOutputPicture(void);
   void            OutputFormatChanged(void);