Index: services/media/framework/stages/stage.h |
diff --git a/services/media/framework/stages/stage.h b/services/media/framework/stages/stage.h |
index 20b21c4302c71afe8483a44071011af568c820dd..ce5299be550f784ba250db0ead12e1cfd8fa3d39 100644 |
--- a/services/media/framework/stages/stage.h |
+++ b/services/media/framework/stages/stage.h |
@@ -2,16 +2,15 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef SERVICES_MEDIA_FRAMEWORK_ENGINE_STAGE_H_ |
-#define SERVICES_MEDIA_FRAMEWORK_ENGINE_STAGE_H_ |
+#ifndef SERVICES_MEDIA_FRAMEWORK_STAGES_STAGE_H_ |
+#define SERVICES_MEDIA_FRAMEWORK_STAGES_STAGE_H_ |
#include <vector> |
#include "services/media/framework/packet.h" |
-#include "services/media/framework/stages/lpcm_stage_input.h" |
-#include "services/media/framework/stages/lpcm_stage_output.h" |
-#include "services/media/framework/stages/stage_input.h" |
-#include "services/media/framework/stages/stage_output.h" |
+#include "services/media/framework/payload_allocator.h" |
+#include "services/media/framework/stages/input.h" |
+#include "services/media/framework/stages/output.h" |
namespace mojo { |
namespace media { |
@@ -21,30 +20,53 @@ class Engine; |
// Host for a source, sink or transform. |
class Stage { |
public: |
+ using UpstreamCallback = std::function<void(size_t input_index)>; |
+ using DownstreamCallback = std::function<void(size_t output_index)>; |
using UpdateCallback = std::function<void(Stage* stage)>; |
Stage(); |
virtual ~Stage(); |
+ void SetUpdateCallback(const UpdateCallback& update_callback) { |
+ update_callback_ = update_callback; |
+ } |
+ |
// Returns the number of input connections. |
- virtual uint32_t input_count() const = 0; |
+ virtual size_t input_count() const = 0; |
// Returns the indicated input connection. |
- virtual StageInput& input(uint32_t index) = 0; |
+ virtual Input& input(size_t index) = 0; |
// Returns the number of output connections. |
- virtual uint32_t output_count() const = 0; |
+ virtual size_t output_count() const = 0; |
// Returns the indicated output connection. |
- virtual StageOutput& output(uint32_t index) = 0; |
- |
- // Prepares the stage for operation, providing a callback used to signal the |
- // need to update this stage. Returns true if the stage will call the |
- // callback, false if not. The default implementation of this method returns |
- // false. |
- // TODO(dalesat): Should this be const UpdateCallback&? |
- virtual bool Prepare(UpdateCallback update_callback); |
+ virtual Output& output(size_t index) = 0; |
+ |
+ // Prepares the input for operation. Returns nullptr unless the connected |
+ // output must use a specific allocator, in which case it returns that |
+ // allocator. |
+ virtual PayloadAllocator* PrepareInput(size_t index) = 0; |
+ |
+ // Prepares the output for operation, passing an allocator that must be used |
+ // by the output or nullptr if there is no such requirement. The callback is |
+ // used to indicate what inputs are ready to be prepared as a consequence of |
+ // preparing the output. |
+ virtual void PrepareOutput( |
+ size_t index, |
+ PayloadAllocator* allocator, |
+ const UpstreamCallback& callback) = 0; |
+ |
+ // Unprepares the input. The default implementation does nothing. |
+ virtual void UnprepareInput(size_t index); |
+ |
+ // Unprepares the output. The default implementation does nothing. The |
+ // the callback is used to indicate what inputs are ready to be unprepared as |
+ // a consequence of unpreparing the output. |
+ virtual void UnprepareOutput( |
+ size_t index, |
+ const UpstreamCallback& callback); |
// Initiates demand. Called on sink stages after the graph is prepared. The |
// default implementation does nothing. |
@@ -53,13 +75,23 @@ class Stage { |
// Performs processing. |
virtual void Update(Engine* engine) = 0; |
- // Returns a bool indicating whether the stage is prepared. |
- bool prepared() { |
- return prepared_; |
+ // Flushes an input. The callback is used to indicate what outputs are ready |
+ // to be flushed as a consequence of flushing the input. |
+ virtual void FlushInput( |
+ size_t index, |
+ const DownstreamCallback& callback) = 0; |
+ |
+ // Flushes an output. |
+ virtual void FlushOutput(size_t index) = 0; |
+ |
+ protected: |
+ void RequestUpdate() { |
+ DCHECK(update_callback_); |
+ update_callback_(this); |
} |
private: |
- bool prepared_; |
+ UpdateCallback update_callback_; |
bool in_supply_backlog_; |
bool in_demand_backlog_; |
@@ -69,4 +101,4 @@ class Stage { |
} // namespace media |
} // namespace mojo |
-#endif // SERVICES_MEDIA_FRAMEWORK_ENGINE_STAGE_H_ |
+#endif // SERVICES_MEDIA_FRAMEWORK_STAGES_STAGE_H_ |