beta0 and beta1 will always be the sametags/n2.4
@@ -339,7 +339,7 @@ static void deblocking_filter_CTB(HEVCContext *s, int x0, int y0) | |||||
{ | { | ||||
uint8_t *src; | uint8_t *src; | ||||
int x, y, x_end, y_end, chroma; | int x, y, x_end, y_end, chroma; | ||||
int c_tc[2], beta[2], tc[2]; | |||||
int c_tc[2], tc[2], beta; | |||||
uint8_t no_p[2] = { 0 }; | uint8_t no_p[2] = { 0 }; | ||||
uint8_t no_q[2] = { 0 }; | uint8_t no_q[2] = { 0 }; | ||||
@@ -375,13 +375,12 @@ static void deblocking_filter_CTB(HEVCContext *s, int x0, int y0) | |||||
const int bs0 = s->vertical_bs[(x >> 3) + (y >> 2) * s->bs_width]; | const int bs0 = s->vertical_bs[(x >> 3) + (y >> 2) * s->bs_width]; | ||||
const int bs1 = s->vertical_bs[(x >> 3) + ((y + 4) >> 2) * s->bs_width]; | const int bs1 = s->vertical_bs[(x >> 3) + ((y + 4) >> 2) * s->bs_width]; | ||||
if (bs0 || bs1) { | if (bs0 || bs1) { | ||||
const int qp0 = (get_qPy(s, x - 1, y) + get_qPy(s, x, y) + 1) >> 1; | |||||
const int qp1 = (get_qPy(s, x - 1, y + 4) + get_qPy(s, x, y + 4) + 1) >> 1; | |||||
const int qp = (get_qPy(s, x - 1, y) + get_qPy(s, x, y) + 1) >> 1; | |||||
beta[0] = betatable[av_clip(qp0 + beta_offset, 0, MAX_QP)]; | |||||
beta[1] = betatable[av_clip(qp1 + beta_offset, 0, MAX_QP)]; | |||||
tc[0] = bs0 ? TC_CALC(qp0, bs0) : 0; | |||||
tc[1] = bs1 ? TC_CALC(qp1, bs1) : 0; | |||||
beta = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; | |||||
tc[0] = bs0 ? TC_CALC(qp, bs0) : 0; | |||||
tc[1] = bs1 ? TC_CALC(qp, bs1) : 0; | |||||
src = &s->frame->data[LUMA][y * s->frame->linesize[LUMA] + (x << s->sps->pixel_shift)]; | src = &s->frame->data[LUMA][y * s->frame->linesize[LUMA] + (x << s->sps->pixel_shift)]; | ||||
if (pcmf) { | if (pcmf) { | ||||
no_p[0] = get_pcm(s, x - 1, y); | no_p[0] = get_pcm(s, x - 1, y); | ||||
@@ -437,16 +436,14 @@ static void deblocking_filter_CTB(HEVCContext *s, int x0, int y0) | |||||
const int bs0 = s->horizontal_bs[(x + y * s->bs_width) >> 2]; | const int bs0 = s->horizontal_bs[(x + y * s->bs_width) >> 2]; | ||||
const int bs1 = s->horizontal_bs[(x + 4 + y * s->bs_width) >> 2]; | const int bs1 = s->horizontal_bs[(x + 4 + y * s->bs_width) >> 2]; | ||||
if (bs0 || bs1) { | if (bs0 || bs1) { | ||||
const int qp0 = (get_qPy(s, x, y - 1) + get_qPy(s, x, y) + 1) >> 1; | |||||
const int qp1 = (get_qPy(s, x + 4, y - 1) + get_qPy(s, x + 4, y) + 1) >> 1; | |||||
const int qp = (get_qPy(s, x, y - 1) + get_qPy(s, x, y) + 1) >> 1; | |||||
tc_offset = x >= x0 ? cur_tc_offset : left_tc_offset; | tc_offset = x >= x0 ? cur_tc_offset : left_tc_offset; | ||||
beta_offset = x >= x0 ? cur_beta_offset : left_beta_offset; | beta_offset = x >= x0 ? cur_beta_offset : left_beta_offset; | ||||
beta[0] = betatable[av_clip(qp0 + beta_offset, 0, MAX_QP)]; | |||||
beta[1] = betatable[av_clip(qp1 + beta_offset, 0, MAX_QP)]; | |||||
tc[0] = bs0 ? TC_CALC(qp0, bs0) : 0; | |||||
tc[1] = bs1 ? TC_CALC(qp1, bs1) : 0; | |||||
beta = betatable[av_clip(qp + beta_offset, 0, MAX_QP)]; | |||||
tc[0] = bs0 ? TC_CALC(qp, bs0) : 0; | |||||
tc[1] = bs1 ? TC_CALC(qp, bs1) : 0; | |||||
src = &s->frame->data[LUMA][y * s->frame->linesize[LUMA] + (x << s->sps->pixel_shift)]; | src = &s->frame->data[LUMA][y * s->frame->linesize[LUMA] + (x << s->sps->pixel_shift)]; | ||||
if (pcmf) { | if (pcmf) { | ||||
no_p[0] = get_pcm(s, x, y - 1); | no_p[0] = get_pcm(s, x, y - 1); | ||||
@@ -79,20 +79,20 @@ typedef struct HEVCDSPContext { | |||||
ptrdiff_t srcstride, int width, int height); | ptrdiff_t srcstride, int width, int height); | ||||
void (*hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | ||||
int *beta, int *tc, | |||||
int beta, int *tc, | |||||
uint8_t *no_p, uint8_t *no_q); | uint8_t *no_p, uint8_t *no_q); | ||||
void (*hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | ||||
int *beta, int *tc, | |||||
int beta, int *tc, | |||||
uint8_t *no_p, uint8_t *no_q); | uint8_t *no_p, uint8_t *no_q); | ||||
void (*hevc_h_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_h_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, | ||||
int *tc, uint8_t *no_p, uint8_t *no_q); | int *tc, uint8_t *no_p, uint8_t *no_q); | ||||
void (*hevc_v_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_v_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, | ||||
int *tc, uint8_t *no_p, uint8_t *no_q); | int *tc, uint8_t *no_p, uint8_t *no_q); | ||||
void (*hevc_h_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_h_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, | ||||
int *beta, int *tc, | |||||
int beta, int *tc, | |||||
uint8_t *no_p, uint8_t *no_q); | uint8_t *no_p, uint8_t *no_q); | ||||
void (*hevc_v_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_v_loop_filter_luma_c)(uint8_t *pix, ptrdiff_t stride, | ||||
int *beta, int *tc, | |||||
int beta, int *tc, | |||||
uint8_t *no_p, uint8_t *no_q); | uint8_t *no_p, uint8_t *no_q); | ||||
void (*hevc_h_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, | void (*hevc_h_loop_filter_chroma_c)(uint8_t *pix, ptrdiff_t stride, | ||||
int *tc, uint8_t *no_p, | int *tc, uint8_t *no_p, | ||||
@@ -1164,7 +1164,7 @@ static void FUNC(weighted_pred_avg)(uint8_t denom, | |||||
static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, | static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, | ||||
ptrdiff_t _xstride, ptrdiff_t _ystride, | ptrdiff_t _xstride, ptrdiff_t _ystride, | ||||
int *_beta, int *_tc, | |||||
int beta, int *_tc, | |||||
uint8_t *_no_p, uint8_t *_no_q) | uint8_t *_no_p, uint8_t *_no_q) | ||||
{ | { | ||||
int d, j; | int d, j; | ||||
@@ -1172,6 +1172,8 @@ static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, | |||||
ptrdiff_t xstride = _xstride / sizeof(pixel); | ptrdiff_t xstride = _xstride / sizeof(pixel); | ||||
ptrdiff_t ystride = _ystride / sizeof(pixel); | ptrdiff_t ystride = _ystride / sizeof(pixel); | ||||
beta <<= BIT_DEPTH - 8; | |||||
for (j = 0; j < 2; j++) { | for (j = 0; j < 2; j++) { | ||||
const int dp0 = abs(P2 - 2 * P1 + P0); | const int dp0 = abs(P2 - 2 * P1 + P0); | ||||
const int dq0 = abs(Q2 - 2 * Q1 + Q0); | const int dq0 = abs(Q2 - 2 * Q1 + Q0); | ||||
@@ -1179,7 +1181,6 @@ static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix, | |||||
const int dq3 = abs(TQ2 - 2 * TQ1 + TQ0); | const int dq3 = abs(TQ2 - 2 * TQ1 + TQ0); | ||||
const int d0 = dp0 + dq0; | const int d0 = dp0 + dq0; | ||||
const int d3 = dp3 + dq3; | const int d3 = dp3 + dq3; | ||||
const int beta = _beta[j] << (BIT_DEPTH - 8); | |||||
const int tc = _tc[j] << (BIT_DEPTH - 8); | const int tc = _tc[j] << (BIT_DEPTH - 8); | ||||
const int no_p = _no_p[j]; | const int no_p = _no_p[j]; | ||||
const int no_q = _no_q[j]; | const int no_q = _no_q[j]; | ||||
@@ -1306,7 +1307,7 @@ static void FUNC(hevc_v_loop_filter_chroma)(uint8_t *pix, ptrdiff_t stride, | |||||
} | } | ||||
static void FUNC(hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | static void FUNC(hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | ||||
int *beta, int *tc, uint8_t *no_p, | |||||
int beta, int *tc, uint8_t *no_p, | |||||
uint8_t *no_q) | uint8_t *no_q) | ||||
{ | { | ||||
FUNC(hevc_loop_filter_luma)(pix, stride, sizeof(pixel), | FUNC(hevc_loop_filter_luma)(pix, stride, sizeof(pixel), | ||||
@@ -1314,7 +1315,7 @@ static void FUNC(hevc_h_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | |||||
} | } | ||||
static void FUNC(hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | static void FUNC(hevc_v_loop_filter_luma)(uint8_t *pix, ptrdiff_t stride, | ||||
int *beta, int *tc, uint8_t *no_p, | |||||
int beta, int *tc, uint8_t *no_p, | |||||
uint8_t *no_q) | uint8_t *no_q) | ||||
{ | { | ||||
FUNC(hevc_loop_filter_luma)(pix, sizeof(pixel), stride, | FUNC(hevc_loop_filter_luma)(pix, sizeof(pixel), stride, | ||||