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 |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |