OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2017 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2017 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/test/gtest.h" | 11 #include "webrtc/test/gtest.h" |
12 #include "webrtc/test/gmock.h" | 12 #include "webrtc/test/gmock.h" |
13 | 13 |
14 #include "webrtc/base/bytebuffer.h" | 14 #include "webrtc/base/bytebuffer.h" |
15 #include "webrtc/base/logging.h" | 15 #include "webrtc/base/logging.h" |
16 #include "webrtc/common_video/h264/h264_common.h" | 16 #include "webrtc/common_video/h264/h264_common.h" |
17 #include "webrtc/media/base/mediaconstants.h" | 17 #include "webrtc/media/base/mediaconstants.h" |
18 #include "webrtc/modules/pacing/packet_router.h" | 18 #include "webrtc/modules/pacing/packet_router.h" |
19 #include "webrtc/modules/video_coding/include/video_coding_defines.h" | 19 #include "webrtc/modules/video_coding/include/video_coding_defines.h" |
20 #include "webrtc/modules/video_coding/frame_object.h" | 20 #include "webrtc/modules/video_coding/frame_object.h" |
21 #include "webrtc/modules/video_coding/packet.h" | 21 #include "webrtc/modules/video_coding/packet.h" |
22 #include "webrtc/modules/video_coding/rtp_frame_reference_finder.h" | 22 #include "webrtc/modules/video_coding/rtp_frame_reference_finder.h" |
23 #include "webrtc/modules/video_coding/timing.h" | 23 #include "webrtc/modules/video_coding/timing.h" |
24 #include "webrtc/modules/utility/include/process_thread.h" | 24 #include "webrtc/modules/utility/include/process_thread.h" |
25 #include "webrtc/system_wrappers/include/clock.h" | 25 #include "webrtc/system_wrappers/include/clock.h" |
26 #include "webrtc/system_wrappers/include/field_trial_default.h" | 26 #include "webrtc/system_wrappers/include/field_trial_default.h" |
27 #include "webrtc/test/field_trial.h" | 27 #include "webrtc/test/field_trial.h" |
28 #include "webrtc/video/rtp_stream_receiver.h" | 28 #include "webrtc/video/rtp_video_stream_receiver.h" |
29 | 29 |
30 using testing::_; | 30 using testing::_; |
31 | 31 |
32 namespace webrtc { | 32 namespace webrtc { |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 const char kNewJitterBufferFieldTrialEnabled[] = | 36 const char kNewJitterBufferFieldTrialEnabled[] = |
37 "WebRTC-NewVideoJitterBuffer/Enabled/"; | 37 "WebRTC-NewVideoJitterBuffer/Enabled/"; |
38 const uint8_t kH264StartCode[] = {0x00, 0x00, 0x00, 0x01}; | 38 const uint8_t kH264StartCode[] = {0x00, 0x00, 0x00, 0x01}; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 } | 88 } |
89 void AppendExpectedBitstream(const uint8_t data[], size_t size_in_bytes) { | 89 void AppendExpectedBitstream(const uint8_t data[], size_t size_in_bytes) { |
90 // TODO(Johan): Let rtc::ByteBuffer handle uint8_t* instead of char*. | 90 // TODO(Johan): Let rtc::ByteBuffer handle uint8_t* instead of char*. |
91 buffer_.WriteBytes(reinterpret_cast<const char*>(data), size_in_bytes); | 91 buffer_.WriteBytes(reinterpret_cast<const char*>(data), size_in_bytes); |
92 } | 92 } |
93 rtc::ByteBufferWriter buffer_; | 93 rtc::ByteBufferWriter buffer_; |
94 }; | 94 }; |
95 | 95 |
96 } // namespace | 96 } // namespace |
97 | 97 |
98 class RtpStreamReceiverTest : public testing::Test { | 98 class RtpVideoStreamReceiverTest : public testing::Test { |
99 public: | 99 public: |
100 RtpStreamReceiverTest() | 100 RtpVideoStreamReceiverTest() |
101 : config_(CreateConfig()), | 101 : config_(CreateConfig()), |
102 timing_(Clock::GetRealTimeClock()), | 102 timing_(Clock::GetRealTimeClock()), |
103 process_thread_(ProcessThread::Create("TestThread")) {} | 103 process_thread_(ProcessThread::Create("TestThread")) {} |
104 | 104 |
105 void SetUp() { | 105 void SetUp() { |
106 rtp_stream_receiver_.reset(new RtpStreamReceiver( | 106 rtp_video_stream_receiver_.reset(new RtpVideoStreamReceiver( |
107 &mock_transport_, nullptr, &packet_router_, &config_, | 107 &mock_transport_, nullptr, &packet_router_, &config_, |
108 nullptr, process_thread_.get(), &mock_nack_sender_, | 108 nullptr, process_thread_.get(), &mock_nack_sender_, |
109 &mock_key_frame_request_sender_, &mock_on_complete_frame_callback_, | 109 &mock_key_frame_request_sender_, &mock_on_complete_frame_callback_, |
110 &timing_)); | 110 &timing_)); |
111 } | 111 } |
112 | 112 |
113 WebRtcRTPHeader GetDefaultPacket() { | 113 WebRtcRTPHeader GetDefaultPacket() { |
114 WebRtcRTPHeader packet; | 114 WebRtcRTPHeader packet; |
115 memset(&packet, 0, sizeof(packet)); | 115 memset(&packet, 0, sizeof(packet)); |
116 packet.type.Video.codec = kRtpVideoH264; | 116 packet.type.Video.codec = kRtpVideoH264; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 webrtc::test::ScopedFieldTrials override_field_trials_{ | 168 webrtc::test::ScopedFieldTrials override_field_trials_{ |
169 kNewJitterBufferFieldTrialEnabled}; | 169 kNewJitterBufferFieldTrialEnabled}; |
170 VideoReceiveStream::Config config_; | 170 VideoReceiveStream::Config config_; |
171 MockNackSender mock_nack_sender_; | 171 MockNackSender mock_nack_sender_; |
172 MockKeyFrameRequestSender mock_key_frame_request_sender_; | 172 MockKeyFrameRequestSender mock_key_frame_request_sender_; |
173 MockTransport mock_transport_; | 173 MockTransport mock_transport_; |
174 MockOnCompleteFrameCallback mock_on_complete_frame_callback_; | 174 MockOnCompleteFrameCallback mock_on_complete_frame_callback_; |
175 PacketRouter packet_router_; | 175 PacketRouter packet_router_; |
176 VCMTiming timing_; | 176 VCMTiming timing_; |
177 std::unique_ptr<ProcessThread> process_thread_; | 177 std::unique_ptr<ProcessThread> process_thread_; |
178 std::unique_ptr<RtpStreamReceiver> rtp_stream_receiver_; | 178 std::unique_ptr<RtpVideoStreamReceiver> rtp_video_stream_receiver_; |
179 }; | 179 }; |
180 | 180 |
181 TEST_F(RtpStreamReceiverTest, GenericKeyFrame) { | 181 TEST_F(RtpVideoStreamReceiverTest, GenericKeyFrame) { |
182 WebRtcRTPHeader rtp_header; | 182 WebRtcRTPHeader rtp_header; |
183 const std::vector<uint8_t> data({1, 2, 3, 4}); | 183 const std::vector<uint8_t> data({1, 2, 3, 4}); |
184 memset(&rtp_header, 0, sizeof(rtp_header)); | 184 memset(&rtp_header, 0, sizeof(rtp_header)); |
185 rtp_header.header.sequenceNumber = 1; | 185 rtp_header.header.sequenceNumber = 1; |
186 rtp_header.header.markerBit = 1; | 186 rtp_header.header.markerBit = 1; |
187 rtp_header.type.Video.is_first_packet_in_frame = true; | 187 rtp_header.type.Video.is_first_packet_in_frame = true; |
188 rtp_header.frameType = kVideoFrameKey; | 188 rtp_header.frameType = kVideoFrameKey; |
189 rtp_header.type.Video.codec = kRtpVideoGeneric; | 189 rtp_header.type.Video.codec = kRtpVideoGeneric; |
190 mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(), | 190 mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(), |
191 data.size()); | 191 data.size()); |
192 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); | 192 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); |
193 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 193 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
194 &rtp_header); | 194 &rtp_header); |
195 } | 195 } |
196 | 196 |
197 TEST_F(RtpStreamReceiverTest, GenericKeyFrameBitstreamError) { | 197 TEST_F(RtpVideoStreamReceiverTest, GenericKeyFrameBitstreamError) { |
198 WebRtcRTPHeader rtp_header; | 198 WebRtcRTPHeader rtp_header; |
199 const std::vector<uint8_t> data({1, 2, 3, 4}); | 199 const std::vector<uint8_t> data({1, 2, 3, 4}); |
200 memset(&rtp_header, 0, sizeof(rtp_header)); | 200 memset(&rtp_header, 0, sizeof(rtp_header)); |
201 rtp_header.header.sequenceNumber = 1; | 201 rtp_header.header.sequenceNumber = 1; |
202 rtp_header.header.markerBit = 1; | 202 rtp_header.header.markerBit = 1; |
203 rtp_header.type.Video.is_first_packet_in_frame = true; | 203 rtp_header.type.Video.is_first_packet_in_frame = true; |
204 rtp_header.frameType = kVideoFrameKey; | 204 rtp_header.frameType = kVideoFrameKey; |
205 rtp_header.type.Video.codec = kRtpVideoGeneric; | 205 rtp_header.type.Video.codec = kRtpVideoGeneric; |
206 constexpr uint8_t expected_bitsteam[] = {1, 2, 3, 0xff}; | 206 constexpr uint8_t expected_bitsteam[] = {1, 2, 3, 0xff}; |
207 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 207 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
208 expected_bitsteam, sizeof(expected_bitsteam)); | 208 expected_bitsteam, sizeof(expected_bitsteam)); |
209 EXPECT_CALL(mock_on_complete_frame_callback_, | 209 EXPECT_CALL(mock_on_complete_frame_callback_, |
210 DoOnCompleteFrameFailBitstream(_)); | 210 DoOnCompleteFrameFailBitstream(_)); |
211 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 211 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
212 &rtp_header); | 212 &rtp_header); |
213 } | 213 } |
214 | 214 |
215 TEST_F(RtpStreamReceiverTest, InBandSpsPps) { | 215 TEST_F(RtpVideoStreamReceiverTest, InBandSpsPps) { |
216 std::vector<uint8_t> sps_data; | 216 std::vector<uint8_t> sps_data; |
217 WebRtcRTPHeader sps_packet = GetDefaultPacket(); | 217 WebRtcRTPHeader sps_packet = GetDefaultPacket(); |
218 AddSps(&sps_packet, 0, &sps_data); | 218 AddSps(&sps_packet, 0, &sps_data); |
219 sps_packet.header.sequenceNumber = 0; | 219 sps_packet.header.sequenceNumber = 0; |
220 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 220 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
221 kH264StartCode, sizeof(kH264StartCode)); | 221 kH264StartCode, sizeof(kH264StartCode)); |
222 mock_on_complete_frame_callback_.AppendExpectedBitstream(sps_data.data(), | 222 mock_on_complete_frame_callback_.AppendExpectedBitstream(sps_data.data(), |
223 sps_data.size()); | 223 sps_data.size()); |
224 rtp_stream_receiver_->OnReceivedPayloadData(sps_data.data(), sps_data.size(), | 224 rtp_video_stream_receiver_->OnReceivedPayloadData( |
225 &sps_packet); | 225 sps_data.data(), sps_data.size(), &sps_packet); |
226 | 226 |
227 std::vector<uint8_t> pps_data; | 227 std::vector<uint8_t> pps_data; |
228 WebRtcRTPHeader pps_packet = GetDefaultPacket(); | 228 WebRtcRTPHeader pps_packet = GetDefaultPacket(); |
229 AddPps(&pps_packet, 0, 1, &pps_data); | 229 AddPps(&pps_packet, 0, 1, &pps_data); |
230 pps_packet.header.sequenceNumber = 1; | 230 pps_packet.header.sequenceNumber = 1; |
231 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 231 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
232 kH264StartCode, sizeof(kH264StartCode)); | 232 kH264StartCode, sizeof(kH264StartCode)); |
233 mock_on_complete_frame_callback_.AppendExpectedBitstream(pps_data.data(), | 233 mock_on_complete_frame_callback_.AppendExpectedBitstream(pps_data.data(), |
234 pps_data.size()); | 234 pps_data.size()); |
235 rtp_stream_receiver_->OnReceivedPayloadData(pps_data.data(), pps_data.size(), | 235 rtp_video_stream_receiver_->OnReceivedPayloadData( |
236 &pps_packet); | 236 pps_data.data(), pps_data.size(), &pps_packet); |
237 | 237 |
238 std::vector<uint8_t> idr_data; | 238 std::vector<uint8_t> idr_data; |
239 WebRtcRTPHeader idr_packet = GetDefaultPacket(); | 239 WebRtcRTPHeader idr_packet = GetDefaultPacket(); |
240 AddIdr(&idr_packet, 1); | 240 AddIdr(&idr_packet, 1); |
241 idr_packet.type.Video.is_first_packet_in_frame = true; | 241 idr_packet.type.Video.is_first_packet_in_frame = true; |
242 idr_packet.header.sequenceNumber = 2; | 242 idr_packet.header.sequenceNumber = 2; |
243 idr_packet.header.markerBit = 1; | 243 idr_packet.header.markerBit = 1; |
244 idr_packet.type.Video.is_first_packet_in_frame = true; | 244 idr_packet.type.Video.is_first_packet_in_frame = true; |
245 idr_packet.frameType = kVideoFrameKey; | 245 idr_packet.frameType = kVideoFrameKey; |
246 idr_packet.type.Video.codec = kRtpVideoH264; | 246 idr_packet.type.Video.codec = kRtpVideoH264; |
247 idr_data.insert(idr_data.end(), {0x65, 1, 2, 3}); | 247 idr_data.insert(idr_data.end(), {0x65, 1, 2, 3}); |
248 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 248 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
249 kH264StartCode, sizeof(kH264StartCode)); | 249 kH264StartCode, sizeof(kH264StartCode)); |
250 mock_on_complete_frame_callback_.AppendExpectedBitstream(idr_data.data(), | 250 mock_on_complete_frame_callback_.AppendExpectedBitstream(idr_data.data(), |
251 idr_data.size()); | 251 idr_data.size()); |
252 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); | 252 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); |
253 rtp_stream_receiver_->OnReceivedPayloadData(idr_data.data(), idr_data.size(), | 253 rtp_video_stream_receiver_->OnReceivedPayloadData( |
254 &idr_packet); | 254 idr_data.data(), idr_data.size(), &idr_packet); |
255 } | 255 } |
256 | 256 |
257 TEST_F(RtpStreamReceiverTest, OutOfBandFmtpSpsPps) { | 257 TEST_F(RtpVideoStreamReceiverTest, OutOfBandFmtpSpsPps) { |
258 constexpr int kPayloadType = 99; | 258 constexpr int kPayloadType = 99; |
259 VideoCodec codec; | 259 VideoCodec codec; |
260 codec.plType = kPayloadType; | 260 codec.plType = kPayloadType; |
261 std::map<std::string, std::string> codec_params; | 261 std::map<std::string, std::string> codec_params; |
262 // Example parameter sets from https://tools.ietf.org/html/rfc3984#section-8.2 | 262 // Example parameter sets from https://tools.ietf.org/html/rfc3984#section-8.2 |
263 // . | 263 // . |
264 codec_params.insert( | 264 codec_params.insert( |
265 {cricket::kH264FmtpSpropParameterSets, "Z0IACpZTBYmI,aMljiA=="}); | 265 {cricket::kH264FmtpSpropParameterSets, "Z0IACpZTBYmI,aMljiA=="}); |
266 rtp_stream_receiver_->AddReceiveCodec(codec, codec_params); | 266 rtp_video_stream_receiver_->AddReceiveCodec(codec, codec_params); |
267 const uint8_t binary_sps[] = {0x67, 0x42, 0x00, 0x0a, 0x96, | 267 const uint8_t binary_sps[] = {0x67, 0x42, 0x00, 0x0a, 0x96, |
268 0x53, 0x05, 0x89, 0x88}; | 268 0x53, 0x05, 0x89, 0x88}; |
269 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 269 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
270 kH264StartCode, sizeof(kH264StartCode)); | 270 kH264StartCode, sizeof(kH264StartCode)); |
271 mock_on_complete_frame_callback_.AppendExpectedBitstream(binary_sps, | 271 mock_on_complete_frame_callback_.AppendExpectedBitstream(binary_sps, |
272 sizeof(binary_sps)); | 272 sizeof(binary_sps)); |
273 const uint8_t binary_pps[] = {0x68, 0xc9, 0x63, 0x88}; | 273 const uint8_t binary_pps[] = {0x68, 0xc9, 0x63, 0x88}; |
274 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 274 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
275 kH264StartCode, sizeof(kH264StartCode)); | 275 kH264StartCode, sizeof(kH264StartCode)); |
276 mock_on_complete_frame_callback_.AppendExpectedBitstream(binary_pps, | 276 mock_on_complete_frame_callback_.AppendExpectedBitstream(binary_pps, |
277 sizeof(binary_pps)); | 277 sizeof(binary_pps)); |
278 | 278 |
279 std::vector<uint8_t> data; | 279 std::vector<uint8_t> data; |
280 WebRtcRTPHeader idr_packet = GetDefaultPacket(); | 280 WebRtcRTPHeader idr_packet = GetDefaultPacket(); |
281 AddIdr(&idr_packet, 0); | 281 AddIdr(&idr_packet, 0); |
282 idr_packet.header.payloadType = kPayloadType; | 282 idr_packet.header.payloadType = kPayloadType; |
283 idr_packet.type.Video.is_first_packet_in_frame = true; | 283 idr_packet.type.Video.is_first_packet_in_frame = true; |
284 idr_packet.header.sequenceNumber = 2; | 284 idr_packet.header.sequenceNumber = 2; |
285 idr_packet.header.markerBit = 1; | 285 idr_packet.header.markerBit = 1; |
286 idr_packet.type.Video.is_first_packet_in_frame = true; | 286 idr_packet.type.Video.is_first_packet_in_frame = true; |
287 idr_packet.frameType = kVideoFrameKey; | 287 idr_packet.frameType = kVideoFrameKey; |
288 idr_packet.type.Video.codec = kRtpVideoH264; | 288 idr_packet.type.Video.codec = kRtpVideoH264; |
289 data.insert(data.end(), {1, 2, 3}); | 289 data.insert(data.end(), {1, 2, 3}); |
290 mock_on_complete_frame_callback_.AppendExpectedBitstream( | 290 mock_on_complete_frame_callback_.AppendExpectedBitstream( |
291 kH264StartCode, sizeof(kH264StartCode)); | 291 kH264StartCode, sizeof(kH264StartCode)); |
292 mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(), | 292 mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(), |
293 data.size()); | 293 data.size()); |
294 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); | 294 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); |
295 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 295 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
296 &idr_packet); | 296 &idr_packet); |
297 } | 297 } |
298 | 298 |
299 TEST_F(RtpStreamReceiverTest, PaddingInMediaStream) { | 299 TEST_F(RtpVideoStreamReceiverTest, PaddingInMediaStream) { |
300 WebRtcRTPHeader header = GetDefaultPacket(); | 300 WebRtcRTPHeader header = GetDefaultPacket(); |
301 std::vector<uint8_t> data; | 301 std::vector<uint8_t> data; |
302 data.insert(data.end(), {1, 2, 3}); | 302 data.insert(data.end(), {1, 2, 3}); |
303 header.header.payloadType = 99; | 303 header.header.payloadType = 99; |
304 header.type.Video.is_first_packet_in_frame = true; | 304 header.type.Video.is_first_packet_in_frame = true; |
305 header.header.sequenceNumber = 2; | 305 header.header.sequenceNumber = 2; |
306 header.header.markerBit = true; | 306 header.header.markerBit = true; |
307 header.frameType = kVideoFrameKey; | 307 header.frameType = kVideoFrameKey; |
308 header.type.Video.codec = kRtpVideoGeneric; | 308 header.type.Video.codec = kRtpVideoGeneric; |
309 mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(), | 309 mock_on_complete_frame_callback_.AppendExpectedBitstream(data.data(), |
310 data.size()); | 310 data.size()); |
311 | 311 |
312 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); | 312 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); |
313 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 313 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
314 &header); | 314 &header); |
315 | 315 |
316 header.header.sequenceNumber = 3; | 316 header.header.sequenceNumber = 3; |
317 rtp_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header); | 317 rtp_video_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header); |
318 | 318 |
319 header.frameType = kVideoFrameDelta; | 319 header.frameType = kVideoFrameDelta; |
320 header.header.sequenceNumber = 4; | 320 header.header.sequenceNumber = 4; |
321 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); | 321 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); |
322 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 322 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
323 &header); | 323 &header); |
324 | 324 |
325 header.header.sequenceNumber = 6; | 325 header.header.sequenceNumber = 6; |
326 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 326 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
327 &header); | 327 &header); |
328 | 328 |
329 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); | 329 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); |
330 header.header.sequenceNumber = 5; | 330 header.header.sequenceNumber = 5; |
331 rtp_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header); | 331 rtp_video_stream_receiver_->OnReceivedPayloadData(nullptr, 0, &header); |
332 } | 332 } |
333 | 333 |
334 TEST_F(RtpStreamReceiverTest, RequestKeyframeIfFirstFrameIsDelta) { | 334 TEST_F(RtpVideoStreamReceiverTest, RequestKeyframeIfFirstFrameIsDelta) { |
335 WebRtcRTPHeader rtp_header; | 335 WebRtcRTPHeader rtp_header; |
336 const std::vector<uint8_t> data({1, 2, 3, 4}); | 336 const std::vector<uint8_t> data({1, 2, 3, 4}); |
337 memset(&rtp_header, 0, sizeof(rtp_header)); | 337 memset(&rtp_header, 0, sizeof(rtp_header)); |
338 rtp_header.header.sequenceNumber = 1; | 338 rtp_header.header.sequenceNumber = 1; |
339 rtp_header.header.markerBit = 1; | 339 rtp_header.header.markerBit = 1; |
340 rtp_header.type.Video.is_first_packet_in_frame = true; | 340 rtp_header.type.Video.is_first_packet_in_frame = true; |
341 rtp_header.frameType = kVideoFrameDelta; | 341 rtp_header.frameType = kVideoFrameDelta; |
342 rtp_header.type.Video.codec = kRtpVideoGeneric; | 342 rtp_header.type.Video.codec = kRtpVideoGeneric; |
343 | 343 |
344 EXPECT_CALL(mock_key_frame_request_sender_, RequestKeyFrame()); | 344 EXPECT_CALL(mock_key_frame_request_sender_, RequestKeyFrame()); |
345 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 345 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
346 &rtp_header); | 346 &rtp_header); |
347 } | 347 } |
348 | 348 |
349 } // namespace webrtc | 349 } // namespace webrtc |
OLD | NEW |