| Index: webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| index 378ef130d1a27811137462ace01ece5ca2fe4e19..9757e52e80b6545ed159150d615501e15b04ffc0 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc
|
| @@ -27,75 +27,61 @@
|
| #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h"
|
|
|
| namespace webrtc {
|
| +
|
| enum { REDForFECHeaderLength = 1 };
|
|
|
| -RTPSenderVideo::RTPSenderVideo(Clock* clock, RTPSenderInterface* rtpSender)
|
| - : _rtpSender(*rtpSender),
|
| +RTPSenderVideo::RTPSenderVideo(Clock* clock, RTPSenderInterface* rtp_sender)
|
| + : rtp_sender_(rtp_sender),
|
| clock_(clock),
|
| - _videoType(kRtpVideoGeneric),
|
| - _retransmissionSettings(kRetransmitBaseLayer),
|
| // Generic FEC
|
| - fec_(),
|
| - fec_enabled_(false),
|
| - red_payload_type_(0),
|
| - fec_payload_type_(0),
|
| - delta_fec_params_(),
|
| - key_fec_params_(),
|
| producer_fec_(&fec_),
|
| fec_bitrate_(1000, RateStatistics::kBpsScale),
|
| - video_bitrate_(1000, RateStatistics::kBpsScale) {
|
| - memset(&delta_fec_params_, 0, sizeof(delta_fec_params_));
|
| - memset(&key_fec_params_, 0, sizeof(key_fec_params_));
|
| - delta_fec_params_.max_fec_frames = key_fec_params_.max_fec_frames = 1;
|
| - delta_fec_params_.fec_mask_type = key_fec_params_.fec_mask_type =
|
| - kFecMaskRandom;
|
| -}
|
| + video_bitrate_(1000, RateStatistics::kBpsScale) {}
|
|
|
| -RTPSenderVideo::~RTPSenderVideo() {
|
| -}
|
| +RTPSenderVideo::~RTPSenderVideo() {}
|
|
|
| -void RTPSenderVideo::SetVideoCodecType(RtpVideoCodecTypes videoType) {
|
| - _videoType = videoType;
|
| +void RTPSenderVideo::SetVideoCodecType(RtpVideoCodecTypes video_type) {
|
| + video_type_ = video_type;
|
| }
|
|
|
| RtpVideoCodecTypes RTPSenderVideo::VideoCodecType() const {
|
| - return _videoType;
|
| + return video_type_;
|
| }
|
|
|
| // Static.
|
| RtpUtility::Payload* RTPSenderVideo::CreateVideoPayload(
|
| - const char payloadName[RTP_PAYLOAD_NAME_SIZE],
|
| - const int8_t payloadType) {
|
| - RtpVideoCodecTypes videoType = kRtpVideoGeneric;
|
| - if (RtpUtility::StringCompare(payloadName, "VP8", 3)) {
|
| - videoType = kRtpVideoVp8;
|
| - } else if (RtpUtility::StringCompare(payloadName, "VP9", 3)) {
|
| - videoType = kRtpVideoVp9;
|
| - } else if (RtpUtility::StringCompare(payloadName, "H264", 4)) {
|
| - videoType = kRtpVideoH264;
|
| - } else if (RtpUtility::StringCompare(payloadName, "I420", 4)) {
|
| - videoType = kRtpVideoGeneric;
|
| + const char payload_name[RTP_PAYLOAD_NAME_SIZE],
|
| + int8_t payload_type) {
|
| + RtpVideoCodecTypes video_type = kRtpVideoGeneric;
|
| + if (RtpUtility::StringCompare(payload_name, "VP8", 3)) {
|
| + video_type = kRtpVideoVp8;
|
| + } else if (RtpUtility::StringCompare(payload_name, "VP9", 3)) {
|
| + video_type = kRtpVideoVp9;
|
| + } else if (RtpUtility::StringCompare(payload_name, "H264", 4)) {
|
| + video_type = kRtpVideoH264;
|
| + } else if (RtpUtility::StringCompare(payload_name, "I420", 4)) {
|
| + video_type = kRtpVideoGeneric;
|
| } else {
|
| - videoType = kRtpVideoGeneric;
|
| + video_type = kRtpVideoGeneric;
|
| }
|
| RtpUtility::Payload* payload = new RtpUtility::Payload();
|
| payload->name[RTP_PAYLOAD_NAME_SIZE - 1] = 0;
|
| - strncpy(payload->name, payloadName, RTP_PAYLOAD_NAME_SIZE - 1);
|
| - payload->typeSpecific.Video.videoCodecType = videoType;
|
| + strncpy(payload->name, payload_name, RTP_PAYLOAD_NAME_SIZE - 1);
|
| + payload->typeSpecific.Video.videoCodecType = video_type;
|
| payload->audio = false;
|
| return payload;
|
| }
|
|
|
| void RTPSenderVideo::SendVideoPacket(uint8_t* data_buffer,
|
| - const size_t payload_length,
|
| - const size_t rtp_header_length,
|
| + size_t payload_length,
|
| + size_t rtp_header_length,
|
| uint16_t seq_num,
|
| - const uint32_t capture_timestamp,
|
| + uint32_t capture_timestamp,
|
| int64_t capture_time_ms,
|
| StorageType storage) {
|
| - if (_rtpSender.SendToNetwork(data_buffer, payload_length, rtp_header_length,
|
| - capture_time_ms, storage,
|
| - RtpPacketSender::kLowPriority) == 0) {
|
| + if (rtp_sender_->SendToNetwork(data_buffer, payload_length, rtp_header_length,
|
| + capture_time_ms, storage,
|
| + RtpPacketSender::kLowPriority) == 0) {
|
| rtc::CritScope cs(&stats_crit_);
|
| video_bitrate_.Update(payload_length + rtp_header_length,
|
| clock_->TimeInMilliseconds());
|
| @@ -108,10 +94,10 @@ void RTPSenderVideo::SendVideoPacket(uint8_t* data_buffer,
|
| }
|
|
|
| void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| - const size_t payload_length,
|
| - const size_t rtp_header_length,
|
| + size_t payload_length,
|
| + size_t rtp_header_length,
|
| uint16_t media_seq_num,
|
| - const uint32_t capture_timestamp,
|
| + uint32_t capture_timestamp,
|
| int64_t capture_time_ms,
|
| StorageType media_packet_storage,
|
| bool protect) {
|
| @@ -131,16 +117,16 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| uint16_t num_fec_packets = producer_fec_.NumAvailableFecPackets();
|
| if (num_fec_packets > 0) {
|
| next_fec_sequence_number =
|
| - _rtpSender.AllocateSequenceNumber(num_fec_packets);
|
| + rtp_sender_->AllocateSequenceNumber(num_fec_packets);
|
| fec_packets = producer_fec_.GetFecPackets(
|
| red_payload_type_, fec_payload_type_, next_fec_sequence_number,
|
| rtp_header_length);
|
| RTC_DCHECK_EQ(num_fec_packets, fec_packets.size());
|
| - if (_retransmissionSettings & kRetransmitFECPackets)
|
| + if (retransmission_settings_ & kRetransmitFECPackets)
|
| fec_storage = kAllowRetransmission;
|
| }
|
| }
|
| - if (_rtpSender.SendToNetwork(
|
| + if (rtp_sender_->SendToNetwork(
|
| red_packet->data(), red_packet->length() - rtp_header_length,
|
| rtp_header_length, capture_time_ms, media_packet_storage,
|
| RtpPacketSender::kLowPriority) == 0) {
|
| @@ -153,7 +139,7 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| LOG(LS_WARNING) << "Failed to send RED packet " << media_seq_num;
|
| }
|
| for (RedPacket* fec_packet : fec_packets) {
|
| - if (_rtpSender.SendToNetwork(
|
| + if (rtp_sender_->SendToNetwork(
|
| fec_packet->data(), fec_packet->length() - rtp_header_length,
|
| rtp_header_length, capture_time_ms, fec_storage,
|
| RtpPacketSender::kLowPriority) == 0) {
|
| @@ -171,28 +157,25 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
| }
|
| }
|
|
|
| -void RTPSenderVideo::SetGenericFECStatus(const bool enable,
|
| - const uint8_t payloadTypeRED,
|
| - const uint8_t payloadTypeFEC) {
|
| - RTC_DCHECK(!enable || payloadTypeRED > 0);
|
| +void RTPSenderVideo::SetGenericFECStatus(bool enable,
|
| + uint8_t payload_type_red,
|
| + uint8_t payload_type_fec) {
|
| + RTC_DCHECK(!enable || payload_type_red > 0);
|
| rtc::CritScope cs(&crit_);
|
| fec_enabled_ = enable;
|
| - red_payload_type_ = payloadTypeRED;
|
| - fec_payload_type_ = payloadTypeFEC;
|
| - memset(&delta_fec_params_, 0, sizeof(delta_fec_params_));
|
| - memset(&key_fec_params_, 0, sizeof(key_fec_params_));
|
| - delta_fec_params_.max_fec_frames = key_fec_params_.max_fec_frames = 1;
|
| - delta_fec_params_.fec_mask_type = key_fec_params_.fec_mask_type =
|
| - kFecMaskRandom;
|
| + red_payload_type_ = payload_type_red;
|
| + fec_payload_type_ = payload_type_fec;
|
| + delta_fec_params_ = FecProtectionParams{0, 1, kFecMaskRandom};
|
| + key_fec_params_ = FecProtectionParams{0, 1, kFecMaskRandom};
|
| }
|
|
|
| void RTPSenderVideo::GenericFECStatus(bool* enable,
|
| - uint8_t* payloadTypeRED,
|
| - uint8_t* payloadTypeFEC) const {
|
| + uint8_t* payload_type_red,
|
| + uint8_t* payload_type_fec) const {
|
| rtc::CritScope cs(&crit_);
|
| *enable = fec_enabled_;
|
| - *payloadTypeRED = red_payload_type_;
|
| - *payloadTypeFEC = fec_payload_type_;
|
| + *payload_type_red = red_payload_type_;
|
| + *payload_type_fec = fec_payload_type_;
|
| }
|
|
|
| size_t RTPSenderVideo::FECPacketOverhead() const {
|
| @@ -205,7 +188,7 @@ size_t RTPSenderVideo::FECPacketOverhead() const {
|
| // from an FEC viewpoint, they are part of the payload to be protected.
|
| // (The base RTP header is already protected by the FEC header.)
|
| return ForwardErrorCorrection::PacketOverhead() + REDForFECHeaderLength +
|
| - (_rtpSender.RtpHeaderLength() - kRtpHeaderSize);
|
| + (rtp_sender_->RtpHeaderLength() - kRtpHeaderSize);
|
| }
|
| if (fec_enabled_)
|
| overhead += ForwardErrorCorrection::PacketOverhead();
|
| @@ -223,22 +206,22 @@ void RTPSenderVideo::SetFecParameters(const FecProtectionParams* delta_params,
|
| }
|
| }
|
|
|
| -int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| - const FrameType frameType,
|
| - const int8_t payloadType,
|
| - const uint32_t captureTimeStamp,
|
| +int32_t RTPSenderVideo::SendVideo(RtpVideoCodecTypes video_type,
|
| + FrameType frame_type,
|
| + int8_t payload_type,
|
| + uint32_t capture_timestamp,
|
| int64_t capture_time_ms,
|
| - const uint8_t* payloadData,
|
| - const size_t payloadSize,
|
| + const uint8_t* payload_data,
|
| + size_t payload_size,
|
| const RTPFragmentationHeader* fragmentation,
|
| const RTPVideoHeader* video_header) {
|
| - if (payloadSize == 0) {
|
| + if (payload_size == 0) {
|
| return -1;
|
| }
|
|
|
| std::unique_ptr<RtpPacketizer> packetizer(RtpPacketizer::Create(
|
| - videoType, _rtpSender.MaxDataPayloadLength(),
|
| - video_header ? &(video_header->codecHeader) : nullptr, frameType));
|
| + video_type, rtp_sender_->MaxDataPayloadLength(),
|
| + video_header ? &(video_header->codecHeader) : nullptr, frame_type));
|
|
|
| StorageType storage;
|
| int red_payload_type;
|
| @@ -246,9 +229,9 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| {
|
| rtc::CritScope cs(&crit_);
|
| FecProtectionParams* fec_params =
|
| - frameType == kVideoFrameKey ? &key_fec_params_ : &delta_fec_params_;
|
| + frame_type == kVideoFrameKey ? &key_fec_params_ : &delta_fec_params_;
|
| producer_fec_.SetFecParameters(fec_params, 0);
|
| - storage = packetizer->GetStorageType(_retransmissionSettings);
|
| + storage = packetizer->GetStorageType(retransmission_settings_);
|
| red_payload_type = red_payload_type_;
|
| }
|
|
|
| @@ -256,18 +239,18 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| // with pending rotation.
|
| bool video_rotation_active = false;
|
| if (video_header && video_header->rotation != kVideoRotation_0) {
|
| - video_rotation_active = _rtpSender.ActivateCVORtpHeaderExtension();
|
| + video_rotation_active = rtp_sender_->ActivateCVORtpHeaderExtension();
|
| }
|
|
|
| - int rtp_header_length = _rtpSender.RtpHeaderLength();
|
| - size_t payload_bytes_to_send = payloadSize;
|
| - const uint8_t* data = payloadData;
|
| + int rtp_header_length = rtp_sender_->RtpHeaderLength();
|
| + size_t payload_bytes_to_send = payload_size;
|
| + const uint8_t* data = payload_data;
|
|
|
| // TODO(changbin): we currently don't support to configure the codec to
|
| // output multiple partitions for VP8. Should remove below check after the
|
| // issue is fixed.
|
| const RTPFragmentationHeader* frag =
|
| - (videoType == kRtpVideoVp8) ? NULL : fragmentation;
|
| + (video_type == kRtpVideoVp8) ? NULL : fragmentation;
|
|
|
| packetizer->SetPayloadData(data, payload_bytes_to_send, frag);
|
|
|
| @@ -283,8 +266,8 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| }
|
|
|
| // Write RTP header.
|
| - _rtpSender.BuildRTPheader(
|
| - dataBuffer, payloadType, last, captureTimeStamp, capture_time_ms);
|
| + rtp_sender_->BuildRtpHeader(dataBuffer, payload_type, last,
|
| + capture_timestamp, capture_time_ms);
|
|
|
| // According to
|
| // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/
|
| @@ -298,7 +281,7 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| // value sent.
|
| // Here we are adding it to every packet of every frame at this point.
|
| if (!video_header) {
|
| - RTC_DCHECK(!_rtpSender.IsRtpHeaderExtensionRegistered(
|
| + RTC_DCHECK(!rtp_sender_->IsRtpHeaderExtensionRegistered(
|
| kRtpExtensionVideoRotation));
|
| } else if (video_rotation_active) {
|
| // Checking whether CVO header extension is registered will require taking
|
| @@ -306,21 +289,21 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| // TODO(guoweis): For now, all packets sent will carry the CVO such that
|
| // the RTP header length is consistent, although the receiver side will
|
| // only exam the packets with marker bit set.
|
| - size_t packetSize = payloadSize + rtp_header_length;
|
| + size_t packetSize = payload_size + rtp_header_length;
|
| RtpUtility::RtpHeaderParser rtp_parser(dataBuffer, packetSize);
|
| RTPHeader rtp_header;
|
| rtp_parser.Parse(&rtp_header);
|
| - _rtpSender.UpdateVideoRotation(dataBuffer, packetSize, rtp_header,
|
| - video_header->rotation);
|
| + rtp_sender_->UpdateVideoRotation(dataBuffer, packetSize, rtp_header,
|
| + video_header->rotation);
|
| }
|
| if (red_payload_type != 0) {
|
| SendVideoPacketAsRed(dataBuffer, payload_bytes_in_packet,
|
| - rtp_header_length, _rtpSender.SequenceNumber(),
|
| - captureTimeStamp, capture_time_ms, storage,
|
| + rtp_header_length, rtp_sender_->SequenceNumber(),
|
| + capture_timestamp, capture_time_ms, storage,
|
| packetizer->GetProtectionType() == kProtectedPacket);
|
| } else {
|
| SendVideoPacket(dataBuffer, payload_bytes_in_packet, rtp_header_length,
|
| - _rtpSender.SequenceNumber(), captureTimeStamp,
|
| + rtp_sender_->SequenceNumber(), capture_timestamp,
|
| capture_time_ms, storage);
|
| }
|
|
|
| @@ -337,8 +320,8 @@ int32_t RTPSenderVideo::SendVideo(const RtpVideoCodecTypes videoType,
|
| first = false;
|
| }
|
|
|
| - TRACE_EVENT_ASYNC_END1(
|
| - "webrtc", "Video", capture_time_ms, "timestamp", _rtpSender.Timestamp());
|
| + TRACE_EVENT_ASYNC_END1("webrtc", "Video", capture_time_ms, "timestamp",
|
| + rtp_sender_->Timestamp());
|
| return 0;
|
| }
|
|
|
| @@ -354,12 +337,12 @@ uint32_t RTPSenderVideo::FecOverheadRate() const {
|
|
|
| int RTPSenderVideo::SelectiveRetransmissions() const {
|
| rtc::CritScope cs(&crit_);
|
| - return _retransmissionSettings;
|
| + return retransmission_settings_;
|
| }
|
|
|
| void RTPSenderVideo::SetSelectiveRetransmissions(uint8_t settings) {
|
| rtc::CritScope cs(&crit_);
|
| - _retransmissionSettings = settings;
|
| + retransmission_settings_ = settings;
|
| }
|
|
|
| } // namespace webrtc
|
|
|