summaryrefslogtreecommitdiffstats
path: root/src/multimedia/qmediaformat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/qmediaformat.h')
-rw-r--r--src/multimedia/qmediaformat.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/multimedia/qmediaformat.h b/src/multimedia/qmediaformat.h
new file mode 100644
index 000000000..225d21896
--- /dev/null
+++ b/src/multimedia/qmediaformat.h
@@ -0,0 +1,149 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QMEDIAFORMAT_H
+#define QMEDIAFORMAT_H
+
+#include <QtCore/qsharedpointer.h>
+#include <QtMultimedia/qtmultimediaglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class QMimeType;
+class QMediaFormat;
+class QMediaFormatPrivate;
+
+QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QMediaFormatPrivate, Q_MULTIMEDIA_EXPORT)
+
+class Q_MULTIMEDIA_EXPORT QMediaFormat
+{
+ Q_GADGET
+ Q_PROPERTY(FileFormat fileFormat READ fileFormat WRITE setFileFormat)
+ Q_PROPERTY(AudioCodec audioCodec READ audioCodec WRITE setAudioCodec)
+ Q_PROPERTY(VideoCodec videoCodec READ videoCodec WRITE setVideoCodec)
+ Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
+public:
+ enum FileFormat {
+ UnspecifiedFormat = -1,
+ // Video Formats
+ WMV,
+ AVI,
+ Matroska,
+ MPEG4,
+ Ogg,
+ QuickTime,
+ WebM,
+ // Audio Only Formats
+ Mpeg4Audio,
+ AAC,
+ WMA,
+ MP3,
+ FLAC,
+ Wave,
+ LastFileFormat = Wave
+ };
+ Q_ENUM(FileFormat)
+
+ enum class AudioCodec {
+ Unspecified = -1,
+ MP3,
+ AAC,
+ AC3,
+ EAC3,
+ FLAC,
+ DolbyTrueHD,
+ Opus,
+ Vorbis,
+ Wave,
+ WMA,
+ ALAC,
+ LastAudioCodec = ALAC
+ };
+ Q_ENUM(AudioCodec)
+
+ enum class VideoCodec {
+ Unspecified = -1,
+ MPEG1,
+ MPEG2,
+ MPEG4,
+ H264,
+ H265,
+ VP8,
+ VP9,
+ AV1,
+ Theora,
+ WMV,
+ MotionJPEG,
+ LastVideoCodec = MotionJPEG
+ };
+ Q_ENUM(VideoCodec)
+
+ enum ConversionMode {
+ Encode,
+ Decode
+ };
+ Q_ENUM(ConversionMode)
+
+ enum ResolveFlags
+ {
+ NoFlags,
+ RequiresVideo
+ };
+
+ QMediaFormat(FileFormat format = UnspecifiedFormat);
+ ~QMediaFormat();
+ QMediaFormat(const QMediaFormat &other) noexcept;
+ QMediaFormat &operator=(const QMediaFormat &other) noexcept;
+
+ QMediaFormat(QMediaFormat &&other) noexcept = default;
+ QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QMediaFormat)
+ void swap(QMediaFormat &other) noexcept
+ {
+ std::swap(fmt, other.fmt);
+ std::swap(audio, other.audio);
+ std::swap(video, other.video);
+ d.swap(other.d);
+ }
+
+ FileFormat fileFormat() const { return fmt; }
+ void setFileFormat(FileFormat f) { fmt = f; }
+
+ void setVideoCodec(VideoCodec codec) { video = codec; }
+ VideoCodec videoCodec() const { return video; }
+
+ void setAudioCodec(AudioCodec codec) { audio = codec; }
+ AudioCodec audioCodec() const { return audio; }
+
+ Q_INVOKABLE bool isSupported(ConversionMode mode) const;
+
+ QMimeType mimeType() const;
+
+ Q_INVOKABLE QList<FileFormat> supportedFileFormats(ConversionMode m);
+ Q_INVOKABLE QList<VideoCodec> supportedVideoCodecs(ConversionMode m);
+ Q_INVOKABLE QList<AudioCodec> supportedAudioCodecs(ConversionMode m);
+
+ Q_INVOKABLE static QString fileFormatName(FileFormat fileFormat);
+ Q_INVOKABLE static QString audioCodecName(AudioCodec codec);
+ Q_INVOKABLE static QString videoCodecName(VideoCodec codec);
+
+ Q_INVOKABLE static QString fileFormatDescription(QMediaFormat::FileFormat fileFormat);
+ Q_INVOKABLE static QString audioCodecDescription(QMediaFormat::AudioCodec codec);
+ Q_INVOKABLE static QString videoCodecDescription(QMediaFormat::VideoCodec codec);
+
+ bool operator==(const QMediaFormat &other) const;
+ bool operator!=(const QMediaFormat &other) const
+ { return !operator==(other); }
+
+ void resolveForEncoding(ResolveFlags flags);
+
+protected:
+ friend class QMediaFormatPrivate;
+ FileFormat fmt;
+ AudioCodec audio = AudioCodec::Unspecified;
+ VideoCodec video = VideoCodec::Unspecified;
+ QExplicitlySharedDataPointer<QMediaFormatPrivate> d;
+};
+
+QT_END_NAMESPACE
+
+#endif