Remove the timestamp_ member of StreamGenerator.
timestamp_ is only used in GenerateFrame() and its old value is discarded. So it just needs to be a local variable in GenerateFrame(). As a result, we can remove the start_timestamp parameter from the constructor and Init(). Also mark the GeneratePacket() method private because it is only used internally. R=stefan@webrtc.org BUG=none TEST=none Review URL: https://webrtc-codereview.appspot.com/50149004 Cr-Commit-Position: refs/heads/master@{#9386}
This commit is contained in:
parent
f291287a7e
commit
349c2bb223
@ -129,7 +129,7 @@ class TestRunningJitterBuffer : public ::testing::Test {
|
|||||||
max_nack_list_size_ = 150;
|
max_nack_list_size_ = 150;
|
||||||
oldest_packet_to_nack_ = 250;
|
oldest_packet_to_nack_ = 250;
|
||||||
jitter_buffer_ = new VCMJitterBuffer(clock_.get(), &event_factory_);
|
jitter_buffer_ = new VCMJitterBuffer(clock_.get(), &event_factory_);
|
||||||
stream_generator_ = new StreamGenerator(0, 0, clock_->TimeInMilliseconds());
|
stream_generator_ = new StreamGenerator(0, clock_->TimeInMilliseconds());
|
||||||
jitter_buffer_->Start();
|
jitter_buffer_->Start();
|
||||||
jitter_buffer_->SetNackSettings(max_nack_list_size_,
|
jitter_buffer_->SetNackSettings(max_nack_list_size_,
|
||||||
oldest_packet_to_nack_, 0);
|
oldest_packet_to_nack_, 0);
|
||||||
@ -1995,7 +1995,7 @@ TEST_F(TestJitterBufferNack, NoNackListReturnedBeforeFirstDecode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) {
|
TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) {
|
||||||
stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(0, clock_->TimeInMilliseconds());
|
||||||
InsertFrame(kVideoFrameKey);
|
InsertFrame(kVideoFrameKey);
|
||||||
stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0,
|
stream_generator_->GenerateFrame(kVideoFrameDelta, 2, 0,
|
||||||
clock_->TimeInMilliseconds());
|
clock_->TimeInMilliseconds());
|
||||||
@ -2008,7 +2008,7 @@ TEST_F(TestJitterBufferNack, NackListBuiltBeforeFirstDecode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) {
|
TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) {
|
||||||
stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(0, clock_->TimeInMilliseconds());
|
||||||
stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
|
stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
|
||||||
clock_->TimeInMilliseconds());
|
clock_->TimeInMilliseconds());
|
||||||
VCMPacket packet;
|
VCMPacket packet;
|
||||||
@ -2033,7 +2033,7 @@ TEST_F(TestJitterBufferNack, VerifyRetransmittedFlag) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) {
|
TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) {
|
||||||
stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(0, clock_->TimeInMilliseconds());
|
||||||
stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
|
stream_generator_->GenerateFrame(kVideoFrameKey, 3, 0,
|
||||||
clock_->TimeInMilliseconds());
|
clock_->TimeInMilliseconds());
|
||||||
EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
|
EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
|
||||||
@ -2050,7 +2050,7 @@ TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrame) {
|
|||||||
|
|
||||||
TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrameSecondInQueue) {
|
TEST_F(TestJitterBufferNack, UseNackToRecoverFirstKeyFrameSecondInQueue) {
|
||||||
VCMPacket packet;
|
VCMPacket packet;
|
||||||
stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(0, clock_->TimeInMilliseconds());
|
||||||
// First frame is delta.
|
// First frame is delta.
|
||||||
stream_generator_->GenerateFrame(kVideoFrameDelta, 3, 0,
|
stream_generator_->GenerateFrame(kVideoFrameDelta, 3, 0,
|
||||||
clock_->TimeInMilliseconds());
|
clock_->TimeInMilliseconds());
|
||||||
@ -2114,7 +2114,7 @@ TEST_F(TestJitterBufferNack, NormalOperationWrap) {
|
|||||||
// ------- ------------------------------------------------------------
|
// ------- ------------------------------------------------------------
|
||||||
// | 65532 | | 65533 | 65534 | 65535 | x | 1 | .. | 9 | x | 11 |.....| 96 |
|
// | 65532 | | 65533 | 65534 | 65535 | x | 1 | .. | 9 | x | 11 |.....| 96 |
|
||||||
// ------- ------------------------------------------------------------
|
// ------- ------------------------------------------------------------
|
||||||
stream_generator_->Init(65532, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(65532, clock_->TimeInMilliseconds());
|
||||||
InsertFrame(kVideoFrameKey);
|
InsertFrame(kVideoFrameKey);
|
||||||
EXPECT_FALSE(request_key_frame);
|
EXPECT_FALSE(request_key_frame);
|
||||||
EXPECT_TRUE(DecodeCompleteFrame());
|
EXPECT_TRUE(DecodeCompleteFrame());
|
||||||
@ -2148,7 +2148,7 @@ TEST_F(TestJitterBufferNack, NormalOperationWrap2) {
|
|||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
// | 65532 | 65533 | 65534 | x | 0 | 1 |
|
// | 65532 | 65533 | 65534 | x | 0 | 1 |
|
||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
stream_generator_->Init(65532, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(65532, clock_->TimeInMilliseconds());
|
||||||
InsertFrame(kVideoFrameKey);
|
InsertFrame(kVideoFrameKey);
|
||||||
EXPECT_FALSE(request_key_frame);
|
EXPECT_FALSE(request_key_frame);
|
||||||
EXPECT_TRUE(DecodeCompleteFrame());
|
EXPECT_TRUE(DecodeCompleteFrame());
|
||||||
@ -2176,7 +2176,7 @@ TEST_F(TestJitterBufferNack, NormalOperationWrap2) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) {
|
TEST_F(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) {
|
||||||
stream_generator_->Init(0, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(0, clock_->TimeInMilliseconds());
|
||||||
InsertFrame(kVideoFrameKey);
|
InsertFrame(kVideoFrameKey);
|
||||||
EXPECT_TRUE(DecodeCompleteFrame());
|
EXPECT_TRUE(DecodeCompleteFrame());
|
||||||
bool extended = false;
|
bool extended = false;
|
||||||
@ -2186,7 +2186,7 @@ TEST_F(TestJitterBufferNack, ResetByFutureKeyFrameDoesntError) {
|
|||||||
// Far-into-the-future video frame, could be caused by resetting the encoder
|
// Far-into-the-future video frame, could be caused by resetting the encoder
|
||||||
// or otherwise restarting. This should not fail when error when the packet is
|
// or otherwise restarting. This should not fail when error when the packet is
|
||||||
// a keyframe, even if all of the nack list needs to be flushed.
|
// a keyframe, even if all of the nack list needs to be flushed.
|
||||||
stream_generator_->Init(10000, 0, clock_->TimeInMilliseconds());
|
stream_generator_->Init(10000, clock_->TimeInMilliseconds());
|
||||||
clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
|
clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
|
||||||
InsertFrame(kVideoFrameKey);
|
InsertFrame(kVideoFrameKey);
|
||||||
EXPECT_TRUE(DecodeCompleteFrame());
|
EXPECT_TRUE(DecodeCompleteFrame());
|
||||||
|
@ -31,8 +31,8 @@ class TestVCMReceiver : public ::testing::Test {
|
|||||||
: clock_(new SimulatedClock(0)),
|
: clock_(new SimulatedClock(0)),
|
||||||
timing_(clock_.get()),
|
timing_(clock_.get()),
|
||||||
receiver_(&timing_, clock_.get(), &event_factory_) {
|
receiver_(&timing_, clock_.get(), &event_factory_) {
|
||||||
stream_generator_.reset(new
|
stream_generator_.reset(
|
||||||
StreamGenerator(0, 0, clock_->TimeInMilliseconds()));
|
new StreamGenerator(0, clock_->TimeInMilliseconds()));
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void SetUp() {
|
virtual void SetUp() {
|
||||||
|
@ -21,20 +21,13 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
StreamGenerator::StreamGenerator(uint16_t start_seq_num,
|
StreamGenerator::StreamGenerator(uint16_t start_seq_num, int64_t current_time)
|
||||||
uint32_t start_timestamp,
|
: packets_(), sequence_number_(start_seq_num), start_time_(current_time) {
|
||||||
int64_t current_time)
|
}
|
||||||
: packets_(),
|
|
||||||
sequence_number_(start_seq_num),
|
|
||||||
timestamp_(start_timestamp),
|
|
||||||
start_time_(current_time) {}
|
|
||||||
|
|
||||||
void StreamGenerator::Init(uint16_t start_seq_num,
|
void StreamGenerator::Init(uint16_t start_seq_num, int64_t current_time) {
|
||||||
uint32_t start_timestamp,
|
|
||||||
int64_t current_time) {
|
|
||||||
packets_.clear();
|
packets_.clear();
|
||||||
sequence_number_ = start_seq_num;
|
sequence_number_ = start_seq_num;
|
||||||
timestamp_ = start_timestamp;
|
|
||||||
start_time_ = current_time;
|
start_time_ = current_time;
|
||||||
memset(&packet_buffer, 0, sizeof(packet_buffer));
|
memset(&packet_buffer, 0, sizeof(packet_buffer));
|
||||||
}
|
}
|
||||||
@ -43,18 +36,18 @@ void StreamGenerator::GenerateFrame(FrameType type,
|
|||||||
int num_media_packets,
|
int num_media_packets,
|
||||||
int num_empty_packets,
|
int num_empty_packets,
|
||||||
int64_t current_time) {
|
int64_t current_time) {
|
||||||
timestamp_ = 90 * (current_time - start_time_);
|
uint32_t timestamp = 90 * (current_time - start_time_);
|
||||||
for (int i = 0; i < num_media_packets; ++i) {
|
for (int i = 0; i < num_media_packets; ++i) {
|
||||||
const int packet_size =
|
const int packet_size =
|
||||||
(kFrameSize + num_media_packets / 2) / num_media_packets;
|
(kFrameSize + num_media_packets / 2) / num_media_packets;
|
||||||
bool marker_bit = (i == num_media_packets - 1);
|
bool marker_bit = (i == num_media_packets - 1);
|
||||||
packets_.push_back(GeneratePacket(
|
packets_.push_back(GeneratePacket(
|
||||||
sequence_number_, timestamp_, packet_size, (i == 0), marker_bit, type));
|
sequence_number_, timestamp, packet_size, (i == 0), marker_bit, type));
|
||||||
++sequence_number_;
|
++sequence_number_;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < num_empty_packets; ++i) {
|
for (int i = 0; i < num_empty_packets; ++i) {
|
||||||
packets_.push_back(GeneratePacket(
|
packets_.push_back(GeneratePacket(
|
||||||
sequence_number_, timestamp_, 0, false, false, kFrameEmpty));
|
sequence_number_, timestamp, 0, false, false, kFrameEmpty));
|
||||||
++sequence_number_;
|
++sequence_number_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,25 +28,14 @@ const int kDefaultFramePeriodMs = 1000 / kDefaultFrameRate;
|
|||||||
|
|
||||||
class StreamGenerator {
|
class StreamGenerator {
|
||||||
public:
|
public:
|
||||||
StreamGenerator(uint16_t start_seq_num,
|
StreamGenerator(uint16_t start_seq_num, int64_t current_time);
|
||||||
uint32_t start_timestamp,
|
void Init(uint16_t start_seq_num, int64_t current_time);
|
||||||
int64_t current_time);
|
|
||||||
void Init(uint16_t start_seq_num,
|
|
||||||
uint32_t start_timestamp,
|
|
||||||
int64_t current_time);
|
|
||||||
|
|
||||||
void GenerateFrame(FrameType type,
|
void GenerateFrame(FrameType type,
|
||||||
int num_media_packets,
|
int num_media_packets,
|
||||||
int num_empty_packets,
|
int num_empty_packets,
|
||||||
int64_t current_time);
|
int64_t current_time);
|
||||||
|
|
||||||
VCMPacket GeneratePacket(uint16_t sequence_number,
|
|
||||||
uint32_t timestamp,
|
|
||||||
unsigned int size,
|
|
||||||
bool first_packet,
|
|
||||||
bool marker_bit,
|
|
||||||
FrameType type);
|
|
||||||
|
|
||||||
bool PopPacket(VCMPacket* packet, int index);
|
bool PopPacket(VCMPacket* packet, int index);
|
||||||
void DropLastPacket();
|
void DropLastPacket();
|
||||||
|
|
||||||
@ -59,11 +48,17 @@ class StreamGenerator {
|
|||||||
int PacketsRemaining() const;
|
int PacketsRemaining() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
VCMPacket GeneratePacket(uint16_t sequence_number,
|
||||||
|
uint32_t timestamp,
|
||||||
|
unsigned int size,
|
||||||
|
bool first_packet,
|
||||||
|
bool marker_bit,
|
||||||
|
FrameType type);
|
||||||
|
|
||||||
std::list<VCMPacket>::iterator GetPacketIterator(int index);
|
std::list<VCMPacket>::iterator GetPacketIterator(int index);
|
||||||
|
|
||||||
std::list<VCMPacket> packets_;
|
std::list<VCMPacket> packets_;
|
||||||
uint16_t sequence_number_;
|
uint16_t sequence_number_;
|
||||||
uint32_t timestamp_;
|
|
||||||
int64_t start_time_;
|
int64_t start_time_;
|
||||||
uint8_t packet_buffer[kMaxPacketSize];
|
uint8_t packet_buffer[kMaxPacketSize];
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user