| 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 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 210 DoOnCompleteFrameFailBitstream(_)); | 208 DoOnCompleteFrameFailBitstream(_)); |
| 211 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 209 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
| 212 &rtp_header); | 210 &rtp_header); |
| 213 } | 211 } |
| 214 | 212 |
| 215 TEST_F(RtpStreamReceiverTest, InBandSpsPps) { | 213 TEST_F(RtpStreamReceiverTest, 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_stream_receiver_->OnReceivedPayloadData(sps_data.data(), sps_data.size(), | 223 rtp_stream_receiver_->OnReceivedPayloadData(sps_data.data(), sps_data.size(), |
| 225 &sps_packet); | 224 &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_stream_receiver_->OnReceivedPayloadData(pps_data.data(), pps_data.size(), | 235 rtp_stream_receiver_->OnReceivedPayloadData(pps_data.data(), pps_data.size(), |
| 236 &pps_packet); | 236 &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_stream_receiver_->OnReceivedPayloadData(idr_data.data(), idr_data.size(), | 251 rtp_stream_receiver_->OnReceivedPayloadData(idr_data.data(), idr_data.size(), |
| 254 &idr_packet); | 252 &idr_packet); |
| 255 } | 253 } |
| 256 | 254 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), | 343 rtp_stream_receiver_->OnReceivedPayloadData(data.data(), data.size(), |
| 346 &rtp_header); | 344 &rtp_header); |
| 347 } | 345 } |
| 348 | 346 |
| 349 } // namespace webrtc | 347 } // namespace webrtc |
| OLD | NEW |