From 6245934462d9639680d7f6a007df25627b9b3719 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 5 Jul 2019 21:01:14 -0700 Subject: [PATCH] Fix streaming from Gen 3 servers --- src/SdpGenerator.c | 74 +++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/src/SdpGenerator.c b/src/SdpGenerator.c index cc48b76..5d8a0eb 100644 --- a/src/SdpGenerator.c +++ b/src/SdpGenerator.c @@ -271,6 +271,15 @@ static PSDP_OPTION getAttributesList(char*urlSafeAddr) { err |= addGen5Options(&optionHead); } + if (StreamConfig.audioConfiguration == AUDIO_CONFIGURATION_51_SURROUND) { + audioChannelCount = CHANNEL_COUNT_51_SURROUND; + audioChannelMask = CHANNEL_MASK_51_SURROUND; + } + else { + audioChannelCount = CHANNEL_COUNT_STEREO; + audioChannelMask = CHANNEL_MASK_STEREO; + } + if (AppVersionQuad[0] >= 4) { unsigned char slicesPerFrame; @@ -337,15 +346,6 @@ static PSDP_OPTION getAttributesList(char*urlSafeAddr) { sprintf(payloadStr, "%d", StreamConfig.clientRefreshRateX100); err |= addAttributeString(&optionHead, "x-nv-video[0].clientRefreshRateX100", payloadStr); } - - if (StreamConfig.audioConfiguration == AUDIO_CONFIGURATION_51_SURROUND) { - audioChannelCount = CHANNEL_COUNT_51_SURROUND; - audioChannelMask = CHANNEL_MASK_51_SURROUND; - } - else { - audioChannelCount = CHANNEL_COUNT_STEREO; - audioChannelMask = CHANNEL_MASK_STEREO; - } sprintf(payloadStr, "%d", audioChannelCount); err |= addAttributeString(&optionHead, "x-nv-audio.surround.numChannels", payloadStr); @@ -357,42 +357,42 @@ static PSDP_OPTION getAttributesList(char*urlSafeAddr) { else { err |= addAttributeString(&optionHead, "x-nv-audio.surround.enable", "0"); } + } - if (AppVersionQuad[0] >= 7) { - // Decide to use HQ audio based on the original video bitrate, not the HEVC-adjusted value - if (OriginalVideoBitrate >= HIGH_AUDIO_BITRATE_THRESHOLD && audioChannelCount > 2 && - (AudioCallbacks.capabilities & CAPABILITY_SLOW_OPUS_DECODER) == 0) { - // Enable high quality mode for surround sound - err |= addAttributeString(&optionHead, "x-nv-audio.surround.AudioQuality", "1"); + if (AppVersionQuad[0] >= 7) { + // Decide to use HQ audio based on the original video bitrate, not the HEVC-adjusted value + if (OriginalVideoBitrate >= HIGH_AUDIO_BITRATE_THRESHOLD && audioChannelCount > 2 && + (AudioCallbacks.capabilities & CAPABILITY_SLOW_OPUS_DECODER) == 0) { + // 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; + // Let the audio stream code know that it needs to disable coupled streams when + // decoding this audio stream. + HighQualitySurroundEnabled = 1; - // Use 5 ms frames since we don't have a slow decoder + // Use 5 ms frames since we don't have a slow decoder + AudioPacketDuration = 5; + } + else { + err |= addAttributeString(&optionHead, "x-nv-audio.surround.AudioQuality", "0"); + HighQualitySurroundEnabled = 0; + + if ((AudioCallbacks.capabilities & CAPABILITY_SLOW_OPUS_DECODER) == 0) { + // Use 5 ms packets by default for lowest latency AudioPacketDuration = 5; } else { - err |= addAttributeString(&optionHead, "x-nv-audio.surround.AudioQuality", "0"); - HighQualitySurroundEnabled = 0; - - if ((AudioCallbacks.capabilities & CAPABILITY_SLOW_OPUS_DECODER) == 0) { - // Use 5 ms packets by default for lowest latency - AudioPacketDuration = 5; - } - else { - // Use 20 ms packets for slow decoders to save CPU and bandwidth - AudioPacketDuration = 20; - } + // Use 20 ms packets for slow decoders to save CPU and bandwidth + AudioPacketDuration = 20; } + } - sprintf(payloadStr, "%d", AudioPacketDuration); - err |= addAttributeString(&optionHead, "x-nv-aqos.packetDuration", payloadStr); - } - else { - // 5 ms duration for legacy servers - AudioPacketDuration = 5; - } + sprintf(payloadStr, "%d", AudioPacketDuration); + err |= addAttributeString(&optionHead, "x-nv-aqos.packetDuration", payloadStr); + } + else { + // 5 ms duration for legacy servers + AudioPacketDuration = 5; } if (err == 0) {