diff options
author | peak3d <pfau@peak3d.de> | 2020-10-01 14:39:57 +0200 |
---|---|---|
committer | peak3d <pfau@peak3d.de> | 2020-10-01 14:39:57 +0200 |
commit | 31aa3149d004a381131c999d15dbfce27bd027fa (patch) | |
tree | 8893fc6d0c7b5a0fa90e3603596b4e2adbad32a6 | |
parent | 16be0948bf1913babf1d563218aca522ed74568c (diff) |
[Android] Fix MediaCodec OES/EGL rendering
-rw-r--r-- | xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp | 18 | ||||
-rw-r--r-- | xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h | 1 |
2 files changed, 6 insertions, 13 deletions
diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp index 597b851c08..36a19170df 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.cpp @@ -314,7 +314,6 @@ CDVDVideoCodecAndroidMediaCodec::CDVDVideoCodecAndroidMediaCodec(CProcessInfo &p , m_formatname("mediacodec") , m_opened(false) , m_jnivideoview(nullptr) -, m_jnisurface(nullptr) , m_textureId(0) , m_OutputDuration(0) , m_fpsDuration(0) @@ -806,10 +805,6 @@ void CDVDVideoCodecAndroidMediaCodec::Dispose() } ReleaseSurfaceTexture(); - if (m_jnisurface) - m_jnisurface->release(); - m_jnisurface = nullptr; - m_InstanceGuard.exchange(false); if (m_render_surface) { @@ -1331,10 +1326,9 @@ bool CDVDVideoCodecAndroidMediaCodec::ConfigureMediaCodec(void) // configure and start the codec. // use the MediaFormat that we have setup. // use a null MediaCrypto, our content is not encrypted. - - int flags = 0; m_codec->configure(mediaformat, m_jnivideosurface, - m_crypto ? *m_crypto : CJNIMediaCrypto(jni::jhobject(NULL)), flags); + m_crypto ? *m_crypto : CJNIMediaCrypto(jni::jhobject(NULL)), 0); + if (xbmc_jnienv()->ExceptionCheck()) { xbmc_jnienv()->ExceptionClear(); @@ -1558,7 +1552,7 @@ void CDVDVideoCodecAndroidMediaCodec::InitSurfaceTexture(void) m_surfaceTexture = std::shared_ptr<CJNISurfaceTexture>(new CJNISurfaceTexture(m_textureId)); // hook the surfaceTexture OnFrameAvailable callback m_frameAvailable = std::shared_ptr<CDVDMediaCodecOnFrameAvailable>(new CDVDMediaCodecOnFrameAvailable(m_surfaceTexture)); - m_jnisurface = new CJNISurface(*m_surfaceTexture); + m_jnivideosurface = CJNISurface(*m_surfaceTexture); } else { @@ -1578,7 +1572,7 @@ void CDVDVideoCodecAndroidMediaCodec::ReleaseSurfaceTexture(void) // it is safe to delete here even though these items // were created in the main thread instance - SAFE_DELETE(m_jnisurface); + m_jnivideosurface = CJNISurface(jni::jhobject(NULL)); m_frameAvailable.reset(); m_surfaceTexture.reset(); @@ -1619,8 +1613,8 @@ void CDVDVideoCodecAndroidMediaCodec::surfaceDestroyed(CJNISurfaceHolder holder) if (m_state != MEDIACODEC_STATE_STOPPED && m_state != MEDIACODEC_STATE_UNINITIALIZED) { m_state = MEDIACODEC_STATE_STOPPED; - if (m_jnisurface) - m_jnisurface->release(); + if (m_jnivideosurface) + m_jnivideosurface.release(); m_codec->stop(); xbmc_jnienv()->ExceptionClear(); } diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h index 9898731861..1f2a90316f 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodecAndroidMediaCodec.h @@ -156,7 +156,6 @@ protected: int m_state; std::shared_ptr<CJNIXBMCVideoView> m_jnivideoview; - CJNISurface* m_jnisurface; CJNISurface m_jnivideosurface; unsigned int m_textureId; std::shared_ptr<CJNIMediaCodec> m_codec; |