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

Unified Diff: media/base/pipeline.h

Issue 418143005: media: Introduce Renderer interface and RendererImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix media/BUILD.gn Created 6 years, 5 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: media/base/pipeline.h
diff --git a/media/base/pipeline.h b/media/base/pipeline.h
index 7c79b3f41762b0810d33ad3c9fa740b1e8b15a86..e19c664cddc1143d85a3a698b764873306c6ff45 100644
--- a/media/base/pipeline.h
+++ b/media/base/pipeline.h
@@ -5,15 +5,11 @@
#ifndef MEDIA_BASE_PIPELINE_H_
#define MEDIA_BASE_PIPELINE_H_
-#include <string>
-
#include "base/gtest_prod_util.h"
#include "base/memory/weak_ptr.h"
-#include "base/synchronization/condition_variable.h"
#include "base/synchronization/lock.h"
#include "base/threading/thread_checker.h"
#include "base/time/default_tick_clock.h"
-#include "media/base/audio_renderer.h"
#include "media/base/buffering_state.h"
#include "media/base/demuxer.h"
#include "media/base/media_export.h"
@@ -32,11 +28,10 @@ namespace media {
class FilterCollection;
class MediaLog;
+class Renderer;
class TextRenderer;
class TextTrackConfig;
class TimeDeltaInterpolator;
-class TimeSource;
-class VideoRenderer;
// Metadata describing a pipeline once it has been initialized.
struct PipelineMetadata {
@@ -178,9 +173,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
// Gets the current pipeline statistics.
PipelineStatistics GetStatistics() const;
- void set_underflow_disabled_for_testing(bool disabled) {
- underflow_disabled_for_testing_ = disabled;
- }
+ void DisableUnderflowForTesting();
void SetTimeDeltaInterpolatorForTesting(TimeDeltaInterpolator* interpolator);
scherkus (not reviewing) 2014/08/21 21:17:00 can this get removed and for existing tests they c
xhwang 2014/08/22 19:11:31 Good point. Done!
void SetErrorForTesting(PipelineStatus status);
@@ -194,8 +187,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
enum State {
kCreated,
kInitDemuxer,
- kInitAudioRenderer,
- kInitVideoRenderer,
+ kInitRenderer,
kSeeking,
kPlaying,
kStopping,
@@ -228,12 +220,6 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
// Callback executed by filters to update statistics.
void OnUpdateStatistics(const PipelineStatistics& stats);
- // 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);
-
// The following "task" methods correspond to the public methods, but these
// methods are run as the result of posting a task to the Pipeline's
// task runner.
@@ -256,8 +242,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
void SeekTask(base::TimeDelta time, const PipelineStatusCB& seek_cb);
// Callbacks executed when a renderer has ended.
- void OnAudioRendererEnded();
- void OnVideoRendererEnded();
+ void OnRendererEnded();
void OnTextRendererEnded();
void RunEndedCallbackIfNeeded();
@@ -271,8 +256,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
// Kicks off initialization for each media object, executing |done_cb| with
// the result when completed.
void InitializeDemuxer(const PipelineStatusCB& done_cb);
- void InitializeAudioRenderer(const PipelineStatusCB& done_cb);
- void InitializeVideoRenderer(const PipelineStatusCB& done_cb);
+ void InitializeRenderer(const PipelineStatusCB& done_cb);
// Kicks off destroying filters. Called by StopTask() and ErrorChangedTask().
// When we start to tear down the pipeline, we will consider two cases:
@@ -298,23 +282,7 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
void DoStop(const PipelineStatusCB& done_cb);
void OnStopCompleted(PipelineStatus status);
- // 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 BufferingStateChanged(BufferingState* buffering_state,
- BufferingState new_buffering_state);
- bool WaitingForEnoughData() const;
- void PausePlayback();
- void StartPlayback();
-
- void PauseClockAndStopTicking_Locked();
- void StartClockIfWaitingForTimeUpdate_Locked();
+ void BufferingStateChanged(BufferingState new_buffering_state);
// Task runner used to execute pipeline tasks.
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
@@ -348,26 +316,6 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
// Current duration as reported by |demuxer_|.
base::TimeDelta duration_;
- // base::TickClock used by |interpolator_|.
- base::DefaultTickClock default_tick_clock_;
-
- // Tracks the most recent media time update and provides interpolated values
- // as playback progresses.
- scoped_ptr<TimeDeltaInterpolator> interpolator_;
-
- 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_;
-
// Status of the pipeline. Initialized to PIPELINE_OK which indicates that
// the pipeline is operating correctly. Any other value indicates that the
// pipeline is stopped or is stopping. Clients can call the Stop() method to
@@ -377,6 +325,8 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
// The following data members are only accessed by tasks posted to
// |task_runner_|.
+ bool is_initialized_;
+
// Member that tracks the current state.
State state_;
@@ -384,12 +334,8 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
base::TimeDelta start_timestamp_;
// Whether we've received the audio/video/text ended events.
- bool audio_ended_;
- bool video_ended_;
- bool text_ended_;
-
- BufferingState audio_buffering_state_;
- BufferingState video_buffering_state_;
+ bool renderer_ended_;
+ bool text_renderer_ended_;
// Temporary callback used for Start() and Seek().
PipelineStatusCB seek_cb_;
@@ -412,18 +358,15 @@ class MEDIA_EXPORT Pipeline : public DemuxerHost {
// Holds the initialized renderers. Used for setting the volume,
// playback rate, and determining when playback has finished.
- scoped_ptr<AudioRenderer> audio_renderer_;
- scoped_ptr<VideoRenderer> video_renderer_;
+ scoped_ptr<Renderer> renderer_;
scoped_ptr<TextRenderer> text_renderer_;
- // Renderer-provided time source used to control playback.
- TimeSource* time_source_;
-
PipelineStatistics statistics_;
scoped_ptr<SerialRunner> pending_callbacks_;
bool underflow_disabled_for_testing_;
+ TimeDeltaInterpolator* test_interpolator_;
base::ThreadChecker thread_checker_;

Powered by Google App Engine
This is Rietveld 408576698