| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 | 241 |
| 242 bool VideoContentTypeExtension::Write(uint8_t* data, | 242 bool VideoContentTypeExtension::Write(uint8_t* data, |
| 243 VideoContentType content_type) { | 243 VideoContentType content_type) { |
| 244 data[0] = static_cast<uint8_t>(content_type); | 244 data[0] = static_cast<uint8_t>(content_type); |
| 245 return true; | 245 return true; |
| 246 } | 246 } |
| 247 | 247 |
| 248 // Video Timing. | 248 // Video Timing. |
| 249 // 6 timestamps in milliseconds counted from capture time stored in rtp header: | 249 // 6 timestamps in milliseconds counted from capture time stored in rtp header: |
| 250 // encode start/finish, packetization complete, pacer exit and reserved for | 250 // encode start/finish, packetization complete, pacer exit and reserved for |
| 251 // modification by the network modification. | 251 // modification by the network modification. |flags| is a bitmask and has the |
| 252 // following allowed values: |
| 253 // 0 = Valid data, but no flags available (backwards compatibility) |
| 254 // 1 = Frame marked as timing frame due to cyclic timer. |
| 255 // 2 = Frame marked as timing frame due to size being outside limit. |
| 256 // 255 = Invalid. The whole timing frame extension should be ignored. |
| 257 // |
| 252 // 0 1 2 3 | 258 // 0 1 2 3 |
| 253 // 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 2 | 259 // 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 2 |
| 254 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 260 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 255 // | ID | len=11| encode start ms delta | encode finish | | 261 // | ID | len=12| flags | encode start ms delta | |
| 256 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 262 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 257 // | ms delta | packetizer finish ms delta | pacer exit | | 263 // | encode finish ms delta | packetizer finish ms delta | |
| 258 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 264 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 259 // | ms delta | network timestamp ms delta | network2 time-| | 265 // | pacer exit ms delta | network timestamp ms delta | |
| 260 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 266 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 261 // | stamp ms delta| | 267 // | network2 timestamp ms delta | |
| 262 // +-+-+-+-+-+-+-+-+ | 268 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 263 | 269 |
| 264 constexpr RTPExtensionType VideoTimingExtension::kId; | 270 constexpr RTPExtensionType VideoTimingExtension::kId; |
| 265 constexpr uint8_t VideoTimingExtension::kValueSizeBytes; | 271 constexpr uint8_t VideoTimingExtension::kValueSizeBytes; |
| 266 constexpr const char VideoTimingExtension::kUri[]; | 272 constexpr const char VideoTimingExtension::kUri[]; |
| 267 | 273 |
| 268 bool VideoTimingExtension::Parse(rtc::ArrayView<const uint8_t> data, | 274 bool VideoTimingExtension::Parse(rtc::ArrayView<const uint8_t> data, |
| 269 VideoSendTiming* timing) { | 275 VideoSendTiming* timing) { |
| 270 RTC_DCHECK(timing); | 276 RTC_DCHECK(timing); |
| 271 if (data.size() != kValueSizeBytes) | 277 // TODO(sprang): Deprecate support for old wire format. |
| 272 return false; | 278 ptrdiff_t off = 0; |
| 273 timing->encode_start_delta_ms = | 279 switch (data.size()) { |
| 274 ByteReader<uint16_t>::ReadBigEndian(data.data()); | 280 case kValueSizeBytes - 1: |
| 281 timing->flags = 0; |
| 282 off = 1; // Old wire format without the flags field. |
| 283 break; |
| 284 case kValueSizeBytes: |
| 285 timing->flags = ByteReader<uint8_t>::ReadBigEndian(data.data()); |
| 286 break; |
| 287 default: |
| 288 return false; |
| 289 } |
| 290 |
| 291 timing->encode_start_delta_ms = ByteReader<uint16_t>::ReadBigEndian( |
| 292 data.data() + VideoSendTiming::kEncodeStartDeltaOffset - off); |
| 275 timing->encode_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian( | 293 timing->encode_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian( |
| 276 data.data() + 2 * VideoSendTiming::kEncodeFinishDeltaIdx); | 294 data.data() + VideoSendTiming::kEncodeFinishDeltaOffset - off); |
| 277 timing->packetization_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian( | 295 timing->packetization_finish_delta_ms = ByteReader<uint16_t>::ReadBigEndian( |
| 278 data.data() + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx); | 296 data.data() + VideoSendTiming::kPacketizationFinishDeltaOffset - off); |
| 279 timing->pacer_exit_delta_ms = ByteReader<uint16_t>::ReadBigEndian( | 297 timing->pacer_exit_delta_ms = ByteReader<uint16_t>::ReadBigEndian( |
| 280 data.data() + 2 * VideoSendTiming::kPacerExitDeltaIdx); | 298 data.data() + VideoSendTiming::kPacerExitDeltaOffset - off); |
| 281 timing->network_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian( | 299 timing->network_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian( |
| 282 data.data() + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx); | 300 data.data() + VideoSendTiming::kNetworkTimestampDeltaOffset - off); |
| 283 timing->network2_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian( | 301 timing->network2_timstamp_delta_ms = ByteReader<uint16_t>::ReadBigEndian( |
| 284 data.data() + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx); | 302 data.data() + VideoSendTiming::kNetwork2TimestampDeltaOffset - off); |
| 285 timing->is_timing_frame = true; | |
| 286 return true; | 303 return true; |
| 287 } | 304 } |
| 288 | 305 |
| 289 bool VideoTimingExtension::Write(uint8_t* data, const VideoSendTiming& timing) { | 306 bool VideoTimingExtension::Write(uint8_t* data, const VideoSendTiming& timing) { |
| 290 ByteWriter<uint16_t>::WriteBigEndian(data, timing.encode_start_delta_ms); | 307 ByteWriter<uint8_t>::WriteBigEndian(data + VideoSendTiming::kFlagsOffset, |
| 308 timing.flags); |
| 291 ByteWriter<uint16_t>::WriteBigEndian( | 309 ByteWriter<uint16_t>::WriteBigEndian( |
| 292 data + 2 * VideoSendTiming::kEncodeFinishDeltaIdx, | 310 data + VideoSendTiming::kEncodeStartDeltaOffset, |
| 311 timing.encode_start_delta_ms); |
| 312 ByteWriter<uint16_t>::WriteBigEndian( |
| 313 data + VideoSendTiming::kEncodeFinishDeltaOffset, |
| 293 timing.encode_finish_delta_ms); | 314 timing.encode_finish_delta_ms); |
| 294 ByteWriter<uint16_t>::WriteBigEndian( | 315 ByteWriter<uint16_t>::WriteBigEndian( |
| 295 data + 2 * VideoSendTiming::kPacketizationFinishDeltaIdx, | 316 data + VideoSendTiming::kPacketizationFinishDeltaOffset, |
| 296 timing.packetization_finish_delta_ms); | 317 timing.packetization_finish_delta_ms); |
| 297 ByteWriter<uint16_t>::WriteBigEndian( | 318 ByteWriter<uint16_t>::WriteBigEndian( |
| 298 data + 2 * VideoSendTiming::kPacerExitDeltaIdx, | 319 data + VideoSendTiming::kPacerExitDeltaOffset, |
| 299 timing.pacer_exit_delta_ms); | 320 timing.pacer_exit_delta_ms); |
| 300 ByteWriter<uint16_t>::WriteBigEndian( | 321 ByteWriter<uint16_t>::WriteBigEndian( |
| 301 data + 2 * VideoSendTiming::kNetworkTimestampDeltaIdx, 0); // reserved | 322 data + VideoSendTiming::kNetworkTimestampDeltaOffset, 0); // reserved |
| 302 ByteWriter<uint16_t>::WriteBigEndian( | 323 ByteWriter<uint16_t>::WriteBigEndian( |
| 303 data + 2 * VideoSendTiming::kNetwork2TimestampDeltaIdx, 0); // reserved | 324 data + VideoSendTiming::kNetwork2TimestampDeltaOffset, 0); // reserved |
| 304 return true; | 325 return true; |
| 305 } | 326 } |
| 306 | 327 |
| 307 bool VideoTimingExtension::Write(uint8_t* data, | 328 bool VideoTimingExtension::Write(uint8_t* data, |
| 308 uint16_t time_delta_ms, | 329 uint16_t time_delta_ms, |
| 309 uint8_t idx) { | 330 uint8_t offset) { |
| 310 RTC_DCHECK_LT(idx, 6); | 331 RTC_DCHECK_LT(offset, kValueSizeBytes - sizeof(uint16_t)); |
| 311 ByteWriter<uint16_t>::WriteBigEndian(data + 2 * idx, time_delta_ms); | 332 ByteWriter<uint16_t>::WriteBigEndian(data + offset, time_delta_ms); |
| 312 return true; | 333 return true; |
| 313 } | 334 } |
| 314 | 335 |
| 315 bool BaseRtpStringExtension::Parse(rtc::ArrayView<const uint8_t> data, | 336 bool BaseRtpStringExtension::Parse(rtc::ArrayView<const uint8_t> data, |
| 316 StringRtpHeaderExtension* str) { | 337 StringRtpHeaderExtension* str) { |
| 317 if (data.empty() || data[0] == 0) // Valid string extension can't be empty. | 338 if (data.empty() || data[0] == 0) // Valid string extension can't be empty. |
| 318 return false; | 339 return false; |
| 319 str->Set(data); | 340 str->Set(data); |
| 320 RTC_DCHECK(!str->empty()); | 341 RTC_DCHECK(!str->empty()); |
| 321 return true; | 342 return true; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 constexpr RTPExtensionType RtpStreamId::kId; | 374 constexpr RTPExtensionType RtpStreamId::kId; |
| 354 constexpr const char RtpStreamId::kUri[]; | 375 constexpr const char RtpStreamId::kUri[]; |
| 355 | 376 |
| 356 constexpr RTPExtensionType RepairedRtpStreamId::kId; | 377 constexpr RTPExtensionType RepairedRtpStreamId::kId; |
| 357 constexpr const char RepairedRtpStreamId::kUri[]; | 378 constexpr const char RepairedRtpStreamId::kUri[]; |
| 358 | 379 |
| 359 constexpr RTPExtensionType RtpMid::kId; | 380 constexpr RTPExtensionType RtpMid::kId; |
| 360 constexpr const char RtpMid::kUri[]; | 381 constexpr const char RtpMid::kUri[]; |
| 361 | 382 |
| 362 } // namespace webrtc | 383 } // namespace webrtc |
| OLD | NEW |