Update layer indices for non-flexible mode according to updates in the RTP payload profile.
https://tools.ietf.org/id/draft-ietf-payload-vp9-01.txt BUG=chromium:500602 TBR=stefan@webrtc.org Review URL: https://codereview.webrtc.org/1426813002 Cr-Commit-Position: refs/heads/master@{#10522}
This commit is contained in:
@ -316,7 +316,6 @@ void VCMJitterBuffer::Start() {
|
||||
first_packet_since_reset_ = true;
|
||||
rtt_ms_ = kDefaultRtt;
|
||||
last_decoded_state_.Reset();
|
||||
vp9_ss_map_.Reset();
|
||||
}
|
||||
|
||||
void VCMJitterBuffer::Stop() {
|
||||
@ -324,7 +323,6 @@ void VCMJitterBuffer::Stop() {
|
||||
UpdateHistograms();
|
||||
running_ = false;
|
||||
last_decoded_state_.Reset();
|
||||
vp9_ss_map_.Reset();
|
||||
|
||||
// Make sure all frames are free and reset.
|
||||
for (FrameList::iterator it = decodable_frames_.begin();
|
||||
@ -356,7 +354,6 @@ void VCMJitterBuffer::Flush() {
|
||||
decodable_frames_.Reset(&free_frames_);
|
||||
incomplete_frames_.Reset(&free_frames_);
|
||||
last_decoded_state_.Reset(); // TODO(mikhal): sync reset.
|
||||
vp9_ss_map_.Reset();
|
||||
num_consecutive_old_packets_ = 0;
|
||||
// Also reset the jitter and delay estimates
|
||||
jitter_estimate_.Reset();
|
||||
@ -688,19 +685,10 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
|
||||
|
||||
num_consecutive_old_packets_ = 0;
|
||||
|
||||
if (packet.codec == kVideoCodecVP9) {
|
||||
if (packet.codecSpecificHeader.codecHeader.VP9.flexible_mode) {
|
||||
// TODO(asapersson): Add support for flexible mode.
|
||||
return kGeneralError;
|
||||
}
|
||||
if (!packet.codecSpecificHeader.codecHeader.VP9.flexible_mode) {
|
||||
if (vp9_ss_map_.Insert(packet))
|
||||
vp9_ss_map_.UpdateFrames(&incomplete_frames_);
|
||||
|
||||
vp9_ss_map_.UpdatePacket(const_cast<VCMPacket*>(&packet));
|
||||
}
|
||||
if (!last_decoded_state_.in_initial_state())
|
||||
vp9_ss_map_.RemoveOld(last_decoded_state_.time_stamp());
|
||||
if (packet.codec == kVideoCodecVP9 &&
|
||||
packet.codecSpecificHeader.codecHeader.VP9.flexible_mode) {
|
||||
// TODO(asapersson): Add support for flexible mode.
|
||||
return kGeneralError;
|
||||
}
|
||||
|
||||
VCMFrameBuffer* frame;
|
||||
|
||||
@ -338,8 +338,6 @@ class VCMJitterBuffer {
|
||||
FrameList incomplete_frames_ GUARDED_BY(crit_sect_);
|
||||
VCMDecodingState last_decoded_state_ GUARDED_BY(crit_sect_);
|
||||
bool first_packet_since_reset_;
|
||||
// Contains scalability structure data for VP9.
|
||||
Vp9SsMap vp9_ss_map_ GUARDED_BY(crit_sect_);
|
||||
|
||||
// Statistics.
|
||||
VCMReceiveStatisticsCallback* stats_callback_ GUARDED_BY(crit_sect_);
|
||||
|
||||
@ -885,7 +885,6 @@ TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) {
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
|
||||
|
||||
packet_->seqNum = 65485;
|
||||
@ -893,7 +892,7 @@ TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) {
|
||||
packet_->frameType = kVideoFrameKey;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9(
|
||||
kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2..
|
||||
@ -905,7 +904,7 @@ TEST_F(TestBasicJitterBuffer, TestSkipForwardVp9) {
|
||||
packet_->frameType = kVideoFrameDelta;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 9;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 201;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = false;
|
||||
EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
|
||||
|
||||
@ -939,22 +938,22 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) {
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200;
|
||||
|
||||
packet_->seqNum = 65486;
|
||||
packet_->timestamp = 6000;
|
||||
packet_->frameType = kVideoFrameDelta;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 2;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true;
|
||||
EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
|
||||
|
||||
packet_->seqNum = 65487;
|
||||
packet_->timestamp = 9000;
|
||||
packet_->frameType = kVideoFrameDelta;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 7;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 2;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true;
|
||||
EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
|
||||
|
||||
// Insert first frame with SS data.
|
||||
@ -964,7 +963,8 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_3TlLayers) {
|
||||
packet_->width = 352;
|
||||
packet_->height = 288;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9(
|
||||
kTemporalStructureMode3); // kTemporalStructureMode3: 0-2-1-2..
|
||||
@ -1011,8 +1011,6 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) {
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.flexible_mode = false;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.beginning_of_frame = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.end_of_frame = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = kNoTemporalIdx;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.tl0_pic_idx = 200;
|
||||
|
||||
packet_->isFirstPacket = true;
|
||||
@ -1022,7 +1020,8 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) {
|
||||
packet_->frameType = kVideoFrameDelta;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true;
|
||||
EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re));
|
||||
|
||||
packet_->isFirstPacket = false;
|
||||
@ -1031,7 +1030,8 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) {
|
||||
packet_->frameType = kVideoFrameDelta;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 6;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = true;
|
||||
EXPECT_EQ(kCompleteSession, jitter_buffer_->InsertPacket(*packet_, &re));
|
||||
|
||||
packet_->isFirstPacket = false;
|
||||
@ -1041,7 +1041,8 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) {
|
||||
packet_->frameType = kVideoFrameKey;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 1;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
|
||||
EXPECT_EQ(kIncomplete, jitter_buffer_->InsertPacket(*packet_, &re));
|
||||
|
||||
// Insert first frame with SS data.
|
||||
@ -1053,7 +1054,8 @@ TEST_F(TestBasicJitterBuffer, ReorderedVp9SsData_2Tl2SLayers) {
|
||||
packet_->height = 288;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.spatial_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.picture_id = 5;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_idx = 0;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.temporal_up_switch = false;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.ss_data_available = true;
|
||||
packet_->codecSpecificHeader.codecHeader.VP9.gof.SetGofInfoVP9(
|
||||
kTemporalStructureMode2); // kTemporalStructureMode3: 0-1-0-1..
|
||||
|
||||
Reference in New Issue
Block a user