[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / utils / BitstreamStats.cpp
bloba35a757cf6d7a90c7359767461bfd54eff20b807
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "BitstreamStats.h"
11 #include "utils/TimeUtils.h"
13 int64_t BitstreamStats::m_tmFreq;
15 BitstreamStats::BitstreamStats(unsigned int nEstimatedBitrate)
17 m_dBitrate = 0.0;
18 m_dMaxBitrate = 0.0;
19 m_dMinBitrate = -1.0;
21 m_nBitCount = 0;
22 m_nEstimatedBitrate = nEstimatedBitrate;
23 m_tmStart = 0LL;
25 if (m_tmFreq == 0LL)
26 m_tmFreq = CurrentHostFrequency();
29 void BitstreamStats::AddSampleBytes(unsigned int nBytes)
31 AddSampleBits(nBytes*8);
34 void BitstreamStats::AddSampleBits(unsigned int nBits)
36 m_nBitCount += nBits;
37 if (m_nBitCount >= m_nEstimatedBitrate)
38 CalculateBitrate();
41 void BitstreamStats::Start()
43 m_nBitCount = 0;
44 m_tmStart = CurrentHostCounter();
47 void BitstreamStats::CalculateBitrate()
49 int64_t tmNow;
50 tmNow = CurrentHostCounter();
52 double elapsed = (double)(tmNow - m_tmStart) / (double)m_tmFreq;
53 // only update once every 2 seconds
54 if (elapsed >= 2)
56 m_dBitrate = (double)m_nBitCount / elapsed;
58 if (m_dBitrate > m_dMaxBitrate)
59 m_dMaxBitrate = m_dBitrate;
61 if (m_dBitrate < m_dMinBitrate || m_dMinBitrate == -1)
62 m_dMinBitrate = m_dBitrate;
64 Start();