1 /*
2 * Copyright (c) 2011-2019, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 
23 //!
24 //! \file     media_user_settings_mgr_g12.cpp
25 //! \brief    Common user feature interface on Gen12 platform
26 //!
27 
28 #include "mos_utilities.h"
29 #include "media_user_settings_mgr_g12.h"
30 
31 static MOS_USER_FEATURE_VALUE MOSUserFeatureValueDescFields_g12[MOS_NUM_USER_FEATURE_VALUES_G12] =
32 {
33     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_DISABLE_HEVC_REALTILE_DECODE_ID_G12,
34      "Disable HEVC Real Tile Decode",
35      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
36      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
37      "Decode",
38      MOS_USER_FEATURE_TYPE_USER,
39      MOS_USER_FEATURE_VALUE_TYPE_UINT32,
40      "0",
41      "Disable HEVC real tile decode mode. Default is not disabled"),
42     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_REALTILE_MULTI_PHASE_DECODE_ID_G12,
43      "Enable HEVC Real Tile Multi Phase Decode",
44      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
45      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
46      "Decode",
47      MOS_USER_FEATURE_TYPE_USER,
48      MOS_USER_FEATURE_VALUE_TYPE_UINT32,
49      "1",
50      "Enable HEVC real tile multi-phase decode mode. Default is enabled"),
51     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_TILEREPLAY_ENABLE_ID_G12,
52      "HEVC VDEnc TileReplay Enable",
53      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
54      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
55      "Encode",
56      MOS_USER_FEATURE_TYPE_USER,
57      MOS_USER_FEATURE_VALUE_TYPE_INT32,
58      "0",
59      "Enable TileReplay for HEVC VDEnc"),
60     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_RGB_ENCODING_ENABLE_ID_G12,
61      "HEVC VDEnc RGB Encoding Enable",
62      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
63      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
64      "Encode",
65      MOS_USER_FEATURE_TYPE_USER,
66      MOS_USER_FEATURE_VALUE_TYPE_INT32,
67      "0",
68      "Enable RGB Encoding for HEVC VDEnc"),
69     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_CAPTURE_MODE_ENABLE_ID_G12,
70      "HEVC VDEnc Capture Mode Enable",
71      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
72      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
73      "Encode",
74      MOS_USER_FEATURE_TYPE_USER,
75      MOS_USER_FEATURE_VALUE_TYPE_INT32,
76      "0",
77      "Enable Capture Mode for HEVC VDEnc"),
78     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_SUBTHREAD_NUM_ID_G12,
79         "HEVC Encode SubThread Number",
80         __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
81         __MEDIA_USER_FEATURE_SUBKEY_REPORT,
82         "Encode",
83         MOS_USER_FEATURE_TYPE_USER,
84         MOS_USER_FEATURE_VALUE_TYPE_INT32,
85         "3",
86         "Used to enable HEVC ENCODE SubThread Number in the ENC kernel."),
87     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_ENCODE_LOAD_KERNEL_INPUT_ID_G12,
88      "Load HEVC Kernel Input",
89      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
90      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
91      "Encode",
92      MOS_USER_FEATURE_TYPE_USER,
93      MOS_USER_FEATURE_VALUE_TYPE_STRING,
94      "",
95      "Set fodler name for HEVC encoder kernel input loading"),
96     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HCP_DECODE_USER_PIPE_NUM_ID_G12,
97         "HCP Decode User Pipe Num",
98         __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
99         __MEDIA_USER_FEATURE_SUBKEY_REPORT,
100         "Codec",
101         MOS_USER_FEATURE_TYPE_USER,
102         MOS_USER_FEATURE_VALUE_TYPE_UINT32,
103         "2",
104         "When vdbox >= 4, pipe num equals to the value set by user. (Default 2: use 2 pipes)"), //This is WA for scalability when vdbox num >= 4 because of kmd not ready
105     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VME_BRC_LTR_ENABLE_ID_G12,
106      "HEVC VME BRC LTR Enable",
107      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
108      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
109      "Codec",
110      MOS_USER_FEATURE_TYPE_USER,
111      MOS_USER_FEATURE_VALUE_TYPE_BOOL,
112      "0",
113      "Enable long term reference in hevc vme brc. (Default 0: Disable)"),
114     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VDENC_FORCE_SCALABILITY_ID_G12,
115      "HEVC VDEnc Force Scalability For Low Size",
116      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
117      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
118      "Codec",
119      MOS_USER_FEATURE_TYPE_USER,
120      MOS_USER_FEATURE_VALUE_TYPE_BOOL,
121      "0",
122      "HEVC VDEnc encode force scalability for low (less than 4K) resolution. (Default 0)"),
123     /* codec gen12 based */
124     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_VDENC_ULTRA_MODE_ENABLE_ID_G12,
125      "VDEnc Ultra Mode Enable",
126      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
127      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
128      "Encode",
129      MOS_USER_FEATURE_TYPE_USER,
130      MOS_USER_FEATURE_VALUE_TYPE_UINT32,
131      "0",
132      "Enables/Disables VDEnc Ultra Mode feature. Starting from TGL for AVC VDEnc."),
133      MOS_DECLARE_UF_KEY(__MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_DECODE_RT_FRAME_COUNT_ID_G12,
134      "RT Decoded Count",
135      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
136      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
137      "Report",
138      MOS_USER_FEATURE_TYPE_USER,
139      MOS_USER_FEATURE_VALUE_TYPE_INT32,
140      "0",
141      "Reports out real tile decoded frame count."),
142      MOS_DECLARE_UF_KEY(__MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_DECODE_VT_FRAME_COUNT_ID_G12,
143      "VT Decoded Count",
144      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
145      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
146      "Report",
147      MOS_USER_FEATURE_TYPE_USER,
148      MOS_USER_FEATURE_VALUE_TYPE_INT32,
149      "0",
150      "Reports out virtual tile decoded frame count."),
151      MOS_DECLARE_UF_KEY(__MEDIA_USER_FEATURE_VALUE_ENABLE_HEVC_DECODE_SP_FRAME_COUNT_ID_G12,
152      "SP Decoded Count",
153      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
154      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
155      "Report",
156      MOS_USER_FEATURE_TYPE_USER,
157      MOS_USER_FEATURE_VALUE_TYPE_INT32,
158      "0",
159      "Reports out single pipe decoded frame count."),
160      MOS_DECLARE_UF_KEY(__MEDIA_USER_FEATURE_VALUE_HEVC_DECODE_HISTOGRAM_DEBUG_ID_G12,
161      "HEVC SFC Histogram Debug",
162      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
163      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
164      "Decode",
165      MOS_USER_FEATURE_TYPE_USER,
166      MOS_USER_FEATURE_VALUE_TYPE_INT32,
167      "0",
168      "Enable HEVC SFC Histogram StreamOut debug. 0:Disable, 1:Enable"),
169     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VME_DISABLE_PANIC_MODE_ID_G12,
170         "HEVC VME Disable Panic Mode",
171         __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
172         __MEDIA_USER_FEATURE_SUBKEY_REPORT,
173         "Codec",
174         MOS_USER_FEATURE_TYPE_USER,
175         MOS_USER_FEATURE_VALUE_TYPE_BOOL,
176         "0",
177         "HEVC Vme encode disable panic mode. (Default 0)"),
178     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VME_NUM_MEDIA_HWWALKER_INUSE_ID_G12,
179         "HEVC VME Media HW Walker Number In Use",
180         __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
181         __MEDIA_USER_FEATURE_SUBKEY_REPORT,
182         "Codec",
183         MOS_USER_FEATURE_TYPE_USER,
184         MOS_USER_FEATURE_VALUE_TYPE_INT32,
185         "1",
186         "HEVC Vme encode media hw walker number in use. (Default 1)"),
187     MOS_DECLARE_UF_KEY_DBGONLY(__MEDIA_USER_FEATURE_VALUE_HEVC_VME_BREAK12_ID_G12,
188         "HEVC VME Break12",
189         __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
190         __MEDIA_USER_FEATURE_SUBKEY_REPORT,
191         "Encode",
192         MOS_USER_FEATURE_TYPE_USER,
193         MOS_USER_FEATURE_VALUE_TYPE_INT32,
194         "1",
195         "HEVC Vme encode break12 setting:[0, 3]. (Default 1"),
196     /* VP gen12 based */
197     MOS_DECLARE_UF_KEY(__MEDIA_USER_FEATURE_VALUE_SFC_OUTPUT_CENTERING_DISABLE_ID_G12,
198      "SFC Output Centering Disable",
199      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
200      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
201      "VP",
202      MOS_USER_FEATURE_TYPE_USER,
203      MOS_USER_FEATURE_VALUE_TYPE_INT32,
204      "0",
205      "Disabling SFC Centering output. 1 -- Disable, 0 -- Enable."),
206      MOS_DECLARE_UF_KEY(__MEDIA_USER_FEATURE_VALUE_SFC_OUTPUT_DTR_DISABLE_ID_G12,
207      "Disable SFC DTR",
208      __MEDIA_USER_FEATURE_SUBKEY_INTERNAL,
209      __MEDIA_USER_FEATURE_SUBKEY_REPORT,
210      "VP",
211      MOS_USER_FEATURE_TYPE_USER,
212      MOS_USER_FEATURE_VALUE_TYPE_UINT32,
213      "1",
214      "Disabling SFC DTR output. 1: Disable, 0: Enable."),
215 };
216 
MediaUserSettingsMgr_g12()217 MediaUserSettingsMgr_g12::MediaUserSettingsMgr_g12()
218 {
219     MOS_STATUS eStatus = MOS_DeclareUserFeatureKeysFromDescFields(
220         MOSUserFeatureValueDescFields_g12,
221         MOS_NUM_USER_FEATURE_VALUES_G12,
222         __MOS_USER_FEATURE_KEY_G12_MAX_ID,
223         nullptr);
224 
225     MosUtilUserInterface::SetDefaultValueChanged(true);
226 
227     if (MOS_FAILED(eStatus))
228     {
229         MOS_OS_ASSERTMESSAGE("MOS util G12 user feature key init error");
230     }
231 
232 }
233 
~MediaUserSettingsMgr_g12()234 MediaUserSettingsMgr_g12::~MediaUserSettingsMgr_g12()
235 {
236 
237     MOS_STATUS eStatus = MOS_DestroyUserFeatureKeysFromDescFields(
238         MOSUserFeatureValueDescFields_g12,
239         MOS_NUM_USER_FEATURE_VALUES_G12,
240         __MOS_USER_FEATURE_KEY_G12_MAX_ID,
241         nullptr);
242 
243     if (MOS_FAILED(eStatus))
244     {
245         MOS_OS_ASSERTMESSAGE("MOS util G12 user feature key destroy error");
246     }
247 
248 }
249 
250 
251