Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: webrtc/modules/video_coding/frame_object.cc

Issue 2902743002: Cast sequence number in RtpFrameObject. (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/modules/video_coding/video_packet_buffer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 17 matching lines...) Expand all
28 uint16_t last_seq_num, 28 uint16_t last_seq_num,
29 size_t frame_size, 29 size_t frame_size,
30 int times_nacked, 30 int times_nacked,
31 int64_t received_time) 31 int64_t received_time)
32 : packet_buffer_(packet_buffer), 32 : packet_buffer_(packet_buffer),
33 first_seq_num_(first_seq_num), 33 first_seq_num_(first_seq_num),
34 last_seq_num_(last_seq_num), 34 last_seq_num_(last_seq_num),
35 received_time_(received_time), 35 received_time_(received_time),
36 times_nacked_(times_nacked) { 36 times_nacked_(times_nacked) {
37 VCMPacket* first_packet = packet_buffer_->GetPacket(first_seq_num); 37 VCMPacket* first_packet = packet_buffer_->GetPacket(first_seq_num);
38 RTC_DCHECK(first_packet); 38 RTC_CHECK(first_packet);
39 39
40 // RtpFrameObject members 40 // RtpFrameObject members
41 frame_type_ = first_packet->frameType; 41 frame_type_ = first_packet->frameType;
42 codec_type_ = first_packet->codec; 42 codec_type_ = first_packet->codec;
43 43
44 // TODO(philipel): Remove when encoded image is replaced by FrameObject. 44 // TODO(philipel): Remove when encoded image is replaced by FrameObject.
45 // VCMEncodedFrame members 45 // VCMEncodedFrame members
46 CopyCodecSpecific(&first_packet->video_header); 46 CopyCodecSpecific(&first_packet->video_header);
47 _completeFrame = true; 47 _completeFrame = true;
48 _payloadType = first_packet->payloadType; 48 _payloadType = first_packet->payloadType;
(...skipping 18 matching lines...) Expand all
67 _buffer = new uint8_t[_size]; 67 _buffer = new uint8_t[_size];
68 _length = frame_size; 68 _length = frame_size;
69 69
70 // For H264 frames we can't determine the frame type by just looking at the 70 // For H264 frames we can't determine the frame type by just looking at the
71 // first packet. Instead we consider the frame to be a keyframe if it 71 // first packet. Instead we consider the frame to be a keyframe if it
72 // contains an IDR NALU. 72 // contains an IDR NALU.
73 if (codec_type_ == kVideoCodecH264) { 73 if (codec_type_ == kVideoCodecH264) {
74 _frameType = kVideoFrameDelta; 74 _frameType = kVideoFrameDelta;
75 frame_type_ = kVideoFrameDelta; 75 frame_type_ = kVideoFrameDelta;
76 for (uint16_t seq_num = first_seq_num; 76 for (uint16_t seq_num = first_seq_num;
77 seq_num != last_seq_num + 1 && _frameType == kVideoFrameDelta; 77 seq_num != static_cast<uint16_t>(last_seq_num + 1) &&
78 _frameType == kVideoFrameDelta;
78 ++seq_num) { 79 ++seq_num) {
79 VCMPacket* packet = packet_buffer_->GetPacket(seq_num); 80 VCMPacket* packet = packet_buffer_->GetPacket(seq_num);
80 RTC_DCHECK(packet); 81 RTC_CHECK(packet);
81 const RTPVideoHeaderH264& header = packet->video_header.codecHeader.H264; 82 const RTPVideoHeaderH264& header = packet->video_header.codecHeader.H264;
82 for (size_t i = 0; i < header.nalus_length; ++i) { 83 for (size_t i = 0; i < header.nalus_length; ++i) {
83 if (header.nalus[i].type == H264::NaluType::kIdr) { 84 if (header.nalus[i].type == H264::NaluType::kIdr) {
84 _frameType = kVideoFrameKey; 85 _frameType = kVideoFrameKey;
85 frame_type_ = kVideoFrameKey; 86 frame_type_ = kVideoFrameKey;
86 break; 87 break;
87 } 88 }
88 } 89 }
89 } 90 }
90 } else { 91 } else {
91 _frameType = first_packet->frameType; 92 _frameType = first_packet->frameType;
92 frame_type_ = first_packet->frameType; 93 frame_type_ = first_packet->frameType;
93 } 94 }
94 95
95 GetBitstream(_buffer); 96 GetBitstream(_buffer);
96 _encodedWidth = first_packet->width; 97 _encodedWidth = first_packet->width;
97 _encodedHeight = first_packet->height; 98 _encodedHeight = first_packet->height;
98 99
99 // FrameObject members 100 // FrameObject members
100 timestamp = first_packet->timestamp; 101 timestamp = first_packet->timestamp;
101 102
102 VCMPacket* last_packet = packet_buffer_->GetPacket(last_seq_num); 103 VCMPacket* last_packet = packet_buffer_->GetPacket(last_seq_num);
103 RTC_DCHECK(last_packet && last_packet->markerBit); 104 RTC_CHECK(last_packet && last_packet->markerBit);
104 // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ 105 // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/
105 // ts_126114v120700p.pdf Section 7.4.5. 106 // ts_126114v120700p.pdf Section 7.4.5.
106 // The MTSI client shall add the payload bytes as defined in this clause 107 // The MTSI client shall add the payload bytes as defined in this clause
107 // onto the last RTP packet in each group of packets which make up a key 108 // onto the last RTP packet in each group of packets which make up a key
108 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265 109 // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265
109 // (HEVC)). 110 // (HEVC)).
110 rotation_ = last_packet->video_header.rotation; 111 rotation_ = last_packet->video_header.rotation;
111 _rotation_set = true; 112 _rotation_set = true;
112 content_type_ = last_packet->video_header.content_type; 113 content_type_ = last_packet->video_header.content_type;
113 } 114 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 rtc::Optional<RTPVideoTypeHeader> RtpFrameObject::GetCodecHeader() const { 160 rtc::Optional<RTPVideoTypeHeader> RtpFrameObject::GetCodecHeader() const {
160 rtc::CritScope lock(&packet_buffer_->crit_); 161 rtc::CritScope lock(&packet_buffer_->crit_);
161 VCMPacket* packet = packet_buffer_->GetPacket(first_seq_num_); 162 VCMPacket* packet = packet_buffer_->GetPacket(first_seq_num_);
162 if (!packet) 163 if (!packet)
163 return rtc::Optional<RTPVideoTypeHeader>(); 164 return rtc::Optional<RTPVideoTypeHeader>();
164 return rtc::Optional<RTPVideoTypeHeader>(packet->video_header.codecHeader); 165 return rtc::Optional<RTPVideoTypeHeader>(packet->video_header.codecHeader);
165 } 166 }
166 167
167 } // namespace video_coding 168 } // namespace video_coding
168 } // namespace webrtc 169 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/modules/video_coding/video_packet_buffer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698