0.2.42 - DTS surround sound support
This commit is contained in:
@@ -481,6 +481,8 @@ func sessionPlaybackCapabilities(sess store.Session) emby.PlaybackCapabilities {
|
||||
capabilities.HEVCHDR10Plus = true
|
||||
case "video_hevc_dolby_vision":
|
||||
capabilities.HEVCDolbyVision = true
|
||||
case "audio_passthrough_v1":
|
||||
capabilities.AudioProfileV1 = true
|
||||
default:
|
||||
parsePlaybackCapabilityValue(value, &capabilities)
|
||||
}
|
||||
@@ -508,6 +510,9 @@ func (s *Server) effectivePlaybackCapabilities(
|
||||
}
|
||||
|
||||
func parsePlaybackCapabilityValue(value string, capabilities *emby.PlaybackCapabilities) {
|
||||
if parseAudioCapability(value, capabilities) {
|
||||
return
|
||||
}
|
||||
parseIntCapability(value, "video_h264_level_", &capabilities.H264Level)
|
||||
parseIntCapability(value, "video_h264_high10_level_", &capabilities.H264High10Level)
|
||||
parseIntCapability(value, "video_hevc_main_level_", &capabilities.HEVCMainLevel)
|
||||
@@ -520,6 +525,51 @@ func parsePlaybackCapabilityValue(value string, capabilities *emby.PlaybackCapab
|
||||
)
|
||||
}
|
||||
|
||||
func parseAudioCapability(value string, capabilities *emby.PlaybackCapabilities) bool {
|
||||
const prefix = "audio_"
|
||||
if !strings.HasPrefix(value, prefix) {
|
||||
return false
|
||||
}
|
||||
if strings.HasPrefix(value, "audio_max_channels_") {
|
||||
parsed, err := strconv.Atoi(strings.TrimPrefix(value, "audio_max_channels_"))
|
||||
if err == nil && parsed >= 2 && parsed <= 8 {
|
||||
capabilities.AudioMaxChannels = parsed
|
||||
}
|
||||
return true
|
||||
}
|
||||
for _, suffix := range []string{"_passthrough", "_decode"} {
|
||||
if !strings.HasSuffix(value, suffix) {
|
||||
continue
|
||||
}
|
||||
codec := strings.TrimSuffix(strings.TrimPrefix(value, prefix), suffix)
|
||||
if !validAudioCapabilityCodec(codec) {
|
||||
return true
|
||||
}
|
||||
if suffix == "_passthrough" {
|
||||
if capabilities.AudioPassthrough == nil {
|
||||
capabilities.AudioPassthrough = map[string]bool{}
|
||||
}
|
||||
capabilities.AudioPassthrough[codec] = true
|
||||
} else {
|
||||
if capabilities.AudioDecode == nil {
|
||||
capabilities.AudioDecode = map[string]bool{}
|
||||
}
|
||||
capabilities.AudioDecode[codec] = true
|
||||
}
|
||||
return true
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func validAudioCapabilityCodec(codec string) bool {
|
||||
switch codec {
|
||||
case "ac3", "eac3", "atmos", "dts", "dts_hd", "truehd":
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func parseIntCapability(value, prefix string, destination *int) {
|
||||
if !strings.HasPrefix(value, prefix) {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user