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

Side by Side Diff: chromecast/browser/media/cma_message_filter_host.cc

Issue 1083883003: Move BindToCurrentLoop from media/base/ to base/ Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix media/base/callback_holder.h compile Created 5 years, 8 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/browser/media/cma_message_filter_host.h" 5 #include "chromecast/browser/media/cma_message_filter_host.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind_to_current_loop.h"
9 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
10 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/shared_memory.h" 12 #include "base/memory/shared_memory.h"
12 #include "base/sync_socket.h" 13 #include "base/sync_socket.h"
13 #include "chromecast/browser/media/cma_message_loop.h" 14 #include "chromecast/browser/media/cma_message_loop.h"
14 #include "chromecast/browser/media/media_pipeline_host.h" 15 #include "chromecast/browser/media/media_pipeline_host.h"
15 #include "chromecast/common/media/cma_messages.h" 16 #include "chromecast/common/media/cma_messages.h"
16 #include "chromecast/media/cdm/browser_cdm_cast.h" 17 #include "chromecast/media/cdm/browser_cdm_cast.h"
17 #include "chromecast/media/cma/backend/video_plane.h" 18 #include "chromecast/media/cma/backend/video_plane.h"
18 #include "chromecast/media/cma/pipeline/av_pipeline_client.h" 19 #include "chromecast/media/cma/pipeline/av_pipeline_client.h"
19 #include "chromecast/media/cma/pipeline/media_pipeline_client.h" 20 #include "chromecast/media/cma/pipeline/media_pipeline_client.h"
20 #include "chromecast/media/cma/pipeline/video_pipeline_client.h" 21 #include "chromecast/media/cma/pipeline/video_pipeline_client.h"
21 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
22 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
23 #include "media/base/bind_to_current_loop.h"
24 #include "ui/gfx/geometry/point_f.h" 24 #include "ui/gfx/geometry/point_f.h"
25 #include "ui/gfx/geometry/quad_f.h" 25 #include "ui/gfx/geometry/quad_f.h"
26 #include "ui/gfx/geometry/size.h" 26 #include "ui/gfx/geometry/size.h"
27 27
28 namespace chromecast { 28 namespace chromecast {
29 namespace media { 29 namespace media {
30 30
31 #define FORWARD_CALL(arg_pipeline, arg_fn, ...) \ 31 #define FORWARD_CALL(arg_pipeline, arg_fn, ...) \
32 task_runner_->PostTask( \ 32 task_runner_->PostTask( \
33 FROM_HERE, \ 33 FROM_HERE, \
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 } 203 }
204 204
205 205
206 // *** Handle incoming messages *** 206 // *** Handle incoming messages ***
207 207
208 void CmaMessageFilterHost::CreateMedia(int media_id, LoadType load_type) { 208 void CmaMessageFilterHost::CreateMedia(int media_id, LoadType load_type) {
209 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 209 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
210 210
211 scoped_ptr<MediaPipelineHost> media_pipeline_host(new MediaPipelineHost()); 211 scoped_ptr<MediaPipelineHost> media_pipeline_host(new MediaPipelineHost());
212 MediaPipelineClient client; 212 MediaPipelineClient client;
213 client.time_update_cb = ::media::BindToCurrentLoop(base::Bind( 213 client.time_update_cb = base::BindToCurrentLoop(base::Bind(
214 &CmaMessageFilterHost::OnTimeUpdate, weak_this_, media_id)); 214 &CmaMessageFilterHost::OnTimeUpdate, weak_this_, media_id));
215 client.buffering_state_cb = ::media::BindToCurrentLoop(base::Bind( 215 client.buffering_state_cb = base::BindToCurrentLoop(base::Bind(
216 &CmaMessageFilterHost::OnBufferingNotification, weak_this_, media_id)); 216 &CmaMessageFilterHost::OnBufferingNotification, weak_this_, media_id));
217 client.error_cb = ::media::BindToCurrentLoop( 217 client.error_cb = base::BindToCurrentLoop(
218 base::Bind(&CmaMessageFilterHost::OnPlaybackError, 218 base::Bind(&CmaMessageFilterHost::OnPlaybackError,
219 weak_this_, media_id, media::kNoTrackId)); 219 weak_this_, media_id, media::kNoTrackId));
220 task_runner_->PostTask( 220 task_runner_->PostTask(
221 FROM_HERE, 221 FROM_HERE,
222 base::Bind(&SetMediaPipeline, 222 base::Bind(&SetMediaPipeline,
223 process_id_, media_id, media_pipeline_host.get())); 223 process_id_, media_id, media_pipeline_host.get()));
224 task_runner_->PostTask( 224 task_runner_->PostTask(
225 FROM_HERE, 225 FROM_HERE,
226 base::Bind(&MediaPipelineHost::Initialize, 226 base::Bind(&MediaPipelineHost::Initialize,
227 base::Unretained(media_pipeline_host.get()), 227 base::Unretained(media_pipeline_host.get()),
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 foreign_memory_handle, foreign_socket_handle)); 305 foreign_memory_handle, foreign_socket_handle));
306 return; 306 return;
307 } 307 }
308 308
309 // Note: the IPC message can be sent only once the pipe has been fully 309 // Note: the IPC message can be sent only once the pipe has been fully
310 // configured. Part of this configuration is done in 310 // configured. Part of this configuration is done in
311 // |MediaPipelineHost::SetAvPipe|. 311 // |MediaPipelineHost::SetAvPipe|.
312 // TODO(erickung): investigate possible memory leak here. 312 // TODO(erickung): investigate possible memory leak here.
313 // If the weak pointer in |av_pipe_set_cb| gets invalidated, 313 // If the weak pointer in |av_pipe_set_cb| gets invalidated,
314 // then |foreign_memory_handle| leaks. 314 // then |foreign_memory_handle| leaks.
315 base::Closure pipe_read_activity_cb = ::media::BindToCurrentLoop( 315 base::Closure pipe_read_activity_cb = base::BindToCurrentLoop(
316 base::Bind(&CmaMessageFilterHost::OnPipeReadActivity, weak_this_, 316 base::Bind(&CmaMessageFilterHost::OnPipeReadActivity, weak_this_,
317 media_id, track_id)); 317 media_id, track_id));
318 base::Closure av_pipe_set_cb = ::media::BindToCurrentLoop( 318 base::Closure av_pipe_set_cb = base::BindToCurrentLoop(
319 base::Bind(&CmaMessageFilterHost::OnAvPipeSet, weak_this_, 319 base::Bind(&CmaMessageFilterHost::OnAvPipeSet, weak_this_,
320 media_id, track_id, 320 media_id, track_id,
321 foreign_memory_handle, base::Passed(&foreign_socket))); 321 foreign_memory_handle, base::Passed(&foreign_socket)));
322 task_runner_->PostTask( 322 task_runner_->PostTask(
323 FROM_HERE, 323 FROM_HERE,
324 base::Bind(&MediaPipelineHost::SetAvPipe, 324 base::Bind(&MediaPipelineHost::SetAvPipe,
325 base::Unretained(media_pipeline), 325 base::Unretained(media_pipeline),
326 track_id, 326 track_id,
327 base::Passed(&shared_memory), 327 base::Passed(&shared_memory),
328 pipe_read_activity_cb, 328 pipe_read_activity_cb,
(...skipping 19 matching lines...) Expand all
348 int media_id, TrackId track_id, const ::media::AudioDecoderConfig& config) { 348 int media_id, TrackId track_id, const ::media::AudioDecoderConfig& config) {
349 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 349 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
350 MediaPipelineHost* media_pipeline = LookupById(media_id); 350 MediaPipelineHost* media_pipeline = LookupById(media_id);
351 if (!media_pipeline) { 351 if (!media_pipeline) {
352 Send(new CmaMsg_TrackStateChanged( 352 Send(new CmaMsg_TrackStateChanged(
353 media_id, track_id, ::media::PIPELINE_ERROR_ABORT)); 353 media_id, track_id, ::media::PIPELINE_ERROR_ABORT));
354 return; 354 return;
355 } 355 }
356 356
357 AvPipelineClient client; 357 AvPipelineClient client;
358 client.eos_cb = ::media::BindToCurrentLoop(base::Bind( 358 client.eos_cb = base::BindToCurrentLoop(base::Bind(
359 &CmaMessageFilterHost::OnEos, weak_this_, media_id, track_id)); 359 &CmaMessageFilterHost::OnEos, weak_this_, media_id, track_id));
360 client.playback_error_cb = ::media::BindToCurrentLoop(base::Bind( 360 client.playback_error_cb = base::BindToCurrentLoop(base::Bind(
361 &CmaMessageFilterHost::OnPlaybackError, weak_this_, media_id, track_id)); 361 &CmaMessageFilterHost::OnPlaybackError, weak_this_, media_id, track_id));
362 client.statistics_cb = ::media::BindToCurrentLoop( 362 client.statistics_cb = base::BindToCurrentLoop(
363 base::Bind(&CmaMessageFilterHost::OnStatisticsUpdated, weak_this_, 363 base::Bind(&CmaMessageFilterHost::OnStatisticsUpdated, weak_this_,
364 media_id, track_id)); 364 media_id, track_id));
365 365
366 ::media::PipelineStatusCB pipeline_status_cb = ::media::BindToCurrentLoop( 366 ::media::PipelineStatusCB pipeline_status_cb = base::BindToCurrentLoop(
367 base::Bind(&CmaMessageFilterHost::OnTrackStateChanged, weak_this_, 367 base::Bind(&CmaMessageFilterHost::OnTrackStateChanged, weak_this_,
368 media_id, track_id)); 368 media_id, track_id));
369 task_runner_->PostTask( 369 task_runner_->PostTask(
370 FROM_HERE, 370 FROM_HERE,
371 base::Bind(&MediaPipelineHost::AudioInitialize, 371 base::Bind(&MediaPipelineHost::AudioInitialize,
372 base::Unretained(media_pipeline), 372 base::Unretained(media_pipeline),
373 track_id, client, config, pipeline_status_cb)); 373 track_id, client, config, pipeline_status_cb));
374 } 374 }
375 375
376 void CmaMessageFilterHost::VideoInitialize( 376 void CmaMessageFilterHost::VideoInitialize(
377 int media_id, TrackId track_id, const ::media::VideoDecoderConfig& config) { 377 int media_id, TrackId track_id, const ::media::VideoDecoderConfig& config) {
378 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 378 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
379 MediaPipelineHost* media_pipeline = LookupById(media_id); 379 MediaPipelineHost* media_pipeline = LookupById(media_id);
380 if (!media_pipeline) { 380 if (!media_pipeline) {
381 Send(new CmaMsg_TrackStateChanged( 381 Send(new CmaMsg_TrackStateChanged(
382 media_id, track_id, ::media::PIPELINE_ERROR_ABORT)); 382 media_id, track_id, ::media::PIPELINE_ERROR_ABORT));
383 return; 383 return;
384 } 384 }
385 385
386 VideoPipelineClient client; 386 VideoPipelineClient client;
387 client.av_pipeline_client.eos_cb = ::media::BindToCurrentLoop( 387 client.av_pipeline_client.eos_cb = base::BindToCurrentLoop(
388 base::Bind(&CmaMessageFilterHost::OnEos, weak_this_, 388 base::Bind(&CmaMessageFilterHost::OnEos, weak_this_,
389 media_id, track_id)); 389 media_id, track_id));
390 client.av_pipeline_client.playback_error_cb = ::media::BindToCurrentLoop( 390 client.av_pipeline_client.playback_error_cb = base::BindToCurrentLoop(
391 base::Bind(&CmaMessageFilterHost::OnPlaybackError, weak_this_, 391 base::Bind(&CmaMessageFilterHost::OnPlaybackError, weak_this_,
392 media_id, track_id)); 392 media_id, track_id));
393 client.av_pipeline_client.statistics_cb = ::media::BindToCurrentLoop( 393 client.av_pipeline_client.statistics_cb = base::BindToCurrentLoop(
394 base::Bind(&CmaMessageFilterHost::OnStatisticsUpdated, weak_this_, 394 base::Bind(&CmaMessageFilterHost::OnStatisticsUpdated, weak_this_,
395 media_id, track_id)); 395 media_id, track_id));
396 client.natural_size_changed_cb = ::media::BindToCurrentLoop( 396 client.natural_size_changed_cb = base::BindToCurrentLoop(
397 base::Bind(&CmaMessageFilterHost::OnNaturalSizeChanged, weak_this_, 397 base::Bind(&CmaMessageFilterHost::OnNaturalSizeChanged, weak_this_,
398 media_id, track_id)); 398 media_id, track_id));
399 399
400 ::media::PipelineStatusCB pipeline_status_cb = ::media::BindToCurrentLoop( 400 ::media::PipelineStatusCB pipeline_status_cb = base::BindToCurrentLoop(
401 base::Bind(&CmaMessageFilterHost::OnTrackStateChanged, weak_this_, 401 base::Bind(&CmaMessageFilterHost::OnTrackStateChanged, weak_this_,
402 media_id, track_id)); 402 media_id, track_id));
403 task_runner_->PostTask( 403 task_runner_->PostTask(
404 FROM_HERE, 404 FROM_HERE,
405 base::Bind(&MediaPipelineHost::VideoInitialize, 405 base::Bind(&MediaPipelineHost::VideoInitialize,
406 base::Unretained(media_pipeline), 406 base::Unretained(media_pipeline),
407 track_id, client, config, pipeline_status_cb)); 407 track_id, client, config, pipeline_status_cb));
408 } 408 }
409 409
410 void CmaMessageFilterHost::StartPlayingFrom( 410 void CmaMessageFilterHost::StartPlayingFrom(
411 int media_id, base::TimeDelta time) { 411 int media_id, base::TimeDelta time) {
412 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 412 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
413 MediaPipelineHost* media_pipeline = LookupById(media_id); 413 MediaPipelineHost* media_pipeline = LookupById(media_id);
414 if (!media_pipeline) 414 if (!media_pipeline)
415 return; 415 return;
416 FORWARD_CALL(media_pipeline, StartPlayingFrom, time); 416 FORWARD_CALL(media_pipeline, StartPlayingFrom, time);
417 } 417 }
418 418
419 void CmaMessageFilterHost::Flush(int media_id) { 419 void CmaMessageFilterHost::Flush(int media_id) {
420 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 420 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
421 MediaPipelineHost* media_pipeline = LookupById(media_id); 421 MediaPipelineHost* media_pipeline = LookupById(media_id);
422 if (!media_pipeline) { 422 if (!media_pipeline) {
423 Send(new CmaMsg_MediaStateChanged( 423 Send(new CmaMsg_MediaStateChanged(
424 media_id, ::media::PIPELINE_ERROR_ABORT)); 424 media_id, ::media::PIPELINE_ERROR_ABORT));
425 return; 425 return;
426 } 426 }
427 ::media::PipelineStatusCB pipeline_status_cb = ::media::BindToCurrentLoop( 427 ::media::PipelineStatusCB pipeline_status_cb = base::BindToCurrentLoop(
428 base::Bind(&CmaMessageFilterHost::OnMediaStateChanged, weak_this_, 428 base::Bind(&CmaMessageFilterHost::OnMediaStateChanged, weak_this_,
429 media_id)); 429 media_id));
430 FORWARD_CALL(media_pipeline, Flush, pipeline_status_cb); 430 FORWARD_CALL(media_pipeline, Flush, pipeline_status_cb);
431 } 431 }
432 432
433 void CmaMessageFilterHost::Stop(int media_id) { 433 void CmaMessageFilterHost::Stop(int media_id) {
434 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 434 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
435 MediaPipelineHost* media_pipeline = LookupById(media_id); 435 MediaPipelineHost* media_pipeline = LookupById(media_id);
436 if (!media_pipeline) 436 if (!media_pipeline)
437 return; 437 return;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 } 531 }
532 532
533 void CmaMessageFilterHost::OnNaturalSizeChanged( 533 void CmaMessageFilterHost::OnNaturalSizeChanged(
534 int media_id, TrackId track_id, const gfx::Size& size) { 534 int media_id, TrackId track_id, const gfx::Size& size) {
535 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 535 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
536 Send(new CmaMsg_NaturalSizeChanged(media_id, track_id, size)); 536 Send(new CmaMsg_NaturalSizeChanged(media_id, track_id, size));
537 } 537 }
538 538
539 } // namespace media 539 } // namespace media
540 } // namespace chromecast 540 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/browser/media/cast_browser_cdm_factory.cc ('k') | chromecast/media/cma/base/buffering_frame_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698