blob: 7dda0d3884eba5311a2a11197117dd093d49ca5e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QAudioDevice>
#include <QAudioFormat>
#include <QCameraDevice>
#include <QCoreApplication>
#include <QMediaDevices>
#include <QString>
#include <QTextStream>
#include <stdio.h>
static QString formatToString(QAudioFormat::SampleFormat sampleFormat)
{
switch (sampleFormat) {
case QAudioFormat::UInt8:
return "UInt8";
case QAudioFormat::Int16:
return "Int16";
case QAudioFormat::Int32:
return "Int32";
case QAudioFormat::Float:
return "Float";
default:
return "Unknown";
}
}
static QString positionToString(QCameraDevice::Position position)
{
switch (position) {
case QCameraDevice::BackFace:
return "BackFace";
case QCameraDevice::FrontFace:
return "FrontFace";
default:
return "Unspecified";
}
}
static void printAudioDeviceInfo(QTextStream &out, const QAudioDevice &deviceInfo)
{
const auto isDefault = deviceInfo.isDefault() ? "Yes" : "No";
const auto preferredFormat = deviceInfo.preferredFormat();
const auto supportedFormats = deviceInfo.supportedSampleFormats();
out.setFieldWidth(30);
out.setFieldAlignment(QTextStream::AlignLeft);
out << "Name: " << deviceInfo.description() << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Id: " << QString::fromLatin1(deviceInfo.id()) << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Default: " << isDefault << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Preferred Format: " << formatToString(preferredFormat.sampleFormat())
<< qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Preferred Rate: " << preferredFormat.sampleRate() << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Preferred Channels: " << preferredFormat.channelCount() << qSetFieldWidth(0)
<< Qt::endl;
out.setFieldWidth(30);
out << "Supported Formats: ";
for (auto &format : supportedFormats)
out << qSetFieldWidth(0) << formatToString(format) << " ";
out << Qt::endl;
out.setFieldWidth(30);
out << "Supported Rates: " << qSetFieldWidth(0) << deviceInfo.minimumSampleRate() << " - "
<< deviceInfo.maximumSampleRate() << Qt::endl;
out.setFieldWidth(30);
out << "Supported Channels: " << qSetFieldWidth(0) << deviceInfo.minimumChannelCount() << " - "
<< deviceInfo.maximumChannelCount() << Qt::endl;
out << Qt::endl;
}
static void printVideoDeviceInfo(QTextStream &out, const QCameraDevice &cameraDevice)
{
const auto isDefault = cameraDevice.isDefault() ? "Yes" : "No";
const auto position = cameraDevice.position();
const auto photoResolutions = cameraDevice.photoResolutions();
const auto videoFormats = cameraDevice.videoFormats();
out.setFieldWidth(30);
out.setFieldAlignment(QTextStream::AlignLeft);
out << "Name: " << cameraDevice.description() << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Id: " << QString::fromLatin1(cameraDevice.id()) << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Default: " << isDefault << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Position: " << positionToString(position) << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Photo Resolutions: ";
for (auto &resolution : photoResolutions) {
QString s = QStringLiteral("%1x%2").arg(resolution.width()).arg(resolution.height());
out << qSetFieldWidth(0) << s << ", ";
}
out.setFieldWidth(10);
out << Qt::endl << Qt::endl;
out << "Supported Video Formats: " << qSetFieldWidth(0) << Qt::endl;
for (auto &format : videoFormats) {
out.setFieldWidth(30);
QString s =
QStringLiteral("%1x%2").arg(format.resolution().width()).arg(format.resolution().height());
out << "Resolution: " << s << qSetFieldWidth(0) << Qt::endl;
out.setFieldWidth(30);
out << "Frame Rate: " << qSetFieldWidth(0) << "Min:" << format.minFrameRate()
<< " Max:" << format.maxFrameRate() << Qt::endl;
out.setFieldWidth(30);
out << "Format: " << qSetFieldWidth(0)
<< QVideoFrameFormat::pixelFormatToString(format.pixelFormat()) << Qt::endl;
out << Qt::endl;
}
out << Qt::endl;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv); // QtMultimedia needs an application singleton
QTextStream out(stdout);
const auto audioInputDevices = QMediaDevices::audioInputs();
const auto audioOutputDevices = QMediaDevices::audioOutputs();
const auto videoInputDevices = QMediaDevices::videoInputs();
out << "Audio devices detected: " << Qt::endl;
out << Qt::endl << "Input" << Qt::endl;
for (auto &deviceInfo : audioInputDevices)
printAudioDeviceInfo(out, deviceInfo);
out << Qt::endl << "Output" << Qt::endl;
for (auto &deviceInfo : audioOutputDevices)
printAudioDeviceInfo(out, deviceInfo);
out << Qt::endl << "Video devices detected: " << Qt::endl;
for (auto &cameraDevice : videoInputDevices)
printVideoDeviceInfo(out, cameraDevice);
}
|