1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "media/cast/framer/frame_buffer.h"
6 #include "testing/gtest/include/gtest/gtest.h"
11 class FrameBufferTest : public ::testing::Test {
14 payload_.assign(kMaxIpPacketSize, 0);
15 // Build a default one packet frame - populate webrtc header.
16 rtp_header_.is_key_frame = false;
17 rtp_header_.frame_id = 0;
18 rtp_header_.packet_id = 0;
19 rtp_header_.max_packet_id = 0;
20 rtp_header_.is_reference = false;
21 rtp_header_.reference_frame_id = 0;
24 virtual ~FrameBufferTest() {}
27 std::vector<uint8> payload_;
28 RtpCastHeader rtp_header_;
30 DISALLOW_COPY_AND_ASSIGN(FrameBufferTest);
33 TEST_F(FrameBufferTest, OnePacketInsertSanity) {
34 rtp_header_.webrtc.header.timestamp = 3000u;
35 rtp_header_.is_key_frame = true;
36 rtp_header_.frame_id = 5;
37 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
38 transport::EncodedVideoFrame frame;
39 EXPECT_TRUE(buffer_.GetEncodedVideoFrame(&frame));
40 EXPECT_EQ(5u, frame.frame_id);
41 EXPECT_TRUE(frame.key_frame);
42 EXPECT_EQ(3000u, frame.rtp_timestamp);
45 TEST_F(FrameBufferTest, EmptyBuffer) {
46 EXPECT_FALSE(buffer_.Complete());
47 EXPECT_FALSE(buffer_.is_key_frame());
48 transport::EncodedVideoFrame frame;
49 EXPECT_FALSE(buffer_.GetEncodedVideoFrame(&frame));
52 TEST_F(FrameBufferTest, DefaultOnePacketFrame) {
53 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
54 EXPECT_TRUE(buffer_.Complete());
55 EXPECT_FALSE(buffer_.is_key_frame());
56 transport::EncodedVideoFrame frame;
57 EXPECT_TRUE(buffer_.GetEncodedVideoFrame(&frame));
58 EXPECT_EQ(payload_.size(), frame.data.size());
61 TEST_F(FrameBufferTest, MultiplePacketFrame) {
62 rtp_header_.is_key_frame = true;
63 rtp_header_.max_packet_id = 2;
64 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
65 ++rtp_header_.packet_id;
66 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
67 ++rtp_header_.packet_id;
68 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
69 ++rtp_header_.packet_id;
70 EXPECT_TRUE(buffer_.Complete());
71 EXPECT_TRUE(buffer_.is_key_frame());
72 transport::EncodedVideoFrame frame;
73 EXPECT_TRUE(buffer_.GetEncodedVideoFrame(&frame));
74 EXPECT_EQ(3 * payload_.size(), frame.data.size());
77 TEST_F(FrameBufferTest, IncompleteFrame) {
78 rtp_header_.max_packet_id = 4;
79 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
80 ++rtp_header_.packet_id;
81 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
82 ++rtp_header_.packet_id;
83 // Increment again - skip packet #2.
84 ++rtp_header_.packet_id;
85 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
86 ++rtp_header_.packet_id;
87 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
88 EXPECT_FALSE(buffer_.Complete());
89 // Insert missing packet.
90 rtp_header_.packet_id = 2;
91 buffer_.InsertPacket(payload_.data(), payload_.size(), rtp_header_);
92 EXPECT_TRUE(buffer_.Complete());