- 
    
Bug
 - 
    Resolution: Fixed
 - 
    
P2: Important
 - 
    None
 - 
    6.10.0 Beta1
 - 
    None
 
- 
        
 - 
        56949fba6 (dev), e4537e764 (6.10), 4ac6d2ea1 (6.9), 67066a8dd (tqtc/lts-6.8), 3a186f566 (tqtc/lts-6.5), f3cae5786 (tqtc/lts-6.5), e86afe0aa (dev), a2ceea402 (6.10), 7ce6a83f4 (6.9), ba4edaafe (tqtc/lts-6.8)
 
Qt Multimedia now provides the impressive FFmpeg plugin, but after some tests with the QML multimedia components, I found that not all the RHI backend configurations can work properly.
| QSG_RHI_BACKEND | QSG_RHI_PREFER_SOFTWARE_RENDERER | FFMpeg Plugin | Windows Plugin | 
|---|---|---|---|
| d3d11 | 0 | ||
| d3d12 | 0 | ||
| opengl | 0 | Crash | |
| vulkan | 0 | Crash | |
| d3d11 | 1 | Dead Lock | |
| d3d12 | 1 | ||
| opengl | 1 | Crash | |
| vulkan | 1 | Crash | 
OpenGL HW/SW Backend
0xC0000005: Access violation reading location 0x00007DF533280000.
>   Qt6Gui.dll!QOpenGLContext::qt_metacast(const char * _clname) Line 154   C++
    [Inline Frame] ffmpegmediaplugin.dll!Microsoft::WRL::ComPtr<ID3D11Device>::InternalAddRef() Line 223    C++
    [Inline Frame] ffmpegmediaplugin.dll!Microsoft::WRL::ComPtr<ID3D11Device>::{ctor}(ID3D11Device * other) Line 254    C++
    [Inline Frame] ffmpegmediaplugin.dll!?A0x99d1b059::GetD3DDevice(QRhi *) Line 36 C++
    [Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::D3D11TextureConverter::{ctor}(QRhi * rhi) Line 275    C++
    [Inline Frame] ffmpegmediaplugin.dll!std::_Construct_in_place(QFFmpeg::D3D11TextureConverter &) Line 265    C++
    [Inline Frame] ffmpegmediaplugin.dll!std::_Ref_count_obj2<QFFmpeg::D3D11TextureConverter>::{ctor}(QRhi * &&) Line 2092  C++
    ffmpegmediaplugin.dll!std::make_shared<QFFmpeg::D3D11TextureConverter,QRhi *>(QRhi * && <_Args_0>) Line 2765    C++
    [Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::updateBackend::__l2::<lambda_1>::operator()(q20::type_identity<QFFmpeg::D3D11TextureConverter>) Line 110    C++
    [Inline Frame] ffmpegmediaplugin.dll!?A0xa51a8272::applyConverterTypeByPixelFormat(AVPixelFormat) Line 54   C++
    ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::updateBackend(AVPixelFormat fmt) Line 108  C++
    [Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::init(AVFrame &) Line 79 C++
    ffmpegmediaplugin.dll!QFFmpegVideoBuffer::createTexturesFromHwFrame(QRhi & rhi, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> & oldTextures) Line 227   C++
    ffmpegmediaplugin.dll!QFFmpegVideoBuffer::mapTextures(QRhi & rhi, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> & oldTextures) Line 204 C++
    Qt6Multimedia.dll!QVideoTextureHelper::createTextures(const QVideoFrame & frame, QRhi & rhi, QRhiResourceUpdateBatch & rub, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> oldTextures) Line 872 C++
    Qt6Multimedia.dll!QVideoFrameTexturePool::updateTextures(QRhi & rhi, QRhiResourceUpdateBatch & rub) Line 22 C++
    [Inline Frame] Qt6MultimediaQuick.dll!QSGVideoMaterial::updateTextures(QRhi *) Line 130 C++
    Qt6MultimediaQuick.dll!QSGVideoMaterialRhiShader::updateUniformData(QSGMaterialShader::RenderState & state, QSGMaterial * newMaterial, QSGMaterial * oldMaterial) Line 157  C++
    Qt6Quick.dll!QSGBatchRenderer::Renderer::updateMaterialDynamicData(QSGBatchRenderer::ShaderManagerShader * sms, QSGMaterialShader::RenderState & renderState, QSGMaterial * material, const QSGBatchRenderer::Batch * batch, QSGBatchRenderer::Element * e, int ubufOffset, int ubufRegionSize, char * directUpdatePtr) Line 2953   C++
    Qt6Quick.dll!QSGBatchRenderer::Renderer::prepareRenderMergedBatch(QSGBatchRenderer::Batch * batch, QSGBatchRenderer::Renderer::PreparedRenderBatch * renderBatch) Line 3269 C++
    Qt6Quick.dll!QSGBatchRenderer::Renderer::prepareRenderPass(QSGBatchRenderer::Renderer::RenderPassContext * ctx) Line 3870   C++
    Qt6Quick.dll!QSGBatchRenderer::Renderer::render() Line 3661 C++
    Qt6Quick.dll!QSGRenderer::renderScene() Line 146    C++
    Qt6Quick.dll!QQuickWindowPrivate::renderSceneGraph() Line 692   C++
    Qt6Quick.dll!QSGRenderThread::syncAndRender() Line 781  C++
    Qt6Quick.dll!QSGRenderThread::run() Line 996    C++
    Qt6Core.dll!QThreadPrivate::start(void * arg) Line 189  C++
    kernel32.dll!BaseThreadInitThunk()  Unknown
    ntdll.dll!RtlUserThreadStart()	Unknown
Vulkan HW/SW Backend
0xC0000005: Access violation reading location 0x00007DF553AA0000.
 	ntdll.dll!LdrpDispatchUserCallTarget()	Unknown
>	[Inline Frame] ffmpegmediaplugin.dll!Microsoft::WRL::ComPtr<ID3D11Device>::InternalAddRef() Line 223	C++
 	[Inline Frame] ffmpegmediaplugin.dll!Microsoft::WRL::ComPtr<ID3D11Device>::{ctor}(ID3D11Device * other) Line 254	C++
 	[Inline Frame] ffmpegmediaplugin.dll!?A0x99d1b059::GetD3DDevice(QRhi *) Line 36	C++
 	[Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::D3D11TextureConverter::{ctor}(QRhi * rhi) Line 275	C++
 	[Inline Frame] ffmpegmediaplugin.dll!std::_Construct_in_place(QFFmpeg::D3D11TextureConverter &) Line 265	C++
 	[Inline Frame] ffmpegmediaplugin.dll!std::_Ref_count_obj2<QFFmpeg::D3D11TextureConverter>::{ctor}(QRhi * &&) Line 2092	C++
 	ffmpegmediaplugin.dll!std::make_shared<QFFmpeg::D3D11TextureConverter,QRhi *>(QRhi * && <_Args_0>) Line 2765	C++
 	[Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::updateBackend::__l2::<lambda_1>::operator()(q20::type_identity<QFFmpeg::D3D11TextureConverter>) Line 110	C++
 	[Inline Frame] ffmpegmediaplugin.dll!?A0xa51a8272::applyConverterTypeByPixelFormat(AVPixelFormat) Line 54	C++
 	ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::updateBackend(AVPixelFormat fmt) Line 108	C++
 	[Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::init(AVFrame &) Line 79	C++
 	ffmpegmediaplugin.dll!QFFmpegVideoBuffer::createTexturesFromHwFrame(QRhi & rhi, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> & oldTextures) Line 227	C++
 	ffmpegmediaplugin.dll!QFFmpegVideoBuffer::mapTextures(QRhi & rhi, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> & oldTextures) Line 204	C++
 	Qt6Multimedia.dll!QVideoTextureHelper::createTextures(const QVideoFrame & frame, QRhi & rhi, QRhiResourceUpdateBatch & rub, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> oldTextures) Line 872	C++
 	Qt6Multimedia.dll!QVideoFrameTexturePool::updateTextures(QRhi & rhi, QRhiResourceUpdateBatch & rub) Line 22	C++
 	[Inline Frame] Qt6MultimediaQuick.dll!QSGVideoMaterial::updateTextures(QRhi *) Line 130	C++
 	Qt6MultimediaQuick.dll!QSGVideoMaterialRhiShader::updateUniformData(QSGMaterialShader::RenderState & state, QSGMaterial * newMaterial, QSGMaterial * oldMaterial) Line 157	C++
 	Qt6Quick.dll!QSGBatchRenderer::Renderer::updateMaterialDynamicData(QSGBatchRenderer::ShaderManagerShader * sms, QSGMaterialShader::RenderState & renderState, QSGMaterial * material, const QSGBatchRenderer::Batch * batch, QSGBatchRenderer::Element * e, int ubufOffset, int ubufRegionSize, char * directUpdatePtr) Line 2953	C++
 	Qt6Quick.dll!QSGBatchRenderer::Renderer::prepareRenderMergedBatch(QSGBatchRenderer::Batch * batch, QSGBatchRenderer::Renderer::PreparedRenderBatch * renderBatch) Line 3269	C++
 	Qt6Quick.dll!QSGBatchRenderer::Renderer::prepareRenderPass(QSGBatchRenderer::Renderer::RenderPassContext * ctx) Line 3870	C++
 	Qt6Quick.dll!QSGBatchRenderer::Renderer::render() Line 3661	C++
 	Qt6Quick.dll!QSGRenderer::renderScene() Line 146	C++
 	Qt6Quick.dll!QQuickWindowPrivate::renderSceneGraph() Line 692	C++
 	Qt6Quick.dll!QSGRenderThread::syncAndRender() Line 781	C++
 	Qt6Quick.dll!QSGRenderThread::run() Line 996	C++
 	Qt6Core.dll!QThreadPrivate::start(void * arg) Line 189	C++
 	kernel32.dll!BaseThreadInitThunk()  Unknown
 	ntdll.dll!RtlUserThreadStart()	Unknown
D3D11 SW Backend
Main Thread
ntdll.dll!NtWaitForSingleObject() Unknown KernelBase.dll!WaitForSingleObjectEx() Unknown > Qt6Core.dll!QWaitConditionPrivate::wait(QWaitConditionEvent * wce, QDeadlineTimer deadline) Line 79 C++ Qt6Core.dll!QWaitCondition::wait(QMutex * mutex, QDeadlineTimer deadline) Line 148 C++ Qt6Quick.dll!QSGThreadedRenderLoop::polishAndSync(QSGThreadedRenderLoop::Window * w, bool inExpose) Line 1688 C++ Qt6Quick.dll!QSGThreadedRenderLoop::handleUpdateRequest(QQuickWindow * window) Line 1428 C++ Qt6Quick.dll!QQuickWindow::event(QEvent * event) Line 1596 C++ [Inline Frame] Qt6Core.dll!QCoreApplicationPrivate::notify_helper(QObject *) Line 1281 C++ [Inline Frame] Qt6Core.dll!doNotify(QObject *) Line 1210 C++ Qt6Core.dll!QCoreApplication::notify(QObject * receiver, QEvent * event) Line 1194 C++ Qt6Core.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1109 C++ Qt6Gui.dll!QPlatformWindow::deliverUpdateRequest() Line 832 C++ Qt6Gui.dll!QPlatformWindow::windowEvent(QEvent * event) Line 477 C++ [Inline Frame] qwindows.dll!QWindowsBaseWindow::windowEvent(QEvent *) Line 1436 C++ qwindows.dll!QWindowsWindow::windowEvent(QEvent * event) Line 2973 C++ [Inline Frame] Qt6Gui.dll!QGuiApplicationPrivate::sendQWindowEventToQPlatformWindow(QWindow *) Line 2124 C++ Qt6Gui.dll!QGuiApplication::notify(QObject * object, QEvent * event) Line 2036 C++ Qt6Core.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1109 C++ [Inline Frame] Qt6Core.dll!QCoreApplication::sendEvent(QObject *) Line 1549 C++ Qt6Core.dll!QEventDispatcherWin32Private::sendTimerEvent(int timerId) Line 417 C++ Qt6Core.dll!QEventDispatcherWin32::event(QEvent * e) Line 911 C++ [Inline Frame] Qt6Core.dll!QCoreApplicationPrivate::notify_helper(QObject *) Line 1281 C++ [Inline Frame] Qt6Core.dll!doNotify(QObject *) Line 1210 C++ Qt6Core.dll!QCoreApplication::notify(QObject * receiver, QEvent * event) Line 1194 C++ Qt6Core.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1109 C++ [Inline Frame] Qt6Core.dll!QCoreApplication::sendEvent(QObject *) Line 1549 C++ Qt6Core.dll!QCoreApplicationPrivate::sendPostedEvents(QObject * receiver, int event_type, QThreadData * data) Line 1889 C++ Qt6Gui.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 44 C++ Qt6Core.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 485 C++ Qt6Gui.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 37 C++ [Inline Frame] Qt6Core.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag>) Line 104 C++ Qt6Core.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 185 C++ Qt6Core.dll!QCoreApplication::exec() Line 1452 C++ qml.exe!main(int argc, char * * argv) Line 658 C++ [Inline Frame] qml.exe!invoke_main() Line 78 C++ qml.exe!__scrt_common_main_seh() Line 288 C++ kernel32.dll!BaseThreadInitThunk() Unknown ntdll.dll!RtlUserThreadStart() Unknown
QSG Render Thread
win32u.dll!NtGdiDdDDIAcquireKeyedMutex2() Unknown d3d11.dll!NDXGI::CDevice::WaitForGPUSyncObject(struct IDXGIResourceInternal *,class NDXGI::CKMResource *,unsigned __int64,unsigned long,union _D3D11_KEYED_MUTEX_PRIVATE_DATA *) Unknown d3d11.dll!NDXGI::CDevice::DXGIAcquireSync(struct IDXGIResourceInternal *,class NDXGI::CKMResource *,unsigned __int64,unsigned long) Unknown d3d11.dll!NDXGI::CResource::AcquireSync(unsigned __int64,unsigned long) Unknown > [Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::TextureBridge::copyToSharedTex(ID3D11Device * dev, ID3D11DeviceContext * ctx, const Microsoft::WRL::ComPtr<ID3D11Texture2D> &) Line 114 C++ ffmpegmediaplugin.dll!QFFmpeg::D3D11TextureConverter::createTextureHandles(AVFrame * frame, std::unique_ptr<QVideoFrameTexturesHandles,std::default_delete<QVideoFrameTexturesHandles>> __formal) Line 317 C++ [Inline Frame] ffmpegmediaplugin.dll!QFFmpeg::TextureConverter::createTextureHandles(AVFrame &) Line 100 C++ ffmpegmediaplugin.dll!QFFmpegVideoBuffer::createTexturesFromHwFrame(QRhi & rhi, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> & oldTextures) Line 238 C++ ffmpegmediaplugin.dll!QFFmpegVideoBuffer::mapTextures(QRhi & rhi, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> & oldTextures) Line 204 C++ Qt6Multimedia.dll!QVideoTextureHelper::createTextures(const QVideoFrame & frame, QRhi & rhi, QRhiResourceUpdateBatch & rub, std::unique_ptr<QVideoFrameTextures,std::default_delete<QVideoFrameTextures>> oldTextures) Line 872 C++ Qt6Multimedia.dll!QVideoFrameTexturePool::updateTextures(QRhi & rhi, QRhiResourceUpdateBatch & rub) Line 22 C++ [Inline Frame] Qt6MultimediaQuick.dll!QSGVideoMaterial::updateTextures(QRhi *) Line 130 C++ Qt6MultimediaQuick.dll!QSGVideoMaterialRhiShader::updateUniformData(QSGMaterialShader::RenderState & state, QSGMaterial * newMaterial, QSGMaterial * oldMaterial) Line 157 C++ Qt6Quick.dll!QSGBatchRenderer::Renderer::updateMaterialDynamicData(QSGBatchRenderer::ShaderManagerShader * sms, QSGMaterialShader::RenderState & renderState, QSGMaterial * material, const QSGBatchRenderer::Batch * batch, QSGBatchRenderer::Element * e, int ubufOffset, int ubufRegionSize, char * directUpdatePtr) Line 2953 C++ Qt6Quick.dll!QSGBatchRenderer::Renderer::prepareRenderMergedBatch(QSGBatchRenderer::Batch * batch, QSGBatchRenderer::Renderer::PreparedRenderBatch * renderBatch) Line 3269 C++ Qt6Quick.dll!QSGBatchRenderer::Renderer::prepareRenderPass(QSGBatchRenderer::Renderer::RenderPassContext * ctx) Line 3870 C++ Qt6Quick.dll!QSGBatchRenderer::Renderer::render() Line 3661 C++ Qt6Quick.dll!QSGRenderer::renderScene() Line 146 C++ Qt6Quick.dll!QQuickWindowPrivate::renderSceneGraph() Line 692 C++ Qt6Quick.dll!QSGRenderThread::syncAndRender() Line 781 C++ Qt6Quick.dll!QSGRenderThread::run() Line 996 C++ Qt6Core.dll!QThreadPrivate::start(void * arg) Line 189 C++ kernel32.dll!BaseThreadInitThunk() Unknown ntdll.dll!RtlUserThreadStart() Unknown
Tested with different systems (Windows 10/11) and graphic cards (Intel UHD Graphics 770 / GeForce RTX 3090), the results are identical.
- depends on
 - 
                    
QTBUG-134607 Video playback crash when setting QQuickWindow GraphicsAPI to Vulkan
-         
 - Closed
 
 -         
 - 
                    
        
        QTBUG-115309
        Implement DirectX texture propagation from FFMPEG to OpenGL RHI
    
-         
 - Reported
 
 -         
 
- relates to
 - 
                    
QTBUG-139932 Check if d3d11 texture conversion work for d3d12 rendering
-         
 - Open
 
 -