blob: 074413a8696ce316fb10a6addb18fda0c9e38301 [file] [log] [blame]
danilchapf8385ad2015-11-27 05:36:09 -08001/*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "modules/rtp_rtcp/source/rtcp_packet/psfb.h"
danilchapf8385ad2015-11-27 05:36:09 -080012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "modules/rtp_rtcp/source/byte_io.h"
danilchapf8385ad2015-11-27 05:36:09 -080014
15namespace webrtc {
16namespace rtcp {
danilchap0fc37d72016-05-31 01:36:37 -070017constexpr uint8_t Psfb::kPacketType;
18constexpr size_t Psfb::kCommonFeedbackLength;
danilchapf8385ad2015-11-27 05:36:09 -080019// RFC 4585: Feedback format.
20//
21// Common packet format:
22//
23// 0 1 2 3
24// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
25// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
26// |V=2|P| FMT | PT | length |
27// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28// 0 | SSRC of packet sender |
29// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30// 4 | SSRC of media source |
31// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
32// : Feedback Control Information (FCI) :
33// : :
34
35void Psfb::ParseCommonFeedback(const uint8_t* payload) {
36 sender_ssrc_ = ByteReader<uint32_t>::ReadBigEndian(&payload[0]);
37 media_ssrc_ = ByteReader<uint32_t>::ReadBigEndian(&payload[4]);
38}
39
40void Psfb::CreateCommonFeedback(uint8_t* payload) const {
41 ByteWriter<uint32_t>::WriteBigEndian(&payload[0], sender_ssrc_);
42 ByteWriter<uint32_t>::WriteBigEndian(&payload[4], media_ssrc_);
43}
44
45} // namespace rtcp
46} // namespace webrtc