/* * Copyright (c) 2021 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. */ #ifndef MODULES_RTP_RTCP_SOURCE_RTP_PACKETIZER_AV1_TEST_HELPER_H_ #define MODULES_RTP_RTCP_SOURCE_RTP_PACKETIZER_AV1_TEST_HELPER_H_ #include #include #include #include namespace webrtc { // All obu types offset by 3 to take correct position in the obu_header. constexpr uint8_t kAv1ObuTypeSequenceHeader = 1 << 3; constexpr uint8_t kAv1ObuTypeTemporalDelimiter = 2 << 3; constexpr uint8_t kAv1ObuTypeFrameHeader = 3 << 3; constexpr uint8_t kAv1ObuTypeTileGroup = 4 << 3; constexpr uint8_t kAv1ObuTypeMetadata = 5 << 3; constexpr uint8_t kAv1ObuTypeFrame = 6 << 3; constexpr uint8_t kAv1ObuTypeTileList = 8 << 3; constexpr uint8_t kAv1ObuExtensionPresentBit = 0b0'0000'100; constexpr uint8_t kAv1ObuSizePresentBit = 0b0'0000'010; constexpr uint8_t kAv1ObuExtensionS1T1 = 0b001'01'000; class Av1Obu { public: explicit Av1Obu(uint8_t obu_type); Av1Obu& WithExtension(uint8_t extension); Av1Obu& WithoutSize(); Av1Obu& WithPayload(std::vector payload); private: friend std::vector BuildAv1Frame(std::initializer_list obus); uint8_t header_; uint8_t extension_ = 0; std::vector payload_; }; std::vector BuildAv1Frame(std::initializer_list obus); } // namespace webrtc #endif // MODULES_RTP_RTCP_SOURCE_RTP_PACKETIZER_AV1_TEST_HELPER_H_