From ee687fd9c6c2bc41642cd8b65de87fe548a3cf75 Mon Sep 17 00:00:00 2001 From: finnur Date: Wed, 4 Mar 2015 00:43:07 -0800 Subject: 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} --- chromecast/renderer/DEPS | 1 - .../renderer/cast_content_renderer_client.cc | 6 +- .../media/chromecast_media_renderer_factory.cc | 74 ---------------------- .../media/chromecast_media_renderer_factory.h | 43 ------------- .../renderer/media/cma_media_renderer_factory.cc | 37 +++++++++++ .../renderer/media/cma_media_renderer_factory.h | 32 ++++++++++ 6 files changed, 72 insertions(+), 121 deletions(-) delete mode 100644 chromecast/renderer/media/chromecast_media_renderer_factory.cc delete mode 100644 chromecast/renderer/media/chromecast_media_renderer_factory.h create mode 100644 chromecast/renderer/media/cma_media_renderer_factory.cc create mode 100644 chromecast/renderer/media/cma_media_renderer_factory.h (limited to 'chromecast/renderer') 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& 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 cma_media_pipeline( - new MediaPipelineProxy( - render_frame_id_, - content::RenderThread::Get()->GetIOMessageLoopProxy(), - cma_load_type)); - scoped_ptr 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 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& 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& 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 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& 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 -- cgit v1.1