| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 1110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 ByteWriter<uint32_t>::WriteBigEndian(ptr, csrcs[i]); | 1121 ByteWriter<uint32_t>::WriteBigEndian(ptr, csrcs[i]); |
| 1122 ptr += 4; | 1122 ptr += 4; |
| 1123 } | 1123 } |
| 1124 header[0] = (header[0] & 0xf0) | csrcs.size(); | 1124 header[0] = (header[0] & 0xf0) | csrcs.size(); |
| 1125 | 1125 |
| 1126 // Update length of header. | 1126 // Update length of header. |
| 1127 rtp_header_length += sizeof(uint32_t) * csrcs.size(); | 1127 rtp_header_length += sizeof(uint32_t) * csrcs.size(); |
| 1128 } | 1128 } |
| 1129 | 1129 |
| 1130 uint16_t len = | 1130 uint16_t len = |
| 1131 BuildRTPHeaderExtension(header + rtp_header_length, marker_bit); | 1131 BuildRtpHeaderExtension(header + rtp_header_length, marker_bit); |
| 1132 if (len > 0) { | 1132 if (len > 0) { |
| 1133 header[0] |= 0x10; // Set extension bit. | 1133 header[0] |= 0x10; // Set extension bit. |
| 1134 rtp_header_length += len; | 1134 rtp_header_length += len; |
| 1135 } | 1135 } |
| 1136 return rtp_header_length; | 1136 return rtp_header_length; |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 int32_t RTPSender::BuildRTPheader(uint8_t* data_buffer, | 1139 int32_t RTPSender::BuildRTPheader(uint8_t* data_buffer, |
| 1140 int8_t payload_type, | 1140 int8_t payload_type, |
| 1141 bool marker_bit, | 1141 bool marker_bit, |
| 1142 uint32_t capture_timestamp, | 1142 uint32_t capture_timestamp, |
| 1143 int64_t capture_time_ms, | 1143 int64_t capture_time_ms, |
| 1144 bool timestamp_provided, | 1144 bool timestamp_provided, |
| 1145 bool inc_sequence_number) { | 1145 bool inc_sequence_number) { |
| 1146 return BuildRtpHeader(data_buffer, payload_type, marker_bit, |
| 1147 capture_timestamp, capture_time_ms); |
| 1148 } |
| 1149 |
| 1150 int32_t RTPSender::BuildRtpHeader(uint8_t* data_buffer, |
| 1151 int8_t payload_type, |
| 1152 bool marker_bit, |
| 1153 uint32_t capture_timestamp, |
| 1154 int64_t capture_time_ms) { |
| 1146 assert(payload_type >= 0); | 1155 assert(payload_type >= 0); |
| 1147 rtc::CritScope lock(&send_critsect_); | 1156 rtc::CritScope lock(&send_critsect_); |
| 1148 | 1157 |
| 1149 if (timestamp_provided) { | 1158 timestamp_ = start_timestamp_ + capture_timestamp; |
| 1150 timestamp_ = start_timestamp_ + capture_timestamp; | |
| 1151 } else { | |
| 1152 // Make a unique time stamp. | |
| 1153 // We can't inc by the actual time, since then we increase the risk of back | |
| 1154 // timing. | |
| 1155 timestamp_++; | |
| 1156 } | |
| 1157 last_timestamp_time_ms_ = clock_->TimeInMilliseconds(); | 1159 last_timestamp_time_ms_ = clock_->TimeInMilliseconds(); |
| 1158 uint32_t sequence_number = sequence_number_++; | 1160 uint32_t sequence_number = sequence_number_++; |
| 1159 capture_time_ms_ = capture_time_ms; | 1161 capture_time_ms_ = capture_time_ms; |
| 1160 last_packet_marker_bit_ = marker_bit; | 1162 last_packet_marker_bit_ = marker_bit; |
| 1161 return CreateRtpHeader(data_buffer, payload_type, ssrc_, marker_bit, | 1163 return CreateRtpHeader(data_buffer, payload_type, ssrc_, marker_bit, |
| 1162 timestamp_, sequence_number, csrcs_); | 1164 timestamp_, sequence_number, csrcs_); |
| 1163 } | 1165 } |
| 1164 | 1166 |
| 1165 uint16_t RTPSender::BuildRTPHeaderExtension(uint8_t* data_buffer, | 1167 uint16_t RTPSender::BuildRtpHeaderExtension(uint8_t* data_buffer, |
| 1166 bool marker_bit) const { | 1168 bool marker_bit) const { |
| 1167 if (rtp_header_extension_map_.Size() <= 0) { | 1169 if (rtp_header_extension_map_.Size() <= 0) { |
| 1168 return 0; | 1170 return 0; |
| 1169 } | 1171 } |
| 1170 // RTP header extension, RFC 3550. | 1172 // RTP header extension, RFC 3550. |
| 1171 // 0 1 2 3 | 1173 // 0 1 2 3 |
| 1172 // 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 | 1174 // 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 |
| 1173 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 1175 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 1174 // | defined by profile | length | | 1176 // | defined by profile | length | |
| 1175 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 1177 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1768 } | 1770 } |
| 1769 | 1771 |
| 1770 void RTPSender::SetGenericFECStatus(bool enable, | 1772 void RTPSender::SetGenericFECStatus(bool enable, |
| 1771 uint8_t payload_type_red, | 1773 uint8_t payload_type_red, |
| 1772 uint8_t payload_type_fec) { | 1774 uint8_t payload_type_fec) { |
| 1773 RTC_DCHECK(!audio_configured_); | 1775 RTC_DCHECK(!audio_configured_); |
| 1774 video_->SetGenericFECStatus(enable, payload_type_red, payload_type_fec); | 1776 video_->SetGenericFECStatus(enable, payload_type_red, payload_type_fec); |
| 1775 } | 1777 } |
| 1776 | 1778 |
| 1777 void RTPSender::GenericFECStatus(bool* enable, | 1779 void RTPSender::GenericFECStatus(bool* enable, |
| 1778 uint8_t* payload_type_red, | 1780 uint8_t* payload_type_red, |
| 1779 uint8_t* payload_type_fec) const { | 1781 uint8_t* payload_type_fec) const { |
| 1780 RTC_DCHECK(!audio_configured_); | 1782 RTC_DCHECK(!audio_configured_); |
| 1781 video_->GenericFECStatus(enable, payload_type_red, payload_type_fec); | 1783 video_->GenericFECStatus(enable, payload_type_red, payload_type_fec); |
| 1782 } | 1784 } |
| 1783 | 1785 |
| 1784 int32_t RTPSender::SetFecParameters( | 1786 int32_t RTPSender::SetFecParameters( |
| 1785 const FecProtectionParams *delta_params, | 1787 const FecProtectionParams *delta_params, |
| 1786 const FecProtectionParams *key_params) { | 1788 const FecProtectionParams *key_params) { |
| 1787 if (audio_configured_) { | 1789 if (audio_configured_) { |
| 1788 return -1; | 1790 return -1; |
| 1789 } | 1791 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1885 rtc::CritScope lock(&send_critsect_); | 1887 rtc::CritScope lock(&send_critsect_); |
| 1886 | 1888 |
| 1887 RtpState state; | 1889 RtpState state; |
| 1888 state.sequence_number = sequence_number_rtx_; | 1890 state.sequence_number = sequence_number_rtx_; |
| 1889 state.start_timestamp = start_timestamp_; | 1891 state.start_timestamp = start_timestamp_; |
| 1890 | 1892 |
| 1891 return state; | 1893 return state; |
| 1892 } | 1894 } |
| 1893 | 1895 |
| 1894 } // namespace webrtc | 1896 } // namespace webrtc |
| OLD | NEW |