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

Side by Side Diff: webrtc/video/rtp_video_stream_receiver_unittest.cc

Issue 2945853002: Only append SPS/PPS to bitstream if supplied out of bound. (Closed)
Patch Set: delete[] sps/pps data in unittests Created 3 years, 6 months 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
« no previous file with comments | « webrtc/modules/video_coding/h264_sps_pps_tracker_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
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;
117 return packet; 117 return packet;
118 } 118 }
119 119
120 // TODO(Johan): refactor h264_sps_pps_tracker_unittests.cc to avoid duplicate 120 // TODO(Johan): refactor h264_sps_pps_tracker_unittests.cc to avoid duplicate
121 // code. 121 // code.
122 void AddSps(WebRtcRTPHeader* packet, int sps_id, std::vector<uint8_t>* data) { 122 void AddSps(WebRtcRTPHeader* packet,
123 uint8_t sps_id,
124 std::vector<uint8_t>* data) {
123 NaluInfo info; 125 NaluInfo info;
124 info.type = H264::NaluType::kSps; 126 info.type = H264::NaluType::kSps;
125 info.sps_id = sps_id; 127 info.sps_id = sps_id;
126 info.pps_id = -1; 128 info.pps_id = -1;
127 info.offset = data->size();
128 info.size = 2;
129 data->push_back(H264::NaluType::kSps); 129 data->push_back(H264::NaluType::kSps);
130 data->push_back(sps_id); 130 data->push_back(sps_id);
131 packet->type.Video.codecHeader.H264 131 packet->type.Video.codecHeader.H264
132 .nalus[packet->type.Video.codecHeader.H264.nalus_length++] = info; 132 .nalus[packet->type.Video.codecHeader.H264.nalus_length++] = info;
133 } 133 }
134 134
135 void AddPps(WebRtcRTPHeader* packet, 135 void AddPps(WebRtcRTPHeader* packet,
136 int sps_id, 136 uint8_t sps_id,
137 int pps_id, 137 uint8_t pps_id,
138 std::vector<uint8_t>* data) { 138 std::vector<uint8_t>* data) {
139 NaluInfo info; 139 NaluInfo info;
140 info.type = H264::NaluType::kPps; 140 info.type = H264::NaluType::kPps;
141 info.sps_id = sps_id; 141 info.sps_id = sps_id;
142 info.pps_id = pps_id; 142 info.pps_id = pps_id;
143 info.offset = data->size();
144 info.size = 2;
145 data->push_back(H264::NaluType::kPps); 143 data->push_back(H264::NaluType::kPps);
146 data->push_back(pps_id); 144 data->push_back(pps_id);
147 packet->type.Video.codecHeader.H264 145 packet->type.Video.codecHeader.H264
148 .nalus[packet->type.Video.codecHeader.H264.nalus_length++] = info; 146 .nalus[packet->type.Video.codecHeader.H264.nalus_length++] = info;
149 } 147 }
150 148
151 void AddIdr(WebRtcRTPHeader* packet, int pps_id) { 149 void AddIdr(WebRtcRTPHeader* packet, int pps_id) {
152 NaluInfo info; 150 NaluInfo info;
153 info.type = H264::NaluType::kIdr; 151 info.type = H264::NaluType::kIdr;
154 info.sps_id = -1; 152 info.sps_id = -1;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 DoOnCompleteFrameFailBitstream(_)); 208 DoOnCompleteFrameFailBitstream(_));
211 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), 209 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
212 &rtp_header); 210 &rtp_header);
213 } 211 }
214 212
215 TEST_F(RtpVideoStreamReceiverTest, InBandSpsPps) { 213 TEST_F(RtpVideoStreamReceiverTest, InBandSpsPps) {
216 std::vector<uint8_t> sps_data; 214 std::vector<uint8_t> sps_data;
217 WebRtcRTPHeader sps_packet = GetDefaultPacket(); 215 WebRtcRTPHeader sps_packet = GetDefaultPacket();
218 AddSps(&sps_packet, 0, &sps_data); 216 AddSps(&sps_packet, 0, &sps_data);
219 sps_packet.header.sequenceNumber = 0; 217 sps_packet.header.sequenceNumber = 0;
218 sps_packet.type.Video.is_first_packet_in_frame = true;
220 mock_on_complete_frame_callback_.AppendExpectedBitstream( 219 mock_on_complete_frame_callback_.AppendExpectedBitstream(
221 kH264StartCode, sizeof(kH264StartCode)); 220 kH264StartCode, sizeof(kH264StartCode));
222 mock_on_complete_frame_callback_.AppendExpectedBitstream(sps_data.data(), 221 mock_on_complete_frame_callback_.AppendExpectedBitstream(sps_data.data(),
223 sps_data.size()); 222 sps_data.size());
224 rtp_video_stream_receiver_->OnReceivedPayloadData( 223 rtp_video_stream_receiver_->OnReceivedPayloadData(
225 sps_data.data(), sps_data.size(), &sps_packet); 224 sps_data.data(), sps_data.size(), &sps_packet);
226 225
227 std::vector<uint8_t> pps_data; 226 std::vector<uint8_t> pps_data;
228 WebRtcRTPHeader pps_packet = GetDefaultPacket(); 227 WebRtcRTPHeader pps_packet = GetDefaultPacket();
229 AddPps(&pps_packet, 0, 1, &pps_data); 228 AddPps(&pps_packet, 0, 1, &pps_data);
230 pps_packet.header.sequenceNumber = 1; 229 pps_packet.header.sequenceNumber = 1;
230 pps_packet.type.Video.is_first_packet_in_frame = true;
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_video_stream_receiver_->OnReceivedPayloadData( 235 rtp_video_stream_receiver_->OnReceivedPayloadData(
236 pps_data.data(), pps_data.size(), &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;
245 idr_packet.frameType = kVideoFrameKey; 244 idr_packet.frameType = kVideoFrameKey;
246 idr_packet.type.Video.codec = kRtpVideoH264;
247 idr_data.insert(idr_data.end(), {0x65, 1, 2, 3}); 245 idr_data.insert(idr_data.end(), {0x65, 1, 2, 3});
248 mock_on_complete_frame_callback_.AppendExpectedBitstream( 246 mock_on_complete_frame_callback_.AppendExpectedBitstream(
249 kH264StartCode, sizeof(kH264StartCode)); 247 kH264StartCode, sizeof(kH264StartCode));
250 mock_on_complete_frame_callback_.AppendExpectedBitstream(idr_data.data(), 248 mock_on_complete_frame_callback_.AppendExpectedBitstream(idr_data.data(),
251 idr_data.size()); 249 idr_data.size());
252 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_)); 250 EXPECT_CALL(mock_on_complete_frame_callback_, DoOnCompleteFrame(_));
253 rtp_video_stream_receiver_->OnReceivedPayloadData( 251 rtp_video_stream_receiver_->OnReceivedPayloadData(
254 idr_data.data(), idr_data.size(), &idr_packet); 252 idr_data.data(), idr_data.size(), &idr_packet);
255 } 253 }
256 254
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 rtp_header.type.Video.is_first_packet_in_frame = true; 338 rtp_header.type.Video.is_first_packet_in_frame = true;
341 rtp_header.frameType = kVideoFrameDelta; 339 rtp_header.frameType = kVideoFrameDelta;
342 rtp_header.type.Video.codec = kRtpVideoGeneric; 340 rtp_header.type.Video.codec = kRtpVideoGeneric;
343 341
344 EXPECT_CALL(mock_key_frame_request_sender_, RequestKeyFrame()); 342 EXPECT_CALL(mock_key_frame_request_sender_, RequestKeyFrame());
345 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), 343 rtp_video_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(),
346 &rtp_header); 344 &rtp_header);
347 } 345 }
348 346
349 } // namespace webrtc 347 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/h264_sps_pps_tracker_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698