blob: 18097de330dfe0c77b8d215f19242f32f3aa9d05 [file] [log] [blame]
danilchapa8890a52015-12-22 03:43:04 -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/rtpfb.h"
danilchapa8890a52015-12-22 03:43:04 -080012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "modules/rtp_rtcp/source/byte_io.h"
danilchapa8890a52015-12-22 03:43:04 -080014
15namespace webrtc {
16namespace rtcp {
danilchap6ce1adc2016-05-26 05:29:14 -070017constexpr uint8_t Rtpfb::kPacketType;
danilchapa8890a52015-12-22 03:43:04 -080018// RFC 4585, Section 6.1: Feedback format.
19//
20// Common packet format:
21//
22// 0 1 2 3
23// 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
24// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
25// |V=2|P| FMT | PT | length |
26// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
27// 0 | SSRC of packet sender |
28// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
29// 4 | SSRC of media source |
30// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31// : Feedback Control Information (FCI) :
32// : :
33
34void Rtpfb::ParseCommonFeedback(const uint8_t* payload) {
Danil Chapovalovcbbfd082019-10-10 09:56:29 +020035 SetSenderSsrc(ByteReader<uint32_t>::ReadBigEndian(&payload[0]));
36 SetMediaSsrc(ByteReader<uint32_t>::ReadBigEndian(&payload[4]));
danilchapa8890a52015-12-22 03:43:04 -080037}
38
39void Rtpfb::CreateCommonFeedback(uint8_t* payload) const {
Danil Chapovalovcbbfd082019-10-10 09:56:29 +020040 ByteWriter<uint32_t>::WriteBigEndian(&payload[0], sender_ssrc());
41 ByteWriter<uint32_t>::WriteBigEndian(&payload[4], media_ssrc());
danilchapa8890a52015-12-22 03:43:04 -080042}
43
44} // namespace rtcp
45} // namespace webrtc