diff options
author | finnur <finnur@chromium.org> | 2015-03-04 00:43:07 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-04 08:43:36 +0000 |
commit | ee687fd9c6c2bc41642cd8b65de87fe548a3cf75 (patch) | |
tree | 73ea93b22cefe079ea2cec25b6422f6ff2945aec /chromecast | |
parent | 87bd8b465b5de163a9e8583f8619b7602c4dd889 (diff) | |
download | chromium_src-ee687fd9c6c2bc41642cd8b65de87fe548a3cf75.zip chromium_src-ee687fd9c6c2bc41642cd8b65de87fe548a3cf75.tar.gz chromium_src-ee687fd9c6c2bc41642cd8b65de87fe548a3cf75.tar.bz2 |
Revert of Chromecast: Play audio streams not supported by CMA via default renderer (patchset #5 id:70001 of https://codereview.chromium.org/973633002/)
Reason for revert:
Audio tests started failing consistently in the next build after this was checked in. See:
https://build.chromium.org/p/chromium.mac/builders/Mac10.9%20Tests/builds/3762
Not sure if this CL is the culprit, but seems the most likely one, so attempting a revert to see if it fixes the problem.
Error:
[ RUN ] AudioRecorderTest.BasicRecordAndStop
../../components/audio_modem/audio_recorder_unittest.cc:203: Failure
Value of: IsRecording()
Actual: false
Expected: true
../../components/audio_modem/audio_recorder_unittest.cc:208: Failure
Value of: IsRecording()
Actual: false
Expected: true
../../components/audio_modem/audio_recorder_unittest.cc:213: Failure
Value of: IsRecording()
Actual: false
Expected: true
[ FAILED ] AudioRecorderTest.BasicRecordAndStop (1292 ms)
Original issue's description:
> Chromecast: Play audio streams not supported by CMA via default renderer
>
> For Chromecast we want to choose which media renderer to use based on
> the types of input content streams. We will use CMA media renderer for
> media types that are supported by our hardware (H264, AAC, etc) and
> will use the default media renderer for audio streams other than AAC
> or Vorbis. This will allow us support software decoding of FLAC and
> Opus via the default Chrome audio path.
>
> BUG=457959
>
> Committed: https://crrev.com/2e583073b996e66d62f709dd2ffde9e1ef58b276
> Cr-Commit-Position: refs/heads/master@{#318941}
TBR=gunsch@chromium.org,lcwu@chromium.org,dalecurtis@chromium.org,servolk@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=457959
Review URL: https://codereview.chromium.org/981473003
Cr-Commit-Position: refs/heads/master@{#319033}
Diffstat (limited to 'chromecast')
-rw-r--r-- | chromecast/chromecast.gyp | 4 | ||||
-rw-r--r-- | chromecast/media/base/switching_media_renderer.cc | 104 | ||||
-rw-r--r-- | chromecast/media/base/switching_media_renderer.h | 67 | ||||
-rw-r--r-- | chromecast/media/media.gyp | 2 | ||||
-rw-r--r-- | chromecast/renderer/DEPS | 1 | ||||
-rw-r--r-- | chromecast/renderer/cast_content_renderer_client.cc | 6 | ||||
-rw-r--r-- | chromecast/renderer/media/chromecast_media_renderer_factory.cc | 74 | ||||
-rw-r--r-- | chromecast/renderer/media/chromecast_media_renderer_factory.h | 43 | ||||
-rw-r--r-- | chromecast/renderer/media/cma_media_renderer_factory.cc | 37 | ||||
-rw-r--r-- | chromecast/renderer/media/cma_media_renderer_factory.h | 32 |
10 files changed, 74 insertions, 296 deletions
diff --git a/chromecast/chromecast.gyp b/chromecast/chromecast.gyp index 2e1b9a5..82f4b86 100644 --- a/chromecast/chromecast.gyp +++ b/chromecast/chromecast.gyp @@ -496,8 +496,8 @@ 'common/media/shared_memory_chunk.h', 'renderer/media/audio_pipeline_proxy.cc', 'renderer/media/audio_pipeline_proxy.h', - 'renderer/media/chromecast_media_renderer_factory.cc', - 'renderer/media/chromecast_media_renderer_factory.h', + 'renderer/media/cma_media_renderer_factory.cc', + 'renderer/media/cma_media_renderer_factory.h', 'renderer/media/cma_message_filter_proxy.cc', 'renderer/media/cma_message_filter_proxy.h', 'renderer/media/media_channel_proxy.cc', diff --git a/chromecast/media/base/switching_media_renderer.cc b/chromecast/media/base/switching_media_renderer.cc deleted file mode 100644 index 0c1c106..0000000 --- a/chromecast/media/base/switching_media_renderer.cc +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chromecast/media/base/switching_media_renderer.h" - -#include "base/logging.h" -#include "media/base/audio_decoder_config.h" -#include "media/base/demuxer_stream.h" -#include "media/base/demuxer_stream_provider.h" - -namespace chromecast { -namespace media { - -SwitchingMediaRenderer::SwitchingMediaRenderer( - scoped_ptr<::media::Renderer> default_renderer, - scoped_ptr<::media::Renderer> cma_renderer) - : default_renderer_(default_renderer.Pass()), - cma_renderer_(cma_renderer.Pass()) { - DCHECK(default_renderer_); - DCHECK(cma_renderer_); -} - -SwitchingMediaRenderer::~SwitchingMediaRenderer() { -} - -void SwitchingMediaRenderer::Initialize( - ::media::DemuxerStreamProvider* demuxer_stream_provider, - const ::media::PipelineStatusCB& init_cb, - const ::media::StatisticsCB& statistics_cb, - const ::media::BufferingStateCB& buffering_state_cb, - const ::media::Renderer::PaintCB& paint_cb, - const base::Closure& ended_cb, - const ::media::PipelineStatusCB& error_cb, - const base::Closure& waiting_for_decryption_key_cb) { - // At this point the DemuxerStreamProvider should be fully initialized, so we - // have enough information to decide which renderer to use. - demuxer_stream_provider_ = demuxer_stream_provider; - DCHECK(demuxer_stream_provider_); - ::media::DemuxerStream* audio_stream = - demuxer_stream_provider_->GetStream(::media::DemuxerStream::AUDIO); - ::media::DemuxerStream* video_stream = - demuxer_stream_provider_->GetStream(::media::DemuxerStream::VIDEO); - if (audio_stream && !video_stream && - audio_stream->audio_decoder_config().codec() != ::media::kCodecAAC && - audio_stream->audio_decoder_config().codec() != ::media::kCodecVorbis) { - // We'll use the default Chrome media renderer with software audio decoding - cma_renderer_.reset(); - } else { - // We'll use the CMA-based rendering with hardware decoding - default_renderer_.reset(); - } - - return GetRenderer()->Initialize(demuxer_stream_provider, - init_cb, statistics_cb, buffering_state_cb, - paint_cb, ended_cb, error_cb, - waiting_for_decryption_key_cb); -} - -::media::Renderer* SwitchingMediaRenderer::GetRenderer() const { - DCHECK(default_renderer_ || cma_renderer_); - if (cma_renderer_) - return cma_renderer_.get(); - - DCHECK(default_renderer_); - return default_renderer_.get(); -} - -void SwitchingMediaRenderer::SetCdm( - ::media::CdmContext* cdm_context, - const ::media::CdmAttachedCB& cdm_attached_cb) { - GetRenderer()->SetCdm(cdm_context, cdm_attached_cb); -} - -void SwitchingMediaRenderer::Flush(const base::Closure& flush_cb) { - GetRenderer()->Flush(flush_cb); -} - -void SwitchingMediaRenderer::StartPlayingFrom(base::TimeDelta time) { - GetRenderer()->StartPlayingFrom(time); -} - -void SwitchingMediaRenderer::SetPlaybackRate(float playback_rate) { - GetRenderer()->SetPlaybackRate(playback_rate); -} - -void SwitchingMediaRenderer::SetVolume(float volume) { - GetRenderer()->SetVolume(volume); -} - -base::TimeDelta SwitchingMediaRenderer::GetMediaTime() { - return GetRenderer()->GetMediaTime(); -} - -bool SwitchingMediaRenderer::HasAudio() { - return GetRenderer()->HasAudio(); -} - -bool SwitchingMediaRenderer::HasVideo() { - return GetRenderer()->HasVideo(); -} - -} // namespace media -} // namespace chromecast diff --git a/chromecast/media/base/switching_media_renderer.h b/chromecast/media/base/switching_media_renderer.h deleted file mode 100644 index 830cef6..0000000 --- a/chromecast/media/base/switching_media_renderer.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROMECAST_MEDIA_BASE_SWITCHING_MEDIA_RENDERER_H_ -#define CHROMECAST_MEDIA_BASE_SWITCHING_MEDIA_RENDERER_H_ - -#include "base/macros.h" -#include "base/memory/scoped_ptr.h" -#include "media/base/renderer.h" - -namespace media { -class DemuxerStreamProvider; -} - -namespace chromecast { -namespace media { - -// Chromecast's custom media renderer which is capable of selecting an -// appropriate media renderer at runtime depending on the content. -// We'll look at media types of media streams present in DemuxerStreamProvider -// and will use either CMA-based renderer (for media types that are supported by -// our hardware decoder - H264 and VP8 video, AAC and Vorbis audio) or the -// default Chrome media renderer (this will allow us to support audio codecs -// like FLAC and Opus, which are decoded in software). -class SwitchingMediaRenderer : public ::media::Renderer { - public: - SwitchingMediaRenderer( - scoped_ptr<::media::Renderer> default_renderer, - scoped_ptr<::media::Renderer> cma_renderer); - ~SwitchingMediaRenderer() override; - - // ::media::Renderer implementation: - void Initialize( - ::media::DemuxerStreamProvider* demuxer_stream_provider, - const ::media::PipelineStatusCB& init_cb, - const ::media::StatisticsCB& statistics_cb, - const ::media::BufferingStateCB& buffering_state_cb, - const ::media::Renderer::PaintCB& paint_cb, - const base::Closure& ended_cb, - const ::media::PipelineStatusCB& error_cb, - const base::Closure& waiting_for_decryption_key_cb) override; - void SetCdm(::media::CdmContext* cdm_context, - const ::media::CdmAttachedCB& cdm_attached_cb) override; - void Flush(const base::Closure& flush_cb) override; - void StartPlayingFrom(base::TimeDelta time) override; - void SetPlaybackRate(float playback_rate) override; - void SetVolume(float volume) override; - base::TimeDelta GetMediaTime() override; - bool HasAudio() override; - bool HasVideo() override; - - private: - // Returns the pointer to the actual renderer being used - ::media::Renderer* GetRenderer() const; - - ::media::DemuxerStreamProvider* demuxer_stream_provider_; - scoped_ptr<::media::Renderer> default_renderer_; - scoped_ptr<::media::Renderer> cma_renderer_; - - DISALLOW_COPY_AND_ASSIGN(SwitchingMediaRenderer); -}; - -} // namespace media -} // namespace chromecast - -#endif // CHROMECAST_MEDIA_BASE_SWITCHING_MEDIA_RENDERER_H_ diff --git a/chromecast/media/media.gyp b/chromecast/media/media.gyp index f85404c..1051a6b 100644 --- a/chromecast/media/media.gyp +++ b/chromecast/media/media.gyp @@ -22,8 +22,6 @@ 'base/decrypt_context_clearkey.h', 'base/key_systems_common.cc', 'base/key_systems_common.h', - 'base/switching_media_renderer.cc', - 'base/switching_media_renderer.h', ], 'conditions': [ ['chromecast_branding=="Chrome"', { diff --git a/chromecast/renderer/DEPS b/chromecast/renderer/DEPS index 1015677..22bc1dd 100644 --- a/chromecast/renderer/DEPS +++ b/chromecast/renderer/DEPS @@ -6,7 +6,6 @@ include_rules = [ "+components/network_hints/renderer", "+content/public/renderer", "+media/base", - "+media/renderers", "+third_party/WebKit/public/platform", "+third_party/WebKit/public/web", ] diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc index 7c9ea22..1bb0930 100644 --- a/chromecast/renderer/cast_content_renderer_client.cc +++ b/chromecast/renderer/cast_content_renderer_client.cc @@ -13,7 +13,7 @@ #include "chromecast/renderer/cast_media_load_deferrer.h" #include "chromecast/renderer/cast_render_process_observer.h" #include "chromecast/renderer/key_systems_cast.h" -#include "chromecast/renderer/media/chromecast_media_renderer_factory.h" +#include "chromecast/renderer/media/cma_media_renderer_factory.h" #include "components/network_hints/renderer/prescient_networking_dispatcher.h" #include "content/public/common/content_switches.h" #include "content/public/renderer/render_frame.h" @@ -160,8 +160,8 @@ CastContentRendererClient::CreateMediaRendererFactory( return nullptr; return scoped_ptr<::media::RendererFactory>( - new chromecast::media::ChromecastMediaRendererFactory( - media_log, render_frame->GetRoutingID())); + new chromecast::media::CmaMediaRendererFactory( + render_frame->GetRoutingID())); } #endif diff --git a/chromecast/renderer/media/chromecast_media_renderer_factory.cc b/chromecast/renderer/media/chromecast_media_renderer_factory.cc deleted file mode 100644 index cdfab39..0000000 --- a/chromecast/renderer/media/chromecast_media_renderer_factory.cc +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chromecast/renderer/media/chromecast_media_renderer_factory.h" - -#include "base/command_line.h" -#include "chromecast/media/base/switching_media_renderer.h" -#include "chromecast/media/cma/filters/cma_renderer.h" -#include "chromecast/renderer/media/media_pipeline_proxy.h" -#include "content/public/renderer/render_thread.h" -#include "media/base/audio_hardware_config.h" -#include "media/base/media_log.h" -#include "media/renderers/default_renderer_factory.h" -#include "media/renderers/gpu_video_accelerator_factories.h" - -namespace chromecast { -namespace media { - -ChromecastMediaRendererFactory::ChromecastMediaRendererFactory( - const scoped_refptr<::media::MediaLog>& media_log, - int render_frame_id) - : render_frame_id_(render_frame_id), - media_log_(media_log) { -} - -ChromecastMediaRendererFactory::~ChromecastMediaRendererFactory() { -} - -scoped_ptr<::media::Renderer> ChromecastMediaRendererFactory::CreateRenderer( - const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, - ::media::AudioRendererSink* audio_renderer_sink) { - if (!default_render_factory_) { - // Chromecast doesn't have input audio devices, so leave this uninitialized - ::media::AudioParameters input_audio_params; - // TODO(servolk): Audio parameters are hardcoded for now, but in the future - // either we need to obtain AudioHardwareConfig from RenderThreadImpl, - // or media renderer needs to figure out optimal audio parameters itself. - const int kDefaultSamplingRate = 48000; - const int kDefaultBitsPerSample = 16; - // About 20ms of stereo (2 channels) 16bit (2 byte) audio - int buffer_size = kDefaultSamplingRate * 20 * 2 * 2 / 1000; - ::media::AudioParameters output_audio_params( - ::media::AudioParameters::AUDIO_PCM_LOW_LATENCY, - ::media::CHANNEL_LAYOUT_STEREO, - kDefaultSamplingRate, kDefaultBitsPerSample, - buffer_size, ::media::AudioParameters::NO_EFFECTS); - ::media::AudioHardwareConfig audio_config(input_audio_params, - output_audio_params); - - default_render_factory_.reset(new ::media::DefaultRendererFactory( - media_log_, /*gpu_factories*/ nullptr, audio_config)); - } - - DCHECK(default_render_factory_); - // TODO(erickung): crbug.com/443956. Need to provide right LoadType. - LoadType cma_load_type = kLoadTypeMediaSource; - scoped_ptr<MediaPipeline> cma_media_pipeline( - new MediaPipelineProxy( - render_frame_id_, - content::RenderThread::Get()->GetIOMessageLoopProxy(), - cma_load_type)); - scoped_ptr<CmaRenderer> cma_renderer( - new CmaRenderer(cma_media_pipeline.Pass())); - scoped_ptr<::media::Renderer> default_media_render( - default_render_factory_->CreateRenderer(media_task_runner, - audio_renderer_sink)); - scoped_ptr<SwitchingMediaRenderer> media_renderer(new SwitchingMediaRenderer( - default_media_render.Pass(), cma_renderer.Pass())); - return media_renderer.Pass(); -} - -} // namespace media -} // namespace chromecast diff --git a/chromecast/renderer/media/chromecast_media_renderer_factory.h b/chromecast/renderer/media/chromecast_media_renderer_factory.h deleted file mode 100644 index f880ff6..0000000 --- a/chromecast/renderer/media/chromecast_media_renderer_factory.h +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROMECAST_RENDERER_MEDIA_CHROMECAST_MEDIA_RENDERER_FACTORY_H_ -#define CHROMECAST_RENDERER_MEDIA_CHROMECAST_MEDIA_RENDERER_FACTORY_H_ - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "media/base/renderer_factory.h" - -namespace media { -class MediaLog; -class DefaultRendererFactory; -} - -namespace chromecast { -namespace media { - -class ChromecastMediaRendererFactory : public ::media::RendererFactory { - public: - ChromecastMediaRendererFactory( - const scoped_refptr<::media::MediaLog>& media_log, - int render_frame_id); - ~ChromecastMediaRendererFactory() final; - - // ::media::RendererFactory implementation. - scoped_ptr<::media::Renderer> CreateRenderer( - const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, - ::media::AudioRendererSink* audio_renderer_sink) final; - - private: - int render_frame_id_; - scoped_refptr<::media::MediaLog> media_log_; - scoped_ptr<::media::DefaultRendererFactory> default_render_factory_; - - DISALLOW_COPY_AND_ASSIGN(ChromecastMediaRendererFactory); -}; - -} // namespace media -} // namespace chromecast - -#endif // CHROMECAST_RENDERER_MEDIA_CHROMECAST_MEDIA_RENDERER_FACTORY_H_ diff --git a/chromecast/renderer/media/cma_media_renderer_factory.cc b/chromecast/renderer/media/cma_media_renderer_factory.cc new file mode 100644 index 0000000..2a38149 --- /dev/null +++ b/chromecast/renderer/media/cma_media_renderer_factory.cc @@ -0,0 +1,37 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromecast/renderer/media/cma_media_renderer_factory.h" + +#include "base/command_line.h" +#include "chromecast/media/cma/filters/cma_renderer.h" +#include "chromecast/renderer/media/media_pipeline_proxy.h" +#include "content/public/renderer/render_thread.h" + +namespace chromecast { +namespace media { + +CmaMediaRendererFactory::CmaMediaRendererFactory(int render_frame_id) + : render_frame_id_(render_frame_id) { +} + +CmaMediaRendererFactory::~CmaMediaRendererFactory() { +} + +scoped_ptr< ::media::Renderer> CmaMediaRendererFactory::CreateRenderer( + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, + ::media::AudioRendererSink* audio_renderer_sink) { + // TODO(erickung): crbug.com/443956. Need to provide right LoadType. + LoadType cma_load_type = kLoadTypeMediaSource; + scoped_ptr<MediaPipeline> cma_media_pipeline( + new MediaPipelineProxy( + render_frame_id_, + content::RenderThread::Get()->GetIOMessageLoopProxy(), + cma_load_type)); + return scoped_ptr< ::media::Renderer>( + new CmaRenderer(cma_media_pipeline.Pass())); +} + +} // namespace media +} // namespace chromecast
\ No newline at end of file diff --git a/chromecast/renderer/media/cma_media_renderer_factory.h b/chromecast/renderer/media/cma_media_renderer_factory.h new file mode 100644 index 0000000..b14b3d7 --- /dev/null +++ b/chromecast/renderer/media/cma_media_renderer_factory.h @@ -0,0 +1,32 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMECAST_RENDERER_MEDIA_CMA_MEDIA_RENDERER_FACTORY_H_ +#define CHROMECAST_RENDERER_MEDIA_CMA_MEDIA_RENDERER_FACTORY_H_ + +#include "base/macros.h" +#include "media/base/renderer_factory.h" + +namespace chromecast { +namespace media { + +class CmaMediaRendererFactory : public ::media::RendererFactory { + public: + explicit CmaMediaRendererFactory(int render_frame_id); + ~CmaMediaRendererFactory() final; + + // ::media::RendererFactory implementation. + scoped_ptr< ::media::Renderer> CreateRenderer( + const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, + ::media::AudioRendererSink* audio_renderer_sink) final; + + private: + int render_frame_id_; + DISALLOW_COPY_AND_ASSIGN(CmaMediaRendererFactory); +}; + +} // namespace media +} // namespace chromecast + +#endif // CHROMECAST_RENDERER_MEDIA_CMA_MEDIA_RENDERER_FACTORY_H_
\ No newline at end of file |