// 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 QT_QWINDOWSRESAMPLER_H #define QT_QWINDOWSRESAMPLER_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include struct IMFSample; struct IMFTransform; QT_BEGIN_NAMESPACE class QWindowsMediaFoundation; class Q_MULTIMEDIA_EXPORT QWindowsResampler { public: QWindowsResampler(); ~QWindowsResampler(); bool setup(const QAudioFormat &in, const QAudioFormat &out); QByteArray resample(const QByteArrayView &in); QByteArray resample(IMFSample *sample); QAudioFormat inputFormat() const { return m_inputFormat; } QAudioFormat outputFormat() const { return m_outputFormat; } quint64 outputBufferSize(quint64 inputBufferSize) const; quint64 inputBufferSize(quint64 outputBufferSize) const; quint64 totalInputBytes() const { return m_totalInputBytes; } quint64 totalOutputBytes() const { return m_totalOutputBytes; } private: HRESULT processInput(const QByteArrayView &in); HRESULT processOutput(QByteArray &out); QComPtr m_resampler; QWindowsMediaFoundation *m_wmf = nullptr; bool m_resamplerNeedsSampleBuffer = false; quint64 m_totalInputBytes = 0; quint64 m_totalOutputBytes = 0; QAudioFormat m_inputFormat; QAudioFormat m_outputFormat; DWORD m_inputStreamID = 0; }; QT_END_NAMESPACE #endif // QT_QWINDOWSRESAMPLER_H