Remove FullStackTest frame pointer handles.

Simplifies code, speculative fix for a DCHECK crash in ForemanCifPlr5.

BUG=4451
R=magjed@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/45809005

Cr-Commit-Position: refs/heads/master@{#8803}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8803 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video/full_stack.cc b/webrtc/video/full_stack.cc
index ca58516..9913f3d 100644
--- a/webrtc/video/full_stack.cc
+++ b/webrtc/video/full_stack.cc
@@ -82,7 +82,6 @@
         last_render_time_(0),
         rtp_timestamp_delta_(0),
         crit_(CriticalSectionWrapper::CreateCriticalSection()),
-        first_send_frame_(NULL),
         avg_psnr_threshold_(avg_psnr_threshold),
         avg_ssim_threshold_(avg_ssim_threshold),
         comparison_lock_(CriticalSectionWrapper::CreateCriticalSection()),
@@ -120,12 +119,6 @@
       EXPECT_TRUE(thread->Stop());
       delete thread;
     }
-
-    for (I420VideoFrame* frame : frames_)
-      delete frame;
-
-    for (I420VideoFrame* frame : frame_pool_)
-      delete frame;
   }
 
   virtual void SetReceiver(PacketReceiver* receiver) { receiver_ = receiver; }
@@ -144,23 +137,12 @@
   }
 
   void IncomingCapturedFrame(const I420VideoFrame& video_frame) override {
-    I420VideoFrame* copy = NULL;
-    {
-      CriticalSectionScoped lock(crit_.get());
-      if (frame_pool_.size() > 0) {
-        copy = frame_pool_.front();
-        frame_pool_.pop_front();
-      }
-    }
-    if (copy == NULL)
-      copy = new I420VideoFrame();
-
-    copy->CopyFrame(video_frame);
-    copy->set_timestamp(copy->ntp_time_ms() * 90);
+    I420VideoFrame copy = video_frame;
+    copy.set_timestamp(copy.ntp_time_ms() * 90);
 
     {
       CriticalSectionScoped lock(crit_.get());
-      if (first_send_frame_ == NULL && rtp_timestamp_delta_ == 0)
+      if (first_send_frame_.IsZeroSize() && rtp_timestamp_delta_ == 0)
         first_send_frame_ = copy;
 
       frames_.push_back(copy);
@@ -178,8 +160,8 @@
       CriticalSectionScoped lock(crit_.get());
       if (rtp_timestamp_delta_ == 0) {
         rtp_timestamp_delta_ =
-            header.timestamp - first_send_frame_->timestamp();
-        first_send_frame_ = NULL;
+            header.timestamp - first_send_frame_.timestamp();
+        first_send_frame_.Reset();
       }
       send_times_[header.timestamp - rtp_timestamp_delta_] =
           Clock::GetRealTimeClock()->CurrentNtpInMilliseconds();
@@ -199,23 +181,22 @@
     uint32_t send_timestamp = video_frame.timestamp() - rtp_timestamp_delta_;
 
     CriticalSectionScoped lock(crit_.get());
-    while (frames_.front()->timestamp() < send_timestamp) {
-      AddFrameComparison(
-          frames_.front(), &last_rendered_frame_, true, render_time_ms);
-      frame_pool_.push_back(frames_.front());
+
+    while (frames_.front().timestamp() < send_timestamp) {
+      AddFrameComparison(frames_.front(), last_rendered_frame_, true,
+                         render_time_ms);
       frames_.pop_front();
     }
 
-    I420VideoFrame* reference_frame = frames_.front();
+    I420VideoFrame reference_frame = frames_.front();
     frames_.pop_front();
-    assert(reference_frame != NULL);
-    EXPECT_EQ(reference_frame->timestamp(), send_timestamp);
-    assert(reference_frame->timestamp() == send_timestamp);
+    assert(!reference_frame.IsZeroSize());
+    EXPECT_EQ(reference_frame.timestamp(), send_timestamp);
+    assert(reference_frame.timestamp() == send_timestamp);
 
-    AddFrameComparison(reference_frame, &video_frame, false, render_time_ms);
-    frame_pool_.push_back(reference_frame);
+    AddFrameComparison(reference_frame, video_frame, false, render_time_ms);
 
-    last_rendered_frame_.CopyFrame(video_frame);
+    last_rendered_frame_ = video_frame;
   }
 
   bool IsTextureSupported() const override { return false; }
@@ -253,39 +234,18 @@
     FrameComparison()
         : dropped(false), send_time_ms(0), recv_time_ms(0), render_time_ms(0) {}
 
-    FrameComparison(const I420VideoFrame* reference,
-                    const I420VideoFrame* render,
+    FrameComparison(const I420VideoFrame& reference,
+                    const I420VideoFrame& render,
                     bool dropped,
                     int64_t send_time_ms,
                     int64_t recv_time_ms,
                     int64_t render_time_ms)
-        : dropped(dropped),
+        : reference(reference),
+          render(render),
+          dropped(dropped),
           send_time_ms(send_time_ms),
           recv_time_ms(recv_time_ms),
-          render_time_ms(render_time_ms) {
-      this->reference.CopyFrame(*reference);
-      this->render.CopyFrame(*render);
-    }
-
-    FrameComparison(const FrameComparison& compare)
-        : dropped(compare.dropped),
-          send_time_ms(compare.send_time_ms),
-          recv_time_ms(compare.recv_time_ms),
-          render_time_ms(compare.render_time_ms) {
-      this->reference.CopyFrame(compare.reference);
-      this->render.CopyFrame(compare.render);
-    }
-
-    void CloneStatsAndSwapFrames(FrameComparison* comparison) {
-      reference.SwapFrame(&comparison->reference);
-      render.SwapFrame(&comparison->render);
-      dropped = comparison->dropped;
-      send_time_ms = comparison->send_time_ms;
-      recv_time_ms = comparison->recv_time_ms;
-      render_time_ms = comparison->render_time_ms;
-    }
-
-    ~FrameComparison() {}
+          render_time_ms(render_time_ms) {}
 
     I420VideoFrame reference;
     I420VideoFrame render;
@@ -295,15 +255,15 @@
     int64_t render_time_ms;
   };
 
-  void AddFrameComparison(const I420VideoFrame* reference,
-                          const I420VideoFrame* render,
+  void AddFrameComparison(const I420VideoFrame& reference,
+                          const I420VideoFrame& render,
                           bool dropped,
                           int64_t render_time_ms)
       EXCLUSIVE_LOCKS_REQUIRED(crit_) {
-    int64_t send_time_ms = send_times_[reference->timestamp()];
-    send_times_.erase(reference->timestamp());
-    int64_t recv_time_ms = recv_times_[reference->timestamp()];
-    recv_times_.erase(reference->timestamp());
+    int64_t send_time_ms = send_times_[reference.timestamp()];
+    send_times_.erase(reference.timestamp());
+    int64_t recv_time_ms = recv_times_[reference.timestamp()];
+    recv_times_.erase(reference.timestamp());
 
     CriticalSectionScoped crit(comparison_lock_.get());
     comparisons_.push_back(FrameComparison(reference,
@@ -360,7 +320,7 @@
     if (comparisons_.empty() || AllFramesRecorded())
       return false;
 
-    comparison->CloneStatsAndSwapFrames(&comparisons_.front());
+    *comparison = comparisons_.front();
     comparisons_.pop_front();
 
     FrameRecorded();
@@ -452,12 +412,11 @@
   uint32_t rtp_timestamp_delta_;
 
   const rtc::scoped_ptr<CriticalSectionWrapper> crit_;
-  std::deque<I420VideoFrame*> frames_ GUARDED_BY(crit_);
-  std::deque<I420VideoFrame*> frame_pool_ GUARDED_BY(crit_);
+  std::deque<I420VideoFrame> frames_ GUARDED_BY(crit_);
   I420VideoFrame last_rendered_frame_ GUARDED_BY(crit_);
   std::map<uint32_t, int64_t> send_times_ GUARDED_BY(crit_);
   std::map<uint32_t, int64_t> recv_times_ GUARDED_BY(crit_);
-  I420VideoFrame* first_send_frame_ GUARDED_BY(crit_);
+  I420VideoFrame first_send_frame_ GUARDED_BY(crit_);
   const double avg_psnr_threshold_;
   const double avg_ssim_threshold_;