Index: webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.cc |
diff --git a/webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.cc b/webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.cc |
deleted file mode 100644 |
index 1838e32eb7ac6d4ec70e5e441e391260996f807c..0000000000000000000000000000000000000000 |
--- a/webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.cc |
+++ /dev/null |
@@ -1,132 +0,0 @@ |
-/* |
- * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/modules/video_coding/codecs/vp8/reference_picture_selection.h" |
- |
-#include "vpx/vpx_encoder.h" |
-#include "vpx/vp8cx.h" |
-#include "webrtc/typedefs.h" |
- |
-namespace webrtc { |
- |
-ReferencePictureSelection::ReferencePictureSelection() |
- : kRttConfidence(1.33), |
- update_golden_next_(true), |
- established_golden_(false), |
- received_ack_(false), |
- last_sent_ref_picture_id_(0), |
- last_sent_ref_update_time_(0), |
- established_ref_picture_id_(0), |
- last_refresh_time_(0), |
- rtt_(0) {} |
- |
-void ReferencePictureSelection::Init() { |
- update_golden_next_ = true; |
- established_golden_ = false; |
- received_ack_ = false; |
- last_sent_ref_picture_id_ = 0; |
- last_sent_ref_update_time_ = 0; |
- established_ref_picture_id_ = 0; |
- last_refresh_time_ = 0; |
- rtt_ = 0; |
-} |
- |
-void ReferencePictureSelection::ReceivedRPSI(int rpsi_picture_id) { |
- // Assume RPSI is signaled with 14 bits. |
- if ((rpsi_picture_id & 0x3fff) == (last_sent_ref_picture_id_ & 0x3fff)) { |
- // Remote peer has received our last reference frame, switch frame type. |
- received_ack_ = true; |
- established_golden_ = update_golden_next_; |
- update_golden_next_ = !update_golden_next_; |
- established_ref_picture_id_ = last_sent_ref_picture_id_; |
- } |
-} |
- |
-bool ReferencePictureSelection::ReceivedSLI(uint32_t now_ts) { |
- bool send_refresh = false; |
- // Don't send a refresh more than once per round-trip time. |
- // This is to avoid too frequent refreshes, since the receiver |
- // will signal an SLI for every corrupt frame. |
- if (TimestampDiff(now_ts, last_refresh_time_) > rtt_) { |
- send_refresh = true; |
- last_refresh_time_ = now_ts; |
- } |
- return send_refresh; |
-} |
- |
-int ReferencePictureSelection::EncodeFlags(int picture_id, |
- bool send_refresh, |
- uint32_t now_ts) { |
- int flags = 0; |
- // We can't refresh the decoder until we have established the key frame. |
- if (send_refresh && received_ack_) { |
- flags |= VP8_EFLAG_NO_REF_LAST; // Don't reference the last frame |
- if (established_golden_) |
- flags |= VP8_EFLAG_NO_REF_ARF; // Don't reference the alt-ref frame. |
- else |
- flags |= VP8_EFLAG_NO_REF_GF; // Don't reference the golden frame |
- } |
- |
- // Make sure we don't update the reference frames too often. We must wait long |
- // enough for an RPSI to arrive after the decoder decoded the reference frame. |
- // Ideally that should happen after one round-trip time. |
- // Add a margin defined by |kRttConfidence|. |
- int64_t update_interval = static_cast<int64_t>(kRttConfidence * rtt_); |
- const int64_t kMinUpdateInterval = 90 * 10; // Timestamp frequency |
- if (update_interval < kMinUpdateInterval) |
- update_interval = kMinUpdateInterval; |
- // Don't send reference frame updates until we have an established reference. |
- if (TimestampDiff(now_ts, last_sent_ref_update_time_) > update_interval && |
- received_ack_) { |
- flags |= VP8_EFLAG_NO_REF_LAST; // Don't reference the last frame. |
- if (update_golden_next_) { |
- flags |= VP8_EFLAG_FORCE_GF; // Update the golden reference. |
- flags |= VP8_EFLAG_NO_UPD_ARF; // Don't update alt-ref. |
- flags |= VP8_EFLAG_NO_REF_GF; // Don't reference the golden frame. |
- } else { |
- flags |= VP8_EFLAG_FORCE_ARF; // Update the alt-ref reference. |
- flags |= VP8_EFLAG_NO_UPD_GF; // Don't update the golden frame. |
- flags |= VP8_EFLAG_NO_REF_ARF; // Don't reference the alt-ref frame. |
- } |
- last_sent_ref_picture_id_ = picture_id; |
- last_sent_ref_update_time_ = now_ts; |
- } else { |
- // No update of golden or alt-ref. We can therefore freely reference the |
- // established reference frame and the last frame. |
- if (established_golden_) |
- flags |= VP8_EFLAG_NO_REF_ARF; // Don't reference the alt-ref frame. |
- else |
- flags |= VP8_EFLAG_NO_REF_GF; // Don't reference the golden frame. |
- flags |= VP8_EFLAG_NO_UPD_GF; // Don't update the golden frame. |
- flags |= VP8_EFLAG_NO_UPD_ARF; // Don't update the alt-ref frame. |
- } |
- return flags; |
-} |
- |
-void ReferencePictureSelection::EncodedKeyFrame(int picture_id) { |
- last_sent_ref_picture_id_ = picture_id; |
- received_ack_ = false; |
-} |
- |
-void ReferencePictureSelection::SetRtt(int64_t rtt) { |
- // Convert from milliseconds to timestamp frequency. |
- rtt_ = 90 * rtt; |
-} |
- |
-int64_t ReferencePictureSelection::TimestampDiff(uint32_t new_ts, |
- uint32_t old_ts) { |
- if (old_ts > new_ts) { |
- // Assuming this is a wrap, doing a compensated subtraction. |
- return (new_ts + (static_cast<int64_t>(1) << 32)) - old_ts; |
- } |
- return new_ts - old_ts; |
-} |
- |
-} // namespace webrtc |