зеркало из https://github.com/mozilla/gecko-dev.git
Bug 901633 - Part 13 - Teach the resampler at the input of the MSG to dynamically change its channel count if needed. r=jesup
When the audio comes from a PeerConnection, we don't know how many channels the audio will have, and it can change anyways. --HG-- extra : rebase_source : b4d78217db012d2d94ede6d6724209b6046fbb29
This commit is contained in:
Родитель
089ff9d73b
Коммит
a5e8e37e15
|
@ -2483,24 +2483,19 @@ SourceMediaStream::ResampleAudioToGraphSampleRate(TrackData* aTrackData, MediaSe
|
|||
AudioSegment* segment = static_cast<AudioSegment*>(aSegment);
|
||||
int channels = segment->ChannelCount();
|
||||
|
||||
// If this segment is just silence, we delay instanciating the resampler.
|
||||
if (channels) {
|
||||
if (aTrackData->mResampler) {
|
||||
MOZ_ASSERT(aTrackData->mResamplerChannelCount == segment->ChannelCount());
|
||||
} else {
|
||||
SpeexResamplerState* state = speex_resampler_init(channels,
|
||||
aTrackData->mInputRate,
|
||||
GraphImpl()->GraphRate(),
|
||||
SPEEX_RESAMPLER_QUALITY_MIN,
|
||||
nullptr);
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
aTrackData->mResampler.own(state);
|
||||
#ifdef DEBUG
|
||||
aTrackData->mResamplerChannelCount = channels;
|
||||
#endif
|
||||
// If this segment is just silence, we delay instanciating the resampler. We
|
||||
// also need to recreate the resampler if the channel count changes.
|
||||
if (channels && aTrackData->mResamplerChannelCount != channels) {
|
||||
SpeexResamplerState* state = speex_resampler_init(channels,
|
||||
aTrackData->mInputRate,
|
||||
GraphImpl()->GraphRate(),
|
||||
SPEEX_RESAMPLER_QUALITY_MIN,
|
||||
nullptr);
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
aTrackData->mResampler.own(state);
|
||||
aTrackData->mResamplerChannelCount = channels;
|
||||
}
|
||||
segment->ResampleChunks(aTrackData->mResampler, aTrackData->mInputRate, GraphImpl()->GraphRate());
|
||||
}
|
||||
|
|
|
@ -897,9 +897,7 @@ protected:
|
|||
// Resampler if the rate of the input track does not match the
|
||||
// MediaStreamGraph's.
|
||||
nsAutoRef<SpeexResamplerState> mResampler;
|
||||
#ifdef DEBUG
|
||||
int mResamplerChannelCount;
|
||||
#endif
|
||||
StreamTime mStart;
|
||||
// End-time of data already flushed to the track (excluding mData)
|
||||
StreamTime mEndOfFlushedData;
|
||||
|
|
Загрузка…
Ссылка в новой задаче