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

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

Issue 2302473002: FrameBuffer::NextFrame now return pair<frame, reason>. (Closed)
Patch Set: Comment fix Created 4 years, 3 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
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 VCMTiming* timing) 45 VCMTiming* timing)
46 : clock_(clock), 46 : clock_(clock),
47 frame_inserted_event_(false, false), 47 frame_inserted_event_(false, false),
48 jitter_estimator_(jitter_estimator), 48 jitter_estimator_(jitter_estimator),
49 timing_(timing), 49 timing_(timing),
50 inter_frame_delay_(clock_->TimeInMilliseconds()), 50 inter_frame_delay_(clock_->TimeInMilliseconds()),
51 newest_picture_id_(-1), 51 newest_picture_id_(-1),
52 stopped_(false), 52 stopped_(false),
53 protection_mode_(kProtectionNack) {} 53 protection_mode_(kProtectionNack) {}
54 54
55 std::unique_ptr<FrameObject> FrameBuffer::NextFrame(int64_t max_wait_time_ms) { 55 FrameBuffer::ReturnReason FrameBuffer::NextFrame(
56 int64_t max_wait_time_ms,
57 std::unique_ptr<FrameObject>* frame_out) {
56 int64_t latest_return_time = clock_->TimeInMilliseconds() + max_wait_time_ms; 58 int64_t latest_return_time = clock_->TimeInMilliseconds() + max_wait_time_ms;
57 int64_t now = clock_->TimeInMilliseconds(); 59 int64_t now = clock_->TimeInMilliseconds();
58 int64_t wait_ms = max_wait_time_ms; 60 int64_t wait_ms = max_wait_time_ms;
59 while (true) { 61 while (true) {
60 std::map<FrameKey, std::unique_ptr<FrameObject>, FrameComp>::iterator 62 std::map<FrameKey, std::unique_ptr<FrameObject>, FrameComp>::iterator
61 next_frame_it; 63 next_frame_it;
62 { 64 {
63 rtc::CritScope lock(&crit_); 65 rtc::CritScope lock(&crit_);
64 frame_inserted_event_.Reset(); 66 frame_inserted_event_.Reset();
65 if (stopped_) 67 if (stopped_)
66 return std::unique_ptr<FrameObject>(); 68 return kStopped;
67 69
68 now = clock_->TimeInMilliseconds(); 70 now = clock_->TimeInMilliseconds();
69 wait_ms = max_wait_time_ms; 71 wait_ms = max_wait_time_ms;
70 next_frame_it = frames_.end(); 72 next_frame_it = frames_.end();
71 for (auto frame_it = frames_.begin(); frame_it != frames_.end(); 73 for (auto frame_it = frames_.begin(); frame_it != frames_.end();
72 ++frame_it) { 74 ++frame_it) {
73 const FrameObject& frame = *frame_it->second; 75 const FrameObject& frame = *frame_it->second;
74 if (IsContinuous(frame)) { 76 if (IsContinuous(frame)) {
75 next_frame_it = frame_it; 77 next_frame_it = frame_it;
76 int64_t render_time = 78 int64_t render_time =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 next_frame_it->second->size); 110 next_frame_it->second->size);
109 } 111 }
110 float rtt_mult = protection_mode_ == kProtectionNackFEC ? 0.0 : 1.0; 112 float rtt_mult = protection_mode_ == kProtectionNackFEC ? 0.0 : 1.0;
111 timing_->SetJitterDelay(jitter_estimator_->GetJitterEstimate(rtt_mult)); 113 timing_->SetJitterDelay(jitter_estimator_->GetJitterEstimate(rtt_mult));
112 timing_->UpdateCurrentDelay(next_frame_it->second->RenderTime(), 114 timing_->UpdateCurrentDelay(next_frame_it->second->RenderTime(),
113 clock_->TimeInMilliseconds()); 115 clock_->TimeInMilliseconds());
114 116
115 decoded_frames_.insert(next_frame_it->first); 117 decoded_frames_.insert(next_frame_it->first);
116 std::unique_ptr<FrameObject> frame = std::move(next_frame_it->second); 118 std::unique_ptr<FrameObject> frame = std::move(next_frame_it->second);
117 frames_.erase(frames_.begin(), ++next_frame_it); 119 frames_.erase(frames_.begin(), ++next_frame_it);
118 return frame; 120 *frame_out = std::move(frame);
121 return kFrameFound;
119 } else { 122 } else {
120 return std::unique_ptr<FrameObject>(); 123 return kTimeout;
121 } 124 }
122 } 125 }
123 } 126 }
124 } 127 }
125 128
126 void FrameBuffer::SetProtectionMode(VCMVideoProtection mode) { 129 void FrameBuffer::SetProtectionMode(VCMVideoProtection mode) {
127 rtc::CritScope lock(&crit_); 130 rtc::CritScope lock(&crit_);
128 protection_mode_ = mode; 131 protection_mode_ = mode;
129 } 132 }
130 133
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 FrameKey ref_key(frame.picture_id, frame.spatial_layer - 1); 188 FrameKey ref_key(frame.picture_id, frame.spatial_layer - 1);
186 if (decoded_frames_.find(ref_key) == decoded_frames_.end()) 189 if (decoded_frames_.find(ref_key) == decoded_frames_.end())
187 return false; 190 return false;
188 } 191 }
189 192
190 return true; 193 return true;
191 } 194 }
192 195
193 } // namespace video_coding 196 } // namespace video_coding
194 } // namespace webrtc 197 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/frame_buffer2.h ('k') | webrtc/modules/video_coding/frame_buffer2_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698