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

Side by Side Diff: media/mojo/services/mojo_renderer_service.cc

Issue 1955843002: Move Renderer permanent callbacks into RendererClient interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 7 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/mojo/services/mojo_renderer_service.h" 5 #include "media/mojo/services/mojo_renderer_service.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "media/base/media_keys.h" 10 #include "media/base/media_keys.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 if (!cdm_context) { 96 if (!cdm_context) {
97 DVLOG(1) << "CDM context not available: " << cdm_id; 97 DVLOG(1) << "CDM context not available: " << cdm_id;
98 callback.Run(false); 98 callback.Run(false);
99 return; 99 return;
100 } 100 }
101 101
102 renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached, 102 renderer_->SetCdm(cdm_context, base::Bind(&MojoRendererService::OnCdmAttached,
103 weak_this_, cdm, callback)); 103 weak_this_, cdm, callback));
104 } 104 }
105 105
106 void MojoRendererService::OnError(PipelineStatus error) {
107 DVLOG(1) << __FUNCTION__ << "(" << error << ")";
108 state_ = STATE_ERROR;
109 client_->OnError();
110 }
111
112 void MojoRendererService::OnEnded() {
113 DVLOG(1) << __FUNCTION__;
114 CancelPeriodicMediaTimeUpdates();
115 client_->OnEnded();
116 }
117
118 void MojoRendererService::OnStatisticsUpdate(const PipelineStatistics& stats) {}
119
120 void MojoRendererService::OnBufferingStateChange(BufferingState state) {
121 DVLOG(2) << __FUNCTION__ << "(" << state << ")";
122 client_->OnBufferingStateChange(
123 static_cast<interfaces::BufferingState>(state));
124 }
125
126 void MojoRendererService::OnWaitingForDecryptionKey() {}
xhwang 2016/05/09 18:13:22 This CL makes it super clear that we should plumb
alokp 2016/05/09 21:31:43 Done.
127
106 void MojoRendererService::OnStreamReady( 128 void MojoRendererService::OnStreamReady(
107 const mojo::Callback<void(bool)>& callback) { 129 const mojo::Callback<void(bool)>& callback) {
108 DCHECK_EQ(state_, STATE_INITIALIZING); 130 DCHECK_EQ(state_, STATE_INITIALIZING);
109 131
110 renderer_->Initialize( 132 renderer_->Initialize(
111 stream_provider_.get(), 133 this, stream_provider_.get(),
112 base::Bind( 134 base::Bind(&MojoRendererService::OnRendererInitializeDone, weak_this_,
113 &MojoRendererService::OnRendererInitializeDone, weak_this_, callback), 135 callback));
114 base::Bind(&MojoRendererService::OnUpdateStatistics, weak_this_),
115 base::Bind(&MojoRendererService::OnBufferingStateChanged, weak_this_),
116 base::Bind(&MojoRendererService::OnRendererEnded, weak_this_),
117 base::Bind(&MojoRendererService::OnError, weak_this_),
118 base::Bind(base::DoNothing));
119 } 136 }
120 137
121 void MojoRendererService::OnRendererInitializeDone( 138 void MojoRendererService::OnRendererInitializeDone(
122 const mojo::Callback<void(bool)>& callback, 139 const mojo::Callback<void(bool)>& callback,
123 PipelineStatus status) { 140 PipelineStatus status) {
124 DVLOG(1) << __FUNCTION__; 141 DVLOG(1) << __FUNCTION__;
125 DCHECK_EQ(state_, STATE_INITIALIZING); 142 DCHECK_EQ(state_, STATE_INITIALIZING);
126 143
127 if (status != PIPELINE_OK) { 144 if (status != PIPELINE_OK) {
128 state_ = STATE_ERROR; 145 state_ = STATE_ERROR;
129 callback.Run(false); 146 callback.Run(false);
130 return; 147 return;
131 } 148 }
132 149
133 state_ = STATE_PLAYING; 150 state_ = STATE_PLAYING;
134 callback.Run(true); 151 callback.Run(true);
135 } 152 }
136 153
137 void MojoRendererService::OnUpdateStatistics(const PipelineStatistics& stats) {
138 }
139
140 void MojoRendererService::UpdateMediaTime(bool force) { 154 void MojoRendererService::UpdateMediaTime(bool force) {
141 const uint64_t media_time = renderer_->GetMediaTime().InMicroseconds(); 155 const uint64_t media_time = renderer_->GetMediaTime().InMicroseconds();
142 if (!force && media_time == last_media_time_usec_) 156 if (!force && media_time == last_media_time_usec_)
143 return; 157 return;
144 158
145 client_->OnTimeUpdate(media_time, media_time); 159 client_->OnTimeUpdate(media_time, media_time);
146 last_media_time_usec_ = media_time; 160 last_media_time_usec_ = media_time;
147 } 161 }
148 162
149 void MojoRendererService::CancelPeriodicMediaTimeUpdates() { 163 void MojoRendererService::CancelPeriodicMediaTimeUpdates() {
150 DVLOG(2) << __FUNCTION__; 164 DVLOG(2) << __FUNCTION__;
151 UpdateMediaTime(false); 165 UpdateMediaTime(false);
152 time_update_timer_.Stop(); 166 time_update_timer_.Stop();
153 } 167 }
154 168
155 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() { 169 void MojoRendererService::SchedulePeriodicMediaTimeUpdates() {
156 DVLOG(2) << __FUNCTION__; 170 DVLOG(2) << __FUNCTION__;
157 UpdateMediaTime(true); 171 UpdateMediaTime(true);
158 time_update_timer_.Start( 172 time_update_timer_.Start(
159 FROM_HERE, 173 FROM_HERE,
160 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs), 174 base::TimeDelta::FromMilliseconds(kTimeUpdateIntervalMs),
161 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false)); 175 base::Bind(&MojoRendererService::UpdateMediaTime, weak_this_, false));
162 } 176 }
163 177
164 void MojoRendererService::OnBufferingStateChanged(
165 BufferingState new_buffering_state) {
166 DVLOG(2) << __FUNCTION__ << "(" << new_buffering_state << ")";
167 client_->OnBufferingStateChange(
168 static_cast<interfaces::BufferingState>(new_buffering_state));
169 }
170
171 void MojoRendererService::OnRendererEnded() {
172 DVLOG(1) << __FUNCTION__;
173 CancelPeriodicMediaTimeUpdates();
174 client_->OnEnded();
175 }
176
177 void MojoRendererService::OnError(PipelineStatus error) {
178 DVLOG(1) << __FUNCTION__ << "(" << error << ")";
179 state_ = STATE_ERROR;
180 client_->OnError();
181 }
182
183 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) { 178 void MojoRendererService::OnFlushCompleted(const mojo::Closure& callback) {
184 DVLOG(1) << __FUNCTION__; 179 DVLOG(1) << __FUNCTION__;
185 DCHECK_EQ(state_, STATE_FLUSHING); 180 DCHECK_EQ(state_, STATE_FLUSHING);
186 state_ = STATE_PLAYING; 181 state_ = STATE_PLAYING;
187 callback.Run(); 182 callback.Run();
188 } 183 }
189 184
190 void MojoRendererService::OnCdmAttached( 185 void MojoRendererService::OnCdmAttached(
191 scoped_refptr<MediaKeys> cdm, 186 scoped_refptr<MediaKeys> cdm,
192 const mojo::Callback<void(bool)>& callback, 187 const mojo::Callback<void(bool)>& callback,
193 bool success) { 188 bool success) {
194 DVLOG(1) << __FUNCTION__ << "(" << success << ")"; 189 DVLOG(1) << __FUNCTION__ << "(" << success << ")";
195 190
196 if (success) 191 if (success)
197 cdm_ = cdm; 192 cdm_ = cdm;
198 193
199 callback.Run(success); 194 callback.Run(success);
200 } 195 }
201 196
202 } // namespace media 197 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698