diff options
author | Samuel Mira <samuel.mira@qt.io> | 2021-09-14 10:20:19 +0300 |
---|---|---|
committer | Samuel Mira <samuel.mira@qt.io> | 2021-09-17 13:17:06 +0300 |
commit | c1fdcd241896f3fdf96715b322ac5deb80a13088 (patch) | |
tree | d084f46e7a06d293e21489d158aaa6e6ef98cf68 /src/multimedia | |
parent | f94241cc98e2222c1567bbdef05a3dbd0eb12686 (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
Pick-to: 6.2 6.2.0
Change-Id: I3c31f0ddccb588ab5987b81ae3ba5514724a606b
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/multimedia')
-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 62e12353e..38b819352 100644 --- a/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp +++ b/src/multimedia/platform/android/mediacapture/qandroidcamerasession.cpp @@ -779,10 +779,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()); } |