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
qffmpeg_ranges_p.h
Go to the documentation of this file.
1// Copyright (C) 2026 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#ifndef QFFMPEG_RANGES_P_H
4#define QFFMPEG_RANGES_P_H
5
6//
7// W A R N I N G
8// -------------
9//
10// This file is not part of the Qt API. It exists purely as an
11// implementation detail. This header file may change from version to
12// version without notice, or even be removed.
13//
14// We mean it.
15//
16
17#include <QtCore/qassert.h>
18#include <QtCore/qtconfigmacros.h>
19#include <QtMultimedia/private/qiteratorfacade_p.h>
20
21#ifdef __cpp_lib_ranges
22# include <ranges>
23#endif
24
26
27namespace QFFmpeg
28{
29
30template <typename T, T (*IterateFn)(void **)>
32{
33 struct begin_tag
34 {
35 };
36
37public:
39 {
40 void *m_state = nullptr;
41 T m_current = nullptr;
42
43 public:
44 explicit iterator(begin_tag) { increment(); }
45 iterator() = default;
46
47 void increment() { m_current = IterateFn(&m_state); }
48 const T &dereference() const { return m_current; }
49 bool equals(const iterator &o) const { return m_current == o.m_current; }
50 };
51
52 constexpr iterator begin() const { return iterator(begin_tag{}); }
53 constexpr iterator end() const { return iterator(); }
54};
55
56template <typename T, T (*IterateFn)(T)>
58{
59 struct begin_tag
60 {
61 };
62
63public:
65 {
66 T m_current = {};
67
68 public:
69 explicit iterator(begin_tag) { increment(); }
70 iterator() = default;
71
72 void increment() { m_current = IterateFn(m_current); }
73 const T &dereference() const { return m_current; }
74 bool equals(const iterator &o) const { return m_current == o.m_current; }
75 };
76
77 constexpr iterator begin() const { return iterator(begin_tag{}); }
78 constexpr iterator end() const { return iterator(); }
79};
80
81} // namespace QFFmpeg
82
83QT_END_NAMESPACE
84
85#ifdef __cpp_lib_ranges
86namespace std::ranges {
87template <typename T, T (*IterateFn)(void **)>
88inline constexpr bool enable_view<QT_PREPEND_NAMESPACE(QFFmpeg::FFmpegOpaqueIteratorRange)
89 <T, IterateFn>> = true;
90
91template <typename T, T (*IterateFn)(T)>
92inline constexpr bool enable_view<QT_PREPEND_NAMESPACE(QFFmpeg::FFmpegValueIteratorRange)
93 <T, IterateFn>> = true;
94}
95#endif
96
97#endif
q23::expected< QPlatformVideoSink *, QString > createVideoSink(QVideoSink *sink) override
q23::expected< QPlatformMediaRecorder *, QString > createRecorder(QMediaRecorder *) override
QPlatformMediaFormatInfo * createFormatInfo() override
q23::expected< QPlatformMediaPlayer *, QString > createPlayer(QMediaPlayer *player) override
QPlatformSurfaceCapture * createScreenCapture(QScreenCapture *) override
QVideoFrame convertVideoFrame(QVideoFrame &srcFrame, const QVideoFrameFormat &destFormat) override
q23::expected< QPlatformMediaCaptureSession *, QString > createCaptureSession() override
q23::expected< QPlatformAudioDecoder *, QString > createAudioDecoder(QAudioDecoder *decoder) override
QPlatformVideoDevices * createVideoDevices() override
QPlatformCapturableWindows * createCapturableWindows() override
QPlatformSurfaceCapture * createWindowCapture(QWindowCapture *) override
q23::expected< QPlatformImageCapture *, QString > createImageCapture(QImageCapture *) override
q23::expected< QPlatformAudioInput *, QString > createAudioInput(QAudioInput *input) override
q23::expected< QPlatformCamera *, QString > createCamera(QCamera *) override
constexpr iterator end() const
constexpr iterator begin() const
constexpr iterator begin() const
constexpr iterator end() const
AVHWFramesContext * hwFramesContext() const
bool matchesSizeContraints(QSize size) const
void createFramesContext(AVPixelFormat swFormat, const QSize &size)
const AVHWFramesConstraints * constraints() const
void updateFramesContext(AVPixelFormat swFormat, const QSize &size)
AVHWDeviceContext * hwDeviceContext() const
AVPixelFormat hwFormat() const
AVHWDeviceType deviceType() const
static bool isNoConversionFormat(AVPixelFormat f)
AVFrameUPtr copyFromHwPool(AVFrameUPtr frame)
QT_MANGLE_NAMESPACE(QMacScreenCaptureStreamDelegate) QMacScreenCaptureStreamDelegate
static const std::vector< AVHWDeviceType > & deviceTypes()
AVPixelFormat getFormat(AVCodecContext *codecContext, const AVPixelFormat *fmt)
static AVBufferUPtr loadHWContext(AVHWDeviceType type)
static bool checkHwType(AVHWDeviceType type)
static void deleteHwFrameContextData(AVHWFramesContext *context)
static bool precheckDriver(AVHWDeviceType type)
static std::vector< AVHWDeviceType > deviceTypes(const char *envVarName)
static const std::initializer_list< AVHWDeviceType > preferredHardwareAccelerators
Combined button and popup list for selecting options.
bool FFmpegLogsEnabledInThread
#define qCDebug(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
The HwFrameContextData class contains custom belongings of hw frames context.