Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(743)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_payload_registry_unittest.cc

Issue 2524923002: Remove RTPPayloadStrategy and simplify RTPPayloadRegistry (Closed)
Patch Set: Rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #include <memory> 11 #include <memory>
12 12
13 #include "webrtc/common_types.h" 13 #include "webrtc/common_types.h"
14 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 14 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
15 #include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h" 15 #include "webrtc/modules/rtp_rtcp/include/rtp_payload_registry.h"
16 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" 16 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
17 #include "webrtc/modules/rtp_rtcp/source/mock/mock_rtp_payload_strategy.h"
18 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 17 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
19 #include "webrtc/test/gmock.h" 18 #include "webrtc/test/gmock.h"
20 #include "webrtc/test/gtest.h" 19 #include "webrtc/test/gtest.h"
21 20
22 namespace webrtc { 21 namespace webrtc {
23 22
24 using ::testing::Eq; 23 using ::testing::Eq;
25 using ::testing::Return; 24 using ::testing::Return;
26 using ::testing::StrEq; 25 using ::testing::StrEq;
27 using ::testing::_; 26 using ::testing::_;
28 27
29 static const char* kTypicalPayloadName = "name"; 28 static const char* kTypicalPayloadName = "name";
30 static const size_t kTypicalChannels = 1; 29 static const size_t kTypicalChannels = 1;
31 static const int kTypicalFrequency = 44000; 30 static const uint32_t kTypicalFrequency = 44000;
danilchap 2016/11/23 19:06:18 what is the reason for using fixed size integer ty
magjed_webrtc 2016/11/24 12:20:39 I had to change them in order to avoid compiler wa
32 static const int kTypicalRate = 32 * 1024; 31 static const uint32_t kTypicalRate = 32 * 1024;
33 static const CodecInst kTypicalAudioCodec = {-1 /* pltype */, "name", 32 static const CodecInst kTypicalAudioCodec = {-1 /* pltype */, "name",
34 kTypicalFrequency, 0 /* pacsize */, 33 kTypicalFrequency, 0 /* pacsize */,
35 kTypicalChannels, kTypicalRate}; 34 kTypicalChannels, kTypicalRate};
36 35
37 class RtpPayloadRegistryTest : public ::testing::Test { 36 class RtpPayloadRegistryTest : public ::testing::Test {
danilchap 2016/11/23 19:06:18 This fixture become so simple that in one CL it is
magjed_webrtc 2016/11/24 12:20:39 Yeah, you're right. I went ahead and removed the f
38 public: 37 public:
39 void SetUp() { 38 void SetUp() {
40 // Note: the payload registry takes ownership of the strategy. 39 // Note: the payload registry takes ownership of the strategy.
41 mock_payload_strategy_ = new testing::NiceMock<MockRTPPayloadStrategy>(); 40 rtp_payload_registry_.reset(new RTPPayloadRegistry());
42 rtp_payload_registry_.reset(new RTPPayloadRegistry(mock_payload_strategy_));
43 } 41 }
44 42
45 protected: 43 protected:
46 RtpUtility::Payload* ExpectReturnOfTypicalAudioPayload(uint8_t payload_type,
47 uint32_t rate) {
48 bool audio = true;
49 RtpUtility::Payload returned_payload = {
50 "name",
51 audio,
52 {// Initialize the audio struct in this case.
53 {kTypicalFrequency, kTypicalChannels, rate}}};
54
55 // Note: we return a new payload since the payload registry takes ownership
56 // of the created object.
57 RtpUtility::Payload* returned_payload_on_heap =
58 new RtpUtility::Payload(returned_payload);
59 EXPECT_CALL(*mock_payload_strategy_,
60 CreatePayloadType(StrEq(kTypicalPayloadName), payload_type,
61 kTypicalFrequency, kTypicalChannels, rate))
62 .WillOnce(Return(returned_payload_on_heap));
63 return returned_payload_on_heap;
64 }
65
66 std::unique_ptr<RTPPayloadRegistry> rtp_payload_registry_; 44 std::unique_ptr<RTPPayloadRegistry> rtp_payload_registry_;
67 testing::NiceMock<MockRTPPayloadStrategy>* mock_payload_strategy_;
68 }; 45 };
69 46
70 TEST_F(RtpPayloadRegistryTest, 47 TEST_F(RtpPayloadRegistryTest,
71 RegistersAndRemembersVideoPayloadsUntilDeregistered) { 48 RegistersAndRemembersVideoPayloadsUntilDeregistered) {
72 const uint8_t payload_type = 97; 49 const uint8_t payload_type = 97;
73 RtpUtility::Payload returned_video_payload = {
74 "VP8", false /* audio */, {{kRtpVideoVp8}}};
75 // Note: The payload registry takes ownership of this object in
76 // RegisterReceivePayload.
77 RtpUtility::Payload* returned_video_payload_on_heap =
78 new RtpUtility::Payload(returned_video_payload);
79 EXPECT_CALL(
80 *mock_payload_strategy_,
81 CreatePayloadType(StrEq("VP8"), payload_type, kVideoPayloadTypeFrequency,
82 0 /* channels */, 0 /* rate */))
83 .WillOnce(Return(returned_video_payload_on_heap));
84
85 VideoCodec video_codec; 50 VideoCodec video_codec;
86 video_codec.codecType = kVideoCodecVP8; 51 video_codec.codecType = kVideoCodecVP8;
87 strcpy(video_codec.plName, "VP8"); 52 strcpy(video_codec.plName, "VP8");
88 video_codec.plType = payload_type; 53 video_codec.plType = payload_type;
89 54
90 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(video_codec)); 55 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(video_codec));
91 56
92 const RtpUtility::Payload* retrieved_payload = 57 const RtpUtility::Payload* retrieved_payload =
93 rtp_payload_registry_->PayloadTypeToPayload(payload_type); 58 rtp_payload_registry_->PayloadTypeToPayload(payload_type);
94 EXPECT_TRUE(retrieved_payload); 59 EXPECT_TRUE(retrieved_payload);
95 60
96 // We should get back the exact pointer to the payload returned by the 61 // We should get back the corresponding payload that we registered.
97 // payload strategy. 62 EXPECT_STREQ("VP8", retrieved_payload->name);
98 EXPECT_EQ(returned_video_payload_on_heap, retrieved_payload); 63 EXPECT_EQ(false, retrieved_payload->audio);
danilchap 2016/11/23 19:06:18 EXPECT_FALSE(retrieved_payload->audio);
magjed_webrtc 2016/11/24 12:20:39 Done.
64 EXPECT_EQ(kRtpVideoVp8, retrieved_payload->typeSpecific.Video.videoCodecType);
99 65
100 // Now forget about it and verify it's gone. 66 // Now forget about it and verify it's gone.
101 EXPECT_EQ(0, rtp_payload_registry_->DeRegisterReceivePayload(payload_type)); 67 EXPECT_EQ(0, rtp_payload_registry_->DeRegisterReceivePayload(payload_type));
102 EXPECT_FALSE(rtp_payload_registry_->PayloadTypeToPayload(payload_type)); 68 EXPECT_FALSE(rtp_payload_registry_->PayloadTypeToPayload(payload_type));
103 } 69 }
104 70
105 TEST_F(RtpPayloadRegistryTest, 71 TEST_F(RtpPayloadRegistryTest,
106 RegistersAndRemembersAudioPayloadsUntilDeregistered) { 72 RegistersAndRemembersAudioPayloadsUntilDeregistered) {
107 uint8_t payload_type = 97; 73 uint8_t payload_type = 97;
108 RtpUtility::Payload* returned_payload_on_heap =
109 ExpectReturnOfTypicalAudioPayload(payload_type, kTypicalRate);
110
111 bool new_payload_created = false; 74 bool new_payload_created = false;
112 CodecInst audio_codec = kTypicalAudioCodec; 75 CodecInst audio_codec = kTypicalAudioCodec;
113 audio_codec.pltype = payload_type; 76 audio_codec.pltype = payload_type;
114 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload( 77 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(
115 audio_codec, &new_payload_created)); 78 audio_codec, &new_payload_created));
116 79
117 EXPECT_TRUE(new_payload_created) << "A new payload WAS created."; 80 EXPECT_TRUE(new_payload_created) << "A new payload WAS created.";
118 81
119 const RtpUtility::Payload* retrieved_payload = 82 const RtpUtility::Payload* retrieved_payload =
120 rtp_payload_registry_->PayloadTypeToPayload(payload_type); 83 rtp_payload_registry_->PayloadTypeToPayload(payload_type);
121 EXPECT_TRUE(retrieved_payload); 84 EXPECT_TRUE(retrieved_payload);
122 85
123 // We should get back the exact pointer to the payload returned by the 86 // We should get back the corresponding payload that we registered.
124 // payload strategy. 87 EXPECT_STREQ(kTypicalPayloadName, retrieved_payload->name);
125 EXPECT_EQ(returned_payload_on_heap, retrieved_payload); 88 EXPECT_EQ(true, retrieved_payload->audio);
danilchap 2016/11/23 19:06:18 EXPECT_TRUE(retrieved_payload->audio)
magjed_webrtc 2016/11/24 12:20:39 Done.
89 EXPECT_EQ(kTypicalFrequency, retrieved_payload->typeSpecific.Audio.frequency);
90 EXPECT_EQ(kTypicalChannels, retrieved_payload->typeSpecific.Audio.channels);
91 EXPECT_EQ(kTypicalRate, retrieved_payload->typeSpecific.Audio.rate);
126 92
127 // Now forget about it and verify it's gone. 93 // Now forget about it and verify it's gone.
128 EXPECT_EQ(0, rtp_payload_registry_->DeRegisterReceivePayload(payload_type)); 94 EXPECT_EQ(0, rtp_payload_registry_->DeRegisterReceivePayload(payload_type));
129 EXPECT_FALSE(rtp_payload_registry_->PayloadTypeToPayload(payload_type)); 95 EXPECT_FALSE(rtp_payload_registry_->PayloadTypeToPayload(payload_type));
130 } 96 }
131 97
132 TEST_F(RtpPayloadRegistryTest, AudioRedWorkProperly) { 98 TEST_F(RtpPayloadRegistryTest, AudioRedWorkProperly) {
133 const uint8_t kRedPayloadType = 127; 99 const uint8_t kRedPayloadType = 127;
134 const int kRedSampleRate = 8000; 100 const int kRedSampleRate = 8000;
135 const size_t kRedChannels = 1; 101 const size_t kRedChannels = 1;
136 const int kRedBitRate = 0; 102 const int kRedBitRate = 0;
137 103
138 // This creates an audio RTP payload strategy. 104 // This creates an audio RTP payload strategy.
139 rtp_payload_registry_.reset( 105 rtp_payload_registry_.reset(new RTPPayloadRegistry());
danilchap 2016/11/23 19:06:18 without strategies look like the line can be remov
magjed_webrtc 2016/11/24 12:20:39 Done.
140 new RTPPayloadRegistry(RTPPayloadStrategy::CreateStrategy(true)));
141 106
142 bool new_payload_created = false; 107 bool new_payload_created = false;
143 CodecInst red_audio_codec; 108 CodecInst red_audio_codec;
144 strcpy(red_audio_codec.plname, "red"); 109 strcpy(red_audio_codec.plname, "red");
145 red_audio_codec.pltype = kRedPayloadType; 110 red_audio_codec.pltype = kRedPayloadType;
146 red_audio_codec.plfreq = kRedSampleRate; 111 red_audio_codec.plfreq = kRedSampleRate;
147 red_audio_codec.channels = kRedChannels; 112 red_audio_codec.channels = kRedChannels;
148 red_audio_codec.rate = kRedBitRate; 113 red_audio_codec.rate = kRedBitRate;
149 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload( 114 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(
150 red_audio_codec, &new_payload_created)); 115 red_audio_codec, &new_payload_created));
(...skipping 10 matching lines...) Expand all
161 // Sample rate is correctly registered. 126 // Sample rate is correctly registered.
162 EXPECT_EQ(kRedSampleRate, 127 EXPECT_EQ(kRedSampleRate,
163 rtp_payload_registry_->GetPayloadTypeFrequency(kRedPayloadType)); 128 rtp_payload_registry_->GetPayloadTypeFrequency(kRedPayloadType));
164 } 129 }
165 130
166 TEST_F(RtpPayloadRegistryTest, 131 TEST_F(RtpPayloadRegistryTest,
167 DoesNotAcceptSamePayloadTypeTwiceExceptIfPayloadIsCompatible) { 132 DoesNotAcceptSamePayloadTypeTwiceExceptIfPayloadIsCompatible) {
168 uint8_t payload_type = 97; 133 uint8_t payload_type = 97;
169 134
170 bool ignored = false; 135 bool ignored = false;
171 RtpUtility::Payload* first_payload_on_heap =
172 ExpectReturnOfTypicalAudioPayload(payload_type, kTypicalRate);
173 CodecInst audio_codec = kTypicalAudioCodec; 136 CodecInst audio_codec = kTypicalAudioCodec;
174 audio_codec.pltype = payload_type; 137 audio_codec.pltype = payload_type;
175 EXPECT_EQ( 138 EXPECT_EQ(
176 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)); 139 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored));
177 140
178 EXPECT_EQ( 141 CodecInst audio_codec_2 = kTypicalAudioCodec;
179 -1, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)) 142 audio_codec_2.pltype = payload_type;
180 << "Adding same codec twice = bad."; 143 // Make |audio_codec_2| incompatible with |audio_codec| by changing
144 // the frequency.
145 audio_codec_2.plfreq = kTypicalFrequency + 1;
146 EXPECT_EQ(-1, rtp_payload_registry_->RegisterReceivePayload(audio_codec_2,
147 &ignored))
148 << "Adding incompatible codec with same payload type = bad.";
181 149
182 RtpUtility::Payload* second_payload_on_heap = 150 // Change payload type.
183 ExpectReturnOfTypicalAudioPayload(payload_type - 1, kTypicalRate);
184 CodecInst audio_codec_2 = kTypicalAudioCodec;
185 audio_codec_2.pltype = payload_type - 1; 151 audio_codec_2.pltype = payload_type - 1;
186 EXPECT_EQ( 152 EXPECT_EQ(
187 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec_2, &ignored)) 153 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec_2, &ignored))
188 << "With a different payload type is fine though."; 154 << "With a different payload type is fine though.";
189 155
190 // Ensure both payloads are preserved. 156 // Ensure both payloads are preserved.
191 const RtpUtility::Payload* retrieved_payload = 157 const RtpUtility::Payload* retrieved_payload =
192 rtp_payload_registry_->PayloadTypeToPayload(payload_type); 158 rtp_payload_registry_->PayloadTypeToPayload(payload_type);
193 EXPECT_TRUE(retrieved_payload); 159 EXPECT_TRUE(retrieved_payload);
194 EXPECT_EQ(first_payload_on_heap, retrieved_payload); 160 EXPECT_STREQ(kTypicalPayloadName, retrieved_payload->name);
161 EXPECT_EQ(true, retrieved_payload->audio);
162 EXPECT_EQ(kTypicalFrequency, retrieved_payload->typeSpecific.Audio.frequency);
163 EXPECT_EQ(kTypicalChannels, retrieved_payload->typeSpecific.Audio.channels);
164 EXPECT_EQ(kTypicalRate, retrieved_payload->typeSpecific.Audio.rate);
165
195 retrieved_payload = 166 retrieved_payload =
196 rtp_payload_registry_->PayloadTypeToPayload(payload_type - 1); 167 rtp_payload_registry_->PayloadTypeToPayload(payload_type - 1);
197 EXPECT_TRUE(retrieved_payload); 168 EXPECT_TRUE(retrieved_payload);
198 EXPECT_EQ(second_payload_on_heap, retrieved_payload); 169 EXPECT_STREQ(kTypicalPayloadName, retrieved_payload->name);
170 EXPECT_EQ(true, retrieved_payload->audio);
171 EXPECT_EQ(kTypicalFrequency + 1,
172 retrieved_payload->typeSpecific.Audio.frequency);
173 EXPECT_EQ(kTypicalChannels, retrieved_payload->typeSpecific.Audio.channels);
174 EXPECT_EQ(kTypicalRate, retrieved_payload->typeSpecific.Audio.rate);
199 175
200 // Ok, update the rate for one of the codecs. If either the incoming rate or 176 // Ok, update the rate for one of the codecs. If either the incoming rate or
201 // the stored rate is zero it's not really an error to register the same 177 // the stored rate is zero it's not really an error to register the same
202 // codec twice, and in that case roughly the following happens. 178 // codec twice, and in that case roughly the following happens.
203 ON_CALL(*mock_payload_strategy_, PayloadIsCompatible(_, _, _, _))
204 .WillByDefault(Return(true));
205 EXPECT_CALL(*mock_payload_strategy_,
206 UpdatePayloadRate(first_payload_on_heap, kTypicalRate));
207 EXPECT_EQ( 179 EXPECT_EQ(
208 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)); 180 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored));
209 } 181 }
210 182
211 TEST_F(RtpPayloadRegistryTest, 183 TEST_F(RtpPayloadRegistryTest,
212 RemovesCompatibleCodecsOnRegistryIfCodecsMustBeUnique) { 184 RemovesCompatibleCodecsOnRegistryIfCodecsMustBeUnique) {
213 ON_CALL(*mock_payload_strategy_, PayloadIsCompatible(_, _, _, _))
214 .WillByDefault(Return(true));
215 ON_CALL(*mock_payload_strategy_, CodecsMustBeUnique())
216 .WillByDefault(Return(true));
217
218 uint8_t payload_type = 97; 185 uint8_t payload_type = 97;
219 186
220 bool ignored = false; 187 bool ignored = false;
221 ExpectReturnOfTypicalAudioPayload(payload_type, kTypicalRate);
222 CodecInst audio_codec = kTypicalAudioCodec; 188 CodecInst audio_codec = kTypicalAudioCodec;
223 audio_codec.pltype = payload_type; 189 audio_codec.pltype = payload_type;
224 EXPECT_EQ( 190 EXPECT_EQ(
225 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)); 191 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored));
226 ExpectReturnOfTypicalAudioPayload(payload_type - 1, kTypicalRate);
227 CodecInst audio_codec_2 = kTypicalAudioCodec; 192 CodecInst audio_codec_2 = kTypicalAudioCodec;
228 audio_codec_2.pltype = payload_type - 1; 193 audio_codec_2.pltype = payload_type - 1;
229 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(audio_codec_2, 194 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(audio_codec_2,
230 &ignored)); 195 &ignored));
231 196
232 EXPECT_FALSE(rtp_payload_registry_->PayloadTypeToPayload(payload_type)) 197 EXPECT_FALSE(rtp_payload_registry_->PayloadTypeToPayload(payload_type))
233 << "The first payload should be " 198 << "The first payload should be "
234 "deregistered because the only thing that differs is payload type."; 199 "deregistered because the only thing that differs is payload type.";
235 EXPECT_TRUE(rtp_payload_registry_->PayloadTypeToPayload(payload_type - 1)) 200 EXPECT_TRUE(rtp_payload_registry_->PayloadTypeToPayload(payload_type - 1))
236 << "The second payload should still be registered though."; 201 << "The second payload should still be registered though.";
237 202
238 // Now ensure non-compatible codecs aren't removed. 203 // Now ensure non-compatible codecs aren't removed. Make |audio_codec_3|
239 ON_CALL(*mock_payload_strategy_, PayloadIsCompatible(_, _, _, _)) 204 // incompatible by changing the frequency.
240 .WillByDefault(Return(false));
241 ExpectReturnOfTypicalAudioPayload(payload_type + 1, kTypicalRate);
242 CodecInst audio_codec_3 = kTypicalAudioCodec; 205 CodecInst audio_codec_3 = kTypicalAudioCodec;
243 audio_codec_3.pltype = payload_type + 1; 206 audio_codec_3.pltype = payload_type + 1;
207 audio_codec_3.plfreq = kTypicalFrequency + 1;
244 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(audio_codec_3, 208 EXPECT_EQ(0, rtp_payload_registry_->RegisterReceivePayload(audio_codec_3,
245 &ignored)); 209 &ignored));
246 210
247 EXPECT_TRUE(rtp_payload_registry_->PayloadTypeToPayload(payload_type - 1)) 211 EXPECT_TRUE(rtp_payload_registry_->PayloadTypeToPayload(payload_type - 1))
248 << "Not compatible; both payloads should be kept."; 212 << "Not compatible; both payloads should be kept.";
249 EXPECT_TRUE(rtp_payload_registry_->PayloadTypeToPayload(payload_type + 1)) 213 EXPECT_TRUE(rtp_payload_registry_->PayloadTypeToPayload(payload_type + 1))
250 << "Not compatible; both payloads should be kept."; 214 << "Not compatible; both payloads should be kept.";
251 } 215 }
252 216
253 TEST_F(RtpPayloadRegistryTest, 217 TEST_F(RtpPayloadRegistryTest,
254 LastReceivedCodecTypesAreResetWhenRegisteringNewPayloadTypes) { 218 LastReceivedCodecTypesAreResetWhenRegisteringNewPayloadTypes) {
255 rtp_payload_registry_->set_last_received_payload_type(17); 219 rtp_payload_registry_->set_last_received_payload_type(17);
256 EXPECT_EQ(17, rtp_payload_registry_->last_received_payload_type()); 220 EXPECT_EQ(17, rtp_payload_registry_->last_received_payload_type());
257 221
258 bool media_type_unchanged = rtp_payload_registry_->ReportMediaPayloadType(18); 222 bool media_type_unchanged = rtp_payload_registry_->ReportMediaPayloadType(18);
259 EXPECT_FALSE(media_type_unchanged); 223 EXPECT_FALSE(media_type_unchanged);
260 media_type_unchanged = rtp_payload_registry_->ReportMediaPayloadType(18); 224 media_type_unchanged = rtp_payload_registry_->ReportMediaPayloadType(18);
261 EXPECT_TRUE(media_type_unchanged); 225 EXPECT_TRUE(media_type_unchanged);
262 226
263 bool ignored; 227 bool ignored;
264 ExpectReturnOfTypicalAudioPayload(34, kTypicalRate);
265 CodecInst audio_codec = kTypicalAudioCodec; 228 CodecInst audio_codec = kTypicalAudioCodec;
266 audio_codec.pltype = 34; 229 audio_codec.pltype = 34;
267 EXPECT_EQ( 230 EXPECT_EQ(
268 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)); 231 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored));
269 232
270 EXPECT_EQ(-1, rtp_payload_registry_->last_received_payload_type()); 233 EXPECT_EQ(-1, rtp_payload_registry_->last_received_payload_type());
271 media_type_unchanged = rtp_payload_registry_->ReportMediaPayloadType(18); 234 media_type_unchanged = rtp_payload_registry_->ReportMediaPayloadType(18);
272 EXPECT_FALSE(media_type_unchanged); 235 EXPECT_FALSE(media_type_unchanged);
273 } 236 }
274 237
275 class ParameterizedRtpPayloadRegistryTest 238 class ParameterizedRtpPayloadRegistryTest
276 : public RtpPayloadRegistryTest, 239 : public RtpPayloadRegistryTest,
277 public ::testing::WithParamInterface<int> {}; 240 public ::testing::WithParamInterface<int> {};
278 241
279 TEST_P(ParameterizedRtpPayloadRegistryTest, 242 TEST_P(ParameterizedRtpPayloadRegistryTest,
280 FailsToRegisterKnownPayloadsWeAreNotInterestedIn) { 243 FailsToRegisterKnownPayloadsWeAreNotInterestedIn) {
281 int payload_type = GetParam(); 244 int payload_type = GetParam();
282 245
283 bool ignored; 246 bool ignored;
284 CodecInst audio_codec; 247 CodecInst audio_codec;
285 strcpy(audio_codec.plname, "whatever"); 248 strcpy(audio_codec.plname, "whatever");
286 audio_codec.pltype = static_cast<uint8_t>(payload_type); 249 audio_codec.pltype = static_cast<uint8_t>(payload_type);
287 audio_codec.plfreq = 19; 250 audio_codec.plfreq = 1900;
288 audio_codec.channels = 1; 251 audio_codec.channels = 1;
289 audio_codec.rate = 17; 252 audio_codec.rate = 17;
290 EXPECT_EQ( 253 EXPECT_EQ(
291 -1, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)); 254 -1, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored));
292 } 255 }
293 256
294 INSTANTIATE_TEST_CASE_P(TestKnownBadPayloadTypes, 257 INSTANTIATE_TEST_CASE_P(TestKnownBadPayloadTypes,
295 ParameterizedRtpPayloadRegistryTest, 258 ParameterizedRtpPayloadRegistryTest,
296 testing::Values(64, 72, 73, 74, 75, 76, 77, 78, 79)); 259 testing::Values(64, 72, 73, 74, 75, 76, 77, 78, 79));
297 260
298 class RtpPayloadRegistryGenericTest 261 class RtpPayloadRegistryGenericTest
299 : public RtpPayloadRegistryTest, 262 : public RtpPayloadRegistryTest,
300 public ::testing::WithParamInterface<int> {}; 263 public ::testing::WithParamInterface<int> {};
301 264
302 TEST_P(RtpPayloadRegistryGenericTest, RegisterGenericReceivePayloadType) { 265 TEST_P(RtpPayloadRegistryGenericTest, RegisterGenericReceivePayloadType) {
303 const uint8_t payload_type = static_cast<uint8_t>(GetParam()); 266 const uint8_t payload_type = static_cast<uint8_t>(GetParam());
304 bool ignored; 267 bool ignored;
305 CodecInst audio_codec; 268 CodecInst audio_codec;
306 // Dummy values, except for payload_type. 269 // Dummy values, except for payload_type.
307 strcpy(audio_codec.plname, "generic-codec"); 270 strcpy(audio_codec.plname, "generic-codec");
308 audio_codec.pltype = payload_type; 271 audio_codec.pltype = payload_type;
309 audio_codec.plfreq = 19; 272 audio_codec.plfreq = 1900;
310 audio_codec.channels = 1; 273 audio_codec.channels = 1;
311 audio_codec.rate = 17; 274 audio_codec.rate = 17;
312 EXPECT_EQ( 275 EXPECT_EQ(
313 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored)); 276 0, rtp_payload_registry_->RegisterReceivePayload(audio_codec, &ignored));
314 } 277 }
315 278
316 // Generates an RTX packet for the given length and original sequence number. 279 // Generates an RTX packet for the given length and original sequence number.
317 // The RTX sequence number and ssrc will use the default value of 9999. The 280 // The RTX sequence number and ssrc will use the default value of 9999. The
318 // caller takes ownership of the returned buffer. 281 // caller takes ownership of the returned buffer.
319 const uint8_t* GenerateRtxPacket(size_t header_length, 282 const uint8_t* GenerateRtxPacket(size_t header_length,
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 rtp_payload_registry_->SetRtxPayloadType(105, 95); 371 rtp_payload_registry_->SetRtxPayloadType(105, 95);
409 TestRtxPacket(rtp_payload_registry_.get(), 105, 95, true); 372 TestRtxPacket(rtp_payload_registry_.get(), 105, 95, true);
410 TestRtxPacket(rtp_payload_registry_.get(), 106, 0, false); 373 TestRtxPacket(rtp_payload_registry_.get(), 106, 0, false);
411 } 374 }
412 375
413 INSTANTIATE_TEST_CASE_P(TestDynamicRange, 376 INSTANTIATE_TEST_CASE_P(TestDynamicRange,
414 RtpPayloadRegistryGenericTest, 377 RtpPayloadRegistryGenericTest,
415 testing::Range(96, 127 + 1)); 378 testing::Range(96, 127 + 1));
416 379
417 } // namespace webrtc 380 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698