diff options
Diffstat (limited to 'src/multimedia/platform/qmediaplatformformatinfo.cpp')
-rw-r--r-- | src/multimedia/platform/qmediaplatformformatinfo.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/multimedia/platform/qmediaplatformformatinfo.cpp b/src/multimedia/platform/qmediaplatformformatinfo.cpp index e157a2455..20a5d580c 100644 --- a/src/multimedia/platform/qmediaplatformformatinfo.cpp +++ b/src/multimedia/platform/qmediaplatformformatinfo.cpp @@ -38,6 +38,7 @@ ****************************************************************************/ #include "qmediaplatformformatinfo_p.h" +#include <qset.h> QT_BEGIN_NAMESPACE @@ -45,4 +46,72 @@ QMediaPlatformFormatInfo::QMediaPlatformFormatInfo() = default; QMediaPlatformFormatInfo::~QMediaPlatformFormatInfo() = default; +QList<QMediaFormat::FileFormat> QMediaPlatformFormatInfo::supportedFileFormats(const QMediaFormat &constraints, QMediaFormat::ConversionMode m) const +{ + QSet<QMediaFormat::FileFormat> formats; + + const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; + for (const auto &m : codecMap) { + if (constraints.mode() == QMediaFormat::AudioAndVideo && m.video.isEmpty()) + continue; + if (constraints.audioCodec() != QMediaFormat::AudioCodec::Unspecified && !m.audio.contains(constraints.audioCodec())) + continue; + if (constraints.videoCodec() != QMediaFormat::VideoCodec::Unspecified && !m.video.contains(constraints.videoCodec())) + continue; + formats.insert(m.format); + } + return formats.values(); +} + +QList<QMediaFormat::AudioCodec> QMediaPlatformFormatInfo::supportedAudioCodecs(const QMediaFormat &constraints, QMediaFormat::ConversionMode m) const +{ + QSet<QMediaFormat::AudioCodec> codecs; + + const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; + for (const auto &m : codecMap) { + if (constraints.format() != QMediaFormat::UnspecifiedFormat && m.format != constraints.format()) + continue; + if (constraints.videoCodec() != QMediaFormat::VideoCodec::Unspecified && !m.video.contains(constraints.videoCodec())) + continue; + for (const auto &c : m.audio) + codecs.insert(c); + } + return codecs.values(); +} + +QList<QMediaFormat::VideoCodec> QMediaPlatformFormatInfo::supportedVideoCodecs(const QMediaFormat &constraints, QMediaFormat::ConversionMode m) const +{ + if (constraints.mode() == QMediaFormat::AudioOnly) + return {}; + + QSet<QMediaFormat::VideoCodec> codecs; + + const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; + for (const auto &m : codecMap) { + if (constraints.format() != QMediaFormat::UnspecifiedFormat && m.format != constraints.format()) + continue; + if (constraints.audioCodec() != QMediaFormat::AudioCodec::Unspecified && !m.audio.contains(constraints.audioCodec())) + continue; + for (const auto &c : m.video) + codecs.insert(c); + } + return codecs.values(); +} + +bool QMediaPlatformFormatInfo::isSupported(const QMediaFormat &format, QMediaFormat::ConversionMode m) const +{ + const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; + + for (const auto &m : codecMap) { + if (m.format != format.format()) + continue; + if (!m.audio.contains(format.audioCodec())) + continue; + if (format.mode() == QMediaFormat::AudioAndVideo && !m.video.contains(format.videoCodec())) + continue; + return true; + } + return false; +} + QT_END_NAMESPACE |