Delete all logic related to VCMDecodeErrorMode
Bug: webrtc:8064
Change-Id: I345f342a314d88390fff8b305b121076b45a51e8
Reviewed-on: https://webrtc-review.googlesource.com/c/116692
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26283}
diff --git a/modules/video_coding/decoding_state_unittest.cc b/modules/video_coding/decoding_state_unittest.cc
index e4dd8b3..9dcacd4 100644
--- a/modules/video_coding/decoding_state_unittest.cc
+++ b/modules/video_coding/decoding_state_unittest.cc
@@ -46,12 +46,12 @@
FrameData frame_data;
frame_data.rtt_ms = 0;
frame_data.rolling_average_packets_per_frame = -1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
// Always start with a key frame.
dec_state.Reset();
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
packet.frameType = kVideoFrameKey;
- EXPECT_LE(0, frame_key.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame_key.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame_key));
dec_state.SetState(&frame);
frame.Reset();
@@ -59,26 +59,26 @@
// Use pictureId
packet.is_first_packet_in_frame = false;
vp8_header.pictureId = 0x0002;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
frame.Reset();
vp8_header.pictureId = 0;
packet.seqNum = 10;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
// Use sequence numbers.
vp8_header.pictureId = kNoPictureId;
frame.Reset();
packet.seqNum = dec_state.sequence_num() - 1u;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
frame.Reset();
packet.seqNum = dec_state.sequence_num() + 1u;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
// Insert another packet to this frame
packet.seqNum++;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
// Verify wrap.
EXPECT_LE(dec_state.sequence_num(), 0xffff);
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
@@ -93,7 +93,7 @@
packet.seqNum = 1;
packet.timestamp = 1;
EXPECT_TRUE(dec_state.full_sync());
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
frame.Reset();
@@ -103,7 +103,7 @@
vp8_header.pictureId = 1;
packet.seqNum = 2;
packet.timestamp = 2;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
@@ -114,7 +114,7 @@
vp8_header.pictureId = 3;
packet.seqNum = 4;
packet.timestamp = 4;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
// Now insert the next non-base layer (belonging to a next tl0PicId).
frame.Reset();
@@ -123,7 +123,7 @@
vp8_header.pictureId = 4;
packet.seqNum = 5;
packet.timestamp = 5;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
// Checking continuity and not updating the state - this should not trigger
// an update of sync state.
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
@@ -135,7 +135,7 @@
vp8_header.pictureId = 5;
packet.seqNum = 6;
packet.timestamp = 6;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_FALSE(dec_state.full_sync());
@@ -147,7 +147,7 @@
vp8_header.pictureId = 6;
packet.seqNum = 7;
packet.timestamp = 7;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
EXPECT_FALSE(dec_state.full_sync());
frame.Reset();
@@ -156,7 +156,7 @@
vp8_header.pictureId = 7;
packet.seqNum = 8;
packet.timestamp = 8;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
// The current frame is not continuous
dec_state.SetState(&frame);
@@ -175,7 +175,7 @@
FrameData frame_data;
frame_data.rtt_ms = 0;
frame_data.rolling_average_packets_per_frame = -1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
EXPECT_EQ(dec_state.sequence_num(), 1);
// Insert an empty packet that does not belong to the same frame.
@@ -227,7 +227,7 @@
FrameData frame_data;
frame_data.rtt_ms = 0;
frame_data.rolling_average_packets_per_frame = -1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
// tl0PicIdx 0, temporal id 1.
frame.Reset();
@@ -236,7 +236,7 @@
vp8_header.tl0PicIdx = 0;
vp8_header.temporalIdx = 1;
vp8_header.pictureId = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
@@ -248,7 +248,7 @@
vp8_header.tl0PicIdx = 0;
vp8_header.temporalIdx = 3;
vp8_header.pictureId = 3;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_FALSE(dec_state.full_sync());
@@ -259,7 +259,7 @@
vp8_header.tl0PicIdx = 1;
vp8_header.temporalIdx = 0;
vp8_header.pictureId = 4;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_FALSE(dec_state.full_sync());
@@ -273,7 +273,7 @@
vp8_header.tl0PicIdx = 2;
vp8_header.temporalIdx = 0;
vp8_header.pictureId = 5;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
@@ -286,7 +286,7 @@
vp8_header.tl0PicIdx = 3;
vp8_header.temporalIdx = 0;
vp8_header.pictureId = 6;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
EXPECT_TRUE(dec_state.full_sync());
frame.Reset();
@@ -297,7 +297,7 @@
vp8_header.tl0PicIdx = 4;
vp8_header.temporalIdx = 0;
vp8_header.pictureId = 8;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
EXPECT_TRUE(dec_state.full_sync());
dec_state.SetState(&frame);
@@ -313,7 +313,7 @@
vp8_header.temporalIdx = 2;
vp8_header.pictureId = 9;
vp8_header.layerSync = true;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
@@ -334,7 +334,7 @@
vp8_header.temporalIdx = 0;
vp8_header.pictureId = 0;
vp8_header.layerSync = false;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
// Layer 2 - 2 packets (insert one, lose one).
@@ -348,7 +348,7 @@
vp8_header.temporalIdx = 2;
vp8_header.pictureId = 1;
vp8_header.layerSync = true;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
// Layer 1
frame.Reset();
@@ -361,7 +361,7 @@
vp8_header.temporalIdx = 1;
vp8_header.pictureId = 2;
vp8_header.layerSync = true;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
EXPECT_TRUE(dec_state.full_sync());
}
@@ -383,7 +383,7 @@
FrameData frame_data;
frame_data.rtt_ms = 0;
frame_data.rolling_average_packets_per_frame = -1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
EXPECT_TRUE(dec_state.full_sync());
@@ -395,7 +395,7 @@
++packet.seqNum;
vp8_header.temporalIdx = 1;
vp8_header.pictureId = 2;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
EXPECT_FALSE(dec_state.full_sync());
@@ -412,13 +412,13 @@
FrameData frame_data;
frame_data.rtt_ms = 0;
frame_data.rolling_average_packets_per_frame = -1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
packet.timestamp = 9;
EXPECT_TRUE(dec_state.IsOldPacket(&packet));
// Check for old frame
frame.Reset();
- frame.InsertPacket(packet, 0, kNoErrors, frame_data);
+ frame.InsertPacket(packet, 0, frame_data);
EXPECT_TRUE(dec_state.IsOldFrame(&frame));
}
@@ -438,7 +438,7 @@
FrameData frame_data;
frame_data.rtt_ms = 0;
frame_data.rolling_average_packets_per_frame = -1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
// tl0PicIdx 0, temporal id 1.
frame.Reset();
@@ -446,14 +446,14 @@
++packet.seqNum;
vp8_header.temporalIdx++;
vp8_header.pictureId++;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
frame.Reset();
// Testing only gap in tl0PicIdx when tl0PicIdx in continuous.
vp8_header.tl0PicIdx += 3;
vp8_header.temporalIdx++;
vp8_header.tl0PicIdx = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
}
@@ -480,14 +480,14 @@
// Key frame as first frame
packet.frameType = kVideoFrameKey;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
// Key frame again
vp9_hdr.picture_id = 11;
frame.Reset();
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -497,7 +497,7 @@
vp9_hdr.picture_id = 12;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
}
@@ -524,7 +524,7 @@
// Key frame as first frame
packet.frameType = kVideoFrameKey;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -534,7 +534,7 @@
vp9_hdr.picture_id = 15;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 5;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -542,7 +542,7 @@
frame.Reset();
vp9_hdr.picture_id = 12;
vp9_hdr.pid_diff[0] = 2;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -553,7 +553,7 @@
vp9_hdr.pid_diff[0] = 10;
vp9_hdr.pid_diff[1] = 8;
vp9_hdr.pid_diff[2] = 5;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
}
@@ -580,40 +580,40 @@
// Key frame as first frame
packet.frameType = kVideoFrameKey;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
// Delta frame as first frame
frame.Reset();
packet.frameType = kVideoFrameDelta;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
// Key frame then delta frame
frame.Reset();
packet.frameType = kVideoFrameKey;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
dec_state.SetState(&frame);
frame.Reset();
packet.frameType = kVideoFrameDelta;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.picture_id = 15;
vp9_hdr.pid_diff[0] = 5;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
// Ref to 11, not continuous
frame.Reset();
vp9_hdr.picture_id = 16;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
// Ref to 15, continuous
frame.Reset();
vp9_hdr.picture_id = 16;
vp9_hdr.pid_diff[0] = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -623,7 +623,7 @@
vp9_hdr.num_ref_pics = 2;
vp9_hdr.pid_diff[0] = 9;
vp9_hdr.pid_diff[1] = 5;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
// Ref to 10, 15 and 16, continuous
@@ -633,7 +633,7 @@
vp9_hdr.pid_diff[0] = 12;
vp9_hdr.pid_diff[1] = 7;
vp9_hdr.pid_diff[2] = 6;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -642,7 +642,7 @@
packet.frameType = kVideoFrameKey;
vp9_hdr.picture_id = VCMDecodingState::kFrameDecodedLength - 2;
vp9_hdr.num_ref_pics = 0;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -652,7 +652,7 @@
vp9_hdr.picture_id = VCMDecodingState::kFrameDecodedLength - 1;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -661,7 +661,7 @@
vp9_hdr.picture_id = 0;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -670,7 +670,7 @@
vp9_hdr.picture_id = 20;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 20;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -679,7 +679,7 @@
vp9_hdr.picture_id = 23;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 13;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
// Key frame, continuous
@@ -687,7 +687,7 @@
packet.frameType = kVideoFrameKey;
vp9_hdr.picture_id = 25;
vp9_hdr.num_ref_pics = 0;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -697,7 +697,7 @@
vp9_hdr.picture_id = 26;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 1;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_TRUE(dec_state.ContinuousFrame(&frame));
dec_state.SetState(&frame);
@@ -706,7 +706,7 @@
vp9_hdr.picture_id = 30;
vp9_hdr.num_ref_pics = 1;
vp9_hdr.pid_diff[0] = 30;
- EXPECT_LE(0, frame.InsertPacket(packet, 0, kNoErrors, frame_data));
+ EXPECT_LE(0, frame.InsertPacket(packet, 0, frame_data));
EXPECT_FALSE(dec_state.ContinuousFrame(&frame));
}
diff --git a/modules/video_coding/frame_buffer.cc b/modules/video_coding/frame_buffer.cc
index 908a2a2..37709c9 100644
--- a/modules/video_coding/frame_buffer.cc
+++ b/modules/video_coding/frame_buffer.cc
@@ -80,7 +80,6 @@
VCMFrameBufferEnum VCMFrameBuffer::InsertPacket(
const VCMPacket& packet,
int64_t timeInMs,
- VCMDecodeErrorMode decode_error_mode,
const FrameData& frame_data) {
TRACE_EVENT0("webrtc", "VCMFrameBuffer::InsertPacket");
assert(!(NULL == packet.dataPtr && packet.sizeBytes > 0));
@@ -129,8 +128,7 @@
if (packet.sizeBytes > 0)
CopyCodecSpecific(&packet.video_header);
- int retVal =
- _sessionInfo.InsertPacket(packet, _buffer, decode_error_mode, frame_data);
+ int retVal = _sessionInfo.InsertPacket(packet, _buffer, frame_data);
if (retVal == -1) {
return kSizeError;
} else if (retVal == -2) {
@@ -182,9 +180,6 @@
if (_sessionInfo.complete()) {
SetState(kStateComplete);
return kCompleteSession;
- } else if (_sessionInfo.decodable()) {
- SetState(kStateDecodable);
- return kDecodableSession;
}
return kIncomplete;
}
@@ -240,8 +235,7 @@
break;
case kStateComplete:
- assert(_state == kStateEmpty || _state == kStateIncomplete ||
- _state == kStateDecodable);
+ assert(_state == kStateEmpty || _state == kStateIncomplete);
break;
@@ -249,10 +243,6 @@
// Should only be set to empty through Reset().
assert(false);
break;
-
- case kStateDecodable:
- assert(_state == kStateEmpty || _state == kStateIncomplete);
- break;
}
_state = state;
}
diff --git a/modules/video_coding/frame_buffer.h b/modules/video_coding/frame_buffer.h
index 32c459a..18f40fc 100644
--- a/modules/video_coding/frame_buffer.h
+++ b/modules/video_coding/frame_buffer.h
@@ -35,7 +35,6 @@
VCMFrameBufferEnum InsertPacket(const VCMPacket& packet,
int64_t timeInMs,
- VCMDecodeErrorMode decode_error_mode,
const FrameData& frame_data);
// State
diff --git a/modules/video_coding/include/video_coding.h b/modules/video_coding/include/video_coding.h
index b9da96d..86a5bc3 100644
--- a/modules/video_coding/include/video_coding.h
+++ b/modules/video_coding/include/video_coding.h
@@ -27,19 +27,6 @@
class VideoEncoder;
struct CodecSpecificInfo;
-// Used to indicate which decode with errors mode should be used.
-enum VCMDecodeErrorMode {
- kNoErrors, // Never decode with errors. Video will freeze
- // if nack is disabled.
- kSelectiveErrors, // Frames that are determined decodable in
- // VCMSessionInfo may be decoded with missing
- // packets. As not all incomplete frames will be
- // decodable, video will freeze if nack is disabled.
- kWithErrors // Release frames as needed. Errors may be
- // introduced as some encoded frames may not be
- // complete.
-};
-
class VideoCodingModule : public Module {
public:
enum SenderNackMode { kNackNone, kNackAll, kNackSelective };
@@ -166,12 +153,7 @@
// Return value : VCM_OK, on success;
// < 0, on error.
enum ReceiverRobustness { kNone, kHardNack };
- virtual int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode,
- VCMDecodeErrorMode errorMode) = 0;
-
- int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode) {
- return SetReceiverRobustnessMode(robustnessMode, kNoErrors);
- }
+ virtual int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode) = 0;
// Sets the maximum number of sequence numbers that we are allowed to NACK
// and the oldest sequence number that we will consider to NACK. If a
diff --git a/modules/video_coding/jitter_buffer.cc b/modules/video_coding/jitter_buffer.cc
index 4327ac9..12c191d 100644
--- a/modules/video_coding/jitter_buffer.cc
+++ b/modules/video_coding/jitter_buffer.cc
@@ -255,7 +255,6 @@
max_nack_list_size_(0),
max_packet_age_to_nack_(0),
max_incomplete_time_ms_(0),
- decode_error_mode_(kNoErrors),
average_packets_per_frame_(0.0f),
frame_counter_(0) {
for (int i = 0; i < kStartNumberOfFrames; i++)
@@ -494,43 +493,6 @@
return encoded_frame;
}
-bool VCMJitterBuffer::NextMaybeIncompleteTimestamp(uint32_t* timestamp) {
- rtc::CritScope cs(&crit_sect_);
- if (!running_) {
- return false;
- }
- if (decode_error_mode_ == kNoErrors) {
- // No point to continue, as we are not decoding with errors.
- return false;
- }
-
- CleanUpOldOrEmptyFrames();
-
- VCMFrameBuffer* oldest_frame;
- if (decodable_frames_.empty()) {
- if (nack_mode_ != kNoNack || incomplete_frames_.size() <= 1) {
- return false;
- }
- oldest_frame = incomplete_frames_.Front();
- // Frame will only be removed from buffer if it is complete (or decodable).
- if (oldest_frame->GetState() < kStateComplete) {
- return false;
- }
- } else {
- oldest_frame = decodable_frames_.Front();
- // If we have exactly one frame in the buffer, release it only if it is
- // complete. We know decodable_frames_ is not empty due to the previous
- // check.
- if (decodable_frames_.size() == 1 && incomplete_frames_.empty() &&
- oldest_frame->GetState() != kStateComplete) {
- return false;
- }
- }
-
- *timestamp = oldest_frame->Timestamp();
- return true;
-}
-
VCMEncodedFrame* VCMJitterBuffer::ExtractAndSetDecode(uint32_t timestamp) {
rtc::CritScope cs(&crit_sect_);
if (!running_) {
@@ -711,7 +673,7 @@
frame_data.rtt_ms = rtt_ms_;
frame_data.rolling_average_packets_per_frame = average_packets_per_frame_;
VCMFrameBufferEnum buffer_state =
- frame->InsertPacket(packet, now_ms, decode_error_mode_, frame_data);
+ frame->InsertPacket(packet, now_ms, frame_data);
if (previous_state != kStateComplete) {
TRACE_EVENT_ASYNC_BEGIN1("webrtc", "Video", frame->Timestamp(), "timestamp",
@@ -747,18 +709,14 @@
break;
}
case kCompleteSession: {
- if (previous_state != kStateDecodable &&
- previous_state != kStateComplete) {
+ if (previous_state != kStateComplete) {
CountFrame(*frame);
if (continuous) {
// Signal that we have a complete session.
frame_event_->Set();
}
}
- RTC_FALLTHROUGH();
- }
- // Note: There is no break here - continuing to kDecodableSession.
- case kDecodableSession: {
+
*retransmitted = (frame->GetNackCount() > 0);
if (continuous) {
decodable_frames_.InsertFrame(frame);
@@ -812,12 +770,8 @@
bool VCMJitterBuffer::IsContinuousInState(
const VCMFrameBuffer& frame,
const VCMDecodingState& decoding_state) const {
- // Is this frame (complete or decodable) and continuous?
- // kStateDecodable will never be set when decode_error_mode_ is false
- // as SessionInfo determines this state based on the error mode (and frame
- // completeness).
- return (frame.GetState() == kStateComplete ||
- frame.GetState() == kStateDecodable) &&
+ // Is this frame complete and continuous?
+ return (frame.GetState() == kStateComplete) &&
decoding_state.ContinuousFrame(&frame);
}
@@ -1024,11 +978,6 @@
return nack_list;
}
-void VCMJitterBuffer::SetDecodeErrorMode(VCMDecodeErrorMode error_mode) {
- rtc::CritScope cs(&crit_sect_);
- decode_error_mode_ = error_mode;
-}
-
VCMFrameBuffer* VCMJitterBuffer::NextFrame() const {
if (!decodable_frames_.empty())
return decodable_frames_.Front();
diff --git a/modules/video_coding/jitter_buffer.h b/modules/video_coding/jitter_buffer.h
index 4a0d740..f19e7a7 100644
--- a/modules/video_coding/jitter_buffer.h
+++ b/modules/video_coding/jitter_buffer.h
@@ -145,11 +145,6 @@
// If found, a pointer to the frame is returned. Returns nullptr otherwise.
VCMEncodedFrame* NextCompleteFrame(uint32_t max_wait_time_ms);
- // Locates a frame for decoding (even an incomplete) without delay.
- // The function returns true once such a frame is found, its corresponding
- // timestamp is returned. Otherwise, returns false.
- bool NextMaybeIncompleteTimestamp(uint32_t* timestamp);
-
// Extract frame corresponding to input timestamp.
// Frame will be set to a decoding state.
VCMEncodedFrame* ExtractAndSetDecode(uint32_t timestamp);
@@ -195,11 +190,6 @@
// Returns a list of the sequence numbers currently missing.
std::vector<uint16_t> GetNackList(bool* request_key_frame);
- // Set decode error mode - Should not be changed in the middle of the
- // session. Changes will not influence frames already in the buffer.
- void SetDecodeErrorMode(VCMDecodeErrorMode error_mode);
- VCMDecodeErrorMode decode_error_mode() const { return decode_error_mode_; }
-
void RegisterStatsCallback(VCMReceiveStatisticsCallback* callback);
private:
@@ -367,7 +357,6 @@
int max_packet_age_to_nack_; // Measured in sequence numbers.
int max_incomplete_time_ms_;
- VCMDecodeErrorMode decode_error_mode_;
// Estimated rolling average of packets per frame
float average_packets_per_frame_;
// average_packets_per_frame converges fast if we have fewer than this many
diff --git a/modules/video_coding/jitter_buffer_common.h b/modules/video_coding/jitter_buffer_common.h
index 202b4a3..1a7f08a 100644
--- a/modules/video_coding/jitter_buffer_common.h
+++ b/modules/video_coding/jitter_buffer_common.h
@@ -44,7 +44,6 @@
kNoError = 0,
kIncomplete = 1, // Frame incomplete.
kCompleteSession = 3, // at least one layer in the frame complete.
- kDecodableSession = 4, // Frame incomplete, but ready to be decoded
kDuplicatePacket = 5 // We're receiving a duplicate packet.
};
@@ -52,7 +51,6 @@
kStateEmpty, // frame popped by the RTP receiver
kStateIncomplete, // frame that have one or more packet(s) stored
kStateComplete, // frame that have all packets
- kStateDecodable // Hybrid mode - frame can be decoded
};
enum { kH264StartCodeLengthBytes = 4 };
diff --git a/modules/video_coding/jitter_buffer_unittest.cc b/modules/video_coding/jitter_buffer_unittest.cc
index c2f5ed3..bc2395e 100644
--- a/modules/video_coding/jitter_buffer_unittest.cc
+++ b/modules/video_coding/jitter_buffer_unittest.cc
@@ -258,15 +258,6 @@
return jitter_buffer_->ExtractAndSetDecode(found_frame->Timestamp());
}
- VCMEncodedFrame* DecodeIncompleteFrame() {
- uint32_t timestamp = 0;
- bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp);
- if (!found_frame)
- return NULL;
- VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp);
- return frame;
- }
-
void CheckOutFrame(VCMEncodedFrame* frame_out,
unsigned int size,
bool startCode) {
@@ -413,17 +404,6 @@
return ret;
}
- bool DecodeIncompleteFrame() {
- uint32_t timestamp = 0;
- bool found_frame = jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp);
- if (!found_frame)
- return false;
- VCMEncodedFrame* frame = jitter_buffer_->ExtractAndSetDecode(timestamp);
- bool ret = (frame != NULL);
- jitter_buffer_->ReleaseFrame(frame);
- return ret;
- }
-
VCMJitterBuffer* jitter_buffer_;
StreamGenerator* stream_generator_;
std::unique_ptr<SimulatedClock> clock_;
@@ -446,26 +426,14 @@
TEST_F(TestBasicJitterBuffer, StopRunning) {
jitter_buffer_->Stop();
EXPECT_TRUE(NULL == DecodeCompleteFrame());
- EXPECT_TRUE(NULL == DecodeIncompleteFrame());
jitter_buffer_->Start();
- // Allow selective errors.
- jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
// No packets inserted.
EXPECT_TRUE(NULL == DecodeCompleteFrame());
- EXPECT_TRUE(NULL == DecodeIncompleteFrame());
-
- // Allow decoding with errors.
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
-
- // No packets inserted.
- EXPECT_TRUE(NULL == DecodeCompleteFrame());
- EXPECT_TRUE(NULL == DecodeIncompleteFrame());
}
TEST_F(TestBasicJitterBuffer, SinglePacketFrame) {
// Always start with a complete key frame when not allowing errors.
- jitter_buffer_->SetDecodeErrorMode(kNoErrors);
packet_->frameType = kVideoFrameKey;
packet_->is_first_packet_in_frame = true;
packet_->markerBit = true;
@@ -484,7 +452,6 @@
TEST_F(TestBasicJitterBuffer, VerifyHistogramStats) {
metrics::Reset();
// Always start with a complete key frame when not allowing errors.
- jitter_buffer_->SetDecodeErrorMode(kNoErrors);
packet_->frameType = kVideoFrameKey;
packet_->is_first_packet_in_frame = true;
packet_->markerBit = true;
@@ -864,7 +831,6 @@
packet_->markerBit = true;
packet_->seqNum = seq_num_;
packet_->timestamp = timestamp_;
- jitter_buffer_->SetDecodeErrorMode(kNoErrors);
EXPECT_EQ(0, jitter_buffer_->num_packets());
EXPECT_EQ(0, jitter_buffer_->num_duplicated_packets());
@@ -1162,8 +1128,6 @@
}
TEST_F(TestBasicJitterBuffer, SpsAndPpsHandling) {
- jitter_buffer_->SetDecodeErrorMode(kNoErrors);
-
auto& h264_header =
packet_->video_header.video_type_header.emplace<RTPVideoHeaderH264>();
packet_->timestamp = timestamp_;
@@ -1246,364 +1210,6 @@
jitter_buffer_->ReleaseFrame(frame_out);
}
-// Test threshold conditions of decodable state.
-TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsThresholdCheck) {
- jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
- // Always start with a key frame. Use 10 packets to test Decodable State
- // boundaries.
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = false;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
-
- bool retransmitted = false;
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- uint32_t timestamp = 0;
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- packet_->is_first_packet_in_frame = false;
- for (int i = 1; i < 9; ++i) {
- packet_->seqNum++;
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
- }
-
- // last packet
- packet_->markerBit = true;
- packet_->seqNum++;
-
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- VCMEncodedFrame* frame_out = DecodeCompleteFrame();
- CheckOutFrame(frame_out, 10 * size_, false);
- EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
- jitter_buffer_->ReleaseFrame(frame_out);
-
- // An incomplete frame can only be decoded once a subsequent frame has begun
- // to arrive. Insert packet in distant frame for this purpose.
- packet_->frameType = kVideoFrameDelta;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = false;
- packet_->seqNum += 100;
- packet_->timestamp += 33 * 90 * 8;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- // Insert second frame
- packet_->seqNum -= 99;
- packet_->timestamp -= 33 * 90 * 7;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- packet_->is_first_packet_in_frame = false;
- for (int i = 1; i < 8; ++i) {
- packet_->seqNum++;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
- }
-
- packet_->seqNum++;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- frame_out = DecodeIncompleteFrame();
- ASSERT_FALSE(NULL == frame_out);
- CheckOutFrame(frame_out, 9 * size_, false);
- EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
- jitter_buffer_->ReleaseFrame(frame_out);
-
- packet_->markerBit = true;
- packet_->seqNum++;
- EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-}
-
-// Make sure first packet is present before a frame can be decoded.
-TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsIncompleteKey) {
- jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
- // Always start with a key frame.
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = true;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
-
- bool retransmitted = false;
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- VCMEncodedFrame* frame_out = DecodeCompleteFrame();
- CheckOutFrame(frame_out, size_, false);
- EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
- jitter_buffer_->ReleaseFrame(frame_out);
-
- // An incomplete frame can only be decoded once a subsequent frame has begun
- // to arrive. Insert packet in distant frame for this purpose.
- packet_->frameType = kVideoFrameDelta;
- packet_->is_first_packet_in_frame = false;
- packet_->markerBit = false;
- packet_->seqNum += 100;
- packet_->timestamp += 33 * 90 * 8;
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- uint32_t timestamp;
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- // Insert second frame - an incomplete key frame.
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->seqNum -= 99;
- packet_->timestamp -= 33 * 90 * 7;
-
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- // Insert a few more packets. Make sure we're waiting for the key frame to be
- // complete.
- packet_->is_first_packet_in_frame = false;
- for (int i = 1; i < 5; ++i) {
- packet_->seqNum++;
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
- }
-
- // Complete key frame.
- packet_->markerBit = true;
- packet_->seqNum++;
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- frame_out = DecodeCompleteFrame();
- CheckOutFrame(frame_out, 6 * size_, false);
- EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
- jitter_buffer_->ReleaseFrame(frame_out);
-}
-
-// Make sure first packet is present before a frame can be decoded.
-TEST_F(TestBasicJitterBuffer, PacketLossWithSelectiveErrorsMissingFirstPacket) {
- jitter_buffer_->SetDecodeErrorMode(kSelectiveErrors);
- // Always start with a key frame.
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = true;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
-
- bool retransmitted = false;
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- VCMEncodedFrame* frame_out = DecodeCompleteFrame();
- CheckOutFrame(frame_out, size_, false);
- EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
- jitter_buffer_->ReleaseFrame(frame_out);
-
- // An incomplete frame can only be decoded once a subsequent frame has begun
- // to arrive. Insert packet in distant frame for this purpose.
- packet_->frameType = kVideoFrameDelta;
- packet_->is_first_packet_in_frame = false;
- packet_->markerBit = false;
- packet_->seqNum += 100;
- packet_->timestamp += 33 * 90 * 8;
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- uint32_t timestamp;
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- // Insert second frame with the first packet missing. Make sure we're waiting
- // for the key frame to be complete.
- packet_->seqNum -= 98;
- packet_->timestamp -= 33 * 90 * 7;
-
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- for (int i = 0; i < 5; ++i) {
- packet_->seqNum++;
- EXPECT_EQ(kIncomplete,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_FALSE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
- }
-
- // Add first packet. Frame should now be decodable, but incomplete.
- packet_->is_first_packet_in_frame = true;
- packet_->seqNum -= 6;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(×tamp));
-
- frame_out = DecodeIncompleteFrame();
- CheckOutFrame(frame_out, 7 * size_, false);
- EXPECT_EQ(kVideoFrameDelta, frame_out->FrameType());
- jitter_buffer_->ReleaseFrame(frame_out);
-}
-
-TEST_F(TestBasicJitterBuffer, DiscontinuousStreamWhenDecodingWithErrors) {
- // Will use one packet per frame.
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = true;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- bool retransmitted = false;
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- uint32_t next_timestamp;
- VCMEncodedFrame* frame = jitter_buffer_->NextCompleteFrame(0);
- EXPECT_NE(frame, nullptr);
- EXPECT_EQ(packet_->timestamp, frame->Timestamp());
- frame = jitter_buffer_->ExtractAndSetDecode(frame->Timestamp());
- EXPECT_TRUE(frame != NULL);
- jitter_buffer_->ReleaseFrame(frame);
-
- // Drop a complete frame.
- timestamp_ += 2 * 33 * 90;
- seq_num_ += 2;
- packet_->frameType = kVideoFrameDelta;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = false;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- // Insert a packet (so the previous one will be released).
- timestamp_ += 33 * 90;
- seq_num_ += 2;
- packet_->frameType = kVideoFrameDelta;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = false;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- EXPECT_EQ(jitter_buffer_->NextCompleteFrame(0), nullptr);
- EXPECT_TRUE(jitter_buffer_->NextMaybeIncompleteTimestamp(&next_timestamp));
- EXPECT_EQ(packet_->timestamp - 33 * 90, next_timestamp);
-}
-
-TEST_F(TestBasicJitterBuffer, PacketLoss) {
- // Verify missing packets statistics and not decodable packets statistics.
- // Insert 10 frames consisting of 4 packets and remove one from all of them.
- // The last packet is an empty (non-media) packet.
-
- // Select a start seqNum which triggers a difficult wrap situation
- // The JB will only output (incomplete)frames if the next one has started
- // to arrive. Start by inserting one frame (key).
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
- seq_num_ = 0xffff - 4;
- seq_num_++;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = false;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->completeNALU = kNaluStart;
-
- bool retransmitted = false;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- for (int i = 0; i < 11; ++i) {
- webrtc::FrameType frametype = kVideoFrameDelta;
- seq_num_++;
- timestamp_ += 33 * 90;
- packet_->frameType = frametype;
- packet_->is_first_packet_in_frame = true;
- packet_->markerBit = false;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->completeNALU = kNaluStart;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- VCMEncodedFrame* frame_out = DecodeCompleteFrame();
-
- // Should not be complete.
- EXPECT_TRUE(frame_out == NULL);
-
- seq_num_ += 2;
- packet_->is_first_packet_in_frame = false;
- packet_->markerBit = true;
- packet_->seqNum = seq_num_;
- packet_->completeNALU = kNaluEnd;
-
- EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted),
- kDecodableSession);
-
- // Insert an empty (non-media) packet.
- seq_num_++;
- packet_->is_first_packet_in_frame = false;
- packet_->markerBit = false;
- packet_->seqNum = seq_num_;
- packet_->completeNALU = kNaluEnd;
- packet_->frameType = kEmptyFrame;
-
- EXPECT_EQ(jitter_buffer_->InsertPacket(*packet_, &retransmitted),
- kDecodableSession);
- frame_out = DecodeIncompleteFrame();
-
- // One of the packets has been discarded by the jitter buffer.
- // Last frame can't be extracted yet.
- if (i < 10) {
- CheckOutFrame(frame_out, size_, false);
-
- if (i == 0) {
- EXPECT_EQ(kVideoFrameKey, frame_out->FrameType());
- } else {
- EXPECT_EQ(frametype, frame_out->FrameType());
- }
- EXPECT_FALSE(frame_out->Complete());
- EXPECT_FALSE(frame_out->MissingFrame());
- }
-
- jitter_buffer_->ReleaseFrame(frame_out);
- }
-
- // Insert 3 old packets and verify that we have 3 discarded packets
- // Match value to actual latest timestamp decoded.
- timestamp_ -= 33 * 90;
- packet_->timestamp = timestamp_ - 1000;
-
- EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- packet_->timestamp = timestamp_ - 500;
-
- EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- packet_->timestamp = timestamp_ - 100;
-
- EXPECT_EQ(kOldPacket, jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- EXPECT_EQ(3, jitter_buffer_->num_discarded_packets());
-
- jitter_buffer_->Flush();
-
- // This statistic shouldn't be reset by a flush.
- EXPECT_EQ(3, jitter_buffer_->num_discarded_packets());
-}
-
TEST_F(TestBasicJitterBuffer, DeltaFrame100PacketsWithSeqNumWrap) {
seq_num_ = 0xfff0;
packet_->frameType = kVideoFrameKey;
@@ -2016,7 +1622,6 @@
}
TEST_F(TestBasicJitterBuffer, EmptyLastFrame) {
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
seq_num_ = 3;
// Insert one empty packet per frame, should never return the last timestamp
// inserted. Only return empty frames in the presence of subsequent frames.
@@ -2032,204 +1637,13 @@
packet_->frameType = kEmptyFrame;
EXPECT_EQ(kNoError, jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- VCMEncodedFrame* testFrame = DecodeIncompleteFrame();
- // Timestamp should never be the last TS inserted.
- if (testFrame != NULL) {
- EXPECT_TRUE(testFrame->Timestamp() < timestamp_);
- jitter_buffer_->ReleaseFrame(testFrame);
- }
}
}
-TEST_F(TestBasicJitterBuffer, H264IncompleteNalu) {
- jitter_buffer_->SetNackMode(kNoNack, -1, -1);
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
- ++seq_num_;
- timestamp_ += 33 * 90;
- int insertedLength = 0;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->completeNALU = kNaluStart;
- packet_->markerBit = false;
- bool retransmitted = false;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- seq_num_ += 2; // Skip one packet.
- packet_->seqNum = seq_num_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluIncomplete;
- packet_->markerBit = false;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- seq_num_++;
- packet_->seqNum = seq_num_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluEnd;
- packet_->markerBit = false;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- seq_num_++;
- packet_->seqNum = seq_num_;
- packet_->completeNALU = kNaluComplete;
- packet_->markerBit = true; // Last packet.
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- // The JB will only output (incomplete) frames if a packet belonging to a
- // subsequent frame was already inserted. Insert one packet of a subsequent
- // frame. place high timestamp so the JB would always have a next frame
- // (otherwise, for every inserted frame we need to take care of the next
- // frame as well).
- packet_->seqNum = 1;
- packet_->timestamp = timestamp_ + 33 * 90 * 10;
- packet_->frameType = kVideoFrameDelta;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluStart;
- packet_->markerBit = false;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- VCMEncodedFrame* frame_out = DecodeIncompleteFrame();
-
- // We can decode everything from a NALU until a packet has been lost.
- // Thus we can decode the first packet of the first NALU and the second NALU
- // which consists of one packet.
- CheckOutFrame(frame_out, packet_->sizeBytes * 2, false);
- jitter_buffer_->ReleaseFrame(frame_out);
-
- // Test reordered start frame + 1 lost.
- seq_num_ += 2; // Re-order 1 frame.
- timestamp_ += 33 * 90;
- insertedLength = 0;
-
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluEnd;
- packet_->markerBit = false;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- insertedLength += packet_->sizeBytes; // This packet should be decoded.
- seq_num_--;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->completeNALU = kNaluStart;
- packet_->markerBit = false;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- insertedLength += packet_->sizeBytes; // This packet should be decoded.
-
- seq_num_ += 3; // One packet drop.
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluComplete;
- packet_->markerBit = false;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- insertedLength += packet_->sizeBytes; // This packet should be decoded.
- seq_num_++;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluStart;
- packet_->markerBit = false;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- // This packet should be decoded since it's the beginning of a NAL.
- insertedLength += packet_->sizeBytes;
-
- seq_num_ += 2;
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = false;
- packet_->completeNALU = kNaluEnd;
- packet_->markerBit = true;
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- // This packet should not be decoded because it is an incomplete NAL if it
- // is the last.
- frame_out = DecodeIncompleteFrame();
- // Only last NALU is complete.
- CheckOutFrame(frame_out, insertedLength, false);
- jitter_buffer_->ReleaseFrame(frame_out);
-
- // Test to insert empty packet.
- seq_num_++;
- timestamp_ += 33 * 90;
- WebRtcRTPHeader rtpHeader;
- memset(&rtpHeader, 0, sizeof(rtpHeader));
- rtpHeader.video_header().codec = kVideoCodecGeneric;
- VCMPacket emptypacket(data_, 0, rtpHeader);
- emptypacket.seqNum = seq_num_;
- emptypacket.timestamp = timestamp_;
- emptypacket.frameType = kVideoFrameKey;
- emptypacket.is_first_packet_in_frame = true;
- emptypacket.completeNALU = kNaluComplete;
- emptypacket.markerBit = true;
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(emptypacket, &retransmitted));
- // This packet should not be decoded because it is an incomplete NAL if it
- // is the last.
-
- // Will be sent to the decoder, as a packet belonging to a subsequent frame
- // has arrived.
- frame_out = DecodeIncompleteFrame();
- EXPECT_TRUE(frame_out != NULL);
- jitter_buffer_->ReleaseFrame(frame_out);
-
- // Test that a frame can include an empty packet.
- seq_num_++;
- timestamp_ += 33 * 90;
-
- packet_->seqNum = seq_num_;
- packet_->timestamp = timestamp_;
- packet_->frameType = kVideoFrameKey;
- packet_->is_first_packet_in_frame = true;
- packet_->completeNALU = kNaluComplete;
- packet_->markerBit = false;
-
- EXPECT_EQ(kDecodableSession,
- jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- seq_num_++;
- emptypacket.seqNum = seq_num_;
- emptypacket.timestamp = timestamp_;
- emptypacket.frameType = kVideoFrameKey;
- emptypacket.is_first_packet_in_frame = true;
- emptypacket.completeNALU = kNaluComplete;
- emptypacket.markerBit = true;
- EXPECT_EQ(kCompleteSession,
- jitter_buffer_->InsertPacket(emptypacket, &retransmitted));
-
- frame_out = DecodeCompleteFrame();
- // Only last NALU is complete
- CheckOutFrame(frame_out, packet_->sizeBytes, false);
- jitter_buffer_->ReleaseFrame(frame_out);
-}
-
TEST_F(TestBasicJitterBuffer, NextFrameWhenIncomplete) {
// Test that a we cannot get incomplete frames from the JB if we haven't
// received the marker bit, unless we have received a packet from a later
// timestamp.
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
// Start with a complete key frame - insert and decode.
packet_->frameType = kVideoFrameKey;
packet_->is_first_packet_in_frame = true;
@@ -2248,22 +1662,15 @@
packet_->is_first_packet_in_frame = false;
packet_->markerBit = false;
- EXPECT_EQ(kDecodableSession,
+ EXPECT_EQ(kIncomplete,
jitter_buffer_->InsertPacket(*packet_, &retransmitted));
- frame_out = DecodeIncompleteFrame();
- EXPECT_TRUE(frame_out == NULL);
-
packet_->seqNum += 2;
packet_->timestamp += 33 * 90;
packet_->is_first_packet_in_frame = true;
- EXPECT_EQ(kDecodableSession,
+ EXPECT_EQ(kIncomplete,
jitter_buffer_->InsertPacket(*packet_, &retransmitted));
-
- frame_out = DecodeIncompleteFrame();
- CheckOutFrame(frame_out, packet_->sizeBytes, false);
- jitter_buffer_->ReleaseFrame(frame_out);
}
TEST_F(TestRunningJitterBuffer, Full) {
@@ -2433,7 +1840,6 @@
EXPECT_GE(InsertFrame(kVideoFrameDelta), kNoError);
// Waiting for a key frame.
EXPECT_FALSE(DecodeCompleteFrame());
- EXPECT_FALSE(DecodeIncompleteFrame());
// The next complete continuous frame isn't a key frame, but we're waiting
// for one.
@@ -2489,7 +1895,6 @@
// The next complete continuous frame isn't a key frame, but we're waiting
// for one.
EXPECT_FALSE(DecodeCompleteFrame());
- EXPECT_FALSE(DecodeIncompleteFrame());
EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
// Skipping ahead to the key frame.
EXPECT_TRUE(DecodeCompleteFrame());
@@ -2593,10 +1998,9 @@
TEST_F(TestJitterBufferNack, NormalOperation) {
EXPECT_EQ(kNack, jitter_buffer_->nack_mode());
- jitter_buffer_->SetDecodeErrorMode(kWithErrors);
EXPECT_GE(InsertFrame(kVideoFrameKey), kNoError);
- EXPECT_TRUE(DecodeIncompleteFrame());
+ EXPECT_TRUE(DecodeCompleteFrame());
// ----------------------------------------------------------------
// | 1 | 2 | .. | 8 | 9 | x | 11 | 12 | .. | 19 | x | 21 | .. | 100 |
@@ -2604,20 +2008,19 @@
stream_generator_->GenerateFrame(kVideoFrameKey, 100, 0,
clock_->TimeInMilliseconds());
clock_->AdvanceTimeMilliseconds(kDefaultFramePeriodMs);
- EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
+ EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
// Verify that the frame is incomplete.
EXPECT_FALSE(DecodeCompleteFrame());
while (stream_generator_->PacketsRemaining() > 1) {
if (stream_generator_->NextSequenceNumber() % 10 != 0) {
- EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
+ EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
} else {
stream_generator_->NextPacket(NULL); // Drop packet
}
}
- EXPECT_EQ(kDecodableSession, InsertPacketAndPop(0));
+ EXPECT_EQ(kIncomplete, InsertPacketAndPop(0));
EXPECT_EQ(0, stream_generator_->PacketsRemaining());
EXPECT_FALSE(DecodeCompleteFrame());
- EXPECT_FALSE(DecodeIncompleteFrame());
bool request_key_frame = false;
// Verify the NACK list.
diff --git a/modules/video_coding/receiver.cc b/modules/video_coding/receiver.cc
index 0d6478f..e5205af 100644
--- a/modules/video_coding/receiver.cc
+++ b/modules/video_coding/receiver.cc
@@ -140,8 +140,7 @@
min_playout_delay_ms = found_frame->EncodedImage().playout_delay_.min_ms;
max_playout_delay_ms = found_frame->EncodedImage().playout_delay_.max_ms;
} else {
- if (!jitter_buffer_.NextMaybeIncompleteTimestamp(&frame_timestamp))
- return nullptr;
+ return nullptr;
}
if (min_playout_delay_ms >= 0)
@@ -260,14 +259,6 @@
return jitter_buffer_.GetNackList(request_key_frame);
}
-void VCMReceiver::SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode) {
- jitter_buffer_.SetDecodeErrorMode(decode_error_mode);
-}
-
-VCMDecodeErrorMode VCMReceiver::DecodeErrorMode() const {
- return jitter_buffer_.decode_error_mode();
-}
-
void VCMReceiver::RegisterStatsCallback(
VCMReceiveStatisticsCallback* callback) {
jitter_buffer_.RegisterStatsCallback(callback);
diff --git a/modules/video_coding/receiver.h b/modules/video_coding/receiver.h
index e69aeea..44294e2 100644
--- a/modules/video_coding/receiver.h
+++ b/modules/video_coding/receiver.h
@@ -79,10 +79,6 @@
VCMNackMode NackMode() const;
std::vector<uint16_t> NackList(bool* request_key_frame);
- // Decoding with errors.
- void SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode);
- VCMDecodeErrorMode DecodeErrorMode() const;
-
void RegisterStatsCallback(VCMReceiveStatisticsCallback* callback);
void TriggerDecoderShutdown();
diff --git a/modules/video_coding/session_info.cc b/modules/video_coding/session_info.cc
index c37aaf7..d6b59be 100644
--- a/modules/video_coding/session_info.cc
+++ b/modules/video_coding/session_info.cc
@@ -36,7 +36,6 @@
VCMSessionInfo::VCMSessionInfo()
: complete_(false),
- decodable_(false),
frame_type_(kVideoFrameDelta),
packets_(),
empty_seq_num_low_(-1),
@@ -167,7 +166,6 @@
void VCMSessionInfo::Reset() {
complete_ = false;
- decodable_ = false;
frame_type_ = kVideoFrameDelta;
packets_.clear();
empty_seq_num_low_ = -1;
@@ -291,37 +289,10 @@
}
}
-void VCMSessionInfo::UpdateDecodableSession(const FrameData& frame_data) {
- // Irrelevant if session is already complete or decodable
- if (complete_ || decodable_)
- return;
- // TODO(agalusza): Account for bursty loss.
- // TODO(agalusza): Refine these values to better approximate optimal ones.
- // Do not decode frames if the RTT is lower than this.
- const int64_t kRttThreshold = 100;
- // Do not decode frames if the number of packets is between these two
- // thresholds.
- const float kLowPacketPercentageThreshold = 0.2f;
- const float kHighPacketPercentageThreshold = 0.8f;
- if (frame_data.rtt_ms < kRttThreshold || frame_type_ == kVideoFrameKey ||
- !HaveFirstPacket() ||
- (NumPackets() <= kHighPacketPercentageThreshold *
- frame_data.rolling_average_packets_per_frame &&
- NumPackets() > kLowPacketPercentageThreshold *
- frame_data.rolling_average_packets_per_frame))
- return;
-
- decodable_ = true;
-}
-
bool VCMSessionInfo::complete() const {
return complete_;
}
-bool VCMSessionInfo::decodable() const {
- return decodable_;
-}
-
// Find the end of the NAL unit which the packet pointed to by |packet_it|
// belongs to. Returns an iterator to the last packet of the frame if the end
// of the NAL unit wasn't found.
@@ -448,7 +419,6 @@
int VCMSessionInfo::InsertPacket(const VCMPacket& packet,
uint8_t* frame_buffer,
- VCMDecodeErrorMode decode_error_mode,
const FrameData& frame_data) {
if (packet.frameType == kEmptyFrame) {
// Update sequence number of an empty packet.
@@ -526,10 +496,7 @@
size_t returnLength = InsertBuffer(frame_buffer, packet_list_it);
UpdateCompleteSession();
- if (decode_error_mode == kWithErrors)
- decodable_ = true;
- else if (decode_error_mode == kSelectiveErrors)
- UpdateDecodableSession(frame_data);
+
return static_cast<int>(returnLength);
}
diff --git a/modules/video_coding/session_info.h b/modules/video_coding/session_info.h
index 172d092..d66101c 100644
--- a/modules/video_coding/session_info.h
+++ b/modules/video_coding/session_info.h
@@ -40,10 +40,8 @@
void Reset();
int InsertPacket(const VCMPacket& packet,
uint8_t* frame_buffer,
- VCMDecodeErrorMode enable_decodable_state,
const FrameData& frame_data);
bool complete() const;
- bool decodable() const;
// Makes the frame decodable. I.e., only contain decodable NALUs. All
// non-decodable NALUs will be deleted and packets will be moved to in
@@ -104,26 +102,7 @@
size_t DeletePacketData(PacketIterator start, PacketIterator end);
void UpdateCompleteSession();
- // When enabled, determine if session is decodable, i.e. incomplete but
- // would be sent to the decoder.
- // Note: definition assumes random loss.
- // A frame is defined to be decodable when:
- // Round trip time is higher than threshold
- // It is not a key frame
- // It has the first packet: In VP8 the first packet contains all or part of
- // the first partition, which consists of the most relevant information for
- // decoding.
- // Either more than the upper threshold of the average number of packets per
- // frame is present
- // or less than the lower threshold of the average number of packets per
- // frame is present: suggests a small frame. Such a frame is unlikely
- // to contain many motion vectors, so having the first packet will
- // likely suffice. Once we have more than the lower threshold of the
- // frame, we know that the frame is medium or large-sized.
- void UpdateDecodableSession(const FrameData& frame_data);
-
bool complete_;
- bool decodable_;
webrtc::FrameType frame_type_;
// Packets in this frame.
PacketList packets_;
diff --git a/modules/video_coding/session_info_unittest.cc b/modules/video_coding/session_info_unittest.cc
index 2846653..b544ae3 100644
--- a/modules/video_coding/session_info_unittest.cc
+++ b/modules/video_coding/session_info_unittest.cc
@@ -118,18 +118,16 @@
packet_.sizeBytes = packet_buffer_size();
packet_.frameType = kVideoFrameKey;
FillPacket(0);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_FALSE(session_.HaveLastPacket());
EXPECT_EQ(kVideoFrameKey, session_.FrameType());
packet_.is_first_packet_in_frame = false;
packet_.markerBit = true;
packet_.seqNum += 1;
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_TRUE(session_.HaveLastPacket());
EXPECT_EQ(packet_.seqNum, session_.HighSequenceNumber());
EXPECT_EQ(0xFFFE, session_.LowSequenceNumber());
@@ -141,8 +139,7 @@
packet_.seqNum = 2;
packet_.sizeBytes = 0;
packet_.frameType = kEmptyFrame;
- EXPECT_EQ(
- 0, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(0, session_.InsertPacket(packet_, frame_buffer_, frame_data));
EXPECT_EQ(packet_.seqNum, session_.HighSequenceNumber());
}
@@ -151,25 +148,22 @@
packet_.is_first_packet_in_frame = true;
packet_.markerBit = false;
FillPacket(0);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = false;
for (int i = 1; i < 9; ++i) {
packet_.seqNum += 1;
FillPacket(i);
- ASSERT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(
- packet_, frame_buffer_, kNoErrors, frame_data)));
+ ASSERT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
}
packet_.seqNum += 1;
packet_.markerBit = true;
FillPacket(9);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(10 * packet_buffer_size(), session_.SessionLength());
for (int i = 0; i < 10; ++i) {
@@ -178,77 +172,24 @@
}
}
-TEST_F(TestSessionInfo, ErrorsEqualDecodableState) {
- packet_.seqNum = 0xFFFF;
- packet_.is_first_packet_in_frame = false;
- packet_.markerBit = false;
- FillPacket(3);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(
- packet_, frame_buffer_, kWithErrors, frame_data)));
- EXPECT_TRUE(session_.decodable());
-}
-
-TEST_F(TestSessionInfo, SelectiveDecodableState) {
- packet_.seqNum = 0xFFFF;
- packet_.is_first_packet_in_frame = false;
- packet_.markerBit = false;
- FillPacket(1);
- frame_data.rolling_average_packets_per_frame = 11;
- frame_data.rtt_ms = 150;
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(
- packet_, frame_buffer_, kSelectiveErrors, frame_data)));
- EXPECT_FALSE(session_.decodable());
-
- packet_.seqNum -= 1;
- FillPacket(0);
- packet_.is_first_packet_in_frame = true;
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(
- packet_, frame_buffer_, kSelectiveErrors, frame_data)));
- EXPECT_TRUE(session_.decodable());
-
- packet_.is_first_packet_in_frame = false;
- packet_.seqNum += 1;
- for (int i = 2; i < 8; ++i) {
- packet_.seqNum += 1;
- FillPacket(i);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(
- packet_, frame_buffer_, kSelectiveErrors, frame_data)));
- EXPECT_TRUE(session_.decodable());
- }
-
- packet_.seqNum += 1;
- FillPacket(8);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(
- packet_, frame_buffer_, kSelectiveErrors, frame_data)));
- EXPECT_TRUE(session_.decodable());
-}
-
TEST_F(TestSessionInfo, OutOfBoundsPackets1PacketFrame) {
packet_.seqNum = 0x0001;
packet_.is_first_packet_in_frame = true;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0004;
packet_.is_first_packet_in_frame = true;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
packet_.seqNum = 0x0000;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
}
TEST_F(TestSessionInfo, SetMarkerBitOnce) {
@@ -256,15 +197,13 @@
packet_.is_first_packet_in_frame = false;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
++packet_.seqNum;
packet_.is_first_packet_in_frame = true;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
}
TEST_F(TestSessionInfo, OutOfBoundsPacketsBase) {
@@ -273,29 +212,25 @@
packet_.is_first_packet_in_frame = true;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
// Insert an older packet with a first packet set.
packet_.seqNum = 0x0004;
packet_.is_first_packet_in_frame = true;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
packet_.seqNum = 0x0006;
packet_.is_first_packet_in_frame = true;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0008;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
}
TEST_F(TestSessionInfo, OutOfBoundsPacketsWrap) {
@@ -303,36 +238,31 @@
packet_.is_first_packet_in_frame = true;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0004;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0002;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- ASSERT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ ASSERT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0xFFF0;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
packet_.seqNum = 0x0006;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
}
TEST_F(TestSessionInfo, OutOfBoundsOutOfOrder) {
@@ -342,44 +272,38 @@
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
// Insert an older packet with a first packet set.
packet_.seqNum = 0x0005;
packet_.is_first_packet_in_frame = true;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0004;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
packet_.seqNum = 0x0010;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0008;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = true;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum = 0x0009;
packet_.is_first_packet_in_frame = false;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(
- -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(-3, session_.InsertPacket(packet_, frame_buffer_, frame_data));
}
TEST_F(TestNalUnits, OnlyReceivedEmptyPacket) {
@@ -389,8 +313,7 @@
packet_.sizeBytes = 0;
packet_.seqNum = 0;
packet_.markerBit = false;
- EXPECT_EQ(
- 0, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data));
+ EXPECT_EQ(0, session_.InsertPacket(packet_, frame_buffer_, frame_data));
EXPECT_EQ(0U, session_.MakeDecodable());
EXPECT_EQ(0U, session_.SessionLength());
@@ -402,18 +325,16 @@
packet_.seqNum = 0;
packet_.markerBit = false;
FillPacket(0);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = false;
packet_.completeNALU = kNaluComplete;
packet_.seqNum += 2;
packet_.markerBit = true;
FillPacket(2);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(0U, session_.MakeDecodable());
EXPECT_EQ(2 * packet_buffer_size(), session_.SessionLength());
@@ -429,18 +350,16 @@
packet_.seqNum = 0;
packet_.markerBit = false;
FillPacket(0);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = false;
packet_.completeNALU = kNaluEnd;
packet_.seqNum += 2;
packet_.markerBit = true;
FillPacket(2);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(packet_buffer_size(), session_.MakeDecodable());
EXPECT_EQ(packet_buffer_size(), session_.SessionLength());
@@ -454,18 +373,16 @@
packet_.seqNum = 0;
packet_.markerBit = false;
FillPacket(0);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = false;
packet_.completeNALU = kNaluIncomplete;
packet_.seqNum += 2;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(packet_buffer_size(), session_.MakeDecodable());
EXPECT_EQ(packet_buffer_size(), session_.SessionLength());
@@ -480,27 +397,24 @@
packet_.seqNum += 1;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = true;
packet_.completeNALU = kNaluComplete;
packet_.seqNum -= 1;
packet_.markerBit = false;
FillPacket(0);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = false;
packet_.completeNALU = kNaluEnd;
packet_.seqNum += 2;
packet_.markerBit = true;
FillPacket(2);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(0U, session_.MakeDecodable());
EXPECT_EQ(3 * packet_buffer_size(), session_.SessionLength());
@@ -514,18 +428,16 @@
packet_.completeNALU = kNaluIncomplete;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.is_first_packet_in_frame = false;
packet_.completeNALU = kNaluEnd;
packet_.seqNum += 2;
packet_.markerBit = true;
FillPacket(2);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable());
EXPECT_EQ(0U, session_.SessionLength());
@@ -539,18 +451,16 @@
packet_.seqNum += 2;
packet_.markerBit = true;
FillPacket(2);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
packet_.seqNum -= 2;
packet_.is_first_packet_in_frame = false;
packet_.completeNALU = kNaluIncomplete;
packet_.markerBit = false;
FillPacket(1);
- EXPECT_EQ(packet_buffer_size(),
- static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_,
- kNoErrors, frame_data)));
+ EXPECT_EQ(packet_buffer_size(), static_cast<size_t>(session_.InsertPacket(
+ packet_, frame_buffer_, frame_data)));
EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable());
EXPECT_EQ(0U, session_.SessionLength());
diff --git a/modules/video_coding/video_coding_impl.cc b/modules/video_coding/video_coding_impl.cc
index 70b816d..9796e8c 100644
--- a/modules/video_coding/video_coding_impl.cc
+++ b/modules/video_coding/video_coding_impl.cc
@@ -99,9 +99,8 @@
return receiver_.IncomingPacket(incomingPayload, payloadLength, rtpInfo);
}
- int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode,
- VCMDecodeErrorMode errorMode) override {
- return receiver_.SetReceiverRobustnessMode(robustnessMode, errorMode);
+ int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode) override {
+ return receiver_.SetReceiverRobustnessMode(robustnessMode);
}
void SetNackSettings(size_t max_nack_list_size,
diff --git a/modules/video_coding/video_coding_impl.h b/modules/video_coding/video_coding_impl.h
index e6b1215..87fc5f6 100644
--- a/modules/video_coding/video_coding_impl.h
+++ b/modules/video_coding/video_coding_impl.h
@@ -131,15 +131,12 @@
// DEPRECATED.
int SetReceiverRobustnessMode(
- VideoCodingModule::ReceiverRobustness robustnessMode,
- VCMDecodeErrorMode errorMode);
+ VideoCodingModule::ReceiverRobustness robustnessMode);
void SetNackSettings(size_t max_nack_list_size,
int max_packet_age_to_nack,
int max_incomplete_time_ms);
- void SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode);
-
int32_t SetReceiveChannelParameters(int64_t rtt);
int32_t SetVideoProtection(VCMVideoProtection videoProtection, bool enable);
diff --git a/modules/video_coding/video_receiver.cc b/modules/video_coding/video_receiver.cc
index 414c07a..20eff5e 100644
--- a/modules/video_coding/video_receiver.cc
+++ b/modules/video_coding/video_receiver.cc
@@ -158,8 +158,6 @@
// between the protection method and decoding with or without errors.
int32_t VideoReceiver::SetVideoProtection(VCMVideoProtection videoProtection,
bool enable) {
- // By default, do not decode with errors.
- _receiver.SetDecodeErrorMode(kNoErrors);
switch (videoProtection) {
case kProtectionNack: {
RTC_DCHECK(enable);
@@ -171,7 +169,6 @@
RTC_DCHECK(enable);
_receiver.SetNackMode(kNack, media_optimization::kLowRttNackMs,
media_optimization::kMaxRttDelayThreshold);
- _receiver.SetDecodeErrorMode(kNoErrors);
break;
}
case kProtectionFEC:
@@ -179,7 +176,6 @@
// No receiver-side protection.
RTC_DCHECK(enable);
_receiver.SetNackMode(kNoNack, -1, -1);
- _receiver.SetDecodeErrorMode(kWithErrors);
break;
}
return VCM_OK;
@@ -439,10 +435,8 @@
return _timing->TargetVideoDelay();
}
-// Only used by VCMRobustnessTest.
int VideoReceiver::SetReceiverRobustnessMode(
- VideoCodingModule::ReceiverRobustness robustnessMode,
- VCMDecodeErrorMode decode_error_mode) {
+ VideoCodingModule::ReceiverRobustness robustnessMode) {
RTC_DCHECK_RUN_ON(&construction_thread_checker_);
RTC_DCHECK(!IsDecoderThreadRunning());
switch (robustnessMode) {
@@ -457,16 +451,9 @@
RTC_NOTREACHED();
return VCM_PARAMETER_ERROR;
}
- _receiver.SetDecodeErrorMode(decode_error_mode);
return VCM_OK;
}
-void VideoReceiver::SetDecodeErrorMode(VCMDecodeErrorMode decode_error_mode) {
- RTC_DCHECK_RUN_ON(&construction_thread_checker_);
- RTC_DCHECK(!IsDecoderThreadRunning());
- _receiver.SetDecodeErrorMode(decode_error_mode);
-}
-
void VideoReceiver::SetNackSettings(size_t max_nack_list_size,
int max_packet_age_to_nack,
int max_incomplete_time_ms) {
diff --git a/video/video_stream_decoder.cc b/video/video_stream_decoder.cc
index 70e93c8..8cc9d08 100644
--- a/video/video_stream_decoder.cc
+++ b/video/video_stream_decoder.cc
@@ -41,9 +41,7 @@
enable_nack ? (enable_fec ? kProtectionNackFEC : kProtectionNack)
: kProtectionNone;
- VCMDecodeErrorMode decode_error_mode = enable_nack ? kNoErrors : kWithErrors;
video_receiver_->SetVideoProtection(video_protection, true);
- video_receiver_->SetDecodeErrorMode(decode_error_mode);
VCMPacketRequestCallback* packet_request_callback =
enable_nack ? vcm_packet_request_callback : nullptr;
video_receiver_->RegisterPacketRequestCallback(packet_request_callback);