Merge "Allow precise classification for refmv mode context" into nextgenv2

This commit is contained in:
Jingning Han 2015-12-10 03:26:24 +00:00 коммит произвёл Gerrit Code Review
Родитель 48365e10bb 0d65cae638
Коммит 8edbe4d6db
3 изменённых файлов: 38 добавлений и 28 удалений

Просмотреть файл

@ -173,7 +173,7 @@ static const vpx_prob default_partition_probs[PARTITION_CONTEXTS]
#if CONFIG_REF_MV
static const vpx_prob default_newmv_prob[NEWMV_MODE_CONTEXTS] = {
230, 190, 150, 110, 70, 30,
200, 180, 150, 150, 110, 70, 60,
};
static const vpx_prob default_zeromv_prob[ZEROMV_MODE_CONTEXTS] = {
@ -181,7 +181,7 @@ static const vpx_prob default_zeromv_prob[ZEROMV_MODE_CONTEXTS] = {
};
static const vpx_prob default_refmv_prob[REFMV_MODE_CONTEXTS] = {
180, 230, 128
220, 220, 200, 200, 180, 128,
};
#endif

Просмотреть файл

@ -204,9 +204,9 @@ typedef enum {
#define SKIP_CONTEXTS 3
#if CONFIG_REF_MV
#define NEWMV_MODE_CONTEXTS 6
#define NEWMV_MODE_CONTEXTS 7
#define ZEROMV_MODE_CONTEXTS 2
#define REFMV_MODE_CONTEXTS 3
#define REFMV_MODE_CONTEXTS 6
#define ZEROMV_OFFSET 3
#define REFMV_OFFSET 4

Просмотреть файл

@ -242,7 +242,7 @@ static void setup_ref_mv_list(const VP10_COMMON *cm, const MACROBLOCKD *xd,
int bs = VPXMAX(xd->n8_w, xd->n8_h);
int has_tr = has_top_right(xd, mi_row, mi_col, bs);
mode_context[ref_frame] = 0;
*refmv_count = 0;
// Scan the first above row mode info.
@ -259,29 +259,6 @@ static void setup_ref_mv_list(const VP10_COMMON *cm, const MACROBLOCKD *xd,
nearest_refmv_count = *refmv_count;
mode_context[ref_frame] = 0;
switch (nearest_refmv_count) {
case 0:
mode_context[ref_frame] = 0;
break;
case 1:
mode_context[ref_frame] = (newmv_count > 0) ? 1 : 2;
mode_context[ref_frame] += (1 << REFMV_OFFSET);
break;
case 2:
default:
if (newmv_count >= 2)
mode_context[ref_frame] = 3;
else if (newmv_count == 1)
mode_context[ref_frame] = 4;
else
mode_context[ref_frame] = 5;
mode_context[ref_frame] += (2 << REFMV_OFFSET);
break;
}
if (prev_frame_mvs_base && cm->show_frame && cm->last_show_frame) {
int ref;
int blk_row, blk_col;
@ -350,6 +327,39 @@ static void setup_ref_mv_list(const VP10_COMMON *cm, const MACROBLOCKD *xd,
scan_col_mbmi(cm, xd, mi_row, mi_col, block, ref_frame,
-4, ref_mv_stack, refmv_count);
switch (nearest_refmv_count) {
case 0:
mode_context[ref_frame] |= 0;
if (*refmv_count >= 1)
mode_context[ref_frame] |= 1;
if (*refmv_count == 1)
mode_context[ref_frame] |= (1 << REFMV_OFFSET);
else if (*refmv_count >= 2)
mode_context[ref_frame] |= (2 << REFMV_OFFSET);
break;
case 1:
mode_context[ref_frame] |= (newmv_count > 0) ? 2 : 3;
if (*refmv_count == 1)
mode_context[ref_frame] |= (3 << REFMV_OFFSET);
else if (*refmv_count >= 2)
mode_context[ref_frame] |= (4 << REFMV_OFFSET);
break;
case 2:
default:
if (newmv_count >= 2)
mode_context[ref_frame] |= 4;
else if (newmv_count == 1)
mode_context[ref_frame] |= 5;
else
mode_context[ref_frame] |= 6;
mode_context[ref_frame] |= (5 << REFMV_OFFSET);
break;
}
// Rank the likelihood and assign nearest and near mvs.
len = nearest_refmv_count;
while (len > 0) {