| 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_
|
|
|