| Index: media/base/filter_host.h
|
| ===================================================================
|
| --- media/base/filter_host.h (revision 8115)
|
| +++ media/base/filter_host.h (working copy)
|
| @@ -14,26 +14,6 @@
|
| // to synchronize video with audio. An audio and video decoder would typically
|
| // have no need to call either SetTime or GetTime.
|
| //
|
| -// Filter state is managed by the FilterHost implementor, with the filter
|
| -// receiving notifications from the host when a state transition is starting
|
| -// and the filter notifying the host when the filter has completed the
|
| -// transition. The state transition is broken into two steps since some state
|
| -// transitions may be blocking or long running. The host provides PostTask to
|
| -// help filters schedule such tasks.
|
| -//
|
| -// Example of a pause state transition:
|
| -// During Initialization:
|
| -// - Audio renderer registers OnPause with SetPauseCallback
|
| -//
|
| -// During Playback:
|
| -// - User hits pause button, triggering a pause state transition
|
| -// - Filter host executes the pause callback
|
| -// - Inside OnPause, the audio renderer schedules DoPause with PostTask
|
| -// and immediately returns
|
| -// - Filter host asynchronously executes DoPause
|
| -// - Inside DoPause, the audio renderer does its blocking operations and
|
| -// when complete calls PauseComplete
|
| -//
|
| // The reasoning behind providing PostTask is to discourage filters from
|
| // implementing their own threading. The overall design is that many filters
|
| // can share few threads and that notifications return quickly by scheduling
|
| @@ -43,93 +23,64 @@
|
| #define MEDIA_BASE_FILTER_HOST_H_
|
|
|
| #include "base/task.h"
|
| +#include "media/base/pipeline.h"
|
|
|
| namespace media {
|
|
|
| class FilterHost {
|
| public:
|
| - // Returns the global time.
|
| - virtual int64 GetTime() const = 0;
|
| + // The PipelineStatus class allows read-only access to the pipeline state.
|
| + // This is the same object that is used by the pipeline client to examine
|
| + // the state of the running pipeline. The lifetime of the PipelineStatus
|
| + // interface is the same as the lifetime of the FilterHost interface, so
|
| + // it is acceptable for filters to use the returned pointer until their
|
| + // Stop method has been called.
|
| + virtual const PipelineStatus* GetPipelineStatus() const = 0;
|
|
|
| - // Updates the global time.
|
| - virtual void SetTime(int64 time) = 0;
|
| + // Registers a callback to receive global clock update notifications. The
|
| + // callback will be called repeatedly and filters do not need to re-register
|
| + // after each invocation of the callback. To remove the callback, filters
|
| + // may call this method passing NULL for the callback argument.
|
| + //
|
| + // Callback arguments:
|
| + // int64 the new pipeline time, in microseconds
|
| + virtual void SetTimeUpdateCallback(Callback1<int64>::Type* callback) = 0;
|
|
|
| - // Returns the global duration.
|
| - virtual int64 GetDuration() const = 0;
|
| -
|
| - // Updates the global media duration.
|
| - virtual void SetDuration(int64 duration) = 0;
|
| -
|
| - // Posts a task to be executed asynchronously.
|
| + // Filters must call this method to indicate that their initialization is
|
| + // complete. They may call this from within their Initialize() method or may
|
| + // choose call it after processing some data.
|
| + virtual void InitializationComplete() = 0;
|
| +
|
| + // Posts a task to be executed asynchronously on the pipeline's thread.
|
| virtual void PostTask(Task* task) = 0;
|
|
|
| - // Notifies the host that the filter has transitioned into the playing state.
|
| - virtual bool PlayComplete() = 0;
|
| + // Stops execution of the pipeline due to a fatal error.
|
| + virtual void Error(PipelineError error) = 0;
|
|
|
| - // Notifies the host that the filter has transitioned into the paused state.
|
| - virtual bool PauseComplete() = 0;
|
| + // Sets the current time. Any filters that have registered a callback through
|
| + // the SetTimeUpdateCallback method will be notified of the change.
|
| + virtual void SetTime(int64 time) = 0;
|
|
|
| - // Notifies the host that the filter has transitioned into the seek state.
|
| - virtual bool SeekComplete() = 0;
|
| + // Get the duration of the media in microseconds. If the duration has not
|
| + // been determined yet, then returns 0.
|
| + virtual void SetDuration(int64 duration) = 0;
|
|
|
| - // Notifies the host that the filter has transitioned into the shutdown state.
|
| - virtual bool ShutdownComplete() = 0;
|
| + // Set the approximate amount of playable data buffered so far in micro-
|
| + // seconds.
|
| + virtual void SetBufferedTime(int64 buffered_time) = 0;
|
|
|
| - // Notifies the host that an error has occurred and that further processing
|
| - // cannot continue. |error| identifies the type of error that occurred.
|
| - //
|
| - // TODO(scherkus): Add error constants as we start implementing filters.
|
| - virtual void Error(int error) = 0;
|
| + // Set the total size of the media file.
|
| + virtual void SetTotalBytes(int64 total_bytes) = 0;
|
|
|
| - // Notifies the host that the end of the stream has been reached.
|
| - virtual void EndOfStream() = 0;
|
| + // Sets the total number of bytes that are buffered on the client and ready to
|
| + // be played.
|
| + virtual void SetBufferedBytes(int64 buffered_bytes) = 0;
|
|
|
| - // Registers a callback to handle the play state transition. The filter must
|
| - // call PlayComplete at some point in the future to signal completion of
|
| - // the transition.
|
| - //
|
| - // Callback arguments:
|
| - // None
|
| - virtual void SetPlayCallback(Callback0::Type* callback) = 0;
|
| + // Sets the size of the video output in pixel units.
|
| + virtual void SetVideoSize(size_t width, size_t height) = 0;
|
|
|
| - // Registers a callback to handle the pause state transition. The filter must
|
| - // call PauseComplete at some point in the future to signal completion of
|
| - // the transition.
|
| - //
|
| - // Callback arguments:
|
| - // bool true if the pause was triggered by end of stream
|
| - virtual void SetPauseCallback(Callback1<bool>::Type* callback) = 0;
|
| -
|
| - // Registers a callback to handle the seek state transition. The filter must
|
| - // call SeekComplete at some point in the future to signal completion of
|
| - // the transition.
|
| - //
|
| - // Callback arguments:
|
| - // int64 the timestamp position to seek to, in microseconds
|
| - virtual void SetSeekCallback(Callback1<int64>::Type* callback) = 0;
|
| -
|
| - // Registers a callback to handle the shutdown state transition. The filter
|
| - // must call ShutdownComplete at some point in the future to signal completion
|
| - // of the transition.
|
| - //
|
| - // Callback arguments:
|
| - // None
|
| - virtual void SetShutdownCallback(Callback0::Type* callback) = 0;
|
| -
|
| - // Registers a callback to receive global clock update notifications.
|
| - //
|
| - // Callback arguments:
|
| - // int64 the new global time, in microseconds
|
| - virtual void SetClockCallback(Callback1<int64>::Type* callback) = 0;
|
| -
|
| - // Registers a callback to receive global error notifications.
|
| - //
|
| - // Callback arguments:
|
| - // int the error code reported.
|
| - virtual void SetErrorCallback(Callback1<int>::Type* callback) = 0;
|
| -
|
| protected:
|
| - virtual ~FilterHost() {}
|
| + virtual ~FilterHost() = 0;
|
| };
|
|
|
| } // namespace media
|
|
|