Chromium Code Reviews| 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 |
| 11 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 11 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
| 12 | 12 |
| 13 #include <string.h> | |
| 14 | |
| 15 #include "webrtc/base/logging.h" | 13 #include "webrtc/base/logging.h" |
| 16 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" | 14 #include "webrtc/modules/rtp_rtcp/include/rtp_cvo.h" |
| 17 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 15 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
| 18 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" | 16 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" |
| 19 | 17 |
| 20 namespace webrtc { | 18 namespace webrtc { |
| 21 | 19 |
| 22 RtpData* NullObjectRtpData() { | 20 RtpData* NullObjectRtpData() { |
| 23 static NullRtpData null_rtp_data; | 21 static NullRtpData null_rtp_data; |
| 24 return &null_rtp_data; | 22 return &null_rtp_data; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 header->extension.videoRotation = kVideoRotation_0; | 249 header->extension.videoRotation = kVideoRotation_0; |
| 252 | 250 |
| 253 // May not be present in packet. | 251 // May not be present in packet. |
| 254 header->extension.playout_delay.min_ms = -1; | 252 header->extension.playout_delay.min_ms = -1; |
| 255 header->extension.playout_delay.max_ms = -1; | 253 header->extension.playout_delay.max_ms = -1; |
| 256 | 254 |
| 257 // May not be present in packet. | 255 // May not be present in packet. |
| 258 header->extension.hasVideoContentType = false; | 256 header->extension.hasVideoContentType = false; |
| 259 header->extension.videoContentType = VideoContentType::UNSPECIFIED; | 257 header->extension.videoContentType = VideoContentType::UNSPECIFIED; |
| 260 | 258 |
| 259 header->extension.hasVideoTiming = false; | |
| 260 header->extension.videoTiming = {0u, 0u, 0u, 0u, 0u, false}; | |
| 261 | |
| 261 if (X) { | 262 if (X) { |
| 262 /* RTP header extension, RFC 3550. | 263 /* RTP header extension, RFC 3550. |
| 263 0 1 2 3 | 264 0 1 2 3 |
| 264 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 | 265 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 |
| 265 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 266 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 266 | defined by profile | length | | 267 | defined by profile | length | |
| 267 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 268 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 268 | header extension | | 269 | header extension | |
| 269 | .... | | 270 | .... | |
| 270 */ | 271 */ |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 463 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| 463 | 464 |
| 464 if (ptr[0] < | 465 if (ptr[0] < |
| 465 static_cast<uint8_t>(VideoContentType::TOTAL_CONTENT_TYPES)) { | 466 static_cast<uint8_t>(VideoContentType::TOTAL_CONTENT_TYPES)) { |
| 466 header->extension.hasVideoContentType = true; | 467 header->extension.hasVideoContentType = true; |
| 467 header->extension.videoContentType = | 468 header->extension.videoContentType = |
| 468 static_cast<VideoContentType>(ptr[0]); | 469 static_cast<VideoContentType>(ptr[0]); |
| 469 } | 470 } |
| 470 break; | 471 break; |
| 471 } | 472 } |
| 473 case kRtpExtensionVideoTiming: { | |
| 474 if (len != 9) { | |
| 475 LOG(LS_WARNING) << "Incorrect video timing len: " << len; | |
| 476 return; | |
| 477 } | |
| 478 // 0 1 2 3 | |
| 479 // 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 | |
| 480 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| 481 // | ID | len=9 | encode start ms delta | encode finish | | |
| 482 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| 483 // | ms delta | packetizer finish ms delta | pacer exit | | |
| 484 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| 485 // | ms delta | network timestamp ms delta | | | |
| 486 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |
| 487 header->extension.hasVideoTiming = true; | |
| 488 header->extension.videoTiming.encode_start_ms_delta = | |
| 489 ByteReader<uint16_t, 2>::ReadBigEndian(ptr); | |
| 490 header->extension.videoTiming.encode_finish_ms_delta = | |
| 491 ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 2); | |
| 492 header->extension.videoTiming.packetization_finish_ms_delta = | |
| 493 ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 4); | |
| 494 header->extension.videoTiming.pacer_exit_ms_delta = | |
| 495 ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 6); | |
| 496 header->extension.videoTiming.network_timstamp_ms_delta = | |
| 497 ByteReader<uint16_t, 2>::ReadBigEndian(ptr + 8); | |
| 498 break; | |
| 499 } | |
|
sprang_webrtc
2017/05/31 11:12:55
Wouldn't it be possible to wrap |ptr| in an ArrayV
ilnik
2017/05/31 15:17:45
Done.
| |
| 472 case kRtpExtensionRtpStreamId: { | 500 case kRtpExtensionRtpStreamId: { |
| 473 header->extension.stream_id.Set(rtc::MakeArrayView(ptr, len + 1)); | 501 header->extension.stream_id.Set(rtc::MakeArrayView(ptr, len + 1)); |
| 474 break; | 502 break; |
| 475 } | 503 } |
| 476 case kRtpExtensionRepairedRtpStreamId: { | 504 case kRtpExtensionRepairedRtpStreamId: { |
| 477 header->extension.repaired_stream_id.Set( | 505 header->extension.repaired_stream_id.Set( |
| 478 rtc::MakeArrayView(ptr, len + 1)); | 506 rtc::MakeArrayView(ptr, len + 1)); |
| 479 break; | 507 break; |
| 480 } | 508 } |
| 481 case kRtpExtensionNone: | 509 case kRtpExtensionNone: |
| 482 case kRtpExtensionNumberOfExtensions: { | 510 case kRtpExtensionNumberOfExtensions: { |
| 483 RTC_NOTREACHED() << "Invalid extension type: " << type; | 511 RTC_NOTREACHED() << "Invalid extension type: " << type; |
| 484 return; | 512 return; |
| 485 } | 513 } |
| 486 } | 514 } |
| 487 } | 515 } |
| 488 ptr += (len + 1); | 516 ptr += (len + 1); |
| 489 } | 517 } |
| 490 } | 518 } |
| 491 | 519 |
| 492 } // namespace RtpUtility | 520 } // namespace RtpUtility |
| 493 } // namespace webrtc | 521 } // namespace webrtc |
| OLD | NEW |