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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 | 168 |
169 bool IncomingVideoStream::IncomingVideoStreamProcess() { | 169 bool IncomingVideoStream::IncomingVideoStreamProcess() { |
170 if (kEventError != deliver_buffer_event_->Wait(kEventMaxWaitTimeMs)) { | 170 if (kEventError != deliver_buffer_event_->Wait(kEventMaxWaitTimeMs)) { |
171 rtc::CritScope cs(&thread_critsect_); | 171 rtc::CritScope cs(&thread_critsect_); |
172 if (incoming_render_thread_ == NULL) { | 172 if (incoming_render_thread_ == NULL) { |
173 // Terminating | 173 // Terminating |
174 return false; | 174 return false; |
175 } | 175 } |
176 | 176 |
177 // Get a new frame to render and the time for the frame after this one. | 177 // Get a new frame to render and the time for the frame after this one. |
178 VideoFrame frame_to_render; | 178 rtc::Optional<VideoFrame> frame_to_render; |
179 uint32_t wait_time; | 179 uint32_t wait_time; |
180 { | 180 { |
181 rtc::CritScope cs(&buffer_critsect_); | 181 rtc::CritScope cs(&buffer_critsect_); |
182 frame_to_render = render_buffers_->FrameToRender(); | 182 frame_to_render = render_buffers_->FrameToRender(); |
183 wait_time = render_buffers_->TimeToNextFrameRelease(); | 183 wait_time = render_buffers_->TimeToNextFrameRelease(); |
184 } | 184 } |
185 | 185 |
186 // Set timer for next frame to render. | 186 // Set timer for next frame to render. |
187 if (wait_time > kEventMaxWaitTimeMs) { | 187 if (wait_time > kEventMaxWaitTimeMs) { |
188 wait_time = kEventMaxWaitTimeMs; | 188 wait_time = kEventMaxWaitTimeMs; |
189 } | 189 } |
190 deliver_buffer_event_->StartTimer(false, wait_time); | 190 deliver_buffer_event_->StartTimer(false, wait_time); |
191 | 191 |
192 DeliverFrame(frame_to_render); | 192 if (frame_to_render) |
| 193 DeliverFrame(*frame_to_render); |
193 } | 194 } |
194 return true; | 195 return true; |
195 } | 196 } |
196 | 197 |
197 void IncomingVideoStream::DeliverFrame(const VideoFrame& video_frame) { | 198 void IncomingVideoStream::DeliverFrame(const VideoFrame& video_frame) { |
198 rtc::CritScope cs(&thread_critsect_); | 199 rtc::CritScope cs(&thread_critsect_); |
199 if (video_frame.IsZeroSize()) { | |
200 // No frame. | |
201 return; | |
202 } | |
203 | 200 |
204 // Send frame for rendering. | 201 // Send frame for rendering. |
205 if (external_callback_) { | 202 if (external_callback_) { |
206 external_callback_->OnFrame(video_frame); | 203 external_callback_->OnFrame(video_frame); |
207 } else if (render_callback_) { | 204 } else if (render_callback_) { |
208 render_callback_->OnFrame(video_frame); | 205 render_callback_->OnFrame(video_frame); |
209 } | 206 } |
210 } | 207 } |
211 | 208 |
212 } // namespace webrtc | 209 } // namespace webrtc |
OLD | NEW |