| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 | 579 |
| 580 TraceBasedDeliveryFilter::~TraceBasedDeliveryFilter() { | 580 TraceBasedDeliveryFilter::~TraceBasedDeliveryFilter() { |
| 581 } | 581 } |
| 582 | 582 |
| 583 bool TraceBasedDeliveryFilter::Init(const std::string& filename) { | 583 bool TraceBasedDeliveryFilter::Init(const std::string& filename) { |
| 584 FILE* trace_file = fopen(filename.c_str(), "r"); | 584 FILE* trace_file = fopen(filename.c_str(), "r"); |
| 585 if (!trace_file) { | 585 if (!trace_file) { |
| 586 return false; | 586 return false; |
| 587 } | 587 } |
| 588 int64_t first_timestamp = -1; | 588 int64_t first_timestamp = -1; |
| 589 while(!feof(trace_file)) { | 589 while (!feof(trace_file)) { |
| 590 const size_t kMaxLineLength = 100; | 590 const size_t kMaxLineLength = 100; |
| 591 char line[kMaxLineLength]; | 591 char line[kMaxLineLength]; |
| 592 if (fgets(line, kMaxLineLength, trace_file)) { | 592 if (fgets(line, kMaxLineLength, trace_file)) { |
| 593 std::string line_string(line); | 593 std::string line_string(line); |
| 594 std::istringstream buffer(line_string); | 594 std::istringstream buffer(line_string); |
| 595 int64_t timestamp; | 595 int64_t timestamp; |
| 596 buffer >> timestamp; | 596 buffer >> timestamp; |
| 597 timestamp /= 1000; // Convert to microseconds. | 597 timestamp /= 1000; // Convert to microseconds. |
| 598 if (first_timestamp == -1) | 598 if (first_timestamp == -1) |
| 599 first_timestamp = timestamp; | 599 first_timestamp = timestamp; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 VideoSource::VideoSource(int flow_id, | 673 VideoSource::VideoSource(int flow_id, |
| 674 float fps, | 674 float fps, |
| 675 uint32_t kbps, | 675 uint32_t kbps, |
| 676 uint32_t ssrc, | 676 uint32_t ssrc, |
| 677 int64_t first_frame_offset_ms) | 677 int64_t first_frame_offset_ms) |
| 678 : kMaxPayloadSizeBytes(1200), | 678 : kMaxPayloadSizeBytes(1200), |
| 679 kTimestampBase(0xff80ff00ul), | 679 kTimestampBase(0xff80ff00ul), |
| 680 frame_period_ms_(1000.0 / fps), | 680 frame_period_ms_(1000.0 / fps), |
| 681 bits_per_second_(1000 * kbps), | 681 bits_per_second_(1000 * kbps), |
| 682 frame_size_bytes_(bits_per_second_ / 8 / fps), | 682 frame_size_bytes_(bits_per_second_ / 8 / fps), |
| 683 random_(0x12345678), |
| 683 flow_id_(flow_id), | 684 flow_id_(flow_id), |
| 684 next_frame_ms_(first_frame_offset_ms), | 685 next_frame_ms_(first_frame_offset_ms), |
| 685 next_frame_rand_ms_(0), | 686 next_frame_rand_ms_(0), |
| 686 now_ms_(0), | 687 now_ms_(0), |
| 687 prototype_header_() { | 688 prototype_header_() { |
| 688 memset(&prototype_header_, 0, sizeof(prototype_header_)); | 689 memset(&prototype_header_, 0, sizeof(prototype_header_)); |
| 689 prototype_header_.ssrc = ssrc; | 690 prototype_header_.ssrc = ssrc; |
| 690 prototype_header_.sequenceNumber = 0xf000u; | 691 prototype_header_.sequenceNumber = 0xf000u; |
| 691 } | 692 } |
| 692 | 693 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 706 void VideoSource::RunFor(int64_t time_ms, Packets* in_out) { | 707 void VideoSource::RunFor(int64_t time_ms, Packets* in_out) { |
| 707 assert(in_out); | 708 assert(in_out); |
| 708 | 709 |
| 709 now_ms_ += time_ms; | 710 now_ms_ += time_ms; |
| 710 Packets new_packets; | 711 Packets new_packets; |
| 711 | 712 |
| 712 while (now_ms_ >= next_frame_ms_) { | 713 while (now_ms_ >= next_frame_ms_) { |
| 713 const int64_t kRandAmplitude = 2; | 714 const int64_t kRandAmplitude = 2; |
| 714 // A variance picked uniformly from {-1, 0, 1} ms is added to the frame | 715 // A variance picked uniformly from {-1, 0, 1} ms is added to the frame |
| 715 // timestamp. | 716 // timestamp. |
| 716 next_frame_rand_ms_ = | 717 next_frame_rand_ms_ = kRandAmplitude * (random_.Rand<float>() - 0.5); |
| 717 kRandAmplitude * static_cast<float>(rand()) / RAND_MAX - | |
| 718 kRandAmplitude / 2; | |
| 719 | 718 |
| 720 // Ensure frame will not have a negative timestamp. | 719 // Ensure frame will not have a negative timestamp. |
| 721 int64_t next_frame_ms = | 720 int64_t next_frame_ms = |
| 722 std::max<int64_t>(next_frame_ms_ + next_frame_rand_ms_, 0); | 721 std::max<int64_t>(next_frame_ms_ + next_frame_rand_ms_, 0); |
| 723 | 722 |
| 724 prototype_header_.timestamp = | 723 prototype_header_.timestamp = |
| 725 kTimestampBase + static_cast<uint32_t>(next_frame_ms * 90.0); | 724 kTimestampBase + static_cast<uint32_t>(next_frame_ms * 90.0); |
| 726 prototype_header_.extension.transmissionTimeOffset = 0; | 725 prototype_header_.extension.transmissionTimeOffset = 0; |
| 727 | 726 |
| 728 // Generate new packets for this frame, all with the same timestamp, | 727 // Generate new packets for this frame, all with the same timestamp, |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 uint32_t PeriodicKeyFrameSource::NextPacketSize(uint32_t frame_size, | 807 uint32_t PeriodicKeyFrameSource::NextPacketSize(uint32_t frame_size, |
| 809 uint32_t remaining_payload) { | 808 uint32_t remaining_payload) { |
| 810 uint32_t fragments = | 809 uint32_t fragments = |
| 811 (frame_size + (kMaxPayloadSizeBytes - 1)) / kMaxPayloadSizeBytes; | 810 (frame_size + (kMaxPayloadSizeBytes - 1)) / kMaxPayloadSizeBytes; |
| 812 uint32_t avg_size = (frame_size + fragments - 1) / fragments; | 811 uint32_t avg_size = (frame_size + fragments - 1) / fragments; |
| 813 return std::min(avg_size, remaining_payload); | 812 return std::min(avg_size, remaining_payload); |
| 814 } | 813 } |
| 815 } // namespace bwe | 814 } // namespace bwe |
| 816 } // namespace testing | 815 } // namespace testing |
| 817 } // namespace webrtc | 816 } // namespace webrtc |
| OLD | NEW |