11#include "libavutil/samplefmt.h"
24 using TransformFunc = std::function<void(std::byte *, qreal,
unsigned long)>;
27 PaSampleFormat m_paSampleFormat;
28 AVSampleFormat m_ffmpegSampleFormat;
30 std::function<void(std::byte *, qreal,
unsigned long)> m_transform;
35 PaSampleFormat paSampleFormat,
36 AVSampleFormat ffmpegSampleFormat,
38 TransformFunc transformFunc
40 m_paSampleFormat(paSampleFormat),
41 m_ffmpegSampleFormat(ffmpegSampleFormat),
42 m_bytesPerSample(bytesPerSample),
43 m_transform(std::move(transformFunc)) {}
49 TransformFunc transform;
51 if constexpr(std::is_same<T, void>()) {
52 transform = [](std::byte *src_, qreal factor,
unsigned long samples) {
53 throw std::runtime_error(
"Unsupported samples format.");
57 transform = [](std::byte *src_, qreal factor,
unsigned long samples) {
58 T *src =
static_cast<T *
>(
static_cast<void *
>(src_));
59 for (
size_t sampleOffset = 0; sampleOffset < samples; sampleOffset++) {
60 src[sampleOffset] =
static_cast<T
>(src[sampleOffset] * factor);
65 return {id, paSample, ffmpegSample,
static_cast<int>(size), transform};
70 m_transform(src, factor, samples);
74 return this->m_index == rhs.m_index;
78 return !(rhs == *
this);
82 return m_paSampleFormat;
86 return m_ffmpegSampleFormat;
90 return m_bytesPerSample;
109 )
noexcept: m_sampleFormat(std::move(sampleFormat)), m_sampleRate(sampleRate), m_channelCount(channelCount) {}
123 return static_cast<qreal
>(bytes) / (m_sampleRate * m_channelCount *
getBytesPerSample());
127 return static_cast<int64_t
>(duration * m_sampleRate * m_channelCount *
getBytesPerSample());
143 return m_channelCount;
147 return qBound<int64_t>(
148 static_cast<int64_t
>(2 * 1024 * m_channelCount * m_sampleFormat.
getBytesPerSample()),
156#pragma GCC diagnostic push
157#pragma GCC diagnostic ignored "-Wold-style-cast"
163#pragma GCC diagnostic pop
167 switch (ffmpegFormat) {
168 case AV_SAMPLE_FMT_U8:
169 case AV_SAMPLE_FMT_U8P:
171 case AV_SAMPLE_FMT_S16:
172 case AV_SAMPLE_FMT_S16P:
174 case AV_SAMPLE_FMT_S32:
175 case AV_SAMPLE_FMT_S32P:
177 case AV_SAMPLE_FMT_FLT:
178 case AV_SAMPLE_FMT_FLTP:
185#pragma GCC diagnostic push
186#pragma GCC diagnostic ignored "-Wold-style-cast"
188 switch (paSampleFormat) {
202#pragma GCC diagnostic pop
Definition: audioformat.hpp:155
const PonySampleFormat UInt8
Definition: audioformat.hpp:159
const PonySampleFormat Float
Definition: audioformat.hpp:162
const PonySampleFormat Int16
Definition: audioformat.hpp:160
const PonyAudioFormat DEFAULT_AUDIO_FORMAT
Definition: audioformat.hpp:164
const PonySampleFormat Unknown
Definition: audioformat.hpp:158
const PonySampleFormat Int32
Definition: audioformat.hpp:161
#define INCLUDE_FFMPEG_END
Definition: ponyplayer.h:26
Definition: audioformat.hpp:16
qint32 processedLength
Definition: audioformat.hpp:18
qint32 origLength
Definition: audioformat.hpp:17
qreal speedUpRate
Definition: audioformat.hpp:19