• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "api/video/video_frame_metadata.h"
12 
13 #include "modules/rtp_rtcp/source/rtp_video_header.h"
14 #include "test/gmock.h"
15 #include "test/gtest.h"
16 
17 namespace webrtc {
18 namespace {
19 
20 using ::testing::ElementsAre;
21 using ::testing::IsEmpty;
22 
TEST(VideoFrameMetadata,GetWidthReturnsCorrectValue)23 TEST(VideoFrameMetadata, GetWidthReturnsCorrectValue) {
24   RTPVideoHeader video_header;
25   video_header.width = 1280u;
26   VideoFrameMetadata metadata(video_header);
27   EXPECT_EQ(metadata.GetWidth(), video_header.width);
28 }
29 
TEST(VideoFrameMetadata,GetHeightReturnsCorrectValue)30 TEST(VideoFrameMetadata, GetHeightReturnsCorrectValue) {
31   RTPVideoHeader video_header;
32   video_header.height = 720u;
33   VideoFrameMetadata metadata(video_header);
34   EXPECT_EQ(metadata.GetHeight(), video_header.height);
35 }
36 
TEST(VideoFrameMetadata,GetFrameIdReturnsCorrectValue)37 TEST(VideoFrameMetadata, GetFrameIdReturnsCorrectValue) {
38   RTPVideoHeader video_header;
39   RTPVideoHeader::GenericDescriptorInfo& generic =
40       video_header.generic.emplace();
41   generic.frame_id = 10;
42   VideoFrameMetadata metadata(video_header);
43   EXPECT_EQ(metadata.GetFrameId().value(), 10);
44 }
45 
TEST(VideoFrameMetadata,HasNoFrameIdForHeaderWithoutGeneric)46 TEST(VideoFrameMetadata, HasNoFrameIdForHeaderWithoutGeneric) {
47   RTPVideoHeader video_header;
48   VideoFrameMetadata metadata(video_header);
49   ASSERT_FALSE(video_header.generic);
50   EXPECT_EQ(metadata.GetFrameId(), absl::nullopt);
51 }
52 
TEST(VideoFrameMetadata,GetSpatialIndexReturnsCorrectValue)53 TEST(VideoFrameMetadata, GetSpatialIndexReturnsCorrectValue) {
54   RTPVideoHeader video_header;
55   RTPVideoHeader::GenericDescriptorInfo& generic =
56       video_header.generic.emplace();
57   generic.spatial_index = 2;
58   VideoFrameMetadata metadata(video_header);
59   EXPECT_EQ(metadata.GetSpatialIndex(), 2);
60 }
61 
TEST(VideoFrameMetadata,SpatialIndexIsZeroForHeaderWithoutGeneric)62 TEST(VideoFrameMetadata, SpatialIndexIsZeroForHeaderWithoutGeneric) {
63   RTPVideoHeader video_header;
64   VideoFrameMetadata metadata(video_header);
65   ASSERT_FALSE(video_header.generic);
66   EXPECT_EQ(metadata.GetSpatialIndex(), 0);
67 }
68 
TEST(VideoFrameMetadata,GetTemporalIndexReturnsCorrectValue)69 TEST(VideoFrameMetadata, GetTemporalIndexReturnsCorrectValue) {
70   RTPVideoHeader video_header;
71   RTPVideoHeader::GenericDescriptorInfo& generic =
72       video_header.generic.emplace();
73   generic.temporal_index = 3;
74   VideoFrameMetadata metadata(video_header);
75   EXPECT_EQ(metadata.GetTemporalIndex(), 3);
76 }
77 
TEST(VideoFrameMetadata,TemporalIndexIsZeroForHeaderWithoutGeneric)78 TEST(VideoFrameMetadata, TemporalIndexIsZeroForHeaderWithoutGeneric) {
79   RTPVideoHeader video_header;
80   VideoFrameMetadata metadata(video_header);
81   ASSERT_FALSE(video_header.generic);
82   EXPECT_EQ(metadata.GetTemporalIndex(), 0);
83 }
84 
TEST(VideoFrameMetadata,GetFrameDependenciesReturnsCorrectValue)85 TEST(VideoFrameMetadata, GetFrameDependenciesReturnsCorrectValue) {
86   RTPVideoHeader video_header;
87   RTPVideoHeader::GenericDescriptorInfo& generic =
88       video_header.generic.emplace();
89   generic.dependencies = {5, 6, 7};
90   VideoFrameMetadata metadata(video_header);
91   EXPECT_THAT(metadata.GetFrameDependencies(), ElementsAre(5, 6, 7));
92 }
93 
TEST(VideoFrameMetadata,FrameDependencyVectorIsEmptyForHeaderWithoutGeneric)94 TEST(VideoFrameMetadata, FrameDependencyVectorIsEmptyForHeaderWithoutGeneric) {
95   RTPVideoHeader video_header;
96   VideoFrameMetadata metadata(video_header);
97   ASSERT_FALSE(video_header.generic);
98   EXPECT_THAT(metadata.GetFrameDependencies(), IsEmpty());
99 }
100 
TEST(VideoFrameMetadata,GetDecodeTargetIndicationsReturnsCorrectValue)101 TEST(VideoFrameMetadata, GetDecodeTargetIndicationsReturnsCorrectValue) {
102   RTPVideoHeader video_header;
103   RTPVideoHeader::GenericDescriptorInfo& generic =
104       video_header.generic.emplace();
105   generic.decode_target_indications = {DecodeTargetIndication::kSwitch};
106   VideoFrameMetadata metadata(video_header);
107   EXPECT_THAT(metadata.GetDecodeTargetIndications(),
108               ElementsAre(DecodeTargetIndication::kSwitch));
109 }
110 
TEST(VideoFrameMetadata,DecodeTargetIndicationsVectorIsEmptyForHeaderWithoutGeneric)111 TEST(VideoFrameMetadata,
112      DecodeTargetIndicationsVectorIsEmptyForHeaderWithoutGeneric) {
113   RTPVideoHeader video_header;
114   VideoFrameMetadata metadata(video_header);
115   ASSERT_FALSE(video_header.generic);
116   EXPECT_THAT(metadata.GetDecodeTargetIndications(), IsEmpty());
117 }
118 
119 }  // namespace
120 }  // namespace webrtc
121