summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2022-11-07 22:33:53 +0100
committerArtem Dyomin <artem.dyomin@qt.io>2022-11-09 12:08:31 +0100
commit0c2576112d98d5fcadbfb2ee9f407bbc9ad72d85 (patch)
treea0713d9e2fa4ceed592a7996d2384dc1c7da190a
parent21d9b0d836d19c177beea7041b603e6847e91861 (diff)
Fix ffmpeg compilation and tests on win CI
- fix unused variables - fix screen capture crash - related commit in qt5 fixes ffmpeg build on CI Currently, the build works with msvc and mingw, llvm should be added in the next commits. See build example: https://testresults.qt.io/coin/integration/qt/qtmultimedia/tasks/web_qt_qtmultimedia_1667916985085 Pick-to: 6.4 Change-Id: Ibd27c7520a00899c893a842eef55fa4f30eba948 Reviewed-by: Lars Knoll <lars@knoll.priv.no>
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpeghwaccel_d3d11.cpp3
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi.cpp23
-rw-r--r--src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi_p.h3
3 files changed, 21 insertions, 8 deletions
diff --git a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_d3d11.cpp b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_d3d11.cpp
index f0a6c7b91..34483c9d6 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_d3d11.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpeghwaccel_d3d11.cpp
@@ -31,7 +31,7 @@ public:
: m_tex(tex)
{}
- qint64 textureHandle(int plane) override
+ qint64 textureHandle(int /*plane*/) override
{
return qint64(m_tex.get());
}
@@ -122,7 +122,6 @@ TextureSet *D3D11TextureConverter::getTextures(AVFrame *frame)
if (sharedTex) {
auto tex = copyTextureFromArray(dev, sharedTex.get(), index);
if (tex) {
- QVideoFrameFormat::PixelFormat format = QFFmpegVideoBuffer::toQtPixelFormat(AVPixelFormat(fCtx->sw_format));
return new D3D11TextureSet(std::move(tex));
}
}
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi.cpp b/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi.cpp
index e9348d051..9694bf29f 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi.cpp
+++ b/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi.cpp
@@ -166,6 +166,8 @@ public:
void run() override
{
+ // TODO: refactor with QTimer
+
qCDebug(qLcScreenCaptureDxgi) << "ScreenGrabberActive started";
DXGI_OUTDUPL_DESC outputDesc = {};
@@ -293,7 +295,10 @@ QFFmpegScreenCaptureDxgi::QFFmpegScreenCaptureDxgi(QScreenCapture *screenCapture
{
}
-QFFmpegScreenCaptureDxgi::~QFFmpegScreenCaptureDxgi() = default;
+QFFmpegScreenCaptureDxgi::~QFFmpegScreenCaptureDxgi()
+{
+ resetGrabber();
+}
QVideoFrameFormat QFFmpegScreenCaptureDxgi::format() const
{
@@ -326,11 +331,7 @@ void QFFmpegScreenCaptureDxgi::setActiveInternal(bool active)
return;
if (m_active) {
- m_active->requestInterruption();
- m_active->quit();
- m_active->wait();
- m_active.reset();
-
+ resetGrabber();
} else {
QScreen *screen = m_screen ? m_screen : QGuiApplication::primaryScreen();
auto maybeDxgiScreen = findDxgiScreen(screen);
@@ -371,4 +372,14 @@ void QFFmpegScreenCaptureDxgi::setActive(bool active)
emit screenCapture()->activeChanged(active);
}
+void QFFmpegScreenCaptureDxgi::resetGrabber()
+{
+ if (m_active) {
+ m_active->requestInterruption();
+ m_active->quit();
+ m_active->wait();
+ m_active.reset();
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi_p.h b/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi_p.h
index d90db328e..5c93888bd 100644
--- a/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi_p.h
+++ b/src/plugins/multimedia/ffmpeg/qffmpegscreencapture_dxgi_p.h
@@ -40,6 +40,9 @@ public:
private:
void setActiveInternal(bool active);
+ void resetGrabber();
+
+private:
std::unique_ptr<DxgiScreenGrabberActive> m_active;
QScreen *m_screen = nullptr;
QVideoFrameFormat m_format;