session_info_unittest.cc revision 3004c79c6ad0ca4b4df27d0ca76c2eb29735e267
1c3d891059e117357011e414263af0f519313d440stefan@webrtc.org/* 24ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3c3d891059e117357011e414263af0f519313d440stefan@webrtc.org * 4c3d891059e117357011e414263af0f519313d440stefan@webrtc.org * Use of this source code is governed by a BSD-style license 5c3d891059e117357011e414263af0f519313d440stefan@webrtc.org * that can be found in the LICENSE file in the root of the source 6c3d891059e117357011e414263af0f519313d440stefan@webrtc.org * tree. An additional intellectual property rights grant can be found 7c3d891059e117357011e414263af0f519313d440stefan@webrtc.org * in the file PATENTS. All contributing project authors may 8c3d891059e117357011e414263af0f519313d440stefan@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9c3d891059e117357011e414263af0f519313d440stefan@webrtc.org */ 10c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 11c3d891059e117357011e414263af0f519313d440stefan@webrtc.org#include <string.h> 12c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 13c3d891059e117357011e414263af0f519313d440stefan@webrtc.org#include "gtest/gtest.h" 14076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org#include "modules/interface/module_common_types.h" 15076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org#include "modules/video_coding/main/source/packet.h" 16076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org#include "modules/video_coding/main/source/session_info.h" 17c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 18076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgnamespace webrtc { 19c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 20076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgclass TestSessionInfo : public ::testing::Test { 21c3d891059e117357011e414263af0f519313d440stefan@webrtc.org protected: 22c3d891059e117357011e414263af0f519313d440stefan@webrtc.org virtual void SetUp() { 233004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org memset(packet_buffer_, 0, sizeof(packet_buffer_)); 243004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org memset(frame_buffer_, 0, sizeof(frame_buffer_)); 25076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org session_.Reset(); 26076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.Reset(); 27076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.frameType = kVideoFrameDelta; 283004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_.sizeBytes = packet_buffer_size(); 29076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.dataPtr = packet_buffer_; 30076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 31076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.timestamp = 0; 32c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 33c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 34076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void FillPacket(uint8_t start_value) { 353004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org for (int i = 0; i < packet_buffer_size(); ++i) 36c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_buffer_[i] = start_value + i; 37c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 38c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 39076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void VerifyPacket(uint8_t* start_ptr, uint8_t start_value) { 403004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org for (int j = 0; j < packet_buffer_size(); ++j) { 41076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(start_value + j, start_ptr[j]); 42076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 43076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 44076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 453004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org int packet_buffer_size() const { 463004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org return sizeof(packet_buffer_) / sizeof(packet_buffer_[0]); 473004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org } 483004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org int frame_buffer_size() const { 493004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org return sizeof(frame_buffer_) / sizeof(frame_buffer_[0]); 503004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org } 513004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 523004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org enum { kPacketBufferSize = 10 }; 533004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 54076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org uint8_t packet_buffer_[kPacketBufferSize]; 553004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org uint8_t frame_buffer_[10 * kPacketBufferSize]; 563004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 57076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VCMSessionInfo session_; 58076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VCMPacket packet_; 59076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org}; 60076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 61076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgclass TestVP8Partitions : public TestSessionInfo { 62076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org protected: 63076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org enum { kMaxVP8Partitions = 9 }; 64076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 65076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org virtual void SetUp() { 66076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org TestSessionInfo::SetUp(); 67076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org vp8_header_ = &packet_header_.type.Video.codecHeader.VP8; 68076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_header_.frameType = kVideoFrameDelta; 69076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_header_.type.Video.codec = kRTPVideoVP8; 70076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org vp8_header_->InitRTPVideoHeaderVP8(); 71076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org fragmentation_.VerifyAndAllocateFragmentationHeader(kMaxVP8Partitions); 72076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 73076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 74c3d891059e117357011e414263af0f519313d440stefan@webrtc.org bool VerifyPartition(int partition_id, 75c3d891059e117357011e414263af0f519313d440stefan@webrtc.org int packets_expected, 76c3d891059e117357011e414263af0f519313d440stefan@webrtc.org int start_value) { 773004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(static_cast<uint32_t>(packets_expected * packet_buffer_size()), 78c3d891059e117357011e414263af0f519313d440stefan@webrtc.org fragmentation_.fragmentationLength[partition_id]); 79c3d891059e117357011e414263af0f519313d440stefan@webrtc.org for (int i = 0; i < packets_expected; ++i) { 80c3d891059e117357011e414263af0f519313d440stefan@webrtc.org int packet_index = fragmentation_.fragmentationOffset[partition_id] + 813004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org i * packet_buffer_size(); 823004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org if (packet_index + packet_buffer_size() > frame_buffer_size()) 83076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org return false; 84076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VerifyPacket(frame_buffer_ + packet_index, start_value + i); 85c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 86c3d891059e117357011e414263af0f519313d440stefan@webrtc.org return true; 87c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 88c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 89076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org WebRtcRTPHeader packet_header_; 90076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org RTPVideoHeaderVP8* vp8_header_; 91076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org RTPFragmentationHeader fragmentation_; 92076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org}; 93076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 94076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgclass TestNalUnits : public TestSessionInfo { 95076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org protected: 96076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org virtual void SetUp() { 97076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org TestSessionInfo::SetUp(); 9856210579563244f1decea42d52528f27f109c437pwestin@webrtc.org packet_.codec = kVideoCodecVP8; 99076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 100076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 101076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org bool VerifyNalu(int offset, int packets_expected, int start_value) { 102076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_GE(session_.SessionLength(), 1033004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packets_expected * packet_buffer_size()); 104076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 0; i < packets_expected; ++i) { 1053004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org int packet_index = (offset + i) * packet_buffer_size(); 106076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VerifyPacket(frame_buffer_ + packet_index, start_value + i); 107076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 108076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org return true; 109076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 110076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org}; 111076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 112cd64886a2fcdd688d2e2589e35a862d3f542e084mikhal@webrtc.orgclass TestNackList : public TestSessionInfo { 113076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org protected: 1143004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org static const size_t kMaxSeqNumListLength = 30; 115076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 116076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org virtual void SetUp() { 117076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org TestSessionInfo::SetUp(); 118076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_length_ = 0; 119076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org memset(seq_num_list_, 0, sizeof(seq_num_list_)); 120076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 121076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 122076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void BuildSeqNumList(uint16_t low, 123076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org uint16_t high) { 1243004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org size_t i = 0; 125076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org while (low != high + 1) { 126076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_LT(i, kMaxSeqNumListLength); 127076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org if (i >= kMaxSeqNumListLength) { 128076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_length_ = kMaxSeqNumListLength; 129076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org return; 130076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 131076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_[i] = low; 132076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org low++; 133076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org i++; 134076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 135076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_length_ = i; 136076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 137076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 138076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void VerifyAll(int value) { 139076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 0; i < seq_num_list_length_; ++i) 140076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(seq_num_list_[i], value); 141076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 142076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 143076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org int seq_num_list_[kMaxSeqNumListLength]; 144076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org int seq_num_list_length_; 145c3d891059e117357011e414263af0f519313d440stefan@webrtc.org}; 146c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 147076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestSessionInfo, TestSimpleAPIs) { 148076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 149076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFE; 1503004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_.sizeBytes = packet_buffer_size(); 151076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.frameType = kVideoFrameKey; 152076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 1533004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org ASSERT_EQ(packet_buffer_size(), 154076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org session_.InsertPacket(packet_, frame_buffer_, false, 0)); 155d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_FALSE(session_.HaveLastPacket()); 156076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(kVideoFrameKey, session_.FrameType()); 157076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 158076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 159076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 160076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 1613004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org ASSERT_EQ(packet_buffer_size(), 162076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org session_.InsertPacket(packet_, frame_buffer_, false, 0)); 163d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_TRUE(session_.HaveLastPacket()); 164076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(packet_.seqNum, session_.HighSequenceNumber()); 165076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0xFFFE, session_.LowSequenceNumber()); 166076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 167076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org // Insert empty packet which will be the new high sequence number. 168076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org // To make things more difficult we will make sure to have a wrap here. 169076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 170076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 171076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 2; 172076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.sizeBytes = 0; 173076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.frameType = kFrameEmpty; 174076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(0, 175076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org session_.InsertPacket(packet_, frame_buffer_, false, 0)); 176076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(packet_.seqNum, session_.HighSequenceNumber()); 177076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 178076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 179076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestSessionInfo, NormalOperation) { 180076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 181076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 182076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 183076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 184076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 1853004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 186076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 187076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 188076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 1; i < 9; ++i) { 189076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 190076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(i); 191076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 1923004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 193076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 194076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 195076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 196076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 197076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(9); 198076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 1993004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 200076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 201076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 2023004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(10 * packet_buffer_size(), session_.SessionLength()); 203076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 0; i < 10; ++i) { 204076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyPacket"); 2053004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VerifyPacket(frame_buffer_ + i * packet_buffer_size(), i); 206076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 207076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 208076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 209076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsOneLoss) { 210c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 211c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 0 ] [ 2 ] | [ 3 ] 212c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 213c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 214c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 215c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 216c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 0; 217c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(0); 2183004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 219c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_); 2202b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 2213004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 222c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 223c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 224c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 225c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 226c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 227c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 228c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 229c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 2303004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 2312b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 2323004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 233c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 234c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 235c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 236c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 237c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 238c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 239c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 240c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 2413004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 2422b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 2433004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 244c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 245c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 246c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // One packet should be removed (end of partition 0). 247076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 2483004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 249c3d891059e117357011e414263af0f519313d440stefan@webrtc.org &fragmentation_), 2503004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 2 * packet_buffer_size()); 251c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 252c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 1, 0)); 253c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 254c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 1, 3)); 255c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 256c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 257076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsOneLoss2) { 258c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 259c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 1 ] [ 2 ] | [ 3 ] [ 5 ] 260c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 261c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 262c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 263c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 264c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 1; 265c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 2663004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 267c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_); 2683004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 2693004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 270c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 271c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 272c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 273c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 274c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 275c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 276c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 277c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 2783004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 2792b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 2803004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 281c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 282c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 283c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 284c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 285c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 286c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 287c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 288c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 2893004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 2902b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 2913004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 292c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 293c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 294c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 295c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 296c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 297c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 298c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 299c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(5); 3003004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 3012b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 3023004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 303c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 304c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 305c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // One packet should be removed (end of partition 2), 3 left. 306076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 3073004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 308c3d891059e117357011e414263af0f519313d440stefan@webrtc.org &fragmentation_), 3093004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 3 * packet_buffer_size()); 310c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 311c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 1)); 312c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 313c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 1, 3)); 314076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(1, session_.packets_not_decodable()); 315c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 316c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 317076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsNoLossWrap) { 318c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 319c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ fffd ] [ fffe ] | [ ffff ] [ 0 ] 320c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 321c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 322c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 323c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 324c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 0xfffd; 325c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(0); 3263004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 327c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_); 3282b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 3293004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 330c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 331c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 332c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 333c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 334c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 335c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 336c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 337c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 3383004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 3392b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 3403004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 341c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 342c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 343c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 344c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 345c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 346c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 347c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 348c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 3493004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 3502b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 3513004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 352c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 353c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 354c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 355c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 356c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 357c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 358c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 359c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 3603004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 3612b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 3623004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 363c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 364c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 365c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // No packet should be removed. 366076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 3673004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 368c3d891059e117357011e414263af0f519313d440stefan@webrtc.org &fragmentation_), 3693004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 4 * packet_buffer_size()); 370c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 371c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 0)); 372c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 373c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 2, 2)); 374076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 375c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 376c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 377076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsLossWrap) { 378c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 379c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ fffd ] [ fffe ] | [ ffff ] [ 1 ] 380c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 381c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 382c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 383c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 384c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 0xfffd; 385c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(0); 3863004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 387c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_); 3882b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 3893004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 390c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 391c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 392c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 393c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 394c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 395c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 396c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 397c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 3983004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 3992b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4003004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 401c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 402c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 403c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 404c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 405c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 406c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 407c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 408c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 4093004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4102b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4113004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 412c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 413c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 414c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 415c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 416c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 417c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 418c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 419c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 4203004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4212b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4223004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 423c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 424c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 425c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // One packet should be removed from the last partition 426076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 4273004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 428c3d891059e117357011e414263af0f519313d440stefan@webrtc.org &fragmentation_), 4293004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 3 * packet_buffer_size()); 430c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 431c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 0)); 432c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 433c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 1, 2)); 434076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(1, session_.packets_not_decodable()); 435c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 436c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 437c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 438076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, ThreePartitionsOneMissing) { 439c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 1 |Partition 2 | Partition 3 440c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 1 ] [ 2 ] | | [ 5 ] | [ 6 ] 441c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 442c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 443c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 444c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 445c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 1; 446c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 4473004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 448c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_); 4492b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4503004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 451c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 452c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 453c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 454c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 455c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 456c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 457c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 458c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 4593004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4602b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4613004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 462c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 463c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 464c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 465c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 466c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 467c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 468c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 3; 469c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(5); 4703004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4712b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4723004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 473c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 474c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 475c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 476c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 477c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 478c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 479c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 480c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(6); 4813004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4822b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 4833004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 484c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 485c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 486c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // No packet should be removed. 487076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 4883004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 489c3d891059e117357011e414263af0f519313d440stefan@webrtc.org &fragmentation_), 4903004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 4 * packet_buffer_size()); 491c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 492c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 1)); 493c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 494c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(2, 2, 5)); 495076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 496c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 497c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 498076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, ThreePartitionsLossInSecond) { 499c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 |Partition 1 | Partition 2 500c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 1 ] [ 2 ] | [ 4 ] [ 5 ] | [ 6 ] [ 7 ] 501c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 502c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 503c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 504c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 505c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 1; 506c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 5073004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 508c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_); 5092b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5103004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 511c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 512c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 513c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 514c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 515c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 516c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 517c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 518c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 5193004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 5203004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_header_); 5212b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5223004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 523c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 524c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 525c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 526c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 527c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 528c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 529c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 530c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(4); 5313004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5322b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5333004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 534c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 535c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 536c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 537c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 538c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 539c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 540c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 541c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(5); 5423004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5432b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5443004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 545c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 546c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 547c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 548c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 549c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 550c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 551c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 552c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(6); 5533004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5542b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5553004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 556c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 557c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 558c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 559c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 560c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 561c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 562c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 563c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(7); 5643004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5652b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5663004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 567c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 568c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 569c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // 2 partitions left. 2 packets removed from second partition 570076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 5713004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 572c3d891059e117357011e414263af0f519313d440stefan@webrtc.org &fragmentation_), 5733004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 4 * packet_buffer_size()); 574c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 575c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 1)); 576c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 577c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(2, 2, 6)); 578076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(2, session_.packets_not_decodable()); 579c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 5805b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 581076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, AggregationOverTwoPackets) { 5825b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org // Partition 0 | Partition 1 | Partition 2 5835b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org // [ 0 | ] [ 1 ] | [ 2 ] 5845b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 5855b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->beginningOfPartition = true; 5865b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->partitionId = 0; 5875b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.markerBit = false; 5885b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.sequenceNumber = 0; 5895b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org FillPacket(0); 5903004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VCMPacket* packet = new VCMPacket(packet_buffer_, packet_buffer_size(), 5915b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_); 5922b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 5933004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 5945b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org delete packet; 5955b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 5965b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 5975b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->partitionId = 1; 5985b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->beginningOfPartition = false; 5995b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.markerBit = false; 6005b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 6015b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org FillPacket(1); 6023004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6032b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 6043004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 6055b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org delete packet; 6065b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 6075b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 6085b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->partitionId = 2; 6095b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->beginningOfPartition = true; 6105b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.markerBit = true; 6115b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 6125b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org FillPacket(2); 6133004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6142b838b412176520eb23bb62b17993ef54d669aebmikhal@webrtc.org ASSERT_EQ(session_.InsertPacket(*packet, frame_buffer_, false, 0), 6153004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 6165b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org delete packet; 6175b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 618076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org // No packets removed. 619076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(session_.BuildVP8FragmentationHeader(frame_buffer_, 6203004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org frame_buffer_size(), 6215b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org &fragmentation_), 6223004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 3 * packet_buffer_size()); 623076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 6245b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 6255b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 0)); 6265b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org // This partition is aggregated in partition 0 6275b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 6285b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 0, 0)); 6295b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 6305b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org EXPECT_TRUE(VerifyPartition(2, 1, 2)); 6315b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org} 632076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 6334ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.orgTEST_F(TestNalUnits, OnlyReceivedEmptyPacket) { 6344ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.isFirstPacket = false; 6354ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.completeNALU = kNaluComplete; 6364ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.frameType = kFrameEmpty; 6374ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.sizeBytes = 0; 6384ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.seqNum = 0; 6394ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.markerBit = false; 6404ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org ASSERT_EQ(0, session_.InsertPacket(packet_, frame_buffer_, false, 0)); 6414ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org 6424ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org EXPECT_EQ(0, session_.MakeDecodable()); 6434ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org EXPECT_EQ(0, session_.SessionLength()); 6444ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 6454ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org} 6464ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org 647076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, OneIsolatedNaluLoss) { 648076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 649076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 650076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 651076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 652076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 653076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 6543004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 655076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 656076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 657076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 658076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 659076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 660076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 661076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 6623004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 663076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 664076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.MakeDecodable()); 6653004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(2 * packet_buffer_size(), session_.SessionLength()); 666076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 667076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 668076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 669076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 670076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(1, 1, 2)); 671076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 672076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 673076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, LossInMiddleOfNalu) { 674076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 675076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 676076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 677076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 678076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 679076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 6803004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 681076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 682076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 683076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 684076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 685076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 686076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 687076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 6883004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 689076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 6903004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.MakeDecodable()); 6913004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.SessionLength()); 692076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(1, session_.packets_not_decodable()); 693076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 694076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 695076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 696076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 697076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, StartAndEndOfLastNalUnitLost) { 698076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 699076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 700076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 701076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 702076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 703076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7043004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 705076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 706076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 707076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 708076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 709076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 710076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 711076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7123004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 713076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 7143004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.MakeDecodable()); 7153004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.SessionLength()); 716076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(1, session_.packets_not_decodable()); 717076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 718076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 719076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 720076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 721076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, ReorderWrapNoLoss) { 722076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 723076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 724076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 725076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 726076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 727076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 728076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7293004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 730076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 731076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 732076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 733076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum -= 1; 734076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 735076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 736076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7373004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 738076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 739076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 740076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 741076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 742076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 743076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 744076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7453004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 746076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 747076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.MakeDecodable()); 748076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.packets_not_decodable()); 7493004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(3 * packet_buffer_size(), session_.SessionLength()); 750076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 751076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 752076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 753076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 754076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, WrapLosses) { 755076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 756076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 757076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 758076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 759076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 760076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7613004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 762076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 763076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 764076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 765076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 766076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 767076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 768076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7693004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 770076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 7713004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable()); 772076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.SessionLength()); 773076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(2, session_.packets_not_decodable()); 774076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 775076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 776076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, ReorderWrapLosses) { 777076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 778076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 779076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 780076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 781076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 782076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 783076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 784076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7853004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 786076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 787076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum -= 2; 788076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 789076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 790076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 791076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 792076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(session_.InsertPacket(packet_, frame_buffer_, false, 0), 7933004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_buffer_size()); 794076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 7953004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable()); 796076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0, session_.SessionLength()); 797076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(2, session_.packets_not_decodable()); 798076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 799076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} // namespace webrtc 800