| 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 | 
|---|