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

Side by Side Diff: webrtc/common_video/video_render_frames.cc

Issue 2361803003: Add logging statements to places where the frame might be dropped in WebRTC pipeline. (Closed)
Patch Set: Remove the DCHECK since it will crash anyway. Created 4 years, 2 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) 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/common_video/video_render_frames.h" 11 #include "webrtc/common_video/video_render_frames.h"
12 12
13 #include <assert.h> 13 #include <assert.h>
14 14
15 #include "webrtc/base/logging.h"
15 #include "webrtc/base/timeutils.h" 16 #include "webrtc/base/timeutils.h"
16 #include "webrtc/modules/include/module_common_types.h" 17 #include "webrtc/modules/include/module_common_types.h"
17 #include "webrtc/system_wrappers/include/trace.h" 18 #include "webrtc/system_wrappers/include/trace.h"
18 19
19 namespace webrtc { 20 namespace webrtc {
20 namespace { 21 namespace {
21 22
22 const uint32_t kEventMaxWaitTimeMs = 200; 23 const uint32_t kEventMaxWaitTimeMs = 200;
23 const uint32_t kMinRenderDelayMs = 10; 24 const uint32_t kMinRenderDelayMs = 10;
24 const uint32_t kMaxRenderDelayMs = 500; 25 const uint32_t kMaxRenderDelayMs = 500;
26 const size_t kMaxIncomingFramesBeforeLogged = 100;
25 27
26 uint32_t EnsureValidRenderDelay(uint32_t render_delay) { 28 uint32_t EnsureValidRenderDelay(uint32_t render_delay) {
27 return (render_delay < kMinRenderDelayMs || render_delay > kMaxRenderDelayMs) 29 return (render_delay < kMinRenderDelayMs || render_delay > kMaxRenderDelayMs)
28 ? kMinRenderDelayMs 30 ? kMinRenderDelayMs
29 : render_delay; 31 : render_delay;
30 } 32 }
31 } // namespace 33 } // namespace
32 34
33 VideoRenderFrames::VideoRenderFrames(uint32_t render_delay_ms) 35 VideoRenderFrames::VideoRenderFrames(uint32_t render_delay_ms)
34 : render_delay_ms_(EnsureValidRenderDelay(render_delay_ms)) {} 36 : render_delay_ms_(EnsureValidRenderDelay(render_delay_ms)) {}
(...skipping 15 matching lines...) Expand all
50 } 52 }
51 53
52 if (new_frame.render_time_ms() > time_now + KFutureRenderTimestampMS) { 54 if (new_frame.render_time_ms() > time_now + KFutureRenderTimestampMS) {
53 WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, -1, 55 WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, -1,
54 "%s: frame too long into the future, timestamp=%u.", 56 "%s: frame too long into the future, timestamp=%u.",
55 __FUNCTION__, new_frame.timestamp()); 57 __FUNCTION__, new_frame.timestamp());
56 return -1; 58 return -1;
57 } 59 }
58 60
59 incoming_frames_.push_back(new_frame); 61 incoming_frames_.push_back(new_frame);
62 if (incoming_frames_.size() > kMaxIncomingFramesBeforeLogged)
63 LOG(LS_WARNING) << "Stored incoming frames: " << incoming_frames_.size();
60 return static_cast<int32_t>(incoming_frames_.size()); 64 return static_cast<int32_t>(incoming_frames_.size());
61 } 65 }
62 66
63 rtc::Optional<VideoFrame> VideoRenderFrames::FrameToRender() { 67 rtc::Optional<VideoFrame> VideoRenderFrames::FrameToRender() {
64 rtc::Optional<VideoFrame> render_frame; 68 rtc::Optional<VideoFrame> render_frame;
65 // Get the newest frame that can be released for rendering. 69 // Get the newest frame that can be released for rendering.
66 while (!incoming_frames_.empty() && TimeToNextFrameRelease() <= 0) { 70 while (!incoming_frames_.empty() && TimeToNextFrameRelease() <= 0) {
67 render_frame = rtc::Optional<VideoFrame>(incoming_frames_.front()); 71 render_frame = rtc::Optional<VideoFrame>(incoming_frames_.front());
68 incoming_frames_.pop_front(); 72 incoming_frames_.pop_front();
69 } 73 }
70 return render_frame; 74 return render_frame;
71 } 75 }
72 76
73 uint32_t VideoRenderFrames::TimeToNextFrameRelease() { 77 uint32_t VideoRenderFrames::TimeToNextFrameRelease() {
74 if (incoming_frames_.empty()) { 78 if (incoming_frames_.empty()) {
75 return kEventMaxWaitTimeMs; 79 return kEventMaxWaitTimeMs;
76 } 80 }
77 const int64_t time_to_release = incoming_frames_.front().render_time_ms() - 81 const int64_t time_to_release = incoming_frames_.front().render_time_ms() -
78 render_delay_ms_ - 82 render_delay_ms_ -
79 rtc::TimeMillis(); 83 rtc::TimeMillis();
80 return time_to_release < 0 ? 0u : static_cast<uint32_t>(time_to_release); 84 return time_to_release < 0 ? 0u : static_cast<uint32_t>(time_to_release);
81 } 85 }
82 86
83 } // namespace webrtc 87 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698