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
qffmpegdefs_p.h
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#ifndef QFFMPEGDEFS_P_H
5#define QFFMPEGDEFS_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 "qtconfigmacros.h"
19
20#include <limits>
21#include <unordered_set>
22#include <variant>
23#include <QtCore/qglobal.h>
24#include <QtCore/qdebug.h>
25
26extern "C" {
27#include <libavformat/avformat.h>
28#include <libavcodec/avcodec.h>
29#include <libswresample/swresample.h>
30#include <libavutil/avutil.h>
31#include <libswscale/swscale.h>
32}
33
34static_assert(LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 70, 100),
35 "FFmpeg 4.4 or newer is required (libavutil >= 56.70)");
36
37#define QT_FFMPEG_HAS_AV_CHANNEL_LAYOUT
38 (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)) // since FFmpeg n5.1
39#define QT_FFMPEG_HAS_FRAME_TIME_BASE
40 (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 18, 100)) // since FFmpeg n5.0
41#define QT_FFMPEG_HAS_FRAME_DURATION
42 (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 3, 100)) // since FFmpeg n6.0
43#define QT_FFMPEG_STREAM_SIDE_DATA_DEPRECATED
44 (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 15, 100)) // since FFmpeg n6.1
45#define QT_FFMPEG_HAS_D3D12VA
46 (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(59, 8, 100)) // since FFmpeg n7.0
47#define QT_FFMPEG_SWR_CONST_CH_LAYOUT
48 (LIBSWRESAMPLE_VERSION_INT >= AV_VERSION_INT(4, 9, 100))
49#define QT_FFMPEG_AVIO_WRITE_CONST
50 (LIBAVFORMAT_VERSION_MAJOR >= 61)
51#define QT_CODEC_PARAMETERS_HAVE_FRAMERATE
52 (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 11, 100)) // since FFmpeg n6.1
53#define QT_FFMPEG_HAS_AVCODEC_GET_SUPPORTED_CONFIG
54 (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(59, 39, 100)) // since FFmpeg n7.1
55#define QT_FFMPEG_HAS_SWS_FLAGS_ENUM
56 (LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(9, 1, 100)) // since FFmpeg n8.0
57
59
60namespace QFFmpeg {
61
63using ChannelLayoutT = AVChannelLayout;
64#else
66#endif
67
69using SwsFlags = int;
70#endif
71
72enum class AVScore : int {
73 BestAVScore = std::numeric_limits<int>::max(),
75 NotSuitableAVScore = std::numeric_limits<int>::min(),
76 MinAVScore = std::numeric_limits<int>::min() + 1,
77};
78
83
84constexpr inline AVScore operator+(AVScore a, int b)
85{
86 return AVScore(qToUnderlying(a) + b);
87}
88constexpr inline AVScore operator-(AVScore a, int b)
89{
90 return AVScore(qToUnderlying(a) - b);
91}
92constexpr inline AVScore operator+(int a, AVScore b)
93{
94 return AVScore(a + qToUnderlying(b));
95}
96constexpr inline AVScore operator-(int a, AVScore b)
97{
98 return AVScore(a - qToUnderlying(b));
99}
100constexpr inline AVScore operator-(AVScore a, AVScore b)
101{
102 return AVScore(qToUnderlying(a) - qToUnderlying(b));
103}
104constexpr inline AVScore &operator+=(AVScore &a, int b)
105{
106 return a = a + b;
107}
108constexpr inline AVScore &operator-=(AVScore &a, int b)
109{
110 return a = a - b;
111}
112inline QDebug operator<<(QDebug dbg, AVScore score)
113{
114 dbg << qToUnderlying(score);
115 return dbg;
116}
117
118using PixelOrSampleFormat = std::variant<AVPixelFormat, AVSampleFormat>;
120
121} // namespace QFFmpeg
122
124
125namespace std {
126
127template <>
128struct numeric_limits<QT_PREPEND_NAMESPACE(QFFmpeg)::AVScore>
129{
130 using Type = QT_PREPEND_NAMESPACE(QFFmpeg)::AVScore;
131 constexpr static Type min() noexcept { return Type::NotSuitableAVScore; }
132 constexpr static Type max() noexcept { return Type::BestAVScore; }
133};
134
135} // namespace std
136
138# define AV_PROFILE_H264_HIGH FF_PROFILE_H264_HIGH
139#endif
141# define AV_PROFILE_HEVC_MAIN FF_PROFILE_HEVC_MAIN
142#endif
143
144#endif // QFFMPEGDEFS_P_H
int writeQIODevice(void *opaque, AvioWriteBufferType buf, int buf_size)
constexpr AVScore BestAVScore
constexpr AVScore operator+(AVScore a, int b)
constexpr AVScore & operator-=(AVScore &a, int b)
std::variant< AVPixelFormat, AVSampleFormat > PixelOrSampleFormat
constexpr AVScore operator+(int a, AVScore b)
QT_MANGLE_NAMESPACE(QMacScreenCaptureStreamDelegate) QMacScreenCaptureStreamDelegate
constexpr AVScore DefaultAVScore
constexpr AVScore & operator+=(AVScore &a, int b)
constexpr AVScore operator-(int a, AVScore b)
constexpr AVScore operator-(AVScore a, AVScore b)
constexpr AVScore NotSuitableAVScore
AVChannelLayout ChannelLayoutT
QDebug operator<<(QDebug dbg, AVScore score)
constexpr AVScore MinAVScore
constexpr AVScore operator-(AVScore a, int b)
#define AV_PROFILE_HEVC_MAIN
#define AV_PROFILE_H264_HIGH
#define QT_FFMPEG_HAS_SWS_FLAGS_ENUM
#define QT_FFMPEG_HAS_AV_CHANNEL_LAYOUT
#define QT_BEGIN_NAMESPACE
#define QT_END_NAMESPACE