| Index: webrtc/modules/rtp_rtcp/source/rtp_format_h264.cc
 | 
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_format_h264.cc b/webrtc/modules/rtp_rtcp/source/rtp_format_h264.cc
 | 
| index 19467ca6513421cbb628fe0f7f35bb9fe77190c8..81dcb8b9e242b15bef9d7608f2d6b5a5971e3199 100644
 | 
| --- a/webrtc/modules/rtp_rtcp/source/rtp_format_h264.cc
 | 
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_format_h264.cc
 | 
| @@ -484,6 +484,8 @@ bool RtpDepacketizerH264::ProcessStapAOrSingleNalu(
 | 
|            parsed_payload->type.Video.width = sps->width;
 | 
|            parsed_payload->type.Video.height = sps->height;
 | 
|            nalu.sps_id = sps->id;
 | 
| +        } else {
 | 
| +          LOG(LS_WARNING) << "Failed to parse SPS id from SPS slice.";
 | 
|          }
 | 
|          parsed_payload->frame_type = kVideoFrameKey;
 | 
|          break;
 | 
| @@ -502,18 +504,32 @@ bool RtpDepacketizerH264::ProcessStapAOrSingleNalu(
 | 
|          }
 | 
|          break;
 | 
|        }
 | 
| -      case H264::NaluType::kSei:
 | 
| -        FALLTHROUGH();
 | 
|        case H264::NaluType::kIdr:
 | 
|          parsed_payload->frame_type = kVideoFrameKey;
 | 
|          FALLTHROUGH();
 | 
| -      default: {
 | 
| +      case H264::NaluType::kSlice: {
 | 
|          rtc::Optional<uint32_t> pps_id = PpsParser::ParsePpsIdFromSlice(
 | 
|              &payload_data[start_offset], end_offset - start_offset);
 | 
| -        if (pps_id)
 | 
| +        if (pps_id) {
 | 
|            nalu.pps_id = *pps_id;
 | 
| +        } else {
 | 
| +          LOG(LS_WARNING) << "Failed to parse PPS id from slice of type: "
 | 
| +                          << static_cast<int>(nalu.type);
 | 
| +        }
 | 
|          break;
 | 
|        }
 | 
| +      // Slices below don't contain SPS or PPS ids.
 | 
| +      case H264::NaluType::kAud:
 | 
| +      case H264::NaluType::kEndOfSequence:
 | 
| +      case H264::NaluType::kEndOfStream:
 | 
| +      case H264::NaluType::kFiller:
 | 
| +        break;
 | 
| +      case H264::NaluType::kSei:
 | 
| +        parsed_payload->frame_type = kVideoFrameKey;
 | 
| +        break;
 | 
| +      case H264::NaluType::kStapA:
 | 
| +      case H264::NaluType::kFuA:
 | 
| +        RTC_NOTREACHED();
 | 
|      }
 | 
|      RTPVideoHeaderH264* h264 = &parsed_payload->type.Video.codecHeader.H264;
 | 
|      if (h264->nalus_length == kMaxNalusPerPacket) {
 | 
| @@ -547,8 +563,13 @@ bool RtpDepacketizerH264::ParseFuaNalu(
 | 
|      length_ -= kNalHeaderSize;
 | 
|      rtc::Optional<uint32_t> pps_id = PpsParser::ParsePpsIdFromSlice(
 | 
|          payload_data + 2 * kNalHeaderSize, length_ - kNalHeaderSize);
 | 
| -    if (pps_id)
 | 
| +    if (pps_id) {
 | 
|        nalu.pps_id = *pps_id;
 | 
| +    } else {
 | 
| +      LOG(LS_WARNING) << "Failed to parse PPS from first fragment of FU-A NAL "
 | 
| +                         "unit with original type: "
 | 
| +                      << static_cast<int>(nalu.type);
 | 
| +    }
 | 
|      uint8_t original_nal_header = fnri | original_nal_type;
 | 
|      modified_buffer_.reset(new rtc::Buffer());
 | 
|      modified_buffer_->AppendData(payload_data + kNalHeaderSize, length_);
 | 
| @@ -570,8 +591,10 @@ bool RtpDepacketizerH264::ParseFuaNalu(
 | 
|    RTPVideoHeaderH264* h264 = &parsed_payload->type.Video.codecHeader.H264;
 | 
|    h264->packetization_type = kH264FuA;
 | 
|    h264->nalu_type = original_nal_type;
 | 
| -  h264->nalus[h264->nalus_length] = nalu;
 | 
| -  h264->nalus_length = 1;
 | 
| +  if (first_fragment) {
 | 
| +    h264->nalus[h264->nalus_length] = nalu;
 | 
| +    h264->nalus_length = 1;
 | 
| +  }
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| 
 |