1 // Copyright 2014 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/net/rtp/frame_buffer.h"
6 #include "media/cast/net/cast_transport_defines.h"
7 #include "testing/gtest/include/gtest/gtest.h"
12 class FrameBufferTest
: public ::testing::Test
{
15 payload_
.assign(kMaxIpPacketSize
, 0);
18 ~FrameBufferTest() override
{}
21 std::vector
<uint8
> payload_
;
22 RtpCastHeader rtp_header_
;
24 DISALLOW_COPY_AND_ASSIGN(FrameBufferTest
);
27 TEST_F(FrameBufferTest
, OnePacketInsertSanity
) {
28 rtp_header_
.rtp_timestamp
= 3000;
29 rtp_header_
.is_key_frame
= true;
30 rtp_header_
.frame_id
= 5;
31 rtp_header_
.reference_frame_id
= 5;
32 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
34 EXPECT_TRUE(buffer_
.AssembleEncodedFrame(&frame
));
35 EXPECT_EQ(EncodedFrame::KEY
, frame
.dependency
);
36 EXPECT_EQ(5u, frame
.frame_id
);
37 EXPECT_EQ(5u, frame
.referenced_frame_id
);
38 EXPECT_EQ(3000u, frame
.rtp_timestamp
);
41 TEST_F(FrameBufferTest
, EmptyBuffer
) {
42 EXPECT_FALSE(buffer_
.Complete());
44 EXPECT_FALSE(buffer_
.AssembleEncodedFrame(&frame
));
47 TEST_F(FrameBufferTest
, DefaultOnePacketFrame
) {
48 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
49 EXPECT_TRUE(buffer_
.Complete());
50 EXPECT_FALSE(buffer_
.is_key_frame());
52 EXPECT_TRUE(buffer_
.AssembleEncodedFrame(&frame
));
53 EXPECT_EQ(payload_
.size(), frame
.data
.size());
56 TEST_F(FrameBufferTest
, MultiplePacketFrame
) {
57 rtp_header_
.is_key_frame
= true;
58 rtp_header_
.max_packet_id
= 2;
59 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
60 ++rtp_header_
.packet_id
;
61 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
62 ++rtp_header_
.packet_id
;
63 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
64 ++rtp_header_
.packet_id
;
65 EXPECT_TRUE(buffer_
.Complete());
66 EXPECT_TRUE(buffer_
.is_key_frame());
68 EXPECT_TRUE(buffer_
.AssembleEncodedFrame(&frame
));
69 EXPECT_EQ(3 * payload_
.size(), frame
.data
.size());
72 TEST_F(FrameBufferTest
, IncompleteFrame
) {
73 rtp_header_
.max_packet_id
= 4;
74 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
75 ++rtp_header_
.packet_id
;
76 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
77 ++rtp_header_
.packet_id
;
78 // Increment again - skip packet #2.
79 ++rtp_header_
.packet_id
;
80 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
81 ++rtp_header_
.packet_id
;
82 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
83 EXPECT_FALSE(buffer_
.Complete());
84 // Insert missing packet.
85 rtp_header_
.packet_id
= 2;
86 buffer_
.InsertPacket(&payload_
[0], payload_
.size(), rtp_header_
);
87 EXPECT_TRUE(buffer_
.Complete());