Line data Source code
1 : /*
2 : * If not stated otherwise in this file or this component's LICENSE file the
3 : * following copyright and licenses apply:
4 : *
5 : * Copyright 2026 Sky UK
6 : *
7 : * Licensed under the Apache License, Version 2.0 (the "License");
8 : * you may not use this file except in compliance with the License.
9 : * You may obtain a copy of the License at
10 : *
11 : * http://www.apache.org/licenses/LICENSE-2.0
12 : *
13 : * Unless required by applicable law or agreed to in writing, software
14 : * distributed under the License is distributed on an "AS IS" BASIS,
15 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 : * See the License for the specific language governing permissions and
17 : * limitations under the License.
18 : */
19 :
20 : #include "NeedDataDelayCalculator.h"
21 :
22 : namespace
23 : {
24 : constexpr std::chrono::milliseconds kDefaultNeedMediaDataResendTimeMs{15};
25 : constexpr std::chrono::milliseconds kMaxDelayMs{500};
26 : } // namespace
27 :
28 : namespace firebolt::rialto::server
29 : {
30 15 : std::chrono::milliseconds NeedDataDelayCalculator::getNeedMediaDataDelay(MediaSourceType mediaSourceType)
31 : {
32 15 : auto it = m_delays.find(mediaSourceType);
33 15 : if (it == m_delays.end())
34 : {
35 6 : m_delays[mediaSourceType] = kDefaultNeedMediaDataResendTimeMs;
36 6 : return kDefaultNeedMediaDataResendTimeMs;
37 : }
38 9 : return it->second;
39 : }
40 :
41 7 : void NeedDataDelayCalculator::increaseNeedMediaDataDelay(MediaSourceType mediaSourceType)
42 : {
43 7 : auto it = m_delays.find(mediaSourceType);
44 7 : if (it == m_delays.end())
45 : {
46 3 : m_delays[mediaSourceType] = kDefaultNeedMediaDataResendTimeMs;
47 3 : return;
48 : }
49 4 : if (it->second * 2 < kMaxDelayMs)
50 : {
51 4 : it->second *= 2;
52 : }
53 : }
54 :
55 5 : void NeedDataDelayCalculator::decreaseNeedMediaDataDelay(MediaSourceType mediaSourceType)
56 : {
57 5 : auto it = m_delays.find(mediaSourceType);
58 5 : if (it != m_delays.end() && it->second / 2 >= kDefaultNeedMediaDataResendTimeMs)
59 : {
60 1 : it->second /= 2;
61 : }
62 5 : }
63 :
64 2 : void NeedDataDelayCalculator::resetMediaDataDelay(MediaSourceType mediaSourceType)
65 : {
66 2 : m_delays[mediaSourceType] = kDefaultNeedMediaDataResendTimeMs;
67 : }
68 :
69 2 : void NeedDataDelayCalculator::resetMediaDataDelay()
70 : {
71 3 : for (auto &delay : m_delays)
72 : {
73 1 : delay.second = kDefaultNeedMediaDataResendTimeMs;
74 : }
75 2 : }
76 : } // namespace firebolt::rialto::server
|