Index: media/filters/renderer_impl.h |
diff --git a/media/filters/renderer_impl.h b/media/filters/renderer_impl.h |
deleted file mode 100644 |
index d0bd8e51076a07ba1f9ca978cd75daa5ffc3bae4..0000000000000000000000000000000000000000 |
--- a/media/filters/renderer_impl.h |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-// 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 MEDIA_FILTERS_RENDERER_IMPL_H_ |
-#define MEDIA_FILTERS_RENDERER_IMPL_H_ |
- |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/synchronization/lock.h" |
-#include "base/time/clock.h" |
-#include "base/time/default_tick_clock.h" |
-#include "base/time/time.h" |
-#include "media/base/buffering_state.h" |
-#include "media/base/media_export.h" |
-#include "media/base/pipeline_status.h" |
-#include "media/base/renderer.h" |
- |
-namespace base { |
-class SingleThreadTaskRunner; |
-} |
- |
-namespace media { |
- |
-class AudioRenderer; |
-class Demuxer; |
-class FilterCollection; |
-class TimeDeltaInterpolator; |
-class TimeSource; |
-class VideoRenderer; |
- |
-class MEDIA_EXPORT RendererImpl : public Renderer { |
- public: |
- // Renders audio/video streams in |demuxer| using |audio_renderer| and |
- // |video_renderer| provided. All methods except for GetMediaTime() run on the |
- // |task_runner|. GetMediaTime() runs on the render main thread because it's |
- // part of JS sync API. |get_duration_cb| is used to get the duration of the |
- // stream. |
- RendererImpl(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
- Demuxer* demuxer, |
- scoped_ptr<AudioRenderer> audio_renderer, |
- scoped_ptr<VideoRenderer> video_renderer); |
- |
- virtual ~RendererImpl(); |
- |
- // Renderer implementation. |
- virtual void Initialize(const PipelineStatusCB& init_cb, |
- const StatisticsCB& statistics_cb, |
- const base::Closure& ended_cb, |
- const PipelineStatusCB& error_cb, |
- const BufferingStateCB& buffering_state_cb, |
- const TimeDeltaCB& get_duration_cb) OVERRIDE; |
- virtual void Flush(const base::Closure& flush_cb) OVERRIDE; |
- virtual void StartPlayingFrom(base::TimeDelta time) OVERRIDE; |
- virtual void SetPlaybackRate(float playback_rate) OVERRIDE; |
- virtual void SetVolume(float volume) OVERRIDE; |
- virtual base::TimeDelta GetMediaTime() OVERRIDE; |
- virtual bool HasAudio() OVERRIDE; |
- virtual bool HasVideo() OVERRIDE; |
- virtual void SetCdm(MediaKeys* cdm) OVERRIDE; |
- |
- // Helper functions for testing purposes. Must be called before Initialize(). |
- void DisableUnderflowForTesting(); |
- void SetTimeDeltaInterpolatorForTesting(TimeDeltaInterpolator* interpolator); |
- |
- private: |
- enum State { |
- STATE_UNINITIALIZED, |
- STATE_INITIALIZING, |
- STATE_FLUSHING, |
- STATE_PLAYING, |
- STATE_ERROR |
- }; |
- |
- base::TimeDelta GetMediaDuration(); |
- |
- // Helper functions and callbacks for Initialize(). |
- void InitializeAudioRenderer(); |
- void OnAudioRendererInitializeDone(PipelineStatus status); |
- void InitializeVideoRenderer(); |
- void OnVideoRendererInitializeDone(PipelineStatus status); |
- |
- // Helper functions and callbacks for Flush(). |
- void FlushAudioRenderer(); |
- void OnAudioRendererFlushDone(); |
- void FlushVideoRenderer(); |
- void OnVideoRendererFlushDone(); |
- |
- // Callback executed by audio renderer to update clock time. |
- void OnAudioTimeUpdate(base::TimeDelta time, base::TimeDelta max_time); |
- |
- // Callback executed by video renderer to update clock time. |
- void OnVideoTimeUpdate(base::TimeDelta max_time); |
- |
- // Callback executed by filters to update statistics. |
- void OnUpdateStatistics(const PipelineStatistics& stats); |
- |
- // Collection of callback methods and helpers for tracking changes in |
- // buffering state and transition from paused/underflow states and playing |
- // states. |
- // |
- // While in the kPlaying state: |
- // - A waiting to non-waiting transition indicates preroll has completed |
- // and StartPlayback() should be called |
- // - A non-waiting to waiting transition indicates underflow has occurred |
- // and PausePlayback() should be called |
- void OnBufferingStateChanged(BufferingState* buffering_state, |
- BufferingState new_buffering_state); |
- bool WaitingForEnoughData() const; |
- void PausePlayback(); |
- void StartPlayback(); |
- |
- void PauseClockAndStopTicking_Locked(); |
- void StartClockIfWaitingForTimeUpdate_Locked(); |
- |
- // Callbacks executed when a renderer has ended. |
- void OnAudioRendererEnded(); |
- void OnVideoRendererEnded(); |
- void RunEndedCallbackIfNeeded(); |
- |
- // Callback executed when a runtime error happens. |
- void OnError(PipelineStatus error); |
- |
- void FireAllPendingCallbacks(); |
- |
- State state_; |
- |
- // Task runner used to execute pipeline tasks. |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
- |
- scoped_ptr<FilterCollection> filter_collection_; |
- Demuxer* demuxer_; |
- |
- // Permanent callback to get the media duration. |
- TimeDeltaCB get_duration_cb_; |
- |
- // Permanent callbacks to notify various renderer states/stats. |
- StatisticsCB statistics_cb_; |
- base::Closure ended_cb_; |
- PipelineStatusCB error_cb_; |
- BufferingStateCB buffering_state_cb_; |
- |
- // Temporary callback used for Initialize() and Flush(). |
- PipelineStatusCB init_cb_; |
- base::Closure flush_cb_; |
- |
- scoped_ptr<AudioRenderer> audio_renderer_; |
- scoped_ptr<VideoRenderer> video_renderer_; |
- |
- // Renderer-provided time source used to control playback. |
- TimeSource* time_source_; |
- |
- // The time to start playback from after starting/seeking has completed. |
- base::TimeDelta start_time_; |
- |
- BufferingState audio_buffering_state_; |
- BufferingState video_buffering_state_; |
- |
- // Whether we've received the audio/video ended events. |
- bool audio_ended_; |
- bool video_ended_; |
- |
- bool underflow_disabled_for_testing_; |
- |
- // Protects time interpolation related member variables, i.e. |interpolator_|, |
- // |default_tick_clock_| and |interpolation_state_|. This is because |
- // |interpolator_| can be used on different threads (see GetMediaTime()). |
- mutable base::Lock interpolator_lock_; |
- |
- // Tracks the most recent media time update and provides interpolated values |
- // as playback progresses. |
- scoped_ptr<TimeDeltaInterpolator> interpolator_; |
- |
- // base::TickClock used by |interpolator_|. |
- // TODO(xhwang): This can be TimeDeltaInterpolator's implementation detail. |
- base::DefaultTickClock default_tick_clock_; |
- |
- enum InterpolationState { |
- // Audio (if present) is not rendering. Time isn't being interpolated. |
- INTERPOLATION_STOPPED, |
- |
- // Audio (if present) is rendering. Time isn't being interpolated. |
- INTERPOLATION_WAITING_FOR_AUDIO_TIME_UPDATE, |
- |
- // Audio (if present) is rendering. Time is being interpolated. |
- INTERPOLATION_STARTED, |
- }; |
- |
- InterpolationState interpolation_state_; |
- |
- // NOTE: Weak pointers must be invalidated before all other member variables. |
- base::WeakPtrFactory<RendererImpl> weak_factory_; |
- base::WeakPtr<RendererImpl> weak_this_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RendererImpl); |
-}; |
- |
-} // namespace media |
- |
-#endif // MEDIA_FILTERS_RENDERER_IMPL_H_ |