1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40
41#ifndef QAUDIOFORMAT_H
42#define QAUDIOFORMAT_H
43
44#include <QtCore/qobject.h>
45#include <QtCore/qshareddata.h>
46
47#include <QtMultimedia/qtmultimediaglobal.h>
48#include <QtMultimedia/qmultimedia.h>
49
50QT_BEGIN_NAMESPACE
51
52class QAudioFormatPrivate;
53
54class Q_MULTIMEDIA_EXPORT QAudioFormat
55{
56public:
57 enum SampleType { Unknown, SignedInt, UnSignedInt, Float };
58 enum Endian { BigEndian = QSysInfo::BigEndian, LittleEndian = QSysInfo::LittleEndian };
59
60 QAudioFormat();
61 QAudioFormat(const QAudioFormat &other);
62 ~QAudioFormat();
63
64 QAudioFormat& operator=(const QAudioFormat &other);
65 bool operator==(const QAudioFormat &other) const;
66 bool operator!=(const QAudioFormat &other) const;
67
68 bool isValid() const;
69
70 void setSampleRate(int sampleRate);
71 int sampleRate() const;
72
73 void setChannelCount(int channelCount);
74 int channelCount() const;
75
76 void setSampleSize(int sampleSize);
77 int sampleSize() const;
78
79 void setCodec(const QString &codec);
80 QString codec() const;
81
82 void setByteOrder(QAudioFormat::Endian byteOrder);
83 QAudioFormat::Endian byteOrder() const;
84
85 void setSampleType(QAudioFormat::SampleType sampleType);
86 QAudioFormat::SampleType sampleType() const;
87
88 // Helper functions
89 qint32 bytesForDuration(qint64 duration) const;
90 qint64 durationForBytes(qint32 byteCount) const;
91
92 qint32 bytesForFrames(qint32 frameCount) const;
93 qint32 framesForBytes(qint32 byteCount) const;
94
95 qint32 framesForDuration(qint64 duration) const;
96 qint64 durationForFrames(qint32 frameCount) const;
97
98 int bytesPerFrame() const;
99
100private:
101 QSharedDataPointer<QAudioFormatPrivate> d;
102};
103
104#ifndef QT_NO_DEBUG_STREAM
105Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug, const QAudioFormat &);
106Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug, QAudioFormat::SampleType);
107Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug, QAudioFormat::Endian);
108#endif
109
110QT_END_NAMESPACE
111
112Q_DECLARE_METATYPE(QAudioFormat)
113Q_DECLARE_METATYPE(QAudioFormat::SampleType)
114Q_DECLARE_METATYPE(QAudioFormat::Endian)
115
116#endif // QAUDIOFORMAT_H
117