Skip to content

Commit b47bc99

Browse files
committed
[PropertiesUtils] Add stream_audio_cfg/stream_subtitles_cfg
1 parent 25dc50c commit b47bc99

File tree

4 files changed

+66
-12
lines changed

4 files changed

+66
-12
lines changed

inputstream.adaptive/addon.xml.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
name="adaptive"
1111
extension=""
1212
tags="true"
13-
listitemprops="license_type|license_key|license_data|license_flags|manifest_type|server_certificate|manifest_update_parameter|manifest_params|manifest_headers|stream_params|stream_headers|original_audio_language|play_timeshift_buffer|pre_init_data|stream_selection_type|chooser_bandwidth_max|chooser_resolution_max|chooser_resolution_secure_max|live_delay"
13+
listitemprops="license_type|license_key|license_data|license_flags|manifest_type|server_certificate|manifest_update_parameter|manifest_params|manifest_headers|stream_params|stream_headers|original_audio_language|play_timeshift_buffer|pre_init_data|stream_selection_type|chooser_bandwidth_max|chooser_resolution_max|chooser_resolution_secure_max|live_delay|stream_audio_cfg|stream_subtitles_cfg"
1414
library_@PLATFORM@="@LIBRARY_FILENAME@"/>
1515
<extension point="xbmc.addon.metadata">
1616
<platform>@PLATFORM@</platform>

src/Session.cpp

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -791,12 +791,27 @@ void CSession::AddStream(PLAYLIST::CAdaptationSet* adp,
791791
stream.m_info.SetStreamType(INPUTSTREAM_TYPE_AUDIO);
792792
if (adp->IsImpaired())
793793
flags |= INPUTSTREAM_FLAG_VISUAL_IMPAIRED;
794-
if (adp->IsDefault())
795-
flags |= INPUTSTREAM_FLAG_DEFAULT;
796-
if (adp->IsOriginal() || (!m_kodiProps.m_audioLanguageOrig.empty() &&
797-
adp->GetLanguage() == m_kodiProps.m_audioLanguageOrig))
794+
795+
if (!m_kodiProps.m_audioLangOriginal.empty()) // Override, ignore manifest configuration
796+
{
797+
if (STRING::CompareNoCase(adp->GetLanguage(), m_kodiProps.m_audioLangOriginal))
798+
flags |= INPUTSTREAM_FLAG_ORIGINAL;
799+
}
800+
else
801+
{
802+
if (adp->IsOriginal())
803+
flags |= INPUTSTREAM_FLAG_ORIGINAL;
804+
}
805+
806+
if (!m_kodiProps.m_audioLangDefault.empty()) // Override, ignore manifest configuration
807+
{
808+
if (STRING::CompareNoCase(adp->GetLanguage(), m_kodiProps.m_audioLangDefault))
809+
flags |= INPUTSTREAM_FLAG_DEFAULT;
810+
}
811+
else
798812
{
799-
flags |= INPUTSTREAM_FLAG_ORIGINAL;
813+
if (adp->IsDefault())
814+
flags |= INPUTSTREAM_FLAG_DEFAULT;
800815
}
801816
break;
802817
}
@@ -807,8 +822,17 @@ void CSession::AddStream(PLAYLIST::CAdaptationSet* adp,
807822
flags |= INPUTSTREAM_FLAG_HEARING_IMPAIRED;
808823
if (adp->IsForced())
809824
flags |= INPUTSTREAM_FLAG_FORCED;
810-
if (adp->IsDefault())
811-
flags |= INPUTSTREAM_FLAG_DEFAULT;
825+
826+
if (!m_kodiProps.m_subtitleLangDefault.empty()) // Override, ignore manifest configuration
827+
{
828+
if (STRING::CompareNoCase(adp->GetLanguage(), m_kodiProps.m_subtitleLangDefault))
829+
flags |= INPUTSTREAM_FLAG_DEFAULT;
830+
}
831+
else
832+
{
833+
if (adp->IsDefault())
834+
flags |= INPUTSTREAM_FLAG_DEFAULT;
835+
}
812836
break;
813837
}
814838
default:

src/utils/PropertiesUtils.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ constexpr std::string_view PROP_MANIFEST_HEADERS = "inputstream.adaptive.manifes
3434
constexpr std::string_view PROP_STREAM_PARAMS = "inputstream.adaptive.stream_params";
3535
constexpr std::string_view PROP_STREAM_HEADERS = "inputstream.adaptive.stream_headers";
3636

37-
constexpr std::string_view PROP_AUDIO_LANG_ORIG = "inputstream.adaptive.original_audio_language";
37+
constexpr std::string_view PROP_AUDIO_LANG_ORIG = "inputstream.adaptive.original_audio_language"; //! @todo: deprecated, to be removed on next Kodi release
38+
constexpr std::string_view PROP_STREAM_AUDIO_CFG = "inputstream.adaptive.stream_audio_cfg";
39+
constexpr std::string_view PROP_STREAM_SUBTITLES_CFG = "inputstream.adaptive.stream_subtitles_cfg";
40+
3841
constexpr std::string_view PROP_PLAY_TIMESHIFT_BUFFER = "inputstream.adaptive.play_timeshift_buffer";
3942
constexpr std::string_view PROP_LIVE_DELAY = "inputstream.adaptive.live_delay";
4043
constexpr std::string_view PROP_PRE_INIT_DATA = "inputstream.adaptive.pre_init_data";
@@ -113,9 +116,29 @@ KodiProperties UTILS::PROPERTIES::ParseKodiProperties(
113116
{
114117
ParseHeaderString(props.m_streamHeaders, prop.second);
115118
}
116-
else if (prop.first == PROP_AUDIO_LANG_ORIG)
119+
else if (prop.first == PROP_AUDIO_LANG_ORIG) //! @todo: deprecated, to be removed on next Kodi release
120+
{
121+
LOG::Log(LOGWARNING,
122+
"Warning \"inputstream.adaptive.original_audio_language\" property is deprecated "
123+
"has been replaced by \"inputstream.adaptive.stream_audio_cfg\". "
124+
"Please read Wiki \"Integration\" page to learn more about the new properties.");
125+
props.m_audioLangOriginal = prop.second;
126+
}
127+
else if (prop.first == PROP_STREAM_AUDIO_CFG)
117128
{
118-
props.m_audioLanguageOrig = prop.second;
129+
auto values = STRING::ToMap(prop.second, '=', ';');
130+
131+
if (STRING::KeyExists(values, "default_flag_langcode"))
132+
props.m_audioLangDefault = STRING::Trim(values["default_flag_langcode"]);
133+
if (STRING::KeyExists(values, "original_flag_langcode"))
134+
props.m_audioLangOriginal = STRING::Trim(values["original_flag_langcode"]);
135+
}
136+
else if (prop.first == PROP_STREAM_SUBTITLES_CFG)
137+
{
138+
auto values = STRING::ToMap(prop.second, '=', ';');
139+
140+
if (STRING::KeyExists(values, "default_flag_langcode"))
141+
props.m_subtitleLangDefault = STRING::Trim(values["default_flag_langcode"]);
119142
}
120143
else if (prop.first == PROP_PLAY_TIMESHIFT_BUFFER)
121144
{

src/utils/PropertiesUtils.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,14 @@ struct KodiProperties
5353
std::string m_streamParams;
5454
// HTTP headers used to download streams
5555
std::map<std::string, std::string> m_streamHeaders;
56-
std::string m_audioLanguageOrig;
56+
57+
// Force audio streams with the specified language code to have the kodi stream "default" flag
58+
std::string m_audioLangDefault;
59+
// Force audio streams with the specified language code to have the kodi stream "original" flag
60+
std::string m_audioLangOriginal;
61+
// Force subtitle streams with the specified language code to have the kodi stream "default" flag
62+
std::string m_subtitleLangDefault;
63+
5764
bool m_playTimeshiftBuffer{false};
5865
// Set a custom delay from live edge in seconds
5966
uint64_t m_liveDelay{0};

0 commit comments

Comments
 (0)