| 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
|
|
|