| 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 |