Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: chromecast/media/cma/base/buffering_state.cc

Issue 509213002: Add a buffering controller for Chromecast. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove ref-counting on the buffering controller. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chromecast/media/cma/base/buffering_state.h"
6
7 #include <sstream>
8
9 #include "base/logging.h"
10 #include "media/base/buffers.h"
11
12 namespace media {
13 namespace cma {
14
15 BufferingConfig::BufferingConfig(
16 base::TimeDelta low_level_threshold,
17 base::TimeDelta high_level_threshold)
18 : low_level_threshold_(low_level_threshold),
19 high_level_threshold_(high_level_threshold) {
20 }
21
22 BufferingConfig::~BufferingConfig() {
23 }
24
25
26 BufferingState::BufferingState(
27 const scoped_refptr<BufferingConfig>& config,
28 const base::Closure& state_changed_cb,
29 const HighLevelBufferCb& high_level_buffer_cb)
30 : config_(config),
31 state_changed_cb_(state_changed_cb),
32 high_level_buffer_cb_(high_level_buffer_cb),
33 state_(kLowLevel),
34 media_time_(kNoTimestamp()),
35 max_rendering_time_(kNoTimestamp()),
36 buffered_time_(kNoTimestamp()) {
37 }
38
39 BufferingState::~BufferingState() {
40 }
41
42 void BufferingState::OnConfigChanged() {
43 state_ = GetBufferLevelState();
44 }
45
46 void BufferingState::SetMediaTime(base::TimeDelta media_time) {
47 media_time_ = media_time;
48 switch (state_) {
49 case kLowLevel:
50 case kMediumLevel:
51 case kHighLevel:
52 UpdateState(GetBufferLevelState());
53 break;
54 case kEosReached:
55 break;
56 }
57 }
58
59 void BufferingState::SetMaxRenderingTime(base::TimeDelta max_rendering_time) {
60 max_rendering_time_ = max_rendering_time;
61 }
62
63 base::TimeDelta BufferingState::GetMaxRenderingTime() const {
64 return max_rendering_time_;
65 }
66
67 void BufferingState::SetBufferedTime(base::TimeDelta buffered_time) {
68 buffered_time_ = buffered_time;
69 switch (state_) {
70 case kLowLevel:
71 case kMediumLevel:
72 case kHighLevel:
73 UpdateState(GetBufferLevelState());
74 break;
75 case kEosReached:
76 break;
77 }
78 }
79
80 void BufferingState::NotifyEos() {
81 UpdateState(kEosReached);
82 }
83
84 void BufferingState::NotifyMaxCapacity(base::TimeDelta buffered_time) {
85 if (media_time_ == kNoTimestamp() || buffered_time == kNoTimestamp()) {
86 LOG(WARNING) << "Max capacity with no timestamp";
87 return;
88 }
89 base::TimeDelta buffer_duration = buffered_time - media_time_;
90 if (buffer_duration < config_->high_level())
91 high_level_buffer_cb_.Run(buffer_duration);
92 }
93
94 std::string BufferingState::ToString() const {
95 std::ostringstream s;
96 s << "state=" << state_
97 << " media_time_ms=" << media_time_.InMilliseconds()
98 << " buffered_time_ms=" << buffered_time_.InMilliseconds()
99 << " low_level_ms=" << config_->low_level().InMilliseconds()
100 << " high_level_ms=" << config_->high_level().InMilliseconds();
101 return s.str();
102 }
103
104 BufferingState::State BufferingState::GetBufferLevelState() const {
105 if (media_time_ == kNoTimestamp() || buffered_time_ == kNoTimestamp())
106 return kLowLevel;
107
108 base::TimeDelta buffer_duration = buffered_time_ - media_time_;
109 if (buffer_duration < config_->low_level())
110 return kLowLevel;
111 if (buffer_duration >= config_->high_level())
112 return kHighLevel;
113 return kMediumLevel;
114 }
115
116 void BufferingState::UpdateState(State new_state) {
117 if (new_state == state_)
118 return;
119
120 state_ = new_state;
121 if (!state_changed_cb_.is_null())
122 state_changed_cb_.Run();
123 }
124
125 } // namespace cma
126 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698