diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2022-11-07 22:33:53 +0100 |
---|---|---|
committer | Artem Dyomin <artem.dyomin@qt.io> | 2022-11-09 12:08:31 +0100 |
commit | 0c2576112d98d5fcadbfb2ee9f407bbc9ad72d85 (patch) | |
tree | a0713d9e2fa4ceed592a7996d2384dc1c7da190a | |
parent | 21d9b0d836d19c177beea7041b603e6847e91861 (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>
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; |