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

Side by Side Diff: chromecast/renderer/media/cma_renderer.cc

Issue 1873513003: Add video-rendering to mojo media pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: export VideoOverlayFactory 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 "chromecast/renderer/media/cma_renderer.h" 5 #include "chromecast/renderer/media/cma_renderer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
16 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h" 16 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h"
17 #include "chromecast/media/cma/base/cma_logging.h" 17 #include "chromecast/media/cma/base/cma_logging.h"
18 #include "chromecast/media/cma/base/demuxer_stream_adapter.h" 18 #include "chromecast/media/cma/base/demuxer_stream_adapter.h"
19 #include "chromecast/media/cma/pipeline/av_pipeline_client.h" 19 #include "chromecast/media/cma/pipeline/av_pipeline_client.h"
20 #include "chromecast/media/cma/pipeline/media_pipeline_client.h" 20 #include "chromecast/media/cma/pipeline/media_pipeline_client.h"
21 #include "chromecast/media/cma/pipeline/video_pipeline_client.h" 21 #include "chromecast/media/cma/pipeline/video_pipeline_client.h"
22 #include "chromecast/renderer/media/audio_pipeline_proxy.h" 22 #include "chromecast/renderer/media/audio_pipeline_proxy.h"
23 #include "chromecast/renderer/media/hole_frame_factory.h"
24 #include "chromecast/renderer/media/media_pipeline_proxy.h" 23 #include "chromecast/renderer/media/media_pipeline_proxy.h"
25 #include "chromecast/renderer/media/video_pipeline_proxy.h" 24 #include "chromecast/renderer/media/video_pipeline_proxy.h"
26 #include "media/base/bind_to_current_loop.h" 25 #include "media/base/bind_to_current_loop.h"
27 #include "media/base/demuxer_stream_provider.h" 26 #include "media/base/demuxer_stream_provider.h"
28 #include "media/base/pipeline_status.h" 27 #include "media/base/pipeline_status.h"
29 #include "media/base/renderer_client.h" 28 #include "media/base/renderer_client.h"
30 #include "media/base/time_delta_interpolator.h" 29 #include "media/base/time_delta_interpolator.h"
31 #include "media/base/video_renderer_sink.h" 30 #include "media/base/video_renderer_sink.h"
32 #include "media/renderers/gpu_video_accelerator_factories.h" 31 #include "media/renderers/video_overlay_factory.h"
33 #include "ui/gfx/geometry/size.h" 32 #include "ui/gfx/geometry/size.h"
34 33
35 namespace chromecast { 34 namespace chromecast {
36 namespace media { 35 namespace media {
37 36
38 namespace { 37 namespace {
39 38
40 // Maximum difference between audio frame PTS and video frame PTS 39 // Maximum difference between audio frame PTS and video frame PTS
41 // for frames read from the DemuxerStream. 40 // for frames read from the DemuxerStream.
42 const base::TimeDelta kMaxDeltaFetcher(base::TimeDelta::FromMilliseconds(2000)); 41 const base::TimeDelta kMaxDeltaFetcher(base::TimeDelta::FromMilliseconds(2000));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 ::media::RendererClient* client, 87 ::media::RendererClient* client,
89 const ::media::PipelineStatusCB& init_cb) { 88 const ::media::PipelineStatusCB& init_cb) {
90 CMALOG(kLogControl) << __FUNCTION__; 89 CMALOG(kLogControl) << __FUNCTION__;
91 DCHECK(thread_checker_.CalledOnValidThread()); 90 DCHECK(thread_checker_.CalledOnValidThread());
92 DCHECK_EQ(state_, kUninitialized) << state_; 91 DCHECK_EQ(state_, kUninitialized) << state_;
93 DCHECK(!init_cb.is_null()); 92 DCHECK(!init_cb.is_null());
94 DCHECK(demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO) || 93 DCHECK(demuxer_stream_provider->GetStream(::media::DemuxerStream::AUDIO) ||
95 demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO)); 94 demuxer_stream_provider->GetStream(::media::DemuxerStream::VIDEO));
96 95
97 // Deferred from ctor so as to initialise on correct thread. 96 // Deferred from ctor so as to initialise on correct thread.
98 hole_frame_factory_.reset(new HoleFrameFactory(gpu_factories_)); 97 video_overlay_factory_.reset(
98 new ::media::VideoOverlayFactory(gpu_factories_));
99 99
100 BeginStateTransition(); 100 BeginStateTransition();
101 101
102 demuxer_stream_provider_ = demuxer_stream_provider; 102 demuxer_stream_provider_ = demuxer_stream_provider;
103 client_ = client; 103 client_ = client;
104 104
105 MediaPipelineClient media_pipeline_client; 105 MediaPipelineClient media_pipeline_client;
106 media_pipeline_client.error_cb = 106 media_pipeline_client.error_cb =
107 ::media::BindToCurrentLoop(base::Bind(&CmaRenderer::OnError, weak_this_)); 107 ::media::BindToCurrentLoop(base::Bind(&CmaRenderer::OnError, weak_this_));
108 media_pipeline_client.buffering_state_cb = ::media::BindToCurrentLoop( 108 media_pipeline_client.buffering_state_cb = ::media::BindToCurrentLoop(
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 372
373 void CmaRenderer::OnStatisticsUpdated( 373 void CmaRenderer::OnStatisticsUpdated(
374 const ::media::PipelineStatistics& stats) { 374 const ::media::PipelineStatistics& stats) {
375 DCHECK(thread_checker_.CalledOnValidThread()); 375 DCHECK(thread_checker_.CalledOnValidThread());
376 client_->OnStatisticsUpdate(stats); 376 client_->OnStatisticsUpdate(stats);
377 } 377 }
378 378
379 void CmaRenderer::OnNaturalSizeChanged(const gfx::Size& size) { 379 void CmaRenderer::OnNaturalSizeChanged(const gfx::Size& size) {
380 DCHECK(thread_checker_.CalledOnValidThread()); 380 DCHECK(thread_checker_.CalledOnValidThread());
381 video_renderer_sink_->PaintFrameUsingOldRenderingPath( 381 video_renderer_sink_->PaintFrameUsingOldRenderingPath(
382 hole_frame_factory_->CreateHoleFrame(size)); 382 video_overlay_factory_->CreateFrame(size));
383 client_->OnVideoNaturalSizeChange(size); 383 client_->OnVideoNaturalSizeChange(size);
384 } 384 }
385 385
386 void CmaRenderer::OnPlaybackTimeUpdated(base::TimeDelta time, 386 void CmaRenderer::OnPlaybackTimeUpdated(base::TimeDelta time,
387 base::TimeDelta max_time, 387 base::TimeDelta max_time,
388 base::TimeTicks capture_time) { 388 base::TimeTicks capture_time) {
389 DCHECK(thread_checker_.CalledOnValidThread()); 389 DCHECK(thread_checker_.CalledOnValidThread());
390 if (state_ != kPlaying) { 390 if (state_ != kPlaying) {
391 LOG(WARNING) << "Ignoring a late time update"; 391 LOG(WARNING) << "Ignoring a late time update";
392 return; 392 return;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 is_pending_transition_ = true; 450 is_pending_transition_ = true;
451 } 451 }
452 452
453 void CmaRenderer::CompleteStateTransition(State new_state) { 453 void CmaRenderer::CompleteStateTransition(State new_state) {
454 state_ = new_state; 454 state_ = new_state;
455 is_pending_transition_ = false; 455 is_pending_transition_ = false;
456 } 456 }
457 457
458 } // namespace media 458 } // namespace media
459 } // namespace chromecast 459 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698