| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_ |
| 6 #define SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_ |
| 7 |
| 8 |
| 9 #include "base/single_thread_task_runner.h" |
| 10 #include "base/task_runner.h" |
| 11 #include "mojo/common/binding_set.h" |
| 12 #include "mojo/services/media/common/cpp/mapped_shared_buffer.h" |
| 13 #include "mojo/services/media/common/interfaces/media_transport.mojom.h" |
| 14 #include "services/media/framework/models/active_source.h" |
| 15 |
| 16 namespace mojo { |
| 17 namespace media { |
| 18 |
| 19 // Implements MediaConsumer::Flush on behalf of MediaConsumer to avoid name |
| 20 // conflict with Part::Flush. |
| 21 class MojoConsumerMediaConsumer : public MediaConsumer { |
| 22 // MediaConsumer implementation. |
| 23 void Flush(const FlushCallback& callback) override; |
| 24 |
| 25 // Implements MediaConsumer::Flush. |
| 26 virtual void MediaConsumerFlush(const FlushCallback& callback) = 0; |
| 27 }; |
| 28 |
| 29 // Implements MediaConsumer to receive a stream from across mojo. |
| 30 class MojoConsumer : public MojoConsumerMediaConsumer, public ActiveSource { |
| 31 public: |
| 32 using FlushRequestedCallback = std::function<void(const FlushCallback&)>; |
| 33 |
| 34 static std::shared_ptr<MojoConsumer> Create() { |
| 35 return std::shared_ptr<MojoConsumer>(new MojoConsumer()); |
| 36 } |
| 37 |
| 38 ~MojoConsumer() override; |
| 39 |
| 40 // Adds a binding. |
| 41 void AddBinding(InterfaceRequest<MediaConsumer> consumer); |
| 42 |
| 43 // Sets a callback signalling that a flush has been requested from the |
| 44 // MediaConsumer client. |
| 45 void SetFlushRequestedCallback(const FlushRequestedCallback& callback); |
| 46 |
| 47 // MediaConsumer implementation. |
| 48 void SetBuffer( |
| 49 ScopedSharedBufferHandle buffer, |
| 50 uint64_t size, |
| 51 const SetBufferCallback& callback) override; |
| 52 |
| 53 void PushPacket(MediaPacketPtr packet, const PushPacketCallback& callback) |
| 54 override; |
| 55 |
| 56 void MediaConsumerFlush(const FlushCallback& callback) override; |
| 57 |
| 58 // ActiveSource implementation. |
| 59 bool can_accept_allocator() const override; |
| 60 |
| 61 void set_allocator(PayloadAllocator* allocator) override; |
| 62 |
| 63 void SetSupplyCallback(const SupplyCallback& supply_callback) override; |
| 64 |
| 65 void SetDownstreamDemand(Demand demand) override; |
| 66 |
| 67 private: |
| 68 MojoConsumer(); |
| 69 |
| 70 // Specialized packet implementation. |
| 71 class PacketImpl : public Packet { |
| 72 public: |
| 73 static PacketPtr Create( |
| 74 MediaPacketPtr media_packet, |
| 75 const PushPacketCallback& callback, |
| 76 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 77 const MappedSharedBuffer& buffer) { |
| 78 return PacketPtr(new PacketImpl( |
| 79 media_packet.Pass(), |
| 80 callback, |
| 81 task_runner, |
| 82 buffer)); |
| 83 } |
| 84 |
| 85 // Packet implementation. |
| 86 int64_t presentation_time() const override { |
| 87 return media_packet_->pts; |
| 88 } |
| 89 |
| 90 uint64_t duration() const override { |
| 91 return media_packet_->duration; |
| 92 } |
| 93 |
| 94 bool end_of_stream() const override { |
| 95 return media_packet_->end_of_stream; |
| 96 } |
| 97 |
| 98 size_t size() const override { |
| 99 return media_packet_->payload->length; |
| 100 } |
| 101 |
| 102 void* payload() const override { return payload_; } |
| 103 |
| 104 protected: |
| 105 void Release() override; |
| 106 |
| 107 private: |
| 108 PacketImpl( |
| 109 MediaPacketPtr media_packet, |
| 110 const PushPacketCallback& callback, |
| 111 scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 112 const MappedSharedBuffer& buffer); |
| 113 |
| 114 ~PacketImpl() override; |
| 115 |
| 116 static void RunCallback(const PushPacketCallback& callback); |
| 117 |
| 118 MediaPacketPtr media_packet_; |
| 119 const PushPacketCallback callback_; |
| 120 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 121 void* payload_; |
| 122 }; |
| 123 |
| 124 BindingSet<MediaConsumer> bindings_; |
| 125 FlushRequestedCallback flush_requested_callback_; |
| 126 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 127 MappedSharedBuffer buffer_; |
| 128 SupplyCallback supply_callback_; |
| 129 }; |
| 130 |
| 131 } // namespace media |
| 132 } // namespace mojo |
| 133 |
| 134 #endif // SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_CONSUMER_H_ |
| OLD | NEW |