• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 Intel Corporation. All Rights Reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 #include "test_va_api_fixture.h"
26 
27 #include <functional>
28 
29 namespace VAAPI
30 {
31 
32 class VAAPIDisplayAttribs
33     : public VAAPIFixture
34 {
35 protected:
SetUp()36     void SetUp()
37     {
38         VAAPIFixture::SetUp();
39         doInitialize();
40         ASSERT_FALSE(HasFailure());
41     }
42 
TearDown()43     void TearDown()
44     {
45         doTerminate();
46         VAAPIFixture::TearDown();
47     }
48 
findDisplayAttribInQueryList(const VADisplayAttribType & type)49     bool findDisplayAttribInQueryList(const VADisplayAttribType& type)
50     {
51         const DisplayAttributes::const_iterator begin = m_attribs.begin();
52         const DisplayAttributes::const_iterator end = m_attribs.end();
53         auto predicate = [&](const VADisplayAttribute & a) {
54             return a.type == type;
55         };
56 
57         return std::find_if(begin, end, predicate) != end;
58     }
59 
60 protected:
61     DisplayAttributes m_attribs;
62 };
63 
64 static const DisplayAttribTypes types = {
65     VADisplayAttribBrightness,
66     VADisplayAttribContrast,
67     VADisplayAttribHue,
68     VADisplayAttribSaturation,
69     VADisplayAttribBackgroundColor,
70     VADisplayAttribDirectSurface,
71     VADisplayAttribRotation,
72     VADisplayAttribOutofLoopDeblock,
73     VADisplayAttribBLEBlackMode,
74     VADisplayAttribBLEWhiteMode,
75     VADisplayAttribBlueStretch,
76     VADisplayAttribSkinColorCorrection,
77     VADisplayAttribCSCMatrix,
78     VADisplayAttribBlendColor,
79     VADisplayAttribOverlayAutoPaintColorKey,
80     VADisplayAttribOverlayColorKey,
81     VADisplayAttribRenderMode,
82     VADisplayAttribRenderDevice,
83     VADisplayAttribRenderRect
84 };
85 
TEST_F(VAAPIDisplayAttribs,MaxNumDisplayAttribs)86 TEST_F(VAAPIDisplayAttribs, MaxNumDisplayAttribs)
87 {
88     EXPECT_GE(vaMaxNumDisplayAttributes(m_vaDisplay), 0);
89 }
90 
TEST_F(VAAPIDisplayAttribs,QueryDisplayAttribs)91 TEST_F(VAAPIDisplayAttribs, QueryDisplayAttribs)
92 {
93     const int maxAttribs(vaMaxNumDisplayAttributes(m_vaDisplay));
94     int numAttribs(0);
95 
96     if (maxAttribs <= 0) {
97         numAttribs = 256;
98         const VaapiStatus status(
99             vaQueryDisplayAttributes(m_vaDisplay, NULL, &numAttribs));
100 
101         EXPECT_TRUE(
102             status == VaapiStatus(VA_STATUS_SUCCESS) ||
103             status == VaapiStatus(VA_STATUS_ERROR_UNIMPLEMENTED));
104 
105         if (status == VaapiStatus(VA_STATUS_SUCCESS)) {
106             EXPECT_EQ(numAttribs, 0);
107         }
108     } else {
109         m_attribs.resize(maxAttribs);
110         EXPECT_STATUS(vaQueryDisplayAttributes(m_vaDisplay, m_attribs.data(),
111                                                &numAttribs));
112         EXPECT_GT(numAttribs, 0);
113         EXPECT_LE(numAttribs, maxAttribs);
114     }
115 }
116 
TEST_F(VAAPIDisplayAttribs,GetDisplayAttribs)117 TEST_F(VAAPIDisplayAttribs, GetDisplayAttribs)
118 {
119     const int maxAttribs(vaMaxNumDisplayAttributes(m_vaDisplay));
120 
121     if (maxAttribs <= 0) {
122         EXPECT_STATUS_EQ(VA_STATUS_ERROR_UNIMPLEMENTED,
123                          vaGetDisplayAttributes(m_vaDisplay, NULL, 0));
124         return;
125     }
126 
127     m_attribs.resize(maxAttribs);
128 
129     int numAttribs(0);
130     ASSERT_STATUS(vaQueryDisplayAttributes(m_vaDisplay, m_attribs.data(),
131                                            &numAttribs));
132 
133     ASSERT_GT(numAttribs, 0);
134     ASSERT_LE(numAttribs, maxAttribs);
135     m_attribs.resize(numAttribs);
136 
137     for (const auto& type : types) {
138         VADisplayAttribute attrib{/*type:*/ type};
139         ASSERT_STATUS(vaGetDisplayAttributes(m_vaDisplay, &attrib, 1));
140 
141         if (findDisplayAttribInQueryList(attrib.type)) {
142             EXPECT_TRUE((attrib.flags & VA_DISPLAY_ATTRIB_GETTABLE)
143                         || (attrib.flags & VA_DISPLAY_ATTRIB_SETTABLE));
144         } else {
145             EXPECT_FALSE(attrib.flags & VA_DISPLAY_ATTRIB_NOT_SUPPORTED);
146         }
147     }
148 }
149 
TEST_F(VAAPIDisplayAttribs,SetDisplayAttribs)150 TEST_F(VAAPIDisplayAttribs, SetDisplayAttribs)
151 {
152     const int maxAttribs(vaMaxNumDisplayAttributes(m_vaDisplay));
153 
154     if (maxAttribs <= 0) {
155         EXPECT_STATUS_EQ(VA_STATUS_ERROR_UNIMPLEMENTED,
156                          vaSetDisplayAttributes(m_vaDisplay, NULL, 0));
157         return;
158     }
159 
160     m_attribs.resize(maxAttribs);
161 
162     int numAttribs(0);
163     ASSERT_STATUS(vaQueryDisplayAttributes(m_vaDisplay, m_attribs.data(),
164                                            &numAttribs));
165 
166     ASSERT_GT(numAttribs, 0);
167     ASSERT_LE(numAttribs, maxAttribs);
168     m_attribs.resize(numAttribs);
169 
170     ASSERT_STATUS(vaGetDisplayAttributes(m_vaDisplay, m_attribs.data(),
171                                          m_attribs.size()));
172 
173     for (auto attrib : m_attribs) {
174         if (attrib.flags & VA_DISPLAY_ATTRIB_SETTABLE) {
175             ASSERT_LE(attrib.min_value, attrib.max_value);
176 
177             attrib.value = (attrib.min_value + attrib.max_value) / 2;
178             EXPECT_STATUS(vaSetDisplayAttributes(m_vaDisplay, &attrib, 1));
179 
180             attrib.value = attrib.min_value - 1;
181             EXPECT_STATUS_EQ(VA_STATUS_ERROR_INVALID_PARAMETER,
182                              vaSetDisplayAttributes(m_vaDisplay, &attrib, 1));
183 
184             attrib.value = attrib.max_value + 1;
185             EXPECT_STATUS_EQ(VA_STATUS_ERROR_INVALID_PARAMETER,
186                              vaSetDisplayAttributes(m_vaDisplay, &attrib, 1));
187         }
188     }
189 }
190 
191 } // namespace VAAPI
192