Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qffmpegframe_p.h
Go to the documentation of this file.
1
// Copyright (C) 2021 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
QFFMPEGFRAME_P_H
5
#
define
QFFMPEGFRAME_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
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpeg_p
.
h
>
19
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegcodeccontext_p
.
h
>
20
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegplaybackutils_p
.
h
>
21
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegtime_p
.
h
>
22
#
include
<
QtCore
/
qshareddata
.
h
>
23
24
#
include
<
optional
>
25
26
QT_BEGIN_NAMESPACE
27
28
namespace
QFFmpeg
{
29
30
struct
Frame
31
{
32
struct
Data
33
{
34
Data
(
const
LoopOffset &offset, AVFrameUPtr f,
const
CodecContext &codecContext,
35
const
PlaybackEngineObjectID &sourceID)
36
:
loopOffset
(
offset
),
37
codecContext
(
codecContext
),
38
frame
(
std
::
move
(
f
)),
39
sourceID
(
sourceID
)
40
{
41
Q_ASSERT(frame);
42
if
(frame->pts != AV_NOPTS_VALUE)
43
startTime = codecContext.toTrackPosition(AVStreamPosition(frame->pts));
44
else
45
startTime = codecContext.toTrackPosition(
46
AVStreamPosition(frame->best_effort_timestamp));
47
48
if
(
auto
frameDuration = getAVFrameDuration(*frame)) {
49
duration = codecContext.toTrackDuration(AVStreamDuration(frameDuration));
50
}
else
{
51
// Estimate frame duration for audio stream
52
if
(codecContext.context()->codec_type == AVMEDIA_TYPE_AUDIO) {
53
if
(frame->sample_rate)
54
duration = TrackDuration(qint64(1000000) * frame->nb_samples
55
/ frame->sample_rate);
56
else
57
duration = TrackDuration(0);
// Fallback
58
}
else
{
59
// Estimate frame duration for video stream
60
const
auto
&avgFrameRate = codecContext.stream()->avg_frame_rate;
61
duration = TrackDuration(
62
mul(qint64(1000000), { avgFrameRate.den, avgFrameRate.num })
63
.value_or(0));
64
}
65
}
66
}
67
Data
(
const
LoopOffset &offset,
const
QString &text, TrackPosition pts,
68
TrackDuration duration,
const
PlaybackEngineObjectID &sourceID)
69
:
loopOffset
(
offset
),
text
(
text
),
startTime
(
pts
),
duration
(
duration
),
sourceID
(
sourceID
)
70
{
71
}
72
73
QAtomicInt
ref
;
74
LoopOffset
loopOffset
;
75
std
::
optional
<
CodecContext
>
codecContext
;
76
AVFrameUPtr
frame
;
77
QString
text
;
78
TrackPosition
startTime
= 0;
79
TrackDuration
duration
= 0;
80
PlaybackEngineObjectID
sourceID
;
81
};
82
Frame
() =
default
;
83
84
Frame
(
const
LoopOffset &offset, AVFrameUPtr f,
const
CodecContext &codecContext,
85
const
PlaybackEngineObjectID &sourceId)
86
:
d
(
new
Data
(
offset
,
std
::
move
(
f
),
codecContext
,
sourceId
))
87
{
88
}
89
Frame
(
const
LoopOffset &offset,
const
QString &text, TrackPosition pts, TrackDuration duration,
90
const
PlaybackEngineObjectID &sourceId)
91
:
d
(
new
Data
(
offset
,
text
,
pts
,
duration
,
sourceId
))
92
{
93
}
94
bool
isValid
()
const
{
return
!!d; }
95
96
AVFrame
*
avFrame
()
const
{
return
data().frame.get(); }
97
AVFrameUPtr
takeAVFrame
() {
return
std
::move(data().frame); }
98
const
CodecContext
*
codecContext
()
const
99
{
100
return
data().codecContext ? &data().codecContext.value() :
nullptr
;
101
}
102
TrackPosition
startTime
()
const
{
return
data().startTime; }
103
TrackDuration
duration
()
const
{
return
data().duration; }
104
TrackPosition
endTime
()
const
{
return
data().startTime + data().duration; }
105
QString
text
()
const
{
return
data().text; }
106
const
PlaybackEngineObjectID
&
sourceID
()
const
{
return
data().sourceID; };
107
const
LoopOffset
&
loopOffset
()
const
{
return
data().loopOffset; };
108
TrackPosition
absolutePts
()
const
109
{
110
return
startTime() + loopOffset().loopStartTimeUs.asDuration();
111
}
112
TrackPosition
absoluteEnd
()
const
113
{
114
return
endTime() + loopOffset().loopStartTimeUs.asDuration();
115
}
116
117
private
:
118
Data
&data()
const
119
{
120
Q_ASSERT(d);
121
return
*d;
122
}
123
124
private
:
125
QExplicitlySharedDataPointer<Data> d;
126
};
127
128
}
// namespace QFFmpeg
129
130
QT_END_NAMESPACE
131
132
Q_DECLARE_METATYPE
(
QFFmpeg
::
Frame
);
133
134
#
endif
// QFFMPEGFRAME_P_H
QFFmpeg
Definition
qandroidcacertificates.cpp:26
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
Q_DECLARE_METATYPE
QT_END_NAMESPACE Q_DECLARE_METATYPE(QFFmpeg::Frame)
QFFmpeg::Frame::Data
Definition
qffmpegframe_p.h:33
QFFmpeg::Frame::Data::sourceID
PlaybackEngineObjectID sourceID
Definition
qffmpegframe_p.h:80
QFFmpeg::Frame::Data::frame
AVFrameUPtr frame
Definition
qffmpegframe_p.h:76
QFFmpeg::Frame::Data::text
QString text
Definition
qffmpegframe_p.h:77
QFFmpeg::Frame::Data::Data
Data(const LoopOffset &offset, AVFrameUPtr f, const CodecContext &codecContext, const PlaybackEngineObjectID &sourceID)
Definition
qffmpegframe_p.h:34
QFFmpeg::Frame::Data::ref
QAtomicInt ref
Definition
qffmpegframe_p.h:73
QFFmpeg::Frame::Data::loopOffset
LoopOffset loopOffset
Definition
qffmpegframe_p.h:74
QFFmpeg::Frame::Data::codecContext
std::optional< CodecContext > codecContext
Definition
qffmpegframe_p.h:75
QFFmpeg::Frame::Data::Data
Data(const LoopOffset &offset, const QString &text, TrackPosition pts, TrackDuration duration, const PlaybackEngineObjectID &sourceID)
Definition
qffmpegframe_p.h:67
QFFmpeg::Frame::Data::startTime
TrackPosition startTime
Definition
qffmpegframe_p.h:78
QFFmpeg::Frame::Data::duration
TrackDuration duration
Definition
qffmpegframe_p.h:79
QFFmpeg::Frame
Definition
qffmpegframe_p.h:31
QFFmpeg::Frame::absoluteEnd
TrackPosition absoluteEnd() const
Definition
qffmpegframe_p.h:112
QFFmpeg::Frame::takeAVFrame
AVFrameUPtr takeAVFrame()
Definition
qffmpegframe_p.h:97
QFFmpeg::Frame::startTime
TrackPosition startTime() const
Definition
qffmpegframe_p.h:102
QFFmpeg::Frame::text
QString text() const
Definition
qffmpegframe_p.h:105
QFFmpeg::Frame::endTime
TrackPosition endTime() const
Definition
qffmpegframe_p.h:104
QFFmpeg::Frame::sourceID
const PlaybackEngineObjectID & sourceID() const
Definition
qffmpegframe_p.h:106
QFFmpeg::Frame::loopOffset
const LoopOffset & loopOffset() const
Definition
qffmpegframe_p.h:107
QFFmpeg::Frame::avFrame
AVFrame * avFrame() const
Definition
qffmpegframe_p.h:96
QFFmpeg::Frame::Frame
Frame(const LoopOffset &offset, AVFrameUPtr f, const CodecContext &codecContext, const PlaybackEngineObjectID &sourceId)
Definition
qffmpegframe_p.h:84
QFFmpeg::Frame::codecContext
const CodecContext * codecContext() const
Definition
qffmpegframe_p.h:98
QFFmpeg::Frame::absolutePts
TrackPosition absolutePts() const
Definition
qffmpegframe_p.h:108
QFFmpeg::Frame::isValid
bool isValid() const
Definition
qffmpegframe_p.h:94
QFFmpeg::Frame::duration
TrackDuration duration() const
Definition
qffmpegframe_p.h:103
QFFmpeg::Frame::Frame
Frame(const LoopOffset &offset, const QString &text, TrackPosition pts, TrackDuration duration, const PlaybackEngineObjectID &sourceId)
Definition
qffmpegframe_p.h:89
QFFmpeg::Frame::Frame
Frame()=default
qtmultimedia
src
plugins
multimedia
ffmpeg
playbackengine
qffmpegframe_p.h
Generated on
for Qt by
1.18.0