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

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

Issue 1822333002: Motown: wholesale clang-format (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: dalesat Created 4 years, 9 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_producer.h"
10 10
(...skipping 12 matching lines...) Expand all
23 void MojoProducer::AddBinding(InterfaceRequest<MediaProducer> producer) { 23 void MojoProducer::AddBinding(InterfaceRequest<MediaProducer> producer) {
24 bindings_.AddBinding(this, producer.Pass()); 24 bindings_.AddBinding(this, producer.Pass());
25 } 25 }
26 26
27 void MojoProducer::PrimeConnection(const FlushConnectionCallback& callback) { 27 void MojoProducer::PrimeConnection(const FlushConnectionCallback& callback) {
28 Demand demand; 28 Demand demand;
29 29
30 { 30 {
31 base::AutoLock lock(lock_); 31 base::AutoLock lock(lock_);
32 max_pushes_outstanding_ = 10; // TODO(dalesat): Made up! 32 max_pushes_outstanding_ = 10; // TODO(dalesat): Made up!
33 demand = current_pushes_outstanding_ < max_pushes_outstanding_ ? 33 demand = current_pushes_outstanding_ < max_pushes_outstanding_
34 Demand::kPositive : 34 ? Demand::kPositive
35 Demand::kNegative; 35 : Demand::kNegative;
36 } 36 }
37 37
38 DCHECK(demand_callback_); 38 DCHECK(demand_callback_);
39 demand_callback_(demand); 39 demand_callback_(demand);
40 SetState(MediaState::PAUSED); 40 SetState(MediaState::PAUSED);
41 41
42 DCHECK(consumer_.is_bound()); 42 DCHECK(consumer_.is_bound());
43 consumer_->Prime([this, callback]() { 43 consumer_->Prime([this, callback]() { callback.Run(); });
44 callback.Run();
45 });
46 } 44 }
47 45
48 void MojoProducer::FlushConnection(const FlushConnectionCallback& callback) { 46 void MojoProducer::FlushConnection(const FlushConnectionCallback& callback) {
49 { 47 {
50 base::AutoLock lock(lock_); 48 base::AutoLock lock(lock_);
51 max_pushes_outstanding_ = 0; 49 max_pushes_outstanding_ = 0;
52 } 50 }
53 51
54 DCHECK(demand_callback_); 52 DCHECK(demand_callback_);
55 demand_callback_(Demand::kNegative); 53 demand_callback_(Demand::kNegative);
56 54
57 DCHECK(consumer_.is_bound()); 55 DCHECK(consumer_.is_bound());
58 consumer_->Flush(callback); 56 consumer_->Flush(callback);
59 first_pts_since_flush_ = Packet::kUnknownPts; 57 first_pts_since_flush_ = Packet::kUnknownPts;
60 end_of_stream_ = false; 58 end_of_stream_ = false;
61 } 59 }
62 60
63 void MojoProducer::SetStatusCallback( 61 void MojoProducer::SetStatusCallback(const StatusCallback& callback) {
64 const StatusCallback& callback) {
65 status_callback_ = callback; 62 status_callback_ = callback;
66 } 63 }
67 64
68 int64_t MojoProducer::GetFirstPtsSinceFlush() { 65 int64_t MojoProducer::GetFirstPtsSinceFlush() {
69 return first_pts_since_flush_; 66 return first_pts_since_flush_;
70 } 67 }
71 68
72 PayloadAllocator* MojoProducer::allocator() { 69 PayloadAllocator* MojoProducer::allocator() {
73 return &mojo_allocator_; 70 return &mojo_allocator_;
74 } 71 }
(...skipping 23 matching lines...) Expand all
98 DCHECK(current_pushes_outstanding_ < max_pushes_outstanding_); 95 DCHECK(current_pushes_outstanding_ < max_pushes_outstanding_);
99 DCHECK(!end_of_stream_) << "packet pushed after end-of-stream"; 96 DCHECK(!end_of_stream_) << "packet pushed after end-of-stream";
100 97
101 ++current_pushes_outstanding_; 98 ++current_pushes_outstanding_;
102 99
103 if (packet->end_of_stream()) { 100 if (packet->end_of_stream()) {
104 end_of_stream_ = true; 101 end_of_stream_ = true;
105 demand = Demand::kNegative; 102 demand = Demand::kNegative;
106 max_pushes_outstanding_ = 0; 103 max_pushes_outstanding_ = 0;
107 } else { 104 } else {
108 demand = current_pushes_outstanding_ < max_pushes_outstanding_ ? 105 demand = current_pushes_outstanding_ < max_pushes_outstanding_
109 Demand::kPositive : 106 ? Demand::kPositive
110 Demand::kNegative; 107 : Demand::kNegative;
111 } 108 }
112 } 109 }
113 110
114 MediaPacketPtr media_packet = CreateMediaPacket(packet); 111 MediaPacketPtr media_packet = CreateMediaPacket(packet);
115 task_runner_->PostTask(FROM_HERE, base::Bind( 112 task_runner_->PostTask(
116 &MojoProducer::SendPacket, 113 FROM_HERE,
117 base::Unretained(this), 114 base::Bind(&MojoProducer::SendPacket, base::Unretained(this),
118 packet.release(), 115 packet.release(), base::Passed(media_packet.Pass())));
119 base::Passed(media_packet.Pass())));
120 116
121 return demand; 117 return demand;
122 } 118 }
123 119
124 void MojoProducer::Connect( 120 void MojoProducer::Connect(InterfaceHandle<MediaConsumer> consumer,
125 InterfaceHandle<MediaConsumer> consumer, 121 const ConnectCallback& callback) {
126 const ConnectCallback& callback) {
127 DCHECK(consumer); 122 DCHECK(consumer);
128 123
129 consumer_ = MediaConsumerPtr::Create(std::move(consumer)); 124 consumer_ = MediaConsumerPtr::Create(std::move(consumer));
130 125
131 if (!mojo_allocator_.initialized()) { 126 if (!mojo_allocator_.initialized()) {
132 mojo_allocator_.InitNew(256 * 1024); // TODO(dalesat): Made up! 127 mojo_allocator_.InitNew(256 * 1024); // TODO(dalesat): Made up!
133 } 128 }
134 129
135 consumer_->SetBuffer( 130 consumer_->SetBuffer(mojo_allocator_.GetDuplicateHandle(),
136 mojo_allocator_.GetDuplicateHandle(), 131 [callback]() { callback.Run(); });
137 [callback]() {
138 callback.Run();
139 });
140 } 132 }
141 133
142 void MojoProducer::Disconnect() { 134 void MojoProducer::Disconnect() {
143 DCHECK(demand_callback_); 135 DCHECK(demand_callback_);
144 demand_callback_(Demand::kNegative); 136 demand_callback_(Demand::kNegative);
145 SetState(MediaState::UNPREPARED); 137 SetState(MediaState::UNPREPARED);
146 consumer_.reset(); 138 consumer_.reset();
147 } 139 }
148 140
149 void MojoProducer::SendPacket( 141 void MojoProducer::SendPacket(Packet* packet_raw_ptr,
150 Packet* packet_raw_ptr, 142 MediaPacketPtr media_packet) {
151 MediaPacketPtr media_packet) {
152 consumer_->SendPacket( 143 consumer_->SendPacket(
153 media_packet.Pass(), 144 media_packet.Pass(),
154 [this, packet_raw_ptr](MediaConsumer::SendResult send_result) { 145 [this, packet_raw_ptr](MediaConsumer::SendResult send_result) {
155 PacketPtr packet = PacketPtr(packet_raw_ptr); 146 PacketPtr packet = PacketPtr(packet_raw_ptr);
156 Demand demand; 147 Demand demand;
157 148
158 { 149 {
159 base::AutoLock lock(lock_); 150 base::AutoLock lock(lock_);
160 demand = --current_pushes_outstanding_ < max_pushes_outstanding_ ? 151 demand = --current_pushes_outstanding_ < max_pushes_outstanding_
161 Demand::kPositive : 152 ? Demand::kPositive
162 Demand::kNegative; 153 : Demand::kNegative;
163 } 154 }
164 155
165 DCHECK(demand_callback_); 156 DCHECK(demand_callback_);
166 demand_callback_(demand); 157 demand_callback_(demand);
167 158
168 if (end_of_stream_ && packet->end_of_stream()) { 159 if (end_of_stream_ && packet->end_of_stream()) {
169 SetState(MediaState::ENDED); 160 SetState(MediaState::ENDED);
170 } 161 }
171 }); 162 });
172 } 163 }
173 164
174 void MojoProducer::SetState(MediaState state) { 165 void MojoProducer::SetState(MediaState state) {
175 if (state_ != state) { 166 if (state_ != state) {
176 state_ = state; 167 state_ = state;
177 if (status_callback_) { 168 if (status_callback_) {
178 status_callback_(state_); 169 status_callback_(state_);
179 } 170 }
180 } 171 }
181 } 172 }
182 173
183 MediaPacketPtr MojoProducer::CreateMediaPacket( 174 MediaPacketPtr MojoProducer::CreateMediaPacket(const PacketPtr& packet) {
184 const PacketPtr& packet) {
185 DCHECK(packet); 175 DCHECK(packet);
186 176
187 MediaPacketRegionPtr region = MediaPacketRegion::New(); 177 MediaPacketRegionPtr region = MediaPacketRegion::New();
188 region->offset = packet->size() == 0 ? 0 : 178 region->offset = packet->size() == 0
189 mojo_allocator_.OffsetFromPtr(packet->payload()); 179 ? 0
180 : mojo_allocator_.OffsetFromPtr(packet->payload());
190 region->length = packet->size(); 181 region->length = packet->size();
191 182
192 MediaPacketPtr media_packet = MediaPacket::New(); 183 MediaPacketPtr media_packet = MediaPacket::New();
193 media_packet->pts = packet->pts(); 184 media_packet->pts = packet->pts();
194 media_packet->end_of_stream = packet->end_of_stream(); 185 media_packet->end_of_stream = packet->end_of_stream();
195 media_packet->payload = region.Pass(); 186 media_packet->payload = region.Pass();
196 187
197 return media_packet.Pass(); 188 return media_packet.Pass();
198 } 189 }
199 190
200 } // namespace media 191 } // namespace media
201 } // namespace mojo 192 } // namespace mojo
OLDNEW
« no previous file with comments | « services/media/framework_mojo/mojo_producer.h ('k') | services/media/framework_mojo/mojo_pull_mode_producer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698