Test FrameBuffer::Clear and FrameBuffer::Stop
* Clearing while waiting for a frame should return a new frame entering the buffer. * Stopping while waiting for a frame should cancel the wait. Bug: webrtc:13343 Change-Id: Ife9abfa8b6ea56141c9f32ff37d3b2a2e62a44f0 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/236849 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Evan Shrubsole <eshr@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35314}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
c276aee4ed
commit
0b5656312b
@ -29,7 +29,9 @@
|
|||||||
#include "test/time_controller/simulated_time_controller.h"
|
#include "test/time_controller/simulated_time_controller.h"
|
||||||
|
|
||||||
using ::testing::_;
|
using ::testing::_;
|
||||||
|
using ::testing::IsEmpty;
|
||||||
using ::testing::Return;
|
using ::testing::Return;
|
||||||
|
using ::testing::SizeIs;
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace video_coding {
|
namespace video_coding {
|
||||||
@ -259,6 +261,29 @@ TEST_F(TestFrameBuffer2, WaitForFrame) {
|
|||||||
CheckFrame(0, pid, 0);
|
CheckFrame(0, pid, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFrameBuffer2, ClearWhileWaitingForFrame) {
|
||||||
|
const uint16_t pid = Rand();
|
||||||
|
|
||||||
|
// Insert a frame and wait for it for max 100ms.
|
||||||
|
InsertFrame(pid, 0, 25, true, kFrameSize);
|
||||||
|
ExtractFrame(100);
|
||||||
|
// After 10ms, clear the buffer.
|
||||||
|
time_controller_.AdvanceTime(TimeDelta::Millis(10));
|
||||||
|
buffer_->Clear();
|
||||||
|
// Confirm that the frame was not sent for rendering.
|
||||||
|
time_controller_.AdvanceTime(TimeDelta::Millis(15));
|
||||||
|
EXPECT_THAT(frames_, IsEmpty());
|
||||||
|
|
||||||
|
// We are still waiting for a frame, since 100ms has not passed. Insert a new
|
||||||
|
// frame. This new frame should be the one that is returned as the old frame
|
||||||
|
// was cleared.
|
||||||
|
const uint16_t new_pid = pid + 1;
|
||||||
|
InsertFrame(new_pid, 0, 50, true, kFrameSize);
|
||||||
|
time_controller_.AdvanceTime(TimeDelta::Millis(25));
|
||||||
|
ASSERT_THAT(frames_, SizeIs(1));
|
||||||
|
CheckFrame(0, new_pid, 0);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(TestFrameBuffer2, OneSuperFrame) {
|
TEST_F(TestFrameBuffer2, OneSuperFrame) {
|
||||||
uint16_t pid = Rand();
|
uint16_t pid = Rand();
|
||||||
uint32_t ts = Rand();
|
uint32_t ts = Rand();
|
||||||
@ -663,5 +688,20 @@ TEST_F(TestFrameBuffer2, HigherSpatialLayerNonDecodable) {
|
|||||||
CheckFrame(2, pid + 4, 1);
|
CheckFrame(2, pid + 4, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(TestFrameBuffer2, StopWhileWaitingForFrame) {
|
||||||
|
uint16_t pid = Rand();
|
||||||
|
uint32_t ts = Rand();
|
||||||
|
|
||||||
|
InsertFrame(pid, 0, ts, true, kFrameSize);
|
||||||
|
ExtractFrame(10);
|
||||||
|
buffer_->Stop();
|
||||||
|
time_controller_.AdvanceTime(TimeDelta::Millis(10));
|
||||||
|
EXPECT_THAT(frames_, IsEmpty());
|
||||||
|
|
||||||
|
// A new frame request should exit immediately and return no new frame.
|
||||||
|
ExtractFrame(0);
|
||||||
|
EXPECT_THAT(frames_, IsEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace video_coding
|
} // namespace video_coding
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
Reference in New Issue
Block a user