diff --git a/webrtc/video_engine/vie_capturer_unittest.cc b/webrtc/video_engine/vie_capturer_unittest.cc index fa3a9d213..b0a717293 100644 --- a/webrtc/video_engine/vie_capturer_unittest.cc +++ b/webrtc/video_engine/vie_capturer_unittest.cc @@ -97,8 +97,7 @@ class ViECapturerTest : public ::testing::Test { void AddOutputFrame(const I420VideoFrame* frame) { if (frame->native_handle() == NULL) output_frame_ybuffers_.push_back(frame->buffer(kYPlane)); - // Clone the frames because ViECapturer owns the frames. - output_frames_.push_back(frame->CloneFrame()); + output_frames_.push_back(new I420VideoFrame(*frame)); output_frame_event_->Set(); } @@ -129,6 +128,33 @@ class ViECapturerTest : public ::testing::Test { std::vector output_frame_ybuffers_; }; +TEST_F(ViECapturerTest, DoesNotRetainHandleNorCopyBuffer) { + // Indicate an output frame has arrived. + rtc::scoped_ptr frame_destroyed_event(EventWrapper::Create()); + class TestBuffer : public webrtc::I420Buffer { + public: + TestBuffer(EventWrapper* event) : I420Buffer(5, 5), event_(event) {} + + private: + friend class rtc::RefCountedObject; + ~TestBuffer() override { event_->Set(); } + EventWrapper* event_; + }; + + I420VideoFrame frame( + new rtc::RefCountedObject(frame_destroyed_event.get()), 1, 1, + kVideoRotation_0); + + AddInputFrame(&frame); + WaitOutputFrame(); + + EXPECT_EQ(output_frames_[0]->video_frame_buffer().get(), + frame.video_frame_buffer().get()); + output_frames_.clear(); + frame.Reset(); + EXPECT_EQ(kEventSignaled, frame_destroyed_event->Wait(FRAME_TIMEOUT_MS)); +} + TEST_F(ViECapturerTest, TestTextureFrames) { const int kNumFrame = 3; for (int i = 0 ; i < kNumFrame; ++i) {