Adding support for independent partitions
Adding support in the encoder for generating independent residual partitions by forcing equal probabilities over the prev coef entropy contexts. Change-Id: I402f5c353255f3ca20eae2620af739f6a498cd21
This commit is contained in:
parent
be99868bd1
commit
4cb0ebe5b2
225
vp8/common/defaultcoefcounts.c
Normal file
225
vp8/common/defaultcoefcounts.c
Normal file
@ -0,0 +1,225 @@
|
||||
/*
|
||||
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "defaultcoefcounts.h"
|
||||
|
||||
/* Generated file, included by entropy.c */
|
||||
|
||||
const unsigned int vp8_default_coef_counts[BLOCK_TYPES]
|
||||
[COEF_BANDS]
|
||||
[PREV_COEF_CONTEXTS]
|
||||
[vp8_coef_tokens] =
|
||||
{
|
||||
|
||||
{
|
||||
/* Block Type ( 0 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{30190, 26544, 225, 24, 4, 0, 0, 0, 0, 0, 0, 4171593,},
|
||||
{26846, 25157, 1241, 130, 26, 6, 1, 0, 0, 0, 0, 149987,},
|
||||
{10484, 9538, 1006, 160, 36, 18, 0, 0, 0, 0, 0, 15104,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{25842, 40456, 1126, 83, 11, 2, 0, 0, 0, 0, 0, 0,},
|
||||
{9338, 8010, 512, 73, 7, 3, 2, 0, 0, 0, 0, 43294,},
|
||||
{1047, 751, 149, 31, 13, 6, 1, 0, 0, 0, 0, 879,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{26136, 9826, 252, 13, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{8134, 5574, 191, 14, 2, 0, 0, 0, 0, 0, 0, 35302,},
|
||||
{ 605, 677, 116, 9, 1, 0, 0, 0, 0, 0, 0, 611,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{10263, 15463, 283, 17, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{2773, 2191, 128, 9, 2, 2, 0, 0, 0, 0, 0, 10073,},
|
||||
{ 134, 125, 32, 4, 0, 2, 0, 0, 0, 0, 0, 50,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{10483, 2663, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{2137, 1251, 27, 1, 1, 0, 0, 0, 0, 0, 0, 14362,},
|
||||
{ 116, 156, 14, 2, 1, 0, 0, 0, 0, 0, 0, 190,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{40977, 27614, 412, 28, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{6113, 5213, 261, 22, 3, 0, 0, 0, 0, 0, 0, 26164,},
|
||||
{ 382, 312, 50, 14, 2, 0, 0, 0, 0, 0, 0, 345,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,},
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Block Type ( 1 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{3268, 19382, 1043, 250, 93, 82, 49, 26, 17, 8, 25, 82289,},
|
||||
{8758, 32110, 5436, 1832, 827, 668, 420, 153, 24, 0, 3, 52914,},
|
||||
{9337, 23725, 8487, 3954, 2107, 1836, 1069, 399, 59, 0, 0, 18620,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{12419, 8420, 452, 62, 9, 1, 0, 0, 0, 0, 0, 0,},
|
||||
{11715, 8705, 693, 92, 15, 7, 2, 0, 0, 0, 0, 53988,},
|
||||
{7603, 8585, 2306, 778, 270, 145, 39, 5, 0, 0, 0, 9136,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{15938, 14335, 1207, 184, 55, 13, 4, 1, 0, 0, 0, 0,},
|
||||
{7415, 6829, 1138, 244, 71, 26, 7, 0, 0, 0, 0, 9980,},
|
||||
{1580, 1824, 655, 241, 89, 46, 10, 2, 0, 0, 0, 429,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{19453, 5260, 201, 19, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{9173, 3758, 213, 22, 1, 1, 0, 0, 0, 0, 0, 9820,},
|
||||
{1689, 1277, 276, 51, 17, 4, 0, 0, 0, 0, 0, 679,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{12076, 10667, 620, 85, 19, 9, 5, 0, 0, 0, 0, 0,},
|
||||
{4665, 3625, 423, 55, 19, 9, 0, 0, 0, 0, 0, 5127,},
|
||||
{ 415, 440, 143, 34, 20, 7, 2, 0, 0, 0, 0, 101,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{12183, 4846, 115, 11, 1, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{4226, 3149, 177, 21, 2, 0, 0, 0, 0, 0, 0, 7157,},
|
||||
{ 375, 621, 189, 51, 11, 4, 1, 0, 0, 0, 0, 198,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{61658, 37743, 1203, 94, 10, 3, 0, 0, 0, 0, 0, 0,},
|
||||
{15514, 11563, 903, 111, 14, 5, 0, 0, 0, 0, 0, 25195,},
|
||||
{ 929, 1077, 291, 78, 14, 7, 1, 0, 0, 0, 0, 507,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 990, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 412, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1641,},
|
||||
{ 0, 18, 7, 1, 0, 0, 0, 0, 0, 0, 0, 30,},
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Block Type ( 2 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{ 953, 24519, 628, 120, 28, 12, 4, 0, 0, 0, 0, 2248798,},
|
||||
{1525, 25654, 2647, 617, 239, 143, 42, 5, 0, 0, 0, 66837,},
|
||||
{1180, 11011, 3001, 1237, 532, 448, 239, 54, 5, 0, 0, 7122,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{1356, 2220, 67, 10, 4, 1, 0, 0, 0, 0, 0, 0,},
|
||||
{1450, 2544, 102, 18, 4, 3, 0, 0, 0, 0, 0, 57063,},
|
||||
{1182, 2110, 470, 130, 41, 21, 0, 0, 0, 0, 0, 6047,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{ 370, 3378, 200, 30, 5, 4, 1, 0, 0, 0, 0, 0,},
|
||||
{ 293, 1006, 131, 29, 11, 0, 0, 0, 0, 0, 0, 5404,},
|
||||
{ 114, 387, 98, 23, 4, 8, 1, 0, 0, 0, 0, 236,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{ 579, 194, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 395, 213, 5, 1, 0, 0, 0, 0, 0, 0, 0, 4157,},
|
||||
{ 119, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 300,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{ 38, 557, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 21, 114, 12, 1, 0, 0, 0, 0, 0, 0, 0, 427,},
|
||||
{ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{ 52, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652,},
|
||||
{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{ 640, 569, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 25, 77, 2, 0, 0, 0, 0, 0, 0, 0, 0, 517,},
|
||||
{ 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Block Type ( 3 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{2506, 20161, 2707, 767, 261, 178, 107, 30, 14, 3, 0, 100694,},
|
||||
{8806, 36478, 8817, 3268, 1280, 850, 401, 114, 42, 0, 0, 58572,},
|
||||
{11003, 27214, 11798, 5716, 2482, 2072, 1048, 175, 32, 0, 0, 19284,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{9738, 11313, 959, 205, 70, 18, 11, 1, 0, 0, 0, 0,},
|
||||
{12628, 15085, 1507, 273, 52, 19, 9, 0, 0, 0, 0, 54280,},
|
||||
{10701, 15846, 5561, 1926, 813, 570, 249, 36, 0, 0, 0, 6460,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{6781, 22539, 2784, 634, 182, 123, 20, 4, 0, 0, 0, 0,},
|
||||
{6263, 11544, 2649, 790, 259, 168, 27, 5, 0, 0, 0, 20539,},
|
||||
{3109, 4075, 2031, 896, 457, 386, 158, 29, 0, 0, 0, 1138,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{11515, 4079, 465, 73, 5, 14, 2, 0, 0, 0, 0, 0,},
|
||||
{9361, 5834, 650, 96, 24, 8, 4, 0, 0, 0, 0, 22181,},
|
||||
{4343, 3974, 1360, 415, 132, 96, 14, 1, 0, 0, 0, 1267,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{4787, 9297, 823, 168, 44, 12, 4, 0, 0, 0, 0, 0,},
|
||||
{3619, 4472, 719, 198, 60, 31, 3, 0, 0, 0, 0, 8401,},
|
||||
{1157, 1175, 483, 182, 88, 31, 8, 0, 0, 0, 0, 268,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{8299, 1226, 32, 5, 1, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{3502, 1568, 57, 4, 1, 1, 0, 0, 0, 0, 0, 9811,},
|
||||
{1055, 1070, 166, 29, 6, 1, 0, 0, 0, 0, 0, 527,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{27414, 27927, 1989, 347, 69, 26, 0, 0, 0, 0, 0, 0,},
|
||||
{5876, 10074, 1574, 341, 91, 24, 4, 0, 0, 0, 0, 21954,},
|
||||
{1571, 2171, 778, 324, 124, 65, 16, 0, 0, 0, 0, 979,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459,},
|
||||
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,},
|
||||
},
|
||||
},
|
||||
};
|
@ -8,214 +8,14 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef __DEFAULTCOEFCOUNTS_H
|
||||
#define __DEFAULTCOEFCOUNTS_H
|
||||
|
||||
/* Generated file, included by entropy.c */
|
||||
#include "entropy.h"
|
||||
|
||||
static const unsigned int default_coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp8_coef_tokens] =
|
||||
{
|
||||
extern const unsigned int vp8_default_coef_counts[BLOCK_TYPES]
|
||||
[COEF_BANDS]
|
||||
[PREV_COEF_CONTEXTS]
|
||||
[vp8_coef_tokens];
|
||||
|
||||
{
|
||||
/* Block Type ( 0 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{30190, 26544, 225, 24, 4, 0, 0, 0, 0, 0, 0, 4171593,},
|
||||
{26846, 25157, 1241, 130, 26, 6, 1, 0, 0, 0, 0, 149987,},
|
||||
{10484, 9538, 1006, 160, 36, 18, 0, 0, 0, 0, 0, 15104,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{25842, 40456, 1126, 83, 11, 2, 0, 0, 0, 0, 0, 0,},
|
||||
{9338, 8010, 512, 73, 7, 3, 2, 0, 0, 0, 0, 43294,},
|
||||
{1047, 751, 149, 31, 13, 6, 1, 0, 0, 0, 0, 879,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{26136, 9826, 252, 13, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{8134, 5574, 191, 14, 2, 0, 0, 0, 0, 0, 0, 35302,},
|
||||
{ 605, 677, 116, 9, 1, 0, 0, 0, 0, 0, 0, 611,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{10263, 15463, 283, 17, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{2773, 2191, 128, 9, 2, 2, 0, 0, 0, 0, 0, 10073,},
|
||||
{ 134, 125, 32, 4, 0, 2, 0, 0, 0, 0, 0, 50,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{10483, 2663, 23, 1, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{2137, 1251, 27, 1, 1, 0, 0, 0, 0, 0, 0, 14362,},
|
||||
{ 116, 156, 14, 2, 1, 0, 0, 0, 0, 0, 0, 190,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{40977, 27614, 412, 28, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{6113, 5213, 261, 22, 3, 0, 0, 0, 0, 0, 0, 26164,},
|
||||
{ 382, 312, 50, 14, 2, 0, 0, 0, 0, 0, 0, 345,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,},
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Block Type ( 1 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{3268, 19382, 1043, 250, 93, 82, 49, 26, 17, 8, 25, 82289,},
|
||||
{8758, 32110, 5436, 1832, 827, 668, 420, 153, 24, 0, 3, 52914,},
|
||||
{9337, 23725, 8487, 3954, 2107, 1836, 1069, 399, 59, 0, 0, 18620,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{12419, 8420, 452, 62, 9, 1, 0, 0, 0, 0, 0, 0,},
|
||||
{11715, 8705, 693, 92, 15, 7, 2, 0, 0, 0, 0, 53988,},
|
||||
{7603, 8585, 2306, 778, 270, 145, 39, 5, 0, 0, 0, 9136,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{15938, 14335, 1207, 184, 55, 13, 4, 1, 0, 0, 0, 0,},
|
||||
{7415, 6829, 1138, 244, 71, 26, 7, 0, 0, 0, 0, 9980,},
|
||||
{1580, 1824, 655, 241, 89, 46, 10, 2, 0, 0, 0, 429,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{19453, 5260, 201, 19, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{9173, 3758, 213, 22, 1, 1, 0, 0, 0, 0, 0, 9820,},
|
||||
{1689, 1277, 276, 51, 17, 4, 0, 0, 0, 0, 0, 679,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{12076, 10667, 620, 85, 19, 9, 5, 0, 0, 0, 0, 0,},
|
||||
{4665, 3625, 423, 55, 19, 9, 0, 0, 0, 0, 0, 5127,},
|
||||
{ 415, 440, 143, 34, 20, 7, 2, 0, 0, 0, 0, 101,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{12183, 4846, 115, 11, 1, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{4226, 3149, 177, 21, 2, 0, 0, 0, 0, 0, 0, 7157,},
|
||||
{ 375, 621, 189, 51, 11, 4, 1, 0, 0, 0, 0, 198,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{61658, 37743, 1203, 94, 10, 3, 0, 0, 0, 0, 0, 0,},
|
||||
{15514, 11563, 903, 111, 14, 5, 0, 0, 0, 0, 0, 25195,},
|
||||
{ 929, 1077, 291, 78, 14, 7, 1, 0, 0, 0, 0, 507,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 990, 15, 3, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 412, 13, 0, 0, 0, 0, 0, 0, 0, 0, 1641,},
|
||||
{ 0, 18, 7, 1, 0, 0, 0, 0, 0, 0, 0, 30,},
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Block Type ( 2 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{ 953, 24519, 628, 120, 28, 12, 4, 0, 0, 0, 0, 2248798,},
|
||||
{1525, 25654, 2647, 617, 239, 143, 42, 5, 0, 0, 0, 66837,},
|
||||
{1180, 11011, 3001, 1237, 532, 448, 239, 54, 5, 0, 0, 7122,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{1356, 2220, 67, 10, 4, 1, 0, 0, 0, 0, 0, 0,},
|
||||
{1450, 2544, 102, 18, 4, 3, 0, 0, 0, 0, 0, 57063,},
|
||||
{1182, 2110, 470, 130, 41, 21, 0, 0, 0, 0, 0, 6047,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{ 370, 3378, 200, 30, 5, 4, 1, 0, 0, 0, 0, 0,},
|
||||
{ 293, 1006, 131, 29, 11, 0, 0, 0, 0, 0, 0, 5404,},
|
||||
{ 114, 387, 98, 23, 4, 8, 1, 0, 0, 0, 0, 236,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{ 579, 194, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 395, 213, 5, 1, 0, 0, 0, 0, 0, 0, 0, 4157,},
|
||||
{ 119, 122, 4, 0, 0, 0, 0, 0, 0, 0, 0, 300,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{ 38, 557, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 21, 114, 12, 1, 0, 0, 0, 0, 0, 0, 0, 427,},
|
||||
{ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{ 52, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 18, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 652,},
|
||||
{ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{ 640, 569, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 25, 77, 2, 0, 0, 0, 0, 0, 0, 0, 0, 517,},
|
||||
{ 4, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Block Type ( 3 ) */
|
||||
{
|
||||
/* Coeff Band ( 0 ) */
|
||||
{2506, 20161, 2707, 767, 261, 178, 107, 30, 14, 3, 0, 100694,},
|
||||
{8806, 36478, 8817, 3268, 1280, 850, 401, 114, 42, 0, 0, 58572,},
|
||||
{11003, 27214, 11798, 5716, 2482, 2072, 1048, 175, 32, 0, 0, 19284,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 1 ) */
|
||||
{9738, 11313, 959, 205, 70, 18, 11, 1, 0, 0, 0, 0,},
|
||||
{12628, 15085, 1507, 273, 52, 19, 9, 0, 0, 0, 0, 54280,},
|
||||
{10701, 15846, 5561, 1926, 813, 570, 249, 36, 0, 0, 0, 6460,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 2 ) */
|
||||
{6781, 22539, 2784, 634, 182, 123, 20, 4, 0, 0, 0, 0,},
|
||||
{6263, 11544, 2649, 790, 259, 168, 27, 5, 0, 0, 0, 20539,},
|
||||
{3109, 4075, 2031, 896, 457, 386, 158, 29, 0, 0, 0, 1138,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 3 ) */
|
||||
{11515, 4079, 465, 73, 5, 14, 2, 0, 0, 0, 0, 0,},
|
||||
{9361, 5834, 650, 96, 24, 8, 4, 0, 0, 0, 0, 22181,},
|
||||
{4343, 3974, 1360, 415, 132, 96, 14, 1, 0, 0, 0, 1267,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 4 ) */
|
||||
{4787, 9297, 823, 168, 44, 12, 4, 0, 0, 0, 0, 0,},
|
||||
{3619, 4472, 719, 198, 60, 31, 3, 0, 0, 0, 0, 8401,},
|
||||
{1157, 1175, 483, 182, 88, 31, 8, 0, 0, 0, 0, 268,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 5 ) */
|
||||
{8299, 1226, 32, 5, 1, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{3502, 1568, 57, 4, 1, 1, 0, 0, 0, 0, 0, 9811,},
|
||||
{1055, 1070, 166, 29, 6, 1, 0, 0, 0, 0, 0, 527,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 6 ) */
|
||||
{27414, 27927, 1989, 347, 69, 26, 0, 0, 0, 0, 0, 0,},
|
||||
{5876, 10074, 1574, 341, 91, 24, 4, 0, 0, 0, 0, 21954,},
|
||||
{1571, 2171, 778, 324, 124, 65, 16, 0, 0, 0, 0, 979,},
|
||||
},
|
||||
{
|
||||
/* Coeff Band ( 7 ) */
|
||||
{ 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},
|
||||
{ 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459,},
|
||||
{ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,},
|
||||
},
|
||||
},
|
||||
};
|
||||
#endif //__DEFAULTCOEFCOUNTS_H
|
||||
|
@ -148,7 +148,9 @@ void vp8_default_coef_probs(VP8_COMMON *pc)
|
||||
unsigned int branch_ct [vp8_coef_tokens-1] [2];
|
||||
vp8_tree_probs_from_distribution(
|
||||
vp8_coef_tokens, vp8_coef_encodings, vp8_coef_tree,
|
||||
pc->fc.coef_probs [h][i][k], branch_ct, default_coef_counts [h][i][k],
|
||||
pc->fc.coef_probs[h][i][k],
|
||||
branch_ct,
|
||||
vp8_default_coef_counts[h][i][k],
|
||||
256, 1);
|
||||
|
||||
}
|
||||
|
@ -184,8 +184,11 @@ extern "C"
|
||||
int token_partitions; // how many token partitions to create for multi core decoding
|
||||
int encode_breakout; // early breakout encode threshold : for video conf recommend 800
|
||||
|
||||
int error_resilient_mode; // if running over udp networks provides decodable frames after a
|
||||
// dropped packet
|
||||
unsigned int error_resilient_mode; // Bitfield defining the error
|
||||
// resiliency features to enable. Can provide
|
||||
// decodable frames after losses in previous
|
||||
// frames and decodable partitions after
|
||||
// losses in the same frame.
|
||||
|
||||
int arnr_max_frames;
|
||||
int arnr_strength ;
|
||||
|
@ -17,9 +17,12 @@
|
||||
#include "vp8/common/systemdependent.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include "vp8/common/pragmas.h"
|
||||
#include "vpx/vpx_encoder.h"
|
||||
#include "vpx_mem/vpx_mem.h"
|
||||
#include "bitstream.h"
|
||||
#include "vp8/common/defaultcoefcounts.h"
|
||||
|
||||
const int vp8cx_base_skip_false_prob[128] =
|
||||
{
|
||||
@ -1123,9 +1126,201 @@ static void write_kfmodes(VP8_COMP *cpi)
|
||||
m++; // skip L prediction border
|
||||
}
|
||||
}
|
||||
|
||||
/* This function is used for debugging probability trees. */
|
||||
static void print_prob_tree(vp8_prob
|
||||
coef_probs[BLOCK_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][vp8_coef_tokens-1])
|
||||
{
|
||||
/* print coef probability tree */
|
||||
int i,j,k,l;
|
||||
FILE* f = fopen("enc_tree_probs.txt", "a");
|
||||
fprintf(f, "{\n");
|
||||
for (i = 0; i < BLOCK_TYPES; i++)
|
||||
{
|
||||
fprintf(f, " {\n");
|
||||
for (j = 0; j < COEF_BANDS; j++)
|
||||
{
|
||||
fprintf(f, " {\n");
|
||||
for (k = 0; k < PREV_COEF_CONTEXTS; k++)
|
||||
{
|
||||
fprintf(f, " {");
|
||||
for (l = 0; l < MAX_ENTROPY_TOKENS - 1; l++)
|
||||
{
|
||||
fprintf(f, "%3u, ",
|
||||
(unsigned int)(coef_probs [i][j][k][l]));
|
||||
}
|
||||
fprintf(f, " }\n");
|
||||
}
|
||||
fprintf(f, " }\n");
|
||||
}
|
||||
fprintf(f, " }\n");
|
||||
}
|
||||
fprintf(f, "}\n");
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
static void sum_probs_over_prev_coef_context(
|
||||
const unsigned int probs[PREV_COEF_CONTEXTS][vp8_coef_tokens],
|
||||
unsigned int* out)
|
||||
{
|
||||
int i, j;
|
||||
for (i=0; i < vp8_coef_tokens; ++i)
|
||||
{
|
||||
for (j=0; j < PREV_COEF_CONTEXTS; ++j)
|
||||
{
|
||||
const int tmp = out[i];
|
||||
out[i] += probs[j][i];
|
||||
/* check for wrap */
|
||||
if (out[i] < tmp)
|
||||
out[i] = UINT_MAX;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int prob_update_savings(const unsigned int *ct,
|
||||
const vp8_prob oldp, const vp8_prob newp,
|
||||
const vp8_prob upd)
|
||||
{
|
||||
const int old_b = vp8_cost_branch(ct, oldp);
|
||||
const int new_b = vp8_cost_branch(ct, newp);
|
||||
const int update_b = 8 +
|
||||
((vp8_cost_one(upd) - vp8_cost_zero(upd)) >> 8);
|
||||
|
||||
return old_b - new_b - update_b;
|
||||
}
|
||||
|
||||
static int independent_coef_context_savings(VP8_COMP *cpi)
|
||||
{
|
||||
int savings = 0;
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
int j = 0;
|
||||
do
|
||||
{
|
||||
int k = 0;
|
||||
unsigned int prev_coef_count_sum[vp8_coef_tokens] = {0};
|
||||
int prev_coef_savings[vp8_coef_tokens] = {0};
|
||||
/* Calculate new probabilities given the constraint that
|
||||
* they must be equal over the prev coef contexts
|
||||
*/
|
||||
if (cpi->common.frame_type == KEY_FRAME)
|
||||
{
|
||||
/* Reset to default probabilities at key frames */
|
||||
sum_probs_over_prev_coef_context(vp8_default_coef_counts[i][j],
|
||||
prev_coef_count_sum);
|
||||
}
|
||||
else
|
||||
{
|
||||
sum_probs_over_prev_coef_context(cpi->coef_counts[i][j],
|
||||
prev_coef_count_sum);
|
||||
}
|
||||
do
|
||||
{
|
||||
/* at every context */
|
||||
|
||||
/* calc probs and branch cts for this frame only */
|
||||
//vp8_prob new_p [vp8_coef_tokens-1];
|
||||
//unsigned int branch_ct [vp8_coef_tokens-1] [2];
|
||||
|
||||
int t = 0; /* token/prob index */
|
||||
|
||||
vp8_tree_probs_from_distribution(
|
||||
vp8_coef_tokens, vp8_coef_encodings, vp8_coef_tree,
|
||||
cpi->frame_coef_probs[i][j][k],
|
||||
cpi->frame_branch_ct [i][j][k],
|
||||
prev_coef_count_sum,
|
||||
256, 1);
|
||||
|
||||
do
|
||||
{
|
||||
const unsigned int *ct = cpi->frame_branch_ct [i][j][k][t];
|
||||
const vp8_prob newp = cpi->frame_coef_probs [i][j][k][t];
|
||||
const vp8_prob oldp = cpi->common.fc.coef_probs [i][j][k][t];
|
||||
const vp8_prob upd = vp8_coef_update_probs [i][j][k][t];
|
||||
const int s = prob_update_savings(ct, oldp, newp, upd);
|
||||
|
||||
if (cpi->common.frame_type != KEY_FRAME ||
|
||||
(cpi->common.frame_type == KEY_FRAME && newp != oldp))
|
||||
prev_coef_savings[t] += s;
|
||||
}
|
||||
while (++t < vp8_coef_tokens - 1);
|
||||
}
|
||||
while (++k < PREV_COEF_CONTEXTS);
|
||||
k = 0;
|
||||
do
|
||||
{
|
||||
/* We only update probabilities if we can save bits, except
|
||||
* for key frames where we have to update all probabilities
|
||||
* to get the equal probabilities across the prev coef
|
||||
* contexts.
|
||||
*/
|
||||
if (prev_coef_savings[k] > 0 ||
|
||||
cpi->common.frame_type == KEY_FRAME)
|
||||
savings += prev_coef_savings[k];
|
||||
}
|
||||
while (++k < vp8_coef_tokens - 1);
|
||||
}
|
||||
while (++j < COEF_BANDS);
|
||||
}
|
||||
while (++i < BLOCK_TYPES);
|
||||
return savings;
|
||||
}
|
||||
|
||||
static int default_coef_context_savings(VP8_COMP *cpi)
|
||||
{
|
||||
int savings = 0;
|
||||
int i = 0;
|
||||
do
|
||||
{
|
||||
int j = 0;
|
||||
do
|
||||
{
|
||||
int k = 0;
|
||||
do
|
||||
{
|
||||
/* at every context */
|
||||
|
||||
/* calc probs and branch cts for this frame only */
|
||||
//vp8_prob new_p [vp8_coef_tokens-1];
|
||||
//unsigned int branch_ct [vp8_coef_tokens-1] [2];
|
||||
|
||||
int t = 0; /* token/prob index */
|
||||
|
||||
|
||||
vp8_tree_probs_from_distribution(
|
||||
vp8_coef_tokens, vp8_coef_encodings, vp8_coef_tree,
|
||||
cpi->frame_coef_probs [i][j][k],
|
||||
cpi->frame_branch_ct [i][j][k],
|
||||
cpi->coef_counts [i][j][k],
|
||||
256, 1
|
||||
);
|
||||
|
||||
do
|
||||
{
|
||||
const unsigned int *ct = cpi->frame_branch_ct [i][j][k][t];
|
||||
const vp8_prob newp = cpi->frame_coef_probs [i][j][k][t];
|
||||
const vp8_prob oldp = cpi->common.fc.coef_probs [i][j][k][t];
|
||||
const vp8_prob upd = vp8_coef_update_probs [i][j][k][t];
|
||||
const int s = prob_update_savings(ct, oldp, newp, upd);
|
||||
|
||||
if (s > 0)
|
||||
{
|
||||
savings += s;
|
||||
}
|
||||
}
|
||||
while (++t < vp8_coef_tokens - 1);
|
||||
}
|
||||
while (++k < PREV_COEF_CONTEXTS);
|
||||
}
|
||||
while (++j < COEF_BANDS);
|
||||
}
|
||||
while (++i < BLOCK_TYPES);
|
||||
return savings;
|
||||
}
|
||||
|
||||
int vp8_estimate_entropy_savings(VP8_COMP *cpi)
|
||||
{
|
||||
int i = 0;
|
||||
int savings = 0;
|
||||
|
||||
const int *const rfct = cpi->count_mb_ref_frame_usage;
|
||||
@ -1185,60 +1380,11 @@ int vp8_estimate_entropy_savings(VP8_COMP *cpi)
|
||||
}
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
int j = 0;
|
||||
if (cpi->oxcf.error_resilient_mode & VPX_ERROR_RESILIENT_PARTITIONS)
|
||||
savings += independent_coef_context_savings(cpi);
|
||||
else
|
||||
savings += default_coef_context_savings(cpi);
|
||||
|
||||
do
|
||||
{
|
||||
int k = 0;
|
||||
|
||||
do
|
||||
{
|
||||
/* at every context */
|
||||
|
||||
/* calc probs and branch cts for this frame only */
|
||||
//vp8_prob new_p [vp8_coef_tokens-1];
|
||||
//unsigned int branch_ct [vp8_coef_tokens-1] [2];
|
||||
|
||||
int t = 0; /* token/prob index */
|
||||
|
||||
vp8_tree_probs_from_distribution(
|
||||
vp8_coef_tokens, vp8_coef_encodings, vp8_coef_tree,
|
||||
cpi->frame_coef_probs [i][j][k], cpi->frame_branch_ct [i][j][k], cpi->coef_counts [i][j][k],
|
||||
256, 1
|
||||
);
|
||||
|
||||
do
|
||||
{
|
||||
const unsigned int *ct = cpi->frame_branch_ct [i][j][k][t];
|
||||
const vp8_prob newp = cpi->frame_coef_probs [i][j][k][t];
|
||||
|
||||
const vp8_prob old = cpi->common.fc.coef_probs [i][j][k][t];
|
||||
const vp8_prob upd = vp8_coef_update_probs [i][j][k][t];
|
||||
|
||||
const int old_b = vp8_cost_branch(ct, old);
|
||||
const int new_b = vp8_cost_branch(ct, newp);
|
||||
|
||||
const int update_b = 8 +
|
||||
((vp8_cost_one(upd) - vp8_cost_zero(upd)) >> 8);
|
||||
|
||||
const int s = old_b - new_b - update_b;
|
||||
|
||||
if (s > 0)
|
||||
savings += s;
|
||||
|
||||
|
||||
}
|
||||
while (++t < vp8_coef_tokens - 1);
|
||||
|
||||
|
||||
}
|
||||
while (++k < PREV_COEF_CONTEXTS);
|
||||
}
|
||||
while (++j < COEF_BANDS);
|
||||
}
|
||||
while (++i < BLOCK_TYPES);
|
||||
|
||||
return savings;
|
||||
}
|
||||
@ -1251,7 +1397,6 @@ static void update_coef_probs(VP8_COMP *cpi)
|
||||
|
||||
vp8_clear_system_state(); //__asm emms;
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
int j = 0;
|
||||
@ -1259,7 +1404,27 @@ static void update_coef_probs(VP8_COMP *cpi)
|
||||
do
|
||||
{
|
||||
int k = 0;
|
||||
int prev_coef_savings[vp8_coef_tokens - 1] = {0};
|
||||
if (cpi->oxcf.error_resilient_mode & VPX_ERROR_RESILIENT_PARTITIONS)
|
||||
{
|
||||
for (k = 0; k < PREV_COEF_CONTEXTS; ++k)
|
||||
{
|
||||
int t; /* token/prob index */
|
||||
for (t = 0; t < vp8_coef_tokens - 1; ++t)
|
||||
{
|
||||
const unsigned int *ct = cpi->frame_branch_ct [i][j]
|
||||
[k][t];
|
||||
const vp8_prob newp = cpi->frame_coef_probs[i][j][k][t];
|
||||
const vp8_prob oldp = cpi->common.fc.coef_probs[i][j]
|
||||
[k][t];
|
||||
const vp8_prob upd = vp8_coef_update_probs[i][j][k][t];
|
||||
|
||||
prev_coef_savings[t] +=
|
||||
prob_update_savings(ct, oldp, newp, upd);
|
||||
}
|
||||
}
|
||||
k = 0;
|
||||
}
|
||||
do
|
||||
{
|
||||
//note: use result from vp8_estimate_entropy_savings, so no need to call vp8_tree_probs_from_distribution here.
|
||||
@ -1279,21 +1444,33 @@ static void update_coef_probs(VP8_COMP *cpi)
|
||||
|
||||
do
|
||||
{
|
||||
const unsigned int *ct = cpi->frame_branch_ct [i][j][k][t];
|
||||
const vp8_prob newp = cpi->frame_coef_probs [i][j][k][t];
|
||||
|
||||
vp8_prob *Pold = cpi->common.fc.coef_probs [i][j][k] + t;
|
||||
const vp8_prob old = *Pold;
|
||||
const vp8_prob upd = vp8_coef_update_probs [i][j][k][t];
|
||||
|
||||
const int old_b = vp8_cost_branch(ct, old);
|
||||
const int new_b = vp8_cost_branch(ct, newp);
|
||||
int s = prev_coef_savings[t];
|
||||
int u = 0;
|
||||
|
||||
const int update_b = 8 +
|
||||
((vp8_cost_one(upd) - vp8_cost_zero(upd)) >> 8);
|
||||
if (!(cpi->oxcf.error_resilient_mode &
|
||||
VPX_ERROR_RESILIENT_PARTITIONS))
|
||||
{
|
||||
s = prob_update_savings(
|
||||
cpi->frame_branch_ct [i][j][k][t],
|
||||
*Pold, newp, upd);
|
||||
}
|
||||
|
||||
const int s = old_b - new_b - update_b;
|
||||
const int u = s > 0 ? 1 : 0;
|
||||
if (s > 0)
|
||||
u = 1;
|
||||
|
||||
/* Force updates on key frames if the new is different,
|
||||
* so that we can be sure we end up with equal probabilities
|
||||
* over the prev coef contexts.
|
||||
*/
|
||||
if ((cpi->oxcf.error_resilient_mode &
|
||||
VPX_ERROR_RESILIENT_PARTITIONS) &&
|
||||
cpi->common.frame_type == KEY_FRAME && newp != *Pold)
|
||||
u = 1;
|
||||
|
||||
vp8_write(w, u, upd);
|
||||
|
||||
@ -1590,6 +1767,14 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
|
||||
vp8_write_bit(bc, pc->ref_frame_sign_bias[ALTREF_FRAME]);
|
||||
}
|
||||
|
||||
if (cpi->oxcf.error_resilient_mode & VPX_ERROR_RESILIENT_PARTITIONS)
|
||||
{
|
||||
if (pc->frame_type == KEY_FRAME)
|
||||
pc->refresh_entropy_probs = 1;
|
||||
else
|
||||
pc->refresh_entropy_probs = 0;
|
||||
}
|
||||
|
||||
vp8_write_bit(bc, pc->refresh_entropy_probs);
|
||||
|
||||
if (pc->frame_type != KEY_FRAME)
|
||||
|
@ -4132,7 +4132,7 @@ static void encode_frame_to_data_rate
|
||||
|
||||
update_reference_frames(cm);
|
||||
|
||||
if (cpi->oxcf.error_resilient_mode == 1)
|
||||
if (cpi->oxcf.error_resilient_mode)
|
||||
{
|
||||
cm->refresh_entropy_probs = 0;
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ VP8_COMMON_SRCS-yes += common/blockd.c
|
||||
VP8_COMMON_SRCS-yes += common/coefupdateprobs.h
|
||||
VP8_COMMON_SRCS-yes += common/debugmodes.c
|
||||
VP8_COMMON_SRCS-yes += common/defaultcoefcounts.h
|
||||
VP8_COMMON_SRCS-yes += common/defaultcoefcounts.c
|
||||
VP8_COMMON_SRCS-yes += common/entropy.c
|
||||
VP8_COMMON_SRCS-yes += common/entropymode.c
|
||||
VP8_COMMON_SRCS-yes += common/entropymv.c
|
||||
|
@ -100,6 +100,23 @@ extern "C" {
|
||||
#define VPX_FRAME_IS_INVISIBLE 0x4 /**< frame should be decoded but will not
|
||||
be shown */
|
||||
|
||||
/*!\brief Error Resilient flags
|
||||
*
|
||||
* These flags define which error resilient features to enable in the
|
||||
* encoder. The flags are specified through the
|
||||
* vpx_codec_enc_cfg::g_error_resilient variable.
|
||||
*/
|
||||
typedef uint32_t vpx_codec_er_flags_t;
|
||||
#define VPX_ERROR_RESILIENT_DEFAULT 0x1 /**< Improve resiliency against
|
||||
losses of whole frames */
|
||||
#define VPX_ERROR_RESILIENT_PARTITIONS 0x2 /**< The frame partitions are
|
||||
independently decodable by the
|
||||
bool decoder, meaning that
|
||||
partitions can be decoded even
|
||||
though earlier partitions have
|
||||
been lost. Note that intra
|
||||
predicition is still done over
|
||||
the partition boundary. */
|
||||
|
||||
/*!\brief Encoder output packet variants
|
||||
*
|
||||
@ -289,13 +306,13 @@ extern "C" {
|
||||
struct vpx_rational g_timebase;
|
||||
|
||||
|
||||
/*!\brief Enable error resilient mode.
|
||||
/*!\brief Enable error resilient modes.
|
||||
*
|
||||
* Error resilient mode indicates to the encoder that it should take
|
||||
* measures appropriate for streaming over lossy or noisy links, if
|
||||
* possible. Set to 1 to enable this feature, 0 to disable it.
|
||||
* The error resilient bitfield indicates to the encoder which features
|
||||
* it should enable to take measures for streaming over lossy or noisy
|
||||
* links.
|
||||
*/
|
||||
unsigned int g_error_resilient;
|
||||
vpx_codec_er_flags_t g_error_resilient;
|
||||
|
||||
|
||||
/*!\brief Multi-pass Encoding Mode
|
||||
|
Loading…
x
Reference in New Issue
Block a user