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

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

Issue 2097403002: Add a race-checking mechanism. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 5 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
(...skipping 18 matching lines...) Expand all
29 : encoder_(encoder), 29 : encoder_(encoder),
30 rate_observer_(rate_observer), 30 rate_observer_(rate_observer),
31 vcm_encoded_frame_callback_(encoded_frame_callback), 31 vcm_encoded_frame_callback_(encoded_frame_callback),
32 internal_source_(internal_source), 32 internal_source_(internal_source),
33 encoder_params_({0, 0, 0, 0}), 33 encoder_params_({0, 0, 0, 0}),
34 is_screenshare_(false) {} 34 is_screenshare_(false) {}
35 35
36 VCMGenericEncoder::~VCMGenericEncoder() {} 36 VCMGenericEncoder::~VCMGenericEncoder() {}
37 37
38 int32_t VCMGenericEncoder::Release() { 38 int32_t VCMGenericEncoder::Release() {
39 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
39 TRACE_EVENT0("webrtc", "VCMGenericEncoder::Release"); 40 TRACE_EVENT0("webrtc", "VCMGenericEncoder::Release");
40 return encoder_->Release(); 41 return encoder_->Release();
41 } 42 }
42 43
43 int32_t VCMGenericEncoder::InitEncode(const VideoCodec* settings, 44 int32_t VCMGenericEncoder::InitEncode(const VideoCodec* settings,
44 int32_t number_of_cores, 45 int32_t number_of_cores,
45 size_t max_payload_size) { 46 size_t max_payload_size) {
47 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
46 TRACE_EVENT0("webrtc", "VCMGenericEncoder::InitEncode"); 48 TRACE_EVENT0("webrtc", "VCMGenericEncoder::InitEncode");
47 is_screenshare_ = settings->mode == VideoCodecMode::kScreensharing; 49 is_screenshare_ = settings->mode == VideoCodecMode::kScreensharing;
48 if (encoder_->InitEncode(settings, number_of_cores, max_payload_size) != 0) { 50 if (encoder_->InitEncode(settings, number_of_cores, max_payload_size) != 0) {
49 LOG(LS_ERROR) << "Failed to initialize the encoder associated with " 51 LOG(LS_ERROR) << "Failed to initialize the encoder associated with "
50 "payload name: " 52 "payload name: "
51 << settings->plName; 53 << settings->plName;
52 return -1; 54 return -1;
53 } 55 }
54 encoder_->RegisterEncodeCompleteCallback(vcm_encoded_frame_callback_); 56 encoder_->RegisterEncodeCompleteCallback(vcm_encoded_frame_callback_);
55 return 0; 57 return 0;
56 } 58 }
57 59
58 int32_t VCMGenericEncoder::Encode(const VideoFrame& frame, 60 int32_t VCMGenericEncoder::Encode(const VideoFrame& frame,
59 const CodecSpecificInfo* codec_specific, 61 const CodecSpecificInfo* codec_specific,
60 const std::vector<FrameType>& frame_types) { 62 const std::vector<FrameType>& frame_types) {
63 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
61 TRACE_EVENT1("webrtc", "VCMGenericEncoder::Encode", "timestamp", 64 TRACE_EVENT1("webrtc", "VCMGenericEncoder::Encode", "timestamp",
62 frame.timestamp()); 65 frame.timestamp());
63 66
64 for (FrameType frame_type : frame_types) 67 for (FrameType frame_type : frame_types)
65 RTC_DCHECK(frame_type == kVideoFrameKey || frame_type == kVideoFrameDelta); 68 RTC_DCHECK(frame_type == kVideoFrameKey || frame_type == kVideoFrameDelta);
66 69
67 int32_t result = encoder_->Encode(frame, codec_specific, &frame_types); 70 int32_t result = encoder_->Encode(frame, codec_specific, &frame_types);
68 71
69 if (is_screenshare_ && 72 if (is_screenshare_ &&
70 result == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT) { 73 result == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT) {
71 // Target bitrate exceeded, encoder state has been reset - try again. 74 // Target bitrate exceeded, encoder state has been reset - try again.
72 return encoder_->Encode(frame, codec_specific, &frame_types); 75 return encoder_->Encode(frame, codec_specific, &frame_types);
73 } 76 }
74 77
75 return result; 78 return result;
76 } 79 }
77 80
78 const char* VCMGenericEncoder::ImplementationName() const { 81 const char* VCMGenericEncoder::ImplementationName() const {
82 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
79 return encoder_->ImplementationName(); 83 return encoder_->ImplementationName();
80 } 84 }
81 85
82 void VCMGenericEncoder::SetEncoderParameters(const EncoderParameters& params) { 86 void VCMGenericEncoder::SetEncoderParameters(const EncoderParameters& params) {
87 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
83 bool channel_parameters_have_changed; 88 bool channel_parameters_have_changed;
84 bool rates_have_changed; 89 bool rates_have_changed;
85 { 90 {
86 rtc::CritScope lock(&params_lock_); 91 rtc::CritScope lock(&params_lock_);
87 channel_parameters_have_changed = 92 channel_parameters_have_changed =
88 params.loss_rate != encoder_params_.loss_rate || 93 params.loss_rate != encoder_params_.loss_rate ||
89 params.rtt != encoder_params_.rtt; 94 params.rtt != encoder_params_.rtt;
90 rates_have_changed = 95 rates_have_changed =
91 params.target_bitrate != encoder_params_.target_bitrate || 96 params.target_bitrate != encoder_params_.target_bitrate ||
92 params.input_frame_rate != encoder_params_.input_frame_rate; 97 params.input_frame_rate != encoder_params_.input_frame_rate;
(...skipping 10 matching lines...) Expand all
103 } 108 }
104 } 109 }
105 } 110 }
106 111
107 EncoderParameters VCMGenericEncoder::GetEncoderParameters() const { 112 EncoderParameters VCMGenericEncoder::GetEncoderParameters() const {
108 rtc::CritScope lock(&params_lock_); 113 rtc::CritScope lock(&params_lock_);
109 return encoder_params_; 114 return encoder_params_;
110 } 115 }
111 116
112 int32_t VCMGenericEncoder::SetPeriodicKeyFrames(bool enable) { 117 int32_t VCMGenericEncoder::SetPeriodicKeyFrames(bool enable) {
118 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
113 return encoder_->SetPeriodicKeyFrames(enable); 119 return encoder_->SetPeriodicKeyFrames(enable);
114 } 120 }
115 121
116 int32_t VCMGenericEncoder::RequestFrame( 122 int32_t VCMGenericEncoder::RequestFrame(
117 const std::vector<FrameType>& frame_types) { 123 const std::vector<FrameType>& frame_types) {
124 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
118 VideoFrame image; 125 VideoFrame image;
119 return encoder_->Encode(image, NULL, &frame_types); 126 return encoder_->Encode(image, NULL, &frame_types);
120 } 127 }
121 128
122 bool VCMGenericEncoder::InternalSource() const { 129 bool VCMGenericEncoder::InternalSource() const {
123 return internal_source_; 130 return internal_source_;
124 } 131 }
125 132
126 void VCMGenericEncoder::OnDroppedFrame() { 133 void VCMGenericEncoder::OnDroppedFrame() {
134 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
127 encoder_->OnDroppedFrame(); 135 encoder_->OnDroppedFrame();
128 } 136 }
129 137
130 bool VCMGenericEncoder::SupportsNativeHandle() const { 138 bool VCMGenericEncoder::SupportsNativeHandle() const {
139 RTC_DCHECK_RUNS_SINGLE_THREADED(&race_checker_);
131 return encoder_->SupportsNativeHandle(); 140 return encoder_->SupportsNativeHandle();
132 } 141 }
133 142
134 VCMEncodedFrameCallback::VCMEncodedFrameCallback( 143 VCMEncodedFrameCallback::VCMEncodedFrameCallback(
135 EncodedImageCallback* post_encode_callback, 144 EncodedImageCallback* post_encode_callback,
136 media_optimization::MediaOptimization* media_opt) 145 media_optimization::MediaOptimization* media_opt)
137 : internal_source_(false), 146 : internal_source_(false),
138 post_encode_callback_(post_encode_callback), 147 post_encode_callback_(post_encode_callback),
139 media_opt_(media_opt) {} 148 media_opt_(media_opt) {}
140 149
(...skipping 12 matching lines...) Expand all
153 162
154 if (media_opt_) { 163 if (media_opt_) {
155 media_opt_->UpdateWithEncodedData(encoded_image); 164 media_opt_->UpdateWithEncodedData(encoded_image);
156 if (internal_source_) 165 if (internal_source_)
157 return media_opt_->DropFrame(); // Signal to encoder to drop next frame. 166 return media_opt_->DropFrame(); // Signal to encoder to drop next frame.
158 } 167 }
159 return VCM_OK; 168 return VCM_OK;
160 } 169 }
161 170
162 } // namespace webrtc 171 } // namespace webrtc
OLDNEW
« webrtc/common_video/incoming_video_stream.cc ('K') | « webrtc/modules/video_coding/generic_encoder.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698