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

Unified Diff: content/renderer/media/audio_renderer_impl.h

Issue 9826023: Merge AudioRendererImpl and AudioRendererBase; add NullAudioSink (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/audio_renderer_impl.h
diff --git a/content/renderer/media/audio_renderer_impl.h b/content/renderer/media/audio_renderer_impl.h
deleted file mode 100644
index 978f5a013ae34b0b2c20f22c33059f981123d428..0000000000000000000000000000000000000000
--- a/content/renderer/media/audio_renderer_impl.h
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright (c) 2012 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.
-//
-// Audio rendering unit utilizing AudioDevice.
-//
-// This class lives inside three threads during it's lifetime, namely:
-// 1. Render thread.
-// This object is created on the render thread.
-// 2. Pipeline thread
-// OnInitialize() is called here with the audio format.
-// Play/Pause/Seek also happens here.
-// 3. Audio thread created by the AudioDevice.
-// Render() is called here where audio data is decoded into raw PCM data.
-
-#ifndef CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_IMPL_H_
-#define CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_IMPL_H_
-#pragma once
-
-#include <vector>
-
-#include "base/gtest_prod_util.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/synchronization/lock.h"
-#include "content/renderer/media/audio_device.h"
-#include "media/audio/audio_io.h"
-#include "media/audio/audio_parameters.h"
-#include "media/base/audio_renderer_sink.h"
-#include "media/filters/audio_renderer_base.h"
-
-class AudioMessageFilter;
-
-class CONTENT_EXPORT AudioRendererImpl
- : public media::AudioRendererBase,
- NON_EXPORTED_BASE(public media::AudioRendererSink::RenderCallback) {
- public:
- // Methods called on Render thread ------------------------------------------
- // An AudioRendererSink is used as the destination for the rendered audio.
- explicit AudioRendererImpl(media::AudioRendererSink* sink);
- virtual ~AudioRendererImpl();
-
- // Methods called on pipeline thread ----------------------------------------
- // media::Filter implementation.
- virtual void SetPlaybackRate(float rate) OVERRIDE;
- virtual void Pause(const base::Closure& callback) OVERRIDE;
- virtual void Seek(base::TimeDelta time,
- const media::PipelineStatusCB& cb) OVERRIDE;
- virtual void Play(const base::Closure& callback) OVERRIDE;
-
- // media::AudioRenderer implementation.
- virtual void SetVolume(float volume) OVERRIDE;
-
- protected:
- // Methods called on pipeline thread ----------------------------------------
- // These methods are called from AudioRendererBase.
- virtual bool OnInitialize(int bits_per_channel,
- ChannelLayout channel_layout,
- int sample_rate) OVERRIDE;
- virtual void OnStop() OVERRIDE;
- virtual void OnRenderEndOfStream() OVERRIDE;
-
- private:
- // For access to constructor and IO thread methods.
- friend class AudioRendererImplTest;
- friend class DelegateCaller;
- FRIEND_TEST_ALL_PREFIXES(AudioRendererImplTest, Stop);
- FRIEND_TEST_ALL_PREFIXES(AudioRendererImplTest,
- DestroyedMessageLoop_ConsumeAudioSamples);
- FRIEND_TEST_ALL_PREFIXES(AudioRendererImplTest, UpdateEarliestEndTime);
- // Helper methods.
- // Convert number of bytes to duration of time using information about the
- // number of channels, sample rate and sample bits.
- base::TimeDelta ConvertToDuration(int bytes);
-
- // Methods called on pipeline thread ----------------------------------------
- void DoPlay();
- void DoPause();
- void DoSeek();
-
- // media::AudioRendererSink::RenderCallback implementation.
- virtual size_t Render(const std::vector<float*>& audio_data,
- size_t number_of_frames,
- size_t audio_delay_milliseconds) OVERRIDE;
- virtual void OnRenderError() OVERRIDE;
-
- // Accessors used by tests.
- base::Time earliest_end_time() const {
- return earliest_end_time_;
- }
-
- void set_earliest_end_time(const base::Time& earliest_end_time) {
- earliest_end_time_ = earliest_end_time;
- }
-
- uint32 bytes_per_second() const {
- return bytes_per_second_;
- }
-
- // Estimate earliest time when current buffer can stop playing.
- void UpdateEarliestEndTime(int bytes_filled,
- base::TimeDelta request_delay,
- base::Time time_now);
-
- // Used to calculate audio delay given bytes.
- uint32 bytes_per_second_;
-
- // A flag that indicates this filter is called to stop.
- bool stopped_;
-
- // The sink (destination) for rendered audio.
- scoped_refptr<media::AudioRendererSink> sink_;
-
- // Set to true when OnInitialize() is called.
- bool is_initialized_;
-
- // We're supposed to know amount of audio data OS or hardware buffered, but
- // that is not always so -- on my Linux box
- // AudioBuffersState::hardware_delay_bytes never reaches 0.
- //
- // As a result we cannot use it to find when stream ends. If we just ignore
- // buffered data we will notify host that stream ended before it is actually
- // did so, I've seen it done ~140ms too early when playing ~150ms file.
- //
- // Instead of trying to invent OS-specific solution for each and every OS we
- // are supporting, use simple workaround: every time we fill the buffer we
- // remember when it should stop playing, and do not assume that buffer is
- // empty till that time. Workaround is not bulletproof, as we don't exactly
- // know when that particular data would start playing, but it is much better
- // than nothing.
- base::Time earliest_end_time_;
-
- media::AudioParameters audio_parameters_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioRendererImpl);
-};
-
-#endif // CONTENT_RENDERER_MEDIA_AUDIO_RENDERER_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698