Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qabstractvideobuffer.cpp
Go to the documentation of this file.
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
"qabstractvideobuffer.h"
5
6
QT_BEGIN_NAMESPACE
7
8
/*!
9
\class QAbstractVideoBuffer
10
\since 6.8
11
\brief The QAbstractVideoBuffer class is an abstraction for video data.
12
\inmodule QtMultimedia
13
\ingroup multimedia
14
\ingroup multimedia_video
15
16
The \l QVideoFrame class makes use of a QAbstractVideoBuffer internally to reference a buffer of
17
video data. Creating a subclass of QAbstractVideoBuffer allows you to construct video
18
frames from preallocated or static buffers. The subclass can contain a hardware buffer,
19
and implement access to the data by mapping the buffer to CPU memory.
20
21
The contents of a buffer can be accessed by mapping the buffer to memory using the map()
22
function, which returns a structure containing information about plane layout of the current
23
video data.
24
25
\sa QVideoFrame, QVideoFrameFormat, QVideoFrame::MapMode
26
*/
27
28
/*!
29
\class QAbstractVideoBuffer::MapData
30
\brief The QAbstractVideoBuffer::MapData structure describes the mapped plane layout.
31
\inmodule QtMultimedia
32
\ingroup multimedia
33
\ingroup multimedia_video
34
35
The structure contains a number of mapped planes, and plane data for each plane,
36
specificly, a number of bytes per line, a data pointer, and a data size.
37
The structure doesn't hold any ownership of the data it refers to.
38
39
A defaultly created structure means that no data has been mapped.
40
41
All the values in the structure default to zeros.
42
43
\sa QAbstractVideoBuffer::map
44
*/
45
46
/*!
47
\variable QAbstractVideoBuffer::MapData::planeCount
48
49
The number of planes of the mapped video data. If the format of the data
50
is multiplanar, and the value is \c 1, the actual plane layout will
51
be calculated upon invoking of \l QVideoFrame::map from the frame height,
52
\c{bytesPerLine[0]}, and \c{dataSize[0]}.
53
54
Defaults to \c 0.
55
*/
56
57
/*!
58
\variable QAbstractVideoBuffer::MapData::bytesPerLine
59
60
The array of numbrers of bytes per line for each
61
plane from \c 0 to \c{planeCount - 1}.
62
63
The values of the array default to \c 0.
64
*/
65
66
/*!
67
\variable QAbstractVideoBuffer::MapData::data
68
69
The array of pointers to the mapped video pixel data
70
for each plane from \c 0 to \c{planeCount - 1}.
71
The implementation of QAbstractVideoBuffer must hold ownership of the data
72
at least until \l QAbstractVideoBuffer::unmap is called.
73
74
The values of the array default to \c nullptr.
75
*/
76
77
/*!
78
\variable QAbstractVideoBuffer::MapData::dataSize
79
80
The array of sizes in bytes of the mapped video pixel data
81
for each plane from \c 0 to \c{planeCount - 1}.
82
83
The values of the array default to \c 0.
84
*/
85
86
// must be out-of-line to ensure correct working of dynamic_cast when QHwVideoBuffer is created in tests
87
/*!
88
Destroys a video buffer.
89
*/
90
QAbstractVideoBuffer::~QAbstractVideoBuffer() =
default
;
91
92
/*! \fn QAbstractVideoBuffer::MapData QAbstractVideoBuffer::map(QVideoFrame::MapMode mode)
93
94
Maps the planes of a video buffer to memory.
95
96
Returns a \l MapData structure that contains information about the plane layout of
97
the mapped current video data. If the mapping fails, the method returns the default structure.
98
For CPU memory buffers, the data is considered as already mapped, so the function
99
just returns the plane layout of the preallocated underlying data.
100
101
The map \a mode indicates whether the contents of the mapped memory should be read from and/or
102
written to the buffer. If the map mode includes the \c QVideoFrame::ReadOnly flag the
103
mapped memory will be populated with the content of the buffer when initially mapped. If the map
104
mode includes the \c QVideoFrame::WriteOnly flag the content of the possibly modified
105
mapped memory will be written back to the buffer when unmapped.
106
107
When access to the data is no longer needed, the \l unmap function is called
108
to release the mapped memory and possibly update the buffer contents.
109
110
If the format of the video data is multiplanar, the method may map the whole pixel data
111
as a single plane. In this case, mapping a buffer with \l QVideoFrame
112
will calculate additional planes from the specified line stride of the first plane,
113
the frame height, and the data size.
114
*/
115
116
/*!
117
\fn QAbstractVideoBuffer::unmap()
118
119
Releases the memory mapped by the map() function.
120
121
If the \l {QVideoFrame::MapMode}{MapMode} included the \c QVideoFrame::WriteOnly
122
flag this will write the current content of the mapped memory back to the video frame.
123
124
For CPU video buffers, the function may be not overridden.
125
The default implementation of \c unmap does nothing.
126
127
\sa map()
128
*/
129
void
QAbstractVideoBuffer::unmap() { }
130
131
/*!
132
\fn QAbstractVideoBuffer::format() const
133
134
Gets \l QVideoFrameFormat of the underlying video buffer.
135
136
The format must be available upon construction of \l QVideoFrame.
137
QVideoFrame will contain won instance of the given format, that
138
can be detached and modified.
139
*/
140
141
QT_END_NAMESPACE
QPlatformGraphicsBufferHelper
\inmodule QtGui
qtmultimedia
src
multimedia
video
qabstractvideobuffer.cpp
Generated on
for Qt by
1.14.0