From c1fdcd241896f3fdf96715b322ac5deb80a13088 Mon Sep 17 00:00:00 2001 From: Samuel Mira Date: Tue, 14 Sep 2021 10:20:19 +0300 Subject: 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 Reviewed-by: Assam Boudjelthia --- .../android/mediacapture/qandroidcamerasession.cpp | 5 +++-- .../android/mediaplayer/qandroidmediaplayer.cpp | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) (limited to 'src/multimedia') 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()); } -- cgit v1.2.3