OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_PULL_MODE_PRODUCER_H_ | 5 #ifndef SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_PULL_MODE_PRODUCER_H_ |
6 #define SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_PULL_MODE_PRODUCER_H_ | 6 #define SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_PULL_MODE_PRODUCER_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 | 9 |
10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
11 #include "mojo/common/binding_set.h" | 11 #include "mojo/common/binding_set.h" |
12 #include "mojo/services/media/common/interfaces/media_state.mojom.h" | 12 #include "mojo/services/media/common/interfaces/media_state.mojom.h" |
13 #include "mojo/services/media/common/interfaces/media_transport.mojom.h" | 13 #include "mojo/services/media/common/interfaces/media_transport.mojom.h" |
14 #include "services/media/framework/models/active_sink.h" | 14 #include "services/media/framework/models/active_sink.h" |
15 #include "services/media/framework_mojo/mojo_allocator.h" | 15 #include "services/media/framework_mojo/mojo_allocator.h" |
16 | 16 |
17 namespace mojo { | 17 namespace mojo { |
18 namespace media { | 18 namespace media { |
19 | 19 |
20 // Implements MediaPullModeProducer to forward a stream across mojo. | 20 // Implements MediaPullModeProducer to forward a stream across mojo. |
21 class MojoPullModeProducer : | 21 class MojoPullModeProducer : public MediaPullModeProducer, public ActiveSink { |
22 public MediaPullModeProducer, | |
23 public ActiveSink { | |
24 public: | 22 public: |
25 static std::shared_ptr<MojoPullModeProducer> Create() { | 23 static std::shared_ptr<MojoPullModeProducer> Create() { |
26 return std::shared_ptr<MojoPullModeProducer>(new MojoPullModeProducer()); | 24 return std::shared_ptr<MojoPullModeProducer>(new MojoPullModeProducer()); |
27 } | 25 } |
28 | 26 |
29 ~MojoPullModeProducer() override; | 27 ~MojoPullModeProducer() override; |
30 | 28 |
31 // Adds a binding. | 29 // Adds a binding. |
32 void AddBinding(InterfaceRequest<MediaPullModeProducer> producer); | 30 void AddBinding(InterfaceRequest<MediaPullModeProducer> producer); |
33 | 31 |
34 // MediaPullModeProducer implementation. | 32 // MediaPullModeProducer implementation. |
35 void GetBuffer(const GetBufferCallback& callback) override; | 33 void GetBuffer(const GetBufferCallback& callback) override; |
36 | 34 |
37 void PullPacket( | 35 void PullPacket(MediaPacketPtr to_release, |
38 MediaPacketPtr to_release, | 36 const PullPacketCallback& callback) override; |
39 const PullPacketCallback& callback) override; | |
40 | 37 |
41 void ReleasePacket(MediaPacketPtr to_release) override; | 38 void ReleasePacket(MediaPacketPtr to_release) override; |
42 | 39 |
43 // ActiveSink implementation. | 40 // ActiveSink implementation. |
44 PayloadAllocator* allocator() override; | 41 PayloadAllocator* allocator() override; |
45 | 42 |
46 void SetDemandCallback(const DemandCallback& demand_callback) override; | 43 void SetDemandCallback(const DemandCallback& demand_callback) override; |
47 | 44 |
48 Demand SupplyPacket(PacketPtr packet) override; | 45 Demand SupplyPacket(PacketPtr packet) override; |
49 | 46 |
50 private: | 47 private: |
51 MojoPullModeProducer(); | 48 MojoPullModeProducer(); |
52 | 49 |
53 // Handles as many pending pulls as possible. | 50 // Handles as many pending pulls as possible. |
54 // MUST BE CALLED WITH lock_ TAKEN. | 51 // MUST BE CALLED WITH lock_ TAKEN. |
55 void HandlePendingPullsUnsafe(); | 52 void HandlePendingPullsUnsafe(); |
56 | 53 |
57 // Attempts to handle a pull and indicates whether it was handled. | 54 // Attempts to handle a pull and indicates whether it was handled. |
58 // MUST BE CALLED WITH lock_ TAKEN. | 55 // MUST BE CALLED WITH lock_ TAKEN. |
59 bool MaybeHandlePullUnsafe(const PullPacketCallback& callback); | 56 bool MaybeHandlePullUnsafe(const PullPacketCallback& callback); |
60 | 57 |
61 // Runs the callback with a new MediaPacket created from the given Packet. | 58 // Runs the callback with a new MediaPacket created from the given Packet. |
62 // MUST BE CALLED WITH lock_ TAKEN. | 59 // MUST BE CALLED WITH lock_ TAKEN. |
63 void HandlePullWithPacketUnsafe( | 60 void HandlePullWithPacketUnsafe(const PullPacketCallback& callback, |
64 const PullPacketCallback& callback, | 61 PacketPtr packet); |
65 PacketPtr packet); | |
66 | 62 |
67 // Creates a MediaPacket from a Packet. | 63 // Creates a MediaPacket from a Packet. |
68 MediaPacketPtr CreateMediaPacket(const PacketPtr& packet); | 64 MediaPacketPtr CreateMediaPacket(const PacketPtr& packet); |
69 | 65 |
70 BindingSet<MediaPullModeProducer> bindings_; | 66 BindingSet<MediaPullModeProducer> bindings_; |
71 | 67 |
72 DemandCallback demand_callback_; | 68 DemandCallback demand_callback_; |
73 | 69 |
74 // Allocates from the shared buffer. | 70 // Allocates from the shared buffer. |
75 MojoAllocator mojo_allocator_; | 71 MojoAllocator mojo_allocator_; |
(...skipping 14 matching lines...) Expand all Loading... |
90 std::deque<PullPacketCallback> pending_pulls_; | 86 std::deque<PullPacketCallback> pending_pulls_; |
91 std::deque<PacketPtr> unreleased_packets_; | 87 std::deque<PacketPtr> unreleased_packets_; |
92 PacketPtr cached_packet_; | 88 PacketPtr cached_packet_; |
93 // THE FIELDS ABOVE SHOULD ONLY BE ACCESSED WITH lock_ TAKEN. | 89 // THE FIELDS ABOVE SHOULD ONLY BE ACCESSED WITH lock_ TAKEN. |
94 }; | 90 }; |
95 | 91 |
96 } // namespace media | 92 } // namespace media |
97 } // namespace mojo | 93 } // namespace mojo |
98 | 94 |
99 #endif // SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_PULL_MODE_PRODUCER_H_ | 95 #endif // SERVICES_MEDIA_FRAMEWORK_MOJO_MOJO_PULL_MODE_PRODUCER_H_ |
OLD | NEW |