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

Side by Side Diff: chromecast/media/base/media_renderer.cc

Issue 973633002: Chromecast: Play audio streams not supported by CMA via default renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Include gpu_video_accelerator_factories.h into default_renderer_factory.h Created 5 years, 9 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 2015 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/base/media_renderer.h"
6
7 #include "base/logging.h"
8 #include "chromecast/media/cma/filters/cma_renderer.h"
gunsch 2015/03/03 00:06:40 chromecast/media/base should NOT be depending on c
servolk 2015/03/03 00:46:53 Luckily we don't really need CmaRenderer here, we
9 #include "media/base/audio_decoder_config.h"
10 #include "media/base/demuxer_stream.h"
11 #include "media/base/demuxer_stream_provider.h"
12
13 namespace chromecast {
14 namespace media {
15
16 MediaRenderer::MediaRenderer(
17 scoped_ptr<::media::Renderer> default_renderer,
gunsch 2015/03/03 00:06:40 style nit: indentation
servolk 2015/03/03 00:46:53 Done.
18 scoped_ptr<CmaRenderer> cma_renderer)
19 : default_renderer_(default_renderer.Pass()),
20 cma_renderer_(cma_renderer.Pass()) {
21 DCHECK(default_renderer_);
22 DCHECK(cma_renderer_);
23 }
24
25 MediaRenderer::~MediaRenderer() {
26 }
27
28 void MediaRenderer::Initialize(
29 ::media::DemuxerStreamProvider* demuxer_stream_provider,
30 const base::Closure& init_cb,
31 const ::media::StatisticsCB& statistics_cb,
32 const ::media::BufferingStateCB& buffering_state_cb,
33 const ::media::Renderer::PaintCB& paint_cb,
34 const base::Closure& ended_cb,
35 const ::media::PipelineStatusCB& error_cb) {
36 // At this point the DemuxerStreamProvider should be fully initialized, so we
37 // have enough information to decide which renderer to use.
38 demuxer_stream_provider_ = demuxer_stream_provider;
39 DCHECK(demuxer_stream_provider_);
40 ::media::DemuxerStream* audio_stream =
41 demuxer_stream_provider_->GetStream(::media::DemuxerStream::AUDIO);
42 ::media::DemuxerStream* video_stream =
43 demuxer_stream_provider_->GetStream(::media::DemuxerStream::VIDEO);
44 if (audio_stream && !video_stream &&
45 audio_stream->audio_decoder_config().codec() != ::media::kCodecAAC &&
46 audio_stream->audio_decoder_config().codec() != ::media::kCodecVorbis) {
47 // We'll use the default Chrome media renderer with software audio decoding
48 cma_renderer_.reset();
49 } else {
50 // We'll use the CMA-based rendering with hardware decoding
51 default_renderer_.reset();
52 }
53
54 return GetRenderer()->Initialize(demuxer_stream_provider,
55 init_cb, statistics_cb, buffering_state_cb,
56 paint_cb, ended_cb, error_cb);
57 }
58
59 ::media::Renderer* MediaRenderer::GetRenderer() const {
60 DCHECK(default_renderer_ || cma_renderer_);
61 if (cma_renderer_)
62 return cma_renderer_.get();
63
64 DCHECK(default_renderer_);
65 return default_renderer_.get();
66 }
67
68 void MediaRenderer::SetCdm(::media::CdmContext* cdm_context,
69 const ::media::CdmAttachedCB& cdm_attached_cb) {
70 GetRenderer()->SetCdm(cdm_context, cdm_attached_cb);
71 }
72
73 void MediaRenderer::Flush(const base::Closure& flush_cb) {
74 GetRenderer()->Flush(flush_cb);
75 }
76
77 void MediaRenderer::StartPlayingFrom(base::TimeDelta time) {
78 GetRenderer()->StartPlayingFrom(time);
79 }
80
81 void MediaRenderer::SetPlaybackRate(float playback_rate) {
82 GetRenderer()->SetPlaybackRate(playback_rate);
83 }
84
85 void MediaRenderer::SetVolume(float volume) {
86 GetRenderer()->SetVolume(volume);
87 }
gunsch 2015/03/03 00:06:40 style nit: blank line
servolk 2015/03/03 00:46:53 Done.
88 base::TimeDelta MediaRenderer::GetMediaTime() {
89 return GetRenderer()->GetMediaTime();
90 }
91
92 bool MediaRenderer::HasAudio() {
93 return GetRenderer()->HasAudio();
94 }
95
96 bool MediaRenderer::HasVideo() {
97 return GetRenderer()->HasVideo();
98 }
99
100 } // namespace media
101 } // namespace chromecast
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698