1 /* 2 * Copyright (c) 2018 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef VPX_VP9_ENCODER_VP9_PARTITION_MODELS_H_ 12 #define VPX_VP9_ENCODER_VP9_PARTITION_MODELS_H_ 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 #define NN_MAX_HIDDEN_LAYERS 10 19 #define NN_MAX_NODES_PER_LAYER 128 20 21 // Neural net model config. It defines the layout of a neural net model, such as 22 // the number of inputs/outputs, number of layers, the number of nodes in each 23 // layer, as well as the weights and bias of each node. 24 typedef struct { 25 int num_inputs; // Number of input nodes, i.e. features. 26 int num_outputs; // Number of output nodes. 27 int num_hidden_layers; // Number of hidden layers, maximum 10. 28 // Number of nodes for each hidden layer. 29 int num_hidden_nodes[NN_MAX_HIDDEN_LAYERS]; 30 // Weight parameters, indexed by layer. 31 const float *weights[NN_MAX_HIDDEN_LAYERS + 1]; 32 // Bias parameters, indexed by layer. 33 const float *bias[NN_MAX_HIDDEN_LAYERS + 1]; 34 } NN_CONFIG; 35 36 // Partition search breakout model. 37 #define FEATURES 4 38 #define Q_CTX 3 39 #define RESOLUTION_CTX 2 40 static const float 41 vp9_partition_breakout_weights_64[RESOLUTION_CTX][Q_CTX][FEATURES + 1] = { 42 { 43 { 44 -0.016673f, 45 -0.001025f, 46 -0.000032f, 47 0.000833f, 48 1.94261885f - 2.1f, 49 }, 50 { 51 -0.160867f, 52 -0.002101f, 53 0.000011f, 54 0.002448f, 55 1.65738142f - 2.5f, 56 }, 57 { 58 -0.628934f, 59 -0.011459f, 60 -0.000009f, 61 0.013833f, 62 1.47982645f - 1.6f, 63 }, 64 }, 65 { 66 { 67 -0.064309f, 68 -0.006121f, 69 0.000232f, 70 0.005778f, 71 0.7989465f - 5.0f, 72 }, 73 { 74 -0.314957f, 75 -0.009346f, 76 -0.000225f, 77 0.010072f, 78 2.80695581f - 5.5f, 79 }, 80 { 81 -0.635535f, 82 -0.015135f, 83 0.000091f, 84 0.015247f, 85 2.90381241f - 5.0f, 86 }, 87 }, 88 }; 89 90 static const float 91 vp9_partition_breakout_weights_32[RESOLUTION_CTX][Q_CTX][FEATURES + 1] = { 92 { 93 { 94 -0.010554f, 95 -0.003081f, 96 -0.000134f, 97 0.004491f, 98 1.68445992f - 3.5f, 99 }, 100 { 101 -0.051489f, 102 -0.007609f, 103 0.000016f, 104 0.009792f, 105 1.28089404f - 2.5f, 106 }, 107 { 108 -0.163097f, 109 -0.013081f, 110 0.000022f, 111 0.019006f, 112 1.36129403f - 3.2f, 113 }, 114 }, 115 { 116 { 117 -0.024629f, 118 -0.006492f, 119 -0.000254f, 120 0.004895f, 121 1.27919173f - 4.5f, 122 }, 123 { 124 -0.083936f, 125 -0.009827f, 126 -0.000200f, 127 0.010399f, 128 2.73731065f - 4.5f, 129 }, 130 { 131 -0.279052f, 132 -0.013334f, 133 0.000289f, 134 0.023203f, 135 2.43595719f - 3.5f, 136 }, 137 }, 138 }; 139 140 static const float 141 vp9_partition_breakout_weights_16[RESOLUTION_CTX][Q_CTX][FEATURES + 1] = { 142 { 143 { 144 -0.013154f, 145 -0.002404f, 146 -0.000977f, 147 0.008450f, 148 2.57404566f - 5.5f, 149 }, 150 { 151 -0.019146f, 152 -0.004018f, 153 0.000064f, 154 0.008187f, 155 2.15043926f - 2.5f, 156 }, 157 { 158 -0.075755f, 159 -0.010858f, 160 0.000030f, 161 0.024505f, 162 2.06848121f - 2.5f, 163 }, 164 }, 165 { 166 { 167 -0.007636f, 168 -0.002751f, 169 -0.000682f, 170 0.005968f, 171 0.19225763f - 4.5f, 172 }, 173 { 174 -0.047306f, 175 -0.009113f, 176 -0.000518f, 177 0.016007f, 178 2.61068869f - 4.0f, 179 }, 180 { 181 -0.069336f, 182 -0.010448f, 183 -0.001120f, 184 0.023083f, 185 1.47591054f - 5.5f, 186 }, 187 }, 188 }; 189 190 static const float vp9_partition_breakout_weights_8[RESOLUTION_CTX][Q_CTX] 191 [FEATURES + 1] = { 192 { 193 { 194 -0.011807f, 195 -0.009873f, 196 -0.000931f, 197 0.034768f, 198 1.32254851f - 2.0f, 199 }, 200 { 201 -0.003861f, 202 -0.002701f, 203 0.000100f, 204 0.013876f, 205 1.96755111f - 1.5f, 206 }, 207 { 208 -0.013522f, 209 -0.008677f, 210 -0.000562f, 211 0.034468f, 212 1.53440356f - 1.5f, 213 }, 214 }, 215 { 216 { 217 -0.003221f, 218 -0.002125f, 219 0.000993f, 220 0.012768f, 221 0.03541421f - 2.0f, 222 }, 223 { 224 -0.006069f, 225 -0.007335f, 226 0.000229f, 227 0.026104f, 228 0.17135315f - 1.5f, 229 }, 230 { 231 -0.039894f, 232 -0.011419f, 233 0.000070f, 234 0.061817f, 235 0.6739977f - 1.5f, 236 }, 237 }, 238 }; 239 #undef FEATURES 240 #undef Q_CTX 241 #undef RESOLUTION_CTX 242 243 // Rectangular partition search pruning model. 244 #define FEATURES 8 245 #define LABELS 4 246 #define NODES 16 247 static const float vp9_rect_part_nn_weights_16_layer0[FEATURES * NODES] = { 248 -0.432522f, 0.133070f, -0.169187f, 0.768340f, 0.891228f, 0.554458f, 249 0.356000f, 0.403621f, 0.809165f, 0.778214f, -0.520357f, 0.301451f, 250 -0.386972f, -0.314402f, 0.021878f, 1.148746f, -0.462258f, -0.175524f, 251 -0.344589f, -0.475159f, -0.232322f, 0.471147f, -0.489948f, 0.467740f, 252 -0.391550f, 0.208601f, 0.054138f, 0.076859f, -0.309497f, -0.095927f, 253 0.225917f, 0.011582f, -0.520730f, -0.585497f, 0.174036f, 0.072521f, 254 0.120771f, -0.517234f, -0.581908f, -0.034003f, -0.694722f, -0.364368f, 255 0.290584f, 0.038373f, 0.685654f, 0.394019f, 0.759667f, 1.257502f, 256 -0.610516f, -0.185434f, 0.211997f, -0.172458f, 0.044605f, 0.145316f, 257 -0.182525f, -0.147376f, 0.578742f, 0.312412f, -0.446135f, -0.389112f, 258 0.454033f, 0.260490f, 0.664285f, 0.395856f, -0.231827f, 0.215228f, 259 0.014856f, -0.395462f, 0.479646f, -0.391445f, -0.357788f, 0.166238f, 260 -0.056818f, -0.027783f, 0.060880f, -1.604710f, 0.531268f, 0.282184f, 261 0.714944f, 0.093523f, -0.218312f, -0.095546f, -0.285621f, -0.190871f, 262 -0.448340f, -0.016611f, 0.413913f, -0.286720f, -0.158828f, -0.092635f, 263 -0.279551f, 0.166509f, -0.088162f, 0.446543f, -0.276830f, -0.065642f, 264 -0.176346f, -0.984754f, 0.338738f, 0.403809f, 0.738065f, 1.154439f, 265 0.750764f, 0.770959f, -0.269403f, 0.295651f, -0.331858f, 0.367144f, 266 0.279279f, 0.157419f, -0.348227f, -0.168608f, -0.956000f, -0.647136f, 267 0.250516f, 0.858084f, 0.809802f, 0.492408f, 0.804841f, 0.282802f, 268 0.079395f, -0.291771f, -0.024382f, -1.615880f, -0.445166f, -0.407335f, 269 -0.483044f, 0.141126f, 270 }; 271 272 static const float vp9_rect_part_nn_bias_16_layer0[NODES] = { 273 0.275384f, -0.053745f, 0.000000f, 0.000000f, -0.178103f, 0.513965f, 274 -0.161352f, 0.228551f, 0.000000f, 1.013712f, 0.000000f, 0.000000f, 275 -1.144009f, -0.000006f, -0.241727f, 2.048764f, 276 }; 277 278 static const float vp9_rect_part_nn_weights_16_layer1[NODES * LABELS] = { 279 -1.435278f, 2.204691f, -0.410718f, 0.202708f, 0.109208f, 1.059142f, 280 -0.306360f, 0.845906f, 0.489654f, -1.121915f, -0.169133f, -0.003385f, 281 0.660590f, -0.018711f, 1.227158f, -2.967504f, 1.407345f, -1.293243f, 282 -0.386921f, 0.300492f, 0.338824f, -0.083250f, -0.069454f, -1.001827f, 283 -0.327891f, 0.899353f, 0.367397f, -0.118601f, -0.171936f, -0.420646f, 284 -0.803319f, 2.029634f, 0.940268f, -0.664484f, 0.339916f, 0.315944f, 285 0.157374f, -0.402482f, -0.491695f, 0.595827f, 0.015031f, 0.255887f, 286 -0.466327f, -0.212598f, 0.136485f, 0.033363f, -0.796921f, 1.414304f, 287 -0.282185f, -2.673571f, -0.280994f, 0.382658f, -0.350902f, 0.227926f, 288 0.062602f, -1.000199f, 0.433731f, 1.176439f, -0.163216f, -0.229015f, 289 -0.640098f, -0.438852f, -0.947700f, 2.203434f, 290 }; 291 292 static const float vp9_rect_part_nn_bias_16_layer1[LABELS] = { 293 -0.875510f, 294 0.982408f, 295 0.560854f, 296 -0.415209f, 297 }; 298 299 static const NN_CONFIG vp9_rect_part_nnconfig_16 = { 300 FEATURES, // num_inputs 301 LABELS, // num_outputs 302 1, // num_hidden_layers 303 { 304 NODES, 305 }, // num_hidden_nodes 306 { 307 vp9_rect_part_nn_weights_16_layer0, 308 vp9_rect_part_nn_weights_16_layer1, 309 }, 310 { 311 vp9_rect_part_nn_bias_16_layer0, 312 vp9_rect_part_nn_bias_16_layer1, 313 }, 314 }; 315 316 static const float vp9_rect_part_nn_weights_32_layer0[FEATURES * NODES] = { 317 -0.147312f, -0.753248f, 0.540206f, 0.661415f, 0.484117f, -0.341609f, 318 0.016183f, 0.064177f, 0.781580f, 0.902232f, -0.505342f, 0.325183f, 319 -0.231072f, -0.120107f, -0.076216f, 0.120038f, 0.403695f, -0.463301f, 320 -0.192158f, 0.407442f, 0.106633f, 1.072371f, -0.446779f, 0.467353f, 321 0.318812f, -0.505996f, -0.008768f, -0.239598f, 0.085480f, 0.284640f, 322 -0.365045f, -0.048083f, -0.112090f, -0.067089f, 0.304138f, -0.228809f, 323 0.383651f, -0.196882f, 0.477039f, -0.217978f, -0.506931f, -0.125675f, 324 0.050456f, 1.086598f, 0.732128f, 0.326941f, 0.103952f, 0.121769f, 325 -0.154487f, -0.255514f, 0.030591f, -0.382797f, -0.019981f, -0.326570f, 326 0.149691f, -0.435633f, -0.070795f, 0.167691f, 0.251413f, -0.153405f, 327 0.160347f, 0.455107f, -0.968580f, -0.575879f, 0.623115f, -0.069793f, 328 -0.379768f, -0.965807f, -0.062057f, 0.071312f, 0.457098f, 0.350372f, 329 -0.460659f, -0.985393f, 0.359963f, -0.093677f, 0.404272f, -0.326896f, 330 -0.277752f, 0.609322f, -0.114193f, -0.230701f, 0.089208f, 0.645381f, 331 0.494485f, 0.467876f, -0.166187f, 0.251044f, -0.394661f, 0.192895f, 332 -0.344777f, -0.041893f, -0.111163f, 0.066347f, 0.378158f, -0.455465f, 333 0.339839f, -0.418207f, -0.356515f, -0.227536f, -0.211091f, -0.122945f, 334 0.361772f, -0.338095f, 0.004564f, -0.398510f, 0.060876f, -2.132504f, 335 -0.086776f, -0.029166f, 0.039241f, 0.222534f, -0.188565f, -0.288792f, 336 -0.160789f, -0.123905f, 0.397916f, -0.063779f, 0.167210f, -0.445004f, 337 0.056889f, 0.207280f, 0.000101f, 0.384507f, -1.721239f, -2.036402f, 338 -2.084403f, -2.060483f, 339 }; 340 341 static const float vp9_rect_part_nn_bias_32_layer0[NODES] = { 342 -0.859251f, -0.109938f, 0.091838f, 0.187817f, -0.728265f, 0.253080f, 343 0.000000f, -0.357195f, -0.031290f, -1.373237f, -0.761086f, 0.000000f, 344 -0.024504f, 1.765711f, 0.000000f, 1.505390f, 345 }; 346 347 static const float vp9_rect_part_nn_weights_32_layer1[NODES * LABELS] = { 348 0.680940f, 1.367178f, 0.403075f, 0.029957f, 0.500917f, 1.407776f, 349 -0.354002f, 0.011667f, 1.663767f, 0.959155f, 0.428323f, -0.205345f, 350 -0.081850f, -3.920103f, -0.243802f, -4.253933f, -0.034020f, -1.361057f, 351 0.128236f, -0.138422f, -0.025790f, -0.563518f, -0.148715f, -0.344381f, 352 -1.677389f, -0.868332f, -0.063792f, 0.052052f, 0.359591f, 2.739808f, 353 -0.414304f, 3.036597f, -0.075368f, -1.019680f, 0.642501f, 0.209779f, 354 -0.374539f, -0.718294f, -0.116616f, -0.043212f, -1.787809f, -0.773262f, 355 0.068734f, 0.508309f, 0.099334f, 1.802239f, -0.333538f, 2.708645f, 356 -0.447682f, -2.355555f, -0.506674f, -0.061028f, -0.310305f, -0.375475f, 357 0.194572f, 0.431788f, -0.789624f, -0.031962f, 0.358353f, 0.382937f, 358 0.232002f, 2.321813f, -0.037523f, 2.104652f, 359 }; 360 361 static const float vp9_rect_part_nn_bias_32_layer1[LABELS] = { 362 -0.693383f, 363 0.773661f, 364 0.426878f, 365 -0.070619f, 366 }; 367 368 static const NN_CONFIG vp9_rect_part_nnconfig_32 = { 369 FEATURES, // num_inputs 370 LABELS, // num_outputs 371 1, // num_hidden_layers 372 { 373 NODES, 374 }, // num_hidden_nodes 375 { 376 vp9_rect_part_nn_weights_32_layer0, 377 vp9_rect_part_nn_weights_32_layer1, 378 }, 379 { 380 vp9_rect_part_nn_bias_32_layer0, 381 vp9_rect_part_nn_bias_32_layer1, 382 }, 383 }; 384 #undef NODES 385 386 #define NODES 24 387 static const float vp9_rect_part_nn_weights_64_layer0[FEATURES * NODES] = { 388 0.024671f, -0.220610f, -0.284362f, -0.069556f, -0.315700f, 0.187861f, 389 0.139782f, 0.063110f, 0.796561f, 0.172868f, -0.662194f, -1.393074f, 390 0.085003f, 0.393381f, 0.358477f, -0.187268f, -0.370745f, 0.218287f, 391 0.027271f, -0.254089f, -0.048236f, -0.459137f, 0.253171f, 0.122598f, 392 -0.550107f, -0.568456f, 0.159866f, -0.246534f, 0.096384f, -0.255460f, 393 0.077864f, -0.334837f, 0.026921f, -0.697252f, 0.345262f, 1.343578f, 394 0.815984f, 1.118211f, 1.574016f, 0.578476f, -0.285967f, -0.508672f, 395 0.118137f, 0.037695f, 1.540510f, 1.256648f, 1.163819f, 1.172027f, 396 0.661551f, -0.111980f, -0.434204f, -0.894217f, 0.570524f, 0.050292f, 397 -0.113680f, 0.000784f, -0.211554f, -0.369394f, 0.158306f, -0.512505f, 398 -0.238696f, 0.091498f, -0.448490f, -0.491268f, -0.353112f, -0.303315f, 399 -0.428438f, 0.127998f, -0.406790f, -0.401786f, -0.279888f, -0.384223f, 400 0.026100f, 0.041621f, -0.315818f, -0.087888f, 0.353497f, 0.163123f, 401 -0.380128f, -0.090334f, -0.216647f, -0.117849f, -0.173502f, 0.301871f, 402 0.070854f, 0.114627f, -0.050545f, -0.160381f, 0.595294f, 0.492696f, 403 -0.453858f, -1.154139f, 0.126000f, 0.034550f, 0.456665f, -0.236618f, 404 -0.112640f, 0.050759f, -0.449162f, 0.110059f, 0.147116f, 0.249358f, 405 -0.049894f, 0.063351f, -0.004467f, 0.057242f, -0.482015f, -0.174335f, 406 -0.085617f, -0.333808f, -0.358440f, -0.069006f, 0.099260f, -1.243430f, 407 -0.052963f, 0.112088f, -2.661115f, -2.445893f, -2.688174f, -2.624232f, 408 0.030494f, 0.161311f, 0.012136f, 0.207564f, -2.776856f, -2.791940f, 409 -2.623962f, -2.918820f, 1.231619f, -0.376692f, -0.698078f, 0.110336f, 410 -0.285378f, 0.258367f, -0.180159f, -0.376608f, -0.034348f, -0.130206f, 411 0.160020f, 0.852977f, 0.580573f, 1.450782f, 1.357596f, 0.787382f, 412 -0.544004f, -0.014795f, 0.032121f, -0.557696f, 0.159994f, -0.540908f, 413 0.180380f, -0.398045f, 0.705095f, 0.515103f, -0.511521f, -1.271374f, 414 -0.231019f, 0.423647f, 0.064907f, -0.255338f, -0.877748f, -0.667205f, 415 0.267847f, 0.135229f, 0.617844f, 1.349849f, 1.012623f, 0.730506f, 416 -0.078571f, 0.058401f, 0.053221f, -2.426146f, -0.098808f, -0.138508f, 417 -0.153299f, 0.149116f, -0.444243f, 0.301807f, 0.065066f, 0.092929f, 418 -0.372784f, -0.095540f, 0.192269f, 0.237894f, 0.080228f, -0.214074f, 419 -0.011426f, -2.352367f, -0.085394f, -0.190361f, -0.001177f, 0.089197f, 420 }; 421 422 static const float vp9_rect_part_nn_bias_64_layer0[NODES] = { 423 0.000000f, -0.057652f, -0.175413f, -0.175389f, -1.084097f, -1.423801f, 424 -0.076307f, -0.193803f, 0.000000f, -0.066474f, -0.050318f, -0.019832f, 425 -0.038814f, -0.144184f, 2.652451f, 2.415006f, 0.197464f, -0.729842f, 426 -0.173774f, 0.239171f, 0.486425f, 2.463304f, -0.175279f, 2.352637f, 427 }; 428 429 static const float vp9_rect_part_nn_weights_64_layer1[NODES * LABELS] = { 430 -0.063237f, 1.925696f, -0.182145f, -0.226687f, 0.602941f, -0.941140f, 431 0.814598f, -0.117063f, 0.282988f, 0.066369f, 0.096951f, 1.049735f, 432 -0.188188f, -0.281227f, -4.836746f, -5.047797f, 0.892358f, 0.417145f, 433 -0.279849f, 1.335945f, 0.660338f, -2.757938f, -0.115714f, -1.862183f, 434 -0.045980f, -1.597624f, -0.586822f, -0.615589f, -0.330537f, 1.068496f, 435 -0.167290f, 0.141290f, -0.112100f, 0.232761f, 0.252307f, -0.399653f, 436 0.353118f, 0.241583f, 2.635241f, 4.026119f, -1.137327f, -0.052446f, 437 -0.139814f, -1.104256f, -0.759391f, 2.508457f, -0.526297f, 2.095348f, 438 -0.444473f, -1.090452f, 0.584122f, 0.468729f, -0.368865f, 1.041425f, 439 -1.079504f, 0.348837f, 0.390091f, 0.416191f, 0.212906f, -0.660255f, 440 0.053630f, 0.209476f, 3.595525f, 2.257293f, -0.514030f, 0.074203f, 441 -0.375862f, -1.998307f, -0.930310f, 1.866686f, -0.247137f, 1.087789f, 442 0.100186f, 0.298150f, 0.165265f, 0.050478f, 0.249167f, 0.371789f, 443 -0.294497f, 0.202954f, 0.037310f, 0.193159f, 0.161551f, 0.301597f, 444 0.299286f, 0.185946f, 0.822976f, 2.066130f, -1.724588f, 0.055977f, 445 -0.330747f, -0.067747f, -0.475801f, 1.555958f, -0.025808f, -0.081516f, 446 }; 447 448 static const float vp9_rect_part_nn_bias_64_layer1[LABELS] = { 449 -0.090723f, 450 0.894968f, 451 0.844754f, 452 -3.496194f, 453 }; 454 455 static const NN_CONFIG vp9_rect_part_nnconfig_64 = { 456 FEATURES, // num_inputs 457 LABELS, // num_outputs 458 1, // num_hidden_layers 459 { 460 NODES, 461 }, // num_hidden_nodes 462 { 463 vp9_rect_part_nn_weights_64_layer0, 464 vp9_rect_part_nn_weights_64_layer1, 465 }, 466 { 467 vp9_rect_part_nn_bias_64_layer0, 468 vp9_rect_part_nn_bias_64_layer1, 469 }, 470 }; 471 #undef FEATURES 472 #undef LABELS 473 #undef NODES 474 475 #define FEATURES 7 476 // Partition pruning model(neural nets). 477 static const float vp9_partition_nn_weights_64x64_layer0[FEATURES * 8] = { 478 -3.571348f, 0.014835f, -3.255393f, -0.098090f, -0.013120f, 0.000221f, 479 0.056273f, 0.190179f, -0.268130f, -1.828242f, -0.010655f, 0.937244f, 480 -0.435120f, 0.512125f, 1.610679f, 0.190816f, -0.799075f, -0.377348f, 481 -0.144232f, 0.614383f, -0.980388f, 1.754150f, -0.185603f, -0.061854f, 482 -0.807172f, 1.240177f, 1.419531f, -0.438544f, -5.980774f, 0.139045f, 483 -0.032359f, -0.068887f, -1.237918f, 0.115706f, 0.003164f, 2.924212f, 484 1.246838f, -0.035833f, 0.810011f, -0.805894f, 0.010966f, 0.076463f, 485 -4.226380f, -2.437764f, -0.010619f, -0.020935f, -0.451494f, 0.300079f, 486 -0.168961f, -3.326450f, -2.731094f, 0.002518f, 0.018840f, -1.656815f, 487 0.068039f, 0.010586f, 488 }; 489 490 static const float vp9_partition_nn_bias_64x64_layer0[8] = { 491 -3.469882f, 0.683989f, 0.194010f, 0.313782f, 492 -3.153335f, 2.245849f, -1.946190f, -3.740020f, 493 }; 494 495 static const float vp9_partition_nn_weights_64x64_layer1[8] = { 496 -8.058566f, 0.108306f, -0.280620f, -0.818823f, 497 -6.445117f, 0.865364f, -1.127127f, -8.808660f, 498 }; 499 500 static const float vp9_partition_nn_bias_64x64_layer1[1] = { 501 6.46909416f, 502 }; 503 504 static const NN_CONFIG vp9_partition_nnconfig_64x64 = { 505 FEATURES, // num_inputs 506 1, // num_outputs 507 1, // num_hidden_layers 508 { 509 8, 510 }, // num_hidden_nodes 511 { 512 vp9_partition_nn_weights_64x64_layer0, 513 vp9_partition_nn_weights_64x64_layer1, 514 }, 515 { 516 vp9_partition_nn_bias_64x64_layer0, 517 vp9_partition_nn_bias_64x64_layer1, 518 }, 519 }; 520 521 static const float vp9_partition_nn_weights_32x32_layer0[FEATURES * 8] = { 522 -0.295437f, -4.002648f, -0.205399f, -0.060919f, 0.708037f, 0.027221f, 523 -0.039137f, -0.907724f, -3.151662f, 0.007106f, 0.018726f, -0.534928f, 524 0.022744f, 0.000159f, -1.717189f, -3.229031f, -0.027311f, 0.269863f, 525 -0.400747f, -0.394366f, -0.108878f, 0.603027f, 0.455369f, -0.197170f, 526 1.241746f, -1.347820f, -0.575636f, -0.462879f, -2.296426f, 0.196696f, 527 -0.138347f, -0.030754f, -0.200774f, 0.453795f, 0.055625f, -3.163116f, 528 -0.091003f, -0.027028f, -0.042984f, -0.605185f, 0.143240f, -0.036439f, 529 -0.801228f, 0.313409f, -0.159942f, 0.031267f, 0.886454f, -1.531644f, 530 -0.089655f, 0.037683f, -0.163441f, -0.130454f, -0.058344f, 0.060011f, 531 0.275387f, 1.552226f, 532 }; 533 534 static const float vp9_partition_nn_bias_32x32_layer0[8] = { 535 -0.838372f, -2.609089f, -0.055763f, 1.329485f, 536 -1.297638f, -2.636622f, -0.826909f, 1.012644f, 537 }; 538 539 static const float vp9_partition_nn_weights_32x32_layer1[8] = { 540 -1.792632f, -7.322353f, -0.683386f, 0.676564f, 541 -1.488118f, -7.527719f, 1.240163f, 0.614309f, 542 }; 543 544 static const float vp9_partition_nn_bias_32x32_layer1[1] = { 545 4.97422546f, 546 }; 547 548 static const NN_CONFIG vp9_partition_nnconfig_32x32 = { 549 FEATURES, // num_inputs 550 1, // num_outputs 551 1, // num_hidden_layers 552 { 553 8, 554 }, // num_hidden_nodes 555 { 556 vp9_partition_nn_weights_32x32_layer0, 557 vp9_partition_nn_weights_32x32_layer1, 558 }, 559 { 560 vp9_partition_nn_bias_32x32_layer0, 561 vp9_partition_nn_bias_32x32_layer1, 562 }, 563 }; 564 565 static const float vp9_partition_nn_weights_16x16_layer0[FEATURES * 8] = { 566 -1.717673f, -4.718130f, -0.125725f, -0.183427f, -0.511764f, 0.035328f, 567 0.130891f, -3.096753f, 0.174968f, -0.188769f, -0.640796f, 1.305661f, 568 1.700638f, -0.073806f, -4.006781f, -1.630999f, -0.064863f, -0.086410f, 569 -0.148617f, 0.172733f, -0.018619f, 2.152595f, 0.778405f, -0.156455f, 570 0.612995f, -0.467878f, 0.152022f, -0.236183f, 0.339635f, -0.087119f, 571 -3.196610f, -1.080401f, -0.637704f, -0.059974f, 1.706298f, -0.793705f, 572 -6.399260f, 0.010624f, -0.064199f, -0.650621f, 0.338087f, -0.001531f, 573 1.023655f, -3.700272f, -0.055281f, -0.386884f, 0.375504f, -0.898678f, 574 0.281156f, -0.314611f, 0.863354f, -0.040582f, -0.145019f, 0.029329f, 575 -2.197880f, -0.108733f, 576 }; 577 578 static const float vp9_partition_nn_bias_16x16_layer0[8] = { 579 0.411516f, -2.143737f, -3.693192f, 2.123142f, 580 -1.356910f, -3.561016f, -0.765045f, -2.417082f, 581 }; 582 583 static const float vp9_partition_nn_weights_16x16_layer1[8] = { 584 -0.619755f, -2.202391f, -4.337171f, 0.611319f, 585 0.377677f, -4.998723f, -1.052235f, 1.949922f, 586 }; 587 588 static const float vp9_partition_nn_bias_16x16_layer1[1] = { 589 3.20981717f, 590 }; 591 592 static const NN_CONFIG vp9_partition_nnconfig_16x16 = { 593 FEATURES, // num_inputs 594 1, // num_outputs 595 1, // num_hidden_layers 596 { 597 8, 598 }, // num_hidden_nodes 599 { 600 vp9_partition_nn_weights_16x16_layer0, 601 vp9_partition_nn_weights_16x16_layer1, 602 }, 603 { 604 vp9_partition_nn_bias_16x16_layer0, 605 vp9_partition_nn_bias_16x16_layer1, 606 }, 607 }; 608 #undef FEATURES 609 610 #define FEATURES 6 611 static const float vp9_var_part_nn_weights_64_layer0[FEATURES * 8] = { 612 -0.249572f, 0.205532f, -2.175608f, 1.094836f, -2.986370f, 0.193160f, 613 -0.143823f, 0.378511f, -1.997788f, -2.166866f, -1.930158f, -1.202127f, 614 -0.611875f, -0.506422f, -0.432487f, 0.071205f, 0.578172f, -0.154285f, 615 -0.051830f, 0.331681f, -1.457177f, -2.443546f, -2.000302f, -1.389283f, 616 0.372084f, -0.464917f, 2.265235f, 2.385787f, 2.312722f, 2.127868f, 617 -0.403963f, -0.177860f, -0.436751f, -0.560539f, 0.254903f, 0.193976f, 618 -0.305611f, 0.256632f, 0.309388f, -0.437439f, 1.702640f, -5.007069f, 619 -0.323450f, 0.294227f, 1.267193f, 1.056601f, 0.387181f, -0.191215f, 620 }; 621 622 static const float vp9_var_part_nn_bias_64_layer0[8] = { 623 -0.044396f, -0.938166f, 0.000000f, -0.916375f, 624 1.242299f, 0.000000f, -0.405734f, 0.014206f, 625 }; 626 627 static const float vp9_var_part_nn_weights_64_layer1[8] = { 628 1.635945f, 0.979557f, 0.455315f, 1.197199f, 629 -2.251024f, -0.464953f, 1.378676f, -0.111927f, 630 }; 631 632 static const float vp9_var_part_nn_bias_64_layer1[1] = { 633 -0.37972447f, 634 }; 635 636 static const NN_CONFIG vp9_var_part_nnconfig_64 = { 637 FEATURES, // num_inputs 638 1, // num_outputs 639 1, // num_hidden_layers 640 { 641 8, 642 }, // num_hidden_nodes 643 { 644 vp9_var_part_nn_weights_64_layer0, 645 vp9_var_part_nn_weights_64_layer1, 646 }, 647 { 648 vp9_var_part_nn_bias_64_layer0, 649 vp9_var_part_nn_bias_64_layer1, 650 }, 651 }; 652 653 static const float vp9_var_part_nn_weights_32_layer0[FEATURES * 8] = { 654 0.067243f, -0.083598f, -2.191159f, 2.726434f, -3.324013f, 3.477977f, 655 0.323736f, -0.510199f, 2.960693f, 2.937661f, 2.888476f, 2.938315f, 656 -0.307602f, -0.503353f, -0.080725f, -0.473909f, -0.417162f, 0.457089f, 657 0.665153f, -0.273210f, 0.028279f, 0.972220f, -0.445596f, 1.756611f, 658 -0.177892f, -0.091758f, 0.436661f, -0.521506f, 0.133786f, 0.266743f, 659 0.637367f, -0.160084f, -1.396269f, 1.020841f, -1.112971f, 0.919496f, 660 -0.235883f, 0.651954f, 0.109061f, -0.429463f, 0.740839f, -0.962060f, 661 0.299519f, -0.386298f, 1.550231f, 2.464915f, 1.311969f, 2.561612f, 662 }; 663 664 static const float vp9_var_part_nn_bias_32_layer0[8] = { 665 0.368242f, 0.736617f, 0.000000f, 0.757287f, 666 0.000000f, 0.613248f, -0.776390f, 0.928497f, 667 }; 668 669 static const float vp9_var_part_nn_weights_32_layer1[8] = { 670 0.939884f, -2.420850f, -0.410489f, -0.186690f, 671 0.063287f, -0.522011f, 0.484527f, -0.639625f, 672 }; 673 674 static const float vp9_var_part_nn_bias_32_layer1[1] = { 675 -0.6455006f, 676 }; 677 678 static const NN_CONFIG vp9_var_part_nnconfig_32 = { 679 FEATURES, // num_inputs 680 1, // num_outputs 681 1, // num_hidden_layers 682 { 683 8, 684 }, // num_hidden_nodes 685 { 686 vp9_var_part_nn_weights_32_layer0, 687 vp9_var_part_nn_weights_32_layer1, 688 }, 689 { 690 vp9_var_part_nn_bias_32_layer0, 691 vp9_var_part_nn_bias_32_layer1, 692 }, 693 }; 694 695 static const float vp9_var_part_nn_weights_16_layer0[FEATURES * 8] = { 696 0.742567f, -0.580624f, -0.244528f, 0.331661f, -0.113949f, -0.559295f, 697 -0.386061f, 0.438653f, 1.467463f, 0.211589f, 0.513972f, 1.067855f, 698 -0.876679f, 0.088560f, -0.687483f, -0.380304f, -0.016412f, 0.146380f, 699 0.015318f, 0.000351f, -2.764887f, 3.269717f, 2.752428f, -2.236754f, 700 0.561539f, -0.852050f, -0.084667f, 0.202057f, 0.197049f, 0.364922f, 701 -0.463801f, 0.431790f, 1.872096f, -0.091887f, -0.055034f, 2.443492f, 702 -0.156958f, -0.189571f, -0.542424f, -0.589804f, -0.354422f, 0.401605f, 703 0.642021f, -0.875117f, 2.040794f, 1.921070f, 1.792413f, 1.839727f, 704 }; 705 706 static const float vp9_var_part_nn_bias_16_layer0[8] = { 707 2.901234f, -1.940932f, -0.198970f, -0.406524f, 708 0.059422f, -1.879207f, -0.232340f, 2.979821f, 709 }; 710 711 static const float vp9_var_part_nn_weights_16_layer1[8] = { 712 -0.528731f, 0.375234f, -0.088422f, 0.668629f, 713 0.870449f, 0.578735f, 0.546103f, -1.957207f, 714 }; 715 716 static const float vp9_var_part_nn_bias_16_layer1[1] = { 717 -1.95769405f, 718 }; 719 720 static const NN_CONFIG vp9_var_part_nnconfig_16 = { 721 FEATURES, // num_inputs 722 1, // num_outputs 723 1, // num_hidden_layers 724 { 725 8, 726 }, // num_hidden_nodes 727 { 728 vp9_var_part_nn_weights_16_layer0, 729 vp9_var_part_nn_weights_16_layer1, 730 }, 731 { 732 vp9_var_part_nn_bias_16_layer0, 733 vp9_var_part_nn_bias_16_layer1, 734 }, 735 }; 736 #undef FEATURES 737 738 #define FEATURES 12 739 #define LABELS 1 740 #define NODES 8 741 static const float vp9_part_split_nn_weights_64_layer0[FEATURES * NODES] = { 742 -0.609728f, -0.409099f, -0.472449f, 0.183769f, -0.457740f, 0.081089f, 743 0.171003f, 0.578696f, -0.019043f, -0.856142f, 0.557369f, -1.779424f, 744 -0.274044f, -0.320632f, -0.392531f, -0.359462f, -0.404106f, -0.288357f, 745 0.200620f, 0.038013f, -0.430093f, 0.235083f, -0.487442f, 0.424814f, 746 -0.232758f, -0.442943f, 0.229397f, -0.540301f, -0.648421f, -0.649747f, 747 -0.171638f, 0.603824f, 0.468497f, -0.421580f, 0.178840f, -0.533838f, 748 -0.029471f, -0.076296f, 0.197426f, -0.187908f, -0.003950f, -0.065740f, 749 0.085165f, -0.039674f, -5.640702f, 1.909538f, -1.434604f, 3.294606f, 750 -0.788812f, 0.196864f, 0.057012f, -0.019757f, 0.336233f, 0.075378f, 751 0.081503f, 0.491864f, -1.899470f, -1.764173f, -1.888137f, -1.762343f, 752 0.845542f, 0.202285f, 0.381948f, -0.150996f, 0.556893f, -0.305354f, 753 0.561482f, -0.021974f, -0.703117f, 0.268638f, -0.665736f, 1.191005f, 754 -0.081568f, -0.115653f, 0.272029f, -0.140074f, 0.072683f, 0.092651f, 755 -0.472287f, -0.055790f, -0.434425f, 0.352055f, 0.048246f, 0.372865f, 756 0.111499f, -0.338304f, 0.739133f, 0.156519f, -0.594644f, 0.137295f, 757 0.613350f, -0.165102f, -1.003731f, 0.043070f, -0.887896f, -0.174202f, 758 }; 759 760 static const float vp9_part_split_nn_bias_64_layer0[NODES] = { 761 1.182714f, 0.000000f, 0.902019f, 0.953115f, 762 -1.372486f, -1.288740f, -0.155144f, -3.041362f, 763 }; 764 765 static const float vp9_part_split_nn_weights_64_layer1[NODES * LABELS] = { 766 0.841214f, 0.456016f, 0.869270f, 1.692999f, 767 -1.700494f, -0.911761f, 0.030111f, -1.447548f, 768 }; 769 770 static const float vp9_part_split_nn_bias_64_layer1[LABELS] = { 771 1.17782545f, 772 }; 773 774 static const NN_CONFIG vp9_part_split_nnconfig_64 = { 775 FEATURES, // num_inputs 776 LABELS, // num_outputs 777 1, // num_hidden_layers 778 { 779 NODES, 780 }, // num_hidden_nodes 781 { 782 vp9_part_split_nn_weights_64_layer0, 783 vp9_part_split_nn_weights_64_layer1, 784 }, 785 { 786 vp9_part_split_nn_bias_64_layer0, 787 vp9_part_split_nn_bias_64_layer1, 788 }, 789 }; 790 791 static const float vp9_part_split_nn_weights_32_layer0[FEATURES * NODES] = { 792 -0.105488f, -0.218662f, 0.010980f, -0.226979f, 0.028076f, 0.743430f, 793 0.789266f, 0.031907f, -1.464200f, 0.222336f, -1.068493f, -0.052712f, 794 -0.176181f, -0.102654f, -0.973932f, -0.182637f, -0.198000f, 0.335977f, 795 0.271346f, 0.133005f, 1.674203f, 0.689567f, 0.657133f, 0.283524f, 796 0.115529f, 0.738327f, 0.317184f, -0.179736f, 0.403691f, 0.679350f, 797 0.048925f, 0.271338f, -1.538921f, -0.900737f, -1.377845f, 0.084245f, 798 0.803122f, -0.107806f, 0.103045f, -0.023335f, -0.098116f, -0.127809f, 799 0.037665f, -0.523225f, 1.622185f, 1.903999f, 1.358889f, 1.680785f, 800 0.027743f, 0.117906f, -0.158810f, 0.057775f, 0.168257f, 0.062414f, 801 0.086228f, -0.087381f, -3.066082f, 3.021855f, -4.092155f, 2.550104f, 802 -0.230022f, -0.207445f, -0.000347f, 0.034042f, 0.097057f, 0.220088f, 803 -0.228841f, -0.029405f, -1.507174f, -1.455184f, 2.624904f, 2.643355f, 804 0.319912f, 0.585531f, -1.018225f, -0.699606f, 1.026490f, 0.169952f, 805 -0.093579f, -0.142352f, -0.107256f, 0.059598f, 0.043190f, 0.507543f, 806 -0.138617f, 0.030197f, 0.059574f, -0.634051f, -0.586724f, -0.148020f, 807 -0.334380f, 0.459547f, 1.620600f, 0.496850f, 0.639480f, -0.465715f, 808 }; 809 810 static const float vp9_part_split_nn_bias_32_layer0[NODES] = { 811 -1.125885f, 0.753197f, -0.825808f, 0.004839f, 812 0.583920f, 0.718062f, 0.976741f, 0.796188f, 813 }; 814 815 static const float vp9_part_split_nn_weights_32_layer1[NODES * LABELS] = { 816 -0.458745f, 0.724624f, -0.479720f, -2.199872f, 817 1.162661f, 1.194153f, -0.716896f, 0.824080f, 818 }; 819 820 static const float vp9_part_split_nn_bias_32_layer1[LABELS] = { 821 0.71644074f, 822 }; 823 824 static const NN_CONFIG vp9_part_split_nnconfig_32 = { 825 FEATURES, // num_inputs 826 LABELS, // num_outputs 827 1, // num_hidden_layers 828 { 829 NODES, 830 }, // num_hidden_nodes 831 { 832 vp9_part_split_nn_weights_32_layer0, 833 vp9_part_split_nn_weights_32_layer1, 834 }, 835 { 836 vp9_part_split_nn_bias_32_layer0, 837 vp9_part_split_nn_bias_32_layer1, 838 }, 839 }; 840 841 static const float vp9_part_split_nn_weights_16_layer0[FEATURES * NODES] = { 842 -0.003629f, -0.046852f, 0.220428f, -0.033042f, 0.049365f, 0.112818f, 843 -0.306149f, -0.005872f, 1.066947f, -2.290226f, 2.159505f, -0.618714f, 844 -0.213294f, 0.451372f, -0.199459f, 0.223730f, -0.321709f, 0.063364f, 845 0.148704f, -0.293371f, 0.077225f, -0.421947f, -0.515543f, -0.240975f, 846 -0.418516f, 1.036523f, -0.009165f, 0.032484f, 1.086549f, 0.220322f, 847 -0.247585f, -0.221232f, -0.225050f, 0.993051f, 0.285907f, 1.308846f, 848 0.707456f, 0.335152f, 0.234556f, 0.264590f, -0.078033f, 0.542226f, 849 0.057777f, 0.163471f, 0.039245f, -0.725960f, 0.963780f, -0.972001f, 850 0.252237f, -0.192745f, -0.836571f, -0.460539f, -0.528713f, -0.160198f, 851 -0.621108f, 0.486405f, -0.221923f, 1.519426f, -0.857871f, 0.411595f, 852 0.947188f, 0.203339f, 0.174526f, 0.016382f, 0.256879f, 0.049818f, 853 0.057836f, -0.659096f, 0.459894f, 0.174695f, 0.379359f, 0.062530f, 854 -0.210201f, -0.355788f, -0.208432f, -0.401723f, -0.115373f, 0.191336f, 855 -0.109342f, 0.002455f, -0.078746f, -0.391871f, 0.149892f, -0.239615f, 856 -0.520709f, 0.118568f, -0.437975f, 0.118116f, -0.565426f, -0.206446f, 857 0.113407f, 0.558894f, 0.534627f, 1.154350f, -0.116833f, 1.723311f, 858 }; 859 860 static const float vp9_part_split_nn_bias_16_layer0[NODES] = { 861 0.013109f, -0.034341f, 0.679845f, -0.035781f, 862 -0.104183f, 0.098055f, -0.041130f, 0.160107f, 863 }; 864 865 static const float vp9_part_split_nn_weights_16_layer1[NODES * LABELS] = { 866 1.499564f, -0.403259f, 1.366532f, -0.469868f, 867 0.482227f, -2.076697f, 0.527691f, 0.540495f, 868 }; 869 870 static const float vp9_part_split_nn_bias_16_layer1[LABELS] = { 871 0.01134653f, 872 }; 873 874 static const NN_CONFIG vp9_part_split_nnconfig_16 = { 875 FEATURES, // num_inputs 876 LABELS, // num_outputs 877 1, // num_hidden_layers 878 { 879 NODES, 880 }, // num_hidden_nodes 881 { 882 vp9_part_split_nn_weights_16_layer0, 883 vp9_part_split_nn_weights_16_layer1, 884 }, 885 { 886 vp9_part_split_nn_bias_16_layer0, 887 vp9_part_split_nn_bias_16_layer1, 888 }, 889 }; 890 891 static const float vp9_part_split_nn_weights_8_layer0[FEATURES * NODES] = { 892 -0.668875f, -0.159078f, -0.062663f, -0.483785f, -0.146814f, -0.608975f, 893 -0.589145f, 0.203704f, -0.051007f, -0.113769f, -0.477511f, -0.122603f, 894 -1.329890f, 1.403386f, 0.199636f, -0.161139f, 2.182090f, -0.014307f, 895 0.015755f, -0.208468f, 0.884353f, 0.815920f, 0.632464f, 0.838225f, 896 1.369483f, -0.029068f, 0.570213f, -0.573546f, 0.029617f, 0.562054f, 897 -0.653093f, -0.211910f, -0.661013f, -0.384418f, -0.574038f, -0.510069f, 898 0.173047f, -0.274231f, -1.044008f, -0.422040f, -0.810296f, 0.144069f, 899 -0.406704f, 0.411230f, -0.144023f, 0.745651f, -0.595091f, 0.111787f, 900 0.840651f, 0.030123f, -0.242155f, 0.101486f, -0.017889f, -0.254467f, 901 -0.285407f, -0.076675f, -0.549542f, -0.013544f, -0.686566f, -0.755150f, 902 1.623949f, -0.286369f, 0.170976f, 0.016442f, -0.598353f, -0.038540f, 903 0.202597f, -0.933582f, 0.599510f, 0.362273f, 0.577722f, 0.477603f, 904 0.767097f, 0.431532f, 0.457034f, 0.223279f, 0.381349f, 0.033777f, 905 0.423923f, -0.664762f, 0.385662f, 0.075744f, 0.182681f, 0.024118f, 906 0.319408f, -0.528864f, 0.976537f, -0.305971f, -0.189380f, -0.241689f, 907 -1.318092f, 0.088647f, -0.109030f, -0.945654f, 1.082797f, 0.184564f, 908 }; 909 910 static const float vp9_part_split_nn_bias_8_layer0[NODES] = { 911 -0.237472f, 2.051396f, 0.297062f, -0.730194f, 912 0.060472f, -0.565959f, 0.560869f, -0.395448f, 913 }; 914 915 static const float vp9_part_split_nn_weights_8_layer1[NODES * LABELS] = { 916 0.568121f, 1.575915f, -0.544309f, 0.751595f, 917 -0.117911f, -1.340730f, -0.739671f, 0.661216f, 918 }; 919 920 static const float vp9_part_split_nn_bias_8_layer1[LABELS] = { 921 -0.63375306f, 922 }; 923 924 static const NN_CONFIG vp9_part_split_nnconfig_8 = { 925 FEATURES, // num_inputs 926 LABELS, // num_outputs 927 1, // num_hidden_layers 928 { 929 NODES, 930 }, // num_hidden_nodes 931 { 932 vp9_part_split_nn_weights_8_layer0, 933 vp9_part_split_nn_weights_8_layer1, 934 }, 935 { 936 vp9_part_split_nn_bias_8_layer0, 937 vp9_part_split_nn_bias_8_layer1, 938 }, 939 }; 940 #undef NODES 941 #undef FEATURES 942 #undef LABELS 943 944 // Partition pruning model(linear). 945 static const float vp9_partition_feature_mean[24] = { 946 303501.697372f, 3042630.372158f, 24.694696f, 1.392182f, 947 689.413511f, 162.027012f, 1.478213f, 0.0, 948 135382.260230f, 912738.513263f, 28.845217f, 1.515230f, 949 544.158492f, 131.807995f, 1.436863f, 0.0f, 950 43682.377587f, 208131.711766f, 28.084737f, 1.356677f, 951 138.254122f, 119.522553f, 1.252322f, 0.0f, 952 }; 953 954 static const float vp9_partition_feature_std[24] = { 955 673689.212982f, 5996652.516628f, 0.024449f, 1.989792f, 956 985.880847f, 0.014638f, 2.001898f, 0.0f, 957 208798.775332f, 1812548.443284f, 0.018693f, 1.838009f, 958 396.986910f, 0.015657f, 1.332541f, 0.0f, 959 55888.847031f, 448587.962714f, 0.017900f, 1.904776f, 960 98.652832f, 0.016598f, 1.320992f, 0.0f, 961 }; 962 963 // Error tolerance: 0.01%-0.0.05%-0.1% 964 static const float vp9_partition_linear_weights[24] = { 965 0.111736f, 0.289977f, 0.042219f, 0.204765f, 0.120410f, -0.143863f, 966 0.282376f, 0.847811f, 0.637161f, 0.131570f, 0.018636f, 0.202134f, 967 0.112797f, 0.028162f, 0.182450f, 1.124367f, 0.386133f, 0.083700f, 968 0.050028f, 0.150873f, 0.061119f, 0.109318f, 0.127255f, 0.625211f, 969 }; 970 971 #ifdef __cplusplus 972 } // extern "C" 973 #endif 974 975 #endif // VPX_VP9_ENCODER_VP9_PARTITION_MODELS_H_ 976