Adds new Directional Intra prediction modes.
Adds 6 directional intra predictiom modes for 16x16 and 8x8 blocks. Change-Id: I25eccc0836f28d8d74922e4e9231568a648b47d1
This commit is contained in:
parent
520a7a2598
commit
c5ddb7f016
1
configure
vendored
1
configure
vendored
@ -229,6 +229,7 @@ EXPERIMENT_LIST="
|
||||
superblocks
|
||||
expanded_coef_context
|
||||
int_8x8fdct
|
||||
newintramodes
|
||||
"
|
||||
CONFIG_LIST="
|
||||
external_build
|
||||
|
@ -86,8 +86,16 @@ typedef enum
|
||||
DC_PRED, /* average of above and left pixels */
|
||||
V_PRED, /* vertical prediction */
|
||||
H_PRED, /* horizontal prediction */
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
D45_PRED, /* Directional 45 deg prediction [anti-clockwise from 0 deg hor] */
|
||||
D135_PRED, /* Directional 135 deg prediction [anti-clockwise from 0 deg hor] */
|
||||
D117_PRED, /* Directional 112 deg prediction [anti-clockwise from 0 deg hor] */
|
||||
D153_PRED, /* Directional 157 deg prediction [anti-clockwise from 0 deg hor] */
|
||||
D27_PRED, /* Directional 22 deg prediction [anti-clockwise from 0 deg hor] */
|
||||
D63_PRED, /* Directional 67 deg prediction [anti-clockwise from 0 deg hor] */
|
||||
#endif
|
||||
TM_PRED, /* Truemotion prediction */
|
||||
I8X8_PRED, /* 8x8 based prediction, each 8x8 has its own prediction mode */
|
||||
I8X8_PRED, /* 8x8 based prediction, each 8x8 has its own prediction mode */
|
||||
B_PRED, /* block based prediction, each block has its own prediction mode */
|
||||
|
||||
NEARESTMV,
|
||||
|
@ -17,6 +17,16 @@
|
||||
|
||||
const unsigned int kf_y_mode_cts[8][VP8_YMODES] =
|
||||
{
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
{12, 6, 5, 5, 5, 5, 5, 5, 5, 2, 22, 200},
|
||||
{25, 13, 13, 7, 7, 7, 7, 7, 7, 6, 27, 160},
|
||||
{31, 17, 18, 8, 8, 8, 8, 8, 8, 9, 26, 139},
|
||||
{40, 22, 23, 8, 8, 8, 8, 8, 8, 12, 27, 116},
|
||||
{53, 26, 28, 8, 8, 8, 8, 8, 8, 13, 26, 94},
|
||||
{68, 33, 35, 8, 8, 8, 8, 8, 8, 17, 20, 68},
|
||||
{78, 38, 38, 8, 8, 8, 8, 8, 8, 19, 16, 52},
|
||||
{89, 42, 42, 8, 8, 8, 8, 8, 8, 21, 12, 34},
|
||||
#else
|
||||
{17, 6, 5, 2, 22, 203},
|
||||
{27, 13, 13, 6, 27, 170},
|
||||
{35, 17, 18, 9, 26, 152},
|
||||
@ -25,29 +35,69 @@ const unsigned int kf_y_mode_cts[8][VP8_YMODES] =
|
||||
{73, 33, 36, 17, 20, 78},
|
||||
{88, 38, 39, 19, 16, 57},
|
||||
{99, 42, 43, 21, 12, 39},
|
||||
#endif
|
||||
};
|
||||
|
||||
static const unsigned int y_mode_cts [VP8_YMODES] = {
|
||||
106, 25, 21, 13, 16, 74};
|
||||
static const unsigned int y_mode_cts [VP8_YMODES] =
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
{98, 19, 15, 14, 14, 14, 14, 12, 12, 13, 16, 70};
|
||||
#else
|
||||
{106, 25, 21, 13, 16, 74};
|
||||
#endif
|
||||
|
||||
static const unsigned int uv_mode_cts [VP8_YMODES] [VP8_UV_MODES] ={
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
{ 200, 15, 15, 10, 10, 10, 10, 10, 10, 6},
|
||||
{ 130, 75, 10, 10, 10, 10, 10, 10, 10, 6},
|
||||
{ 130, 10, 75, 10, 10, 10, 10, 10, 10, 6},
|
||||
{ 130, 15, 10, 75, 10, 10, 10, 10, 10, 6},
|
||||
{ 150, 15, 10, 10, 75, 10, 10, 10, 10, 6},
|
||||
{ 150, 15, 10, 10, 10, 75, 10, 10, 10, 6},
|
||||
{ 150, 15, 10, 10, 10, 10, 75, 10, 10, 6},
|
||||
{ 150, 15, 10, 10, 10, 10, 10, 75, 10, 6},
|
||||
{ 150, 15, 10, 10, 10, 10, 10, 10, 75, 6},
|
||||
{ 160, 30, 30, 10, 10, 10, 10, 10, 10, 16},
|
||||
{ 132, 46, 40, 10, 10, 10, 10, 10, 10, 18}, /* never used */
|
||||
{ 150, 35, 41, 10, 10, 10, 10, 10, 10, 10},
|
||||
#else
|
||||
{ 210, 20, 20, 6},
|
||||
{ 180, 60, 10, 6},
|
||||
{ 150, 20, 80, 6},
|
||||
{ 170, 35, 35, 16},
|
||||
{ 142, 51, 45, 18}, /* never used */
|
||||
{ 160, 40, 46, 10},
|
||||
#endif
|
||||
};
|
||||
|
||||
static const unsigned int i8x8_mode_cts [VP8_UV_MODES] = {93, 69, 81, 13};
|
||||
static const unsigned int i8x8_mode_cts [VP8_I8X8_MODES] =
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
{73, 49, 61, 30, 30, 30, 30, 30, 30, 13};
|
||||
#else
|
||||
{93, 69, 81, 13};
|
||||
#endif
|
||||
|
||||
static const unsigned int kf_uv_mode_cts [VP8_YMODES] [VP8_UV_MODES] ={
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
{ 160, 24, 24, 20, 20, 20, 20, 20, 20, 8},
|
||||
{ 102, 64, 30, 20, 20, 20, 20, 20, 20, 10},
|
||||
{ 102, 30, 64, 20, 20, 20, 20, 20, 20, 10},
|
||||
{ 102, 33, 20, 64, 20, 20, 20, 20, 20, 14},
|
||||
{ 102, 33, 20, 20, 64, 20, 20, 20, 20, 14},
|
||||
{ 122, 33, 20, 20, 20, 64, 20, 20, 20, 14},
|
||||
{ 102, 33, 20, 20, 20, 20, 64, 20, 20, 14},
|
||||
{ 102, 33, 20, 20, 20, 20, 20, 64, 20, 14},
|
||||
{ 102, 33, 20, 20, 20, 20, 20, 20, 64, 14},
|
||||
{ 132, 36, 30, 20, 20, 20, 20, 20, 20, 18},
|
||||
{ 122, 41, 35, 20, 20, 20, 20, 20, 20, 18}, /* never used */
|
||||
{ 122, 41, 35, 20, 20, 20, 20, 20, 20, 18},
|
||||
#else
|
||||
{ 180, 34, 34, 8},
|
||||
{ 132, 74, 40, 10},
|
||||
{ 132, 40, 74, 10},
|
||||
{ 152, 46, 40, 18},
|
||||
{ 142, 51, 45, 18}, /* never used */
|
||||
{ 142, 51, 45, 18},
|
||||
#endif
|
||||
};
|
||||
|
||||
static const unsigned int bmode_cts[VP8_BINTRAMODES] =
|
||||
@ -133,7 +183,7 @@ const vp8_prob vp8_mbsplit_probs [VP8_NUMMBSPLITS-1] = { 110, 111, 150};
|
||||
|
||||
/* Array indices are identical to previously-existing INTRAMODECONTEXTNODES. */
|
||||
|
||||
const vp8_tree_index vp8_bmode_tree[18] = /* INTRAMODECONTEXTNODE value */
|
||||
const vp8_tree_index vp8_bmode_tree[VP8_BINTRAMODES*2-2] = /* INTRAMODECONTEXTNODE value */
|
||||
{
|
||||
-B_DC_PRED, 2, /* 0 = DC_NODE */
|
||||
-B_TM_PRED, 4, /* 1 = TM_NODE */
|
||||
@ -146,6 +196,67 @@ const vp8_tree_index vp8_bmode_tree[18] = /* INTRAMODECONTEXTNODE value */
|
||||
-B_HD_PRED, -B_HU_PRED /* 8 = HD_NODE */
|
||||
};
|
||||
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
/* Again, these trees use the same probability indices as their
|
||||
explicitly-programmed predecessors. */
|
||||
const vp8_tree_index vp8_ymode_tree[VP8_YMODES*2-2] =
|
||||
{
|
||||
2, 14,
|
||||
-DC_PRED, 4,
|
||||
6, 8,
|
||||
-D45_PRED, -D135_PRED,
|
||||
10, 12,
|
||||
-D117_PRED, -D153_PRED,
|
||||
-D27_PRED, -D63_PRED,
|
||||
16, 18,
|
||||
-V_PRED, -H_PRED,
|
||||
-TM_PRED, 20,
|
||||
-B_PRED, -I8X8_PRED
|
||||
};
|
||||
|
||||
const vp8_tree_index vp8_kf_ymode_tree[VP8_YMODES*2-2] =
|
||||
{
|
||||
2, 14,
|
||||
-DC_PRED, 4,
|
||||
6, 8,
|
||||
-D45_PRED, -D135_PRED,
|
||||
10, 12,
|
||||
-D117_PRED, -D153_PRED,
|
||||
-D27_PRED, -D63_PRED,
|
||||
16, 18,
|
||||
-V_PRED, -H_PRED,
|
||||
-TM_PRED, 20,
|
||||
-B_PRED, -I8X8_PRED
|
||||
};
|
||||
|
||||
const vp8_tree_index vp8_i8x8_mode_tree[VP8_I8X8_MODES*2-2] =
|
||||
{
|
||||
2, 14,
|
||||
-DC_PRED, 4,
|
||||
6, 8,
|
||||
-D45_PRED, -D135_PRED,
|
||||
10, 12,
|
||||
-D117_PRED, -D153_PRED,
|
||||
-D27_PRED, -D63_PRED,
|
||||
-V_PRED, 16,
|
||||
-H_PRED, -TM_PRED
|
||||
};
|
||||
|
||||
const vp8_tree_index vp8_uv_mode_tree[VP8_UV_MODES*2-2] =
|
||||
{
|
||||
2, 14,
|
||||
-DC_PRED, 4,
|
||||
6, 8,
|
||||
-D45_PRED, -D135_PRED,
|
||||
10, 12,
|
||||
-D117_PRED, -D153_PRED,
|
||||
-D27_PRED, -D63_PRED,
|
||||
-V_PRED, 16,
|
||||
-H_PRED, -TM_PRED
|
||||
};
|
||||
|
||||
#else /* CONFIG_NEWINTRAMODES */
|
||||
|
||||
/* Again, these trees use the same probability indices as their
|
||||
explicitly-programmed predecessors. */
|
||||
const vp8_tree_index vp8_ymode_tree[10] =
|
||||
@ -179,6 +290,8 @@ const vp8_tree_index vp8_uv_mode_tree[6] =
|
||||
-H_PRED, -TM_PRED
|
||||
};
|
||||
|
||||
#endif /* CONFIG_NEWINTRAMODES */
|
||||
|
||||
const vp8_tree_index vp8_mbsplit_tree[6] =
|
||||
{
|
||||
-3, 2,
|
||||
@ -282,10 +395,10 @@ void vp8_init_mbmode_probs(VP8_COMMON *x)
|
||||
}
|
||||
|
||||
vp8_tree_probs_from_distribution(
|
||||
VP8_UV_MODES, vp8_i8x8_mode_encodings, vp8_i8x8_mode_tree,
|
||||
VP8_I8X8_MODES, vp8_i8x8_mode_encodings, vp8_i8x8_mode_tree,
|
||||
x->i8x8_mode_prob, bct, i8x8_mode_cts,
|
||||
256, 1
|
||||
);
|
||||
256, 1);
|
||||
|
||||
vpx_memcpy(x->fc.sub_mv_ref_prob, sub_mv_ref_prob, sizeof(sub_mv_ref_prob));
|
||||
|
||||
}
|
||||
@ -448,7 +561,7 @@ void vp8_update_mode_context(VP8_COMMON *pc)
|
||||
void print_mode_contexts(VP8_COMMON *pc)
|
||||
{
|
||||
int j, i;
|
||||
printf("====================\n");
|
||||
printf("\n====================\n");
|
||||
for(j=0; j<6; j++)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
|
@ -149,6 +149,14 @@ static void lf_init_lut(loop_filter_info_n *lfi)
|
||||
}
|
||||
|
||||
lfi->mode_lf_lut[DC_PRED] = 1;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
lfi->mode_lf_lut[D45_PRED] = 1;
|
||||
lfi->mode_lf_lut[D135_PRED] = 1;
|
||||
lfi->mode_lf_lut[D117_PRED] = 1;
|
||||
lfi->mode_lf_lut[D153_PRED] = 1;
|
||||
lfi->mode_lf_lut[D27_PRED] = 1;
|
||||
lfi->mode_lf_lut[D63_PRED] = 1;
|
||||
#endif
|
||||
lfi->mode_lf_lut[V_PRED] = 1;
|
||||
lfi->mode_lf_lut[H_PRED] = 1;
|
||||
lfi->mode_lf_lut[TM_PRED] = 1;
|
||||
|
@ -32,6 +32,14 @@ static const unsigned char MB_PREDICTION_MODE_colors[MB_MODE_COUNT][3] =
|
||||
{ RGB_TO_YUV(0x98FB98) }, /* PaleGreen */
|
||||
{ RGB_TO_YUV(0x00FF00) }, /* Green */
|
||||
{ RGB_TO_YUV(0xADFF2F) }, /* GreenYellow */
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
{ RGB_TO_YUV(0x8F0000) }, /* Dark Red */
|
||||
{ RGB_TO_YUV(0x008F8F) }, /* Dark Cyan */
|
||||
{ RGB_TO_YUV(0x008F8F) }, /* Dark Cyan */
|
||||
{ RGB_TO_YUV(0x008F8F) }, /* Dark Cyan */
|
||||
{ RGB_TO_YUV(0x8F0000) }, /* Dark Red */
|
||||
{ RGB_TO_YUV(0x8F0000) }, /* Dark Red */
|
||||
#endif
|
||||
{ RGB_TO_YUV(0x228B22) }, /* ForestGreen */
|
||||
{ RGB_TO_YUV(0x006400) }, /* DarkGreen */
|
||||
{ RGB_TO_YUV(0x98F5FF) }, /* Cadet Blue */
|
||||
@ -39,6 +47,7 @@ static const unsigned char MB_PREDICTION_MODE_colors[MB_MODE_COUNT][3] =
|
||||
{ RGB_TO_YUV(0x00008B) }, /* Dark blue */
|
||||
{ RGB_TO_YUV(0x551A8B) }, /* Purple */
|
||||
{ RGB_TO_YUV(0xFF0000) } /* Red */
|
||||
{ RGB_TO_YUV(0xCC33FF) }, /* Magenta */
|
||||
};
|
||||
|
||||
static const unsigned char B_PREDICTION_MODE_colors[B_MODE_COUNT][3] =
|
||||
|
@ -8,7 +8,7 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include "vpx_ports/config.h"
|
||||
#include "recon.h"
|
||||
#include "reconintra.h"
|
||||
@ -17,6 +17,217 @@
|
||||
/* For skip_recon_mb(), add vp8_build_intra_predictors_mby_s(MACROBLOCKD *x) and
|
||||
* vp8_build_intra_predictors_mbuv_s(MACROBLOCKD *x).
|
||||
*/
|
||||
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
void d27_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col)
|
||||
{
|
||||
int r, c, h, w, v;
|
||||
int a, b;
|
||||
r = 0;
|
||||
for (c = 0; c < n-2; c++)
|
||||
{
|
||||
if (c&1)
|
||||
a = yleft_col[r + 1];
|
||||
else
|
||||
a = (yleft_col[r] + yleft_col[r + 1] + 1) >> 1;
|
||||
b = yabove_row[c + 2];
|
||||
ypred_ptr[c] = (2 * a + (c + 1) * b + (c + 3)/2) / (c + 3);
|
||||
}
|
||||
for (r = 1; r < n/2 - 1; r++)
|
||||
{
|
||||
for (c = 0; c < n - 2 - 2 * r; c++)
|
||||
{
|
||||
if (c&1)
|
||||
a = yleft_col[r + 1];
|
||||
else
|
||||
a = (yleft_col[r] + yleft_col[r + 1] + 1) >> 1;
|
||||
b = ypred_ptr[(r - 1) * y_stride + c + 2];
|
||||
ypred_ptr[r * y_stride + c] = (2 * a + (c + 1) * b + (c + 3)/2) / (c + 3);
|
||||
}
|
||||
}
|
||||
for (; r < n - 1; ++r)
|
||||
{
|
||||
for (c = 0; c < n; c++)
|
||||
{
|
||||
v = (c & 1 ? yleft_col[r + 1] : (yleft_col[r] + yleft_col[r + 1] + 1) >> 1);
|
||||
h = r - c/2;
|
||||
ypred_ptr[h * y_stride + c] = v;
|
||||
}
|
||||
}
|
||||
c = 0;
|
||||
r = n - 1;
|
||||
ypred_ptr[r * y_stride] = (ypred_ptr[(r - 1) * y_stride] +
|
||||
yleft_col[r] + 1) >> 1;
|
||||
for (r = n - 2; r >= n/2; --r)
|
||||
{
|
||||
w = c + (n - 1 - r) * 2;
|
||||
ypred_ptr[r * y_stride + w] = (ypred_ptr[(r - 1) * y_stride + w] +
|
||||
ypred_ptr[r * y_stride + w - 1] + 1) >> 1;
|
||||
}
|
||||
for (c = 1; c < n; c++)
|
||||
{
|
||||
for (r = n - 1; r >= n/2 + c/2; --r)
|
||||
{
|
||||
w = c + (n - 1 - r) * 2;
|
||||
ypred_ptr[r * y_stride + w] = (ypred_ptr[(r - 1) * y_stride + w] +
|
||||
ypred_ptr[r * y_stride + w - 1] + 1) >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void d63_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col)
|
||||
{
|
||||
int r, c, h, w, v;
|
||||
int a, b;
|
||||
c = 0;
|
||||
for (r = 0; r < n-2; r++)
|
||||
{
|
||||
if (r&1)
|
||||
a = yabove_row[c + 1];
|
||||
else
|
||||
a = (yabove_row[c] + yabove_row[c + 1] + 1) >> 1;
|
||||
b = yleft_col[r + 2];
|
||||
ypred_ptr[r * y_stride] = (2 * a + (r + 1) * b + (r + 3)/2) / (r + 3);
|
||||
}
|
||||
for (c = 1; c < n/2 - 1; c++)
|
||||
{
|
||||
for (r = 0; r < n - 2 - 2 * c; r++)
|
||||
{
|
||||
if (r&1)
|
||||
a = yabove_row[c + 1];
|
||||
else
|
||||
a = (yabove_row[c] + yabove_row[c + 1] + 1) >> 1;
|
||||
b = ypred_ptr[(r + 2) * y_stride + c - 1];
|
||||
ypred_ptr[r * y_stride + c] = (2 * a + (c + 1) * b + (c + 3)/2) / (c + 3);
|
||||
}
|
||||
}
|
||||
for (; c < n - 1; ++c)
|
||||
{
|
||||
for (r = 0; r < n; r++)
|
||||
{
|
||||
v = (r & 1 ? yabove_row[c + 1] : (yabove_row[c] + yabove_row[c + 1] + 1) >> 1);
|
||||
w = c - r/2;
|
||||
ypred_ptr[r * y_stride + w] = v;
|
||||
}
|
||||
}
|
||||
r = 0;
|
||||
c = n - 1;
|
||||
ypred_ptr[c] = (ypred_ptr[(c - 1)] + yabove_row[c] + 1) >> 1;
|
||||
for (c = n - 2; c >= n/2; --c)
|
||||
{
|
||||
h = r + (n - 1 - c) * 2;
|
||||
ypred_ptr[h * y_stride + c] = (ypred_ptr[h * y_stride + c - 1] +
|
||||
ypred_ptr[(h - 1) * y_stride + c] + 1) >> 1;
|
||||
}
|
||||
for (r = 1; r < n; r++)
|
||||
{
|
||||
for (c = n - 1; c >= n/2 + r/2; --c)
|
||||
{
|
||||
h = r + (n - 1 - c) * 2;
|
||||
ypred_ptr[h * y_stride + c] = (ypred_ptr[h * y_stride + c - 1] +
|
||||
ypred_ptr[(h - 1) * y_stride + c] + 1) >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void d45_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col)
|
||||
{
|
||||
int r, c;
|
||||
for (r = 0; r < n - 1; ++r)
|
||||
{
|
||||
for (c = 0; c <= r; ++c)
|
||||
{
|
||||
ypred_ptr[(r - c) * y_stride + c] =
|
||||
(yabove_row[r+1] * (c + 1) +
|
||||
yleft_col[r+1] * (r - c + 1) + r/2 + 1) / (r + 2);
|
||||
}
|
||||
}
|
||||
for (c = 0; c <= r; ++c)
|
||||
{
|
||||
int yabove_ext = yabove_row[r]; //2*yabove_row[r] - yabove_row[r-1];
|
||||
int yleft_ext = yleft_col[r]; //2*yleft_col[r] - yleft_col[r-1];
|
||||
yabove_ext = (yabove_ext > 255 ? 255 : (yabove_ext < 0 ? 0 : yabove_ext));
|
||||
yleft_ext = (yleft_ext > 255 ? 255 : (yleft_ext < 0 ? 0 : yleft_ext));
|
||||
ypred_ptr[(r - c) * y_stride + c] =
|
||||
(yabove_ext * (c + 1) +
|
||||
yleft_ext * (r - c + 1) + r/2 + 1) / (r + 2);
|
||||
}
|
||||
for (r = 1; r < n; ++r)
|
||||
{
|
||||
for (c = n - r; c < n; ++c)
|
||||
ypred_ptr[r * y_stride + c] = (ypred_ptr[(r - 1) * y_stride + c] +
|
||||
ypred_ptr[r * y_stride + c - 1] + 1) >> 1;
|
||||
}
|
||||
}
|
||||
|
||||
void d117_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col)
|
||||
{
|
||||
int r, c;
|
||||
for (c = 0; c < n; c++)
|
||||
ypred_ptr[c] = (yabove_row[c-1] + yabove_row[c] + 1) >> 1;
|
||||
ypred_ptr += y_stride;
|
||||
for (c = 0; c < n; c++)
|
||||
ypred_ptr[c] = yabove_row[c-1];
|
||||
ypred_ptr += y_stride;
|
||||
for (r = 2; r < n; ++r)
|
||||
{
|
||||
ypred_ptr[0] = yleft_col[r - 2];
|
||||
for (c = 1; c < n; c++)
|
||||
ypred_ptr[c] = ypred_ptr[-2*y_stride+c-1];
|
||||
ypred_ptr += y_stride;
|
||||
}
|
||||
}
|
||||
|
||||
void d135_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col)
|
||||
{
|
||||
int r, c;
|
||||
ypred_ptr[0] = yabove_row[-1];
|
||||
for (c = 1; c < n; c++)
|
||||
ypred_ptr[c] = yabove_row[c - 1];
|
||||
for (r = 1; r < n; ++r)
|
||||
ypred_ptr[r * y_stride] = yleft_col[r - 1];
|
||||
|
||||
ypred_ptr += y_stride;
|
||||
for (r = 1; r < n; ++r)
|
||||
{
|
||||
for (c = 1; c < n; c++)
|
||||
{
|
||||
ypred_ptr[c] = ypred_ptr[-y_stride + c - 1];
|
||||
}
|
||||
ypred_ptr += y_stride;
|
||||
}
|
||||
}
|
||||
|
||||
void d153_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col)
|
||||
{
|
||||
int r, c;
|
||||
ypred_ptr[0] = (yabove_row[-1] + yleft_col[0] + 1) >> 1;
|
||||
for (r = 1; r < n; r++)
|
||||
ypred_ptr[r * y_stride] = (yleft_col[r-1] + yleft_col[r] + 1) >> 1;
|
||||
ypred_ptr++;
|
||||
ypred_ptr[0] = yabove_row[-1];
|
||||
for (r = 1; r < n; r++)
|
||||
ypred_ptr[r * y_stride] = yleft_col[r-1];
|
||||
ypred_ptr++;
|
||||
|
||||
for (c = 0; c < n - 2; c++)
|
||||
ypred_ptr[c] = yabove_row[c];
|
||||
ypred_ptr += y_stride;
|
||||
for (r = 1; r < n; ++r)
|
||||
{
|
||||
for (c = 0; c < n - 2; c++)
|
||||
ypred_ptr[c] = ypred_ptr[-y_stride+c-2];
|
||||
ypred_ptr += y_stride;
|
||||
}
|
||||
}
|
||||
#endif /* CONFIG_NEWINTRAMODES */
|
||||
|
||||
void vp8_recon_intra_mbuv(const vp8_recon_rtcd_vtable_t *rtcd, MACROBLOCKD *x)
|
||||
{
|
||||
int i;
|
||||
@ -64,7 +275,6 @@ void vp8_build_intra_predictors_mby_internal(MACROBLOCKD *x, unsigned char *ypre
|
||||
|
||||
if (x->left_available)
|
||||
{
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
{
|
||||
average += yleft_col[i];
|
||||
@ -134,6 +344,38 @@ void vp8_build_intra_predictors_mby_internal(MACROBLOCKD *x, unsigned char *ypre
|
||||
|
||||
}
|
||||
break;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
case D45_PRED:
|
||||
{
|
||||
d45_predictor(ypred_ptr, y_stride, 16, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D135_PRED:
|
||||
{
|
||||
d135_predictor(ypred_ptr, y_stride, 16, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D117_PRED:
|
||||
{
|
||||
d117_predictor(ypred_ptr, y_stride, 16, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D153_PRED:
|
||||
{
|
||||
d153_predictor(ypred_ptr, y_stride, 16, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D27_PRED:
|
||||
{
|
||||
d27_predictor(ypred_ptr, y_stride, 16, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D63_PRED:
|
||||
{
|
||||
d63_predictor(ypred_ptr, y_stride, 16, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#if CONIFG_I8X8
|
||||
case I8X8_PRED:
|
||||
#endif
|
||||
@ -313,6 +555,44 @@ void vp8_build_intra_predictors_mbuv_internal(MACROBLOCKD *x,
|
||||
|
||||
}
|
||||
break;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
case D45_PRED:
|
||||
{
|
||||
d45_predictor(upred_ptr, uv_stride, 8, uabove_row, uleft_col);
|
||||
d45_predictor(vpred_ptr, uv_stride, 8, vabove_row, vleft_col);
|
||||
}
|
||||
break;
|
||||
case D135_PRED:
|
||||
{
|
||||
d135_predictor(upred_ptr, uv_stride, 8, uabove_row, uleft_col);
|
||||
d135_predictor(vpred_ptr, uv_stride, 8, vabove_row, vleft_col);
|
||||
}
|
||||
break;
|
||||
case D117_PRED:
|
||||
{
|
||||
d117_predictor(upred_ptr, uv_stride, 8, uabove_row, uleft_col);
|
||||
d117_predictor(vpred_ptr, uv_stride, 8, vabove_row, vleft_col);
|
||||
}
|
||||
break;
|
||||
case D153_PRED:
|
||||
{
|
||||
d153_predictor(upred_ptr, uv_stride, 8, uabove_row, uleft_col);
|
||||
d153_predictor(vpred_ptr, uv_stride, 8, vabove_row, vleft_col);
|
||||
}
|
||||
break;
|
||||
case D27_PRED:
|
||||
{
|
||||
d27_predictor(upred_ptr, uv_stride, 8, uabove_row, uleft_col);
|
||||
d27_predictor(vpred_ptr, uv_stride, 8, vabove_row, vleft_col);
|
||||
}
|
||||
break;
|
||||
case D63_PRED:
|
||||
{
|
||||
d63_predictor(upred_ptr, uv_stride, 8, uabove_row, uleft_col);
|
||||
d63_predictor(vpred_ptr, uv_stride, 8, vabove_row, vleft_col);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case B_PRED:
|
||||
case NEARESTMV:
|
||||
case NEARMV:
|
||||
@ -403,7 +683,6 @@ void vp8_intra8x8_predict(BLOCKD *x,
|
||||
{
|
||||
for (c = 0; c < 8; c++)
|
||||
{
|
||||
|
||||
predictor[c] = yabove_row[c];
|
||||
}
|
||||
predictor += 16;
|
||||
@ -444,6 +723,38 @@ void vp8_intra8x8_predict(BLOCKD *x,
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
case D45_PRED:
|
||||
{
|
||||
d45_predictor(predictor, 16, 8, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D135_PRED:
|
||||
{
|
||||
d135_predictor(predictor, 16, 8, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D117_PRED:
|
||||
{
|
||||
d117_predictor(predictor, 16, 8, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D153_PRED:
|
||||
{
|
||||
d153_predictor(predictor, 16, 8, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D27_PRED:
|
||||
{
|
||||
d27_predictor(predictor, 16, 8, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
case D63_PRED:
|
||||
{
|
||||
d63_predictor(predictor, 16, 8, yabove_row, yleft_col);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -452,7 +763,6 @@ void vp8_comp_intra8x8_predict(BLOCKD *x,
|
||||
int mode, int second_mode,
|
||||
unsigned char *out_predictor)
|
||||
{
|
||||
|
||||
unsigned char predictor[2][8*16];
|
||||
int i, j;
|
||||
|
||||
@ -553,6 +863,38 @@ void vp8_intra_uv4x4_predict(BLOCKD *x,
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
case D45_PRED:
|
||||
{
|
||||
d45_predictor(predictor, 8, 4, above_row, left_col);
|
||||
}
|
||||
break;
|
||||
case D135_PRED:
|
||||
{
|
||||
d135_predictor(predictor, 8, 4, above_row, left_col);
|
||||
}
|
||||
break;
|
||||
case D117_PRED:
|
||||
{
|
||||
d117_predictor(predictor, 8, 4, above_row, left_col);
|
||||
}
|
||||
break;
|
||||
case D153_PRED:
|
||||
{
|
||||
d153_predictor(predictor, 8, 4, above_row, left_col);
|
||||
}
|
||||
break;
|
||||
case D27_PRED:
|
||||
{
|
||||
d27_predictor(predictor, 8, 4, above_row, left_col);
|
||||
}
|
||||
break;
|
||||
case D63_PRED:
|
||||
{
|
||||
d63_predictor(predictor, 8, 4, above_row, left_col);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,22 @@
|
||||
#ifndef __INC_RECONINTRA_H
|
||||
#define __INC_RECONINTRA_H
|
||||
|
||||
#include "blockd.h"
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
void d45_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col);
|
||||
void d135_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col);
|
||||
void d116_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col);
|
||||
void d153_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col);
|
||||
void d27_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col);
|
||||
void d64_predictor(unsigned char *ypred_ptr, int y_stride, int n,
|
||||
unsigned char *yabove_row, unsigned char *yleft_col);
|
||||
#endif /* CONFIG_NEWINTRAMODES */
|
||||
|
||||
extern void init_intra_left_above_pixels(MACROBLOCKD *x);
|
||||
|
||||
#endif
|
||||
|
@ -84,10 +84,12 @@ void vp8_arch_x86_common_init(VP8_COMMON *ctx)
|
||||
rtcd->recon.recon2 = vp8_recon2b_sse2;
|
||||
rtcd->recon.recon4 = vp8_recon4b_sse2;
|
||||
rtcd->recon.copy16x16 = vp8_copy_mem16x16_sse2;
|
||||
#if CONFIG_NEWINTRAMODES == 0
|
||||
rtcd->recon.build_intra_predictors_mbuv =
|
||||
vp8_build_intra_predictors_mbuv_sse2;
|
||||
rtcd->recon.build_intra_predictors_mbuv_s =
|
||||
vp8_build_intra_predictors_mbuv_s_sse2;
|
||||
#endif
|
||||
|
||||
rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_sse2;
|
||||
|
||||
@ -122,7 +124,7 @@ void vp8_arch_x86_common_init(VP8_COMMON *ctx)
|
||||
|
||||
if (flags & HAS_SSSE3)
|
||||
{
|
||||
#if CONFIG_ENHANCED_INTERP == 0 && CONFIG_HIGH_PRECISION_MV == 0
|
||||
#if CONFIG_ENHANCED_INTERP == 0 && CONFIG_HIGH_PRECISION_MV == 0 && CONFIG_SIXTEENTH_SUBPEL_UV == 0
|
||||
rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_ssse3;
|
||||
rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_ssse3;
|
||||
rtcd->subpix.sixtap8x4 = vp8_sixtap_predict8x4_ssse3;
|
||||
@ -131,10 +133,12 @@ void vp8_arch_x86_common_init(VP8_COMMON *ctx)
|
||||
rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_ssse3;
|
||||
#endif
|
||||
|
||||
#if CONFIG_NEWINTRAMODES == 0
|
||||
rtcd->recon.build_intra_predictors_mbuv =
|
||||
vp8_build_intra_predictors_mbuv_ssse3;
|
||||
rtcd->recon.build_intra_predictors_mbuv_s =
|
||||
vp8_build_intra_predictors_mbuv_s_ssse3;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -34,15 +34,18 @@ unsigned __int64 Sectionbits[500];
|
||||
#endif
|
||||
|
||||
#ifdef ENTROPY_STATS
|
||||
int intra_mode_stats[10][10][10];
|
||||
int intra_mode_stats[VP8_BINTRAMODES]
|
||||
[VP8_BINTRAMODES]
|
||||
[VP8_BINTRAMODES];
|
||||
static unsigned int tree_update_hist [BLOCK_TYPES]
|
||||
[COEF_BANDS]
|
||||
[PREV_COEF_CONTEXTS]
|
||||
[ENTROPY_NODES][2]={0};
|
||||
[ENTROPY_NODES] [2]={0};
|
||||
static unsigned int tree_update_hist_8x8 [BLOCK_TYPES_8X8]
|
||||
[COEF_BANDS]
|
||||
[PREV_COEF_CONTEXTS]
|
||||
[ENTROPY_NODES] [2]={0};
|
||||
|
||||
extern unsigned int active_section;
|
||||
#endif
|
||||
|
||||
@ -1224,6 +1227,7 @@ static void write_kfmodes(VP8_COMP *cpi)
|
||||
int row_delta[4] = { 0, +1, 0, -1};
|
||||
int col_delta[4] = {+1, -1, +1, +1};
|
||||
|
||||
//printf("write_kfmodes\n");
|
||||
if (c->mb_no_coeff_skip)
|
||||
{
|
||||
// Divide by 0 check. 0 case possible with segment features
|
||||
@ -1349,6 +1353,7 @@ static void write_kfmodes(VP8_COMP *cpi)
|
||||
#endif
|
||||
|
||||
write_bmode(bc, bm, c->kf_bmode_prob [A] [L]);
|
||||
//printf(" mode: %d\n", bm);
|
||||
#if CONFIG_COMP_INTRA_PRED
|
||||
if (uses_second)
|
||||
{
|
||||
@ -1362,12 +1367,16 @@ static void write_kfmodes(VP8_COMP *cpi)
|
||||
{
|
||||
write_i8x8_mode(bc, m->bmi[0].as_mode.first,
|
||||
c->i8x8_mode_prob);
|
||||
//printf(" mode: %d\n", m->bmi[0].as_mode.first); fflush(stdout);
|
||||
write_i8x8_mode(bc, m->bmi[2].as_mode.first,
|
||||
c->i8x8_mode_prob);
|
||||
//printf(" mode: %d\n", m->bmi[2].as_mode.first); fflush(stdout);
|
||||
write_i8x8_mode(bc, m->bmi[8].as_mode.first,
|
||||
c->i8x8_mode_prob);
|
||||
//printf(" mode: %d\n", m->bmi[8].as_mode.first); fflush(stdout);
|
||||
write_i8x8_mode(bc, m->bmi[10].as_mode.first,
|
||||
c->i8x8_mode_prob);
|
||||
//printf(" mode: %d\n", m->bmi[10].as_mode.first); fflush(stdout);
|
||||
}
|
||||
else
|
||||
write_uv_mode(bc, m->mbmi.uv_mode, c->kf_uv_mode_prob[ym]);
|
||||
|
@ -124,7 +124,7 @@ typedef struct
|
||||
#endif
|
||||
int mbmode_cost[2][MB_MODE_COUNT];
|
||||
int intra_uv_mode_cost[2][MB_MODE_COUNT];
|
||||
unsigned int bmode_costs[10][10][10];
|
||||
unsigned int bmode_costs[VP8_BINTRAMODES][VP8_BINTRAMODES][VP8_BINTRAMODES];
|
||||
unsigned int i8x8_mode_costs[MB_MODE_COUNT];
|
||||
unsigned int inter_bmode_costs[B_MODE_COUNT];
|
||||
|
||||
|
@ -71,22 +71,14 @@ static void adjust_act_zbin( VP8_COMP *cpi, MACROBLOCK *x );
|
||||
|
||||
|
||||
#ifdef MODE_STATS
|
||||
unsigned int inter_y_modes[MB_MODE_COUNT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
unsigned int inter_uv_modes[VP8_UV_MODES] = {0, 0, 0, 0};
|
||||
unsigned int inter_b_modes[B_MODE_COUNT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
unsigned int y_modes[VP8_YMODES] = {0, 0, 0, 0, 0, 0};
|
||||
unsigned int i8x8_modes[VP8_I8X8_MODES]={0 };
|
||||
unsigned int uv_modes[VP8_UV_MODES] = {0, 0, 0, 0};
|
||||
unsigned int uv_modes_y[VP8_YMODES][VP8_UV_MODES]=
|
||||
{
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 0, 0},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
unsigned int b_modes[B_MODE_COUNT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
unsigned int inter_y_modes[MB_MODE_COUNT];
|
||||
unsigned int inter_uv_modes[VP8_UV_MODES];
|
||||
unsigned int inter_b_modes[B_MODE_COUNT];
|
||||
unsigned int y_modes[VP8_YMODES];
|
||||
unsigned int i8x8_modes[VP8_I8X8_MODES];
|
||||
unsigned int uv_modes[VP8_UV_MODES];
|
||||
unsigned int uv_modes_y[VP8_YMODES][VP8_UV_MODES];
|
||||
unsigned int b_modes[B_MODE_COUNT];
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -140,7 +140,7 @@ extern int skip_false_count;
|
||||
|
||||
|
||||
#ifdef ENTROPY_STATS
|
||||
extern int intra_mode_stats[10][10][10];
|
||||
extern int intra_mode_stats[VP8_BINTRAMODES][VP8_BINTRAMODES][VP8_BINTRAMODES];
|
||||
#endif
|
||||
|
||||
#ifdef SPEEDSTATS
|
||||
@ -156,13 +156,13 @@ extern unsigned __int64 Sectionbits[500];
|
||||
#endif
|
||||
#ifdef MODE_STATS
|
||||
extern INT64 Sectionbits[500];
|
||||
extern int y_modes[VP8_YMODES] ;
|
||||
extern int i8x8_modes[VP8_I8X8_MODES];
|
||||
extern int uv_modes[VP8_UV_MODES] ;
|
||||
extern int uv_modes_y[VP8_YMODES][VP8_UV_MODES];
|
||||
extern int b_modes[B_MODE_COUNT];
|
||||
extern int inter_y_modes[MB_MODE_COUNT] ;
|
||||
extern int inter_uv_modes[VP8_UV_MODES] ;
|
||||
extern unsigned int y_modes[VP8_YMODES] ;
|
||||
extern unsigned int i8x8_modes[VP8_I8X8_MODES];
|
||||
extern unsigned int uv_modes[VP8_UV_MODES] ;
|
||||
extern unsigned int uv_modes_y[VP8_YMODES][VP8_UV_MODES];
|
||||
extern unsigned int b_modes[B_MODE_COUNT];
|
||||
extern unsigned int inter_y_modes[MB_MODE_COUNT] ;
|
||||
extern unsigned int inter_uv_modes[VP8_UV_MODES] ;
|
||||
extern unsigned int inter_b_modes[B_MODE_COUNT];
|
||||
#endif
|
||||
|
||||
@ -760,6 +760,14 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
|
||||
sf->thresh_mult[THR_V_PRED ] = 1000;
|
||||
sf->thresh_mult[THR_H_PRED ] = 1000;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
sf->thresh_mult[THR_D45_PRED ] = 1000;
|
||||
sf->thresh_mult[THR_D135_PRED] = 1000;
|
||||
sf->thresh_mult[THR_D117_PRED] = 1000;
|
||||
sf->thresh_mult[THR_D153_PRED] = 1000;
|
||||
sf->thresh_mult[THR_D27_PRED ] = 1000;
|
||||
sf->thresh_mult[THR_D63_PRED ] = 1000;
|
||||
#endif
|
||||
sf->thresh_mult[THR_B_PRED ] = 2000;
|
||||
sf->thresh_mult[THR_I8X8_PRED] = 2000;
|
||||
sf->thresh_mult[THR_TM ] = 1000;
|
||||
@ -803,6 +811,14 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->thresh_mult[THR_NEARMV ] = 0;
|
||||
sf->thresh_mult[THR_V_PRED ] = 1000;
|
||||
sf->thresh_mult[THR_H_PRED ] = 1000;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
sf->thresh_mult[THR_D45_PRED ] = 1000;
|
||||
sf->thresh_mult[THR_D135_PRED] = 1000;
|
||||
sf->thresh_mult[THR_D117_PRED] = 1000;
|
||||
sf->thresh_mult[THR_D153_PRED] = 1000;
|
||||
sf->thresh_mult[THR_D27_PRED ] = 1000;
|
||||
sf->thresh_mult[THR_D63_PRED ] = 1000;
|
||||
#endif
|
||||
sf->thresh_mult[THR_B_PRED ] = 2500;
|
||||
sf->thresh_mult[THR_I8X8_PRED] = 2500;
|
||||
sf->thresh_mult[THR_TM ] = 1000;
|
||||
@ -881,6 +897,14 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->thresh_mult[THR_TM ] = 1500;
|
||||
sf->thresh_mult[THR_V_PRED ] = 1500;
|
||||
sf->thresh_mult[THR_H_PRED ] = 1500;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
sf->thresh_mult[THR_D45_PRED ] = 1500;
|
||||
sf->thresh_mult[THR_D135_PRED] = 1500;
|
||||
sf->thresh_mult[THR_D117_PRED] = 1500;
|
||||
sf->thresh_mult[THR_D153_PRED] = 1500;
|
||||
sf->thresh_mult[THR_D27_PRED ] = 1500;
|
||||
sf->thresh_mult[THR_D63_PRED ] = 1500;
|
||||
#endif
|
||||
sf->thresh_mult[THR_B_PRED ] = 5000;
|
||||
sf->thresh_mult[THR_I8X8_PRED] = 5000;
|
||||
|
||||
@ -939,6 +963,14 @@ void vp8_set_speed_features(VP8_COMP *cpi)
|
||||
sf->thresh_mult[THR_TM ] = 2000;
|
||||
sf->thresh_mult[THR_V_PRED ] = 2000;
|
||||
sf->thresh_mult[THR_H_PRED ] = 2000;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
sf->thresh_mult[THR_D45_PRED ] = 2000;
|
||||
sf->thresh_mult[THR_D135_PRED] = 2000;
|
||||
sf->thresh_mult[THR_D117_PRED] = 2000;
|
||||
sf->thresh_mult[THR_D153_PRED] = 2000;
|
||||
sf->thresh_mult[THR_D27_PRED ] = 2000;
|
||||
sf->thresh_mult[THR_D63_PRED ] = 2000;
|
||||
#endif
|
||||
sf->thresh_mult[THR_B_PRED ] = 7500;
|
||||
sf->thresh_mult[THR_I8X8_PRED] = 7500;
|
||||
|
||||
@ -1719,6 +1751,16 @@ VP8_PTR vp8_create_compressor(VP8_CONFIG *oxcf)
|
||||
#ifdef ENTROPY_STATS
|
||||
init_context_counters();
|
||||
#endif
|
||||
#ifdef MODE_STATS
|
||||
vp8_zero(y_modes);
|
||||
vp8_zero(i8x8_modes);
|
||||
vp8_zero(uv_modes);
|
||||
vp8_zero(uv_modes_y);
|
||||
vp8_zero(b_modes);
|
||||
vp8_zero(inter_y_modes);
|
||||
vp8_zero(inter_uv_modes);
|
||||
vp8_zero(inter_b_modes);
|
||||
#endif
|
||||
|
||||
/*Initialize the feed-forward activity masking.*/
|
||||
cpi->activity_avg = 90<<12;
|
||||
@ -2006,32 +2048,49 @@ void vp8_remove_compressor(VP8_PTR *ptr)
|
||||
sprintf(modes_stats_file, "modes_q%03d.stt",cpi->common.base_qindex);
|
||||
f = fopen(modes_stats_file, "w");
|
||||
fprintf(f, "intra_mode in Intra Frames:\n");
|
||||
fprintf(f, "Y: %8d, %8d, %8d, %8d, %8d, %8d\n", y_modes[0], y_modes[1], y_modes[2], y_modes[3], y_modes[4], y_modes[5]);
|
||||
fprintf(f, "I8:%8d, %8d, %8d, %8d\n", i8x8_modes[0], i8x8_modes[1], i8x8_modes[2], i8x8_modes[3]);
|
||||
fprintf(f, "UV:%8d, %8d, %8d, %8d\n", uv_modes[0], uv_modes[1], uv_modes[2], uv_modes[3]);
|
||||
fprintf(f, "KeyFrame Y-UV:\n");
|
||||
{
|
||||
int i;
|
||||
for(i=0;i<VP8_YMODES;i++)
|
||||
{
|
||||
fprintf(f, "%2d:%8d, %8d, %8d, %8d\n",i,uv_modes_y[i][0],
|
||||
uv_modes_y[i][1], uv_modes_y[i][2], uv_modes_y[i][3]);
|
||||
}
|
||||
fprintf(f, "Y: ");
|
||||
for (i=0;i<VP8_YMODES;i++) fprintf(f, " %8d,", y_modes[i]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
fprintf(f, "Inter Y-UV:\n");
|
||||
{
|
||||
int i;
|
||||
fprintf(f, "I8: ");
|
||||
for (i=0;i<VP8_I8X8_MODES;i++) fprintf(f, " %8d,", i8x8_modes[i]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
{
|
||||
int i;
|
||||
fprintf(f, "UV: ");
|
||||
for (i=0;i<VP8_UV_MODES;i++) fprintf(f, " %8d,", uv_modes[i]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
{
|
||||
int i, j;
|
||||
fprintf(f, "KeyFrame Y-UV:\n");
|
||||
for(i=0;i<VP8_YMODES;i++)
|
||||
{
|
||||
fprintf(f, "%2d:%8d, %8d, %8d, %8d\n",i,cpi->y_uv_mode_count[i][0],
|
||||
cpi->y_uv_mode_count[i][1], cpi->y_uv_mode_count[i][2], cpi->y_uv_mode_count[i][3]);
|
||||
fprintf(f, "%2d:", i);
|
||||
for (j=0; j<VP8_UV_MODES;j++) fprintf(f, "%8d, ",uv_modes_y[i][j]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
}
|
||||
{
|
||||
int i, j;
|
||||
fprintf(f, "Inter Y-UV:\n");
|
||||
for(i=0;i<VP8_YMODES;i++)
|
||||
{
|
||||
fprintf(f, "%2d:", i);
|
||||
for (j=0; j<VP8_UV_MODES;j++) fprintf(f, "%8d, ",cpi->y_uv_mode_count[i][j]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
}
|
||||
fprintf(f, "B: ");
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 10; i++)
|
||||
fprintf(f, "B: ");
|
||||
for (i = 0; i < VP8_BINTRAMODES; i++)
|
||||
fprintf(f, "%8d, ", b_modes[i]);
|
||||
|
||||
fprintf(f, "\n");
|
||||
@ -2039,23 +2098,23 @@ void vp8_remove_compressor(VP8_PTR *ptr)
|
||||
}
|
||||
|
||||
fprintf(f, "Modes in Inter Frames:\n");
|
||||
fprintf(f,
|
||||
"Y: %8d, %8d, %8d, %8d, %8d, %8d, %8d, %8d, %8d, %8d, %8d\n",
|
||||
inter_y_modes[0], inter_y_modes[1], inter_y_modes[2],
|
||||
inter_y_modes[3], inter_y_modes[4], inter_y_modes[5],
|
||||
inter_y_modes[6], inter_y_modes[7], inter_y_modes[8],
|
||||
inter_y_modes[9], inter_y_modes[10]);
|
||||
fprintf(f, "UV:%8d, %8d, %8d, %8d\n", inter_uv_modes[0],
|
||||
inter_uv_modes[1], inter_uv_modes[2], inter_uv_modes[3]);
|
||||
fprintf(f, "B: ");
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 15; i++)
|
||||
fprintf(f, "%8d, ", inter_b_modes[i]);
|
||||
|
||||
fprintf(f, "Y: ");
|
||||
for (i=0;i<MB_MODE_COUNT;i++) fprintf(f, " %8d,", inter_y_modes[i]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
{
|
||||
int i;
|
||||
fprintf(f, "UV: ");
|
||||
for (i=0;i<VP8_UV_MODES;i++) fprintf(f, " %8d,", inter_uv_modes[i]);
|
||||
fprintf(f, "\n");
|
||||
}
|
||||
{
|
||||
int i;
|
||||
fprintf(f, "B: ");
|
||||
for (i = 0; i < B_MODE_COUNT; i++) fprintf(f, "%8d, ", inter_b_modes[i]);
|
||||
fprintf(f, "\n");
|
||||
|
||||
}
|
||||
fprintf(f, "P:%8d, %8d, %8d, %8d\n", count_mb_seg[0], count_mb_seg[1], count_mb_seg[2], count_mb_seg[3]);
|
||||
fprintf(f, "PB:%8d, %8d, %8d, %8d\n", inter_b_modes[LEFT4X4], inter_b_modes[ABOVE4X4], inter_b_modes[ZERO4X4], inter_b_modes[NEW4X4]);
|
||||
@ -2082,7 +2141,7 @@ void vp8_remove_compressor(VP8_PTR *ptr)
|
||||
|
||||
fprintf(fmode, " {");
|
||||
|
||||
for (k = 0; k < 10; k++)
|
||||
for (k = 0; k < VP8_BINTRAMODES; k++)
|
||||
{
|
||||
if (!intra_mode_stats[i][j][k])
|
||||
fprintf(fmode, " %5d, ", 1);
|
||||
|
@ -41,7 +41,12 @@
|
||||
#define AF_THRESH 25
|
||||
#define AF_THRESH2 100
|
||||
#define ARF_DECAY_THRESH 12
|
||||
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
#define MAX_MODES 42
|
||||
#else
|
||||
#define MAX_MODES 36
|
||||
#endif
|
||||
|
||||
#define MIN_THRESHMULT 32
|
||||
#define MAX_THRESHMULT 512
|
||||
@ -173,38 +178,46 @@ typedef enum
|
||||
|
||||
THR_V_PRED = 10,
|
||||
THR_H_PRED = 11,
|
||||
THR_TM = 12,
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
THR_D45_PRED,
|
||||
THR_D135_PRED,
|
||||
THR_D117_PRED,
|
||||
THR_D153_PRED,
|
||||
THR_D27_PRED,
|
||||
THR_D63_PRED,
|
||||
#endif
|
||||
THR_TM,
|
||||
|
||||
THR_NEWMV = 13,
|
||||
THR_NEWG = 14,
|
||||
THR_NEWA = 15,
|
||||
THR_NEWMV,
|
||||
THR_NEWG,
|
||||
THR_NEWA,
|
||||
|
||||
THR_SPLITMV = 16,
|
||||
THR_SPLITG = 17,
|
||||
THR_SPLITA = 18,
|
||||
THR_SPLITMV,
|
||||
THR_SPLITG,
|
||||
THR_SPLITA,
|
||||
|
||||
THR_B_PRED = 19,
|
||||
THR_I8X8_PRED = 20,
|
||||
THR_B_PRED,
|
||||
THR_I8X8_PRED,
|
||||
|
||||
THR_COMP_ZEROLG = 21,
|
||||
THR_COMP_NEARESTLG = 22,
|
||||
THR_COMP_NEARLG = 23,
|
||||
THR_COMP_ZEROLG,
|
||||
THR_COMP_NEARESTLG,
|
||||
THR_COMP_NEARLG,
|
||||
|
||||
THR_COMP_ZEROLA = 24,
|
||||
THR_COMP_NEARESTLA = 25,
|
||||
THR_COMP_NEARLA = 26,
|
||||
THR_COMP_ZEROLA,
|
||||
THR_COMP_NEARESTLA,
|
||||
THR_COMP_NEARLA,
|
||||
|
||||
THR_COMP_ZEROGA = 27,
|
||||
THR_COMP_NEARESTGA = 28,
|
||||
THR_COMP_NEARGA = 29,
|
||||
THR_COMP_ZEROGA,
|
||||
THR_COMP_NEARESTGA,
|
||||
THR_COMP_NEARGA,
|
||||
|
||||
THR_COMP_NEWLG = 30,
|
||||
THR_COMP_NEWLA = 31,
|
||||
THR_COMP_NEWGA = 32,
|
||||
THR_COMP_NEWLG,
|
||||
THR_COMP_NEWLA,
|
||||
THR_COMP_NEWGA,
|
||||
|
||||
THR_COMP_SPLITLG = 33,
|
||||
THR_COMP_SPLITLA = 34,
|
||||
THR_COMP_SPLITGA = 35,
|
||||
THR_COMP_SPLITLG,
|
||||
THR_COMP_SPLITLA,
|
||||
THR_COMP_SPLITGA,
|
||||
}
|
||||
THR_MODES;
|
||||
|
||||
|
@ -33,13 +33,13 @@ extern const MV_REFERENCE_FRAME vp8_ref_frame_order[MAX_MODES];
|
||||
|
||||
|
||||
#ifdef MODE_STATS
|
||||
extern int y_modes[VP8_YMODES];
|
||||
extern int uv_modes[VP8_UV_MODES];
|
||||
extern int b_modes[B_MODE_COUNT];
|
||||
extern unsigned int y_modes[VP8_YMODES];
|
||||
extern unsigned int uv_modes[VP8_UV_MODES];
|
||||
extern unsigned int b_modes[B_MODE_COUNT];
|
||||
|
||||
extern int inter_y_modes[MB_MODE_COUNT];
|
||||
extern int inter_uv_modes[VP8_UV_MODES];
|
||||
extern int inter_b_modes[B_MODE_COUNT];
|
||||
extern unsigned int inter_y_modes[MB_MODE_COUNT];
|
||||
extern unsigned int inter_uv_modes[VP8_UV_MODES];
|
||||
extern unsigned int inter_b_modes[B_MODE_COUNT];
|
||||
#endif
|
||||
|
||||
// Bits Per MB at different Q (Multiplied by 512)
|
||||
|
@ -100,6 +100,14 @@ const MB_PREDICTION_MODE vp8_mode_order[MAX_MODES] =
|
||||
|
||||
V_PRED,
|
||||
H_PRED,
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
D45_PRED,
|
||||
D135_PRED,
|
||||
D117_PRED,
|
||||
D153_PRED,
|
||||
D27_PRED,
|
||||
D63_PRED,
|
||||
#endif
|
||||
TM_PRED,
|
||||
|
||||
NEWMV,
|
||||
@ -154,6 +162,14 @@ const MV_REFERENCE_FRAME vp8_ref_frame_order[MAX_MODES] =
|
||||
|
||||
INTRA_FRAME,
|
||||
INTRA_FRAME,
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
INTRA_FRAME,
|
||||
INTRA_FRAME,
|
||||
INTRA_FRAME,
|
||||
INTRA_FRAME,
|
||||
INTRA_FRAME,
|
||||
INTRA_FRAME,
|
||||
#endif
|
||||
INTRA_FRAME,
|
||||
|
||||
LAST_FRAME,
|
||||
@ -191,9 +207,13 @@ const MV_REFERENCE_FRAME vp8_ref_frame_order[MAX_MODES] =
|
||||
|
||||
const MV_REFERENCE_FRAME vp8_second_ref_frame_order[MAX_MODES] =
|
||||
{
|
||||
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,
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
0, 0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
#endif
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
/* compound prediction modes */
|
||||
GOLDEN_FRAME,
|
||||
@ -898,7 +918,6 @@ static int rd_pick_intra4x4block(
|
||||
// Do we need to do this for mode2 also?
|
||||
if (mode==B_LD_PRED || mode==B_VL_PRED)
|
||||
continue;
|
||||
|
||||
rate = bmode_costs[mode];
|
||||
|
||||
#if CONFIG_COMP_INTRA_PRED
|
||||
@ -3017,6 +3036,14 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
|
||||
vp8_cost_bit( get_pred_prob( cm, xd, PRED_COMP ), 0 );
|
||||
}
|
||||
break;
|
||||
#if CONFIG_NEWINTRAMODES
|
||||
case D45_PRED:
|
||||
case D135_PRED:
|
||||
case D117_PRED:
|
||||
case D153_PRED:
|
||||
case D27_PRED:
|
||||
case D63_PRED:
|
||||
#endif
|
||||
case DC_PRED:
|
||||
case V_PRED:
|
||||
case H_PRED:
|
||||
|
Loading…
Reference in New Issue
Block a user