diff options
Diffstat (limited to 'tests/manual/devices/main.cpp')
-rw-r--r-- | tests/manual/devices/main.cpp | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/tests/manual/devices/main.cpp b/tests/manual/devices/main.cpp new file mode 100644 index 000000000..67b277812 --- /dev/null +++ b/tests/manual/devices/main.cpp @@ -0,0 +1,136 @@ +// 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 << 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); +} |