| Index: trunk/src/media/base/pipeline.h
|
| ===================================================================
|
| --- trunk/src/media/base/pipeline.h (revision 259158)
|
| +++ trunk/src/media/base/pipeline.h (working copy)
|
| @@ -34,17 +34,6 @@
|
| class TextTrackConfig;
|
| class VideoRenderer;
|
|
|
| -// Metadata describing a pipeline once it has been initialized.
|
| -struct PipelineMetadata {
|
| - PipelineMetadata() : has_audio(false), has_video(false) {}
|
| -
|
| - bool has_audio;
|
| - bool has_video;
|
| - gfx::Size natural_size;
|
| -};
|
| -
|
| -typedef base::Callback<void(PipelineMetadata)> PipelineMetadataCB;
|
| -
|
| // Pipeline runs the media pipeline. Filters are created and called on the
|
| // task runner injected into this object. Pipeline works like a state
|
| // machine to perform asynchronous initialization, pausing, seeking and playing.
|
| @@ -78,6 +67,21 @@
|
| // "Stopped" state.
|
| class MEDIA_EXPORT Pipeline : public DemuxerHost {
|
| public:
|
| + // Buffering states the pipeline transitions between during playback.
|
| + // kHaveMetadata:
|
| + // Indicates that the following things are known:
|
| + // content duration, container video size, start time, and whether the
|
| + // content has audio and/or video in supported formats.
|
| + // kPrerollCompleted:
|
| + // All renderers have buffered enough data to satisfy preroll and are ready
|
| + // to start playback.
|
| + enum BufferingState {
|
| + kHaveMetadata,
|
| + kPrerollCompleted,
|
| + };
|
| +
|
| + typedef base::Callback<void(BufferingState)> BufferingStateCB;
|
| +
|
| // Constructs a media pipeline that will execute on |task_runner|.
|
| Pipeline(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| MediaLog* media_log);
|
| @@ -93,23 +97,18 @@
|
| // The following permanent callbacks will be executed as follows up until
|
| // Stop() has completed:
|
| // |ended_cb| will be executed whenever the media reaches the end.
|
| - // |error_cb| will be executed whenever an error occurs but hasn't been
|
| - // reported already through another callback.
|
| - // |metadata_cb| will be executed when the content duration, container video
|
| - // size, start time, and whether the content has audio and/or
|
| - // video in supported formats are known.
|
| - // |preroll_completed_cb| will be executed when all renderers have buffered
|
| - // enough data to satisfy preroll and are ready to
|
| - // start playback.
|
| - // |duration_change_cb| optional callback that will be executed whenever the
|
| + // |error_cb| will be executed whenever an error occurs but hasn't
|
| + // been reported already through another callback.
|
| + // |buffering_state_cb| Optional callback that will be executed whenever the
|
| + // pipeline's buffering state changes.
|
| + // |duration_change_cb| Optional callback that will be executed whenever the
|
| // presentation duration changes.
|
| // It is an error to call this method after the pipeline has already started.
|
| void Start(scoped_ptr<FilterCollection> filter_collection,
|
| const base::Closure& ended_cb,
|
| const PipelineStatusCB& error_cb,
|
| const PipelineStatusCB& seek_cb,
|
| - const PipelineMetadataCB& metadata_cb,
|
| - const base::Closure& preroll_completed_cb,
|
| + const BufferingStateCB& buffering_state_cb,
|
| const base::Closure& duration_change_cb);
|
|
|
| // Asynchronously stops the pipeline, executing |stop_cb| when the pipeline
|
| @@ -135,6 +134,12 @@
|
| // the pipeline.
|
| bool IsRunning() const;
|
|
|
| + // Returns true if the media has audio.
|
| + bool HasAudio() const;
|
| +
|
| + // Returns true if the media has video.
|
| + bool HasVideo() const;
|
| +
|
| // Gets the current playback rate of the pipeline. When the pipeline is
|
| // started, the playback rate will be 0.0f. A rate of 1.0f indicates
|
| // that the pipeline is rendering the media at the standard rate. Valid
|
| @@ -173,6 +178,10 @@
|
| // determined or can not be determined, this value is 0.
|
| int64 GetTotalBytes() const;
|
|
|
| + // Get the video's initial natural size as reported by the container. Note
|
| + // that the natural size can change during playback.
|
| + gfx::Size GetInitialNaturalSize() const;
|
| +
|
| // Return true if loading progress has been made since the last time this
|
| // method was called.
|
| bool DidLoadingProgress() const;
|
| @@ -253,7 +262,12 @@
|
| // 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.
|
| - void StartTask();
|
| + void StartTask(scoped_ptr<FilterCollection> filter_collection,
|
| + const base::Closure& ended_cb,
|
| + const PipelineStatusCB& error_cb,
|
| + const PipelineStatusCB& seek_cb,
|
| + const BufferingStateCB& buffering_state_cb,
|
| + const base::Closure& duration_change_cb);
|
|
|
| // Stops and destroys all filters, placing the pipeline in the kStopped state.
|
| void StopTask(const base::Closure& stop_cb);
|
| @@ -356,6 +370,9 @@
|
| // Total size of the media. Set by filters.
|
| int64 total_bytes_;
|
|
|
| + // The initial natural size of the video as reported by the container.
|
| + gfx::Size initial_natural_size_;
|
| +
|
| // Current volume level (from 0.0f to 1.0f). This value is set immediately
|
| // via SetVolume() and a task is dispatched on the task runner to notify the
|
| // filters.
|
| @@ -385,6 +402,13 @@
|
| // reset the pipeline state, and restore this to PIPELINE_OK.
|
| PipelineStatus status_;
|
|
|
| + // Whether the media contains rendered audio or video streams.
|
| + // TODO(fischman,scherkus): replace these with checks for
|
| + // {audio,video}_decoder_ once extraction of {Audio,Video}Decoder from the
|
| + // Filter heirarchy is done.
|
| + bool has_audio_;
|
| + bool has_video_;
|
| +
|
| // The following data members are only accessed by tasks posted to
|
| // |task_runner_|.
|
|
|
| @@ -408,8 +432,7 @@
|
| // Permanent callbacks passed in via Start().
|
| base::Closure ended_cb_;
|
| PipelineStatusCB error_cb_;
|
| - PipelineMetadataCB metadata_cb_;
|
| - base::Closure preroll_completed_cb_;
|
| + BufferingStateCB buffering_state_cb_;
|
| base::Closure duration_change_cb_;
|
|
|
| // Contains the demuxer and renderers to use when initializing.
|
|
|