From 7121680f38c53e781c8bdbeba116c85cb6a09111 Mon Sep 17 00:00:00 2001 From: Qiu Jianlin Date: Tue, 2 Jan 2024 14:22:55 +0800 Subject: [PATCH] Expose WebRTC H.264 SPS parser APIs. Blink RTC video encoder will need this simplified parser to replace current full H.264 SPS parser, to reduce parsing cost for extracting frame size from compressed H.264 bitstream. Bug: b:309132190 Change-Id: I6863f10bd139766d47fe4bff89143c1a91a09287 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/332468 Reviewed-by: Harald Alvestrand Commit-Queue: Jianlin Qiu Cr-Commit-Position: refs/heads/main@{#41466} --- common_video/h264/h264_common.h | 7 ++++--- common_video/h264/sps_parser.h | 5 +++-- rtc_base/bitstream_reader.h | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/common_video/h264/h264_common.h b/common_video/h264/h264_common.h index 0b1843ee38..1bc9867d3f 100644 --- a/common_video/h264/h264_common.h +++ b/common_video/h264/h264_common.h @@ -17,6 +17,7 @@ #include #include "rtc_base/buffer.h" +#include "rtc_base/system/rtc_export.h" namespace webrtc { @@ -59,11 +60,11 @@ struct NaluIndex { }; // Returns a vector of the NALU indices in the given buffer. -std::vector FindNaluIndices(const uint8_t* buffer, - size_t buffer_size); +RTC_EXPORT std::vector FindNaluIndices(const uint8_t* buffer, + size_t buffer_size); // Get the NAL type from the header byte immediately following start sequence. -NaluType ParseNaluType(uint8_t data); +RTC_EXPORT NaluType ParseNaluType(uint8_t data); // Methods for parsing and writing RBSP. See section 7.4.1 of the H264 spec. // diff --git a/common_video/h264/sps_parser.h b/common_video/h264/sps_parser.h index da328b48b0..a69bd19690 100644 --- a/common_video/h264/sps_parser.h +++ b/common_video/h264/sps_parser.h @@ -13,15 +13,16 @@ #include "absl/types/optional.h" #include "rtc_base/bitstream_reader.h" +#include "rtc_base/system/rtc_export.h" namespace webrtc { // A class for parsing out sequence parameter set (SPS) data from an H264 NALU. -class SpsParser { +class RTC_EXPORT SpsParser { public: // The parsed state of the SPS. Only some select values are stored. // Add more as they are actually needed. - struct SpsState { + struct RTC_EXPORT SpsState { SpsState(); SpsState(const SpsState&); ~SpsState(); diff --git a/rtc_base/bitstream_reader.h b/rtc_base/bitstream_reader.h index c367b9dc9f..62b0ba5ebf 100644 --- a/rtc_base/bitstream_reader.h +++ b/rtc_base/bitstream_reader.h @@ -124,11 +124,12 @@ class BitstreamReader { }; inline BitstreamReader::BitstreamReader(rtc::ArrayView bytes) - : bytes_(bytes.data()), remaining_bits_(bytes.size() * 8) {} + : bytes_(bytes.data()), + remaining_bits_(rtc::checked_cast(bytes.size() * 8)) {} inline BitstreamReader::BitstreamReader(absl::string_view bytes) : bytes_(reinterpret_cast(bytes.data())), - remaining_bits_(bytes.size() * 8) {} + remaining_bits_(rtc::checked_cast(bytes.size() * 8)) {} inline BitstreamReader::~BitstreamReader() { RTC_DCHECK(last_read_is_verified_) << "Latest calls to Read or ConsumeBit "