mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-08-18 09:25:49 +00:00
Enable high quality surround sound when the video bitrate is over 15 Mbps
This commit is contained in:
parent
783af66324
commit
a8b01d6c29
@ -17,7 +17,7 @@ static unsigned short lastSeq;
|
||||
|
||||
#define RTP_PORT 48000
|
||||
|
||||
#define MAX_PACKET_SIZE 400
|
||||
#define MAX_PACKET_SIZE 1400
|
||||
|
||||
// This is much larger than we should typically have buffered, but
|
||||
// it needs to be. We need a cushion in case our thread gets blocked
|
||||
@ -282,9 +282,16 @@ void stopAudioStream(void) {
|
||||
|
||||
int startAudioStream(void* audioContext, int arFlags) {
|
||||
int err;
|
||||
OPUS_MULTISTREAM_CONFIGURATION chosenConfig;
|
||||
|
||||
err = AudioCallbacks.init(StreamConfig.audioConfiguration,
|
||||
opusConfigArray[StreamConfig.audioConfiguration], audioContext, arFlags);
|
||||
memcpy(&chosenConfig, opusConfigArray[StreamConfig.audioConfiguration], sizeof(chosenConfig));
|
||||
if (HighQualitySurroundEnabled) {
|
||||
// With high quality mode enabled, the encoder stops using coupled streams
|
||||
chosenConfig.coupledStreams = 0;
|
||||
chosenConfig.streams = chosenConfig.channelCount;
|
||||
}
|
||||
|
||||
err = AudioCallbacks.init(StreamConfig.audioConfiguration, &chosenConfig, audioContext, arFlags);
|
||||
if (err != 0) {
|
||||
return err;
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ DECODER_RENDERER_CALLBACKS VideoCallbacks;
|
||||
AUDIO_RENDERER_CALLBACKS AudioCallbacks;
|
||||
int NegotiatedVideoFormat;
|
||||
volatile int ConnectionInterrupted;
|
||||
int HighQualitySurroundEnabled;
|
||||
|
||||
// Connection stages
|
||||
static const char* stageNames[STAGE_MAX] = {
|
||||
|
@ -20,6 +20,7 @@ extern DECODER_RENDERER_CALLBACKS VideoCallbacks;
|
||||
extern AUDIO_RENDERER_CALLBACKS AudioCallbacks;
|
||||
extern int NegotiatedVideoFormat;
|
||||
extern volatile int ConnectionInterrupted;
|
||||
extern int HighQualitySurroundEnabled;
|
||||
|
||||
#ifndef UINT24_MAX
|
||||
#define UINT24_MAX 0xFFFFFF
|
||||
|
@ -12,6 +12,7 @@
|
||||
#define CHANNEL_MASK_51_SURROUND 0xFC
|
||||
|
||||
#define LOW_BITRATE_THRESHOLD 5000
|
||||
#define HIGH_BITRATE_THRESHOLD 15000
|
||||
|
||||
typedef struct _SDP_OPTION {
|
||||
char name[MAX_OPTION_NAME_LEN + 1];
|
||||
@ -362,6 +363,19 @@ static PSDP_OPTION getAttributesList(char*urlSafeAddr) {
|
||||
}
|
||||
|
||||
if (AppVersionQuad[0] >= 7) {
|
||||
if (StreamConfig.bitrate > HIGH_BITRATE_THRESHOLD && audioChannelCount > 2) {
|
||||
// Enable high quality mode for surround sound
|
||||
err |= addAttributeString(&optionHead, "x-nv-audio.surround.AudioQuality", "1");
|
||||
|
||||
// Let the audio stream code know that it needs to disable coupled streams when
|
||||
// decoding this audio stream.
|
||||
HighQualitySurroundEnabled = 1;
|
||||
}
|
||||
else {
|
||||
err |= addAttributeString(&optionHead, "x-nv-audio.surround.AudioQuality", "0");
|
||||
HighQualitySurroundEnabled = 0;
|
||||
}
|
||||
|
||||
if (StreamConfig.bitrate < LOW_BITRATE_THRESHOLD && audioChannelCount == 2) {
|
||||
// At low bitrates, cap the stereo audio bitrate to reduce data usage. For some reason,
|
||||
// GFE seems to always enable high quality (512 Kbps) mode for stereo even though we
|
||||
|
Loading…
x
Reference in New Issue
Block a user