|
|
|
@@ -96,46 +96,7 @@ static int get_qPy_pred(HEVCContext *s, int xC, int yC, |
|
|
|
lc->first_qp_group = !lc->tu.is_cu_qp_delta_coded; |
|
|
|
qPy_pred = s->sh.slice_qp; |
|
|
|
} else { |
|
|
|
qPy_pred = lc->qp_y; |
|
|
|
if (log2_cb_size < s->sps->log2_ctb_size - |
|
|
|
s->pps->diff_cu_qp_delta_depth) { |
|
|
|
static const int offsetX[8][8] = { |
|
|
|
{ -1, 1, 3, 1, 7, 1, 3, 1 }, |
|
|
|
{ 0, 0, 0, 0, 0, 0, 0, 0 }, |
|
|
|
{ 1, 3, 1, 3, 1, 3, 1, 3 }, |
|
|
|
{ 2, 2, 2, 2, 2, 2, 2, 2 }, |
|
|
|
{ 3, 5, 7, 5, 3, 5, 7, 5 }, |
|
|
|
{ 4, 4, 4, 4, 4, 4, 4, 4 }, |
|
|
|
{ 5, 7, 5, 7, 5, 7, 5, 7 }, |
|
|
|
{ 6, 6, 6, 6, 6, 6, 6, 6 } |
|
|
|
}; |
|
|
|
static const int offsetY[8][8] = { |
|
|
|
{ 7, 0, 1, 2, 3, 4, 5, 6 }, |
|
|
|
{ 0, 1, 2, 3, 4, 5, 6, 7 }, |
|
|
|
{ 1, 0, 3, 2, 5, 4, 7, 6 }, |
|
|
|
{ 0, 1, 2, 3, 4, 5, 6, 7 }, |
|
|
|
{ 3, 0, 1, 2, 7, 4, 5, 6 }, |
|
|
|
{ 0, 1, 2, 3, 4, 5, 6, 7 }, |
|
|
|
{ 1, 0, 3, 2, 5, 4, 7, 6 }, |
|
|
|
{ 0, 1, 2, 3, 4, 5, 6, 7 } |
|
|
|
}; |
|
|
|
int xC0b = (xC - (xC & ctb_size_mask)) >> s->sps->log2_min_cb_size; |
|
|
|
int yC0b = (yC - (yC & ctb_size_mask)) >> s->sps->log2_min_cb_size; |
|
|
|
int idxX = (xQgBase & ctb_size_mask) >> s->sps->log2_min_cb_size; |
|
|
|
int idxY = (yQgBase & ctb_size_mask) >> s->sps->log2_min_cb_size; |
|
|
|
int idx_mask = ctb_size_mask >> s->sps->log2_min_cb_size; |
|
|
|
int x, y; |
|
|
|
|
|
|
|
x = FFMIN(xC0b + offsetX[idxX][idxY], min_cb_width - 1); |
|
|
|
y = FFMIN(yC0b + (offsetY[idxX][idxY] & idx_mask), min_cb_height - 1); |
|
|
|
|
|
|
|
if (xC0b == (lc->start_of_tiles_x >> s->sps->log2_min_cb_size) && |
|
|
|
offsetX[idxX][idxY] == -1) { |
|
|
|
x = (lc->end_of_tiles_x >> s->sps->log2_min_cb_size) - 1; |
|
|
|
y = yC0b - 1; |
|
|
|
} |
|
|
|
qPy_pred = s->qp_y_tab[y * min_cb_width + x]; |
|
|
|
} |
|
|
|
qPy_pred = lc->qPy_pred; |
|
|
|
} |
|
|
|
|
|
|
|
// qPy_a |
|
|
|
|