Chromium Code Reviews| 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 { | |
|
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
| |
| 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 |