Index: webrtc/common_video/h264/sps_vui_rewriter.cc |
diff --git a/webrtc/common_video/h264/sps_vui_rewriter.cc b/webrtc/common_video/h264/sps_vui_rewriter.cc |
index 447221327d40551cbd1c3a92a1446f721272cfd0..c5b9b706dff3e6dc66a047da1330c4999b8e2efc 100644 |
--- a/webrtc/common_video/h264/sps_vui_rewriter.cc |
+++ b/webrtc/common_video/h264/sps_vui_rewriter.cc |
@@ -72,7 +72,10 @@ |
size_t length, |
rtc::Optional<SpsParser::SpsState>* sps, |
rtc::Buffer* destination) { |
- rtc::BitBuffer source_buffer(buffer, length); |
+ // Create temporary RBSP decoded buffer of the payload (exlcuding the |
+ // leading nalu type header byte (the SpsParser uses only the payload). |
+ std::unique_ptr<rtc::Buffer> rbsp_buffer = H264::ParseRbsp(buffer, length); |
+ rtc::BitBuffer source_buffer(rbsp_buffer->data(), rbsp_buffer->size()); |
rtc::Optional<SpsParser::SpsState> sps_state = |
SpsParser::ParseSpsUpToVui(&source_buffer); |
if (!sps_state) |
@@ -94,7 +97,7 @@ |
size_t byte_offset; |
size_t bit_offset; |
source_buffer.GetCurrentOffset(&byte_offset, &bit_offset); |
- memcpy(out_buffer.data(), buffer, |
+ memcpy(out_buffer.data(), rbsp_buffer->data(), |
byte_offset + (bit_offset > 0 ? 1 : 0)); // OK to copy the last bits. |
// SpsParser will have read the vui_params_present flag, which we want to |