blob: 384d8ba811c400483d4c5870d9e5344b9dbd4f38 [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;
Elad Alon74f0a512019-02-23 22:16:52 +010018constexpr uint8_t Psfb::kAfbMessageType;
danilchap0fc37d72016-05-31 01:36:37 -070019constexpr size_t Psfb::kCommonFeedbackLength;
danilchapf8385ad2015-11-27 05:36:09 -080020// RFC 4585: Feedback format.
21//
22// Common packet format:
23//
24// 0 1 2 3
25// 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
26// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
27// |V=2|P| FMT | PT | length |
28// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29// 0 | SSRC of packet sender |
30// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31// 4 | SSRC of media source |
32// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33// : Feedback Control Information (FCI) :
34// : :
35
36void Psfb::ParseCommonFeedback(const uint8_t* payload) {
Danil Chapovalovcbbfd082019-10-10 09:56:29 +020037 SetSenderSsrc(ByteReader<uint32_t>::ReadBigEndian(&payload[0]));
38 SetMediaSsrc(ByteReader<uint32_t>::ReadBigEndian(&payload[4]));
danilchapf8385ad2015-11-27 05:36:09 -080039}
40
41void Psfb::CreateCommonFeedback(uint8_t* payload) const {
Danil Chapovalovcbbfd082019-10-10 09:56:29 +020042 ByteWriter<uint32_t>::WriteBigEndian(&payload[0], sender_ssrc());
43 ByteWriter<uint32_t>::WriteBigEndian(&payload[4], media_ssrc());
danilchapf8385ad2015-11-27 05:36:09 -080044}
45
46} // namespace rtcp
47} // namespace webrtc