Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
avfcamerautility_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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 AVFCAMERAUTILITY_H
5#define AVFCAMERAUTILITY_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 <QtCore/qglobal.h>
19#include <QtCore/qdebug.h>
20#include <QtCore/qlist.h>
21#include <QtCore/qpair.h>
22#include <QtCore/qsize.h>
23
24#include "qcameradevice.h"
25
26#include <AVFoundation/AVFoundation.h>
27
28// In case we have SDK below 10.7/7.0:
29@class AVCaptureDeviceFormat;
30
32
34{
35public:
36 explicit AVFConfigurationLock(AVCaptureDevice *captureDevice)
37 : m_captureDevice(captureDevice),
38 m_locked(false)
39 {
40 Q_ASSERT(m_captureDevice);
41 NSError *error = nil;
42 m_locked = [m_captureDevice lockForConfiguration:&error];
43 }
44
46 {
47 if (m_locked)
48 [m_captureDevice unlockForConfiguration];
49 }
50
51 operator bool() const
52 {
53 return m_locked;
54 }
55
56private:
57 Q_DISABLE_COPY(AVFConfigurationLock)
58
59 AVCaptureDevice *m_captureDevice;
60 bool m_locked;
61};
62
64 void operator()(NSObject *obj)
65 {
66 if (obj)
67 [obj release];
68 }
69};
70
71template<class T>
72class AVFScopedPointer : public std::unique_ptr<NSObject, AVFObjectDeleter>
73{
74public:
76 explicit AVFScopedPointer(T *ptr) : std::unique_ptr<NSObject, AVFObjectDeleter>(ptr) {}
77 operator T*() const
78 {
79 // Quite handy operator to enable Obj-C messages: [ptr someMethod];
80 return data();
81 }
82
83 T *data() const
84 {
85 return static_cast<T *>(get());
86 }
87
88 T *take()
89 {
90 return static_cast<T *>(release());
91 }
92};
93
94template<>
95class AVFScopedPointer<dispatch_queue_t>
96{
97public:
98 AVFScopedPointer() : m_queue(nullptr) {}
99 explicit AVFScopedPointer(dispatch_queue_t q) : m_queue(q) {}
100
102 {
103 if (m_queue)
104 dispatch_release(m_queue);
105 }
106
107 operator dispatch_queue_t() const
108 {
109 // Quite handy operator to enable Obj-C messages: [ptr someMethod];
110 return m_queue;
111 }
112
113 dispatch_queue_t data() const
114 {
115 return m_queue;
116 }
117
118 void reset(dispatch_queue_t q = nullptr)
119 {
120 if (m_queue)
121 dispatch_release(m_queue);
122 m_queue = q;
123 }
124
125private:
126 dispatch_queue_t m_queue;
127
128 Q_DISABLE_COPY(AVFScopedPointer)
129};
130
131typedef QPair<qreal, qreal> AVFPSRange;
132AVFPSRange qt_connection_framerates(AVCaptureConnection *videoConnection);
133
134AVCaptureDeviceFormat *qt_convert_to_capture_device_format(
135 AVCaptureDevice *captureDevice, const QCameraFormat &format,
136 const std::function<bool(uint32_t)> &cvFormatValidator = nullptr);
137QList<AVCaptureDeviceFormat *> qt_unique_device_formats(AVCaptureDevice *captureDevice,
138 FourCharCode preferredFormat);
139QSize qt_device_format_resolution(AVCaptureDeviceFormat *format);
140QSize qt_device_format_high_resolution(AVCaptureDeviceFormat *format);
141QSize qt_device_format_pixel_aspect_ratio(AVCaptureDeviceFormat *format);
142QList<AVFPSRange> qt_device_format_framerates(AVCaptureDeviceFormat *format);
143AVCaptureDeviceFormat *qt_find_best_resolution_match(AVCaptureDevice *captureDevice, const QSize &res,
144 FourCharCode preferredFormat, bool stillImage = true);
145AVCaptureDeviceFormat *qt_find_best_framerate_match(AVCaptureDevice *captureDevice,
146 FourCharCode preferredFormat,
147 Float64 fps);
148AVFrameRateRange *qt_find_supported_framerate_range(AVCaptureDeviceFormat *format, Float64 fps);
149bool qt_format_supports_framerate(AVCaptureDeviceFormat *format, qreal fps);
150
151bool qt_formats_are_equal(AVCaptureDeviceFormat *f1, AVCaptureDeviceFormat *f2);
152bool qt_set_active_format(AVCaptureDevice *captureDevice, AVCaptureDeviceFormat *format, bool preserveFps);
153
154AVFPSRange qt_current_framerates(AVCaptureDevice *captureDevice, AVCaptureConnection *videoConnection);
155void qt_set_framerate_limits(AVCaptureDevice *captureDevice, AVCaptureConnection *videoConnection,
156 qreal minFPS, qreal maxFPS);
157
158QList<AudioValueRange> qt_supported_sample_rates_for_format(int codecId);
159QList<AudioValueRange> qt_supported_bit_rates_for_format(int codecId);
160std::optional<QList<UInt32>> qt_supported_channel_counts_for_format(int codecId);
161QList<UInt32> qt_supported_channel_layout_tags_for_format(int codecId, int noChannels);
162
164
165#endif
QSize qt_device_format_resolution(AVCaptureDeviceFormat *format)
bool qt_formats_are_equal(AVCaptureDeviceFormat *f1, AVCaptureDeviceFormat *f2)
QPair< qreal, qreal > AVFPSRange
AVFPSRange qt_current_framerates(AVCaptureDevice *captureDevice, AVCaptureConnection *videoConnection)
std::optional< QList< UInt32 > > qt_supported_channel_counts_for_format(int codecId)
AVCaptureDeviceFormat * qt_find_best_resolution_match(AVCaptureDevice *captureDevice, const QSize &res, FourCharCode preferredFormat, bool stillImage=true)
void qt_set_framerate_limits(AVCaptureDevice *captureDevice, AVCaptureConnection *videoConnection, qreal minFPS, qreal maxFPS)
QSize qt_device_format_high_resolution(AVCaptureDeviceFormat *format)
QList< AVCaptureDeviceFormat * > qt_unique_device_formats(AVCaptureDevice *captureDevice, FourCharCode preferredFormat)
AVFPSRange qt_connection_framerates(AVCaptureConnection *videoConnection)
QList< AudioValueRange > qt_supported_sample_rates_for_format(int codecId)
QList< UInt32 > qt_supported_channel_layout_tags_for_format(int codecId, int noChannels)
AVCaptureDeviceFormat * qt_convert_to_capture_device_format(AVCaptureDevice *captureDevice, const QCameraFormat &format, const std::function< bool(uint32_t)> &cvFormatValidator=nullptr)
QList< AudioValueRange > qt_supported_bit_rates_for_format(int codecId)
QList< AVFPSRange > qt_device_format_framerates(AVCaptureDeviceFormat *format)
AVCaptureDeviceFormat * qt_find_best_framerate_match(AVCaptureDevice *captureDevice, FourCharCode preferredFormat, Float64 fps)
bool qt_set_active_format(AVCaptureDevice *captureDevice, AVCaptureDeviceFormat *format, bool preserveFps)
AVFrameRateRange * qt_find_supported_framerate_range(AVCaptureDeviceFormat *format, Float64 fps)
QSize qt_device_format_pixel_aspect_ratio(AVCaptureDeviceFormat *format)
bool qt_format_supports_framerate(AVCaptureDeviceFormat *format, qreal fps)
AVFConfigurationLock(AVCaptureDevice *captureDevice)
void reset(dispatch_queue_t q=nullptr)
The QCameraFormat class describes a video format supported by a camera device. \inmodule QtMultimedia...
\inmodule QtCore
Definition qsize.h:25
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
static QDBusError::ErrorType get(const char *name)
static AVCodecID codecId(QMediaFormat::VideoCodec codec)
static ControlElement< T > * ptr(QWidget *widget)
GLint GLsizei GLsizei GLenum format
GLhandleARB obj
[2]
GLuint res
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
double qreal
Definition qtypes.h:187
QObject::connect nullptr
sem release()
void operator()(NSObject *obj)