Avoid copying of vectors in RtpPacketInfos.

Bug: chromium:982260
Change-Id: Ia4dab497b662e825f80c16530cdf615b62f0a5c9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/148523
Commit-Queue: Minyue Li <minyue@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Chen Xing <chxg@google.com>
Cr-Commit-Position: refs/heads/master@{#28859}
diff --git a/api/rtp_packet_infos.h b/api/rtp_packet_infos.h
index c2b595a..08da1ae 100644
--- a/api/rtp_packet_infos.h
+++ b/api/rtp_packet_infos.h
@@ -12,6 +12,7 @@
 #define API_RTP_PACKET_INFOS_H_
 
 #include <cstdint>
+#include <utility>
 #include <vector>
 
 #include "api/ref_counted_base.h"
@@ -46,7 +47,11 @@
   using reverse_iterator = const_reverse_iterator;
 
   RtpPacketInfos() {}
-  explicit RtpPacketInfos(vector_type entries) : data_(Data::Create(entries)) {}
+  explicit RtpPacketInfos(const vector_type& entries)
+      : data_(Data::Create(entries)) {}
+
+  explicit RtpPacketInfos(vector_type&& entries)
+      : data_(Data::Create(std::move(entries))) {}
 
   RtpPacketInfos(const RtpPacketInfos& other) = default;
   RtpPacketInfos(RtpPacketInfos&& other) = default;
@@ -75,7 +80,7 @@
  private:
   class Data : public rtc::RefCountedBase {
    public:
-    static rtc::scoped_refptr<Data> Create(vector_type entries) {
+    static rtc::scoped_refptr<Data> Create(const vector_type& entries) {
       // Performance optimization for the empty case.
       if (entries.empty()) {
         return nullptr;
@@ -84,10 +89,20 @@
       return new Data(entries);
     }
 
+    static rtc::scoped_refptr<Data> Create(vector_type&& entries) {
+      // Performance optimization for the empty case.
+      if (entries.empty()) {
+        return nullptr;
+      }
+
+      return new Data(std::move(entries));
+    }
+
     const vector_type& entries() const { return entries_; }
 
    private:
-    explicit Data(vector_type entries) : entries_(entries) {}
+    explicit Data(const vector_type& entries) : entries_(entries) {}
+    explicit Data(vector_type&& entries) : entries_(std::move(entries)) {}
     ~Data() override {}
 
     const vector_type entries_;
diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc
index 5466409..f178842 100644
--- a/modules/audio_coding/neteq/neteq_impl.cc
+++ b/modules/audio_coding/neteq/neteq_impl.cc
@@ -898,8 +898,7 @@
 
   // We treat it as if all packets referenced to by |last_decoded_packet_infos_|
   // were mashed together when creating the samples in |algorithm_buffer_|.
-  RtpPacketInfos packet_infos(std::move(last_decoded_packet_infos_));
-  last_decoded_packet_infos_.clear();
+  RtpPacketInfos packet_infos(last_decoded_packet_infos_);
 
   // Copy samples from |algorithm_buffer_| to |sync_buffer_|.
   //