vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Jun 17 13:49:58 2015 +0200| [63506d5add8aafe2c6767dc37d014d14e71529b3] | committer: Francois Cartegnie
demux: adaptative: add inertia to rate based logic > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=63506d5add8aafe2c6767dc37d014d14e71529b3 --- .../adaptative/logic/RateBasedAdaptationLogic.cpp | 26 ++++++++++++++++---- .../adaptative/logic/RateBasedAdaptationLogic.h | 2 ++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/modules/demux/adaptative/logic/RateBasedAdaptationLogic.cpp b/modules/demux/adaptative/logic/RateBasedAdaptationLogic.cpp index 7394d63..98f139b 100644 --- a/modules/demux/adaptative/logic/RateBasedAdaptationLogic.cpp +++ b/modules/demux/adaptative/logic/RateBasedAdaptationLogic.cpp @@ -21,6 +21,9 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ + +#define __STDC_CONSTANT_MACROS + #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -40,6 +43,8 @@ RateBasedAdaptationLogic::RateBasedAdaptationLogic (int w, int h) : { width = w; height = h; + cumulatedTime = 0; + stabilizer = 16; } BaseRepresentation *RateBasedAdaptationLogic::getCurrentRepresentation(StreamType type, BasePeriod *period) const @@ -66,14 +71,25 @@ void RateBasedAdaptationLogic::updateDownloadRate(size_t size, mtime_t time) size_t current = size * 8000 / time; if (current >= bpsAvg) - bpsAvg = bpsAvg + (current - bpsAvg) / (bpsSamplecount + 1); + bpsAvg = bpsAvg + (current - bpsAvg) / ++bpsSamplecount; else - bpsAvg = bpsAvg - (bpsAvg - current) / (bpsSamplecount + 1); + bpsAvg = bpsAvg - (bpsAvg - current) / ++bpsSamplecount; - bpsSamplecount++; + cumulatedTime += time; + if(cumulatedTime > 4 * CLOCK_FREQ / stabilizer) + { + if( currentBps <= bpsAvg * 3/4 && stabilizer < 16 ) + { + stabilizer++; + } + else if( currentBps > bpsAvg * 3/4 && stabilizer > 1 ) + { + stabilizer /= 2; + } - if(bpsSamplecount % 5 == 0) - currentBps = bpsAvg; + currentBps = bpsAvg * 3/4; + cumulatedTime = 0; + } } FixedRateAdaptationLogic::FixedRateAdaptationLogic(size_t bps) : diff --git a/modules/demux/adaptative/logic/RateBasedAdaptationLogic.h b/modules/demux/adaptative/logic/RateBasedAdaptationLogic.h index 82c89e9..76377f0 100644 --- a/modules/demux/adaptative/logic/RateBasedAdaptationLogic.h +++ b/modules/demux/adaptative/logic/RateBasedAdaptationLogic.h @@ -48,6 +48,8 @@ namespace adaptative size_t bpsAvg; size_t bpsSamplecount; size_t currentBps; + mtime_t cumulatedTime; + int stabilizer; }; class FixedRateAdaptationLogic : public AbstractAdaptationLogic _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
