1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QVIDEOFRAMETEXTUREFROMSOURCE_P_H
5#define QVIDEOFRAMETEXTUREFROMSOURCE_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "private/qhwvideobuffer_p.h"
19#include "qvideotexturehelper_p.h"
20
21#include <rhi/qrhi.h>
22
23QT_BEGIN_NAMESPACE
24
25namespace QVideoTextureHelper {
26
27using RhiTextureArray = std::array<std::unique_ptr<QRhiTexture>, TextureDescription::maxPlanes>;
28
29class QVideoFrameTexturesFromRhiTextureArray : public QVideoFrameTextures
30{
31public:
32 QVideoFrameTexturesFromRhiTextureArray(RhiTextureArray &&rhiTextures = {});
33
34 ~QVideoFrameTexturesFromRhiTextureArray() override;
35
36 QRhiTexture *texture(uint plane) const override;
37
38 RhiTextureArray &textureArray() { return m_rhiTextures; }
39
40private:
41 RhiTextureArray m_rhiTextures;
42};
43
44class QVideoFrameTexturesFromMemory : public QVideoFrameTexturesFromRhiTextureArray
45{
46public:
47 using QVideoFrameTexturesFromRhiTextureArray::QVideoFrameTexturesFromRhiTextureArray;
48
49 void setMappedFrame(QVideoFrame mappedFrame);
50
51 ~QVideoFrameTexturesFromMemory() override;
52
53 void onFrameEndInvoked() override;
54
55private:
56 QVideoFrame m_mappedFrame;
57};
58
59class QVideoFrameTexturesFromHandlesSet : public QVideoFrameTexturesFromRhiTextureArray
60{
61public:
62 QVideoFrameTexturesFromHandlesSet(RhiTextureArray &&rhiTextures,
63 QVideoFrameTexturesHandlesUPtr handles);
64
65 ~QVideoFrameTexturesFromHandlesSet() override;
66
67 QVideoFrameTexturesHandlesUPtr takeHandles() override { return std::move(m_textureHandles); }
68
69private:
70 QVideoFrameTexturesHandlesUPtr m_textureHandles;
71};
72
73} // namespace QVideoTextureHelper
74
75QT_END_NAMESPACE
76
77#endif // QVIDEOFRAMETEXTUREFROMSOURCE_P_H
78

source code of qtmultimedia/src/multimedia/video/qvideoframetexturefromsource_p.h