Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1758)

Unified Diff: services/media/framework/stages/lpcm_stage_output.cc

Issue 1577953002: Motown in-proc streaming framework used to implement media services. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: sync Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/media/framework/stages/lpcm_stage_output.cc
diff --git a/services/media/framework/stages/lpcm_stage_output.cc b/services/media/framework/stages/lpcm_stage_output.cc
new file mode 100644
index 0000000000000000000000000000000000000000..87cb0331cd7db7a8dc2359d22e4d059bdf5498de
--- /dev/null
+++ b/services/media/framework/stages/lpcm_stage_output.cc
@@ -0,0 +1,85 @@
+// 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 {
+
+LpcmStageOutput::LpcmStageOutput() :
+ buffer_(nullptr),
+ frame_count_(0),
+ mix_(false),
+ synchronous_(false),
+ next_presentation_time_(0) {}
+
+LpcmStageOutput::~LpcmStageOutput() {}
+
+void LpcmStageOutput::set_stream_type(const LpcmStreamType& stream_type) {
+ lpcm_demand_.set_bytes_per_frame(stream_type.bytes_per_frame());
+}
+
+void LpcmStageOutput::SupplyFrames(bool end_of_stream, Engine* engine) {
+ DCHECK(engine);
+ DCHECK(connected());
+ DCHECK(end_of_stream || buffer_);
+
+ uint64_t duration = frame_count_ - lpcm_demand_.frame_count();
+ if (allocator_ != nullptr) {
+ SupplyPacketInternal(
+ Packet::Create(
+ next_presentation_time_,
+ duration,
+ end_of_stream,
+ duration * lpcm_demand_.bytes_per_frame(),
+ duration == 0 ? nullptr : buffer_,
+ allocator_),
+ engine);
+ } else {
+ SupplyPacketInternal(
+ Packet::CreateNoAllocator(
+ next_presentation_time_,
+ duration,
+ end_of_stream,
+ duration * lpcm_demand_.bytes_per_frame(),
+ duration == 0 ? nullptr : buffer_),
+ engine);
+ }
+
+ next_presentation_time_ += duration;
+
+ buffer_ = nullptr;
+ frame_count_ = 0;
+ mix_ = false;
+ synchronous_ = false;
+ lpcm_demand_.Reset();
+}
+
+Allocator* LpcmStageOutput::Prepare(bool can_accept_allocator) {
+ // The stage isn't concerned with allocators, but we'll need one if our mate
+ // isn't LPCM.
+ Allocator* allocator = StageOutput::Prepare(true);
+ DCHECK(!connected_to_lpcm() || allocator == nullptr);
+ if (!connected_to_lpcm()) {
+ // Our mate isn't lpcm, so we'll need an allocator to create packet buffers.
+ // Use the provided one or the default.
+ allocator_ = allocator == nullptr ? Allocator::GetDefault() : allocator;
+ }
+
+ return nullptr;
+}
+
+LpcmStageOutput* LpcmStageOutput::get_lpcm() {
+ return this;
+}
+
+bool LpcmStageOutput::connected_to_lpcm() {
+ return mate().get_lpcm() != nullptr;
+}
+
+} // namespace media
+} // namespace mojo
« no previous file with comments | « services/media/framework/stages/lpcm_stage_output.h ('k') | services/media/framework/stages/lpcm_transform_stage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698