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 13a4407329d4e16eab3d2e87cde0824188c06acb5apbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 14ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/include/module_common_types.h" 152557b86e7648ffebc5781df9f093ca5a84efc219Henrik Kjellander#include "webrtc/modules/video_coding/packet.h" 162557b86e7648ffebc5781df9f093ca5a84efc219Henrik Kjellander#include "webrtc/modules/video_coding/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; 32d818dcb939b713dc7a83726812de7aafa275cab4agalusza@google.com frame_data.rtt_ms = 0; 33d818dcb939b713dc7a83726812de7aafa275cab4agalusza@google.com frame_data.rolling_average_packets_per_frame = -1; 34c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 35c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 36076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void FillPacket(uint8_t start_value) { 374591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org for (size_t i = 0; i < packet_buffer_size(); ++i) 38c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_buffer_[i] = start_value + i; 39c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 40c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 41076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void VerifyPacket(uint8_t* start_ptr, uint8_t start_value) { 424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org for (size_t j = 0; j < packet_buffer_size(); ++j) { 43076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org ASSERT_EQ(start_value + j, start_ptr[j]); 44076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 45076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 46076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 474591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t packet_buffer_size() const { 483004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org return sizeof(packet_buffer_) / sizeof(packet_buffer_[0]); 493004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org } 504591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t frame_buffer_size() const { 513004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org return sizeof(frame_buffer_) / sizeof(frame_buffer_[0]); 523004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org } 533004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 543004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org enum { kPacketBufferSize = 10 }; 553004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 56076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org uint8_t packet_buffer_[kPacketBufferSize]; 573004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org uint8_t frame_buffer_[10 * kPacketBufferSize]; 583004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org 59076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VCMSessionInfo session_; 60076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VCMPacket packet_; 61d818dcb939b713dc7a83726812de7aafa275cab4agalusza@google.com FrameData frame_data; 62076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org}; 63076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 64076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgclass TestVP8Partitions : public TestSessionInfo { 65076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org protected: 66076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org enum { kMaxVP8Partitions = 9 }; 67076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 68076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org virtual void SetUp() { 69076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org TestSessionInfo::SetUp(); 70076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org vp8_header_ = &packet_header_.type.Video.codecHeader.VP8; 71076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_header_.frameType = kVideoFrameDelta; 72822fbd8b68ffdb481b9557e2950ae8d6657c8ce6wu@webrtc.org packet_header_.type.Video.codec = kRtpVideoVp8; 73076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org vp8_header_->InitRTPVideoHeaderVP8(); 74076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org fragmentation_.VerifyAndAllocateFragmentationHeader(kMaxVP8Partitions); 75076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 76076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 77c3d891059e117357011e414263af0f519313d440stefan@webrtc.org bool VerifyPartition(int partition_id, 78c3d891059e117357011e414263af0f519313d440stefan@webrtc.org int packets_expected, 79c3d891059e117357011e414263af0f519313d440stefan@webrtc.org int start_value) { 804591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packets_expected * packet_buffer_size(), 81c3d891059e117357011e414263af0f519313d440stefan@webrtc.org fragmentation_.fragmentationLength[partition_id]); 82c3d891059e117357011e414263af0f519313d440stefan@webrtc.org for (int i = 0; i < packets_expected; ++i) { 834591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org size_t packet_index = fragmentation_.fragmentationOffset[partition_id] + 849d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel i * packet_buffer_size(); 853004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org if (packet_index + packet_buffer_size() > frame_buffer_size()) 86076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org return false; 87076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VerifyPacket(frame_buffer_ + packet_index, start_value + i); 88c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 89c3d891059e117357011e414263af0f519313d440stefan@webrtc.org return true; 90c3d891059e117357011e414263af0f519313d440stefan@webrtc.org } 91c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 92076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org WebRtcRTPHeader packet_header_; 93076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org RTPVideoHeaderVP8* vp8_header_; 94076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org RTPFragmentationHeader fragmentation_; 95076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org}; 96076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 97076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgclass TestNalUnits : public TestSessionInfo { 98076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org protected: 99076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org virtual void SetUp() { 100076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org TestSessionInfo::SetUp(); 10156210579563244f1decea42d52528f27f109c437pwestin@webrtc.org packet_.codec = kVideoCodecVP8; 102076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 103076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 104076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org bool VerifyNalu(int offset, int packets_expected, int start_value) { 105076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_GE(session_.SessionLength(), 1063004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packets_expected * packet_buffer_size()); 107076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 0; i < packets_expected; ++i) { 1083004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org int packet_index = (offset + i) * packet_buffer_size(); 109076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org VerifyPacket(frame_buffer_ + packet_index, start_value + i); 110076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 111076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org return true; 112076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 113076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org}; 114076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 115cd64886a2fcdd688d2e2589e35a862d3f542e084mikhal@webrtc.orgclass TestNackList : public TestSessionInfo { 116076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org protected: 1173004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org static const size_t kMaxSeqNumListLength = 30; 118076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 119076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org virtual void SetUp() { 120076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org TestSessionInfo::SetUp(); 121076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_length_ = 0; 122076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org memset(seq_num_list_, 0, sizeof(seq_num_list_)); 123076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 124076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 1259d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel void BuildSeqNumList(uint16_t low, uint16_t high) { 1263004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org size_t i = 0; 127076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org while (low != high + 1) { 128076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_LT(i, kMaxSeqNumListLength); 129076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org if (i >= kMaxSeqNumListLength) { 130076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_length_ = kMaxSeqNumListLength; 131076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org return; 132076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 133076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_[i] = low; 134076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org low++; 135076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org i++; 136076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 137076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org seq_num_list_length_ = i; 138076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 139076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 140076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org void VerifyAll(int value) { 141076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 0; i < seq_num_list_length_; ++i) 142076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(seq_num_list_[i], value); 143076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 144076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 145076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org int seq_num_list_[kMaxSeqNumListLength]; 146076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org int seq_num_list_length_; 147c3d891059e117357011e414263af0f519313d440stefan@webrtc.org}; 148c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 149076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestSessionInfo, TestSimpleAPIs) { 150076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 151076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFE; 1523004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet_.sizeBytes = packet_buffer_size(); 153076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.frameType = kVideoFrameKey; 154076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 155f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 1564591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 1574591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 158d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_FALSE(session_.HaveLastPacket()); 159076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(kVideoFrameKey, session_.FrameType()); 160076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 161076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 162076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 163076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 164f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 1654591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 1664591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 167d1a860b4159cf3386e46c2f578c3df0d8111212aphoglund@webrtc.org EXPECT_TRUE(session_.HaveLastPacket()); 168076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(packet_.seqNum, session_.HighSequenceNumber()); 169076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(0xFFFE, session_.LowSequenceNumber()); 170076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 171076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org // Insert empty packet which will be the new high sequence number. 172076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org // To make things more difficult we will make sure to have a wrap here. 173076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 174076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 1759d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_.seqNum = 2; 176076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.sizeBytes = 0; 17722993e1a0c114122fc1b9de0fc74d4096ec868bdpbos packet_.frameType = kEmptyFrame; 1789d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 1799d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel 0, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 180076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_EQ(packet_.seqNum, session_.HighSequenceNumber()); 181076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 182076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 183076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestSessionInfo, NormalOperation) { 184076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 185076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 186076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 187076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 1884591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 1894591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 1904591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 191076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 192076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 193076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 1; i < 9; ++i) { 194076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 195076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(i); 1964591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org ASSERT_EQ(packet_buffer_size(), 1979d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel static_cast<size_t>(session_.InsertPacket( 1989d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_, frame_buffer_, kNoErrors, frame_data))); 199076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 200076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 201076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 202076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 203076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(9); 2044591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2054591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 2064591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 207076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 2083004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(10 * packet_buffer_size(), session_.SessionLength()); 209076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org for (int i = 0; i < 10; ++i) { 210076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyPacket"); 2113004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org VerifyPacket(frame_buffer_ + i * packet_buffer_size(), i); 212076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org } 213076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 214076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 215d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.comTEST_F(TestSessionInfo, ErrorsEqualDecodableState) { 216d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.seqNum = 0xFFFF; 217d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.isFirstPacket = false; 218d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.markerBit = false; 219d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com FillPacket(3); 2204591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2219d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel static_cast<size_t>(session_.InsertPacket( 2229d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_, frame_buffer_, kWithErrors, frame_data))); 223d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com EXPECT_TRUE(session_.decodable()); 224d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com} 225d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com 226d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.comTEST_F(TestSessionInfo, SelectiveDecodableState) { 227d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.seqNum = 0xFFFF; 228d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.isFirstPacket = false; 229d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.markerBit = false; 230d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com FillPacket(1); 231d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com frame_data.rolling_average_packets_per_frame = 11; 232d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com frame_data.rtt_ms = 150; 2334591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2349d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel static_cast<size_t>(session_.InsertPacket( 2359d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_, frame_buffer_, kSelectiveErrors, frame_data))); 236d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com EXPECT_FALSE(session_.decodable()); 237d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com 238d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.seqNum -= 1; 239d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com FillPacket(0); 240d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.isFirstPacket = true; 2414591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2429d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel static_cast<size_t>(session_.InsertPacket( 2439d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_, frame_buffer_, kSelectiveErrors, frame_data))); 244d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com EXPECT_TRUE(session_.decodable()); 245d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com 246d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.isFirstPacket = false; 247d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.seqNum += 1; 248d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com for (int i = 2; i < 8; ++i) { 249d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.seqNum += 1; 250d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com FillPacket(i); 2519d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ(packet_buffer_size(), 2529d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel static_cast<size_t>(session_.InsertPacket( 2539d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_, frame_buffer_, kSelectiveErrors, frame_data))); 254d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com EXPECT_TRUE(session_.decodable()); 255d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com } 256d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com 257d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com packet_.seqNum += 1; 258d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com FillPacket(8); 2594591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2609d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel static_cast<size_t>(session_.InsertPacket( 2619d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet_, frame_buffer_, kSelectiveErrors, frame_data))); 262d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com EXPECT_TRUE(session_.decodable()); 263d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com} 264d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com 265f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.orgTEST_F(TestSessionInfo, OutOfBoundsPackets1PacketFrame) { 266f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0001; 267f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 268f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 269f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 2704591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2714591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 2724591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 273f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 274f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0004; 275f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 276f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 277f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 2789d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 2799d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 280f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0000; 281f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 282f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 283f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 2849d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 2859d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 286f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org} 287f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 288f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.orgTEST_F(TestSessionInfo, SetMarkerBitOnce) { 289f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0005; 290f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 291f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 292f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 2934591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 2944591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 2954591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 296f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org ++packet_.seqNum; 297f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 298f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 299f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 3009d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 3019d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 302f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org} 303f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 304f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.orgTEST_F(TestSessionInfo, OutOfBoundsPacketsBase) { 305f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org // Allow packets in the range 5-6. 306f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0005; 307f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 308f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 309f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 310f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 3114591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3124591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 313f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org // Insert an older packet with a first packet set. 314f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0004; 315f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 316f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 317f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 3189d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 3199d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 320f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0006; 321f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 322f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 323f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 324f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 3254591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3264591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 327f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0008; 328f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 329f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 330f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 3319d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 3329d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 333f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org} 334f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 335f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.orgTEST_F(TestSessionInfo, OutOfBoundsPacketsWrap) { 336f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0xFFFE; 337f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 338f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 339f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 340f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 3414591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 343f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 344f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0004; 345f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 346f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 347f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 348f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 3494591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3504591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 351f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0002; 352f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 353f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 354f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 355f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org ASSERT_EQ(packet_buffer_size(), 3564591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3574591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 358f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0xFFF0; 359f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 360f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 361f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 3629d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 3639d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 364f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0006; 365f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 366f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 367f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 3689d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 3699d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 370f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org} 371f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 372f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.orgTEST_F(TestSessionInfo, OutOfBoundsOutOfOrder) { 373f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org // Insert out of bound regular packets, and then the first and last packet. 374f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org // Verify that correct bounds are maintained. 375f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0003; 376f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 377f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 378f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 379f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 3804591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3814591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 382f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org // Insert an older packet with a first packet set. 383f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0005; 384f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = true; 385f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 386f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 387f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 3884591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 3894591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 390f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0004; 391f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 392f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 393f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 3949d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 3959d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 396f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0010; 397f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 398f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 399f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 400f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 4014591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 4024591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 403f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0008; 404f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 405f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = true; 406f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 407f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org EXPECT_EQ(packet_buffer_size(), 4084591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 4094591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 410f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 411f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.seqNum = 0x0009; 412f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.isFirstPacket = false; 413f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org packet_.markerBit = false; 414f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org FillPacket(1); 4159d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 4169d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 417f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org} 418f31a47abdc413221e4869a9e24f9b208c7d2cc4amikhal@webrtc.org 419076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsOneLoss) { 420c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 421c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 0 ] [ 2 ] | [ 3 ] 422c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 423c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 424c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 425c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 426c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 0; 427c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(0); 4289d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 4299d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4304591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 4314591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 4324591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 433c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 434c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 435c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 436c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 437c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 438c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 439c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 440c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 4413004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 4434591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 4444591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 445c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 446c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 447c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 448c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 449c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 450c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 451c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 452c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 4533004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4544591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 4554591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 4564591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 457c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 458c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 459c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // One packet should be removed (end of partition 0). 4604591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(2 * packet_buffer_size(), 4614591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 4624591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 463c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 464c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 1, 0)); 465c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 466c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 1, 3)); 467c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 468c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 469076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsOneLoss2) { 470c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 471c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 1 ] [ 2 ] | [ 3 ] [ 5 ] 472c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 473c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 474c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 475c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 476c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 1; 477c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 4789d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 4799d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4804591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 4814591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 4824591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 483c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 484c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 485c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 486c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 487c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 488c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 489c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 490c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 4913004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 4924591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 4934591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 4944591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 495c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 496c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 497c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 498c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 499c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 500c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 501c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 502c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 5033004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5044591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 5054591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 5064591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 507c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 508c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 509c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 510c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 511c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 512c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 513c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 514c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(5); 5153004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5164591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 5174591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 5184591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 519c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 520c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 521c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // One packet should be removed (end of partition 2), 3 left. 5224591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(3 * packet_buffer_size(), 5234591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 5244591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 525c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 526c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 1)); 527c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 528c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 1, 3)); 529c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 530c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 531076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsNoLossWrap) { 532c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 533c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ fffd ] [ fffe ] | [ ffff ] [ 0 ] 534c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 535c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 536c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 537c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 538c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 0xfffd; 539c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(0); 5409d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 5419d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 5434591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 5444591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 545c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 546c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 547c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 548c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 549c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 550c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 551c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 552c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 5533004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5544591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 5554591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 5564591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 557c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 558c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 559c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 560c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 561c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 562c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 563c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 564c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 5653004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5664591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 5674591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 5684591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 569c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 570c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 571c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 572c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 573c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 574c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 575c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 576c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 5773004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 5784591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 5794591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 5804591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 581c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 582c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 583c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // No packet should be removed. 5844591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(4 * packet_buffer_size(), 5854591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 5864591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 587c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 588c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 0)); 589c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 590c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 2, 2)); 591c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 592c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 593076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, TwoPartitionsLossWrap) { 594c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 | Partition 1 595c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ fffd ] [ fffe ] | [ ffff ] [ 1 ] 596c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 597c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 598c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 599c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 600c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 0xfffd; 601c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(0); 6029d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 6039d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6044591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6054591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6064591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 607c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 608c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 609c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 610c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 611c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 612c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 613c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 614c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 6153004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6164591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6174591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6184591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 619c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 620c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 621c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 622c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 623c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 624c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 625c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 626c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 6273004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6284591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6294591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6304591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 631c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 632c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 633c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 634c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 635c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 636c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 637c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 638c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(3); 6393004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6404591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6414591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 643c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 644c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 645c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // One packet should be removed from the last partition 6464591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(3 * packet_buffer_size(), 6474591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 6484591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 649c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 650c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 0)); 651c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 652c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 1, 2)); 653c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 654c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 655076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, ThreePartitionsOneMissing) { 656c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 1 |Partition 2 | Partition 3 657c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 1 ] [ 2 ] | | [ 5 ] | [ 6 ] 658c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 659c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 660c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 661c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 662c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 1; 663c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 6649d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 6659d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6664591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6674591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6684591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 669c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 670c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 671c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 672c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 673c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 674c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 675c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 676c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 6773004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6784591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6794591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6804591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 681c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 682c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 683c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 684c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 685c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 686c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 687c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 3; 688c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(5); 6893004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 6904591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 6914591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 6924591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 693c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 694c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 695c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 696c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 697c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 698c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 699c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 700c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(6); 7013004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7024591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7034591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7044591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 705c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 706c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 707c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // No packet should be removed. 7084591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(4 * packet_buffer_size(), 7094591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 7104591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 711c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 712c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 1)); 713c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 714c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(2, 2, 5)); 715c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 716c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 717076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, ThreePartitionsLossInSecond) { 718c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // Partition 0 |Partition 1 | Partition 2 719c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // [ 1 ] [ 2 ] | [ 4 ] [ 5 ] | [ 6 ] [ 7 ] 720c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 721c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 722c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 723c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 724c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber = 1; 725c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(1); 7269d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 7279d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7284591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7294591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7304591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 731c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 732c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 733c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 734c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 0; 735c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 736c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 737c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 738c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(2); 7399d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7404591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7414591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7424591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 743c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 744c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 745c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 746c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 747c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 748c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 749c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 2; 750c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(4); 7513004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7524591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7534591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7544591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 755c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 756c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 757c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 758c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 1; 759c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 760c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 761c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 762c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(5); 7633004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7644591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7654591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7664591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 767c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 768c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 769c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 770c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 771c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = true; 772c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = false; 773c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 774c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(6); 7753004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7764591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7774591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7784591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 779c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 780c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 781c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 782c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->partitionId = 2; 783c3d891059e117357011e414263af0f519313d440stefan@webrtc.org vp8_header_->beginningOfPartition = false; 784c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.markerBit = true; 785c3d891059e117357011e414263af0f519313d440stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 786c3d891059e117357011e414263af0f519313d440stefan@webrtc.org FillPacket(7); 7873004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 7884591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 7894591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 7904591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 791c3d891059e117357011e414263af0f519313d440stefan@webrtc.org delete packet; 792c3d891059e117357011e414263af0f519313d440stefan@webrtc.org 793c3d891059e117357011e414263af0f519313d440stefan@webrtc.org // 2 partitions left. 2 packets removed from second partition 7944591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(4 * packet_buffer_size(), 7954591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 7964591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 797c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 798c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 1)); 799c3d891059e117357011e414263af0f519313d440stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 800c3d891059e117357011e414263af0f519313d440stefan@webrtc.org EXPECT_TRUE(VerifyPartition(2, 2, 6)); 801c3d891059e117357011e414263af0f519313d440stefan@webrtc.org} 8025b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 803076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestVP8Partitions, AggregationOverTwoPackets) { 8045b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org // Partition 0 | Partition 1 | Partition 2 8055b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org // [ 0 | ] [ 1 ] | [ 2 ] 8065b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.type.Video.isFirstPacket = true; 8075b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->beginningOfPartition = true; 8085b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->partitionId = 0; 8095b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.markerBit = false; 8105b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.sequenceNumber = 0; 8115b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org FillPacket(0); 8129d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel VCMPacket* packet = 8139d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 8144591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 8154591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 8164591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 8175b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org delete packet; 8185b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 8195b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 8205b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->partitionId = 1; 8215b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->beginningOfPartition = false; 8225b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.markerBit = false; 8235b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 8245b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org FillPacket(1); 8253004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 8264591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 8274591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 8284591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 8295b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org delete packet; 8305b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 8315b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.type.Video.isFirstPacket = false; 8325b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->partitionId = 2; 8335b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org vp8_header_->beginningOfPartition = true; 8345b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.markerBit = true; 8355b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org packet_header_.header.sequenceNumber += 1; 8365b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org FillPacket(2); 8373004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); 8384591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 8394591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, 8404591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 8415b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org delete packet; 8425b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org 843076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org // No packets removed. 8444591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(3 * packet_buffer_size(), 8454591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org session_.BuildVP8FragmentationHeader( 8464591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org frame_buffer_, frame_buffer_size(), &fragmentation_)); 8475b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 8485b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org EXPECT_TRUE(VerifyPartition(0, 2, 0)); 8495b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org // This partition is aggregated in partition 0 8505b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 8515b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org EXPECT_TRUE(VerifyPartition(1, 0, 0)); 8525b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org SCOPED_TRACE("Calling VerifyPartition"); 8535b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org EXPECT_TRUE(VerifyPartition(2, 1, 2)); 8545b91464edf51354dd3f4475b8e0bb23357bd8511stefan@webrtc.org} 855076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 8564ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.orgTEST_F(TestNalUnits, OnlyReceivedEmptyPacket) { 8574ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.isFirstPacket = false; 8584ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.completeNALU = kNaluComplete; 85922993e1a0c114122fc1b9de0fc74d4096ec868bdpbos packet_.frameType = kEmptyFrame; 8604ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.sizeBytes = 0; 8614ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.seqNum = 0; 8624ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org packet_.markerBit = false; 8639d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel EXPECT_EQ( 8649d3ab61325c5ed216ea52bc829f1d8c81347459bphilipel 0, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); 8654ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org 8664591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(0U, session_.MakeDecodable()); 8674591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(0U, session_.SessionLength()); 8684ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org} 8694ce0ba00de6004673f484083a6bd2b8f4597be2astefan@webrtc.org 870076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, OneIsolatedNaluLoss) { 871076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 872076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 873076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 874076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 875076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 8764591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 8774591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 8784591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 879076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 880076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 881076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 882076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 883076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 884076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 8854591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 8864591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 8874591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 888076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 8894591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(0U, session_.MakeDecodable()); 8903004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(2 * packet_buffer_size(), session_.SessionLength()); 891076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 892076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 893076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 894076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(1, 1, 2)); 895076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 896076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 897076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, LossInMiddleOfNalu) { 898076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 899076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 900076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 901076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 902076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 9034591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9044591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9054591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 906076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 907076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 908076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 909076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 910076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 911076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 9124591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9134591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9144591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 915076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 9163004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.MakeDecodable()); 9173004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.SessionLength()); 918076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 919076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 920076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 921076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 922076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, StartAndEndOfLastNalUnitLost) { 923076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 924076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 925076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0; 926076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 927076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 9284591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9294591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9304591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 931076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 932076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 933076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 934076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 935076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 936076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 9374591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9384591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9394591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 940076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 9413004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.MakeDecodable()); 9423004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(packet_buffer_size(), session_.SessionLength()); 943076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 944076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 945076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 946076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 947076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, ReorderWrapNoLoss) { 948076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 949076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 950076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 951076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 1; 952076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 953076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 9544591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9554591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9564591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 957076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 958076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = true; 959076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluComplete; 960076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum -= 1; 961076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 962076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(0); 9634591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9644591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9654591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 966076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 967076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 968076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 969076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 970076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 971076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 9724591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9734591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9744591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 975076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 9764591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(0U, session_.MakeDecodable()); 9773004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(3 * packet_buffer_size(), session_.SessionLength()); 978076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org SCOPED_TRACE("Calling VerifyNalu"); 979076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org EXPECT_TRUE(VerifyNalu(0, 1, 0)); 980076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 981076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 982076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, WrapLosses) { 983076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 984076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 985076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 986076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 987076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 9884591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9894591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9904591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 991076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 992076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 993076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 994076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 995076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 996076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 9974591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 9984591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 9994591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 1000076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 10013004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable()); 10024591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(0U, session_.SessionLength()); 1003076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 1004076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 1005076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.orgTEST_F(TestNalUnits, ReorderWrapLosses) { 1006076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum = 0xFFFF; 1007076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 1008076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 1009076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluEnd; 1010076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum += 2; 1011076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = true; 1012076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(2); 10134591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 10144591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 10154591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 1016076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 1017076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.seqNum -= 2; 1018076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.isFirstPacket = false; 1019076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.completeNALU = kNaluIncomplete; 1020076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org packet_.markerBit = false; 1021076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org FillPacket(1); 10224591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(packet_buffer_size(), 10234591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, 10244591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org kNoErrors, frame_data))); 1025076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org 10263004c79c6ad0ca4b4df27d0ca76c2eb29735e267pbos@webrtc.org EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable()); 10274591fbd09f9cb6e83433c49a12dd8524c2806502pkasting@chromium.org EXPECT_EQ(0U, session_.SessionLength()); 1028076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} 1029d177c10e2de490cfa001a00ca4d0ae654292afc7agalusza@google.com 1030076fa6e674f0feb2cf3393c44ed845aef8b52f06stefan@webrtc.org} // namespace webrtc 1031