| 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 |
| 11 #include "webrtc/modules/video_coding/codecs/test/packet_manipulator.h" | 11 #include "webrtc/modules/video_coding/codecs/test/packet_manipulator.h" |
| 12 | 12 |
| 13 #include <queue> | 13 #include <queue> |
| 14 | 14 |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "webrtc/modules/video_coding/include/video_codec_interface.h" | 16 #include "webrtc/modules/video_coding/include/video_codec_interface.h" |
| 17 #include "webrtc/modules/video_coding/codecs/test/predictive_packet_manipulator.
h" | 17 #include "webrtc/modules/video_coding/codecs/test/predictive_packet_manipulator.
h" |
| 18 #include "webrtc/test/testsupport/unittest_utils.h" | 18 #include "webrtc/test/testsupport/unittest_utils.h" |
| 19 #include "webrtc/typedefs.h" | 19 #include "webrtc/typedefs.h" |
| 20 | 20 |
| 21 namespace webrtc { | 21 namespace webrtc { |
| 22 namespace test { | 22 namespace test { |
| 23 | 23 |
| 24 const double kNeverDropProbability = 0.0; | 24 const double kNeverDropProbability = 0.0; |
| 25 const double kAlwaysDropProbability = 1.0; | 25 const double kAlwaysDropProbability = 1.0; |
| 26 const int kBurstLength = 1; | 26 const int kBurstLength = 1; |
| 27 | 27 |
| 28 class PacketManipulatorTest: public PacketRelatedTest { | 28 class PacketManipulatorTest : public PacketRelatedTest { |
| 29 protected: | 29 protected: |
| 30 PacketReader packet_reader_; | 30 PacketReader packet_reader_; |
| 31 EncodedImage image_; | 31 EncodedImage image_; |
| 32 NetworkingConfig drop_config_; | 32 NetworkingConfig drop_config_; |
| 33 NetworkingConfig no_drop_config_; | 33 NetworkingConfig no_drop_config_; |
| 34 | 34 |
| 35 PacketManipulatorTest() { | 35 PacketManipulatorTest() { |
| 36 image_._buffer = packet_data_; | 36 image_._buffer = packet_data_; |
| 37 image_._length = kPacketDataLength; | 37 image_._length = kPacketDataLength; |
| 38 image_._size = kPacketDataLength; | 38 image_._size = kPacketDataLength; |
| 39 | 39 |
| 40 drop_config_.packet_size_in_bytes = kPacketSizeInBytes; | 40 drop_config_.packet_size_in_bytes = kPacketSizeInBytes; |
| 41 drop_config_.packet_loss_probability = kAlwaysDropProbability; | 41 drop_config_.packet_loss_probability = kAlwaysDropProbability; |
| 42 drop_config_.packet_loss_burst_length = kBurstLength; | 42 drop_config_.packet_loss_burst_length = kBurstLength; |
| 43 drop_config_.packet_loss_mode = kUniform; | 43 drop_config_.packet_loss_mode = kUniform; |
| 44 | 44 |
| 45 no_drop_config_.packet_size_in_bytes = kPacketSizeInBytes; | 45 no_drop_config_.packet_size_in_bytes = kPacketSizeInBytes; |
| 46 no_drop_config_.packet_loss_probability = kNeverDropProbability; | 46 no_drop_config_.packet_loss_probability = kNeverDropProbability; |
| 47 no_drop_config_.packet_loss_burst_length = kBurstLength; | 47 no_drop_config_.packet_loss_burst_length = kBurstLength; |
| 48 no_drop_config_.packet_loss_mode = kUniform; | 48 no_drop_config_.packet_loss_mode = kUniform; |
| 49 } | 49 } |
| 50 | 50 |
| 51 virtual ~PacketManipulatorTest() {} | 51 virtual ~PacketManipulatorTest() {} |
| 52 | 52 |
| 53 void SetUp() { | 53 void SetUp() { PacketRelatedTest::SetUp(); } |
| 54 PacketRelatedTest::SetUp(); | |
| 55 } | |
| 56 | 54 |
| 57 void TearDown() { | 55 void TearDown() { PacketRelatedTest::TearDown(); } |
| 58 PacketRelatedTest::TearDown(); | |
| 59 } | |
| 60 | 56 |
| 61 void VerifyPacketLoss(int expected_nbr_packets_dropped, | 57 void VerifyPacketLoss(int expected_nbr_packets_dropped, |
| 62 int actual_nbr_packets_dropped, | 58 int actual_nbr_packets_dropped, |
| 63 size_t expected_packet_data_length, | 59 size_t expected_packet_data_length, |
| 64 uint8_t* expected_packet_data, | 60 uint8_t* expected_packet_data, |
| 65 EncodedImage& actual_image) { | 61 const EncodedImage& actual_image) { |
| 66 EXPECT_EQ(expected_nbr_packets_dropped, actual_nbr_packets_dropped); | 62 EXPECT_EQ(expected_nbr_packets_dropped, actual_nbr_packets_dropped); |
| 67 EXPECT_EQ(expected_packet_data_length, image_._length); | 63 EXPECT_EQ(expected_packet_data_length, image_._length); |
| 68 EXPECT_EQ(0, memcmp(expected_packet_data, actual_image._buffer, | 64 EXPECT_EQ(0, memcmp(expected_packet_data, actual_image._buffer, |
| 69 expected_packet_data_length)); | 65 expected_packet_data_length)); |
| 70 } | 66 } |
| 71 }; | 67 }; |
| 72 | 68 |
| 73 TEST_F(PacketManipulatorTest, Constructor) { | 69 TEST_F(PacketManipulatorTest, Constructor) { |
| 74 PacketManipulatorImpl manipulator(&packet_reader_, no_drop_config_, false); | 70 PacketManipulatorImpl manipulator(&packet_reader_, no_drop_config_, false); |
| 75 } | 71 } |
| 76 | 72 |
| 77 TEST_F(PacketManipulatorTest, DropNone) { | 73 TEST_F(PacketManipulatorTest, DropNone) { |
| 78 PacketManipulatorImpl manipulator(&packet_reader_, no_drop_config_, false); | 74 PacketManipulatorImpl manipulator(&packet_reader_, no_drop_config_, false); |
| 79 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); | 75 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); |
| 80 VerifyPacketLoss(0, nbr_packets_dropped, kPacketDataLength, | 76 VerifyPacketLoss(0, nbr_packets_dropped, kPacketDataLength, packet_data_, |
| 81 packet_data_, image_); | 77 image_); |
| 82 } | 78 } |
| 83 | 79 |
| 84 TEST_F(PacketManipulatorTest, UniformDropNoneSmallFrame) { | 80 TEST_F(PacketManipulatorTest, UniformDropNoneSmallFrame) { |
| 85 size_t data_length = 400; // smaller than the packet size | 81 size_t data_length = 400; // smaller than the packet size |
| 86 image_._length = data_length; | 82 image_._length = data_length; |
| 87 PacketManipulatorImpl manipulator(&packet_reader_, no_drop_config_, false); | 83 PacketManipulatorImpl manipulator(&packet_reader_, no_drop_config_, false); |
| 88 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); | 84 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); |
| 89 | 85 |
| 90 VerifyPacketLoss(0, nbr_packets_dropped, data_length, | 86 VerifyPacketLoss(0, nbr_packets_dropped, data_length, packet_data_, image_); |
| 91 packet_data_, image_); | |
| 92 } | 87 } |
| 93 | 88 |
| 94 TEST_F(PacketManipulatorTest, UniformDropAll) { | 89 TEST_F(PacketManipulatorTest, UniformDropAll) { |
| 95 PacketManipulatorImpl manipulator(&packet_reader_, drop_config_, false); | 90 PacketManipulatorImpl manipulator(&packet_reader_, drop_config_, false); |
| 96 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); | 91 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); |
| 97 VerifyPacketLoss(kPacketDataNumberOfPackets, nbr_packets_dropped, | 92 VerifyPacketLoss(kPacketDataNumberOfPackets, nbr_packets_dropped, 0, |
| 98 0, packet_data_, image_); | 93 packet_data_, image_); |
| 99 } | 94 } |
| 100 | 95 |
| 101 // Use our customized test class to make the second packet being lost | 96 // Use our customized test class to make the second packet being lost |
| 102 TEST_F(PacketManipulatorTest, UniformDropSinglePacket) { | 97 TEST_F(PacketManipulatorTest, UniformDropSinglePacket) { |
| 103 drop_config_.packet_loss_probability = 0.5; | 98 drop_config_.packet_loss_probability = 0.5; |
| 104 PredictivePacketManipulator manipulator(&packet_reader_, drop_config_); | 99 PredictivePacketManipulator manipulator(&packet_reader_, drop_config_); |
| 105 manipulator.AddRandomResult(1.0); | 100 manipulator.AddRandomResult(1.0); |
| 106 manipulator.AddRandomResult(0.3); // less than 0.5 will cause packet loss | 101 manipulator.AddRandomResult(0.3); // less than 0.5 will cause packet loss |
| 107 manipulator.AddRandomResult(1.0); | 102 manipulator.AddRandomResult(1.0); |
| 108 | 103 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 | 139 |
| 145 // Execute the test target method: | 140 // Execute the test target method: |
| 146 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); | 141 int nbr_packets_dropped = manipulator.ManipulatePackets(&image_); |
| 147 | 142 |
| 148 // Should discard every packet after the first one. | 143 // Should discard every packet after the first one. |
| 149 VerifyPacketLoss(9, nbr_packets_dropped, kPacketSizeInBytes, data, image_); | 144 VerifyPacketLoss(9, nbr_packets_dropped, kPacketSizeInBytes, data, image_); |
| 150 } | 145 } |
| 151 | 146 |
| 152 } // namespace test | 147 } // namespace test |
| 153 } // namespace webrtc | 148 } // namespace webrtc |
| OLD | NEW |