| 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 |
| 11 #include "webrtc/video/vie_encoder.h" | 11 #include "webrtc/video/vie_encoder.h" |
| 12 | 12 |
| 13 #include <assert.h> | 13 #include <assert.h> |
| 14 | 14 |
| 15 #include <algorithm> | 15 #include <algorithm> |
| 16 | 16 |
| 17 #include "webrtc/base/checks.h" | 17 #include "webrtc/base/checks.h" |
| 18 #include "webrtc/base/logging.h" | 18 #include "webrtc/base/logging.h" |
| 19 #include "webrtc/base/trace_event.h" | 19 #include "webrtc/base/trace_event.h" |
| 20 #include "webrtc/base/timeutils.h" |
| 20 #include "webrtc/modules/pacing/paced_sender.h" | 21 #include "webrtc/modules/pacing/paced_sender.h" |
| 21 #include "webrtc/modules/video_coding/include/video_coding.h" | 22 #include "webrtc/modules/video_coding/include/video_coding.h" |
| 22 #include "webrtc/modules/video_coding/include/video_coding_defines.h" | 23 #include "webrtc/modules/video_coding/include/video_coding_defines.h" |
| 23 #include "webrtc/system_wrappers/include/metrics.h" | 24 #include "webrtc/system_wrappers/include/metrics.h" |
| 24 #include "webrtc/system_wrappers/include/tick_util.h" | |
| 25 #include "webrtc/video/overuse_frame_detector.h" | 25 #include "webrtc/video/overuse_frame_detector.h" |
| 26 #include "webrtc/video/send_statistics_proxy.h" | 26 #include "webrtc/video/send_statistics_proxy.h" |
| 27 #include "webrtc/video_frame.h" | 27 #include "webrtc/video_frame.h" |
| 28 | 28 |
| 29 namespace webrtc { | 29 namespace webrtc { |
| 30 | 30 |
| 31 static const float kStopPaddingThresholdMs = 2000; | 31 static const float kStopPaddingThresholdMs = 2000; |
| 32 | 32 |
| 33 class QMVideoSettingsCallback : public VCMQMSettingsCallback { | 33 class QMVideoSettingsCallback : public VCMQMSettingsCallback { |
| 34 public: | 34 public: |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 } | 201 } |
| 202 } | 202 } |
| 203 | 203 |
| 204 // Disable padding if only sending one stream and video isn't suspended and | 204 // Disable padding if only sending one stream and video isn't suspended and |
| 205 // min-transmit bitrate isn't used (applied later). | 205 // min-transmit bitrate isn't used (applied later). |
| 206 if (!video_is_suspended && send_codec.numberOfSimulcastStreams <= 1) | 206 if (!video_is_suspended && send_codec.numberOfSimulcastStreams <= 1) |
| 207 pad_up_to_bitrate_bps = 0; | 207 pad_up_to_bitrate_bps = 0; |
| 208 | 208 |
| 209 // The amount of padding should decay to zero if no frames are being | 209 // The amount of padding should decay to zero if no frames are being |
| 210 // captured/encoded unless a min-transmit bitrate is used. | 210 // captured/encoded unless a min-transmit bitrate is used. |
| 211 int64_t now_ms = TickTime::MillisecondTimestamp(); | 211 int64_t now_ms = rtc::TimeMillis(); |
| 212 if (now_ms - time_of_last_frame_activity_ms > kStopPaddingThresholdMs) | 212 if (now_ms - time_of_last_frame_activity_ms > kStopPaddingThresholdMs) |
| 213 pad_up_to_bitrate_bps = 0; | 213 pad_up_to_bitrate_bps = 0; |
| 214 | 214 |
| 215 // Pad up to min bitrate. | 215 // Pad up to min bitrate. |
| 216 if (pad_up_to_bitrate_bps < min_transmit_bitrate_bps) | 216 if (pad_up_to_bitrate_bps < min_transmit_bitrate_bps) |
| 217 pad_up_to_bitrate_bps = min_transmit_bitrate_bps; | 217 pad_up_to_bitrate_bps = min_transmit_bitrate_bps; |
| 218 | 218 |
| 219 // Padding may never exceed bitrate estimate. | 219 // Padding may never exceed bitrate estimate. |
| 220 if (pad_up_to_bitrate_bps > bitrate_bps) | 220 if (pad_up_to_bitrate_bps > bitrate_bps) |
| 221 pad_up_to_bitrate_bps = bitrate_bps; | 221 pad_up_to_bitrate_bps = bitrate_bps; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 250 if (encoder_paused_and_dropped_frame_) { | 250 if (encoder_paused_and_dropped_frame_) { |
| 251 TRACE_EVENT_ASYNC_END0("webrtc", "EncoderPaused", this); | 251 TRACE_EVENT_ASYNC_END0("webrtc", "EncoderPaused", this); |
| 252 } | 252 } |
| 253 encoder_paused_and_dropped_frame_ = false; | 253 encoder_paused_and_dropped_frame_ = false; |
| 254 } | 254 } |
| 255 | 255 |
| 256 void ViEEncoder::EncodeVideoFrame(const VideoFrame& video_frame) { | 256 void ViEEncoder::EncodeVideoFrame(const VideoFrame& video_frame) { |
| 257 VideoCodecType codec_type; | 257 VideoCodecType codec_type; |
| 258 { | 258 { |
| 259 rtc::CritScope lock(&data_cs_); | 259 rtc::CritScope lock(&data_cs_); |
| 260 time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp(); | 260 time_of_last_frame_activity_ms_ = rtc::TimeMillis(); |
| 261 if (EncoderPaused()) { | 261 if (EncoderPaused()) { |
| 262 TraceFrameDropStart(); | 262 TraceFrameDropStart(); |
| 263 return; | 263 return; |
| 264 } | 264 } |
| 265 TraceFrameDropEnd(); | 265 TraceFrameDropEnd(); |
| 266 codec_type = encoder_config_.codecType; | 266 codec_type = encoder_config_.codecType; |
| 267 } | 267 } |
| 268 | 268 |
| 269 TRACE_EVENT_ASYNC_STEP0("webrtc", "Video", video_frame.render_time_ms(), | 269 TRACE_EVENT_ASYNC_STEP0("webrtc", "Video", video_frame.render_time_ms(), |
| 270 "Encode"); | 270 "Encode"); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 void ViEEncoder::OnSetRates(uint32_t bitrate_bps, int framerate) { | 326 void ViEEncoder::OnSetRates(uint32_t bitrate_bps, int framerate) { |
| 327 if (stats_proxy_) | 327 if (stats_proxy_) |
| 328 stats_proxy_->OnSetRates(bitrate_bps, framerate); | 328 stats_proxy_->OnSetRates(bitrate_bps, framerate); |
| 329 } | 329 } |
| 330 | 330 |
| 331 int32_t ViEEncoder::Encoded(const EncodedImage& encoded_image, | 331 int32_t ViEEncoder::Encoded(const EncodedImage& encoded_image, |
| 332 const CodecSpecificInfo* codec_specific_info, | 332 const CodecSpecificInfo* codec_specific_info, |
| 333 const RTPFragmentationHeader* fragmentation) { | 333 const RTPFragmentationHeader* fragmentation) { |
| 334 { | 334 { |
| 335 rtc::CritScope lock(&data_cs_); | 335 rtc::CritScope lock(&data_cs_); |
| 336 time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp(); | 336 time_of_last_frame_activity_ms_ = rtc::TimeMillis(); |
| 337 } | 337 } |
| 338 if (stats_proxy_) { | 338 if (stats_proxy_) { |
| 339 stats_proxy_->OnSendEncodedImage(encoded_image, codec_specific_info); | 339 stats_proxy_->OnSendEncodedImage(encoded_image, codec_specific_info); |
| 340 } | 340 } |
| 341 | 341 |
| 342 int success = 0; | 342 int success = 0; |
| 343 { | 343 { |
| 344 rtc::CritScope lock(&sink_cs_); | 344 rtc::CritScope lock(&sink_cs_); |
| 345 success = sink_->Encoded(encoded_image, codec_specific_info, fragmentation); | 345 success = sink_->Encoded(encoded_image, codec_specific_info, fragmentation); |
| 346 } | 346 } |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 } | 408 } |
| 409 | 409 |
| 410 int32_t QMVideoSettingsCallback::SetVideoQMSettings( | 410 int32_t QMVideoSettingsCallback::SetVideoQMSettings( |
| 411 const uint32_t frame_rate, | 411 const uint32_t frame_rate, |
| 412 const uint32_t width, | 412 const uint32_t width, |
| 413 const uint32_t height) { | 413 const uint32_t height) { |
| 414 return vp_->SetTargetResolution(width, height, frame_rate); | 414 return vp_->SetTargetResolution(width, height, frame_rate); |
| 415 } | 415 } |
| 416 | 416 |
| 417 } // namespace webrtc | 417 } // namespace webrtc |
| OLD | NEW |