webrtc/call/flexfec_receive_stream.h
Tommi 43b15c3fc0 Add SetPayloadType to FlexfecReceiveStream.
This reduces the number of times we recreate video receive streams
and prepares for not having to do that for flexfec streams and avoid
having to recreate a video receive stream when flexfec config changes.

Bug: webrtc:11993
Change-Id: I11134b6a72eb162623ebbc12521d409da8616107
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/261941
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37641}
2022-07-28 21:24:50 +00:00

76 lines
2.3 KiB
C++

/*
* Copyright (c) 2016 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 CALL_FLEXFEC_RECEIVE_STREAM_H_
#define CALL_FLEXFEC_RECEIVE_STREAM_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "api/call/transport.h"
#include "api/rtp_headers.h"
#include "api/rtp_parameters.h"
#include "call/receive_stream.h"
#include "call/rtp_packet_sink_interface.h"
namespace webrtc {
class FlexfecReceiveStream : public RtpPacketSinkInterface,
public ReceiveStreamInterface {
public:
~FlexfecReceiveStream() override = default;
struct Config {
explicit Config(Transport* rtcp_send_transport);
Config(const Config&);
~Config();
std::string ToString() const;
// Returns true if all RTP information is available in order to
// enable receiving FlexFEC.
bool IsCompleteAndEnabled() const;
// Payload type for FlexFEC.
int payload_type = -1;
ReceiveStreamRtpConfig rtp;
// Vector containing a single element, corresponding to the SSRC of the
// media stream being protected by this FlexFEC stream. The vector MUST have
// size 1.
//
// TODO(brandtr): Update comment above when we support multistream
// protection.
std::vector<uint32_t> protected_media_ssrcs;
// What RTCP mode to use in the reports.
RtcpMode rtcp_mode = RtcpMode::kCompound;
// Transport for outgoing RTCP packets.
Transport* rtcp_send_transport = nullptr;
};
// TODO(tommi): FlexfecReceiveStream inherits from ReceiveStreamInterface,
// not VideoReceiveStreamInterface where there's also a SetRtcpMode method.
// Perhaps this should be in ReceiveStreamInterface and apply to audio streams
// as well (although there's no logic that would use it at present).
virtual void SetRtcpMode(RtcpMode mode) = 0;
// Called to change the payload type after initialization.
virtual void SetPayloadType(int payload_type) = 0;
virtual int payload_type() const = 0;
};
} // namespace webrtc
#endif // CALL_FLEXFEC_RECEIVE_STREAM_H_