| Index: webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
|
| diff --git a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
|
| index 65d1a155d52275edbfb1e81ea773545ed5157e21..4e38e3a16c009c11f5f954380591ed26f9826075 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
|
| @@ -29,7 +29,6 @@
|
| #include "webrtc/base/trace_event.h"
|
| #include "webrtc/common_video/include/video_frame_buffer.h"
|
| #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
| -#include "webrtc/modules/include/module_common_types.h"
|
| #include "webrtc/modules/video_coding/codecs/vp9/screenshare_layers.h"
|
|
|
| namespace webrtc {
|
| @@ -80,7 +79,9 @@ VP9EncoderImpl::VP9EncoderImpl()
|
| is_flexible_mode_(false),
|
| frames_encoded_(0),
|
| // Use two spatial when screensharing with flexible mode.
|
| - spatial_layer_(new ScreenshareLayersVP9(2)) {
|
| + spatial_layer_(new ScreenshareLayersVP9(2)),
|
| + last_timing_frame_time_ms_(-1),
|
| + encode_time_start_ms_(0) {
|
| memset(&codec_, 0, sizeof(codec_));
|
| memset(&svc_params_, 0, sizeof(vpx_svc_extra_cfg_t));
|
|
|
| @@ -491,6 +492,14 @@ int VP9EncoderImpl::Encode(const VideoFrame& input_image,
|
| if (encoded_complete_callback_ == NULL) {
|
| return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
|
| }
|
| +
|
| + encode_time_start_ms_ = rtc::TimeMillis();
|
| + if (last_timing_frame_time_ms_ == -1 ||
|
| + input_image.render_time_ms() - last_timing_frame_time_ms_ >=
|
| + codec_.timingFrameTriggerThresholds.delay_ms) {
|
| + last_timing_frame_time_ms_ = input_image.render_time_ms();
|
| + }
|
| +
|
| FrameType frame_type = kVideoFrameDelta;
|
| // We only support one stream at the moment.
|
| if (frame_types && frame_types->size() > 0) {
|
| @@ -712,6 +721,20 @@ int VP9EncoderImpl::GetEncodedLayerFrame(const vpx_codec_cx_pkt* pkt) {
|
| int qp = -1;
|
| vpx_codec_control(encoder_, VP8E_GET_LAST_QUANTIZER, &qp);
|
| encoded_image_.qp_ = qp;
|
| +
|
| + size_t outlier_frame_size_bytes =
|
| + codec_.timingFrameTriggerThresholds.outlier_ratio_percent / 100.0 *
|
| + config_->ss_target_bitrate[layer_id.spatial_layer_id] * 1000 / 8 /
|
| + codec_.maxFramerate;
|
| + if (last_timing_frame_time_ms_ == input_image_->render_time_ms() ||
|
| + encoded_image_._length >= outlier_frame_size_bytes) {
|
| + encoded_image_.timing_.is_timing_frame = true;
|
| + encoded_image_.timing_.encode_start_ms = encode_time_start_ms_;
|
| + encoded_image_.timing_.encode_finish_ms = rtc::TimeMillis();
|
| + } else {
|
| + encoded_image_.timing_.is_timing_frame = false;
|
| + }
|
| +
|
| encoded_complete_callback_->OnEncodedImage(encoded_image_, &codec_specific,
|
| &frag_info);
|
| }
|
|
|