mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-29 15:52:07 +00:00
b=999267 ensure AudioSegment::Resample() processes all frames of each chunk r=padenot
--HG-- extra : rebase_source : e3128e9837c108b36b83cd3cf8762e549c5ef696
This commit is contained in:
parent
1a316f5d4f
commit
229cf57fa4
@ -192,24 +192,29 @@ public:
|
||||
uint32_t channels = c.mChannelData.Length();
|
||||
output.SetLength(channels);
|
||||
bufferPtrs.SetLength(channels);
|
||||
uint32_t inFrames = c.mDuration,
|
||||
outFrames = c.mDuration * aOutRate / aInRate;
|
||||
uint32_t inFrames = c.mDuration;
|
||||
// Round up to allocate; the last frame may not be used.
|
||||
NS_ASSERTION((UINT32_MAX - aInRate + 1) / c.mDuration >= aOutRate,
|
||||
"Dropping samples");
|
||||
uint32_t outSize = (c.mDuration * aOutRate + aInRate - 1) / aInRate;
|
||||
for (uint32_t i = 0; i < channels; i++) {
|
||||
const T* in = static_cast<const T*>(c.mChannelData[i]);
|
||||
T* out = output[i].AppendElements(outFrames);
|
||||
T* out = output[i].AppendElements(outSize);
|
||||
uint32_t outFrames = outSize;
|
||||
|
||||
dom::WebAudioUtils::SpeexResamplerProcess(aResampler, i,
|
||||
in, &inFrames,
|
||||
out, &outFrames);
|
||||
|
||||
MOZ_ASSERT(inFrames == c.mDuration);
|
||||
bufferPtrs[i] = out;
|
||||
output[i].SetLength(outFrames);
|
||||
}
|
||||
MOZ_ASSERT(channels > 0);
|
||||
c.mDuration = output[0].Length();
|
||||
c.mBuffer = new mozilla::SharedChannelArrayBuffer<T>(&output);
|
||||
for (uint32_t i = 0; i < channels; i++) {
|
||||
c.mChannelData[i] = bufferPtrs[i];
|
||||
}
|
||||
c.mDuration = outFrames;
|
||||
mDuration += c.mDuration;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user