3#ifndef QFFMPEGHWACCEL_D3D11_P_H
4#define QFFMPEGHWACCEL_D3D11_P_H
17#include <QtFFmpegMediaPluginImpl/private/qffmpeghwaccel_p.h>
18#include <QtCore/private/quniquehandle_types_p.h>
19#include <QtCore/private/qcomptr_p.h>
32using SharedTextureHandle = QUniqueWin32NullHandle;
35
36
37
38
39
40
41
42
43class TextureBridge final
47
48 bool copyToSharedTex(ID3D11Device *dev, ID3D11DeviceContext *ctx,
49 const ComPtr<ID3D11Texture2D> &tex, UINT index,
const QSize &frameSize);
52
53 ComPtr<ID3D11Texture2D> copyFromSharedTex(
const ComPtr<ID3D11Device1> &dev,
54 const ComPtr<ID3D11DeviceContext> &ctx);
57 bool ensureDestTex(
const ComPtr<ID3D11Device1> &dev);
58 bool ensureSrcTex(ID3D11Device *dev,
const ComPtr<ID3D11Texture2D> &tex,
const QSize &frameSize);
59 bool isSrcInitialized(
const ID3D11Device *dev,
const ComPtr<ID3D11Texture2D> &tex,
const QSize &frameSize)
const;
60 bool recreateSrc(ID3D11Device *dev,
const ComPtr<ID3D11Texture2D> &tex,
const QSize &frameSize);
62 SharedTextureHandle m_sharedHandle{};
64 const UINT m_srcKey = 0;
65 ComPtr<ID3D11Texture2D> m_srcTex;
66 ComPtr<IDXGIKeyedMutex> m_srcMutex;
68 const UINT m_destKey = 1;
69 ComPtr<ID3D11Device1> m_destDevice;
70 ComPtr<ID3D11Texture2D> m_destTex;
71 ComPtr<IDXGIKeyedMutex> m_destMutex;
73 ComPtr<ID3D11Texture2D> m_outputTex;
76class D3D11TextureConverter :
public TextureConverterBackend
79 D3D11TextureConverter(QRhi *rhi);
81 QVideoFrameTexturesHandlesUPtr
82 createTextureHandles(AVFrame *frame, QVideoFrameTexturesHandlesUPtr oldHandles) override;
84 static void SetupDecoderTextures(AVCodecContext *s);
87 ComPtr<ID3D11Device1> m_rhiDevice;
88 ComPtr<ID3D11DeviceContext> m_rhiCtx;
89 TextureBridge m_bridge;
92AVFrameUPtr copyFromHwPoolD3D11(AVFrameUPtr src);
AVFrameUPtr copyFromHwPoolD3D11(AVFrameUPtr src)
std::conditional_t< QT_FFMPEG_AVIO_WRITE_CONST, const uint8_t *, uint8_t * > AvioWriteBufferType
void freeTextureAndData(void *opaque, uint8_t *data)
AVBufferRef * wrapTextureAsBuffer(const ComPtr< ID3D11Texture2D > &tex)
ComPtr< ID3D11Device1 > GetD3DDevice(QRhi *rhi)
const AVD3D11VADeviceContext * getHwDeviceContext(const AVHWDeviceContext *ctx)
ComPtr< ID3D11Texture2D > getAvFrameTexture(const AVFrame *frame)
int getAvFramePoolIndex(const AVFrame *frame)
ComPtr< ID3D11Texture2D > copyTexture(const AVD3D11VADeviceContext *hwDevCtx, const AVFrame *src)
#define Q_LOGGING_CATEGORY(name,...)
#define qCCritical(category,...)
#define qCDebug(category,...)