1 /*
2  * Copyright ©  2014 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
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  * Authors:
25  *     Midhunchandra Kodiyath <midhunchandra.kodiyath@intel.com>
26  *
27  */
28 
29 #include "media_drv_encoder.h"
30 #include "media_drv_encoder_vp8.h"
31 #include "media_drv_encoder_vp8_g7.h"
32 #include "media_drv_driver.h"
33 #include "media_drv_hw_g8.h"
34 #include "media_drv_hw_g75.h"
35 #include "media_drv_hw_g7.h"
36 #include "media_drv_hwcmds.h"
37 #include "media_drv_hwcmds_g8.h"
38 static UINT16 pak_qp_input_table[160 * 18] = {
39   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
40     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
41   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
42     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
43   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
44     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
45   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
46     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
47   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
48     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
49   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
50     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
51   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
52     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
53   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
54     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
55   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
56     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
57   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
58     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
59   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
60     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
61   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
62     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
63   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
64     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
65   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
66     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
67   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
68     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
69   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
70     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
71   0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010, 0x2000, 0x0008, 0x0010,
72     0x2000, 0x0008, 0x0010, 0x4000, 0x0004, 0x0010, 0x4000, 0x0004, 0x0010,
73   0x3333, 0x0005, 0x0010, 0x3333, 0x0005, 0x0010, 0x2000, 0x0008, 0x0010,
74     0x1999, 0x000a, 0x0010, 0x3333, 0x0005, 0x0010, 0x3333, 0x0005, 0x0010,
75   0x2aaa, 0x0006, 0x0010, 0x2aaa, 0x0006, 0x0010, 0x1c71, 0x0009, 0x0010,
76     0x1555, 0x000c, 0x0010, 0x2aaa, 0x0006, 0x0010, 0x2aaa, 0x0006, 0x0010,
77   0x2492, 0x0007, 0x0010, 0x2492, 0x0007, 0x0010, 0x1999, 0x000a, 0x0010,
78     0x1249, 0x000e, 0x0010, 0x2492, 0x0007, 0x0010, 0x2492, 0x0007, 0x0010,
79   0x2000, 0x0008, 0x0010, 0x2000, 0x0008, 0x0010, 0x1555, 0x000c, 0x0010,
80     0x1000, 0x0010, 0x0010, 0x2000, 0x0008, 0x0010, 0x2000, 0x0008, 0x0010,
81   0x1c71, 0x0009, 0x0010, 0x1c71, 0x0009, 0x0010, 0x13b1, 0x000d, 0x0010,
82     0x0e38, 0x0012, 0x0010, 0x1c71, 0x0009, 0x0010, 0x1c71, 0x0009, 0x0010,
83   0x1999, 0x000a, 0x0010, 0x1999, 0x000a, 0x0010, 0x1111, 0x000f, 0x0010,
84     0x0ccc, 0x0014, 0x0010, 0x1999, 0x000a, 0x0010, 0x1999, 0x000a, 0x0010,
85   0x1745, 0x000b, 0x0010, 0x1999, 0x000a, 0x0010, 0x0f0f, 0x0011, 0x0010,
86     0x0ccc, 0x0014, 0x0010, 0x1745, 0x000b, 0x0010, 0x1999, 0x000a, 0x0010,
87   0x1555, 0x000c, 0x0010, 0x1745, 0x000b, 0x0010, 0x0e38, 0x0012, 0x0010,
88     0x0ba2, 0x0016, 0x0010, 0x1555, 0x000c, 0x0010, 0x1745, 0x000b, 0x0010,
89   0x13b1, 0x000d, 0x0010, 0x1555, 0x000c, 0x0010, 0x0ccc, 0x0014, 0x0010,
90     0x0aaa, 0x0018, 0x0010, 0x13b1, 0x000d, 0x0010, 0x1555, 0x000c, 0x0010,
91   0x1249, 0x000e, 0x0010, 0x13b1, 0x000d, 0x0010, 0x0c30, 0x0015, 0x0010,
92     0x09d8, 0x001a, 0x0010, 0x1249, 0x000e, 0x0010, 0x13b1, 0x000d, 0x0010,
93   0x1111, 0x000f, 0x0010, 0x1249, 0x000e, 0x0010, 0x0b21, 0x0017, 0x0010,
94     0x0924, 0x001c, 0x0010, 0x1111, 0x000f, 0x0010, 0x1249, 0x000e, 0x0010,
95   0x1000, 0x0010, 0x0010, 0x1111, 0x000f, 0x0010, 0x0aaa, 0x0018, 0x0010,
96     0x0888, 0x001e, 0x0010, 0x1000, 0x0010, 0x0010, 0x1111, 0x000f, 0x0010,
97   0x0f0f, 0x0011, 0x0010, 0x1000, 0x0010, 0x0010, 0x09d8, 0x001a, 0x0010,
98     0x0800, 0x0020, 0x0010, 0x0f0f, 0x0011, 0x0010, 0x1000, 0x0010, 0x0010,
99   0x0e38, 0x0012, 0x0010, 0x0f0f, 0x0011, 0x0010, 0x097b, 0x001b, 0x0010,
100     0x0787, 0x0022, 0x0010, 0x0e38, 0x0012, 0x0010, 0x0f0f, 0x0011, 0x0010,
101   0x0d79, 0x0013, 0x0010, 0x0f0f, 0x0011, 0x0010, 0x08d3, 0x001d, 0x0010,
102     0x0787, 0x0022, 0x0010, 0x0d79, 0x0013, 0x0010, 0x0f0f, 0x0011, 0x0010,
103   0x0ccc, 0x0014, 0x0010, 0x0e38, 0x0012, 0x0010, 0x0842, 0x001f, 0x0010,
104     0x071c, 0x0024, 0x0010, 0x0ccc, 0x0014, 0x0010, 0x0e38, 0x0012, 0x0010,
105   0x0c30, 0x0015, 0x0010, 0x0d79, 0x0013, 0x0010, 0x0800, 0x0020, 0x0010,
106     0x06bc, 0x0026, 0x0010, 0x0c30, 0x0015, 0x0010, 0x0d79, 0x0013, 0x0010,
107   0x0ba2, 0x0016, 0x0010, 0x0ccc, 0x0014, 0x0010, 0x0787, 0x0022, 0x0010,
108     0x0666, 0x0028, 0x0010, 0x0ba2, 0x0016, 0x0010, 0x0ccc, 0x0014, 0x0010,
109   0x0b21, 0x0017, 0x0010, 0x0ccc, 0x0014, 0x0010, 0x0750, 0x0023, 0x0010,
110     0x0666, 0x0028, 0x0010, 0x0b21, 0x0017, 0x0010, 0x0ccc, 0x0014, 0x0010,
111   0x0aaa, 0x0018, 0x0010, 0x0c30, 0x0015, 0x0010, 0x06eb, 0x0025, 0x0010,
112     0x0618, 0x002a, 0x0010, 0x0aaa, 0x0018, 0x0010, 0x0c30, 0x0015, 0x0010,
113   0x0a3d, 0x0019, 0x0010, 0x0c30, 0x0015, 0x0010, 0x06bc, 0x0026, 0x0010,
114     0x0618, 0x002a, 0x0010, 0x0a3d, 0x0019, 0x0010, 0x0c30, 0x0015, 0x0010,
115   0x09d8, 0x001a, 0x0010, 0x0ba2, 0x0016, 0x0010, 0x0666, 0x0028, 0x0010,
116     0x05d1, 0x002c, 0x0010, 0x09d8, 0x001a, 0x0010, 0x0ba2, 0x0016, 0x0010,
117   0x097b, 0x001b, 0x0010, 0x0ba2, 0x0016, 0x0010, 0x063e, 0x0029, 0x0010,
118     0x05d1, 0x002c, 0x0010, 0x097b, 0x001b, 0x0010, 0x0ba2, 0x0016, 0x0010,
119   0x0924, 0x001c, 0x0010, 0x0b21, 0x0017, 0x0010, 0x05f4, 0x002b, 0x0010,
120     0x0590, 0x002e, 0x0010, 0x0924, 0x001c, 0x0010, 0x0b21, 0x0017, 0x0010,
121   0x08d3, 0x001d, 0x0010, 0x0b21, 0x0017, 0x0010, 0x05d1, 0x002c, 0x0010,
122     0x0590, 0x002e, 0x0010, 0x08d3, 0x001d, 0x0010, 0x0b21, 0x0017, 0x0010,
123   0x0888, 0x001e, 0x0010, 0x0aaa, 0x0018, 0x0010, 0x0590, 0x002e, 0x0010,
124     0x0555, 0x0030, 0x0010, 0x0888, 0x001e, 0x0010, 0x0aaa, 0x0018, 0x0010,
125   0x0842, 0x001f, 0x0010, 0x0a3d, 0x0019, 0x0010, 0x0555, 0x0030, 0x0010,
126     0x051e, 0x0032, 0x0010, 0x0842, 0x001f, 0x0010, 0x0a3d, 0x0019, 0x0010,
127   0x0800, 0x0020, 0x0010, 0x0a3d, 0x0019, 0x0010, 0x0539, 0x0031, 0x0010,
128     0x051e, 0x0032, 0x0010, 0x0800, 0x0020, 0x0010, 0x0a3d, 0x0019, 0x0010,
129   0x07c1, 0x0021, 0x0010, 0x09d8, 0x001a, 0x0010, 0x0505, 0x0033, 0x0010,
130     0x04ec, 0x0034, 0x0010, 0x07c1, 0x0021, 0x0010, 0x09d8, 0x001a, 0x0010,
131   0x0787, 0x0022, 0x0010, 0x097b, 0x001b, 0x0010, 0x04ec, 0x0034, 0x0010,
132     0x04bd, 0x0036, 0x0010, 0x0787, 0x0022, 0x0010, 0x097b, 0x001b, 0x0010,
133   0x0750, 0x0023, 0x0010, 0x0924, 0x001c, 0x0010, 0x04bd, 0x0036, 0x0010,
134     0x0492, 0x0038, 0x0010, 0x0750, 0x0023, 0x0010, 0x0924, 0x001c, 0x0010,
135   0x071c, 0x0024, 0x0010, 0x08d3, 0x001d, 0x0010, 0x04a7, 0x0037, 0x0010,
136     0x0469, 0x003a, 0x0010, 0x071c, 0x0024, 0x0010, 0x08d3, 0x001d, 0x0010,
137   0x06eb, 0x0025, 0x0010, 0x0888, 0x001e, 0x0010, 0x047d, 0x0039, 0x0010,
138     0x0444, 0x003c, 0x0010, 0x06eb, 0x0025, 0x0010, 0x0888, 0x001e, 0x0010,
139   0x06bc, 0x0026, 0x0010, 0x0842, 0x001f, 0x0010, 0x0469, 0x003a, 0x0010,
140     0x0421, 0x003e, 0x0010, 0x06bc, 0x0026, 0x0010, 0x0842, 0x001f, 0x0010,
141   0x0690, 0x0027, 0x0010, 0x0800, 0x0020, 0x0010, 0x0444, 0x003c, 0x0010,
142     0x0400, 0x0040, 0x0010, 0x0690, 0x0027, 0x0010, 0x0800, 0x0020, 0x0010,
143   0x0666, 0x0028, 0x0010, 0x07c1, 0x0021, 0x0010, 0x0421, 0x003e, 0x0010,
144     0x03e0, 0x0042, 0x0010, 0x0666, 0x0028, 0x0010, 0x07c1, 0x0021, 0x0010,
145   0x063e, 0x0029, 0x0010, 0x0787, 0x0022, 0x0010, 0x0410, 0x003f, 0x0010,
146     0x03c3, 0x0044, 0x0010, 0x063e, 0x0029, 0x0010, 0x0787, 0x0022, 0x0010,
147   0x0618, 0x002a, 0x0010, 0x0750, 0x0023, 0x0010, 0x03f0, 0x0041, 0x0010,
148     0x03a8, 0x0046, 0x0010, 0x0618, 0x002a, 0x0010, 0x0750, 0x0023, 0x0010,
149   0x05f4, 0x002b, 0x0010, 0x071c, 0x0024, 0x0010, 0x03e0, 0x0042, 0x0010,
150     0x038e, 0x0048, 0x0010, 0x05f4, 0x002b, 0x0010, 0x071c, 0x0024, 0x0010,
151   0x05d1, 0x002c, 0x0010, 0x06eb, 0x0025, 0x0010, 0x03c3, 0x0044, 0x0010,
152     0x0375, 0x004a, 0x0010, 0x05d1, 0x002c, 0x0010, 0x06eb, 0x0025, 0x0010,
153   0x05b0, 0x002d, 0x0010, 0x06eb, 0x0025, 0x0010, 0x03b5, 0x0045, 0x0010,
154     0x0375, 0x004a, 0x0010, 0x05b0, 0x002d, 0x0010, 0x06eb, 0x0025, 0x0010,
155   0x0590, 0x002e, 0x0010, 0x06bc, 0x0026, 0x0010, 0x039b, 0x0047, 0x0010,
156     0x035e, 0x004c, 0x0010, 0x0590, 0x002e, 0x0010, 0x06bc, 0x0026, 0x0010,
157   0x0572, 0x002f, 0x0010, 0x0690, 0x0027, 0x0010, 0x038e, 0x0048, 0x0010,
158     0x0348, 0x004e, 0x0010, 0x0572, 0x002f, 0x0010, 0x0690, 0x0027, 0x0010,
159   0x0555, 0x0030, 0x0010, 0x0666, 0x0028, 0x0010, 0x0375, 0x004a, 0x0010,
160     0x0333, 0x0050, 0x0010, 0x0555, 0x0030, 0x0010, 0x0666, 0x0028, 0x0010,
161   0x0539, 0x0031, 0x0010, 0x063e, 0x0029, 0x0010, 0x0369, 0x004b, 0x0010,
162     0x031f, 0x0052, 0x0010, 0x0539, 0x0031, 0x0010, 0x063e, 0x0029, 0x0010,
163   0x051e, 0x0032, 0x0010, 0x0618, 0x002a, 0x0010, 0x0353, 0x004d, 0x0010,
164     0x030c, 0x0054, 0x0010, 0x051e, 0x0032, 0x0010, 0x0618, 0x002a, 0x0010,
165   0x0505, 0x0033, 0x0010, 0x05f4, 0x002b, 0x0010, 0x033d, 0x004f, 0x0010,
166     0x02fa, 0x0056, 0x0010, 0x0505, 0x0033, 0x0010, 0x05f4, 0x002b, 0x0010,
167   0x04ec, 0x0034, 0x0010, 0x05d1, 0x002c, 0x0010, 0x0333, 0x0050, 0x0010,
168     0x02e8, 0x0058, 0x0010, 0x04ec, 0x0034, 0x0010, 0x05d1, 0x002c, 0x0010,
169   0x04d4, 0x0035, 0x0010, 0x05b0, 0x002d, 0x0010, 0x031f, 0x0052, 0x0010,
170     0x02d8, 0x005a, 0x0010, 0x04d4, 0x0035, 0x0010, 0x05b0, 0x002d, 0x0010,
171   0x04bd, 0x0036, 0x0010, 0x0590, 0x002e, 0x0010, 0x0315, 0x0053, 0x0010,
172     0x02c8, 0x005c, 0x0010, 0x04bd, 0x0036, 0x0010, 0x0590, 0x002e, 0x0010,
173   0x04a7, 0x0037, 0x0010, 0x0590, 0x002e, 0x0010, 0x0303, 0x0055, 0x0010,
174     0x02c8, 0x005c, 0x0010, 0x04a7, 0x0037, 0x0010, 0x0590, 0x002e, 0x0010,
175   0x0492, 0x0038, 0x0010, 0x0572, 0x002f, 0x0010, 0x02fa, 0x0056, 0x0010,
176     0x02b9, 0x005e, 0x0010, 0x0492, 0x0038, 0x0010, 0x0572, 0x002f, 0x0010,
177   0x047d, 0x0039, 0x0010, 0x0555, 0x0030, 0x0010, 0x02e8, 0x0058, 0x0010,
178     0x02aa, 0x0060, 0x0010, 0x047d, 0x0039, 0x0010, 0x0555, 0x0030, 0x0010,
179   0x0469, 0x003a, 0x0010, 0x0539, 0x0031, 0x0010, 0x02e0, 0x0059, 0x0010,
180     0x029c, 0x0062, 0x0010, 0x0469, 0x003a, 0x0010, 0x0539, 0x0031, 0x0010,
181   0x0444, 0x003c, 0x0010, 0x051e, 0x0032, 0x0010, 0x02c0, 0x005d, 0x0010,
182     0x028f, 0x0064, 0x0010, 0x0444, 0x003c, 0x0010, 0x051e, 0x0032, 0x0010,
183   0x0421, 0x003e, 0x0010, 0x0505, 0x0033, 0x0010, 0x02aa, 0x0060, 0x0010,
184     0x0282, 0x0066, 0x0010, 0x0421, 0x003e, 0x0010, 0x0505, 0x0033, 0x0010,
185   0x0400, 0x0040, 0x0010, 0x04ec, 0x0034, 0x0010, 0x0295, 0x0063, 0x0010,
186     0x0276, 0x0068, 0x0010, 0x0400, 0x0040, 0x0010, 0x04ec, 0x0034, 0x0010,
187   0x03e0, 0x0042, 0x0010, 0x04d4, 0x0035, 0x0010, 0x0282, 0x0066, 0x0010,
188     0x026a, 0x006a, 0x0010, 0x03e0, 0x0042, 0x0010, 0x04d4, 0x0035, 0x0010,
189   0x03c3, 0x0044, 0x0010, 0x04bd, 0x0036, 0x0010, 0x0270, 0x0069, 0x0010,
190     0x025e, 0x006c, 0x0010, 0x03c3, 0x0044, 0x0010, 0x04bd, 0x0036, 0x0010,
191   0x03a8, 0x0046, 0x0010, 0x04a7, 0x0037, 0x0010, 0x025e, 0x006c, 0x0010,
192     0x0253, 0x006e, 0x0010, 0x03a8, 0x0046, 0x0010, 0x04a7, 0x0037, 0x0010,
193   0x038e, 0x0048, 0x0010, 0x0492, 0x0038, 0x0010, 0x024e, 0x006f, 0x0010,
194     0x0249, 0x0070, 0x0010, 0x038e, 0x0048, 0x0010, 0x0492, 0x0038, 0x0010,
195   0x0375, 0x004a, 0x0010, 0x047d, 0x0039, 0x0010, 0x023e, 0x0072, 0x0010,
196     0x023e, 0x0072, 0x0010, 0x0375, 0x004a, 0x0010, 0x047d, 0x0039, 0x0010,
197   0x035e, 0x004c, 0x0010, 0x0469, 0x003a, 0x0010, 0x0230, 0x0075, 0x0010,
198     0x0234, 0x0074, 0x0010, 0x035e, 0x004c, 0x0010, 0x0469, 0x003a, 0x0010,
199   0x0348, 0x004e, 0x0010, 0x0456, 0x003b, 0x0010, 0x0222, 0x0078, 0x0010,
200     0x022b, 0x0076, 0x0010, 0x0348, 0x004e, 0x0010, 0x0456, 0x003b, 0x0010,
201   0x0333, 0x0050, 0x0010, 0x0444, 0x003c, 0x0010, 0x0210, 0x007c, 0x0010,
202     0x0222, 0x0078, 0x0010, 0x0333, 0x0050, 0x0010, 0x0444, 0x003c, 0x0010,
203   0x031f, 0x0052, 0x0010, 0x0432, 0x003d, 0x0010, 0x0204, 0x007f, 0x0010,
204     0x0219, 0x007a, 0x0010, 0x031f, 0x0052, 0x0010, 0x0432, 0x003d, 0x0010,
205   0x030c, 0x0054, 0x0010, 0x0421, 0x003e, 0x0010, 0x01f8, 0x0082, 0x0010,
206     0x0210, 0x007c, 0x0010, 0x030c, 0x0054, 0x0010, 0x0421, 0x003e, 0x0010,
207   0x02fa, 0x0056, 0x0010, 0x0410, 0x003f, 0x0010, 0x01ec, 0x0085, 0x0010,
208     0x0208, 0x007e, 0x0010, 0x02fa, 0x0056, 0x0010, 0x0410, 0x003f, 0x0010,
209   0x02e8, 0x0058, 0x0010, 0x0400, 0x0040, 0x0010, 0x01e1, 0x0088, 0x0010,
210     0x0200, 0x0080, 0x0010, 0x02e8, 0x0058, 0x0010, 0x0400, 0x0040, 0x0010,
211   0x02d8, 0x005a, 0x0010, 0x03f0, 0x0041, 0x0010, 0x01d7, 0x008b, 0x0010,
212     0x01f8, 0x0082, 0x0010, 0x02d8, 0x005a, 0x0010, 0x03f0, 0x0041, 0x0010,
213   0x02c8, 0x005c, 0x0010, 0x03e0, 0x0042, 0x0010, 0x01cd, 0x008e, 0x0010,
214     0x01f0, 0x0084, 0x0010, 0x02c8, 0x005c, 0x0010, 0x03e0, 0x0042, 0x0010,
215   0x02b9, 0x005e, 0x0010, 0x03d2, 0x0043, 0x0010, 0x01c3, 0x0091, 0x0010,
216     0x01e9, 0x0086, 0x0010, 0x02b9, 0x005e, 0x0010, 0x03d2, 0x0043, 0x0010,
217   0x02aa, 0x0060, 0x0010, 0x03c3, 0x0044, 0x0010, 0x01ba, 0x0094, 0x0010,
218     0x01e1, 0x0088, 0x0010, 0x02aa, 0x0060, 0x0010, 0x03c3, 0x0044, 0x0010,
219   0x029c, 0x0062, 0x0010, 0x03b5, 0x0045, 0x0010, 0x01b2, 0x0097, 0x0010,
220     0x01da, 0x008a, 0x0010, 0x029c, 0x0062, 0x0010, 0x03b5, 0x0045, 0x0010,
221   0x028f, 0x0064, 0x0010, 0x03a8, 0x0046, 0x0010, 0x01a6, 0x009b, 0x0010,
222     0x01d4, 0x008c, 0x0010, 0x028f, 0x0064, 0x0010, 0x03a8, 0x0046, 0x0010,
223   0x0282, 0x0066, 0x0010, 0x039b, 0x0047, 0x0010, 0x019e, 0x009e, 0x0010,
224     0x01cd, 0x008e, 0x0010, 0x0282, 0x0066, 0x0010, 0x039b, 0x0047, 0x0010,
225   0x0276, 0x0068, 0x0010, 0x038e, 0x0048, 0x0010, 0x0197, 0x00a1, 0x0010,
226     0x01c7, 0x0090, 0x0010, 0x0276, 0x0068, 0x0010, 0x038e, 0x0048, 0x0010,
227   0x026a, 0x006a, 0x0010, 0x0381, 0x0049, 0x0010, 0x018f, 0x00a4, 0x0010,
228     0x01c0, 0x0092, 0x0010, 0x026a, 0x006a, 0x0010, 0x0381, 0x0049, 0x0010,
229   0x025e, 0x006c, 0x0010, 0x0375, 0x004a, 0x0010, 0x0188, 0x00a7, 0x0010,
230     0x01ba, 0x0094, 0x0010, 0x025e, 0x006c, 0x0010, 0x0375, 0x004a, 0x0010,
231   0x0253, 0x006e, 0x0010, 0x0369, 0x004b, 0x0010, 0x0181, 0x00aa, 0x0010,
232     0x01b4, 0x0096, 0x0010, 0x0253, 0x006e, 0x0010, 0x0369, 0x004b, 0x0010,
233   0x0249, 0x0070, 0x0010, 0x035e, 0x004c, 0x0010, 0x017a, 0x00ad, 0x0010,
234     0x01af, 0x0098, 0x0010, 0x0249, 0x0070, 0x0010, 0x035e, 0x004c, 0x0010,
235   0x023e, 0x0072, 0x0010, 0x035e, 0x004c, 0x0010, 0x0174, 0x00b0, 0x0010,
236     0x01af, 0x0098, 0x0010, 0x023e, 0x0072, 0x0010, 0x035e, 0x004c, 0x0010,
237   0x0234, 0x0074, 0x0010, 0x0353, 0x004d, 0x0010, 0x016e, 0x00b3, 0x0010,
238     0x01a9, 0x009a, 0x0010, 0x0234, 0x0074, 0x0010, 0x0353, 0x004d, 0x0010,
239   0x0226, 0x0077, 0x0010, 0x0348, 0x004e, 0x0010, 0x0164, 0x00b8, 0x0010,
240     0x01a4, 0x009c, 0x0010, 0x0226, 0x0077, 0x0010, 0x0348, 0x004e, 0x0010,
241   0x0219, 0x007a, 0x0010, 0x033d, 0x004f, 0x0010, 0x015a, 0x00bd, 0x0010,
242     0x019e, 0x009e, 0x0010, 0x0219, 0x007a, 0x0010, 0x033d, 0x004f, 0x0010,
243   0x020c, 0x007d, 0x0010, 0x0333, 0x0050, 0x0010, 0x0153, 0x00c1, 0x0010,
244     0x0199, 0x00a0, 0x0010, 0x020c, 0x007d, 0x0010, 0x0333, 0x0050, 0x0010,
245   0x0200, 0x0080, 0x0010, 0x0329, 0x0051, 0x0010, 0x014a, 0x00c6, 0x0010,
246     0x0194, 0x00a2, 0x0010, 0x0200, 0x0080, 0x0010, 0x0329, 0x0051, 0x0010,
247   0x01f4, 0x0083, 0x0010, 0x031f, 0x0052, 0x0010, 0x0142, 0x00cb, 0x0010,
248     0x018f, 0x00a4, 0x0010, 0x01f4, 0x0083, 0x0010, 0x031f, 0x0052, 0x0010,
249   0x01e9, 0x0086, 0x0010, 0x0315, 0x0053, 0x0010, 0x013c, 0x00cf, 0x0010,
250     0x018a, 0x00a6, 0x0010, 0x01e9, 0x0086, 0x0010, 0x0315, 0x0053, 0x0010,
251   0x01de, 0x0089, 0x0010, 0x030c, 0x0054, 0x0010, 0x0135, 0x00d4, 0x0010,
252     0x0186, 0x00a8, 0x0010, 0x01de, 0x0089, 0x0010, 0x030c, 0x0054, 0x0010,
253   0x01d4, 0x008c, 0x0010, 0x0303, 0x0055, 0x0010, 0x012e, 0x00d9, 0x0010,
254     0x0181, 0x00aa, 0x0010, 0x01d4, 0x008c, 0x0010, 0x0303, 0x0055, 0x0010,
255   0x01ca, 0x008f, 0x0010, 0x02fa, 0x0056, 0x0010, 0x0128, 0x00dd, 0x0010,
256     0x017d, 0x00ac, 0x0010, 0x01ca, 0x008f, 0x0010, 0x02fa, 0x0056, 0x0010,
257   0x01c0, 0x0092, 0x0010, 0x02f1, 0x0057, 0x0010, 0x0121, 0x00e2, 0x0010,
258     0x0178, 0x00ae, 0x0010, 0x01c0, 0x0092, 0x0010, 0x02f1, 0x0057, 0x0010,
259   0x01b7, 0x0095, 0x0010, 0x02e8, 0x0058, 0x0010, 0x011c, 0x00e6, 0x0010,
260     0x0174, 0x00b0, 0x0010, 0x01b7, 0x0095, 0x0010, 0x02e8, 0x0058, 0x0010,
261   0x01af, 0x0098, 0x0010, 0x02e0, 0x0059, 0x0010, 0x0116, 0x00eb, 0x0010,
262     0x0170, 0x00b2, 0x0010, 0x01af, 0x0098, 0x0010, 0x02e0, 0x0059, 0x0010,
263   0x01a6, 0x009b, 0x0010, 0x02d0, 0x005b, 0x0010, 0x0111, 0x00f0, 0x0010,
264     0x0168, 0x00b6, 0x0010, 0x01a6, 0x009b, 0x0010, 0x02d0, 0x005b, 0x0010,
265   0x019e, 0x009e, 0x0010, 0x02c0, 0x005d, 0x0010, 0x010c, 0x00f4, 0x0010,
266     0x0160, 0x00ba, 0x0010, 0x019e, 0x009e, 0x0010, 0x02c0, 0x005d, 0x0010,
267   0x0197, 0x00a1, 0x0010, 0x02b1, 0x005f, 0x0010, 0x0107, 0x00f9, 0x0010,
268     0x0158, 0x00be, 0x0010, 0x0197, 0x00a1, 0x0010, 0x02b1, 0x005f, 0x0010,
269   0x018f, 0x00a4, 0x0010, 0x02aa, 0x0060, 0x0010, 0x0102, 0x00fe, 0x0010,
270     0x0155, 0x00c0, 0x0010, 0x018f, 0x00a4, 0x0010, 0x02aa, 0x0060, 0x0010,
271   0x0188, 0x00a7, 0x0010, 0x029c, 0x0062, 0x0010, 0x00fe, 0x0102, 0x0010,
272     0x014e, 0x00c4, 0x0010, 0x0188, 0x00a7, 0x0010, 0x029c, 0x0062, 0x0010,
273   0x0181, 0x00aa, 0x0010, 0x028f, 0x0064, 0x0010, 0x00f9, 0x0107, 0x0010,
274     0x0147, 0x00c8, 0x0010, 0x0181, 0x00aa, 0x0010, 0x028f, 0x0064, 0x0010,
275   0x017a, 0x00ad, 0x0010, 0x0288, 0x0065, 0x0010, 0x00f4, 0x010c, 0x0010,
276     0x0144, 0x00ca, 0x0010, 0x017a, 0x00ad, 0x0010, 0x0288, 0x0065, 0x0010,
277   0x0172, 0x00b1, 0x0010, 0x0282, 0x0066, 0x0010, 0x00ef, 0x0112, 0x0010,
278     0x0141, 0x00cc, 0x0010, 0x0172, 0x00b1, 0x0010, 0x0282, 0x0066, 0x0010,
279   0x016a, 0x00b5, 0x0010, 0x0276, 0x0068, 0x0010, 0x00ea, 0x0118, 0x0010,
280     0x013b, 0x00d0, 0x0010, 0x016a, 0x00b5, 0x0010, 0x0276, 0x0068, 0x0010,
281   0x0162, 0x00b9, 0x0010, 0x026a, 0x006a, 0x0010, 0x00e5, 0x011e, 0x0010,
282     0x0135, 0x00d4, 0x0010, 0x0162, 0x00b9, 0x0010, 0x026a, 0x006a, 0x0010,
283   0x015a, 0x00bd, 0x0010, 0x025e, 0x006c, 0x0010, 0x00e0, 0x0124, 0x0010,
284     0x012f, 0x00d8, 0x0010, 0x015a, 0x00bd, 0x0010, 0x025e, 0x006c, 0x0010,
285   0x0153, 0x00c1, 0x0010, 0x0253, 0x006e, 0x0010, 0x00db, 0x012b, 0x0010,
286     0x0129, 0x00dc, 0x0010, 0x0153, 0x00c1, 0x0010, 0x0253, 0x006e, 0x0010,
287   0x014c, 0x00c5, 0x0010, 0x0249, 0x0070, 0x0010, 0x00d6, 0x0131, 0x0010,
288     0x0124, 0x00e0, 0x0010, 0x014c, 0x00c5, 0x0010, 0x0249, 0x0070, 0x0010,
289   0x0146, 0x00c9, 0x0010, 0x023e, 0x0072, 0x0010, 0x00d2, 0x0137, 0x0010,
290     0x011f, 0x00e4, 0x0010, 0x0146, 0x00c9, 0x0010, 0x023e, 0x0072, 0x0010,
291   0x013f, 0x00cd, 0x0010, 0x0234, 0x0074, 0x0010, 0x00ce, 0x013d, 0x0010,
292     0x011a, 0x00e8, 0x0010, 0x013f, 0x00cd, 0x0010, 0x0234, 0x0074, 0x0010,
293   0x0139, 0x00d1, 0x0010, 0x022b, 0x0076, 0x0010, 0x00ca, 0x0143, 0x0010,
294     0x0115, 0x00ec, 0x0010, 0x0139, 0x00d1, 0x0010, 0x022b, 0x0076, 0x0010,
295   0x0133, 0x00d5, 0x0010, 0x0219, 0x007a, 0x0010, 0x00c6, 0x014a, 0x0010,
296     0x010c, 0x00f4, 0x0010, 0x0133, 0x00d5, 0x0010, 0x0219, 0x007a, 0x0010,
297   0x012e, 0x00d9, 0x0010, 0x0210, 0x007c, 0x0010, 0x00c3, 0x0150, 0x0010,
298     0x0108, 0x00f8, 0x0010, 0x012e, 0x00d9, 0x0010, 0x0210, 0x007c, 0x0010,
299   0x0128, 0x00dd, 0x0010, 0x0208, 0x007e, 0x0010, 0x00bf, 0x0156, 0x0010,
300     0x0104, 0x00fc, 0x0010, 0x0128, 0x00dd, 0x0010, 0x0208, 0x007e, 0x0010,
301   0x0123, 0x00e1, 0x0010, 0x0200, 0x0080, 0x0010, 0x00bc, 0x015c, 0x0010,
302     0x0100, 0x0100, 0x0010, 0x0123, 0x00e1, 0x0010, 0x0200, 0x0080, 0x0010,
303   0x011e, 0x00e5, 0x0010, 0x01f8, 0x0082, 0x0010, 0x00b9, 0x0162, 0x0010,
304     0x00fc, 0x0104, 0x0010, 0x011e, 0x00e5, 0x0010, 0x01f8, 0x0082, 0x0010,
305   0x0118, 0x00ea, 0x0010, 0x01f0, 0x0084, 0x0010, 0x00b5, 0x016a, 0x0010,
306     0x00f8, 0x0108, 0x0010, 0x0118, 0x00ea, 0x0010, 0x01f0, 0x0084, 0x0010,
307   0x0112, 0x00ef, 0x0010, 0x01e9, 0x0086, 0x0010, 0x00b1, 0x0172, 0x0010,
308     0x00f4, 0x010c, 0x0010, 0x0112, 0x00ef, 0x0010, 0x01f0, 0x0084, 0x0010,
309   0x010b, 0x00f5, 0x0010, 0x01e1, 0x0088, 0x0010, 0x00ac, 0x017b, 0x0010,
310     0x00f0, 0x0110, 0x0010, 0x010b, 0x00f5, 0x0010, 0x01f0, 0x0084, 0x0010,
311   0x0107, 0x00f9, 0x0010, 0x01da, 0x008a, 0x0010, 0x00aa, 0x0181, 0x0010,
312     0x00ed, 0x0114, 0x0010, 0x0107, 0x00f9, 0x0010, 0x01f0, 0x0084, 0x0010,
313   0x0102, 0x00fe, 0x0010, 0x01d4, 0x008c, 0x0010, 0x00a6, 0x0189, 0x0010,
314     0x00ea, 0x0118, 0x0010, 0x0102, 0x00fe, 0x0010, 0x01f0, 0x0084, 0x0010,
315   0x00fd, 0x0103, 0x0010, 0x01ca, 0x008f, 0x0010, 0x00a3, 0x0191, 0x0010,
316     0x00e5, 0x011e, 0x0010, 0x00fd, 0x0103, 0x0010, 0x01f0, 0x0084, 0x0010,
317   0x00f8, 0x0108, 0x0010, 0x01c3, 0x0091, 0x0010, 0x00a0, 0x0199, 0x0010,
318     0x00e1, 0x0122, 0x0010, 0x00f8, 0x0108, 0x0010, 0x01f0, 0x0084, 0x0010,
319   0x00f3, 0x010d, 0x0010, 0x01ba, 0x0094, 0x0010, 0x009d, 0x01a0, 0x0010,
320     0x00dd, 0x0128, 0x0010, 0x00f3, 0x010d, 0x0010, 0x01f0, 0x0084, 0x0010,
321   0x00ef, 0x0112, 0x0010, 0x01b2, 0x0097, 0x0010, 0x009a, 0x01a8, 0x0010,
322     0x00d9, 0x012e, 0x0010, 0x00ef, 0x0112, 0x0010, 0x01f0, 0x0084, 0x0010,
323   0x00ea, 0x0117, 0x0010, 0x01a9, 0x009a, 0x0010, 0x0097, 0x01b0, 0x0010,
324     0x00d4, 0x0134, 0x0010, 0x00ea, 0x0117, 0x0010, 0x01f0, 0x0084, 0x0010,
325   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
326     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
327   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
328     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
329   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
330     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
331   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
332     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
333   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
334     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
335   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
336     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
337   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
338     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
339   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
340     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
341   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
342     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
343   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
344     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
345   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
346     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
347   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
348     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
349   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
350     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
351   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
352     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
353   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
354     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
355   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
356     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010,
357   0x00e6, 0x011c, 0x0010, 0x01a1, 0x009d, 0x0010, 0x0094, 0x01b8, 0x0010,
358     0x00d0, 0x013a, 0x0010, 0x00e6, 0x011c, 0x0010, 0x01f0, 0x0084, 0x0010
359 };
360 
media_object_walker_mbenc_init(BOOL mbenc_i_frame_dist_in_use,BOOL mbenc_phase_2,MEDIA_ENCODER_CTX * encoder_context,MEDIA_OBJ_WALKER_PARAMS * media_obj_walker_params)361 VOID media_object_walker_mbenc_init(BOOL mbenc_i_frame_dist_in_use,BOOL mbenc_phase_2,MEDIA_ENCODER_CTX * encoder_context,MEDIA_OBJ_WALKER_PARAMS *media_obj_walker_params)
362 {
363   media_drv_memset (media_obj_walker_params,
364 		    sizeof (MEDIA_OBJ_WALKER_PARAMS));
365   media_obj_walker_params->pic_coding_type = encoder_context->pic_coding_type;
366   if ((encoder_context->pic_coding_type == FRAME_TYPE_I)
367       && (mbenc_phase_2 == FALSE))
368     media_obj_walker_params->me_in_use = TRUE;
369   else
370     {
371       media_obj_walker_params->pic_coding_type = FRAME_TYPE_I;
372     }
373 
374   media_obj_walker_params->use_scoreboard = encoder_context->use_hw_scoreboard;
375   media_obj_walker_params->walker_mode = encoder_context->walker_mode;
376   //media_obj_walker_params->direct_spatial_mv_pred;
377   //media_obj_walker_params->me_in_use = TRUE;
378   media_obj_walker_params->mb_enc_iframe_dist_en = mbenc_i_frame_dist_in_use;
379   //media_obj_walker_params.force_26_degree;
380   media_obj_walker_params->frmfield_h_in_mb =
381     mbenc_i_frame_dist_in_use ?
382     encoder_context->down_scaled_frame_field_height_mb4x :
383     encoder_context->picture_height_in_mbs;
384   media_obj_walker_params->frm_w_in_mb =
385     mbenc_i_frame_dist_in_use ? encoder_context->down_scaled_width_mb4x
386     : (UINT) encoder_context->picture_width_in_mbs;
387 
388 }
media_object_walker_pak_init(UINT pak_phase_type,MEDIA_ENCODER_CTX * encoder_context,MEDIA_OBJ_WALKER_PARAMS * media_obj_walker_params)389 VOID media_object_walker_pak_init(UINT pak_phase_type,MEDIA_ENCODER_CTX * encoder_context,MEDIA_OBJ_WALKER_PARAMS *media_obj_walker_params)
390 {
391   media_drv_memset (media_obj_walker_params,
392                     sizeof (MEDIA_OBJ_WALKER_PARAMS));
393   media_obj_walker_params->use_scoreboard = encoder_context->use_hw_scoreboard;
394   media_obj_walker_params->walker_mode = encoder_context->walker_mode;
395   media_obj_walker_params->pic_coding_type = encoder_context->pic_coding_type;
396   //media_obj_walker_params->direct_spatial_mv_pred;
397   //media_obj_walker_params->me_in_use = TRUE;
398   //media_obj_walker_params->mb_enc_iframe_dist_en = mbenc_i_frame_dist_in_use;
399   //media_obj_walker_params->force_26_degree;
400   //media_obj_walker_params->frmfield_h_in_mb =encoder_context->picture_height_in_mbs;
401    media_obj_walker_params->frm_w_in_mb =
402    (UINT) encoder_context->picture_width_in_mbs;
403   if (pak_phase_type == MBPAK_HYBRID_STATE_P1)
404     {
405       media_obj_walker_params->me_in_use = TRUE;
406       media_obj_walker_params->frmfield_h_in_mb =
407 	encoder_context->picture_height_in_mbs;
408     }
409   else if (pak_phase_type == MBPAK_HYBRID_STATE_P2)
410     {
411       media_obj_walker_params->hybrid_pak2_pattern_enabled_45_deg = 1;
412       media_obj_walker_params->frmfield_h_in_mb =
413 	encoder_context->picture_height_in_mbs * 2;
414     }
415 }
416 
417 VOID
gpe_context_vfe_scoreboardinit_vp8(MEDIA_GPE_CTX * gpe_context)418 gpe_context_vfe_scoreboardinit_vp8 (MEDIA_GPE_CTX * gpe_context)
419 {
420   gpe_context->vfe_state.vfe_desc5.scoreboard0.mask = 0xFF;
421   gpe_context->vfe_state.vfe_desc5.scoreboard0.type = SCOREBOARD_NON_STALLING;
422   gpe_context->vfe_state.vfe_desc5.scoreboard0.enable = 1;
423 
424   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_x0 = 0xF;
425   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_y0 = 0;
426   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_x1 = 0;
427   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_y1 = 0xF;
428   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_x2 = 1;
429   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_y2 = 0xF;
430   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_x3 = 0xF;
431   gpe_context->vfe_state.vfe_desc6.scoreboard1.delta_y3 = 0xF;
432 
433   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_x4 = 0xF;
434   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_y4 = 1;
435   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_x5 = 0;
436   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_y5 = 0xE;
437   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_x6 = 1;
438   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_y6 = 0xE;
439   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_x7 = 0xF;
440   gpe_context->vfe_state.vfe_desc7.scoreboard2.delta_y7 = 0xE;
441 }
442 
443 VOID
media_alloc_resource_mbpak(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)444 media_alloc_resource_mbpak (VADriverContextP ctx,
445 			    MEDIA_ENCODER_CTX * encoder_context)
446 {
447   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
448   MBPAK_CONTEXT *mbpak_context = &encoder_context->mbpak_context;
449   /*UINT pic_w_h_in_mb =
450      (encoder_context->picture_width_in_mbs *
451      ((encoder_context->picture_height_in_mbs + 1) >> 1)) * 2; */
452   //row buffer y
453   mbpak_context->row_buffer_y.surface_array_spacing = 0x1;
454   mbpak_context->row_buffer_y.tiling = I915_TILING_NONE;
455   mbpak_context->row_buffer_y.bo_size =
456     encoder_context->picture_width_in_mbs * 16;
457   media_allocate_resource (&mbpak_context->row_buffer_y,
458 			   drv_ctx->drv_data.bufmgr,
459 			   (const BYTE *) "row_buffer y",
460 			   mbpak_context->row_buffer_y.bo_size, 4096);
461   MEDIA_DRV_ASSERT (mbpak_context->row_buffer_y.bo);
462 
463   //row buffer uv
464   mbpak_context->row_buffer_uv.surface_array_spacing = 0x1;
465   mbpak_context->row_buffer_uv.tiling = I915_TILING_NONE;
466   mbpak_context->row_buffer_uv.bo_size =
467     encoder_context->picture_width_in_mbs * 16;
468   media_allocate_resource (&mbpak_context->row_buffer_uv,
469 			   drv_ctx->drv_data.bufmgr,
470 			   (const BYTE *) "row_buffer uv",
471 			   mbpak_context->row_buffer_uv.bo_size, 4096);
472   MEDIA_DRV_ASSERT (mbpak_context->row_buffer_uv.bo);
473 
474   //column buffer y
475   mbpak_context->column_buffer_y.surface_array_spacing = 0x1;
476   mbpak_context->column_buffer_y.tiling = I915_TILING_NONE;
477   mbpak_context->column_buffer_y.bo_size =
478     encoder_context->picture_height_in_mbs * 16;
479   media_allocate_resource (&mbpak_context->column_buffer_y,
480 			   drv_ctx->drv_data.bufmgr,
481 			   (const BYTE *) "column buffer y",
482 			   mbpak_context->column_buffer_y.bo_size, 4096);
483   MEDIA_DRV_ASSERT (mbpak_context->column_buffer_y.bo);
484 
485   //column buffer uv
486   mbpak_context->column_buffer_uv.surface_array_spacing = 0x1;
487   mbpak_context->column_buffer_uv.tiling = I915_TILING_NONE;
488   mbpak_context->column_buffer_uv.bo_size =
489     encoder_context->picture_height_in_mbs * 16;
490   media_allocate_resource (&mbpak_context->column_buffer_uv,
491 			   drv_ctx->drv_data.bufmgr,
492 			   (const BYTE *) "column buffer uv",
493 			   mbpak_context->column_buffer_uv.bo_size, 4096);
494   MEDIA_DRV_ASSERT (mbpak_context->column_buffer_uv.bo);
495 
496   mbpak_context->kernel_dump_buffer.surface_array_spacing = 0x1;
497   mbpak_context->kernel_dump_buffer.tiling = I915_TILING_NONE;
498   mbpak_context->kernel_dump_buffer.bo_size = KERNEL_DUMP_SIZE_VP8;	//pic_w_h_in_mb;
499   media_allocate_resource (&mbpak_context->kernel_dump_buffer,
500 			   drv_ctx->drv_data.bufmgr,
501 			   (const BYTE *) "kernel dump buffer mbpak",
502 			   mbpak_context->kernel_dump_buffer.bo_size, 4096);
503   MEDIA_DRV_ASSERT (mbpak_context->kernel_dump_buffer.bo);
504 }
505 
506 VOID
media_alloc_resource_mbenc(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)507 media_alloc_resource_mbenc (VADriverContextP ctx,
508 			    MEDIA_ENCODER_CTX * encoder_context)
509 {
510   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
511   MBENC_CONTEXT *mbenc_context = &encoder_context->mbenc_context;
512   UINT sz = 0;
513   UINT pic_w_h_in_mb;
514   UINT num_of_mb_blocks =
515     encoder_context->picture_width_in_mbs *
516     encoder_context->picture_height_in_mbs;
517   pic_w_h_in_mb = num_of_mb_blocks;	/*(encoder_context->picture_width_in_mbs *
518 					   ((encoder_context->picture_height_in_mbs + 1) >> 1)) * 2; */
519   if (encoder_context->brc_enabled)
520     {
521       encoder_context->mb_data_offset =
522 	ALIGN ((MB_CODE_SIZE_VP8 * sizeof (UINT) + MB_MV_CODE_SIZE_VP8), 32);
523     }
524   else
525     {
526       encoder_context->mb_data_offset = 0;
527     }
528 
529   encoder_context->mb_data_in_bytes = pic_w_h_in_mb * ALIGN(MB_CODE_SIZE_VP8 * sizeof(UINT), 32);
530   encoder_context->mv_offset = encoder_context->mb_data_offset + encoder_context->mb_data_in_bytes;
531   encoder_context->mv_in_bytes = pic_w_h_in_mb * MB_MV_CODE_SIZE_VP8;
532 
533   mbenc_context->mb_mode_cost_luma_buffer.width =
534     ALIGN ((sizeof (UINT) * 10), 64);
535   mbenc_context->mb_mode_cost_luma_buffer.height = 1;
536   mbenc_context->mb_mode_cost_luma_buffer.surface_array_spacing = 0x1;
537   mbenc_context->mb_mode_cost_luma_buffer.tiling = I915_TILING_NONE;
538   mbenc_context->mb_mode_cost_luma_buffer.pitch =
539     mbenc_context->mb_mode_cost_luma_buffer.width;
540 
541   media_allocate_resource (&mbenc_context->mb_mode_cost_luma_buffer,
542 			   drv_ctx->drv_data.bufmgr,
543 			   (const BYTE *) "mb mode cost luma buffer", 0x1000,
544 			   4096);
545   MEDIA_DRV_ASSERT (mbenc_context->mb_mode_cost_luma_buffer.bo);
546 
547   mbenc_context->block_mode_cost_buffer.width =
548     ALIGN ((sizeof (UINT16)) * 10 * 10 * 10, 64);
549   mbenc_context->block_mode_cost_buffer.height = 1;
550   mbenc_context->block_mode_cost_buffer.surface_array_spacing = 0x1;
551   mbenc_context->block_mode_cost_buffer.tiling = I915_TILING_NONE;
552   mbenc_context->block_mode_cost_buffer.pitch =
553     mbenc_context->block_mode_cost_buffer.width;
554   media_allocate_resource (&mbenc_context->block_mode_cost_buffer,
555 			   drv_ctx->drv_data.bufmgr,
556 			   (const BYTE *) "block mode cost buffer", 0x1000,
557 			   4096);
558   MEDIA_DRV_ASSERT (mbenc_context->block_mode_cost_buffer.bo);
559 
560   mbenc_context->chroma_reconst_buffer.width = 64;
561   mbenc_context->chroma_reconst_buffer.height = num_of_mb_blocks;
562   mbenc_context->chroma_reconst_buffer.surface_array_spacing = 0x1;
563   mbenc_context->chroma_reconst_buffer.tiling = I915_TILING_NONE;
564   mbenc_context->chroma_reconst_buffer.pitch =
565     mbenc_context->chroma_reconst_buffer.width;
566   sz =
567     mbenc_context->chroma_reconst_buffer.width *
568     mbenc_context->chroma_reconst_buffer.height;
569   media_allocate_resource (&mbenc_context->chroma_reconst_buffer,
570 			   drv_ctx->drv_data.bufmgr,
571 			   (const BYTE *) "chrome reconst buffer", sz, 4096);
572   MEDIA_DRV_ASSERT (mbenc_context->chroma_reconst_buffer.bo);
573 
574 
575   mbenc_context->histogram_buffer.surface_array_spacing = 0x1;
576   mbenc_context->histogram_buffer.tiling = I915_TILING_NONE;
577   mbenc_context->histogram_buffer.bo_size = HISTOGRAM_SIZE;
578   media_allocate_resource (&mbenc_context->histogram_buffer,
579 			   drv_ctx->drv_data.bufmgr,
580 			   (const BYTE *) "histogram buffer", HISTOGRAM_SIZE,
581 			   4096);
582   MEDIA_DRV_ASSERT (mbenc_context->histogram_buffer.bo);
583 
584   mbenc_context->kernel_dump_buffer.surface_array_spacing = 0x1;
585   mbenc_context->kernel_dump_buffer.tiling = I915_TILING_NONE;
586   mbenc_context->kernel_dump_buffer.bo_size = KERNEL_DUMP_SIZE_VP8;	// pic_w_h_in_mb;
587   media_allocate_resource (&mbenc_context->kernel_dump_buffer,
588 			   drv_ctx->drv_data.bufmgr,
589 			   (const BYTE *) "kernel dump buffer",
590 			   mbenc_context->kernel_dump_buffer.bo_size, 4096);
591   MEDIA_DRV_ASSERT (mbenc_context->kernel_dump_buffer.bo);
592 
593   mbenc_context->ref_frm_count_surface.surface_array_spacing = 0x1;
594   mbenc_context->ref_frm_count_surface.tiling = I915_TILING_NONE;
595   mbenc_context->ref_frm_count_surface.bo_size = 32;
596   media_allocate_resource (&mbenc_context->ref_frm_count_surface,
597 			   drv_ctx->drv_data.bufmgr,
598 			   (const BYTE *) "reference frame mb count surface",
599 			   mbenc_context->ref_frm_count_surface.bo_size,
600 			   4096);
601   MEDIA_DRV_ASSERT (mbenc_context->ref_frm_count_surface.bo);
602 
603   mbenc_context->pred_mv_data_surface.surface_array_spacing = 0x1;
604   mbenc_context->pred_mv_data_surface.tiling = I915_TILING_NONE;
605   mbenc_context->pred_mv_data_surface.bo_size =
606     4 * encoder_context->picture_width_in_mbs *
607     encoder_context->picture_height_in_mbs * sizeof (UINT);
608   media_allocate_resource (&mbenc_context->pred_mv_data_surface,
609 			   drv_ctx->drv_data.bufmgr,
610 			   (const BYTE *) "pred mv data surface",
611 			   mbenc_context->pred_mv_data_surface.bo_size, 4096);
612   MEDIA_DRV_ASSERT (mbenc_context->pred_mv_data_surface.bo);
613 
614   mbenc_context->mode_cost_update_surface.surface_array_spacing = 0x1;
615   mbenc_context->mode_cost_update_surface.tiling = I915_TILING_NONE;
616   mbenc_context->mode_cost_update_surface.bo_size = 16 * sizeof (UINT);
617   media_allocate_resource (&mbenc_context->mode_cost_update_surface,
618 			   drv_ctx->drv_data.bufmgr,
619 			   (const BYTE *) "mode cost update surface",
620 			   mbenc_context->mode_cost_update_surface.bo_size,
621 			   4096);
622   MEDIA_DRV_ASSERT (mbenc_context->mode_cost_update_surface.bo);
623 
624   mbenc_context->pred_mb_quant_data_surface.surface_array_spacing = 0x1;
625   mbenc_context->pred_mb_quant_data_surface.tiling = I915_TILING_NONE;
626   mbenc_context->pred_mb_quant_data_surface.width =
627     ALIGN ((encoder_context->picture_width_in_mbs * 4), 64);
628   mbenc_context->pred_mb_quant_data_surface.height =
629     encoder_context->picture_height_in_mbs;
630   mbenc_context->pred_mb_quant_data_surface.pitch =
631     mbenc_context->pred_mb_quant_data_surface.width;
632   sz =
633     mbenc_context->pred_mb_quant_data_surface.width *
634     mbenc_context->pred_mb_quant_data_surface.height;
635   media_allocate_resource (&mbenc_context->pred_mb_quant_data_surface,
636 			   drv_ctx->drv_data.bufmgr,
637 			   (const BYTE *) "pred mb quant data surface", sz,
638 			   4096);
639   MEDIA_DRV_ASSERT (mbenc_context->pred_mb_quant_data_surface.bo);
640 }
641 
642 VOID
media_alloc_resource_me(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)643 media_alloc_resource_me (VADriverContextP ctx,
644 			 MEDIA_ENCODER_CTX * encoder_context)
645 {
646   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
647   MEDIA_HW_CONTEXT *hw_ctx = &drv_ctx->hw_context;
648   ME_CONTEXT *me_context = &encoder_context->me_context;
649 
650   me_context->mv_data_surface_4x_me.width =
651     ALIGN ((encoder_context->down_scaled_width_mb4x * 32), 64);
652   me_context->mv_data_surface_4x_me.height =
653     encoder_context->down_scaled_height_mb4x * 4 * hw_ctx->vp8_me_mv_data_size_multiplier;
654   me_context->mv_data_surface_4x_me.surface_array_spacing = 0x1;
655   me_context->mv_data_surface_4x_me.tiling = I915_TILING_NONE;
656   me_context->mv_data_surface_4x_me.pitch =
657     me_context->mv_data_surface_4x_me.width;
658   media_allocate_resource (&me_context->mv_data_surface_4x_me,
659 			   drv_ctx->drv_data.bufmgr,
660 			   (const BYTE *) "mv data surface 4x_me",
661 			   (me_context->mv_data_surface_4x_me.pitch *
662 			    me_context->mv_data_surface_4x_me.height), 4096);
663   MEDIA_DRV_ASSERT (me_context->mv_data_surface_4x_me.bo);
664 
665 
666   me_context->mv_distortion_surface_4x_me.width =
667     ALIGN ((encoder_context->down_scaled_width_mb4x * 8), 64);
668   me_context->mv_distortion_surface_4x_me.height =
669     ALIGN ((encoder_context->down_scaled_height_mb4x * 4), 8);  // TODO: check it when enable DS+HME for HSW
670   me_context->mv_distortion_surface_4x_me.surface_array_spacing = 0x1;
671   me_context->mv_distortion_surface_4x_me.tiling = I915_TILING_NONE;
672   me_context->mv_distortion_surface_4x_me.pitch =
673     ALIGN (me_context->mv_distortion_surface_4x_me.width, 64);
674   media_allocate_resource (&me_context->mv_distortion_surface_4x_me,
675 			   drv_ctx->drv_data.bufmgr,
676 			   (const BYTE *) "mv distortion surface 4x_me",
677 			   (me_context->mv_distortion_surface_4x_me.pitch *
678 			    me_context->mv_distortion_surface_4x_me.height), 4096);
679   MEDIA_DRV_ASSERT (me_context->mv_distortion_surface_4x_me.bo);
680 
681   me_context->mv_data_surface_16x_me.width =
682     ALIGN ((encoder_context->down_scaled_width_mb16x * 32), 64);
683   me_context->mv_data_surface_16x_me.height =
684     encoder_context->down_scaled_height_mb16x * 4 * hw_ctx->vp8_me_mv_data_size_multiplier;
685   me_context->mv_data_surface_16x_me.surface_array_spacing = 0x1;
686   me_context->mv_data_surface_16x_me.tiling = I915_TILING_NONE;
687   me_context->mv_data_surface_16x_me.pitch =
688     ALIGN (me_context->mv_data_surface_16x_me.width, 64);
689   media_allocate_resource (&me_context->mv_data_surface_16x_me,
690 			   drv_ctx->drv_data.bufmgr,
691 			   (const BYTE *) "mv data surface 16x_me",
692 			   (me_context->mv_data_surface_16x_me.pitch *
693 			    me_context->mv_data_surface_16x_me.height), 4096);
694   MEDIA_DRV_ASSERT (me_context->mv_data_surface_16x_me.bo);
695 
696 }
697 
698 static VOID
media_encoder_context_params_init(MEDIA_DRV_CONTEXT * drv_ctx,MEDIA_ENCODER_CTX * encoder_context)699 media_encoder_context_params_init (MEDIA_DRV_CONTEXT * drv_ctx,
700 				   MEDIA_ENCODER_CTX * encoder_context)
701 {
702   if (IS_HSW_GT1 (drv_ctx->drv_data.device_id)
703       || (IS_IVB_GT1 (drv_ctx->drv_data.device_id))
704       || (IS_BAYTRAIL (drv_ctx->drv_data.device_id)))
705   {
706     encoder_context->walker_mode = SINGLE_MODE;
707   }
708   else if (IS_HSW_GT2 (drv_ctx->drv_data.device_id)
709       || (IS_IVB_GT2 (drv_ctx->drv_data.device_id)))
710   {
711     encoder_context->walker_mode = DUAL_MODE;
712   }
713   else if (IS_HSW_GT3 (drv_ctx->drv_data.device_id))
714   {
715     encoder_context->walker_mode = QUAD_MODE;
716   }
717 
718   encoder_context->kernel_mode = 0;
719   encoder_context->frame_num = 0;
720   encoder_context->use_hw_scoreboard = 1;
721   encoder_context->scaling_enabled = 0;
722   encoder_context->me_16x_supported = 0;
723   if (IS_GEN7 (drv_ctx->drv_data.device_id))
724     encoder_context->hme_supported = 1;
725   else
726     encoder_context->hme_supported = 0;
727   encoder_context->kernel_dump_enable = 0;
728   encoder_context->brc_enabled =
729     (encoder_context->internal_rate_mode == HB_BRC_CBR
730      || encoder_context->internal_rate_mode == HB_BRC_VBR);
731   encoder_context->brc_initted = 0;
732   encoder_context->frame_rate = 30; /* in case user doesn't set frame rate */
733 
734   if (encoder_context->hme_supported == 1)
735     {
736       encoder_context->scaling_enabled = 1;
737       // encoder_context->me_16x_supported = 1;
738     }
739   encoder_context->mbenc_chroma_kernel = TRUE;
740   encoder_context->mbenc_curbe_set_brc_update = FALSE;
741   encoder_context->mbpak_curbe_set_brc_update = FALSE;
742   encoder_context->frame_width = encoder_context->picture_width;
743   encoder_context->frame_height = encoder_context->picture_height;
744 
745   encoder_context->picture_width_in_mbs =
746     (UINT) WIDTH_IN_MACROBLOCKS (encoder_context->picture_width);
747   encoder_context->picture_height_in_mbs =
748     (UINT) HEIGHT_IN_MACROBLOCKS (encoder_context->picture_height);
749   encoder_context->down_scaled_width_mb4x =
750     WIDTH_IN_MACROBLOCKS (encoder_context->picture_width / SCALE_FACTOR_4x);
751   encoder_context->down_scaled_height_mb4x =
752     HEIGHT_IN_MACROBLOCKS (encoder_context->picture_height / SCALE_FACTOR_4x);
753   encoder_context->down_scaled_width_mb16x =
754     WIDTH_IN_MACROBLOCKS (encoder_context->picture_width / SCALE_FACTOR_16x);
755   encoder_context->down_scaled_height_mb16x =
756     HEIGHT_IN_MACROBLOCKS (encoder_context->picture_height /
757 			   SCALE_FACTOR_16x);
758   encoder_context->down_scaled_width_mb32x =
759     WIDTH_IN_MACROBLOCKS (encoder_context->picture_width / SCALE_FACTOR_32x);
760   encoder_context->down_scaled_height_mb32x =
761     HEIGHT_IN_MACROBLOCKS (encoder_context->picture_height /
762 			   SCALE_FACTOR_32x);
763 }
764 
765 VOID
media_mbpak_context_init_vp8(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)766 media_mbpak_context_init_vp8 (VADriverContextP ctx,
767 			      MEDIA_ENCODER_CTX * encoder_context)
768 {
769   MBPAK_CONTEXT *mbpak_context = &encoder_context->mbpak_context;
770   MEDIA_GPE_CTX *gpe_context = &mbpak_context->gpe_context;
771   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
772   gpe_context->curbe.length = /* 0xc0; */ CURBE_TOTAL_DATA_LENGTH;
773   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
774   gpe_context->vfe_state.num_urb_entries = 16;	//64;
775   gpe_context->vfe_state.gpgpu_mode = 0;
776   gpe_context->vfe_state.urb_entry_size = 120;	//16;
777   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
778   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
779   media_gpe_load_kernels (ctx, gpe_context, &media_hybrid_vp8_kernels[7], 2);
780 
781   gpe_context->idrt_size = sizeof (struct media_interface_descriptor_data);	// * MAX_INTERFACE_DESC_GEN6;
782   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;	//0xco
783   gpe_context->sampler_size = 0;
784   media_gpe_context_init (ctx, gpe_context);
785   media_interface_setup_mbpak (gpe_context);
786 
787   gpe_context = &mbpak_context->gpe_context2;
788   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
789   gpe_context->curbe.length = /* 0xc0; */ CURBE_TOTAL_DATA_LENGTH;
790   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
791   gpe_context->vfe_state.num_urb_entries = 16;	//64;
792   gpe_context->vfe_state.gpgpu_mode = 0;
793   gpe_context->vfe_state.urb_entry_size = 120;	//16;
794   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
795   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
796   media_gpe_load_kernels (ctx, gpe_context, &media_hybrid_vp8_kernels[7], 2);
797 
798   gpe_context->idrt_size = sizeof (struct media_interface_descriptor_data);	// * MAX_INTERFACE_DESC_GEN6;
799   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;	//0xco
800   gpe_context->sampler_size = 0;
801   media_gpe_context_init (ctx, gpe_context);
802   media_interface_setup_mbpak (gpe_context);
803 
804   media_alloc_resource_mbpak (ctx, encoder_context);
805   return;
806 }
807 
808 VOID
media_mbenc_context_init(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)809 media_mbenc_context_init (VADriverContextP ctx,
810 			  MEDIA_ENCODER_CTX * encoder_context)
811 {
812   MBENC_CONTEXT *mbenc_context = &encoder_context->mbenc_context;
813   MEDIA_GPE_CTX *gpe_context = &mbenc_context->gpe_context;
814   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
815   gpe_context->curbe.length = CURBE_TOTAL_DATA_LENGTH;
816   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
817   gpe_context->vfe_state.num_urb_entries = 16;	//64;
818   gpe_context->vfe_state.gpgpu_mode = 0;
819   gpe_context->vfe_state.urb_entry_size = 120;	//121;    //16;
820   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
821   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
822   media_gpe_load_kernels (ctx, gpe_context, &media_hybrid_vp8_kernels[0], 5);
823   gpe_context->idrt_size = sizeof (struct media_interface_descriptor_data);	//* MAX_INTERFACE_DESC_GEN6;
824   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;
825   gpe_context->sampler_size = 0;
826   media_gpe_context_init (ctx, gpe_context);
827   media_interface_setup_mbenc (encoder_context);
828   media_alloc_resource_mbenc (ctx, encoder_context);
829   return;
830 }
831 
832 VOID
media_me_context_init(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)833 media_me_context_init (VADriverContextP ctx,
834 		       MEDIA_ENCODER_CTX * encoder_context)
835 {
836   ME_CONTEXT *me_context = &encoder_context->me_context;
837   MEDIA_GPE_CTX *gpe_context = &me_context->gpe_context;
838 
839   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
840   gpe_context->curbe.length = CURBE_TOTAL_DATA_LENGTH;
841   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
842   gpe_context->vfe_state.num_urb_entries = 16;	//64;
843   gpe_context->vfe_state.gpgpu_mode = 0;
844   gpe_context->vfe_state.urb_entry_size = 121;	//16;
845   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
846   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
847   /*media_gpe_load_kernels (ctx, gpe_context, &media_hybrid_vp8_kernels[3], 1); */
848 #if 0
849   gpe_context->surface_state_binding_table.res.bo_size =
850     (SURFACE_STATE_PADDED_SIZE + sizeof (UINT)) * MAX_MEDIA_SURFACES_GEN6;
851   gpe_context->surface_state_binding_table.table_name = "binding table me";
852 #endif
853   gpe_context->idrt_size =
854     sizeof (struct media_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
855   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;
856   gpe_context->sampler_size = 0;
857   media_gpe_context_init (ctx, gpe_context);
858 
859   media_alloc_resource_me (ctx, encoder_context);
860 }
861 
862 VOID
media_alloc_resource_brc_init_reset(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)863 media_alloc_resource_brc_init_reset (VADriverContextP ctx,
864 				     MEDIA_ENCODER_CTX * encoder_context)
865 {
866   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
867   BRC_INIT_RESET_CONTEXT *brc_init_reset_context =
868     &encoder_context->brc_init_reset_context;
869   BYTE *pbuffer;
870   int size, i;
871   BOOL status;
872 
873   brc_init_reset_context->brc_history.surface_array_spacing = 0x1;
874   brc_init_reset_context->brc_history.tiling = I915_TILING_NONE;
875   brc_init_reset_context->brc_history.bo_size = 544;	// 17 GRF registers
876   media_allocate_resource (&brc_init_reset_context->brc_history,
877 			   drv_ctx->drv_data.bufmgr,
878 			   (const BYTE *) "BRC history buffer",
879 			   HISTOGRAM_SIZE, 4096);
880   MEDIA_DRV_ASSERT (brc_init_reset_context->brc_history.bo);
881 
882   brc_init_reset_context->brc_distortion.width =
883     ALIGN ((encoder_context->down_scaled_width_mb4x * 8), 64);
884   brc_init_reset_context->brc_distortion.height =
885     2 * ALIGN ((encoder_context->down_scaled_height_mb4x * 4), 8);
886   brc_init_reset_context->brc_distortion.surface_array_spacing = 0x1;
887   brc_init_reset_context->brc_distortion.tiling = I915_TILING_NONE;
888   brc_init_reset_context->brc_distortion.pitch =
889     brc_init_reset_context->brc_distortion.width;
890   brc_init_reset_context->brc_distortion.bo_size =
891     brc_init_reset_context->brc_distortion.pitch *
892     brc_init_reset_context->brc_distortion.height;
893   media_allocate_resource (&brc_init_reset_context->brc_distortion,
894 			   drv_ctx->drv_data.bufmgr,
895 			   (const BYTE *) "BRC distortion surface",
896 			   brc_init_reset_context->brc_distortion.bo_size,
897 			   4096);
898   MEDIA_DRV_ASSERT (brc_init_reset_context->brc_distortion.bo);
899 
900   size = 160 * 18 * sizeof (UINT16);
901 
902   brc_init_reset_context->brc_pak_qp_input_table.surface_array_spacing = 0x1;
903   brc_init_reset_context->brc_pak_qp_input_table.tiling = I915_TILING_NONE;
904   brc_init_reset_context->brc_pak_qp_input_table.bo_size = size;
905   media_allocate_resource (&brc_init_reset_context->brc_pak_qp_input_table,
906 			   drv_ctx->drv_data.bufmgr,
907 			   (const BYTE *) "BRC PAK QP Input Table",
908 			   size, 4096);
909   MEDIA_DRV_ASSERT (brc_init_reset_context->brc_pak_qp_input_table.bo);
910 
911   pbuffer =
912     (BYTE *) media_map_buffer_obj (brc_init_reset_context->
913 				   brc_pak_qp_input_table.bo);
914   MEDIA_DRV_ASSERT (pbuffer);
915 
916   status = media_drv_memcpy (pbuffer,
917 			     size, (VOID *) pak_qp_input_table, size);
918 
919   if (status != TRUE)
920     {
921       media_unmap_buffer_obj (brc_init_reset_context->brc_pak_qp_input_table.
922 			      bo);
923       MEDIA_DRV_ASSERT ("media_drv_memcpy failed");
924     }
925 
926   media_unmap_buffer_obj (brc_init_reset_context->brc_pak_qp_input_table.bo);
927 
928   size = 2880;
929   brc_init_reset_context->brc_constant_data.surface_array_spacing = 0x1;
930   brc_init_reset_context->brc_constant_data.tiling = I915_TILING_NONE;
931   brc_init_reset_context->brc_constant_data.bo_size = size;
932   media_allocate_resource (&brc_init_reset_context->brc_constant_data,
933 			   drv_ctx->drv_data.bufmgr,
934 			   (const BYTE *) "BRC Constant Data Buffer",
935 			   size, 4096);
936   MEDIA_DRV_ASSERT (brc_init_reset_context->brc_constant_data.bo);
937 
938   pbuffer =
939     (BYTE *) media_map_buffer_obj (brc_init_reset_context->brc_constant_data.
940 				   bo);
941   MEDIA_DRV_ASSERT (pbuffer);
942 
943   media_drv_memset (pbuffer, size);
944 
945   media_unmap_buffer_obj (brc_init_reset_context->brc_constant_data.bo);
946 
947   for (i = 0; i < NUM_BRC_CONSTANT_DATA_BUFFERS; i++)
948     {
949       brc_init_reset_context->brc_constant_buffer[i].width =
950 	BRC_CONSTANTSURFACE_WIDTH_G75;
951       brc_init_reset_context->brc_constant_buffer[i].height =
952 	BRC_CONSTANTSURFACE_HEIGHT_G75;
953       brc_init_reset_context->brc_constant_buffer[i].surface_array_spacing =
954 	0x1;
955       brc_init_reset_context->brc_constant_buffer[i].tiling =
956 	I915_TILING_NONE;
957       brc_init_reset_context->brc_constant_buffer[i].pitch =
958 	BRC_CONSTANTSURFACE_WIDTH_G75;
959       media_allocate_resource (&brc_init_reset_context->
960 			       brc_constant_buffer[i],
961 			       drv_ctx->drv_data.bufmgr,
962 			       (const BYTE *) "BRC Constant Data surface",
963 			       0x1000, 4096);
964       MEDIA_DRV_ASSERT (brc_init_reset_context->brc_constant_buffer[i].bo);
965     }
966 }
967 
968 VOID
media_brc_init_reset_context_init(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)969 media_brc_init_reset_context_init (VADriverContextP ctx,
970 				   MEDIA_ENCODER_CTX * encoder_context)
971 {
972   BRC_INIT_RESET_CONTEXT *brc_init_reset_context =
973     &encoder_context->brc_init_reset_context;
974   MEDIA_GPE_CTX *gpe_context = &brc_init_reset_context->gpe_context;
975   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
976   gpe_context->curbe.length = CURBE_TOTAL_DATA_LENGTH;
977   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
978   gpe_context->vfe_state.num_urb_entries = 16;	//64;
979   gpe_context->vfe_state.gpgpu_mode = 0;
980   gpe_context->vfe_state.urb_entry_size = 120;	//121;    //16;
981   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
982   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
983   media_gpe_load_kernels (ctx, gpe_context, &media_hybrid_vp8_kernels[9], 2);
984   gpe_context->idrt_size = sizeof (struct media_interface_descriptor_data);	//* MAX_INTERFACE_DESC_GEN6;
985   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;
986   gpe_context->sampler_size = 0;
987   media_gpe_context_init (ctx, gpe_context);
988   media_interface_setup_brc_init_reset (encoder_context);
989   media_alloc_resource_brc_init_reset (ctx, encoder_context);
990   return;
991 }
992 #if 0
993 VOID
994 media_alloc_resource_brc_update (VADriverContextP ctx,
995 				 MEDIA_ENCODER_CTX * encoder_context)
996 {
997   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
998   BRC_UPDATE_CONTEXT *distortion_ctx = &encoder_context->brc_update_context;
999 }
1000 #endif
1001 VOID
media_brc_update_context_init(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)1002 media_brc_update_context_init (VADriverContextP ctx,
1003 			       MEDIA_ENCODER_CTX * encoder_context)
1004 {
1005   BRC_UPDATE_CONTEXT *distortion_ctx = &encoder_context->brc_update_context;
1006   MEDIA_GPE_CTX *gpe_context = &distortion_ctx->gpe_context;
1007   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
1008   gpe_context->curbe.length = CURBE_TOTAL_DATA_LENGTH;
1009   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
1010   gpe_context->vfe_state.num_urb_entries = 16;	//64;
1011   gpe_context->vfe_state.gpgpu_mode = 0;
1012   gpe_context->vfe_state.urb_entry_size = 120;	//121;    //16;
1013   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
1014   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
1015   media_gpe_load_kernels (ctx, gpe_context, &media_hybrid_vp8_kernels[11], 1);
1016   gpe_context->idrt_size = sizeof (struct media_interface_descriptor_data);	//* MAX_INTERFACE_DESC_GEN6;
1017   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;
1018   gpe_context->sampler_size = 0;
1019 
1020   media_gpe_context_init (ctx, gpe_context);
1021 
1022   encoder_context->brc_distortion_buffer_supported = 1;
1023   encoder_context->brc_constant_buffer_supported = 1;
1024 
1025   media_interface_setup_brc_update (encoder_context);
1026 //FIXME:This function is not doing anything.Remove this later if not required
1027   #if 0
1028    media_alloc_resource_brc_update (ctx, encoder_context);
1029   #endif
1030   return;
1031 }
1032 
1033 VOID
media_alloc_resource_scaling(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)1034 media_alloc_resource_scaling (VADriverContextP ctx,
1035 			      MEDIA_ENCODER_CTX * encoder_context)
1036 {
1037   UINT down_scaled_width4x, downscaled_height_4x;
1038   UINT down_scaled_width16x, downscaled_height_16x;
1039   UINT down_scaled_width32x, downscaled_height_32x;
1040   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
1041   SCALING_CONTEXT *scaling_context = &encoder_context->scaling_context;
1042   down_scaled_width4x = encoder_context->frame_width / 4;
1043   downscaled_height_4x = encoder_context->frame_height / 4;
1044   down_scaled_width4x = ALIGN (down_scaled_width4x, 16);
1045   downscaled_height_4x = (downscaled_height_4x + 1) >> 1;
1046   downscaled_height_4x = 2 * ALIGN (downscaled_height_4x, 32);
1047 
1048   scaling_context->scaled_4x_surface.width = down_scaled_width4x;
1049   scaling_context->scaled_4x_surface.height = downscaled_height_4x;
1050   scaling_context->scaled_4x_surface.surface_array_spacing = 0x1;
1051   scaling_context->scaled_4x_surface.tiling = I915_TILING_NONE;
1052   scaling_context->scaled_4x_surface.pitch = 0x80;	//hardcoded..need to fix this later
1053   media_allocate_resource (&scaling_context->scaled_4x_surface,
1054 			   drv_ctx->drv_data.bufmgr,
1055 			   (const BYTE *) "scaled surface 4x", 0x1000, 4096);
1056   MEDIA_DRV_ASSERT (scaling_context->scaled_4x_surface.bo);
1057 
1058   down_scaled_width16x = encoder_context->frame_width / 16;
1059   downscaled_height_16x = encoder_context->frame_height / 16;
1060   down_scaled_width16x = ALIGN (down_scaled_width16x, 16);
1061   downscaled_height_16x = (downscaled_height_16x + 1) >> 1;
1062   downscaled_height_16x = 2 * ALIGN (downscaled_height_16x, 32);
1063 
1064   scaling_context->scaled_16x_surface.width = down_scaled_width16x;
1065   scaling_context->scaled_16x_surface.height = downscaled_height_16x;
1066   scaling_context->scaled_16x_surface.surface_array_spacing = 0x1;
1067   scaling_context->scaled_16x_surface.tiling = I915_TILING_NONE;
1068   scaling_context->scaled_16x_surface.pitch = 0x80;	//hardcoded..need to fix this later
1069   media_allocate_resource (&scaling_context->scaled_16x_surface,
1070 			   drv_ctx->drv_data.bufmgr,
1071 			   (const BYTE *) "scaled surface 16x", 0x1000, 4096);
1072   MEDIA_DRV_ASSERT (scaling_context->scaled_16x_surface.bo);
1073 
1074   down_scaled_width32x = encoder_context->frame_width / 32;
1075   downscaled_height_32x = encoder_context->frame_height / 32;
1076   down_scaled_width32x = ALIGN (down_scaled_width32x, 16);
1077   downscaled_height_32x = (downscaled_height_32x + 1) >> 1;
1078   downscaled_height_32x = 2 * ALIGN (downscaled_height_32x, 32);
1079 
1080   scaling_context->scaled_32x_surface.width = down_scaled_width32x;
1081   scaling_context->scaled_32x_surface.height = downscaled_height_32x;
1082   scaling_context->scaled_32x_surface.surface_array_spacing = 0x1;
1083   scaling_context->scaled_32x_surface.tiling = I915_TILING_NONE;
1084   scaling_context->scaled_32x_surface.pitch = 0x80;	//hardcoded..need to fix this later
1085   media_allocate_resource (&scaling_context->scaled_32x_surface,
1086 			   drv_ctx->drv_data.bufmgr,
1087 			   (const BYTE *) "scaled surface 32x", 0x1000, 4096);
1088   MEDIA_DRV_ASSERT (scaling_context->scaled_32x_surface.bo);
1089 
1090 }
1091 
1092 VOID
media_scaling_context_init(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)1093 media_scaling_context_init (VADriverContextP ctx,
1094 			    MEDIA_ENCODER_CTX * encoder_context)
1095 {
1096   SCALING_CONTEXT *scaling_context = &encoder_context->scaling_context;
1097   MEDIA_GPE_CTX *gpe_context = &scaling_context->gpe_context;
1098 
1099   gpe_context->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
1100   gpe_context->curbe.length = CURBE_TOTAL_DATA_LENGTH;
1101   gpe_context->vfe_state.max_num_threads = 280 - 1;	//60 - 1;
1102   gpe_context->vfe_state.num_urb_entries = 16;	//64;
1103   gpe_context->vfe_state.gpgpu_mode = 0;
1104   gpe_context->vfe_state.urb_entry_size = 121;	//16;
1105   gpe_context->vfe_state.curbe_allocation_size = CURBE_ALLOCATION_SIZE - 1;
1106   gpe_context_vfe_scoreboardinit_vp8 (gpe_context);
1107 
1108   /*media_gpe_load_kernels (ctx, gpe_context, media_hybrid_vp8_kernels, 1); */
1109 #if 0
1110   gpe_context->surface_state_binding_table.res.bo_size =
1111     (SURFACE_STATE_PADDED_SIZE + sizeof (UINT)) * MAX_MEDIA_SURFACES_GEN6;
1112 #endif
1113   gpe_context->idrt_size =
1114     sizeof (struct media_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
1115   gpe_context->curbe_size = CURBE_TOTAL_DATA_LENGTH;
1116   gpe_context->sampler_size = 0;
1117   media_gpe_context_init (ctx, gpe_context);
1118   media_alloc_resource_scaling (ctx, encoder_context);
1119 }
1120 
1121 void
media_encoder_init_vp8(VADriverContextP ctx,MEDIA_ENCODER_CTX * encoder_context)1122 media_encoder_init_vp8 (VADriverContextP ctx,
1123 			MEDIA_ENCODER_CTX * encoder_context)
1124 {
1125   MEDIA_DRV_CONTEXT *drv_ctx = (MEDIA_DRV_CONTEXT *) (ctx->pDriverData);
1126   encoder_context->codec = CODEC_VP8;
1127   encoder_context->prev_target_bit_rate=0;
1128   //encoder_context->picture_width = picture_width;
1129   //encoder_context->picture_height = picture_height;
1130 
1131   if (IS_HASWELL (drv_ctx->drv_data.device_id))
1132     {
1133       encoder_context->num_of_kernels =
1134 	sizeof (media_hybrid_vp8_kernels) / sizeof (MEDIA_KERNEL);
1135       encoder_context->disable_multi_ref = 0;
1136       media_encoder_context_params_init (drv_ctx, encoder_context);
1137       media_scaling_context_init (ctx, encoder_context);
1138       media_me_context_init (ctx, encoder_context);
1139       media_mbenc_context_init (ctx, encoder_context);
1140       media_mbpak_context_init_vp8 (ctx, encoder_context);
1141       media_brc_init_reset_context_init (ctx, encoder_context);
1142       media_brc_update_context_init (ctx, encoder_context);
1143       encoder_context->set_curbe_i_vp8_mbenc = media_set_curbe_i_vp8_mbenc;
1144       encoder_context->set_curbe_p_vp8_mbenc = media_set_curbe_p_vp8_mbenc;
1145       encoder_context->set_curbe_vp8_mbpak = media_set_curbe_vp8_mbpak;
1146       encoder_context->set_curbe_vp8_brc_init_reset = media_set_curbe_vp8_brc_init_reset;
1147       encoder_context->set_curbe_vp8_brc_update = media_set_curbe_vp8_brc_update;
1148       encoder_context->set_curbe_scaling = mediadrv_set_curbe_scaling;
1149       encoder_context->set_curbe_vp8_me = media_set_curbe_vp8_me;
1150       encoder_context->surface_state_vp8_mbenc =
1151 	media_surface_state_vp8_mbenc;
1152       encoder_context->surface_state_vp8_mbpak =
1153 	media_surface_state_vp8_mbpak;
1154       encoder_context->surface_state_vp8_brc_init_reset =
1155 	media_surface_state_vp8_brc_init_reset;
1156       encoder_context->surface_state_vp8_brc_update =
1157 	media_surface_state_vp8_brc_update;
1158       encoder_context->surface_state_scaling =
1159 	media_surface_state_scaling;
1160       encoder_context->surface_state_vp8_me =
1161 	media_surface_state_vp8_me;
1162       encoder_context->init_brc_update_constant_data_vp8 =
1163 	media_encode_init_brc_update_constant_data_vp8_g75;
1164       encoder_context->media_add_surface_state = media_add_surface_state;
1165       encoder_context->media_add_binding_table = media_add_binding_table;
1166       encoder_context->media_object_walker_pak_init=media_object_walker_pak_init;
1167       encoder_context->media_object_walker_mbenc_init =media_object_walker_mbenc_init;
1168       encoder_context->gpe_context_vfe_scoreboardinit_pak_p1=gpe_context_vfe_scoreboardinit_pak_p1;
1169       encoder_context->gpe_context_vfe_scoreboardinit_pak_p2=gpe_context_vfe_scoreboardinit_pak_p2;
1170       encoder_context->mediadrv_gen_state_base_address_cmd =
1171 	mediadrv_gen_state_base_address_cmd;
1172       encoder_context->mediadrv_gen_media_vfe_state_cmd =
1173 	mediadrv_gen_media_vfe_state_cmd;
1174       encoder_context->media_object_walker_cmd=
1175         media_object_walker_cmd;
1176       encoder_context->initialize_brc_distortion_buffer = media_init_brc_distortion_buffer_g75;
1177     }
1178   else if (IS_GEN7 (drv_ctx->drv_data.device_id))
1179     {
1180       encoder_context->num_of_kernels =
1181 	sizeof (media_hybrid_vp8_kernels_g7) / sizeof (MEDIA_KERNEL);
1182       encoder_context->disable_multi_ref = 1;
1183       media_encoder_context_params_init (drv_ctx, encoder_context);
1184       media_scaling_context_init_g7 (ctx, encoder_context);
1185       media_me_context_init_g7 (ctx, encoder_context);
1186       media_mbenc_context_init_g7 (ctx, encoder_context);
1187       media_mbpak_context_init_vp8_g7 (ctx, encoder_context);
1188       media_brc_init_reset_context_init_g7(ctx, encoder_context);
1189       media_brc_update_context_init_g7(ctx, encoder_context);
1190       encoder_context->set_curbe_i_vp8_mbenc = media_set_curbe_i_vp8_mbenc_g7;
1191       encoder_context->set_curbe_p_vp8_mbenc = media_set_curbe_p_vp8_mbenc_g7;
1192       encoder_context->set_curbe_vp8_mbpak = media_set_curbe_vp8_mbpak_g7;
1193       encoder_context->set_curbe_vp8_brc_init_reset = media_set_curbe_vp8_brc_init_reset_g7;
1194       encoder_context->set_curbe_vp8_brc_update = media_set_curbe_vp8_brc_update_g7;
1195       encoder_context->set_curbe_scaling = mediadrv_set_curbe_scaling;
1196       encoder_context->set_curbe_vp8_me = media_set_curbe_vp8_me_g7;
1197       encoder_context->surface_state_vp8_mbenc =
1198 	media_surface_state_vp8_mbenc_g7;
1199       encoder_context->surface_state_vp8_mbpak =
1200 	media_surface_state_vp8_mbpak_g7;
1201       encoder_context->surface_state_vp8_brc_init_reset =
1202 	media_surface_state_vp8_brc_init_reset_g7;
1203       encoder_context->surface_state_vp8_brc_update =
1204 	media_surface_state_vp8_brc_update_g7;
1205       encoder_context->surface_state_scaling =
1206 	media_surface_state_scaling;
1207       encoder_context->surface_state_vp8_me =
1208 	media_surface_state_vp8_me_g7;
1209       encoder_context->init_brc_update_constant_data_vp8 =
1210 	media_encode_init_brc_update_constant_data_vp8_g7;
1211       encoder_context->media_add_surface_state = media_add_surface_state;
1212       encoder_context->media_add_binding_table = media_add_binding_table;
1213       encoder_context->media_object_walker_pak_init=media_object_walker_pak_init;
1214       encoder_context->media_object_walker_mbenc_init =media_object_walker_mbenc_init;
1215       encoder_context->gpe_context_vfe_scoreboardinit_pak_p1=gpe_context_vfe_scoreboardinit_pak_p1;
1216       encoder_context->gpe_context_vfe_scoreboardinit_pak_p2=gpe_context_vfe_scoreboardinit_pak_p2;
1217       encoder_context->mediadrv_gen_state_base_address_cmd =
1218 	mediadrv_gen_state_base_address_cmd;
1219       encoder_context->mediadrv_gen_media_vfe_state_cmd =
1220 	mediadrv_gen_media_vfe_state_cmd;
1221       encoder_context->media_object_walker_cmd=
1222         media_object_walker_cmd;
1223       encoder_context->initialize_brc_distortion_buffer = media_init_brc_distortion_buffer_g7;
1224     }
1225   else
1226     {
1227       printf ("Platform not supported");
1228       MEDIA_DRV_ASSERT (0);
1229     }
1230 }
1231