| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 } | 396 } |
| 397 h264_header->nalu_type = nal_type; | 397 h264_header->nalu_type = nal_type; |
| 398 parsed_payload->frame_type = kVideoFrameDelta; | 398 parsed_payload->frame_type = kVideoFrameDelta; |
| 399 | 399 |
| 400 nalu_start_offsets.push_back(length_ + kLengthFieldSize); // End offset. | 400 nalu_start_offsets.push_back(length_ + kLengthFieldSize); // End offset. |
| 401 for (size_t i = 0; i < nalu_start_offsets.size() - 1; ++i) { | 401 for (size_t i = 0; i < nalu_start_offsets.size() - 1; ++i) { |
| 402 size_t start_offset = nalu_start_offsets[i]; | 402 size_t start_offset = nalu_start_offsets[i]; |
| 403 // End offset is actually start offset for next unit, excluding length field | 403 // End offset is actually start offset for next unit, excluding length field |
| 404 // so remove that from this units length. | 404 // so remove that from this units length. |
| 405 size_t end_offset = nalu_start_offsets[i + 1] - kLengthFieldSize; | 405 size_t end_offset = nalu_start_offsets[i + 1] - kLengthFieldSize; |
| 406 if (end_offset - start_offset < H264::kNaluTypeSize) { |
| 407 LOG(LS_ERROR) << "STAP-A packet too short"; |
| 408 return false; |
| 409 } |
| 410 |
| 406 nal_type = payload_data[start_offset] & kTypeMask; | 411 nal_type = payload_data[start_offset] & kTypeMask; |
| 407 start_offset += H264::kNaluTypeSize; | 412 start_offset += H264::kNaluTypeSize; |
| 408 | 413 |
| 409 if (nal_type == H264::NaluType::kSps) { | 414 if (nal_type == H264::NaluType::kSps) { |
| 410 // Check if VUI is present in SPS and if it needs to be modified to avoid | 415 // Check if VUI is present in SPS and if it needs to be modified to avoid |
| 411 // excessive decoder latency. | 416 // excessive decoder latency. |
| 412 | 417 |
| 413 // Copy any previous data first (likely just the first header). | 418 // Copy any previous data first (likely just the first header). |
| 414 std::unique_ptr<rtc::Buffer> output_buffer(new rtc::Buffer()); | 419 std::unique_ptr<rtc::Buffer> output_buffer(new rtc::Buffer()); |
| 415 if (start_offset) | 420 if (start_offset) |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 517 parsed_payload->type.Video.codec = kRtpVideoH264; | 522 parsed_payload->type.Video.codec = kRtpVideoH264; |
| 518 parsed_payload->type.Video.isFirstPacket = first_fragment; | 523 parsed_payload->type.Video.isFirstPacket = first_fragment; |
| 519 RTPVideoHeaderH264* h264_header = | 524 RTPVideoHeaderH264* h264_header = |
| 520 &parsed_payload->type.Video.codecHeader.H264; | 525 &parsed_payload->type.Video.codecHeader.H264; |
| 521 h264_header->packetization_type = kH264FuA; | 526 h264_header->packetization_type = kH264FuA; |
| 522 h264_header->nalu_type = original_nal_type; | 527 h264_header->nalu_type = original_nal_type; |
| 523 return true; | 528 return true; |
| 524 } | 529 } |
| 525 | 530 |
| 526 } // namespace webrtc | 531 } // namespace webrtc |
| OLD | NEW |