c5af17efaba8418ccc165b5a62a70d06455b6e89
[platform/framework/web/crosswalk.git] / src / media / cast / framer / frame_buffer_unittest.cc
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.
4
5 #include "media/cast/framer/frame_buffer.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 namespace media {
9 namespace cast {
10
11 class FrameBufferTest : public ::testing::Test {
12  protected:
13   FrameBufferTest() {
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;
22   }
23
24   virtual ~FrameBufferTest() {}
25
26   FrameBuffer buffer_;
27   std::vector<uint8> payload_;
28   RtpCastHeader rtp_header_;
29
30   DISALLOW_COPY_AND_ASSIGN(FrameBufferTest);
31 };
32
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);
43 }
44
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));
50 }
51
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());
59 }
60
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());
75 }
76
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());
93 }
94
95 }  // namespace media
96 }  // namespace cast