| Index: webrtc/modules/video_coding/utility/h264_bitstream_parser.h
 | 
| diff --git a/webrtc/modules/video_coding/utility/h264_bitstream_parser.h b/webrtc/modules/video_coding/utility/h264_bitstream_parser.h
 | 
| index b6fe1aa18d54a80d0688d27b604ca878c94dc041..6a779e156bac14fde289207d220b91c81e660ff0 100644
 | 
| --- a/webrtc/modules/video_coding/utility/h264_bitstream_parser.h
 | 
| +++ b/webrtc/modules/video_coding/utility/h264_bitstream_parser.h
 | 
| @@ -10,12 +10,15 @@
 | 
|  
 | 
|  #ifndef WEBRTC_MODULES_VIDEO_CODING_UTILITY_H264_BITSTREAM_PARSER_H_
 | 
|  #define WEBRTC_MODULES_VIDEO_CODING_UTILITY_H264_BITSTREAM_PARSER_H_
 | 
| -
 | 
|  #include <stddef.h>
 | 
|  #include <stdint.h>
 | 
|  
 | 
| +#include "webrtc/base/optional.h"
 | 
| +#include "webrtc/common_video/h264/pps_parser.h"
 | 
| +#include "webrtc/common_video/h264/sps_parser.h"
 | 
| +
 | 
|  namespace rtc {
 | 
| -class BitBuffer;
 | 
| +class BitBufferWriter;
 | 
|  }
 | 
|  
 | 
|  namespace webrtc {
 | 
| @@ -28,51 +31,27 @@ namespace webrtc {
 | 
|  // bitstreams.
 | 
|  class H264BitstreamParser {
 | 
|   public:
 | 
| +  H264BitstreamParser();
 | 
| +  virtual ~H264BitstreamParser();
 | 
| +
 | 
|    // Parse an additional chunk of H264 bitstream.
 | 
|    void ParseBitstream(const uint8_t* bitstream, size_t length);
 | 
|  
 | 
|    // Get the last extracted QP value from the parsed bitstream.
 | 
|    bool GetLastSliceQp(int* qp) const;
 | 
|  
 | 
| - private:
 | 
| -  // Captured in SPS and used when parsing slice NALUs.
 | 
| -  struct SpsState {
 | 
| -    SpsState();
 | 
| -
 | 
| -    uint32_t delta_pic_order_always_zero_flag = 0;
 | 
| -    uint32_t separate_colour_plane_flag = 0;
 | 
| -    uint32_t frame_mbs_only_flag = 0;
 | 
| -    uint32_t log2_max_frame_num_minus4 = 0;
 | 
| -    uint32_t log2_max_pic_order_cnt_lsb_minus4 = 0;
 | 
| -    uint32_t pic_order_cnt_type = 0;
 | 
| -  };
 | 
| -
 | 
| -  struct PpsState {
 | 
| -    PpsState();
 | 
| -
 | 
| -    bool bottom_field_pic_order_in_frame_present_flag = false;
 | 
| -    bool weighted_pred_flag = false;
 | 
| -    uint32_t weighted_bipred_idc = false;
 | 
| -    uint32_t redundant_pic_cnt_present_flag = 0;
 | 
| -    int pic_init_qp_minus26 = 0;
 | 
| -  };
 | 
| -
 | 
| + protected:
 | 
|    void ParseSlice(const uint8_t* slice, size_t length);
 | 
| -  bool ParseSpsNalu(const uint8_t* sps_nalu, size_t length);
 | 
| -  bool ParsePpsNalu(const uint8_t* pps_nalu, size_t length);
 | 
|    bool ParseNonParameterSetNalu(const uint8_t* source,
 | 
|                                  size_t source_length,
 | 
|                                  uint8_t nalu_type);
 | 
|  
 | 
|    // SPS/PPS state, updated when parsing new SPS/PPS, used to parse slices.
 | 
| -  bool sps_parsed_ = false;
 | 
| -  SpsState sps_;
 | 
| -  bool pps_parsed_ = false;
 | 
| -  PpsState pps_;
 | 
| +  rtc::Optional<SpsParser::SpsState> sps_;
 | 
| +  rtc::Optional<PpsParser::PpsState> pps_;
 | 
|  
 | 
|    // Last parsed slice QP.
 | 
| -  bool last_slice_qp_delta_parsed_ = false;
 | 
| -  int32_t last_slice_qp_delta_ = 0;
 | 
| +  rtc::Optional<int32_t> last_slice_qp_delta_;
 | 
|  };
 | 
|  
 | 
|  }  // namespace webrtc
 | 
| 
 |