Index: services/media/framework/stages/active_sink_stage.cc |
diff --git a/services/media/framework/stages/active_sink_stage.cc b/services/media/framework/stages/active_sink_stage.cc |
index c49b55e0b3ae6052513dbbf22f75b84e2a11825e..9aa618298dfca2ec40911e317b77cc04dd812be0 100644 |
--- a/services/media/framework/stages/active_sink_stage.cc |
+++ b/services/media/framework/stages/active_sink_stage.cc |
@@ -7,14 +7,14 @@ |
namespace mojo { |
namespace media { |
-ActiveSinkStage::ActiveSinkStage(ActiveSinkPtr sink) : sink_(sink) { |
+ActiveSinkStage::ActiveSinkStage(std::shared_ptr<ActiveSink> sink) : |
+ sink_(sink) { |
DCHECK(sink_); |
demand_function_ = [this](Demand demand) { |
- DCHECK(update_callback_); |
if (sink_demand_ != demand) { |
sink_demand_ = demand; |
- update_callback_(this); |
+ RequestUpdate(); |
} |
}; |
@@ -23,37 +23,44 @@ ActiveSinkStage::ActiveSinkStage(ActiveSinkPtr sink) : sink_(sink) { |
ActiveSinkStage::~ActiveSinkStage() {} |
-uint32_t ActiveSinkStage::input_count() const { |
+size_t ActiveSinkStage::input_count() const { |
return 1; |
}; |
-StageInput& ActiveSinkStage::input(uint32_t index) { |
+Input& ActiveSinkStage::input(size_t index) { |
DCHECK_EQ(index, 0u); |
return input_; |
} |
-uint32_t ActiveSinkStage::output_count() const { |
+size_t ActiveSinkStage::output_count() const { |
return 0; |
} |
-StageOutput& ActiveSinkStage::output(uint32_t index) { |
- NOTREACHED(); |
- static StageOutput result; |
- return result; |
+Output& ActiveSinkStage::output(size_t index) { |
+ CHECK(false) << "output requested from sink"; |
+ return *(static_cast<Output*>(nullptr)); |
} |
-bool ActiveSinkStage::Prepare(UpdateCallback update_callback) { |
- input_.Prepare(sink_->allocator(), sink_->must_allocate()); |
- update_callback_ = update_callback; |
- return true; |
+PayloadAllocator* ActiveSinkStage::PrepareInput(size_t index) { |
+ DCHECK_EQ(index, 0u); |
+ return sink_->allocator(); |
+} |
+ |
+void ActiveSinkStage::PrepareOutput( |
+ size_t index, |
+ PayloadAllocator* allocator, |
+ const UpstreamCallback& callback) { |
+ CHECK(false) << "PrepareOutput called on sink"; |
} |
void ActiveSinkStage::Prime() { |
+ DCHECK(sink_); |
sink_->Prime(); |
} |
void ActiveSinkStage::Update(Engine* engine) { |
DCHECK(engine); |
+ DCHECK(sink_); |
if (input_.packet_from_upstream()) { |
sink_demand_ = |
@@ -63,5 +70,18 @@ void ActiveSinkStage::Update(Engine* engine) { |
input_.SetDemand(sink_demand_, engine); |
} |
+void ActiveSinkStage::FlushInput( |
+ size_t index, |
+ const DownstreamCallback& callback) { |
+ DCHECK(sink_); |
+ input_.Flush(); |
+ sink_->Flush(); |
+ sink_demand_ = Demand::kNegative; |
+} |
+ |
+void ActiveSinkStage::FlushOutput(size_t index) { |
+ CHECK(false) << "FlushOutput called on sink"; |
+} |
+ |
} // namespace media |
} // namespace mojo |