Chromium Code Reviews| Index: services/media/framework_mojo/mojo_consumer.h |
| diff --git a/services/media/framework_mojo/mojo_consumer.h b/services/media/framework_mojo/mojo_consumer.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9dcca1127de29b1a24fb2b400e299150ff54e1ca |
| --- /dev/null |
| +++ b/services/media/framework_mojo/mojo_consumer.h |
| @@ -0,0 +1,134 @@ |
| +// 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. |
| + |
| +#ifndef SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_ |
| +#define SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_ |
| + |
| + |
| +#include "base/single_thread_task_runner.h" |
| +#include "base/task_runner.h" |
| +#include "mojo/common/binding_set.h" |
| +#include "mojo/services/media/common/cpp/mapped_shared_buffer.h" |
| +#include "mojo/services/media/common/interfaces/media_transport.mojom.h" |
| +#include "services/media/framework/models/active_source.h" |
| + |
| +namespace mojo { |
| +namespace media { |
| + |
| +// Implements MediaConsumer::Flush on behalf of MediaConsumer to avoid name |
| +// conflict with Part::Flush. |
| +class MojoConsumerMediaConsumer : public MediaConsumer { |
| + // MediaConsumer implementation. |
| + void Flush(const FlushCallback& callback) override; |
| + |
| + // Implements MediaConsumer::Flush. |
| + virtual void MediaConsumerFlush(const FlushCallback& callback) = 0; |
| +}; |
| + |
| +// Implements MediaConsumer to receive a stream from across mojo. |
| +class MojoConsumer : public MojoConsumerMediaConsumer, public ActiveSource { |
| + public: |
| + using FlushRequestedCallback = std::function<void(const FlushCallback&)>; |
| + |
| + static std::shared_ptr<MojoConsumer> Create() { |
| + return std::shared_ptr<MojoConsumer>(new MojoConsumer()); |
| + } |
| + |
| + ~MojoConsumer() override; |
| + |
| + // Adds a binding. |
| + void AddBinding(InterfaceRequest<MediaConsumer> consumer); |
| + |
| + // Sets a callback signalling that a flush has been requested from the |
| + // MediaConsumer client. |
| + void SetFlushRequestedCallback(const FlushRequestedCallback& callback); |
| + |
| + // MediaConsumer implementation. |
| + void SetBuffer( |
| + ScopedSharedBufferHandle buffer, |
| + uint64_t size, |
| + const SetBufferCallback& callback) override; |
| + |
| + void PushPacket(MediaPacketPtr packet, const PushPacketCallback& callback) |
| + override; |
| + |
| + void MediaConsumerFlush(const FlushCallback& callback) override; |
| + |
| + // ActiveSource implementation. |
| + bool can_accept_allocator() const override; |
| + |
| + void set_allocator(PayloadAllocator* allocator) override; |
| + |
| + void SetSupplyCallback(const SupplyCallback& supply_callback) override; |
| + |
| + void SetDownstreamDemand(Demand demand) override; |
| + |
| + private: |
| + MojoConsumer(); |
| + |
| + // Specialized packet implementation. |
| + class PacketImpl : public Packet { |
| + public: |
| + static PacketPtr Create( |
| + MediaPacketPtr media_packet, |
| + const PushPacketCallback& callback, |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| + const MappedSharedBuffer& buffer) { |
| + return PacketPtr(new PacketImpl( |
| + media_packet.Pass(), |
| + callback, |
| + task_runner, |
| + buffer)); |
| + } |
| + |
| + // Packet implementation. |
| + int64_t presentation_time() const override { |
| + return media_packet_->pts; |
| + } |
| + |
| + uint64_t duration() const override { |
|
johngro
2016/02/23 00:49:42
overall, when you get the chance, I'd like to disc
dalesat
2016/02/23 20:34:34
I think we can probably remove this. We no longer
|
| + return media_packet_->duration; |
| + } |
| + |
| + bool end_of_stream() const override { |
| + return media_packet_->end_of_stream; |
| + } |
| + |
| + size_t size() const override { |
| + return media_packet_->payload->length; |
| + } |
| + |
| + void* payload() const override { return payload_; } |
| + |
| + protected: |
| + void Release() override; |
| + |
| + private: |
| + PacketImpl( |
| + MediaPacketPtr media_packet, |
| + const PushPacketCallback& callback, |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| + const MappedSharedBuffer& buffer); |
| + |
| + ~PacketImpl() override; |
| + |
| + static void RunCallback(const PushPacketCallback& callback); |
| + |
| + MediaPacketPtr media_packet_; |
| + const PushPacketCallback callback_; |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| + void* payload_; |
| + }; |
| + |
| + BindingSet<MediaConsumer> bindings_; |
| + FlushRequestedCallback flush_requested_callback_; |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| + MappedSharedBuffer buffer_; |
| + SupplyCallback supply_callback_; |
| +}; |
| + |
| +} // namespace media |
| +} // namespace mojo |
| + |
| +#endif // SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_ |