| Index: services/media/framework/stages/lpcm_stage_input.cc
|
| diff --git a/services/media/framework/stages/lpcm_stage_input.cc b/services/media/framework/stages/lpcm_stage_input.cc
|
| deleted file mode 100644
|
| index b215334fe68594385bc282eb670fddd73a23fd4d..0000000000000000000000000000000000000000
|
| --- a/services/media/framework/stages/lpcm_stage_input.cc
|
| +++ /dev/null
|
| @@ -1,211 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "services/media/framework/engine.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.h"
|
| -
|
| -namespace mojo {
|
| -namespace media {
|
| -
|
| -LpcmStageInput::LpcmStageInput() :
|
| - demand_pending_(false),
|
| - buffer_(nullptr),
|
| - frame_count_(0),
|
| - mix_(false),
|
| - synchronous_(false),
|
| - end_of_stream_(false) {
|
| - packet_exhausted_function_ = [this]() {
|
| - DCHECK(packet_from_upstream());
|
| - packet_from_upstream().reset();
|
| - };
|
| -}
|
| -
|
| -LpcmStageInput::~LpcmStageInput() {}
|
| -
|
| -void LpcmStageInput::set_stream_type(const LpcmStreamType& stream_type) {
|
| - lpcm_util_ = LpcmUtil::Create(stream_type);
|
| - lpcm_supply_.set_bytes_per_frame(stream_type.bytes_per_frame());
|
| - packet_frames_.set_bytes_per_frame(stream_type.bytes_per_frame());
|
| - demand_frames_.set_bytes_per_frame(stream_type.bytes_per_frame());
|
| -}
|
| -
|
| -void LpcmStageInput::SuggestDemand(uint64_t frame_count, Engine* engine) {
|
| - DCHECK(engine);
|
| -
|
| - if (demand_pending_ || lpcm_supply_.frame_count() != 0) {
|
| - // We've already demanded. Too late for this suggestion.
|
| - return;
|
| - }
|
| -
|
| - if (frame_count == 0) {
|
| - // No demand is suggested.
|
| - SetDemand(Demand::kNegative, engine);
|
| - return;
|
| - }
|
| -
|
| - if (!connected_to_lpcm()) {
|
| - // Upstream output isn't LPCM. Demand packets.
|
| - demand_pending_ = true;
|
| - SetDemand(Demand::kPositive, engine);
|
| - return;
|
| - }
|
| -
|
| - SetLpcmDemand(
|
| - GetDemandBuffer(frame_count),
|
| - frame_count,
|
| - false,
|
| - false,
|
| - engine);
|
| -}
|
| -
|
| -void LpcmStageInput::SetLpcmDemand(
|
| - void* buffer,
|
| - uint64_t frame_count,
|
| - bool mix,
|
| - bool synchronous,
|
| - Engine* engine) {
|
| - DCHECK(engine);
|
| - DCHECK(connected());
|
| -
|
| - demand_pending_ = true;
|
| -
|
| - buffer_ = buffer;
|
| - frame_count_ = frame_count;
|
| - mix_ = mix;
|
| - synchronous_ = synchronous;
|
| -
|
| - if (synchronous) {
|
| - // TODO
|
| - //engine->AddToFallback([lpcm_mate](Engine* engine) {
|
| - // lpcm_mate->fallback(engine);
|
| - //});
|
| - }
|
| -
|
| - LpcmStageOutput* lpcm_mate = mate().get_lpcm();
|
| - if (lpcm_mate != nullptr) {
|
| - // The upstream output is LPCM.
|
| - DCHECK(!packet_from_upstream());
|
| - lpcm_mate->UpdateLpcmDemand(buffer, frame_count, mix, synchronous);
|
| - engine->PushToDemandBacklogUnsafe(upstream_stage());
|
| - return;
|
| - }
|
| -
|
| - demand_frames_.Set(buffer, frame_count);
|
| -
|
| - // The upstream output isn't LPCM. See if we can satisfy demand with the
|
| - // packet from upstream, if there is one.
|
| - if (CopyOrMixFrames()) {
|
| - // Frames supplied. Add this stage to the supply backlog.
|
| - engine->PushToSupplyBacklogUnsafe(mate().downstream_stage());
|
| - } else {
|
| - // Frames not supplied. Demand another packet.
|
| - SetDemand(Demand::kPositive, engine);
|
| - }
|
| -}
|
| -
|
| -bool LpcmStageInput::SupplyPacketFromOutput(PacketPtr packet) {
|
| - StageInput::SupplyPacketFromOutput(std::move(packet));
|
| -
|
| - demand_pending_ = false;
|
| -
|
| - if (connected_to_lpcm()) {
|
| - // The upstream output is LPCM, so the packet should be a wrapper for the
|
| - // demand buffer (buffer_). In this case, we can release the packet,
|
| - // because the frames are already where we want them.
|
| - DCHECK(packet_from_upstream()->payload() == buffer_);
|
| - DCHECK(packet_from_upstream()->duration() <= frame_count_);
|
| - end_of_stream_ = packet_from_upstream()->end_of_stream();
|
| - lpcm_supply_.Set(
|
| - packet_from_upstream()->payload(),
|
| - packet_from_upstream()->duration());
|
| - packet_from_upstream().reset();
|
| - return true;
|
| - }
|
| -
|
| - if (buffer_ == nullptr) {
|
| - // The upstream output isn't LPCM, and the stage hasn't supplied a buffer.
|
| - // We'll supply frames right out of the packet payload and reset the
|
| - // packet pointer when the frames are exhausted.
|
| - DCHECK(!mix_);
|
| - end_of_stream_ = packet_from_upstream()->end_of_stream();
|
| - lpcm_supply_.Set(
|
| - packet_from_upstream()->payload(),
|
| - packet_from_upstream()->duration(),
|
| - packet_exhausted_function_);
|
| - return true;
|
| - }
|
| -
|
| - // The upstream output isn't LPCM, and the stage has supplied a buffer. That
|
| - // means we have to copy or mix from the packet to the supplied buffer. We
|
| - // initialize packet_frames_ for that purpose and call CopyOrMixFrames.
|
| - packet_frames_.Set(
|
| - packet_from_upstream()->payload(),
|
| - packet_from_upstream()->duration(),
|
| - packet_exhausted_function_);
|
| -
|
| - return CopyOrMixFrames();
|
| -}
|
| -
|
| -LpcmStageInput* LpcmStageInput::get_lpcm() {
|
| - return this;
|
| -}
|
| -
|
| -bool LpcmStageInput::connected_to_lpcm() {
|
| - return mate().get_lpcm() != nullptr;
|
| -}
|
| -
|
| -bool LpcmStageInput::CopyOrMixFrames() {
|
| - DCHECK(buffer_);
|
| - DCHECK(demand_frames_.buffer());
|
| -
|
| - uint64_t frame_count = std::min(
|
| - packet_frames_.frame_count(),
|
| - demand_frames_.frame_count());
|
| -
|
| - if (frame_count == 0) {
|
| - return false;
|
| - }
|
| -
|
| - DCHECK(packet_from_upstream());
|
| -
|
| - if (mix_) {
|
| - lpcm_util_->Mix(
|
| - packet_frames_.buffer(),
|
| - demand_frames_.buffer(),
|
| - frame_count);
|
| - } else {
|
| - lpcm_util_->Copy(
|
| - packet_frames_.buffer(),
|
| - demand_frames_.buffer(),
|
| - frame_count);
|
| - }
|
| -
|
| - bool end_of_stream = packet_from_upstream()->end_of_stream();
|
| -
|
| - packet_frames_.Advance(frame_count);
|
| - demand_frames_.Advance(frame_count);
|
| -
|
| - if (demand_frames_.frame_count() == 0 ||
|
| - (packet_frames_.frame_count() == 0 && end_of_stream)) {
|
| - end_of_stream_ = end_of_stream;
|
| - lpcm_supply_.Set(buffer_, frame_count_ - demand_frames_.frame_count());
|
| - demand_frames_.Reset();
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -void* LpcmStageInput::GetDemandBuffer(uint64_t frame_count) {
|
| - if (demand_buffer_.size() < frame_count) {
|
| - demand_buffer_.clear();
|
| - demand_buffer_.resize(frame_count);
|
| - }
|
| - return &demand_buffer_[0];
|
| -}
|
| -
|
| -} // namespace media
|
| -} // namespace mojo
|
|
|