84 QList<QImageCapture::FileFormat> list;
85 const auto formats = QImageWriter::supportedImageFormats();
87 for (
const auto &f : formats) {
88 auto format = QString::fromUtf8(f);
89 if (format.compare(QLatin1String(
"jpg"), Qt::CaseInsensitive) == 0)
90 list.append(QImageCapture::FileFormat::JPEG);
91 else if (format.compare(QLatin1String(
"png"), Qt::CaseInsensitive) == 0)
92 list.append(QImageCapture::FileFormat::PNG);
93 else if (format.compare(QLatin1String(
"webp"), Qt::CaseInsensitive) == 0)
94 list.append(QImageCapture::FileFormat::WebP);
95 else if (format.compare(QLatin1String(
"tiff"), Qt::CaseInsensitive) == 0)
96 list.append(QImageCapture::FileFormat::Tiff);
102QWindowsFormatInfo::QWindowsFormatInfo()
104 const QList<CodecMap> containerTable = {
105 { QMediaFormat::MPEG4,
106 { QMediaFormat::AudioCodec::AAC, QMediaFormat::AudioCodec::MP3, QMediaFormat::AudioCodec::ALAC, QMediaFormat::AudioCodec::AC3, QMediaFormat::AudioCodec::EAC3 },
107 { QMediaFormat::VideoCodec::H264, QMediaFormat::VideoCodec::H265, QMediaFormat::VideoCodec::MotionJPEG } },
108 { QMediaFormat::Matroska,
109 { QMediaFormat::AudioCodec::AAC, QMediaFormat::AudioCodec::MP3, QMediaFormat::AudioCodec::ALAC, QMediaFormat::AudioCodec::AC3, QMediaFormat::AudioCodec::EAC3, QMediaFormat::AudioCodec::FLAC, QMediaFormat::AudioCodec::Vorbis, QMediaFormat::AudioCodec::Opus },
110 { QMediaFormat::VideoCodec::H264, QMediaFormat::VideoCodec::H265, QMediaFormat::VideoCodec::VP8, QMediaFormat::VideoCodec::VP9, QMediaFormat::VideoCodec::MotionJPEG } },
111 { QMediaFormat::WebM,
112 { QMediaFormat::AudioCodec::Vorbis, QMediaFormat::AudioCodec::Opus },
113 { QMediaFormat::VideoCodec::VP8, QMediaFormat::VideoCodec::VP9 } },
114 { QMediaFormat::QuickTime,
115 { QMediaFormat::AudioCodec::AAC, QMediaFormat::AudioCodec::MP3, QMediaFormat::AudioCodec::ALAC, QMediaFormat::AudioCodec::AC3, QMediaFormat::AudioCodec::EAC3 },
116 { QMediaFormat::VideoCodec::H264, QMediaFormat::VideoCodec::H265, QMediaFormat::VideoCodec::MotionJPEG } },
118 { QMediaFormat::AudioCodec::AAC },
121 { QMediaFormat::AudioCodec::MP3 },
123 { QMediaFormat::FLAC,
124 { QMediaFormat::AudioCodec::FLAC },
126 { QMediaFormat::Mpeg4Audio,
127 { QMediaFormat::AudioCodec::AAC, QMediaFormat::AudioCodec::MP3, QMediaFormat::AudioCodec::ALAC, QMediaFormat::AudioCodec::AC3, QMediaFormat::AudioCodec::EAC3 },
130 { QMediaFormat::AudioCodec::WMA },
133 { QMediaFormat::AudioCodec::WMA },
134 { QMediaFormat::VideoCodec::WMV } }
137 const QSet<QMediaFormat::FileFormat> decoderFormats = {
139 QMediaFormat::Matroska,
141 QMediaFormat::QuickTime,
145 QMediaFormat::Mpeg4Audio,
150 const QSet<QMediaFormat::FileFormat> encoderFormats = {
155 QMediaFormat::Mpeg4Audio,
160 CheckedCodecs<QMediaFormat::AudioCodec> checkedAudioCodecs;
161 CheckedCodecs<QMediaFormat::VideoCodec> checkedVideoCodecs;
163 auto ensureCodecs = [&] (CodecMap &codecs, QMediaFormat::ConversionMode mode) {
164 codecs.audio.removeIf([&] (
auto codec) {
return !isSupportedCodec(codec, mode, checkedAudioCodecs); });
165 codecs.video.removeIf([&] (
auto codec) {
return !isSupportedCodec(codec, mode, checkedVideoCodecs); });
166 return !codecs.video.empty() || !codecs.audio.empty();
169 for (
const auto &codecMap : containerTable) {
170 if (decoderFormats.contains(codecMap.format)) {
172 if (ensureCodecs(m, QMediaFormat::Decode))
176 if (encoderFormats.contains(codecMap.format)) {
178 if (ensureCodecs(m, QMediaFormat::Encode))
183 imageFormats = getImageFormatList();