diff options
author | Samuel Mira <samuel.mira@qt.io> | 2021-09-14 10:20:19 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-09-17 11:39:19 +0000 |
commit | e5be82df5d2b1cf546bae3a9bcc75a64275d8411 (patch) | |
tree | 1149a0814bb64033972b4404298331d4754204e3 | |
parent | ca57e062e085f7346812e1a340bb0be49b44d224 (diff) |
Fix Recorder QML example crash on playback
Found the crash was related to a delete videooutput, when changing the
sink to nullptr
Fixes: QTBUG-96282
Change-Id: I3c31f0ddccb588ab5987b81ae3ba5514724a606b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit c1fdcd241896f3fdf96715b322ac5deb80a13088)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp | 5 | ||||
-rw-r--r-- | src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp | 22 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp index 11cfd73f3..1e6ffb3dd 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp @@ -774,10 +774,11 @@ void QAndroidCameraSession::setVideoSink(QVideoSink *sink) return; m_sink = sink; - delete m_textureOutput; - m_textureOutput = nullptr; if (m_sink) { + delete m_textureOutput; + m_textureOutput = nullptr; + m_textureOutput = new QAndroidTextureVideoOutput(this); m_textureOutput->setSurface(m_sink); } diff --git a/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp b/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp index 49ed8fbec..8ae49715e 100644 --- a/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp +++ b/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp @@ -334,23 +334,23 @@ void QAndroidMediaPlayer::setVideoSink(QVideoSink *sink) m_videoSink = sink; if (!m_videoSink) { - if (mVideoOutput) { - delete mVideoOutput; - mVideoOutput = nullptr; - mMediaPlayer->setDisplay(nullptr); - } return; } - if (!mVideoOutput) { - mVideoOutput = new QAndroidTextureVideoOutput(this); - connect(mVideoOutput, &QAndroidTextureVideoOutput::readyChanged, this, - &QAndroidMediaPlayer::onVideoOutputReady); - connect(mMediaPlayer, &AndroidMediaPlayer::timedTextChanged, mVideoOutput, - &QAndroidTextureVideoOutput::setSubtitle); + if (mVideoOutput) { + delete mVideoOutput; + mVideoOutput = nullptr; + mMediaPlayer->setDisplay(nullptr); } + mVideoOutput = new QAndroidTextureVideoOutput(this); + connect(mVideoOutput, &QAndroidTextureVideoOutput::readyChanged, this, + &QAndroidMediaPlayer::onVideoOutputReady); + connect(mMediaPlayer, &AndroidMediaPlayer::timedTextChanged, mVideoOutput, + &QAndroidTextureVideoOutput::setSubtitle); + mVideoOutput->setSurface(sink); + if (mVideoOutput->isReady()) mMediaPlayer->setDisplay(mVideoOutput->surfaceTexture()); } |