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