Skip to content

Commit b91735b

Browse files
committed
h264nal: integrate old webrtc code
We use a fork of the (old) WebRTC BitBuffer code in order to access to bits/bytes in a binary buffer. We kept it in a separate directory to allow easy binary replacement with the original BitBuffer. Both BitBuffer versions have evolved since: * WebRTC replaced BitBuffer with BitstreamReader (see [1]) * We added a new function to do byte copy in BitBuffer. We want to remove the assumption that the BitBuffer in thie repo is in anyway interchangeable with the (old) WebRTC BitBuffer. So we are integrating it in the main code. Reference: [1] https://webrtc-review.googlesource.com/c/src/+/232125 Tested: Build system. ``` $ rm -rf build/ $ mkdir build $ cd build $ CC=clang CXX=clang++ cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_FLAGS_DEBUG="-g -O0" -DCMAKE_CXX_FLAGS_DEBUG="-g -O0" .. # cmake with clang and debug/gdb symbols ... $ make -j ... [100%] Built target h264_vui_parameters_parser_unittest ```
1 parent 55911c1 commit b91735b

File tree

106 files changed

+232
-350
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+232
-350
lines changed

CMakeLists.txt

-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ enable_testing()
2727

2828
# Recurse into source code subdirectories.
2929
add_subdirectory(src)
30-
add_subdirectory(webrtc)
3130
add_subdirectory(tools)
3231
add_subdirectory(test)
3332
add_subdirectory(fuzz)

README.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ The following code has been copied from `tools/h264nal.nalu.cc`:
189189
// 3. create state for parsing NALUs
190190
// bitstream parser state (to keep the SPS/PPS/SubsetSPS NALUs)
191191
h264nal::H264BitstreamParserState bitstream_parser_state;
192-
h265nal::ParsingOptions parsing_options;
192+
h264nal::ParsingOptions parsing_options;
193193
194194
// 4. parse the NALUs one-by-one
195195
auto bitstream =
@@ -268,13 +268,14 @@ if (rtp->nal_unit_header->nal_unit_type <= 23) {
268268
# 5. Requirements
269269
Requires gtests, gmock.
270270

271-
The [`webrtc`](webrtc) directory contains an RBSP parser copied from webrtc.
272-
273271

274272
# 6. Other
275273
The [media](media/README.md) directory contains information on testing the
276274
parser using media files.
277275

276+
The `rtc_common.h|cc` code contains an RBSP parser copied from an old
277+
version of webrtc.
278+
278279
The [fuzz](fuzz/README.md) directory contains information on fuzzing the
279280
parser.
280281

fuzz/CMakeLists.txt

-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
# link executable to webrtc library
2-
# Since the webrtc library has public include directories
3-
# we will use those link directories when building `main`
4-
#target_link_libraries(main LINK_PUBLIC webrtc)
51

62
include_directories(PUBLIC ../include)
73

84
include_directories(PUBLIC ../src)
9-
include_directories(PUBLIC ../webrtc)
105

116
# MacOS requirements
127
include_directories(PUBLIC /usr/local/include)
@@ -15,8 +10,6 @@ link_directories(/usr/local/lib)
1510
add_compile_options(-fsanitize=address,fuzzer,undefined)
1611
add_link_options(-fsanitize=address,fuzzer,undefined)
1712

18-
#target_include_directories(h264_bitstream_parser_fuzzer PUBLIC /usr/local/include ${CMAKE_CURRENT_SOURCE_DIR} webrtc)
19-
2013
function(add_fuzzer TARGET SOURCE)
2114
if(NOT WIN32)
2215
add_executable(${TARGET} ${SOURCE})

fuzz/h264_bitstream_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
#include "h264_bitstream_parser.h"
1010
#include "h264_bitstream_parser_state.h"
1111
#include "h264_common.h"
12-
#include "rtc_base/arraysize.h"
13-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1413

1514

1615
// libfuzzer infra to test the fuzz target

fuzz/h264_common_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_common.h"
1010
#include <vector>
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_dec_ref_pic_marking_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_dec_ref_pic_marking_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_hrd_parameters_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_hrd_parameters_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_nal_unit_header_svc_extension_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
// Do not edit directly.
88

99
#include "h264_nal_unit_header_svc_extension_parser.h"
10-
#include "rtc_base/arraysize.h"
11-
#include "rtc_base/bit_buffer.h"
10+
#include "rtc_common.h"
1211

1312

1413
// libfuzzer infra to test the fuzz target

fuzz/h264_nal_unit_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
#include "h264_nal_unit_parser.h"
1010
#include "h264_bitstream_parser_state.h"
1111
#include "h264_common.h"
12-
#include "rtc_base/arraysize.h"
13-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1413

1514

1615
// libfuzzer infra to test the fuzz target

fuzz/h264_pps_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_pps_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_pred_weight_table_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_pred_weight_table_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_prefix_nal_unit_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_prefix_nal_unit_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_ref_pic_list_modification_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_ref_pic_list_modification_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_rtp_fua_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_rtp_fua_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_rtp_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_rtp_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_rtp_single_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
#include "h264_rtp_single_parser.h"
1010
#include <vector>
1111
#include "h264_common.h"
12-
#include "rtc_base/arraysize.h"
13-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1413

1514

1615
// libfuzzer infra to test the fuzz target

fuzz/h264_rtp_stapa_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_rtp_stapa_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_slice_header_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
#include "h264_pred_weight_table_parser.h"
1515
#include "h264_ref_pic_list_modification_parser.h"
1616
#include "h264_sps_parser.h"
17-
#include "rtc_base/arraysize.h"
18-
#include "rtc_base/bit_buffer.h"
17+
#include "rtc_common.h"
1918

2019

2120
// libfuzzer infra to test the fuzz target

fuzz/h264_slice_layer_without_partitioning_rbsp_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
#include "h264_pred_weight_table_parser.h"
1515
#include "h264_ref_pic_list_modification_parser.h"
1616
#include "h264_sps_parser.h"
17-
#include "rtc_base/arraysize.h"
18-
#include "rtc_base/bit_buffer.h"
17+
#include "rtc_common.h"
1918

2019

2120
// libfuzzer infra to test the fuzz target

fuzz/h264_sps_extension_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
#include "h264_sps_extension_parser.h"
1010
#include "h264_common.h"
1111
#include "h264_sps_parser.h"
12-
#include "rtc_base/arraysize.h"
13-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1413

1514

1615
// libfuzzer infra to test the fuzz target

fuzz/h264_sps_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_sps_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_sps_svc_extension_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_sps_svc_extension_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

fuzz/h264_subset_sps_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
#include "h264_subset_sps_parser.h"
1010
#include "h264_common.h"
1111
#include "h264_sps_parser.h"
12-
#include "rtc_base/arraysize.h"
13-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1413

1514

1615
// libfuzzer infra to test the fuzz target

fuzz/h264_vui_parameters_parser_fuzzer.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88

99
#include "h264_vui_parameters_parser.h"
1010
#include "h264_common.h"
11-
#include "rtc_base/arraysize.h"
12-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1312

1413

1514
// libfuzzer infra to test the fuzz target

include/h264_bitstream_parser.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include "h264_bitstream_parser_state.h"
1313
#include "h264_common.h"
1414
#include "h264_nal_unit_parser.h"
15-
#include "rtc_base/bit_buffer.h"
15+
#include "rtc_common.h"
1616

1717
namespace h264nal {
1818

include/h264_common.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <memory>
1111
#include <vector>
1212

13-
#include "rtc_base/bit_buffer.h"
13+
#include "rtc_common.h"
1414

1515
namespace h264nal {
1616

@@ -98,10 +98,10 @@ enum SvcSliceType : uint8_t {
9898
std::vector<uint8_t> UnescapeRbsp(const uint8_t *data, size_t length);
9999

100100
// Syntax functions and descriptors) (Section 7.2)
101-
bool byte_aligned(rtc::BitBuffer *bit_buffer);
102-
int get_current_offset(rtc::BitBuffer *bit_buffer);
103-
bool more_rbsp_data(rtc::BitBuffer *bit_buffer);
104-
bool rbsp_trailing_bits(rtc::BitBuffer *bit_buffer);
101+
bool byte_aligned(BitBuffer *bit_buffer);
102+
int get_current_offset(BitBuffer *bit_buffer);
103+
bool more_rbsp_data(BitBuffer *bit_buffer);
104+
bool rbsp_trailing_bits(BitBuffer *bit_buffer);
105105

106106
#if defined(FDUMP_DEFINE)
107107
// fdump() indentation help
@@ -130,7 +130,7 @@ class NaluChecksum {
130130
// maximum length (in bytes)
131131
const static int kMaxLength = 32;
132132
static std::shared_ptr<NaluChecksum> GetNaluChecksum(
133-
rtc::BitBuffer *bit_buffer) noexcept;
133+
BitBuffer *bit_buffer) noexcept;
134134
void fdump(char *output, int output_len) const;
135135
const char *GetChecksum() { return checksum; };
136136
int GetLength() { return length; };

include/h264_dec_ref_pic_marking_parser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <memory>
1010
#include <vector>
1111

12-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1313

1414
namespace h264nal {
1515

@@ -50,7 +50,7 @@ class H264DecRefPicMarkingParser {
5050
static std::unique_ptr<DecRefPicMarkingState> ParseDecRefPicMarking(
5151
const uint8_t* data, size_t length, uint32_t nal_unit_type) noexcept;
5252
static std::unique_ptr<DecRefPicMarkingState> ParseDecRefPicMarking(
53-
rtc::BitBuffer* bit_buffer, uint32_t nal_unit_type) noexcept;
53+
BitBuffer* bit_buffer, uint32_t nal_unit_type) noexcept;
5454
};
5555

5656
} // namespace h264nal

include/h264_hrd_parameters_parser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <memory>
1010
#include <vector>
1111

12-
#include "rtc_base/bit_buffer.h"
12+
#include "rtc_common.h"
1313

1414
namespace h264nal {
1515

@@ -54,7 +54,7 @@ class H264HrdParametersParser {
5454
static std::unique_ptr<HrdParametersState> ParseHrdParameters(
5555
const uint8_t* data, size_t length) noexcept;
5656
static std::unique_ptr<HrdParametersState> ParseHrdParameters(
57-
rtc::BitBuffer* bit_buffer) noexcept;
57+
BitBuffer* bit_buffer) noexcept;
5858
};
5959

6060
} // namespace h264nal

include/h264_nal_unit_header_parser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include "h264_common.h"
1212
#include "h264_nal_unit_header_svc_extension_parser.h"
13-
#include "rtc_base/bit_buffer.h"
13+
#include "rtc_common.h"
1414

1515
namespace h264nal {
1616

@@ -47,7 +47,7 @@ class H264NalUnitHeaderParser {
4747
static std::unique_ptr<NalUnitHeaderState> ParseNalUnitHeader(
4848
const uint8_t* data, size_t length) noexcept;
4949
static std::unique_ptr<NalUnitHeaderState> ParseNalUnitHeader(
50-
rtc::BitBuffer* bit_buffer) noexcept;
50+
BitBuffer* bit_buffer) noexcept;
5151
// Parses nalu type from the given buffer
5252
static bool GetNalUnitType(const uint8_t* data, const size_t length,
5353
NalUnitType& naluType) noexcept;

include/h264_nal_unit_header_svc_extension_parser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#include <memory>
1010

11-
#include "rtc_base/bit_buffer.h"
11+
#include "rtc_common.h"
1212

1313
namespace h264nal {
1414

@@ -48,7 +48,7 @@ class H264NalUnitHeaderSvcExtensionParser {
4848
static std::unique_ptr<NalUnitHeaderSvcExtensionState>
4949
ParseNalUnitHeaderSvcExtension(const uint8_t* data, size_t length) noexcept;
5050
static std::unique_ptr<NalUnitHeaderSvcExtensionState>
51-
ParseNalUnitHeaderSvcExtension(rtc::BitBuffer* bit_buffer) noexcept;
51+
ParseNalUnitHeaderSvcExtension(BitBuffer* bit_buffer) noexcept;
5252
};
5353

5454
} // namespace h264nal

include/h264_nal_unit_parser.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include "h264_common.h"
1313
#include "h264_nal_unit_header_parser.h"
1414
#include "h264_nal_unit_payload_parser.h"
15-
#include "rtc_base/bit_buffer.h"
15+
#include "rtc_common.h"
1616

1717
namespace h264nal {
1818

@@ -65,7 +65,7 @@ class H264NalUnitParser {
6565
struct H264BitstreamParserState* bitstream_parser_state,
6666
ParsingOptions parsing_options) noexcept;
6767
static std::unique_ptr<NalUnitState> ParseNalUnit(
68-
rtc::BitBuffer* bit_buffer,
68+
BitBuffer* bit_buffer,
6969
struct H264BitstreamParserState* bitstream_parser_state,
7070
ParsingOptions parsing_options) noexcept;
7171
};

0 commit comments

Comments
 (0)