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#include "qvideoframetexturefromsource_p.h"
5
6QT_BEGIN_NAMESPACE
7
8using namespace QVideoTextureHelper;
9
10QVideoFrameTexturesFromRhiTextureArray::QVideoFrameTexturesFromRhiTextureArray(RhiTextureArray &&rhiTextures)
11 : m_rhiTextures(std::move(rhiTextures))
12{
13}
14
15// out-of-line destructor to get arount potential RTTI problems
16QVideoFrameTexturesFromRhiTextureArray::~QVideoFrameTexturesFromRhiTextureArray() = default;
17
18QRhiTexture *QVideoFrameTexturesFromRhiTextureArray::texture(uint plane) const
19{
20 return plane < m_rhiTextures.size() ? m_rhiTextures[plane].get() : nullptr;
21}
22
23void QVideoFrameTexturesFromMemory::setMappedFrame(QVideoFrame mappedFrame) {
24 Q_ASSERT(!mappedFrame.isValid() || mappedFrame.isReadable());
25 m_mappedFrame.unmap();
26 m_mappedFrame = std::move(mappedFrame);
27}
28
29// We keep the source frame mapped until QRhi::endFrame is invoked.
30// QRhi::endFrame ensures that the mapped frame's memory has been loaded into the texture.
31// See QTBUG-123174 for bug's details.
32QVideoFrameTexturesFromMemory::~QVideoFrameTexturesFromMemory()
33{
34 m_mappedFrame.unmap();
35}
36
37void QVideoFrameTexturesFromMemory::onFrameEndInvoked()
38{
39 // After invoking QRhi::endFrame, the texture is loaded, and we don't need to
40 // to store the source mapped frame anymore
41 setMappedFrame({});
42 setSourceFrame({});
43}
44
45QVideoFrameTexturesFromHandlesSet::QVideoFrameTexturesFromHandlesSet(
46 RhiTextureArray &&rhiTextures, QVideoFrameTexturesHandlesUPtr handles)
47 : QVideoFrameTexturesFromRhiTextureArray(std::move(rhiTextures)),
48 m_textureHandles(std::move(handles))
49{
50}
51
52// out-of-line destructor to get arount potential RTTI problems
53QVideoFrameTexturesFromHandlesSet::~QVideoFrameTexturesFromHandlesSet() = default;
54
55QT_END_NAMESPACE
56

Provided by KDAB

Privacy Policy
Start learning QML with our Intro Training
Find out more

source code of qtmultimedia/src/multimedia/video/qvideoframetexturefromsource.cpp