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

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

Issue 1426953003: Remove redudant encoder rate calls. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: remove redundant function Created 5 years, 1 month 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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 } // namespace 87 } // namespace
88 88
89 //#define DEBUG_ENCODER_BIT_STREAM 89 //#define DEBUG_ENCODER_BIT_STREAM
90 90
91 VCMGenericEncoder::VCMGenericEncoder(VideoEncoder* encoder, 91 VCMGenericEncoder::VCMGenericEncoder(VideoEncoder* encoder,
92 VideoEncoderRateObserver* rate_observer, 92 VideoEncoderRateObserver* rate_observer,
93 bool internalSource) 93 bool internalSource)
94 : encoder_(encoder), 94 : encoder_(encoder),
95 rate_observer_(rate_observer), 95 rate_observer_(rate_observer),
96 vcm_encoded_frame_callback_(nullptr), 96 vcm_encoded_frame_callback_(nullptr),
97 bit_rate_(0), 97 encoder_params_({0, 0, 0, 0}),
98 frame_rate_(0),
99 internal_source_(internalSource), 98 internal_source_(internalSource),
100 rotation_(kVideoRotation_0), 99 rotation_(kVideoRotation_0),
101 is_screenshare_(false) { 100 is_screenshare_(false) {}
102 }
103 101
104 VCMGenericEncoder::~VCMGenericEncoder() 102 VCMGenericEncoder::~VCMGenericEncoder()
105 { 103 {
106 } 104 }
107 105
108 int32_t VCMGenericEncoder::Release() 106 int32_t VCMGenericEncoder::Release()
109 { 107 {
110 { 108 {
111 rtc::CritScope lock(&rates_lock_); 109 rtc::CritScope lock(&params_lock_);
112 bit_rate_ = 0; 110 encoder_params_ = {0, 0, 0, 0};
113 frame_rate_ = 0;
114 vcm_encoded_frame_callback_ = nullptr; 111 vcm_encoded_frame_callback_ = nullptr;
115 } 112 }
116 113
117 return encoder_->Release(); 114 return encoder_->Release();
118 } 115 }
119 116
120 int32_t 117 int32_t
121 VCMGenericEncoder::InitEncode(const VideoCodec* settings, 118 VCMGenericEncoder::InitEncode(const VideoCodec* settings,
122 int32_t numberOfCores, 119 int32_t numberOfCores,
123 size_t maxPayloadSize) 120 size_t maxPayloadSize)
124 { 121 {
125 { 122 {
126 rtc::CritScope lock(&rates_lock_); 123 rtc::CritScope lock(&params_lock_);
127 bit_rate_ = settings->startBitrate * 1000; 124 encoder_params_.target_bitrate = settings->startBitrate * 1000;
128 frame_rate_ = settings->maxFramerate; 125 encoder_params_.input_frame_rate = settings->maxFramerate;
129 } 126 }
130 127
131 is_screenshare_ = settings->mode == VideoCodecMode::kScreensharing; 128 is_screenshare_ = settings->mode == VideoCodecMode::kScreensharing;
132 if (encoder_->InitEncode(settings, numberOfCores, maxPayloadSize) != 0) { 129 if (encoder_->InitEncode(settings, numberOfCores, maxPayloadSize) != 0) {
133 LOG(LS_ERROR) << "Failed to initialize the encoder associated with " 130 LOG(LS_ERROR) << "Failed to initialize the encoder associated with "
134 "payload name: " << settings->plName; 131 "payload name: " << settings->plName;
135 return -1; 132 return -1;
136 } 133 }
137 return 0; 134 return 0;
138 } 135 }
(...skipping 16 matching lines...) Expand all
155 int32_t result = encoder_->Encode(inputFrame, codecSpecificInfo, &frameTypes); 152 int32_t result = encoder_->Encode(inputFrame, codecSpecificInfo, &frameTypes);
156 if (is_screenshare_ && 153 if (is_screenshare_ &&
157 result == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT) { 154 result == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT) {
158 // Target bitrate exceeded, encoder state has been reset - try again. 155 // Target bitrate exceeded, encoder state has been reset - try again.
159 return encoder_->Encode(inputFrame, codecSpecificInfo, &frameTypes); 156 return encoder_->Encode(inputFrame, codecSpecificInfo, &frameTypes);
160 } 157 }
161 158
162 return result; 159 return result;
163 } 160 }
164 161
165 int32_t 162 void VCMGenericEncoder::SetEncoderParameters(const EncoderParameters& params) {
166 VCMGenericEncoder::SetChannelParameters(int32_t packetLoss, int64_t rtt) 163 bool channel_parameters_have_changed;
167 { 164 bool rates_have_changed;
168 return encoder_->SetChannelParameters(packetLoss, rtt); 165 {
166 rtc::CritScope lock(&params_lock_);
167 channel_parameters_have_changed =
168 params.loss_rate != encoder_params_.loss_rate ||
169 params.rtt != encoder_params_.rtt;
170 rates_have_changed =
171 params.target_bitrate != encoder_params_.target_bitrate ||
172 params.input_frame_rate != encoder_params_.input_frame_rate;
173 encoder_params_ = params;
174 }
175 if (channel_parameters_have_changed)
176 encoder_->SetChannelParameters(params.loss_rate, params.rtt);
177 if (rates_have_changed) {
178 uint32_t target_bitrate_kbps = (params.target_bitrate + 500) / 1000;
179 encoder_->SetRates(target_bitrate_kbps, params.input_frame_rate);
180 if (rate_observer_ != nullptr) {
181 rate_observer_->OnSetRates(params.target_bitrate,
182 params.input_frame_rate);
183 }
184 }
185 }
186
187 EncoderParameters VCMGenericEncoder::GetEncoderParameters() const {
188 rtc::CritScope lock(&params_lock_);
189 return encoder_params_;
169 } 190 }
170 191
171 int32_t 192 int32_t
172 VCMGenericEncoder::SetRates(uint32_t newBitRate, uint32_t frameRate)
173 {
174 uint32_t target_bitrate_kbps = (newBitRate + 500) / 1000;
175 int32_t ret = encoder_->SetRates(target_bitrate_kbps, frameRate);
176 if (ret < 0)
177 {
178 return ret;
179 }
180
181 {
182 rtc::CritScope lock(&rates_lock_);
183 bit_rate_ = newBitRate;
184 frame_rate_ = frameRate;
185 }
186
187 if (rate_observer_ != nullptr)
188 rate_observer_->OnSetRates(newBitRate, frameRate);
189 return VCM_OK;
190 }
191
192 int32_t
193 VCMGenericEncoder::CodecConfigParameters(uint8_t* buffer, int32_t size)
194 {
195 int32_t ret = encoder_->CodecConfigParameters(buffer, size);
196 if (ret < 0)
197 {
198 return ret;
199 }
200 return ret;
201 }
202
203 uint32_t VCMGenericEncoder::BitRate() const
204 {
205 rtc::CritScope lock(&rates_lock_);
206 return bit_rate_;
207 }
208
209 uint32_t VCMGenericEncoder::FrameRate() const
210 {
211 rtc::CritScope lock(&rates_lock_);
212 return frame_rate_;
213 }
214
215 int32_t
216 VCMGenericEncoder::SetPeriodicKeyFrames(bool enable) 193 VCMGenericEncoder::SetPeriodicKeyFrames(bool enable)
217 { 194 {
218 return encoder_->SetPeriodicKeyFrames(enable); 195 return encoder_->SetPeriodicKeyFrames(enable);
219 } 196 }
220 197
221 int32_t VCMGenericEncoder::RequestFrame( 198 int32_t VCMGenericEncoder::RequestFrame(
222 const std::vector<FrameType>& frame_types) { 199 const std::vector<FrameType>& frame_types) {
223 VideoFrame image; 200 VideoFrame image;
224 return encoder_->Encode(image, NULL, &frame_types); 201 return encoder_->Encode(image, NULL, &frame_types);
225 } 202 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 } 304 }
328 305
329 void 306 void
330 VCMEncodedFrameCallback::SetMediaOpt( 307 VCMEncodedFrameCallback::SetMediaOpt(
331 media_optimization::MediaOptimization *mediaOpt) 308 media_optimization::MediaOptimization *mediaOpt)
332 { 309 {
333 _mediaOpt = mediaOpt; 310 _mediaOpt = mediaOpt;
334 } 311 }
335 312
336 } // namespace webrtc 313 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/main/source/generic_encoder.h ('k') | webrtc/modules/video_coding/main/source/video_coding_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698