mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 01:00:44 +02:00
Handle stereo changes while active, by restarting the codec on both ends
This commit is contained in:
parent
6a2e3cc272
commit
7c5085bd24
3 changed files with 21 additions and 1 deletions
|
@ -579,6 +579,7 @@ void AudioMixerClientData::setupCodec(CodecPluginPointer codec, const QString& c
|
||||||
auto avatarAudioStream = getAvatarAudioStream();
|
auto avatarAudioStream = getAvatarAudioStream();
|
||||||
if (avatarAudioStream) {
|
if (avatarAudioStream) {
|
||||||
avatarAudioStream->setupCodec(codec, codecName, avatarAudioStream->isStereo() ? AudioConstants::STEREO : AudioConstants::MONO);
|
avatarAudioStream->setupCodec(codec, codecName, avatarAudioStream->isStereo() ? AudioConstants::STEREO : AudioConstants::MONO);
|
||||||
|
qCDebug(audio) << "setting AvatarAudioStream... codec:" << _selectedCodecName << "isStereo:" << avatarAudioStream->isStereo();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if INJECTORS_SUPPORT_CODECS
|
#if INJECTORS_SUPPORT_CODECS
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include <udt/PacketHeaders.h>
|
#include <udt/PacketHeaders.h>
|
||||||
|
|
||||||
|
#include "AudioLogging.h"
|
||||||
#include "AvatarAudioStream.h"
|
#include "AvatarAudioStream.h"
|
||||||
|
|
||||||
AvatarAudioStream::AvatarAudioStream(bool isStereo, int numStaticJitterFrames) :
|
AvatarAudioStream::AvatarAudioStream(bool isStereo, int numStaticJitterFrames) :
|
||||||
|
@ -41,6 +42,15 @@ int AvatarAudioStream::parseStreamProperties(PacketType type, const QByteArray&
|
||||||
_ringBuffer.resizeForFrameSize(isStereo
|
_ringBuffer.resizeForFrameSize(isStereo
|
||||||
? AudioConstants::NETWORK_FRAME_SAMPLES_STEREO
|
? AudioConstants::NETWORK_FRAME_SAMPLES_STEREO
|
||||||
: AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL);
|
: AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL);
|
||||||
|
// restart the codec
|
||||||
|
if (_codec) {
|
||||||
|
if (_decoder) {
|
||||||
|
_codec->releaseDecoder(_decoder);
|
||||||
|
}
|
||||||
|
_decoder = _codec->createDecoder(AudioConstants::SAMPLE_RATE, isStereo ? AudioConstants::STEREO : AudioConstants::MONO);
|
||||||
|
}
|
||||||
|
qCDebug(audio) << "resetting AvatarAudioStream... codec:" << _selectedCodecName << "isStereo:" << isStereo;
|
||||||
|
|
||||||
_isStereo = isStereo;
|
_isStereo = isStereo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1382,7 +1382,16 @@ void AudioClient::setIsStereoInput(bool isStereoInput) {
|
||||||
_desiredInputFormat.setChannelCount(1);
|
_desiredInputFormat.setChannelCount(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// change in channel count for desired input format, restart the input device
|
// restart the codec
|
||||||
|
if (_codec) {
|
||||||
|
if (_encoder) {
|
||||||
|
_codec->releaseEncoder(_encoder);
|
||||||
|
}
|
||||||
|
_encoder = _codec->createEncoder(AudioConstants::SAMPLE_RATE, _isStereoInput ? AudioConstants::STEREO : AudioConstants::MONO);
|
||||||
|
}
|
||||||
|
qCDebug(audioclient) << "Reset Codec:" << _selectedCodecName << "isStereoInput:" << _isStereoInput;
|
||||||
|
|
||||||
|
// restart the input device
|
||||||
switchInputToAudioDevice(_inputDeviceInfo);
|
switchInputToAudioDevice(_inputDeviceInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue