diff options
Diffstat (limited to 'third_party/libwebrtc/common_video/h265/h265_common.cc')
-rw-r--r-- | third_party/libwebrtc/common_video/h265/h265_common.cc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/third_party/libwebrtc/common_video/h265/h265_common.cc b/third_party/libwebrtc/common_video/h265/h265_common.cc new file mode 100644 index 0000000000..70864495bc --- /dev/null +++ b/third_party/libwebrtc/common_video/h265/h265_common.cc @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "common_video/h265/h265_common.h" + +#include "common_video/h264/h264_common.h" + +namespace webrtc { +namespace H265 { + +constexpr uint8_t kNaluTypeMask = 0x7E; + +std::vector<NaluIndex> FindNaluIndices(const uint8_t* buffer, + size_t buffer_size) { + std::vector<H264::NaluIndex> indices = + H264::FindNaluIndices(buffer, buffer_size); + std::vector<NaluIndex> results; + for (auto& index : indices) { + results.push_back( + {index.start_offset, index.payload_start_offset, index.payload_size}); + } + return results; +} + +NaluType ParseNaluType(uint8_t data) { + return static_cast<NaluType>((data & kNaluTypeMask) >> 1); +} + +std::vector<uint8_t> ParseRbsp(const uint8_t* data, size_t length) { + return H264::ParseRbsp(data, length); +} + +void WriteRbsp(const uint8_t* bytes, size_t length, rtc::Buffer* destination) { + H264::WriteRbsp(bytes, length, destination); +} + +uint32_t Log2Ceiling(uint32_t value) { + // When n == 0, we want the function to return -1. + // When n == 0, (n - 1) will underflow to 0xFFFFFFFF, which is + // why the statement below starts with (n ? 32 : -1). + return (value ? 32 : -1) - WebRtcVideo_CountLeadingZeros32(value - 1); +} + +} // namespace H265 +} // namespace webrtc |