1 | // Copyright (C) 2021 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 | #include "qplatformmediaformatinfo_p.h" |
5 | |
6 | #include <set> |
7 | |
8 | QT_BEGIN_NAMESPACE |
9 | |
10 | QPlatformMediaFormatInfo::QPlatformMediaFormatInfo() = default; |
11 | |
12 | QPlatformMediaFormatInfo::~QPlatformMediaFormatInfo() = default; |
13 | |
14 | QList<QMediaFormat::FileFormat> QPlatformMediaFormatInfo::supportedFileFormats(const QMediaFormat &constraints, QMediaFormat::ConversionMode m) const |
15 | { |
16 | std::set<QMediaFormat::FileFormat> formats; |
17 | |
18 | const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; |
19 | for (const auto &m : codecMap) { |
20 | if (constraints.audioCodec() != QMediaFormat::AudioCodec::Unspecified && !m.audio.contains(t: constraints.audioCodec())) |
21 | continue; |
22 | if (constraints.videoCodec() != QMediaFormat::VideoCodec::Unspecified && !m.video.contains(t: constraints.videoCodec())) |
23 | continue; |
24 | formats.insert(x: m.format); |
25 | } |
26 | return { formats.begin(), formats.end() }; |
27 | } |
28 | |
29 | QList<QMediaFormat::AudioCodec> QPlatformMediaFormatInfo::supportedAudioCodecs(const QMediaFormat &constraints, QMediaFormat::ConversionMode m) const |
30 | { |
31 | std::set<QMediaFormat::AudioCodec> codecs; |
32 | |
33 | const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; |
34 | for (const auto &m : codecMap) { |
35 | if (constraints.fileFormat() != QMediaFormat::UnspecifiedFormat && m.format != constraints.fileFormat()) |
36 | continue; |
37 | if (constraints.videoCodec() != QMediaFormat::VideoCodec::Unspecified && !m.video.contains(t: constraints.videoCodec())) |
38 | continue; |
39 | for (const auto &c : m.audio) |
40 | codecs.insert(x: c); |
41 | } |
42 | |
43 | return { codecs.begin(), codecs.end() }; |
44 | } |
45 | |
46 | QList<QMediaFormat::VideoCodec> QPlatformMediaFormatInfo::supportedVideoCodecs(const QMediaFormat &constraints, QMediaFormat::ConversionMode m) const |
47 | { |
48 | std::set<QMediaFormat::VideoCodec> codecs; |
49 | |
50 | const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; |
51 | for (const auto &m : codecMap) { |
52 | if (constraints.fileFormat() != QMediaFormat::UnspecifiedFormat && m.format != constraints.fileFormat()) |
53 | continue; |
54 | if (constraints.audioCodec() != QMediaFormat::AudioCodec::Unspecified && !m.audio.contains(t: constraints.audioCodec())) |
55 | continue; |
56 | for (const auto &c : m.video) |
57 | codecs.insert(x: c); |
58 | } |
59 | return { codecs.begin(), codecs.end() }; |
60 | } |
61 | |
62 | bool QPlatformMediaFormatInfo::isSupported(const QMediaFormat &format, QMediaFormat::ConversionMode m) const |
63 | { |
64 | const auto &codecMap = (m == QMediaFormat::Encode) ? encoders : decoders; |
65 | |
66 | for (const auto &m : codecMap) { |
67 | if (m.format != format.fileFormat()) |
68 | continue; |
69 | if (format.audioCodec() != QMediaFormat::AudioCodec::Unspecified && !m.audio.contains(t: format.audioCodec())) |
70 | continue; |
71 | if (format.videoCodec() != QMediaFormat::VideoCodec::Unspecified && !m.video.contains(t: format.videoCodec())) |
72 | continue; |
73 | return true; |
74 | } |
75 | return false; |
76 | } |
77 | |
78 | QT_END_NAMESPACE |
79 |