15 m_inputFormat(inputFormat), m_outputFormat(outputFormat)
21 createResampleContext(AVAudioFormat(m_inputFormat), AVAudioFormat(m_outputFormat));
25 : m_outputFormat(outputFormat)
29 qCDebug(qLcResampler) <<
"createResampler";
30 const AVStream *audioStream =
codec->stream();
36 m_resampler = createResampleContext(AVAudioFormat(audioStream->codecpar),
37 AVAudioFormat(m_outputFormat));
47 return resample(
reinterpret_cast<const uint8_t **
>(&
data),
53 return resample(
const_cast<const uint8_t **
>(
frame->extended_data),
frame->nb_samples);
58 const int maxOutSamples = adjustMaxOutSamples(inputSamplesCount);
61 auto *
out =
reinterpret_cast<uint8_t *
>(
samples.data());
62 const int outSamples =
63 swr_convert(m_resampler.get(), &
out, maxOutSamples, inputData, inputSamplesCount);
68 m_samplesProcessed += outSamples;
70 qCDebug(qLcResampler) <<
" new frame" <<
startTime <<
"in_samples" << inputSamplesCount
71 << outSamples << maxOutSamples;
75int QFFmpegResampler::adjustMaxOutSamples(
int inputSamplesCount)
77 int maxOutSamples = swr_get_out_samples(m_resampler.get(), inputSamplesCount);
79 const auto remainingCompensationDistance = m_endCompensationSample - m_samplesProcessed;
81 if (remainingCompensationDistance > 0 && maxOutSamples > remainingCompensationDistance) {
89 maxOutSamples = swr_get_out_samples(m_resampler.get(), inputSamplesCount);
97 const int res = swr_set_compensation(m_resampler.get(), delta,
static_cast<int>(
distance));
99 qCWarning(qLcResampler) <<
"swr_set_compensation fail:" <<
res;
101 m_sampleCompensationDelta = delta;
102 m_endCompensationSample = m_samplesProcessed +
distance;
108 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
Combined button and popup list for selecting options.
constexpr Initialization Uninitialized
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
#define qCDebug(category,...)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei GLsizei GLfloat distance
QTextStream out(stdout)
[7]