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

Side by Side Diff: chromecast/media/cma/pipeline/media_pipeline_impl.cc

Issue 1142513004: Chromecast: MessageLoopProxy cleanup --> SingleThreadTaskRunner. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 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 "chromecast/media/cma/pipeline/media_pipeline_impl.h" 5 #include "chromecast/media/cma/pipeline/media_pipeline_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/callback_helpers.h" 9 #include "base/callback_helpers.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/single_thread_task_runner.h"
13 #include "base/thread_task_runner_handle.h"
13 #include "base/time/time.h" 14 #include "base/time/time.h"
14 #include "chromecast/media/cdm/browser_cdm_cast.h" 15 #include "chromecast/media/cdm/browser_cdm_cast.h"
15 #include "chromecast/media/cma/backend/media_clock_device.h" 16 #include "chromecast/media/cma/backend/media_clock_device.h"
16 #include "chromecast/media/cma/backend/media_pipeline_device.h" 17 #include "chromecast/media/cma/backend/media_pipeline_device.h"
17 #include "chromecast/media/cma/base/buffering_controller.h" 18 #include "chromecast/media/cma/base/buffering_controller.h"
18 #include "chromecast/media/cma/base/buffering_state.h" 19 #include "chromecast/media/cma/base/buffering_state.h"
19 #include "chromecast/media/cma/base/cma_logging.h" 20 #include "chromecast/media/cma/base/cma_logging.h"
20 #include "chromecast/media/cma/base/coded_frame_provider.h" 21 #include "chromecast/media/cma/base/coded_frame_provider.h"
21 #include "chromecast/media/cma/pipeline/audio_pipeline_impl.h" 22 #include "chromecast/media/cma/pipeline/audio_pipeline_impl.h"
22 #include "chromecast/media/cma/pipeline/video_pipeline_impl.h" 23 #include "chromecast/media/cma/pipeline/video_pipeline_impl.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 if (!clock_device_->SetState(MediaClockDevice::kStateRunning)) { 173 if (!clock_device_->SetState(MediaClockDevice::kStateRunning)) {
173 OnError(::media::PIPELINE_ERROR_ABORT); 174 OnError(::media::PIPELINE_ERROR_ABORT);
174 return; 175 return;
175 } 176 }
176 177
177 // Enable time updates. 178 // Enable time updates.
178 enable_time_update_ = true; 179 enable_time_update_ = true;
179 statistics_rolling_counter_ = 0; 180 statistics_rolling_counter_ = 0;
180 if (!pending_time_update_task_) { 181 if (!pending_time_update_task_) {
181 pending_time_update_task_ = true; 182 pending_time_update_task_ = true;
182 base::MessageLoopProxy::current()->PostTask( 183 base::ThreadTaskRunnerHandle::Get()->PostTask(
183 FROM_HERE, 184 FROM_HERE, base::Bind(&MediaPipelineImpl::UpdateMediaTime, weak_this_));
184 base::Bind(&MediaPipelineImpl::UpdateMediaTime, weak_this_));
185 } 185 }
186 186
187 // Setup the audio and video pipeline for the new timeline. 187 // Setup the audio and video pipeline for the new timeline.
188 if (has_audio_) { 188 if (has_audio_) {
189 scoped_refptr<BufferingState> buffering_state; 189 scoped_refptr<BufferingState> buffering_state;
190 if (buffering_controller_) 190 if (buffering_controller_)
191 buffering_state = buffering_controller_->AddStream("audio"); 191 buffering_state = buffering_controller_->AddStream("audio");
192 if (!audio_pipeline_->StartPlayingFrom(time, buffering_state)) { 192 if (!audio_pipeline_->StartPlayingFrom(time, buffering_state)) {
193 OnError(::media::PIPELINE_ERROR_ABORT); 193 OnError(::media::PIPELINE_ERROR_ABORT);
194 return; 194 return;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 if (statistics_rolling_counter_ == 0) { 319 if (statistics_rolling_counter_ == 0) {
320 audio_pipeline_->UpdateStatistics(); 320 audio_pipeline_->UpdateStatistics();
321 video_pipeline_->UpdateStatistics(); 321 video_pipeline_->UpdateStatistics();
322 } 322 }
323 statistics_rolling_counter_ = 323 statistics_rolling_counter_ =
324 (statistics_rolling_counter_ + 1) % kStatisticsUpdatePeriod; 324 (statistics_rolling_counter_ + 1) % kStatisticsUpdatePeriod;
325 325
326 base::TimeDelta media_time(clock_device_->GetTime()); 326 base::TimeDelta media_time(clock_device_->GetTime());
327 if (media_time == ::media::kNoTimestamp()) { 327 if (media_time == ::media::kNoTimestamp()) {
328 pending_time_update_task_ = true; 328 pending_time_update_task_ = true;
329 base::MessageLoopProxy::current()->PostDelayedTask( 329 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
330 FROM_HERE, 330 FROM_HERE, base::Bind(&MediaPipelineImpl::UpdateMediaTime, weak_this_),
331 base::Bind(&MediaPipelineImpl::UpdateMediaTime, weak_this_),
332 kTimeUpdateInterval); 331 kTimeUpdateInterval);
333 return; 332 return;
334 } 333 }
335 base::TimeTicks stc = base::TimeTicks::Now(); 334 base::TimeTicks stc = base::TimeTicks::Now();
336 335
337 base::TimeDelta max_rendering_time = media_time; 336 base::TimeDelta max_rendering_time = media_time;
338 if (buffering_controller_) { 337 if (buffering_controller_) {
339 buffering_controller_->SetMediaTime(media_time); 338 buffering_controller_->SetMediaTime(media_time);
340 339
341 // Receiving the same time twice in a row means playback isn't moving, 340 // Receiving the same time twice in a row means playback isn't moving,
342 // so don't interpolate ahead. 341 // so don't interpolate ahead.
343 if (media_time != last_media_time_) { 342 if (media_time != last_media_time_) {
344 max_rendering_time = buffering_controller_->GetMaxRenderingTime(); 343 max_rendering_time = buffering_controller_->GetMaxRenderingTime();
345 if (max_rendering_time == ::media::kNoTimestamp()) 344 if (max_rendering_time == ::media::kNoTimestamp())
346 max_rendering_time = media_time; 345 max_rendering_time = media_time;
347 346
348 // Cap interpolation time to avoid interpolating too far ahead. 347 // Cap interpolation time to avoid interpolating too far ahead.
349 max_rendering_time = 348 max_rendering_time =
350 std::min(max_rendering_time, media_time + 2 * kTimeUpdateInterval); 349 std::min(max_rendering_time, media_time + 2 * kTimeUpdateInterval);
351 } 350 }
352 } 351 }
353 352
354 last_media_time_ = media_time; 353 last_media_time_ = media_time;
355 if (!client_.time_update_cb.is_null()) 354 if (!client_.time_update_cb.is_null())
356 client_.time_update_cb.Run(media_time, max_rendering_time, stc); 355 client_.time_update_cb.Run(media_time, max_rendering_time, stc);
357 356
358 pending_time_update_task_ = true; 357 pending_time_update_task_ = true;
359 base::MessageLoopProxy::current()->PostDelayedTask( 358 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
360 FROM_HERE, 359 FROM_HERE, base::Bind(&MediaPipelineImpl::UpdateMediaTime, weak_this_),
361 base::Bind(&MediaPipelineImpl::UpdateMediaTime, weak_this_),
362 kTimeUpdateInterval); 360 kTimeUpdateInterval);
363 } 361 }
364 362
365 void MediaPipelineImpl::OnError(::media::PipelineStatus error) { 363 void MediaPipelineImpl::OnError(::media::PipelineStatus error) {
366 DCHECK(thread_checker_.CalledOnValidThread()); 364 DCHECK(thread_checker_.CalledOnValidThread());
367 DCHECK_NE(error, ::media::PIPELINE_OK) << "PIPELINE_OK is not an error!"; 365 DCHECK_NE(error, ::media::PIPELINE_OK) << "PIPELINE_OK is not an error!";
368 if (!client_.error_cb.is_null()) 366 if (!client_.error_cb.is_null())
369 client_.error_cb.Run(error); 367 client_.error_cb.Run(error);
370 } 368 }
371 369
372 } // namespace media 370 } // namespace media
373 } // namespace chromecast 371 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/cma/pipeline/av_pipeline_impl.cc ('k') | chromecast/media/cma/test/frame_segmenter_for_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698