Index: webrtc/common_types.h |
diff --git a/webrtc/common_types.h b/webrtc/common_types.h |
index 4034d54ce6c32ef6d5beef837b81fa6a0c905f10..fb54a64282388c3547431ac3c8081142333eca0a 100644 |
--- a/webrtc/common_types.h |
+++ b/webrtc/common_types.h |
@@ -730,6 +730,57 @@ struct PlayoutDelay { |
int max_ms; |
}; |
+// For Frame Marking RTP Header Extension: |
+// https://tools.ietf.org/html/draft-ietf-avtext-framemarking-05 |
+// This extensions provides meta-information about the RTP streams outside the |
+// encrypted media payload, an RTP switch can do codec-agnostic |
+// selective forwarding without decrypting the payload |
+// o S: Start of Frame (1 bit) - MUST be 1 in the first packet in a |
+// frame; otherwise MUST be 0. |
+// o E: End of Frame (1 bit) - MUST be 1 in the last packet in a frame; |
+// otherwise MUST be 0. |
+// o I: Independent Frame (1 bit) - MUST be 1 for frames that can be |
+// decoded independent of prior frames, e.g. intra-frame, VPX |
+// keyframe, H.264 IDR [RFC6184], H.265 IDR/CRA/BLA/RAP [RFC7798]; |
+// otherwise MUST be 0. |
+// o D: Discardable Frame (1 bit) - MUST be 1 for frames that can be |
+// discarded, and still provide a decodable media stream; otherwise |
+// MUST be 0. |
+// o B: Base Layer Sync (1 bit) - MUST be 1 if this frame only depends |
+// on the base layer; otherwise MUST be 0. If no scalability is |
+// used, this MUST be 0. |
+// o TID: Temporal ID (3 bits) - The base temporal layer starts with 0, |
+// and increases with 1 for each higher temporal layer/sub-layer. If |
+// no scalability is used, this MUST be 0. |
+// o LID: Layer ID (8 bits) - Identifies the spatial and quality layer |
+// encoded. If no scalability is used, this MUST be 0 or omitted. |
+// When omitted, TL0PICIDX MUST also be omitted. |
+// o TL0PICIDX: Temporal Layer 0 Picture Index (8 bits) - Running index |
+// of base temporal layer 0 frames when TID is 0. When TID is not 0, |
+// this indicates a dependency on the given index. If no scalability |
+// is used, this MUST be 0 or omitted. When omitted, LID MUST also |
+// be omitted. |
+struct FrameMarks { |
+ FrameMarks() |
+ : start_of_frame(false), |
+ end_of_frame(false), |
+ independent(false), |
+ discardable(false), |
+ base_layer_sync(false), |
+ temporal_layer_id(0), |
+ layer_id(0), |
+ tl0_pic_idx(0) {} |
+ |
+ bool start_of_frame; |
+ bool end_of_frame; |
+ bool independent; |
+ bool discardable; |
+ bool base_layer_sync; |
+ uint8_t temporal_layer_id; |
+ uint8_t layer_id; |
+ int16_t tl0_pic_idx; |
+}; |
+ |
// Class to represent the value of RTP header extensions that are |
// variable-length strings (e.g., RtpStreamId and RtpMid). |
// Unlike std::string, it can be copied with memcpy and cleared with memset. |
@@ -820,6 +871,11 @@ struct RTPHeaderExtension { |
// For identifying the media section used to interpret this RTP packet. See |
// https://tools.ietf.org/html/draft-ietf-mmusic-sdp-bundle-negotiation-38 |
Mid mid; |
+ |
+ // For Frame Marking RTP Header Extension: |
+ // https://tools.ietf.org/html/draft-ietf-avtext-framemarking-05 |
+ bool has_frame_marks; |
+ FrameMarks frame_marks; |
}; |
struct RTPHeader { |