Add unittest to check that ViECapturer does not hold on to frames after they have been delivered
This should have been part of the CL "Remove the need for scoped_ptr<I420VideoFrame> in VieCapturer" https://webrtc-codereview.appspot.com/43669004. TBR=pbos,mflodman BUG=1128 Review URL: https://webrtc-codereview.appspot.com/44629005 Cr-Commit-Position: refs/heads/master@{#8680} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8680 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
e77c9c8df5
commit
4dccdff885
@ -97,8 +97,7 @@ class ViECapturerTest : public ::testing::Test {
|
|||||||
void AddOutputFrame(const I420VideoFrame* frame) {
|
void AddOutputFrame(const I420VideoFrame* frame) {
|
||||||
if (frame->native_handle() == NULL)
|
if (frame->native_handle() == NULL)
|
||||||
output_frame_ybuffers_.push_back(frame->buffer(kYPlane));
|
output_frame_ybuffers_.push_back(frame->buffer(kYPlane));
|
||||||
// Clone the frames because ViECapturer owns the frames.
|
output_frames_.push_back(new I420VideoFrame(*frame));
|
||||||
output_frames_.push_back(frame->CloneFrame());
|
|
||||||
output_frame_event_->Set();
|
output_frame_event_->Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,6 +128,33 @@ class ViECapturerTest : public ::testing::Test {
|
|||||||
std::vector<const uint8_t*> output_frame_ybuffers_;
|
std::vector<const uint8_t*> output_frame_ybuffers_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TEST_F(ViECapturerTest, DoesNotRetainHandleNorCopyBuffer) {
|
||||||
|
// Indicate an output frame has arrived.
|
||||||
|
rtc::scoped_ptr<EventWrapper> 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>;
|
||||||
|
~TestBuffer() override { event_->Set(); }
|
||||||
|
EventWrapper* event_;
|
||||||
|
};
|
||||||
|
|
||||||
|
I420VideoFrame frame(
|
||||||
|
new rtc::RefCountedObject<TestBuffer>(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) {
|
TEST_F(ViECapturerTest, TestTextureFrames) {
|
||||||
const int kNumFrame = 3;
|
const int kNumFrame = 3;
|
||||||
for (int i = 0 ; i < kNumFrame; ++i) {
|
for (int i = 0 ; i < kNumFrame; ++i) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user