| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 loss_count_(0), | 81 loss_count_(0), |
| 82 packets_(), | 82 packets_(), |
| 83 clock_(clock), | 83 clock_(clock), |
| 84 rtt_ms_(rtt_ms) { | 84 rtt_ms_(rtt_ms) { |
| 85 assert(clock); | 85 assert(clock); |
| 86 } | 86 } |
| 87 | 87 |
| 88 ~LostPackets() { | 88 ~LostPackets() { |
| 89 if (debug_file_) { | 89 if (debug_file_) { |
| 90 fclose(debug_file_); | 90 fclose(debug_file_); |
| 91 debug_file_ = NULL; | 91 debug_file_ = nullptr; |
| 92 } | 92 } |
| 93 while (!packets_.empty()) { | 93 while (!packets_.empty()) { |
| 94 delete packets_.back(); | 94 delete packets_.back(); |
| 95 packets_.pop_back(); | 95 packets_.pop_back(); |
| 96 } | 96 } |
| 97 } | 97 } |
| 98 | 98 |
| 99 void AddPacket(RawRtpPacket* packet) { | 99 void AddPacket(RawRtpPacket* packet) { |
| 100 assert(packet); | 100 assert(packet); |
| 101 printf("Throw: %08x:%u\n", packet->ssrc(), packet->seq_num()); | 101 printf("Throw: %08x:%u\n", packet->ssrc(), packet->seq_num()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 130 RawRtpPacket* NextPacketToResend(int64_t time_now) { | 130 RawRtpPacket* NextPacketToResend(int64_t time_now) { |
| 131 CriticalSectionScoped cs(crit_sect_.get()); | 131 CriticalSectionScoped cs(crit_sect_.get()); |
| 132 for (RtpPacketIterator it = packets_.begin(); it != packets_.end(); ++it) { | 132 for (RtpPacketIterator it = packets_.begin(); it != packets_.end(); ++it) { |
| 133 RawRtpPacket* packet = *it; | 133 RawRtpPacket* packet = *it; |
| 134 if (time_now >= packet->resend_time_ms() && | 134 if (time_now >= packet->resend_time_ms() && |
| 135 packet->resend_time_ms() != -1) { | 135 packet->resend_time_ms() != -1) { |
| 136 packets_.erase(it); | 136 packets_.erase(it); |
| 137 return packet; | 137 return packet; |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 return NULL; | 140 return nullptr; |
| 141 } | 141 } |
| 142 | 142 |
| 143 int NumberOfPacketsToResend() const { | 143 int NumberOfPacketsToResend() const { |
| 144 CriticalSectionScoped cs(crit_sect_.get()); | 144 CriticalSectionScoped cs(crit_sect_.get()); |
| 145 int count = 0; | 145 int count = 0; |
| 146 for (ConstRtpPacketIterator it = packets_.begin(); it != packets_.end(); | 146 for (ConstRtpPacketIterator it = packets_.begin(); it != packets_.end(); |
| 147 ++it) { | 147 ++it) { |
| 148 if ((*it)->resend_time_ms() >= 0) { | 148 if ((*it)->resend_time_ms() >= 0) { |
| 149 count++; | 149 count++; |
| 150 } | 150 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 | 208 |
| 209 int RegisterSsrc(uint32_t ssrc, LostPackets* lost_packets, Clock* clock) { | 209 int RegisterSsrc(uint32_t ssrc, LostPackets* lost_packets, Clock* clock) { |
| 210 if (handlers_.count(ssrc) > 0) { | 210 if (handlers_.count(ssrc) > 0) { |
| 211 return 0; | 211 return 0; |
| 212 } | 212 } |
| 213 DEBUG_LOG1("Registering handler for ssrc=%08x", ssrc); | 213 DEBUG_LOG1("Registering handler for ssrc=%08x", ssrc); |
| 214 | 214 |
| 215 std::unique_ptr<Handler> handler( | 215 std::unique_ptr<Handler> handler( |
| 216 new Handler(ssrc, payload_types_, lost_packets)); | 216 new Handler(ssrc, payload_types_, lost_packets)); |
| 217 handler->payload_sink_.reset(payload_sink_factory_->Create(handler.get())); | 217 handler->payload_sink_.reset(payload_sink_factory_->Create(handler.get())); |
| 218 if (handler->payload_sink_.get() == NULL) { | 218 if (handler->payload_sink_.get() == nullptr) { |
| 219 return -1; | 219 return -1; |
| 220 } | 220 } |
| 221 | 221 |
| 222 RtpRtcp::Configuration configuration; | 222 RtpRtcp::Configuration configuration; |
| 223 configuration.clock = clock; | 223 configuration.clock = clock; |
| 224 configuration.audio = false; | 224 configuration.audio = false; |
| 225 handler->rtp_module_.reset(RtpReceiver::CreateVideoReceiver( | 225 handler->rtp_module_.reset(RtpReceiver::CreateVideoReceiver( |
| 226 configuration.clock, handler->payload_sink_.get(), NULL, | 226 configuration.clock, handler->payload_sink_.get(), nullptr, |
| 227 handler->rtp_payload_registry_.get())); | 227 handler->rtp_payload_registry_.get())); |
| 228 if (handler->rtp_module_.get() == NULL) { | 228 if (handler->rtp_module_.get() == nullptr) { |
| 229 return -1; | 229 return -1; |
| 230 } | 230 } |
| 231 | 231 |
| 232 handler->rtp_header_parser_->RegisterRtpHeaderExtension( | 232 handler->rtp_header_parser_->RegisterRtpHeaderExtension( |
| 233 kRtpExtensionTransmissionTimeOffset, | 233 kRtpExtensionTransmissionTimeOffset, |
| 234 kDefaultTransmissionTimeOffsetExtensionId); | 234 kDefaultTransmissionTimeOffsetExtensionId); |
| 235 | 235 |
| 236 for (PayloadTypesIterator it = payload_types_.begin(); | 236 for (PayloadTypesIterator it = payload_types_.begin(); |
| 237 it != payload_types_.end(); ++it) { | 237 it != payload_types_.end(); ++it) { |
| 238 VideoCodec codec; | 238 VideoCodec codec; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 assert(packet_source->get()); | 342 assert(packet_source->get()); |
| 343 packet_source_.swap(*packet_source); | 343 packet_source_.swap(*packet_source); |
| 344 std::srand(321); | 344 std::srand(321); |
| 345 } | 345 } |
| 346 | 346 |
| 347 virtual ~RtpPlayerImpl() {} | 347 virtual ~RtpPlayerImpl() {} |
| 348 | 348 |
| 349 virtual int NextPacket(int64_t time_now) { | 349 virtual int NextPacket(int64_t time_now) { |
| 350 // Send any packets ready to be resent. | 350 // Send any packets ready to be resent. |
| 351 for (RawRtpPacket* packet = lost_packets_.NextPacketToResend(time_now); | 351 for (RawRtpPacket* packet = lost_packets_.NextPacketToResend(time_now); |
| 352 packet != NULL; packet = lost_packets_.NextPacketToResend(time_now)) { | 352 packet != nullptr; |
| 353 packet = lost_packets_.NextPacketToResend(time_now)) { |
| 353 int ret = SendPacket(packet->data(), packet->length()); | 354 int ret = SendPacket(packet->data(), packet->length()); |
| 354 if (ret > 0) { | 355 if (ret > 0) { |
| 355 printf("Resend: %08x:%u\n", packet->ssrc(), packet->seq_num()); | 356 printf("Resend: %08x:%u\n", packet->ssrc(), packet->seq_num()); |
| 356 lost_packets_.LogPacketResent(packet); | 357 lost_packets_.LogPacketResent(packet); |
| 357 resend_packet_count_++; | 358 resend_packet_count_++; |
| 358 } | 359 } |
| 359 delete packet; | 360 delete packet; |
| 360 if (ret < 0) { | 361 if (ret < 0) { |
| 361 return ret; | 362 return ret; |
| 362 } | 363 } |
| 363 } | 364 } |
| 364 | 365 |
| 365 // Send any packets from packet source. | 366 // Send any packets from packet source. |
| 366 if (!end_of_file_ && (TimeUntilNextPacket() == 0 || first_packet_)) { | 367 if (!end_of_file_ && (TimeUntilNextPacket() == 0 || first_packet_)) { |
| 367 if (first_packet_) { | 368 if (first_packet_) { |
| 368 if (!packet_source_->NextPacket(&next_packet_)) | 369 if (!packet_source_->NextPacket(&next_packet_)) |
| 369 return 0; | 370 return 0; |
| 370 first_packet_rtp_time_ = next_packet_.time_ms; | 371 first_packet_rtp_time_ = next_packet_.time_ms; |
| 371 first_packet_time_ms_ = clock_->TimeInMilliseconds(); | 372 first_packet_time_ms_ = clock_->TimeInMilliseconds(); |
| 372 first_packet_ = false; | 373 first_packet_ = false; |
| 373 } | 374 } |
| 374 | 375 |
| 375 if (reordering_ && reorder_buffer_.get() == NULL) { | 376 if (reordering_ && reorder_buffer_.get() == nullptr) { |
| 376 reorder_buffer_.reset( | 377 reorder_buffer_.reset( |
| 377 new RawRtpPacket(next_packet_.data, next_packet_.length, 0, 0)); | 378 new RawRtpPacket(next_packet_.data, next_packet_.length, 0, 0)); |
| 378 return 0; | 379 return 0; |
| 379 } | 380 } |
| 380 int ret = SendPacket(next_packet_.data, next_packet_.length); | 381 int ret = SendPacket(next_packet_.data, next_packet_.length); |
| 381 if (reorder_buffer_.get()) { | 382 if (reorder_buffer_.get()) { |
| 382 SendPacket(reorder_buffer_->data(), reorder_buffer_->length()); | 383 SendPacket(reorder_buffer_->data(), reorder_buffer_->length()); |
| 383 reorder_buffer_.reset(NULL); | 384 reorder_buffer_.reset(nullptr); |
| 384 } | 385 } |
| 385 if (ret < 0) { | 386 if (ret < 0) { |
| 386 return ret; | 387 return ret; |
| 387 } | 388 } |
| 388 | 389 |
| 389 if (!packet_source_->NextPacket(&next_packet_)) { | 390 if (!packet_source_->NextPacket(&next_packet_)) { |
| 390 end_of_file_ = true; | 391 end_of_file_ = true; |
| 391 return 0; | 392 return 0; |
| 392 } else if (next_packet_.length == 0) { | 393 } else if (next_packet_.length == 0) { |
| 393 return 0; | 394 return 0; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 RtpPlayerInterface* Create(const std::string& input_filename, | 470 RtpPlayerInterface* Create(const std::string& input_filename, |
| 470 PayloadSinkFactoryInterface* payload_sink_factory, | 471 PayloadSinkFactoryInterface* payload_sink_factory, |
| 471 Clock* clock, | 472 Clock* clock, |
| 472 const PayloadTypes& payload_types, | 473 const PayloadTypes& payload_types, |
| 473 float loss_rate, | 474 float loss_rate, |
| 474 int64_t rtt_ms, | 475 int64_t rtt_ms, |
| 475 bool reordering) { | 476 bool reordering) { |
| 476 std::unique_ptr<test::RtpFileReader> packet_source( | 477 std::unique_ptr<test::RtpFileReader> packet_source( |
| 477 test::RtpFileReader::Create(test::RtpFileReader::kRtpDump, | 478 test::RtpFileReader::Create(test::RtpFileReader::kRtpDump, |
| 478 input_filename)); | 479 input_filename)); |
| 479 if (packet_source.get() == NULL) { | 480 if (packet_source.get() == nullptr) { |
| 480 packet_source.reset(test::RtpFileReader::Create(test::RtpFileReader::kPcap, | 481 packet_source.reset(test::RtpFileReader::Create(test::RtpFileReader::kPcap, |
| 481 input_filename)); | 482 input_filename)); |
| 482 if (packet_source.get() == NULL) { | 483 if (packet_source.get() == nullptr) { |
| 483 return NULL; | 484 return nullptr; |
| 484 } | 485 } |
| 485 } | 486 } |
| 486 | 487 |
| 487 std::unique_ptr<RtpPlayerImpl> impl( | 488 std::unique_ptr<RtpPlayerImpl> impl( |
| 488 new RtpPlayerImpl(payload_sink_factory, payload_types, clock, | 489 new RtpPlayerImpl(payload_sink_factory, payload_types, clock, |
| 489 &packet_source, loss_rate, rtt_ms, reordering)); | 490 &packet_source, loss_rate, rtt_ms, reordering)); |
| 490 return impl.release(); | 491 return impl.release(); |
| 491 } | 492 } |
| 492 } // namespace rtpplayer | 493 } // namespace rtpplayer |
| 493 } // namespace webrtc | 494 } // namespace webrtc |
| OLD | NEW |