|
|
|
@ -5854,53 +5854,7 @@ static void filter_mb_edgev( H264Context *h, uint8_t *pix, int stride, int16_t b |
|
|
|
|
tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1; |
|
|
|
|
h->s.dsp.h264_h_loop_filter_luma(pix, stride, alpha, beta, tc); |
|
|
|
|
} else { |
|
|
|
|
/* 16px edge length, because bS=4 is triggered by being at
|
|
|
|
|
* the edge of an intra MB, so all 4 bS are the same */ |
|
|
|
|
for( d = 0; d < 16; d++ ) { |
|
|
|
|
const int p0 = pix[-1]; |
|
|
|
|
const int p1 = pix[-2]; |
|
|
|
|
const int p2 = pix[-3]; |
|
|
|
|
|
|
|
|
|
const int q0 = pix[0]; |
|
|
|
|
const int q1 = pix[1]; |
|
|
|
|
const int q2 = pix[2]; |
|
|
|
|
|
|
|
|
|
if( FFABS( p0 - q0 ) < alpha && |
|
|
|
|
FFABS( p1 - p0 ) < beta && |
|
|
|
|
FFABS( q1 - q0 ) < beta ) { |
|
|
|
|
|
|
|
|
|
if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){ |
|
|
|
|
if( FFABS( p2 - p0 ) < beta) |
|
|
|
|
{ |
|
|
|
|
const int p3 = pix[-4]; |
|
|
|
|
/* p0', p1', p2' */ |
|
|
|
|
pix[-1] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3; |
|
|
|
|
pix[-2] = ( p2 + p1 + p0 + q0 + 2 ) >> 2; |
|
|
|
|
pix[-3] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3; |
|
|
|
|
} else { |
|
|
|
|
/* p0' */ |
|
|
|
|
pix[-1] = ( 2*p1 + p0 + q1 + 2 ) >> 2; |
|
|
|
|
} |
|
|
|
|
if( FFABS( q2 - q0 ) < beta) |
|
|
|
|
{ |
|
|
|
|
const int q3 = pix[3]; |
|
|
|
|
/* q0', q1', q2' */ |
|
|
|
|
pix[0] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3; |
|
|
|
|
pix[1] = ( p0 + q0 + q1 + q2 + 2 ) >> 2; |
|
|
|
|
pix[2] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3; |
|
|
|
|
} else { |
|
|
|
|
/* q0' */ |
|
|
|
|
pix[0] = ( 2*q1 + q0 + p1 + 2 ) >> 2; |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
/* p0', q0' */ |
|
|
|
|
pix[-1] = ( 2*p1 + p0 + q1 + 2 ) >> 2; |
|
|
|
|
pix[ 0] = ( 2*q1 + q0 + p1 + 2 ) >> 2; |
|
|
|
|
} |
|
|
|
|
tprintf(h->s.avctx, "filter_mb_edgev i:%d d:%d\n# bS:4 -> [%02x, %02x, %02x, %02x, %02x, %02x] =>[%02x, %02x, %02x, %02x]\n", i, d, p2, p1, p0, q0, q1, q2, pix[-2], pix[-1], pix[0], pix[1]); |
|
|
|
|
} |
|
|
|
|
pix += stride; |
|
|
|
|
} |
|
|
|
|
h->s.dsp.h264_h_loop_filter_luma_intra(pix, stride, alpha, beta); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
static void filter_mb_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) { |
|
|
|
@ -6083,50 +6037,7 @@ static void filter_mb_edgeh( H264Context *h, uint8_t *pix, int stride, int16_t b |
|
|
|
|
tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1; |
|
|
|
|
h->s.dsp.h264_v_loop_filter_luma(pix, stride, alpha, beta, tc); |
|
|
|
|
} else { |
|
|
|
|
/* 16px edge length, see filter_mb_edgev */ |
|
|
|
|
for( d = 0; d < 16; d++ ) { |
|
|
|
|
const int p0 = pix[-1*pix_next]; |
|
|
|
|
const int p1 = pix[-2*pix_next]; |
|
|
|
|
const int p2 = pix[-3*pix_next]; |
|
|
|
|
const int q0 = pix[0]; |
|
|
|
|
const int q1 = pix[1*pix_next]; |
|
|
|
|
const int q2 = pix[2*pix_next]; |
|
|
|
|
|
|
|
|
|
if( FFABS( p0 - q0 ) < alpha && |
|
|
|
|
FFABS( p1 - p0 ) < beta && |
|
|
|
|
FFABS( q1 - q0 ) < beta ) { |
|
|
|
|
|
|
|
|
|
const int p3 = pix[-4*pix_next]; |
|
|
|
|
const int q3 = pix[ 3*pix_next]; |
|
|
|
|
|
|
|
|
|
if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){ |
|
|
|
|
if( FFABS( p2 - p0 ) < beta) { |
|
|
|
|
/* p0', p1', p2' */ |
|
|
|
|
pix[-1*pix_next] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3; |
|
|
|
|
pix[-2*pix_next] = ( p2 + p1 + p0 + q0 + 2 ) >> 2; |
|
|
|
|
pix[-3*pix_next] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3; |
|
|
|
|
} else { |
|
|
|
|
/* p0' */ |
|
|
|
|
pix[-1*pix_next] = ( 2*p1 + p0 + q1 + 2 ) >> 2; |
|
|
|
|
} |
|
|
|
|
if( FFABS( q2 - q0 ) < beta) { |
|
|
|
|
/* q0', q1', q2' */ |
|
|
|
|
pix[0*pix_next] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3; |
|
|
|
|
pix[1*pix_next] = ( p0 + q0 + q1 + q2 + 2 ) >> 2; |
|
|
|
|
pix[2*pix_next] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3; |
|
|
|
|
} else { |
|
|
|
|
/* q0' */ |
|
|
|
|
pix[0*pix_next] = ( 2*q1 + q0 + p1 + 2 ) >> 2; |
|
|
|
|
} |
|
|
|
|
}else{ |
|
|
|
|
/* p0', q0' */ |
|
|
|
|
pix[-1*pix_next] = ( 2*p1 + p0 + q1 + 2 ) >> 2; |
|
|
|
|
pix[ 0*pix_next] = ( 2*q1 + q0 + p1 + 2 ) >> 2; |
|
|
|
|
} |
|
|
|
|
tprintf(h->s.avctx, "filter_mb_edgeh i:%d d:%d, qp:%d, indexA:%d, alpha:%d, beta:%d\n# bS:%d -> [%02x, %02x, %02x, %02x, %02x, %02x] =>[%02x, %02x, %02x, %02x]\n", i, d, qp, index_a, alpha, beta, bS[i], p2, p1, p0, q0, q1, q2, pix[-2*pix_next], pix[-pix_next], pix[0], pix[pix_next]); |
|
|
|
|
} |
|
|
|
|
pix++; |
|
|
|
|
} |
|
|
|
|
h->s.dsp.h264_v_loop_filter_luma_intra(pix, stride, alpha, beta); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|