video_coding: Updating NACK functions naming
Review URL: http://webrtc-codereview.appspot.com/329018 git-svn-id: http://webrtc.googlecode.com/svn/trunk@1322 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
8fa31bc4e5
commit
cd64886a2f
@ -208,28 +208,19 @@ VCMFrameBuffer::LatestPacketTimeMs()
|
|||||||
return _latestPacketTimeMs;
|
return _latestPacketTimeMs;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Zero out all entries in list up to and including the (first)
|
// Build hard NACK list:Zero out all entries in list up to and including the
|
||||||
// entry equal to _lowSeqNum
|
// (first) entry equal to _lowSeqNum.
|
||||||
WebRtc_Word32
|
int VCMFrameBuffer::BuildHardNackList(int* list, int num) {
|
||||||
VCMFrameBuffer::ZeroOutSeqNum(WebRtc_Word32* list, WebRtc_Word32 num)
|
if (_sessionInfo.BuildHardNackList(list, num) != 0) {
|
||||||
{
|
return -1;
|
||||||
if (_sessionInfo.ZeroOutSeqNum(list, num) != 0)
|
}
|
||||||
{
|
return 0;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Zero out all entries in list up to and including the (first) entry equal to
|
// Build selective NACK list: Create a soft (selective) list of entries to zero
|
||||||
// _lowSeqNum. Hybrid mode: 1. Don't NACK FEC packets 2. Make a smart decision
|
// out up to and including the (first) entry equal to _lowSeqNum.
|
||||||
// on whether to NACK or not
|
int VCMFrameBuffer::BuildSoftNackList(int* list, int num, int rttMs) {
|
||||||
|
return _sessionInfo.BuildSoftNackList(list, num, rttMs);
|
||||||
WebRtc_Word32
|
|
||||||
VCMFrameBuffer::ZeroOutSeqNumHybrid(WebRtc_Word32* list,
|
|
||||||
WebRtc_Word32 num,
|
|
||||||
WebRtc_UWord32 rttMs)
|
|
||||||
{
|
|
||||||
return _sessionInfo.ZeroOutSeqNumHybrid(list, num, rttMs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -66,13 +66,13 @@ public:
|
|||||||
void SetCountedFrame(bool frameCounted);
|
void SetCountedFrame(bool frameCounted);
|
||||||
bool GetCountedFrame() const;
|
bool GetCountedFrame() const;
|
||||||
|
|
||||||
// NACK
|
// NACK - Building the NACK lists.
|
||||||
// Zero out all entries in list up to and including _lowSeqNum
|
// Build hard NACK list: Zero out all entries in list up to and including
|
||||||
WebRtc_Word32 ZeroOutSeqNum(WebRtc_Word32* list, WebRtc_Word32 num);
|
// _lowSeqNum.
|
||||||
// Hybrid extension: only NACK important packets, discard FEC packets
|
int BuildHardNackList(int* list, int num);
|
||||||
WebRtc_Word32 ZeroOutSeqNumHybrid(WebRtc_Word32* list,
|
// Build soft NACK list: Zero out only a subset of the packets, discard
|
||||||
WebRtc_Word32 num,
|
// empty packets.
|
||||||
WebRtc_UWord32 rttMs);
|
int BuildSoftNackList(int* list, int num, int rttMs);
|
||||||
void IncrementNackCount();
|
void IncrementNackCount();
|
||||||
WebRtc_Word16 GetNackCount() const;
|
WebRtc_Word16 GetNackCount() const;
|
||||||
|
|
||||||
|
@ -1400,20 +1400,19 @@ VCMJitterBuffer::CreateNackList(WebRtc_UWord16& nackSize, bool& listExtended)
|
|||||||
(kStateDecoding != state))
|
(kStateDecoding != state))
|
||||||
{
|
{
|
||||||
// Reaching thus far means we are going to update the nack list
|
// Reaching thus far means we are going to update the nack list
|
||||||
// When in hybrid mode, we also need to check empty frames, so as
|
// When in hybrid mode, we use the soft NACKing feature.
|
||||||
// not to add empty packets to the nack list
|
|
||||||
if (_nackMode == kNackHybrid)
|
if (_nackMode == kNackHybrid)
|
||||||
{
|
{
|
||||||
_frameBuffers[i]->ZeroOutSeqNumHybrid(_NACKSeqNumInternal,
|
_frameBuffers[i]->BuildSoftNackList(_NACKSeqNumInternal,
|
||||||
numberOfSeqNum,
|
numberOfSeqNum,
|
||||||
_rttMs);
|
_rttMs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Used when the frame is being processed by the decoding thread
|
// Used when the frame is being processed by the decoding thread
|
||||||
// don't need to use that info in this loop.
|
// don't need to use that info in this loop.
|
||||||
_frameBuffers[i]->ZeroOutSeqNum(_NACKSeqNumInternal,
|
_frameBuffers[i]->BuildHardNackList(_NACKSeqNumInternal,
|
||||||
numberOfSeqNum);
|
numberOfSeqNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -347,8 +347,8 @@ int VCMSessionInfo::MakeDecodable() {
|
|||||||
return return_length;
|
return return_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
int VCMSessionInfo::ZeroOutSeqNum(int* seq_num_list,
|
int VCMSessionInfo::BuildHardNackList(int* seq_num_list,
|
||||||
int seq_num_list_length) {
|
int seq_num_list_length) {
|
||||||
if (NULL == seq_num_list || seq_num_list_length < 1) {
|
if (NULL == seq_num_list || seq_num_list_length < 1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -387,10 +387,9 @@ int VCMSessionInfo::ZeroOutSeqNum(int* seq_num_list,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(mikhal): Rename function.
|
int VCMSessionInfo::BuildSoftNackList(int* seq_num_list,
|
||||||
int VCMSessionInfo::ZeroOutSeqNumHybrid(int* seq_num_list,
|
int seq_num_list_length,
|
||||||
int seq_num_list_length,
|
int rtt_ms) {
|
||||||
int rtt_ms) {
|
|
||||||
if (NULL == seq_num_list || seq_num_list_length < 1) {
|
if (NULL == seq_num_list || seq_num_list_length < 1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -25,14 +25,17 @@ class VCMSessionInfo {
|
|||||||
VCMSessionInfo();
|
VCMSessionInfo();
|
||||||
|
|
||||||
void UpdateDataPointers(ptrdiff_t address_delta);
|
void UpdateDataPointers(ptrdiff_t address_delta);
|
||||||
int ZeroOutSeqNum(int* seq_num_list,
|
// NACK - Building the NACK lists.
|
||||||
int seq_num_list_length);
|
// Build hard NACK list: Zero out all entries in list up to and including
|
||||||
|
// _lowSeqNum.
|
||||||
|
int BuildHardNackList(int* seq_num_list,
|
||||||
|
int seq_num_list_length);
|
||||||
|
|
||||||
// Hybrid version: Zero out seq num for NACK list
|
// Build soft NACK list: Zero out only a subset of the packets, discard
|
||||||
// Selectively NACK packets.
|
// empty packets.
|
||||||
int ZeroOutSeqNumHybrid(int* seq_num_list,
|
int BuildSoftNackList(int* seq_num_list,
|
||||||
int seq_num_list_length,
|
int seq_num_list_length,
|
||||||
int rtt_ms);
|
int rtt_ms);
|
||||||
void Reset();
|
void Reset();
|
||||||
int InsertPacket(const VCMPacket& packet,
|
int InsertPacket(const VCMPacket& packet,
|
||||||
uint8_t* frame_buffer,
|
uint8_t* frame_buffer,
|
||||||
|
@ -103,7 +103,7 @@ class TestNalUnits : public TestSessionInfo {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class TestZeroOutSeqNum : public TestSessionInfo {
|
class TestNackList : public TestSessionInfo {
|
||||||
protected:
|
protected:
|
||||||
enum { kMaxSeqNumListLength = 30 };
|
enum { kMaxSeqNumListLength = 30 };
|
||||||
|
|
||||||
@ -776,7 +776,7 @@ TEST_F(TestNalUnits, ReorderWrapLosses) {
|
|||||||
EXPECT_EQ(2, session_.packets_not_decodable());
|
EXPECT_EQ(2, session_.packets_not_decodable());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestZeroOutSeqNum, NoLosses) {
|
TEST_F(TestNackList, NoLosses) {
|
||||||
uint16_t low = 0xFFFF - 5;
|
uint16_t low = 0xFFFF - 5;
|
||||||
|
|
||||||
packet_.seqNum = low;
|
packet_.seqNum = low;
|
||||||
@ -804,20 +804,19 @@ TEST_F(TestZeroOutSeqNum, NoLosses) {
|
|||||||
|
|
||||||
EXPECT_EQ(10 * kPacketBufferSize, session_.SessionLength());
|
EXPECT_EQ(10 * kPacketBufferSize, session_.SessionLength());
|
||||||
BuildSeqNumList(low, packet_.seqNum);
|
BuildSeqNumList(low, packet_.seqNum);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNum(seq_num_list_, seq_num_list_length_));
|
EXPECT_EQ(0, session_.BuildHardNackList(seq_num_list_, seq_num_list_length_));
|
||||||
EXPECT_EQ(false, session_.session_nack());
|
EXPECT_EQ(false, session_.session_nack());
|
||||||
SCOPED_TRACE("Calling VerifyAll");
|
SCOPED_TRACE("Calling VerifyAll");
|
||||||
VerifyAll(-1);
|
VerifyAll(-1);
|
||||||
|
|
||||||
BuildSeqNumList(low, packet_.seqNum);
|
BuildSeqNumList(low, packet_.seqNum);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNumHybrid(seq_num_list_,
|
EXPECT_EQ(0, session_.BuildSoftNackList(seq_num_list_, seq_num_list_length_,
|
||||||
seq_num_list_length_,
|
60));
|
||||||
60));
|
|
||||||
SCOPED_TRACE("Calling VerifyAll");
|
SCOPED_TRACE("Calling VerifyAll");
|
||||||
VerifyAll(-1);
|
VerifyAll(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestZeroOutSeqNum, FiveLossesSpreadOut) {
|
TEST_F(TestNackList, FiveLossesSpreadOut) {
|
||||||
uint16_t low = 0xFFFF - 5;
|
uint16_t low = 0xFFFF - 5;
|
||||||
|
|
||||||
packet_.seqNum = low;
|
packet_.seqNum = low;
|
||||||
@ -841,7 +840,7 @@ TEST_F(TestZeroOutSeqNum, FiveLossesSpreadOut) {
|
|||||||
|
|
||||||
EXPECT_EQ(5 * kPacketBufferSize, session_.SessionLength());
|
EXPECT_EQ(5 * kPacketBufferSize, session_.SessionLength());
|
||||||
BuildSeqNumList(low, packet_.seqNum);
|
BuildSeqNumList(low, packet_.seqNum);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNum(seq_num_list_, seq_num_list_length_));
|
EXPECT_EQ(0, session_.BuildHardNackList(seq_num_list_, seq_num_list_length_));
|
||||||
for (int i = 0; i < seq_num_list_length_; ++i) {
|
for (int i = 0; i < seq_num_list_length_; ++i) {
|
||||||
if (i % 2)
|
if (i % 2)
|
||||||
EXPECT_EQ(static_cast<uint16_t>(low + i), seq_num_list_[i]);
|
EXPECT_EQ(static_cast<uint16_t>(low + i), seq_num_list_[i]);
|
||||||
@ -850,9 +849,8 @@ TEST_F(TestZeroOutSeqNum, FiveLossesSpreadOut) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BuildSeqNumList(low, packet_.seqNum);
|
BuildSeqNumList(low, packet_.seqNum);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNumHybrid(seq_num_list_,
|
EXPECT_EQ(0, session_.BuildSoftNackList(seq_num_list_, seq_num_list_length_,
|
||||||
seq_num_list_length_,
|
60));
|
||||||
60));
|
|
||||||
EXPECT_EQ(true, session_.session_nack());
|
EXPECT_EQ(true, session_.session_nack());
|
||||||
for (int i = 0; i < seq_num_list_length_; ++i) {
|
for (int i = 0; i < seq_num_list_length_; ++i) {
|
||||||
if (i % 2)
|
if (i % 2)
|
||||||
@ -862,7 +860,7 @@ TEST_F(TestZeroOutSeqNum, FiveLossesSpreadOut) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestZeroOutSeqNum, FirstAndLastLost) {
|
TEST_F(TestNackList, FirstAndLastLost) {
|
||||||
uint16_t low = 0xFFFF;
|
uint16_t low = 0xFFFF;
|
||||||
|
|
||||||
packet_.seqNum = low + 1;
|
packet_.seqNum = low + 1;
|
||||||
@ -874,22 +872,21 @@ TEST_F(TestZeroOutSeqNum, FirstAndLastLost) {
|
|||||||
|
|
||||||
EXPECT_EQ(kPacketBufferSize, session_.SessionLength());
|
EXPECT_EQ(kPacketBufferSize, session_.SessionLength());
|
||||||
BuildSeqNumList(low, packet_.seqNum + 1);
|
BuildSeqNumList(low, packet_.seqNum + 1);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNum(seq_num_list_, seq_num_list_length_));
|
EXPECT_EQ(0, session_.BuildHardNackList(seq_num_list_, seq_num_list_length_));
|
||||||
EXPECT_EQ(0xFFFF, seq_num_list_[0]);
|
EXPECT_EQ(0xFFFF, seq_num_list_[0]);
|
||||||
EXPECT_EQ(-1, seq_num_list_[1]);
|
EXPECT_EQ(-1, seq_num_list_[1]);
|
||||||
EXPECT_EQ(1, seq_num_list_[2]);
|
EXPECT_EQ(1, seq_num_list_[2]);
|
||||||
|
|
||||||
BuildSeqNumList(low, packet_.seqNum + 1);
|
BuildSeqNumList(low, packet_.seqNum + 1);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNumHybrid(seq_num_list_,
|
EXPECT_EQ(0, session_.BuildSoftNackList(seq_num_list_,seq_num_list_length_,
|
||||||
seq_num_list_length_,
|
60));
|
||||||
60));
|
|
||||||
EXPECT_EQ(true, session_.session_nack());
|
EXPECT_EQ(true, session_.session_nack());
|
||||||
EXPECT_EQ(0xFFFF, seq_num_list_[0]);
|
EXPECT_EQ(0xFFFF, seq_num_list_[0]);
|
||||||
EXPECT_EQ(-1, seq_num_list_[1]);
|
EXPECT_EQ(-1, seq_num_list_[1]);
|
||||||
EXPECT_EQ(1, seq_num_list_[2]);
|
EXPECT_EQ(1, seq_num_list_[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestZeroOutSeqNum, LostAllButEmptyPackets) {
|
TEST_F(TestNackList, LostAllButEmptyPackets) {
|
||||||
uint16_t low = 0;
|
uint16_t low = 0;
|
||||||
packet_.seqNum = low + 1;
|
packet_.seqNum = low + 1;
|
||||||
packet_.isFirstPacket = false;
|
packet_.isFirstPacket = false;
|
||||||
@ -909,9 +906,8 @@ TEST_F(TestZeroOutSeqNum, LostAllButEmptyPackets) {
|
|||||||
|
|
||||||
EXPECT_EQ(0, session_.SessionLength());
|
EXPECT_EQ(0, session_.SessionLength());
|
||||||
BuildSeqNumList(low, packet_.seqNum + 1);
|
BuildSeqNumList(low, packet_.seqNum + 1);
|
||||||
EXPECT_EQ(0, session_.ZeroOutSeqNumHybrid(seq_num_list_,
|
EXPECT_EQ(0, session_.BuildSoftNackList(seq_num_list_, seq_num_list_length_,
|
||||||
seq_num_list_length_,
|
60));
|
||||||
60));
|
|
||||||
EXPECT_EQ(true, session_.session_nack());
|
EXPECT_EQ(true, session_.session_nack());
|
||||||
EXPECT_EQ(0, seq_num_list_[0]);
|
EXPECT_EQ(0, seq_num_list_[0]);
|
||||||
EXPECT_EQ(-1, seq_num_list_[1]);
|
EXPECT_EQ(-1, seq_num_list_[1]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user