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 #include "base/logging.h" | 5 #include "base/logging.h" |
6 #include "services/media/framework_mojo/mojo_pull_mode_producer.h" | 6 #include "services/media/framework_mojo/mojo_pull_mode_producer.h" |
7 | 7 |
8 namespace mojo { | 8 namespace mojo { |
9 namespace media { | 9 namespace media { |
10 | 10 |
11 MojoPullModeProducer::MojoPullModeProducer() : | 11 MojoPullModeProducer::MojoPullModeProducer() : |
12 state_(MediaState::UNPREPARED), | 12 state_(MediaState::UNPREPARED), |
13 demand_(Demand::kNegative), | 13 demand_(Demand::kNegative), |
14 presentation_time_(0), | 14 pts_(0), |
15 cached_packet_(nullptr) {} | 15 cached_packet_(nullptr) {} |
16 | 16 |
17 MojoPullModeProducer::~MojoPullModeProducer() { | 17 MojoPullModeProducer::~MojoPullModeProducer() { |
18 base::AutoLock lock(lock_); | 18 base::AutoLock lock(lock_); |
19 } | 19 } |
20 | 20 |
21 void MojoPullModeProducer::AddBinding( | 21 void MojoPullModeProducer::AddBinding( |
22 InterfaceRequest<MediaPullModeProducer> producer) { | 22 InterfaceRequest<MediaPullModeProducer> producer) { |
23 bindings_.AddBinding(this, producer.Pass()); | 23 bindings_.AddBinding(this, producer.Pass()); |
24 } | 24 } |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 150 |
151 bool MojoPullModeProducer::MaybeHandlePullUnsafe( | 151 bool MojoPullModeProducer::MaybeHandlePullUnsafe( |
152 const PullPacketCallback& callback) { | 152 const PullPacketCallback& callback) { |
153 DCHECK(!callback.is_null()); | 153 DCHECK(!callback.is_null()); |
154 lock_.AssertAcquired(); | 154 lock_.AssertAcquired(); |
155 | 155 |
156 if (state_ == MediaState::ENDED) { | 156 if (state_ == MediaState::ENDED) { |
157 // At end-of-stream. Respond with empty end-of-stream packet. | 157 // At end-of-stream. Respond with empty end-of-stream packet. |
158 HandlePullWithPacketUnsafe( | 158 HandlePullWithPacketUnsafe( |
159 callback, | 159 callback, |
160 Packet::CreateEndOfStream(presentation_time_)); | 160 Packet::CreateEndOfStream(pts_)); |
161 return true; | 161 return true; |
162 } | 162 } |
163 | 163 |
164 if (!cached_packet_) { | 164 if (!cached_packet_) { |
165 // Waiting for packet or end-of-stream indication. | 165 // Waiting for packet or end-of-stream indication. |
166 return false; | 166 return false; |
167 } | 167 } |
168 | 168 |
169 HandlePullWithPacketUnsafe(callback, std::move(cached_packet_)); | 169 HandlePullWithPacketUnsafe(callback, std::move(cached_packet_)); |
170 return true; | 170 return true; |
(...skipping 12 matching lines...) Expand all Loading... |
183 | 183 |
184 MediaPacketPtr MojoPullModeProducer::CreateMediaPacket( | 184 MediaPacketPtr MojoPullModeProducer::CreateMediaPacket( |
185 const PacketPtr& packet) { | 185 const PacketPtr& packet) { |
186 DCHECK(packet); | 186 DCHECK(packet); |
187 | 187 |
188 MediaPacketRegionPtr region = MediaPacketRegion::New(); | 188 MediaPacketRegionPtr region = MediaPacketRegion::New(); |
189 region->offset = mojo_allocator_.OffsetFromPtr(packet->payload()); | 189 region->offset = mojo_allocator_.OffsetFromPtr(packet->payload()); |
190 region->length = packet->size(); | 190 region->length = packet->size(); |
191 | 191 |
192 MediaPacketPtr media_packet = MediaPacket::New(); | 192 MediaPacketPtr media_packet = MediaPacket::New(); |
193 media_packet->pts = packet->presentation_time(); | 193 media_packet->pts = packet->pts(); |
194 media_packet->duration = packet->duration(); | |
195 media_packet->end_of_stream = packet->end_of_stream(); | 194 media_packet->end_of_stream = packet->end_of_stream(); |
196 media_packet->payload = region.Pass(); | 195 media_packet->payload = region.Pass(); |
197 presentation_time_ = packet->presentation_time() + packet->duration(); | 196 pts_ = packet->pts(); |
198 | 197 |
199 return media_packet.Pass(); | 198 return media_packet.Pass(); |
200 } | 199 } |
201 | 200 |
202 } // namespace media | 201 } // namespace media |
203 } // namespace mojo | 202 } // namespace mojo |
OLD | NEW |