blob: 17ee4b941b9ce0f41bf54fac0aea81f625accb3d [file]
/*
* Copyright (c) 2026 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_SFRAME_DESCRIPTOR_H_
#define MODULES_RTP_RTCP_SOURCE_SFRAME_DESCRIPTOR_H_
namespace webrtc {
// Encryption granularity signaled by the T bit in the SFrame descriptor.
// See draft-ietf-avtcore-rtp-sframe §4.
enum class SframeEncryptionLevel {
// T=0: per-frame encryption (raw). The entire frame is encrypted as one
// SFrame ciphertext.
kFrame,
// T=1: per-packet encryption. Each RTP packet carries its own SFrame
// ciphertext.
kPacket,
};
// SFrame payload descriptor byte (first byte of each SFrame RTP payload).
// See draft-ietf-avtcore-rtp-sframe §4.
//
// 0 1 2 3 4 5 6 7
// +-+-+-+-+-+-+-+-+
// |S|E|T|x x x x x|
// +-+-+-+-+-+-+-+-+
//
// S: Start bit — 1 if this is the first fragment of the SFrame frame.
// E: End bit — 1 if this is the last fragment of the SFrame frame.
// T: Type bit — 0 for raw (per-frame SFrame), 1 for packetized (per-packet).
// x: Reserved, must be 0.
struct SFrameDescriptor {
bool start = false;
bool end = false;
SframeEncryptionLevel encryption_level =
SframeEncryptionLevel::kFrame; // T bit
};
} // namespace webrtc
#endif // MODULES_RTP_RTCP_SOURCE_SFRAME_DESCRIPTOR_H_