1 /*
2 * Copyright (c) 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     encode_av1_vdenc_const_settings.cpp
25 //! \brief    Defines the common interface for av1 vdenc const settings
26 //! \details  The encode feature manager is further sub-divided by platform type
27 //!           this file is for the base interface which is shared by all components.
28 //!
29 
30 #include "encode_av1_vdenc_const_settings.h"
31 #include "codec_def_common_av1.h"
32 #include "codec_def_encode.h"
33 #include "encode_utils.h"
34 #include "mhw_vdbox_vdenc_cmdpar.h"
35 #include "mos_utilities.h"
36 #include <array>
37 #include <cstdint>
38 #include <functional>
39 #include <vector>
40 
41 namespace encode
42 {
43 // 8 slots designed for {TU1,TU2,TU3,TU4,TU5,TU6,TU7,Potential_feature}
44 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par39[NUM_TARGET_USAGE_MODES] = { 12, 12, 12, 8, 8, 8, 4, 4 };
45 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par38[NUM_TARGET_USAGE_MODES] = { 4, 4, 4, 3, 3, 3, 2, 2 };
46 const uint32_t Av1VdencTUConstSettings::vdencCmd2Par85Table0[NUM_TARGET_USAGE_MODES] = { 1, 1, 1, 3, 3, 3, 3, 3 };
47 const uint32_t Av1VdencTUConstSettings::vdencCmd2Par85Table1[NUM_TARGET_USAGE_MODES] = { 1, 1, 1, 1, 1, 1, 0, 0 };
48 const bool     Av1VdencTUConstSettings::vdencCmd2Par86[NUM_TARGET_USAGE_MODES] = { false, false, false, false, false, false, true, true };
49 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par87Table0[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 2, 2, 2, 2, 2 };
50 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par87Table1[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 2, 2, 2, 2, 2 };
51 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par87Table2[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 2, 2, 2, 2, 2 };
52 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par87Table3[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 2, 2, 2, 2, 2 };
53 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table0[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 1, 1, 1, 1, 1 };
54 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table1[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 3, 3, 3, 3, 3 };
55 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table2[NUM_TARGET_USAGE_MODES] = {3, 3, 3, 3, 3, 3, 2, 2 };
56 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table3[NUM_TARGET_USAGE_MODES] = { 0, 0, 0, 0, 0, 0, 0, 0 };
57 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table4[NUM_TARGET_USAGE_MODES] = { 1, 1, 1, 1, 1, 1, 1, 1 };
58 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table5[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 3, 3, 3, 3, 3 };
59 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table6[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 1, 1, 1, 1, 1 };
60 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table7[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 1, 1, 1, 1, 1 };
61 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table8[NUM_TARGET_USAGE_MODES] = { 7, 7, 7, 7, 7, 7, 1, 1 };
62 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table9[NUM_TARGET_USAGE_MODES] = { 3, 3, 3, 1, 1, 1, 1, 1 };
63 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table10[NUM_TARGET_USAGE_MODES] = { 7, 7, 7, 3, 3, 3, 2, 2 };
64 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par88Table11[NUM_TARGET_USAGE_MODES] = { 0, 0, 0, 0, 0, 0, 0, 0 };
65 const bool     Av1VdencTUConstSettings::vdencCmd2Par89[NUM_TARGET_USAGE_MODES] = { false, false, false, false, false, false, true, true };
66 const bool     Av1VdencTUConstSettings::vdencCmd2Par94[NUM_TARGET_USAGE_MODES] = { false, false, false, true, true, true, true, true };
67 const bool     Av1VdencTUConstSettings::vdencCmd2Par95[NUM_TARGET_USAGE_MODES] = { false, false, false, false, false, false, true, true };
68 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par98[NUM_TARGET_USAGE_MODES] = { 0, 0, 0, 0, 0, 0, 1, 1 };
69 const bool     Av1VdencTUConstSettings::vdencCmd2Par97[NUM_TARGET_USAGE_MODES] = { false, false, false, true, true, false, false, false };
70 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par100[NUM_TARGET_USAGE_MODES] = { 0, 0, 0, 0, 0, 0, 0, 0 };
71 const uint8_t  Av1VdencTUConstSettings::vdencCmd2Par96[NUM_TARGET_USAGE_MODES] = { 0, 0, 0, 0, 0, 0, 3, 3};
72 const uint16_t Av1VdencTUConstSettings::vdencCmd2Par93[NUM_TARGET_USAGE_MODES] = { 0xffff, 0xffff, 0xffff, 0xff00, 0xff00, 0xff00, 0x8000, 0x8000 };
73 const uint16_t Av1VdencTUConstSettings::vdencCmd2Par92[NUM_TARGET_USAGE_MODES] = { 0xffff, 0xffff, 0xffff, 0xff00, 0xff00, 0xff00, 0xfffc, 0xfffc };
74 const bool     Av1VdencTUConstSettings::vdencCmd2Par23[NUM_TARGET_USAGE_MODES] = { false, false, false, false, false, false, false, false };
75 
76 constexpr int8_t Av1VdencBrcConstSettings::instRateThresholdI[4] = { 30, 50, 90, 115 };
77 constexpr int8_t Av1VdencBrcConstSettings::instRateThresholdP[4] = { 30, 50, 70, 120 };
78 constexpr double Av1VdencBrcConstSettings::devThresholdFpNegI[4] = { 0.80, 0.60, 0.34, 0.2 };
79 constexpr double Av1VdencBrcConstSettings::devThresholdFpPosI[4] = { 0.2, 0.4, 0.66, 0.9 };
80 constexpr double Av1VdencBrcConstSettings::devThresholdFpNegPB[4] = { 0.90, 0.66, 0.46, 0.3 };
81 constexpr double Av1VdencBrcConstSettings::devThresholdFpPosPB[4] = { 0.3, 0.46, 0.70, 0.90 };
82 constexpr double Av1VdencBrcConstSettings::devThresholdVbrNeg[4] = { 0.90, 0.70, 0.50, 0.3 };
83 constexpr double Av1VdencBrcConstSettings::devThresholdVbrPos[4] = { 0.4, 0.5, 0.75, 0.90 };
84 constexpr uint8_t Av1VdencBrcConstSettings::QPThresholds[4] = { 40, 80, 120, 180 };
85 constexpr uint16_t Av1VdencBrcConstSettings::startGlobalAdjustFrame[4] = {10,50,100,150};
86 constexpr uint8_t Av1VdencBrcConstSettings::globalRateRatioThreshold[6] = {40, 75, 97, 103, 125, 160};
87 constexpr int8_t Av1VdencBrcConstSettings::globalRateRatioThresholdQP[7] = {-6, -4, -2, 0, 2, 4, 6};
88 constexpr uint8_t Av1VdencBrcConstSettings::startGlobalAdjustMult[5] = {1, 1, 3, 2, 1};
89 constexpr uint8_t Av1VdencBrcConstSettings::startGlobalAdjustDiv[5] = {40, 5, 5, 3, 1};
90 constexpr uint8_t Av1VdencBrcConstSettings::distortionThresh[9] = { 4,30,60,80, 120,140,200,255, 0 };
91 constexpr uint8_t Av1VdencBrcConstSettings::distortionThreshB[9] = { 2,20,40,70, 130,160,200,255, 0 };
92 constexpr uint8_t Av1VdencBrcConstSettings::maxFrameMultI[5] = { 8, 9, 10, 11, 12 };
93 constexpr uint8_t Av1VdencBrcConstSettings::maxFrameMultP[5] = { 4, 5, 6, 6, 7 };
94 constexpr int8_t Av1VdencBrcConstSettings::av1DeltaQpI[][5] =
95 {
96     {2, 6, 10, 14, 18, },
97     {2, 4, 6, 10, 14, },
98     {0, 0, 2, 4, 8, },
99     {0, 0, 0, 2, 4, },
100     {-2, 0, 0, 0, 2, },
101     {-6, -4, -2, 0, 0, },
102     {-10, -8, -4, -2, 0, },
103     {-14, -12, -8, -4, -2, },
104     {-18, -14, -10, -4, -2, },
105 };
106 
107 constexpr int8_t Av1VdencBrcConstSettings::av1DeltaQpP[][5] =
108 {
109     {2, 4, 10, 16, 20, },
110     {2, 4, 8, 12, 16, },
111     {0, 2, 4, 8, 12, },
112     {0, 0, 0, 2, 4, },
113     {-2, 0, 0, 0, 2, },
114     {-4, -2, -2, 0, 0, },
115     {-6, -4, -2, -2, 0, },
116     {-10, -6, -4, -2, 0, },
117     {-14, -12, -8, -4, -2, },
118 };
119 
120 constexpr int8_t Av1VdencBrcConstSettings::av1DistortionsDeltaQpI[][9] =
121 {
122     { 0,  0,  0,  0,  0,  8,  12, 16, 20 },
123     { 0,  0,  0,  0,  0,  6,  10, 14, 18 },
124     {-2,  0,  0,  0,  0,  6,  8,  12, 14 },
125     {-4, -2,  0,  0,  0,  2,  4,  6,  10 },
126     {-6, -4, -2,  0,  0,  0,  2,  6,  10 },
127     {-8, -4, -2,  0,  0,  0,  2,  6,  10 },
128     {-10,-6, -4, -2,  0,  0,  2,  6,  10 },
129     {-12,-8, -4, -2,  0,  0,  2,  6,  10 },
130     {-12,-8, -4, -2,  0,  0,  2,  6,  10 },
131 };
132 
133 constexpr int8_t Av1VdencBrcConstSettings::av1DistortionsDeltaQpP[][9] =
134 {
135     { 0,  0,  0,  0,  0,  6,  10, 14,  18 },
136     { 0,  0,  0,  0,  0,  6,  10, 12,  16 },
137     {-2,  0,  0,  0,  0,  6,  10, 14,  16 },
138     {-4, -2,  0,  0,  0,  4,  8,  10,  12 },
139     {-6, -4, -2,  0,  0,  0,  2,  8,   10 },
140     {-8, -4, -2,  0,  0,  0,  2,  8,   10 },
141     {-8, -4, -2, -2,  0,  0,  0,  8,   10 },
142     {-8, -6, -4, -2,  0,  0,  0,  2,   10 },
143     {-10,-8, -4, -2,  0,  0,  0,  2,   8 },
144 };
145 
146 constexpr uint8_t Av1VdencBrcConstSettings::loopFilterLevelTabLuma[256] = {
147      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
148      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
149      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
150      0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  2,
151      2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,
152      4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,
153      6,  7,  7,  7,  8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10,
154     11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15,
155     15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19, 19, 20, 20, 20,
156     21, 21, 21, 22, 22, 22, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26,
157     27, 27, 27, 28, 28, 29, 29, 29, 30, 30, 31, 31, 31, 32, 32, 33,
158     33, 34, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 41,
159     41, 42, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55,
160     56, 58, 59, 61, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
161     63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
162     63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63
163 };
164 
165 constexpr uint8_t Av1VdencBrcConstSettings::loopFilterLevelTabChroma[256] = {
166      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
167      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
168      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
169      0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  2,
170      2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,
171      3,  3,  3,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,
172      5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,
173      6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,
174      8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10,
175     10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15,
176     16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 28, 30, 31, 31, 31, 31,
177     31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
178     31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
179     31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
180     31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
181     31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31
182 };
183 
184 const uint32_t Av1VdencBrcConstSettings::hucModeCostsIFrame[52 * 6] =
185 {
186     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
187     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
188     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
189     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
190     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
191     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
192     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
193     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
194     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
195     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
196     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
197     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
198     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
199     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
200     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
201     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
202     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
203     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
204     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
205     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
206     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
207     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
208     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
209     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
210     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
211     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
212     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
213     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
214     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
215     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
216     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
217     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
218     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
219     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
220     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
221     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
222     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
223     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
224     0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
225 };
226 
227 const uint32_t Av1VdencBrcConstSettings::hucModeCostsPFrame[52 * 6] =
228 {
229         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
230         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
231         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
232         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
233         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
234         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
235         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
236         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
237         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
238         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
239         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
240         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
241         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
242         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
243         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
244         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
245         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
246         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
247         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
248         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
249         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
250         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
251         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
252         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
253         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
254         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
255         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
256         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
257         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
258         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
259         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
260         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
261         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
262         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
263         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
264         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
265         0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515,
266         0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000,
267         0x00000000, 0x00000000, 0x10102f1e, 0x001e1515, 0x00000000, 0x00000000, 0x00000000, 0x00000000
268 };
269 
EncodeAv1VdencConstSettings(PMOS_INTERFACE osInterface)270 EncodeAv1VdencConstSettings::EncodeAv1VdencConstSettings(PMOS_INTERFACE osInterface) : VdencConstSettings(osInterface)
271 {
272     m_osInterface = osInterface;
273     ENCODE_CHK_NULL_NO_STATUS_RETURN(m_osInterface);
274     m_featureSetting = MOS_New(Av1VdencFeatureSettings);
275 }
276 
Update(void * params)277 MOS_STATUS EncodeAv1VdencConstSettings::Update(void *params)
278 {
279     ENCODE_FUNC_CALL();
280 
281     EncoderParams *encodeParams = (EncoderParams *)params;
282 
283     PCODEC_AV1_ENCODE_SEQUENCE_PARAMS av1SeqParams =
284         static_cast<PCODEC_AV1_ENCODE_SEQUENCE_PARAMS>(encodeParams->pSeqParams);
285     ENCODE_CHK_NULL_RETURN(av1SeqParams);
286     m_av1SeqParams = av1SeqParams;
287 
288     PCODEC_AV1_ENCODE_PICTURE_PARAMS av1PicParams =
289         static_cast<PCODEC_AV1_ENCODE_PICTURE_PARAMS>(encodeParams->pPicParams);
290     ENCODE_CHK_NULL_RETURN(av1PicParams);
291     m_av1PicParams = av1PicParams;
292 
293     return MOS_STATUS_SUCCESS;
294 }
295 
PrepareConstSettings()296 MOS_STATUS EncodeAv1VdencConstSettings::PrepareConstSettings()
297 {
298     ENCODE_FUNC_CALL();
299 
300     ENCODE_CHK_STATUS_RETURN(SetTUSettings());
301     ENCODE_CHK_STATUS_RETURN(SetTable());
302     ENCODE_CHK_STATUS_RETURN(SetVdencCmd1Settings());
303     ENCODE_CHK_STATUS_RETURN(SetVdencCmd2Settings());
304     ENCODE_CHK_STATUS_RETURN(SetBrcSettings());
305 
306     return MOS_STATUS_SUCCESS;
307 }
308 
SetCommonSettings()309 MOS_STATUS EncodeAv1VdencConstSettings::SetCommonSettings()
310 {
311     ENCODE_FUNC_CALL();
312 
313     //TBD
314 
315     return MOS_STATUS_SUCCESS;
316 }
317 
SetBrcSettings()318 MOS_STATUS EncodeAv1VdencConstSettings::SetBrcSettings()
319 {
320     ENCODE_FUNC_CALL();
321 
322     ENCODE_CHK_NULL_RETURN(m_featureSetting);
323 
324     auto setting = static_cast<Av1VdencFeatureSettings *>(m_featureSetting);
325     ENCODE_CHK_NULL_RETURN(setting);
326 
327 #define SET_TABLE(X) setting->brcSettings.X.data = (void *)Av1VdencBrcConstSettings::X;\
328                      setting->brcSettings.X.size = sizeof(Av1VdencBrcConstSettings::X);
329 
330         SET_TABLE(instRateThresholdP);
331         SET_TABLE(instRateThresholdI);
332         SET_TABLE(devThresholdFpNegI);
333         SET_TABLE(devThresholdFpPosI);
334         SET_TABLE(devThresholdFpNegPB);
335         SET_TABLE(devThresholdFpPosPB);
336         SET_TABLE(devThresholdVbrNeg);
337         SET_TABLE(devThresholdVbrPos);
338 
339         SET_TABLE(QPThresholds);
340         SET_TABLE(startGlobalAdjustFrame);
341         SET_TABLE(globalRateRatioThreshold);
342         SET_TABLE(globalRateRatioThresholdQP);
343         SET_TABLE(startGlobalAdjustMult);
344         SET_TABLE(startGlobalAdjustDiv);
345         SET_TABLE(distortionThresh);
346         SET_TABLE(distortionThreshB);
347         SET_TABLE(maxFrameMultI);
348         SET_TABLE(maxFrameMultP);
349         SET_TABLE(av1DeltaQpI);
350         SET_TABLE(av1DeltaQpP);
351         SET_TABLE(av1DistortionsDeltaQpI);
352         SET_TABLE(av1DistortionsDeltaQpP);
353         SET_TABLE(loopFilterLevelTabLuma);
354         SET_TABLE(loopFilterLevelTabChroma);
355         SET_TABLE(hucModeCostsIFrame);
356         SET_TABLE(hucModeCostsPFrame);
357 
358 #undef SET_TABLE
359 
360 #define SET_DATA(X) setting->brcSettings.X = Av1VdencBrcConstSettings::X;
361 
362         SET_DATA(numInstRateThresholds);
363         SET_DATA(devStdFPS);
364         SET_DATA(bpsRatioLow);
365         SET_DATA(bpsRatioHigh);
366         SET_DATA(postMultPB);
367         SET_DATA(negMultPB);
368         SET_DATA(posMultVBR);
369         SET_DATA(negMultVBR);
370         SET_DATA(numDevThreshlds);
371 
372         SET_DATA(numQpThresholds);
373         SET_DATA(numGlobalRateRatioThreshlds);
374         SET_DATA(numStartGlobalAdjusts);
375         SET_DATA(numDistortionThresholds);
376 
377 #undef SET_DATA
378 
379     return MOS_STATUS_SUCCESS;
380 }
381 
SetVdencCmd1Settings()382 MOS_STATUS EncodeAv1VdencConstSettings::SetVdencCmd1Settings()
383 {
384     ENCODE_FUNC_CALL();
385     ENCODE_CHK_NULL_RETURN(m_featureSetting);
386 
387     auto setting = static_cast<Av1VdencFeatureSettings*>(m_featureSetting);
388     ENCODE_CHK_NULL_RETURN(setting);
389 
390     setting->vdencCmd1Settings = {
391         VDENC_CMD1_LAMBDA()
392         {
393             auto qp = m_av1PicParams->base_qindex;
394             bool isIntra = AV1_KEY_OR_INRA_FRAME(m_av1PicParams->PicFlags.fields.frame_type);
395             static const std::array<
396                     std::array<
397                         uint16_t,
398                         256>,
399                     2>
400                 par1Array =
401                     {{
402                         {1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   4,   4,   4,
403                          4,   4,   4,   4,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   7,   7,   7,
404                          7,   7,   7,   7,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,  10,  10,
405                          10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  13,  13,
406                          13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  16,  16,
407                          16,  16,  16,  17,  17,  17,  18,  18,  18,  19,  19,  19,  20,  20,  20,  20,  21,  21,  21,
408                          22,  22,  22,  23,  23,  23,  24,  24,  24,  25,  25,  26,  26,  27,  27,  28,  28,  29,  29,
409                          30,  30,  31,  31,  31,  32,  33,  33,  34,  35,  35,  36,  36,  37,  38,  38,  39,  40,  40,
410                          41,  42,  43,  43,  44,  45,  46,  47,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,
411                          58,  59,  60,  61,  62,  63,  64,  66,  67,  68,  69,  71,  72,  73,  75,  76,  78,  79,  81,
412                          82,  84,  85,  87,  89,  90,  92,  94,  95,  97,  99, 101, 103, 105, 107, 109, 111, 113, 115,
413                          117, 120, 122, 124, 126, 129, 131, 134, 137, 139, 142, 145, 147, 150, 153, 156, 159, 162, 165,
414                          168, 172, 175, 178, 182, 185, 189, 193, 196, 200, 204, 208, 212, 216, 221, 225, 229, 234, 238,
415                          243, 248, 252, 257, 262, 267, 273, 278, 283},
416                         {1,   1,   1,   2,   2,   2,   2,   2,   2,   2,   3,   3,   3,   3,   3,   3,   3,   4,   4,
417                          4,   4,   4,   4,   5,   5,   5,   5,   5,   5,   5,   6,   6,   6,   6,   6,   6,   6,   7,
418                          7,   7,   7,   7,   7,   8,   8,   8,   8,   8,   8,   8,   9,   9,   9,   9,   9,   9,   9,
419                          10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,
420                          12,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,
421                          15,  16,  16,  16,  17,  17,  17,  17,  18,  18,  18,  19,  19,  19,  20,  20,  20,  20,  21,
422                          21,  21,  22,  22,  22,  23,  23,  23,  24,  24,  25,  25,  26,  26,  26,  27,  27,  28,  28,
423                          29,  29,  30,  30,  30,  31,  32,  32,  33,  33,  34,  35,  35,  36,  36,  37,  38,  38,  39,
424                          40,  41,  41,  42,  43,  44,  44,  45,  46,  47,  48,  48,  49,  50,  51,  52,  53,  54,  55,
425                          56,  57,  58,  59,  60,  61,  62,  64,  65,  66,  67,  68,  70,  71,  72,  74,  75,  77,  78,
426                          80,  81,  83,  84,  86,  87,  89,  91,  92,  94,  96,  98,  99, 101, 103, 105, 107, 109, 111,
427                          114, 116, 118, 120, 122, 125, 127, 130, 132, 135, 137, 140, 143, 145, 148, 151, 154, 157, 160,
428                          163, 166, 169, 173, 176, 179, 183, 186, 190, 194, 198, 201, 205, 209, 213, 218, 222, 226, 231,
429                          235, 240, 244, 249, 254, 259, 264, 269, 274},
430                     }};
431             par.vdencCmd1Par1 = par1Array[isIntra ? 0 : 1][qp];
432 
433               static const std::array<
434                     std::array<
435                         uint16_t,
436                         256>,
437                     2>
438                 par0Array =
439                     {{
440                         {0,   0,   0,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   3,   3,   3,   3,   4,
441                          4,   4,   5,   5,   5,   6,   6,   7,   7,   7,   8,   8,   9,   9,  10,  10,  11,  11,  12,
442                          12,  13,  13,  14,  14,  15,  16,  16,  17,  18,  18,  19,  20,  20,  21,  22,  22,  23,  24,
443                          25,  25,  26,  27,  28,  29,  29,  30,  31,  32,  33,  34,  35,  36,  37,  37,  38,  39,  40,
444                          41,  42,  43,  44,  45,  47,  48,  49,  50,  51,  52,  53,  54,  55,  57,  58,  59,  60,  61,
445                          62,  65,  67,  70,  73,  75,  78,  81,  84,  86,  89,  92,  95,  98, 102, 105, 108, 111, 114,
446                          118, 121, 125, 128, 132, 135, 139, 144, 150, 156, 162, 168, 174, 180, 186, 192, 199, 206, 212,
447                          219, 226, 233, 240, 248, 257, 267, 278, 288, 299, 309, 320, 332, 343, 355, 366, 378, 391, 406,
448                          422, 438, 454, 471, 488, 505, 523, 541, 559, 581, 604, 627, 650, 674, 698, 723, 748, 774, 805,
449                          836, 867, 900, 932, 966, 1000, 1039, 1080, 1121, 1163, 1205, 1249, 1299, 1349, 1401, 1454, 1508,
450                          1562, 1624, 1687, 1751, 1817, 1884, 1958, 2034, 2112, 2191, 2272, 2361, 2452, 2545, 2640, 2745,
451                          2851, 2960, 3071, 3192, 3316, 3442, 3570, 3711, 3854, 3999, 4158, 4319, 4484, 4662, 4843, 5029,
452                          5228, 5432, 5640, 5863, 6091, 6323, 6572, 6825, 7097, 7374, 7656, 7957, 8264, 8591, 8925, 9280,
453                          9642, 10026, 10418, 10833, 11257, 11705, 12162, 12646, 13138, 13659, 14189, 14748, 15318, 15919,
454                          16551, 17195, 17872, 18584, 19309, 20070},
455                         {0,   0,   0,   1,   1,   1,   1,   1,   1,   1,   2,   2,   2,   2,   2,   3,   3,   3,   4,   4,
456                          4,   4,   5,   5,   5,   6,   6,   7,   7,   7,   8,   8,   9,   9,   9,  10,  10,  11,  11,  12,
457                          12,  13,  14,  14,  15,  15,  16,  16,  17,  18,  18,  19,  20,  20,  21,  22,  22,  23,  24,  25,
458                          25,  26,  27,  28,  28,  29,  30,  31,  32,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
459                          43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  59,  61,  63,  66,  68,
460                          71,  73,  76,  78,  81,  84,  86,  89,  92,  95,  98, 101, 104, 107, 110, 113, 117, 120, 123, 127,
461                          130, 135, 140, 146, 151, 157, 163, 168, 174, 180, 186, 193, 199, 205, 212, 218, 225, 232, 241, 250,
462                          260, 270, 280, 290, 300, 311, 321, 332, 343, 354, 366, 380, 395, 410, 425, 441, 457, 473, 490, 506,
463                          523, 544, 565, 587, 609, 631, 654, 677, 701, 725, 754, 783, 812, 842, 873, 905, 936, 973, 1011, 1050,
464                          1089, 1129, 1170, 1216, 1264, 1312, 1362, 1412, 1463, 1521, 1580, 1640, 1702, 1764, 1834, 1905, 1978,
465                          2052, 2128, 2211, 2297, 2384, 2473, 2570, 2670, 2772, 2876, 2989, 3105, 3223, 3344, 3475, 3609, 3745,
466                          3894, 4045, 4199, 4366, 4536, 4709, 4897, 5087, 5282, 5491, 5704, 5921, 6154, 6392, 6646, 6906, 7170,
467                          7452, 7740, 8046, 8359, 8691, 9030, 9390, 9757, 10146, 10542, 10962, 11390, 11843, 12304, 12792, 13288,
468                          13812, 14346, 14908, 15500, 16104, 16738, 17404, 18084, 18796},
469                     }};
470             par.vdencCmd1Par0 = par0Array[isIntra ? 0 : 1][qp];
471 
472             static const std::array<
473                     std::array<
474                         uint8_t,
475                         8>,
476                     2>
477                 par2Array =
478                     {{
479                         {0, 2, 3, 5, 6, 8, 9, 11},
480                         {0, 2, 3, 5, 6, 8, 9, 11},
481                     }};
482             static const std::array< uint8_t, 12> par3Array = {4, 14, 24, 34, 44, 54, 64, 74, 84, 94, 104, 114};
483             static const std::array< uint8_t, 12> par4Array = { 3, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 60};
484             for (auto i = 0; i < 8; i++)
485             {
486                 par.vdencCmd1Par2[i] = par2Array[isIntra? 0 : 1][i];
487                 par.vdencCmd1Par3[i] = par3Array[i];
488                 par.vdencCmd1Par4[i] = par4Array[i];
489             }
490             for (auto i = 8; i < 12; i++)
491             {
492                 par.vdencCmd1Par3[i] = par3Array[i];
493                 par.vdencCmd1Par4[i] = par4Array[i];
494             }
495 
496             return MOS_STATUS_SUCCESS;
497         },
498 
499         VDENC_CMD1_LAMBDA()
500         {
501 
502             par.vdencCmd1Par50 = 5;
503             par.vdencCmd1Par49 = 5;
504             par.vdencCmd1Par48 = 5;
505             par.vdencCmd1Par47 = 5;
506             par.vdencCmd1Par54 = 12;
507             par.vdencCmd1Par53 = 12;
508             par.vdencCmd1Par52 = 12;
509             par.vdencCmd1Par51 = 12;
510 
511             par.vdencCmd1Par58 = 18;
512             par.vdencCmd1Par57 = 18;
513             par.vdencCmd1Par56 = 18;
514             par.vdencCmd1Par55 = 18;
515             par.vdencCmd1Par74 = 16;
516             par.vdencCmd1Par73 = 16;
517             par.vdencCmd1Par72 = 16;
518             par.vdencCmd1Par71 = 16;
519 
520             par.vdencCmd1Par62 = 16;
521             par.vdencCmd1Par61 = 16;
522             par.vdencCmd1Par60 = 16;
523             par.vdencCmd1Par59 = 16;
524             par.vdencCmd1Par78 = 16;
525             par.vdencCmd1Par77 = 16;
526             par.vdencCmd1Par76 = 16;
527             par.vdencCmd1Par75 = 16;
528 
529            par.vdencCmd1Par66 = 16;
530            par.vdencCmd1Par65 = 16;
531            par.vdencCmd1Par64 = 16;
532            par.vdencCmd1Par63 = 16;
533            par.vdencCmd1Par82 = 16;
534            par.vdencCmd1Par81 = 16;
535            par.vdencCmd1Par80 = 16;
536            par.vdencCmd1Par79 = 16;
537 
538            par.vdencCmd1Par70 = 22;
539            par.vdencCmd1Par69 = 22;
540            par.vdencCmd1Par68 = 22;
541            par.vdencCmd1Par67 = 22;
542            par.vdencCmd1Par86 = 26;
543            par.vdencCmd1Par85 = 26;
544            par.vdencCmd1Par84 = 26;
545            par.vdencCmd1Par83 = 26;
546 
547            return MOS_STATUS_SUCCESS;
548        },
549 
550        VDENC_CMD1_LAMBDA()
551        {
552            bool     isIntra = AV1_KEY_OR_INRA_FRAME(m_av1PicParams->PicFlags.fields.frame_type);
553            if (isIntra)
554            {
555                par.vdencCmd1Par23 = 42;
556                par.vdencCmd1Par24 = 0;
557                par.vdencCmd1Par25 = 0;
558                par.vdencCmd1Par26 = 0;
559                par.vdencCmd1Par27 = 0;
560                par.vdencCmd1Par28 = 0;
561                par.vdencCmd1Par29 = 0;
562                par.vdencCmd1Par30 = 0;
563                par.vdencCmd1Par31 = 0;
564                par.vdencCmd1Par32 = 0;
565                par.vdencCmd1Par33 = 0;
566                par.vdencCmd1Par34 = 21;
567                par.vdencCmd1Par36 = 21;
568                par.vdencCmd1Par37 = 47;
569                par.vdencCmd1Par38 = 16;
570                par.vdencCmd1Par39 = 16;
571                par.vdencCmd1Par42 = 58;
572                par.vdencCmd1Par43 = 20;
573                par.vdencCmd1Par40 = 30;
574                par.vdencCmd1Par41 = 30;
575                par.vdencCmd1Par44 = 0;
576                par.vdencCmd1Par45 = 20;
577                par.vdencCmd1Par46 = 0;
578            }
579            else if (isLowDelay)
580            {
581                par.vdencCmd1Par6 = 3;
582                par.vdencCmd1Par5 = 6;
583                par.vdencCmd1Par7 = 10;
584                par.vdencCmd1Par8[0] = 5;
585                par.vdencCmd1Par9[0] = 6;
586                par.vdencCmd1Par12[0] = 23;
587                par.vdencCmd1Par13[0] = 26;
588                par.vdencCmd1Par10[0] = 5;
589                par.vdencCmd1Par11[0] = 0;
590                par.vdencCmd1Par14[0] = 21;
591                par.vdencCmd1Par15[0] = 0;
592                par.vdencCmd1Par16 = 92;
593                par.vdencCmd1Par17 = 19;
594                par.vdencCmd1Par18 = 92;
595                par.vdencCmd1Par19 = 18;
596                par.vdencCmd1Par23 = 54;
597                par.vdencCmd1Par20 = 15;
598                par.vdencCmd1Par21 = 4;
599                par.vdencCmd1Par22 = 4;
600                par.vdencCmd1Par24 = 0;
601                par.vdencCmd1Par25 = 0;
602                par.vdencCmd1Par26 = 0;
603                par.vdencCmd1Par27 = 0;
604                par.vdencCmd1Par28 = 0;
605                par.vdencCmd1Par29 = 0;
606                par.vdencCmd1Par30 = 0;
607                par.vdencCmd1Par31 = 0;
608                par.vdencCmd1Par32 = 0;
609                par.vdencCmd1Par33 = 0;
610                par.vdencCmd1Par34 = 21;
611                par.vdencCmd1Par36 = 21;
612                par.vdencCmd1Par37 = 23;
613                par.vdencCmd1Par38 = 24;
614                par.vdencCmd1Par39 = 27;
615                par.vdencCmd1Par40 = 41;
616                par.vdencCmd1Par41 = 68;
617                par.vdencCmd1Par42 = 37;
618                par.vdencCmd1Par43 = 37;
619                par.vdencCmd1Par44 = 0;
620                par.vdencCmd1Par45 = 12;
621                par.vdencCmd1Par46 = 0;
622                par.vdencCmd1Par87 = 20;
623                par.vdencCmd1Par88 = 20;
624                par.vdencCmd1Par89 = 20;
625            }
626            else
627            {
628                par.vdencCmd1Par6 = 3;
629                par.vdencCmd1Par5 = 6;
630                par.vdencCmd1Par7 = 10;
631                par.vdencCmd1Par8[0] = 5;
632                par.vdencCmd1Par9[0] = 6;
633                par.vdencCmd1Par12[0] = 23;
634                par.vdencCmd1Par13[0] = 26;
635                par.vdencCmd1Par10[0] = 5;
636                par.vdencCmd1Par11[0] = 0;
637                par.vdencCmd1Par14[0] = 21;
638                par.vdencCmd1Par15[0] = 0;
639                par.vdencCmd1Par16 = 92;
640                par.vdencCmd1Par17 = 19;
641                par.vdencCmd1Par18 = 92;
642                par.vdencCmd1Par19 = 18;
643                par.vdencCmd1Par21 = 4;
644                par.vdencCmd1Par22 = 4;
645                par.vdencCmd1Par23 = 54;
646                par.vdencCmd1Par20 = 15;
647                par.vdencCmd1Par24 = 0;
648                par.vdencCmd1Par25 = 0;
649                par.vdencCmd1Par26 = 0;
650                par.vdencCmd1Par27 = 0;
651                par.vdencCmd1Par28 = 0;
652                par.vdencCmd1Par29 = 0;
653                par.vdencCmd1Par30 = 0;
654                par.vdencCmd1Par31 = 0;
655                par.vdencCmd1Par32 = 0;
656                par.vdencCmd1Par33 = 0;
657                par.vdencCmd1Par34 = 21;
658                par.vdencCmd1Par36 = 21;
659                par.vdencCmd1Par37 = 23;
660                par.vdencCmd1Par38 = 24;
661                par.vdencCmd1Par39 = 27;
662                par.vdencCmd1Par40 = 41;
663                par.vdencCmd1Par41 = 68;
664                par.vdencCmd1Par42 = 37;
665                par.vdencCmd1Par43 = 37;
666                par.vdencCmd1Par44 = 3;
667                par.vdencCmd1Par45 = 12;
668                par.vdencCmd1Par46 = 12;
669                par.vdencCmd1Par87 = 20;
670                par.vdencCmd1Par88 = 20;
671                par.vdencCmd1Par89 = 20;
672            }
673 
674            return MOS_STATUS_SUCCESS;
675         }
676     };
677 
678     return MOS_STATUS_SUCCESS;
679 }
680 
681 }  // namespace encode
682