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

Side by Side Diff: services/media/framework_mojo/mojo_packet_producer.cc

Issue 2097953002: Motown: Rename MediaProducer/Consumer to MediaPacketProducer/Consumer (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Renamed MojoConsumer and MojoProducer Created 4 years, 5 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 unified diff | Download patch
OLDNEW
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 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "services/media/framework_mojo/mojo_producer.h" 9 #include "services/media/framework_mojo/mojo_packet_producer.h"
10 10
11 namespace mojo { 11 namespace mojo {
12 namespace media { 12 namespace media {
13 13
14 MojoProducer::MojoProducer() { 14 MojoPacketProducer::MojoPacketProducer() {
15 task_runner_ = base::MessageLoop::current()->task_runner(); 15 task_runner_ = base::MessageLoop::current()->task_runner();
16 DCHECK(task_runner_); 16 DCHECK(task_runner_);
17 } 17 }
18 18
19 MojoProducer::~MojoProducer() { 19 MojoPacketProducer::~MojoPacketProducer() {
20 base::AutoLock lock(lock_); 20 base::AutoLock lock(lock_);
21 } 21 }
22 22
23 void MojoProducer::AddBinding(InterfaceRequest<MediaProducer> producer) { 23 void MojoPacketProducer::AddBinding(
24 InterfaceRequest<MediaPacketProducer> producer) {
24 bindings_.AddBinding(this, producer.Pass()); 25 bindings_.AddBinding(this, producer.Pass());
25 } 26 }
26 27
27 void MojoProducer::PrimeConnection(const PrimeConnectionCallback& callback) { 28 void MojoPacketProducer::PrimeConnection(
29 const PrimeConnectionCallback& callback) {
28 Demand demand; 30 Demand demand;
29 31
30 if (consumer_.is_bound()) { 32 if (consumer_.is_bound()) {
31 base::AutoLock lock(lock_); 33 base::AutoLock lock(lock_);
32 max_pushes_outstanding_ = 4; // TODO(dalesat): Made up! 34 max_pushes_outstanding_ = 4; // TODO(dalesat): Made up!
33 demand = current_pushes_outstanding_ < max_pushes_outstanding_ 35 demand = current_pushes_outstanding_ < max_pushes_outstanding_
34 ? Demand::kPositive 36 ? Demand::kPositive
35 : Demand::kNegative; 37 : Demand::kNegative;
36 } else { 38 } else {
37 demand = Demand::kNeutral; 39 demand = Demand::kNeutral;
38 if (!mojo_allocator_.initialized()) { 40 if (!mojo_allocator_.initialized()) {
39 mojo_allocator_.InitNew(4096 * 1024); // TODO(dalesat): Made up! 41 mojo_allocator_.InitNew(4096 * 1024); // TODO(dalesat): Made up!
40 } 42 }
41 } 43 }
42 44
43 DCHECK(demand_callback_); 45 DCHECK(demand_callback_);
44 demand_callback_(demand); 46 demand_callback_(demand);
45 47
46 if (consumer_.is_bound()) { 48 if (consumer_.is_bound()) {
47 consumer_->Prime([this, callback]() { callback.Run(); }); 49 consumer_->Prime([this, callback]() { callback.Run(); });
48 } else { 50 } else {
49 callback.Run(); 51 callback.Run();
50 } 52 }
51 } 53 }
52 54
53 void MojoProducer::FlushConnection(const FlushConnectionCallback& callback) { 55 void MojoPacketProducer::FlushConnection(
56 const FlushConnectionCallback& callback) {
54 { 57 {
55 base::AutoLock lock(lock_); 58 base::AutoLock lock(lock_);
56 max_pushes_outstanding_ = 0; 59 max_pushes_outstanding_ = 0;
57 } 60 }
58 61
59 DCHECK(demand_callback_); 62 DCHECK(demand_callback_);
60 demand_callback_(Demand::kNegative); 63 demand_callback_(Demand::kNegative);
61 64
62 if (consumer_.is_bound()) { 65 if (consumer_.is_bound()) {
63 consumer_->Flush(callback); 66 consumer_->Flush(callback);
64 } else { 67 } else {
65 callback.Run(); 68 callback.Run();
66 } 69 }
67 } 70 }
68 71
69 PayloadAllocator* MojoProducer::allocator() { 72 PayloadAllocator* MojoPacketProducer::allocator() {
70 return &mojo_allocator_; 73 return &mojo_allocator_;
71 } 74 }
72 75
73 void MojoProducer::SetDemandCallback(const DemandCallback& demand_callback) { 76 void MojoPacketProducer::SetDemandCallback(
77 const DemandCallback& demand_callback) {
74 demand_callback_ = demand_callback; 78 demand_callback_ = demand_callback;
75 } 79 }
76 80
77 Demand MojoProducer::SupplyPacket(PacketPtr packet) { 81 Demand MojoPacketProducer::SupplyPacket(PacketPtr packet) {
78 DCHECK(packet); 82 DCHECK(packet);
79 83
80 // If we're not connected, throw the packet away. 84 // If we're not connected, throw the packet away.
81 if (!consumer_.is_bound()) { 85 if (!consumer_.is_bound()) {
82 return packet->end_of_stream() ? Demand::kNegative : Demand::kNeutral; 86 return packet->end_of_stream() ? Demand::kNegative : Demand::kNeutral;
83 } 87 }
84 88
85 Demand demand; 89 Demand demand;
86 90
87 { 91 {
88 base::AutoLock lock(lock_); 92 base::AutoLock lock(lock_);
89 DCHECK(current_pushes_outstanding_ < max_pushes_outstanding_); 93 DCHECK(current_pushes_outstanding_ < max_pushes_outstanding_);
90 94
91 ++current_pushes_outstanding_; 95 ++current_pushes_outstanding_;
92 96
93 if (packet->end_of_stream()) { 97 if (packet->end_of_stream()) {
94 demand = Demand::kNegative; 98 demand = Demand::kNegative;
95 max_pushes_outstanding_ = 0; 99 max_pushes_outstanding_ = 0;
96 } else { 100 } else {
97 demand = current_pushes_outstanding_ < max_pushes_outstanding_ 101 demand = current_pushes_outstanding_ < max_pushes_outstanding_
98 ? Demand::kPositive 102 ? Demand::kPositive
99 : Demand::kNegative; 103 : Demand::kNegative;
100 } 104 }
101 } 105 }
102 106
103 MediaPacketPtr media_packet = CreateMediaPacket(packet); 107 MediaPacketPtr media_packet = CreateMediaPacket(packet);
104 task_runner_->PostTask( 108 task_runner_->PostTask(
105 FROM_HERE, 109 FROM_HERE,
106 base::Bind(&MojoProducer::SendPacket, base::Unretained(this), 110 base::Bind(&MojoPacketProducer::SendPacket, base::Unretained(this),
107 packet.release(), base::Passed(media_packet.Pass()))); 111 packet.release(), base::Passed(media_packet.Pass())));
108 112
109 return demand; 113 return demand;
110 } 114 }
111 115
112 void MojoProducer::Connect(InterfaceHandle<MediaConsumer> consumer, 116 void MojoPacketProducer::Connect(InterfaceHandle<MediaPacketConsumer> consumer,
113 const ConnectCallback& callback) { 117 const ConnectCallback& callback) {
114 DCHECK(consumer); 118 DCHECK(consumer);
115 119
116 consumer_ = MediaConsumerPtr::Create(std::move(consumer)); 120 consumer_ = MediaPacketConsumerPtr::Create(std::move(consumer));
117 121
118 if (!mojo_allocator_.initialized()) { 122 if (!mojo_allocator_.initialized()) {
119 mojo_allocator_.InitNew(4096 * 1024); // TODO(dalesat): Made up! 123 mojo_allocator_.InitNew(4096 * 1024); // TODO(dalesat): Made up!
120 } 124 }
121 125
122 consumer_->SetBuffer(mojo_allocator_.GetDuplicateHandle(), 126 consumer_->SetBuffer(mojo_allocator_.GetDuplicateHandle(),
123 [callback]() { callback.Run(); }); 127 [callback]() { callback.Run(); });
124 } 128 }
125 129
126 void MojoProducer::Disconnect() { 130 void MojoPacketProducer::Disconnect() {
127 DCHECK(demand_callback_); 131 DCHECK(demand_callback_);
128 demand_callback_(Demand::kNegative); 132 demand_callback_(Demand::kNegative);
129 consumer_.reset(); 133 consumer_.reset();
130 } 134 }
131 135
132 void MojoProducer::SendPacket(Packet* packet_raw_ptr, 136 void MojoPacketProducer::SendPacket(Packet* packet_raw_ptr,
133 MediaPacketPtr media_packet) { 137 MediaPacketPtr media_packet) {
134 consumer_->SendPacket( 138 consumer_->SendPacket(
135 media_packet.Pass(), 139 media_packet.Pass(),
136 [this, packet_raw_ptr](MediaConsumer::SendResult send_result) { 140 [this, packet_raw_ptr](MediaPacketConsumer::SendResult send_result) {
137 PacketPtr packet = PacketPtr(packet_raw_ptr); 141 PacketPtr packet = PacketPtr(packet_raw_ptr);
138 Demand demand; 142 Demand demand;
139 143
140 { 144 {
141 base::AutoLock lock(lock_); 145 base::AutoLock lock(lock_);
142 demand = --current_pushes_outstanding_ < max_pushes_outstanding_ 146 demand = --current_pushes_outstanding_ < max_pushes_outstanding_
143 ? Demand::kPositive 147 ? Demand::kPositive
144 : Demand::kNegative; 148 : Demand::kNegative;
145 } 149 }
146 150
147 DCHECK(demand_callback_); 151 DCHECK(demand_callback_);
148 demand_callback_(demand); 152 demand_callback_(demand);
149 }); 153 });
150 } 154 }
151 155
152 MediaPacketPtr MojoProducer::CreateMediaPacket(const PacketPtr& packet) { 156 MediaPacketPtr MojoPacketProducer::CreateMediaPacket(const PacketPtr& packet) {
153 DCHECK(packet); 157 DCHECK(packet);
154 158
155 MediaPacketRegionPtr region = MediaPacketRegion::New(); 159 MediaPacketRegionPtr region = MediaPacketRegion::New();
156 region->offset = packet->size() == 0 160 region->offset = packet->size() == 0
157 ? 0 161 ? 0
158 : mojo_allocator_.OffsetFromPtr(packet->payload()); 162 : mojo_allocator_.OffsetFromPtr(packet->payload());
159 region->length = packet->size(); 163 region->length = packet->size();
160 164
161 MediaPacketPtr media_packet = MediaPacket::New(); 165 MediaPacketPtr media_packet = MediaPacket::New();
162 media_packet->pts = packet->pts(); 166 media_packet->pts = packet->pts();
163 media_packet->end_of_stream = packet->end_of_stream(); 167 media_packet->end_of_stream = packet->end_of_stream();
164 media_packet->payload = region.Pass(); 168 media_packet->payload = region.Pass();
165 169
166 return media_packet.Pass(); 170 return media_packet.Pass();
167 } 171 }
168 172
169 } // namespace media 173 } // namespace media
170 } // namespace mojo 174 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698