15 m_inputFormat(inputFormat), m_outputFormat(outputFormat)
26 : m_outputFormat(outputFormat), m_startTime(
startTime)
30 qCDebug(qLcResampler) <<
"createResampler";
31 const AVStream *audioStream =
codec->stream();
48 return resample(
reinterpret_cast<const uint8_t **
>(&
data),
54 return resample(
const_cast<const uint8_t **
>(
frame->extended_data),
frame->nb_samples);
59 const int maxOutSamples = adjustMaxOutSamples(inputSamplesCount);
62 auto *
out =
reinterpret_cast<uint8_t *
>(
samples.data());
63 const int outSamples =
64 swr_convert(m_resampler.get(), &
out, maxOutSamples, inputData, inputSamplesCount);
69 m_samplesProcessed += outSamples;
71 qCDebug(qLcResampler) <<
" new frame" <<
startTime <<
"in_samples" << inputSamplesCount
72 << outSamples << maxOutSamples;
76int QFFmpegResampler::adjustMaxOutSamples(
int inputSamplesCount)
78 int maxOutSamples = swr_get_out_samples(m_resampler.get(), inputSamplesCount);
80 const auto remainingCompensationDistance = m_endCompensationSample - m_samplesProcessed;
82 if (remainingCompensationDistance > 0 && maxOutSamples > remainingCompensationDistance) {
90 maxOutSamples = swr_get_out_samples(m_resampler.get(), inputSamplesCount);
98 const int res = swr_set_compensation(m_resampler.get(), delta,
static_cast<int>(
distance));
100 qCWarning(qLcResampler) <<
"swr_set_compensation fail:" <<
res;
102 m_sampleCompensationDelta = delta;
103 m_endCompensationSample = m_samplesProcessed +
distance;
109 return m_samplesProcessed < m_endCompensationSample ? m_sampleCompensationDelta : 0;
QAudioBuffer resample(const char *data, size_t size) override
~QFFmpegResampler() override
void setSampleCompensation(qint32 delta, quint32 distance)
QFFmpegResampler(const QAudioFormat &inputFormat, const QAudioFormat &outputFormat)
qint32 activeSampleCompensationDelta() const
SwrContextUPtr createResampleContext(const AVAudioFormat &inputFormat, const AVAudioFormat &outputFormat)
Combined button and popup list for selecting options.
constexpr Initialization Uninitialized
#define qCWarning(category,...)
#define qCDebug(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei GLsizei GLfloat distance
QTextStream out(stdout)
[7]