| Index: webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| diff --git a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| index 7257b89b5faa67b55d96ab0d5cd4613ff025074d..1d1a6b8c5f34e4891c1278afaeaa641964c5aaac 100644
|
| --- a/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| +++ b/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
|
| @@ -134,7 +134,6 @@ VP8EncoderImpl::VP8EncoderImpl()
|
| : encoded_complete_callback_(nullptr),
|
| inited_(false),
|
| timestamp_(0),
|
| - feedback_mode_(false),
|
| qp_max_(56), // Setting for max quantizer.
|
| cpu_speed_default_(-6),
|
| number_of_cores_(0),
|
| @@ -350,8 +349,6 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
|
|
|
| SetupTemporalLayers(number_of_streams, num_temporal_layers, *inst);
|
|
|
| - feedback_mode_ = inst->VP8().feedbackModeOn;
|
| -
|
| number_of_cores_ = number_of_cores;
|
| timestamp_ = 0;
|
| codec_ = *inst;
|
| @@ -452,11 +449,7 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
|
| // Set the maximum target size of any key-frame.
|
| rc_max_intra_target_ = MaxIntraTarget(configurations_[0].rc_buf_optimal_sz);
|
|
|
| - if (feedback_mode_) {
|
| - // Disable periodic key frames if we get feedback from the decoder
|
| - // through SLI and RPSI.
|
| - configurations_[0].kf_mode = VPX_KF_DISABLED;
|
| - } else if (inst->VP8().keyFrameInterval > 0) {
|
| + if (inst->VP8().keyFrameInterval > 0) {
|
| configurations_[0].kf_mode = VPX_KF_AUTO;
|
| configurations_[0].kf_max_dist = inst->VP8().keyFrameInterval;
|
| } else {
|
| @@ -540,7 +533,6 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
|
| temporal_layers_[stream_idx]->UpdateConfiguration(&configurations_[i]);
|
| }
|
|
|
| - rps_.Init();
|
| return InitAndSetControlSettings();
|
| }
|
|
|
| @@ -770,47 +762,8 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame,
|
| flags[i] = VPX_EFLAG_FORCE_KF;
|
| }
|
| std::fill(key_frame_request_.begin(), key_frame_request_.end(), false);
|
| - } else if (codec_specific_info &&
|
| - codec_specific_info->codecType == kVideoCodecVP8) {
|
| - if (feedback_mode_) {
|
| - // Handle RPSI and SLI messages and set up the appropriate encode flags.
|
| - bool sendRefresh = false;
|
| - if (codec_specific_info->codecSpecific.VP8.hasReceivedRPSI) {
|
| - rps_.ReceivedRPSI(codec_specific_info->codecSpecific.VP8.pictureIdRPSI);
|
| - }
|
| - if (codec_specific_info->codecSpecific.VP8.hasReceivedSLI) {
|
| - sendRefresh = rps_.ReceivedSLI(frame.timestamp());
|
| - }
|
| - for (size_t i = 0; i < encoders_.size(); ++i) {
|
| - flags[i] = rps_.EncodeFlags(picture_id_[i], sendRefresh,
|
| - frame.timestamp());
|
| - }
|
| - } else {
|
| - if (codec_specific_info->codecSpecific.VP8.hasReceivedRPSI) {
|
| - // Is this our last key frame? If not ignore.
|
| - // |picture_id_| is defined per spatial stream/layer, so check that
|
| - // |RPSI| matches the last key frame from any of the spatial streams.
|
| - // If so, then all spatial streams for this encoding will predict from
|
| - // its long-term reference (last key frame).
|
| - int RPSI = codec_specific_info->codecSpecific.VP8.pictureIdRPSI;
|
| - for (size_t i = 0; i < encoders_.size(); ++i) {
|
| - if (last_key_frame_picture_id_[i] == RPSI) {
|
| - // Request for a long term reference frame.
|
| - // Note 1: overwrites any temporal settings.
|
| - // Note 2: VP8_EFLAG_NO_UPD_ENTROPY is not needed as that flag is
|
| - // set by error_resilient mode.
|
| - for (size_t j = 0; j < encoders_.size(); ++j) {
|
| - flags[j] = VP8_EFLAG_NO_UPD_ARF;
|
| - flags[j] |= VP8_EFLAG_NO_REF_GF;
|
| - flags[j] |= VP8_EFLAG_NO_REF_LAST;
|
| - }
|
| - only_predict_from_key_frame = true;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| - }
|
| }
|
| +
|
| // Set the encoder frame flags and temporal layer_id for each spatial stream.
|
| // Note that |temporal_layers_| are defined starting from lowest resolution at
|
| // position 0 to highest resolution at position |encoders_.size() - 1|,
|
| @@ -960,7 +913,6 @@ int VP8EncoderImpl::GetEncodedPartitions(const VideoFrame& input_image,
|
| // check if encoded frame is a key frame
|
| if (pkt->data.frame.flags & VPX_FRAME_IS_KEY) {
|
| encoded_images_[encoder_idx]._frameType = kVideoFrameKey;
|
| - rps_.EncodedKeyFrame(picture_id_[stream_idx]);
|
| }
|
| PopulateCodecSpecific(&codec_specific, *pkt, stream_idx,
|
| input_image.timestamp(),
|
| @@ -1011,7 +963,6 @@ VideoEncoder::ScalingSettings VP8EncoderImpl::GetScalingSettings() const {
|
| }
|
|
|
| int VP8EncoderImpl::SetChannelParameters(uint32_t packetLoss, int64_t rtt) {
|
| - rps_.SetRtt(rtt);
|
| return WEBRTC_VIDEO_CODEC_OK;
|
| }
|
|
|
| @@ -1025,7 +976,6 @@ VP8DecoderImpl::VP8DecoderImpl()
|
| : buffer_pool_(false, 300 /* max_number_of_buffers*/),
|
| decode_complete_callback_(NULL),
|
| inited_(false),
|
| - feedback_mode_(false),
|
| decoder_(NULL),
|
| image_format_(VPX_IMG_FMT_NONE),
|
| ref_frame_(NULL),
|
| @@ -1050,9 +1000,6 @@ int VP8DecoderImpl::InitDecode(const VideoCodec* inst, int number_of_cores) {
|
| decoder_ = new vpx_codec_ctx_t;
|
| memset(decoder_, 0, sizeof(*decoder_));
|
| }
|
| - if (inst && inst->codecType == kVideoCodecVP8) {
|
| - feedback_mode_ = inst->VP8().feedbackModeOn;
|
| - }
|
| vpx_codec_dec_cfg_t cfg;
|
| // Setting number of threads to a constant value (1)
|
| cfg.threads = 1;
|
| @@ -1141,21 +1088,18 @@ int VP8DecoderImpl::Decode(const EncodedImage& input_image,
|
| return WEBRTC_VIDEO_CODEC_ERROR;
|
| }
|
| }
|
| - // Restrict error propagation using key frame requests. Disabled when
|
| - // the feedback mode is enabled (RPS).
|
| + // Restrict error propagation using key frame requests.
|
| // Reset on a key frame refresh.
|
| - if (!feedback_mode_) {
|
| - if (input_image._frameType == kVideoFrameKey &&
|
| - input_image._completeFrame) {
|
| + if (input_image._frameType == kVideoFrameKey &&
|
| + input_image._completeFrame) {
|
| propagation_cnt_ = -1;
|
| // Start count on first loss.
|
| - } else if ((!input_image._completeFrame || missing_frames) &&
|
| - propagation_cnt_ == -1) {
|
| - propagation_cnt_ = 0;
|
| - }
|
| - if (propagation_cnt_ >= 0) {
|
| - propagation_cnt_++;
|
| - }
|
| + } else if ((!input_image._completeFrame || missing_frames) &&
|
| + propagation_cnt_ == -1) {
|
| + propagation_cnt_ = 0;
|
| + }
|
| + if (propagation_cnt_ >= 0) {
|
| + propagation_cnt_++;
|
| }
|
|
|
| vpx_codec_iter_t iter = NULL;
|
| @@ -1200,48 +1144,6 @@ int VP8DecoderImpl::Decode(const EncodedImage& input_image,
|
| propagation_cnt_ = 0;
|
| return ret;
|
| }
|
| - if (feedback_mode_) {
|
| - // Whenever we receive an incomplete key frame all reference buffers will
|
| - // be corrupt. If that happens we must request new key frames until we
|
| - // decode a complete key frame.
|
| - if (input_image._frameType == kVideoFrameKey && !input_image._completeFrame)
|
| - return WEBRTC_VIDEO_CODEC_ERROR;
|
| - // Check for reference updates and last reference buffer corruption and
|
| - // signal successful reference propagation or frame corruption to the
|
| - // encoder.
|
| - int reference_updates = 0;
|
| - if (vpx_codec_control(decoder_, VP8D_GET_LAST_REF_UPDATES,
|
| - &reference_updates)) {
|
| - // Reset to avoid requesting key frames too often.
|
| - if (propagation_cnt_ > 0) {
|
| - propagation_cnt_ = 0;
|
| - }
|
| - return WEBRTC_VIDEO_CODEC_ERROR;
|
| - }
|
| - int corrupted = 0;
|
| - if (vpx_codec_control(decoder_, VP8D_GET_FRAME_CORRUPTED, &corrupted)) {
|
| - // Reset to avoid requesting key frames too often.
|
| - if (propagation_cnt_ > 0)
|
| - propagation_cnt_ = 0;
|
| - return WEBRTC_VIDEO_CODEC_ERROR;
|
| - }
|
| - int16_t picture_id = -1;
|
| - if (codec_specific_info) {
|
| - picture_id = codec_specific_info->codecSpecific.VP8.pictureId;
|
| - }
|
| - if (picture_id > -1) {
|
| - if (((reference_updates & VP8_GOLD_FRAME) ||
|
| - (reference_updates & VP8_ALTR_FRAME)) &&
|
| - !corrupted) {
|
| - decode_complete_callback_->ReceivedDecodedReferenceFrame(picture_id);
|
| - }
|
| - decode_complete_callback_->ReceivedDecodedFrame(picture_id);
|
| - }
|
| - if (corrupted) {
|
| - // we can decode but with artifacts
|
| - return WEBRTC_VIDEO_CODEC_REQUEST_SLI;
|
| - }
|
| - }
|
| // Check Vs. threshold
|
| if (propagation_cnt_ > kVp8ErrorPropagationTh) {
|
| // Reset to avoid requesting key frames too often.
|
|
|