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 3affb318aa70428e2a20489abf14d1cffdd3f397..56bb27e44f96b1ccce89ac0af1da071a42f52801 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), |
- _videoType(kRtpVideoGeneric), |
- _retransmissionSettings(kRetransmitBaseLayer), |
+RTPSenderVideo::RTPSenderVideo(Clock* clock, RTPSenderInterface* rtp_sender) |
+ : rtp_sender_(rtp_sender), |
// Generic FEC |
- fec_(), |
- fec_enabled_(false), |
- red_payload_type_(0), |
- fec_payload_type_(0), |
- delta_fec_params_(), |
- key_fec_params_(), |
producer_fec_(&fec_), |
- _fecOverheadRate(clock, NULL), |
- _videoBitrate(clock, NULL) { |
- 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; |
-} |
+ fec_overhead_rate_(clock, nullptr), |
+ video_bitrate_(clock, nullptr) {} |
-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) { |
- _videoBitrate.Update(payload_length + rtp_header_length); |
+ if (rtp_sender_->SendToNetwork(data_buffer, payload_length, rtp_header_length, |
+ capture_time_ms, storage, |
+ RtpPacketSender::kLowPriority) == 0) { |
+ video_bitrate_.Update(payload_length + rtp_header_length); |
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), |
"Video::PacketNormal", "timestamp", capture_timestamp, |
"seqnum", seq_num); |
@@ -105,10 +91,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) { |
@@ -128,20 +114,20 @@ 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) { |
- _videoBitrate.Update(red_packet->length()); |
+ video_bitrate_.Update(red_packet->length()); |
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), |
"Video::PacketRed", "timestamp", capture_timestamp, |
"seqnum", media_seq_num); |
@@ -149,11 +135,11 @@ 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) { |
- _fecOverheadRate.Update(fec_packet->length()); |
+ fec_overhead_rate_.Update(fec_packet->length()); |
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), |
"Video::PacketFec", "timestamp", capture_timestamp, |
"seqnum", next_fec_sequence_number); |
@@ -166,28 +152,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 { |
@@ -200,7 +183,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(); |
@@ -218,22 +201,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; |
@@ -241,9 +224,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_; |
} |
@@ -251,18 +234,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); |
@@ -278,8 +261,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/ |
@@ -293,7 +276,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 |
@@ -301,21 +284,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); |
} |
@@ -332,32 +315,32 @@ 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; |
} |
void RTPSenderVideo::ProcessBitrate() { |
- _videoBitrate.Process(); |
- _fecOverheadRate.Process(); |
+ video_bitrate_.Process(); |
+ fec_overhead_rate_.Process(); |
} |
uint32_t RTPSenderVideo::VideoBitrateSent() const { |
- return _videoBitrate.BitrateLast(); |
+ return video_bitrate_.BitrateLast(); |
} |
uint32_t RTPSenderVideo::FecOverheadRate() const { |
- return _fecOverheadRate.BitrateLast(); |
+ return fec_overhead_rate_.BitrateLast(); |
} |
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 |