Index: webrtc/modules/video_coding/h264_sps_pps_tracker.cc |
diff --git a/webrtc/modules/video_coding/h264_sps_pps_tracker.cc b/webrtc/modules/video_coding/h264_sps_pps_tracker.cc |
index e13c9f4364b4ca0b4fb6ff6ebbefbae38fca7d57..bc814bde32e34eb601271afce04b8dfde6023cf5 100644 |
--- a/webrtc/modules/video_coding/h264_sps_pps_tracker.cc |
+++ b/webrtc/modules/video_coding/h264_sps_pps_tracker.cc |
@@ -182,12 +182,39 @@ H264SpsPpsTracker::PacketAction H264SpsPpsTracker::CopyAndFixBitstream( |
return kInsert; |
} |
-void H264SpsPpsTracker::InsertSpsPps(const std::vector<uint8_t>& sps, |
- const std::vector<uint8_t>& pps) { |
- rtc::Optional<SpsParser::SpsState> parsed_sps = |
- SpsParser::ParseSps(sps.data(), sps.size()); |
- rtc::Optional<PpsParser::PpsState> parsed_pps = |
- PpsParser::ParsePps(pps.data(), pps.size()); |
+void H264SpsPpsTracker::InsertSpsPpsNalus(const std::vector<uint8_t>& sps, |
+ const std::vector<uint8_t>& pps) { |
+ constexpr size_t kNaluHeaderOffset = 1; |
+ if (sps.size() < kNaluHeaderOffset) { |
philipel
2017/01/18 12:51:48
Why do we perform these checks before parsing? For
johan
2017/01/18 14:26:04
The SpsPraser and PpsParser implementations handle
philipel
2017/01/18 14:28:43
Acknowledged.
|
+ LOG(LS_WARNING) << "SPS size " << sps.size() << " is smaller than " |
+ << kNaluHeaderOffset; |
+ return; |
+ } |
+ if ((sps[0] & 0x1f) != H264::NaluType::kSps) { |
+ LOG(LS_WARNING) << "SPS Nalu header missing"; |
+ return; |
+ } |
+ if (pps.size() < kNaluHeaderOffset) { |
+ LOG(LS_WARNING) << "PPS size " << pps.size() << " is smaller than " |
+ << kNaluHeaderOffset; |
+ return; |
+ } |
+ if ((pps[0] & 0x1f) != H264::NaluType::kPps) { |
+ LOG(LS_WARNING) << "SPS Nalu header missing"; |
+ return; |
+ } |
+ rtc::Optional<SpsParser::SpsState> parsed_sps = SpsParser::ParseSps( |
+ sps.data() + kNaluHeaderOffset, sps.size() - kNaluHeaderOffset); |
+ rtc::Optional<PpsParser::PpsState> parsed_pps = PpsParser::ParsePps( |
+ pps.data() + kNaluHeaderOffset, pps.size() - kNaluHeaderOffset); |
+ |
+ if (!parsed_sps) { |
+ LOG(LS_WARNING) << "Failed to parse SPS."; |
+ } |
+ |
+ if (!parsed_pps) { |
+ LOG(LS_WARNING) << "Failed to parse PPS."; |
+ } |
if (!parsed_pps || !parsed_sps) { |
philipel
2017/01/18 12:51:48
Remove this if block.
johan
2017/01/18 14:26:04
Removing the log, sticking with the return.
philipel
2017/01/18 14:28:43
Ah... ofc
|
LOG(LS_WARNING) << "Failed to parse SPS or PPS parameters."; |
@@ -208,6 +235,10 @@ void H264SpsPpsTracker::InsertSpsPps(const std::vector<uint8_t>& sps, |
memcpy(pps_data, pps.data(), pps_info.size); |
pps_info.data.reset(pps_data); |
pps_data_[parsed_pps->id] = std::move(pps_info); |
+ |
+ LOG(LS_INFO) << "Inserted SPS id " << parsed_sps->id << " and PPS id " |
+ << parsed_pps->id << " (referencing SPS " << parsed_pps->sps_id |
+ << ")"; |
} |
} // namespace video_coding |