|
|
|
@ -101,7 +101,11 @@ static const uint8_t tc0_table[52*3][4] = { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/* intra: 0 if this loopfilter call is guaranteed to be inter (bS < 4), 1 if it might be intra (bS == 4) */ |
|
|
|
|
static void av_always_inline filter_mb_edgev( uint8_t *pix, int stride, const int16_t bS[4], unsigned int qp, int a, int b, H264Context *h, int intra ) { |
|
|
|
|
static av_always_inline void filter_mb_edgev(uint8_t *pix, int stride, |
|
|
|
|
const int16_t bS[4], |
|
|
|
|
unsigned int qp, int a, int b, |
|
|
|
|
H264Context *h, int intra) |
|
|
|
|
{ |
|
|
|
|
const unsigned int index_a = qp + a; |
|
|
|
|
const int alpha = alpha_table[index_a]; |
|
|
|
|
const int beta = beta_table[qp + b]; |
|
|
|
@ -118,7 +122,12 @@ static void av_always_inline filter_mb_edgev( uint8_t *pix, int stride, const in |
|
|
|
|
h->h264dsp.h264_h_loop_filter_luma_intra(pix, stride, alpha, beta); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
static void av_always_inline filter_mb_edgecv( uint8_t *pix, int stride, const int16_t bS[4], unsigned int qp, int a, int b, H264Context *h, int intra ) { |
|
|
|
|
|
|
|
|
|
static av_always_inline void filter_mb_edgecv(uint8_t *pix, int stride, |
|
|
|
|
const int16_t bS[4], |
|
|
|
|
unsigned int qp, int a, int b, |
|
|
|
|
H264Context *h, int intra) |
|
|
|
|
{ |
|
|
|
|
const unsigned int index_a = qp + a; |
|
|
|
|
const int alpha = alpha_table[index_a]; |
|
|
|
|
const int beta = beta_table[qp + b]; |
|
|
|
@ -136,7 +145,12 @@ static void av_always_inline filter_mb_edgecv( uint8_t *pix, int stride, const i |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void av_always_inline filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, const int16_t bS[7], int bsi, int qp, int a, int b, int intra ) { |
|
|
|
|
static av_always_inline void filter_mb_mbaff_edgev(H264Context *h, uint8_t *pix, |
|
|
|
|
int stride, |
|
|
|
|
const int16_t bS[7], int bsi, |
|
|
|
|
int qp, int a, int b, |
|
|
|
|
int intra) |
|
|
|
|
{ |
|
|
|
|
const unsigned int index_a = qp + a; |
|
|
|
|
const int alpha = alpha_table[index_a]; |
|
|
|
|
const int beta = beta_table[qp + b]; |
|
|
|
@ -153,7 +167,13 @@ static void av_always_inline filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix |
|
|
|
|
h->h264dsp.h264_h_loop_filter_luma_mbaff_intra(pix, stride, alpha, beta); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
static void av_always_inline filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pix, int stride, const int16_t bS[7], int bsi, int qp, int a, int b, int intra ) { |
|
|
|
|
|
|
|
|
|
static av_always_inline void filter_mb_mbaff_edgecv(H264Context *h, |
|
|
|
|
uint8_t *pix, int stride, |
|
|
|
|
const int16_t bS[7], |
|
|
|
|
int bsi, int qp, int a, |
|
|
|
|
int b, int intra) |
|
|
|
|
{ |
|
|
|
|
const unsigned int index_a = qp + a; |
|
|
|
|
const int alpha = alpha_table[index_a]; |
|
|
|
|
const int beta = beta_table[qp + b]; |
|
|
|
@ -171,7 +191,11 @@ static void av_always_inline filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pi |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void av_always_inline filter_mb_edgeh( uint8_t *pix, int stride, const int16_t bS[4], unsigned int qp, int a, int b, H264Context *h, int intra ) { |
|
|
|
|
static av_always_inline void filter_mb_edgeh(uint8_t *pix, int stride, |
|
|
|
|
const int16_t bS[4], |
|
|
|
|
unsigned int qp, int a, int b, |
|
|
|
|
H264Context *h, int intra) |
|
|
|
|
{ |
|
|
|
|
const unsigned int index_a = qp + a; |
|
|
|
|
const int alpha = alpha_table[index_a]; |
|
|
|
|
const int beta = beta_table[qp + b]; |
|
|
|
@ -189,7 +213,11 @@ static void av_always_inline filter_mb_edgeh( uint8_t *pix, int stride, const in |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void av_always_inline filter_mb_edgech( uint8_t *pix, int stride, const int16_t bS[4], unsigned int qp, int a, int b, H264Context *h, int intra ) { |
|
|
|
|
static av_always_inline void filter_mb_edgech(uint8_t *pix, int stride, |
|
|
|
|
const int16_t bS[4], |
|
|
|
|
unsigned int qp, int a, int b, |
|
|
|
|
H264Context *h, int intra) |
|
|
|
|
{ |
|
|
|
|
const unsigned int index_a = qp + a; |
|
|
|
|
const int alpha = alpha_table[index_a]; |
|
|
|
|
const int beta = beta_table[qp + b]; |
|
|
|
@ -207,8 +235,15 @@ static void av_always_inline filter_mb_edgech( uint8_t *pix, int stride, const i |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void av_always_inline h264_filter_mb_fast_internal( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, |
|
|
|
|
unsigned int linesize, unsigned int uvlinesize, int pixel_shift) { |
|
|
|
|
static av_always_inline void h264_filter_mb_fast_internal(H264Context *h, |
|
|
|
|
int mb_x, int mb_y, |
|
|
|
|
uint8_t *img_y, |
|
|
|
|
uint8_t *img_cb, |
|
|
|
|
uint8_t *img_cr, |
|
|
|
|
unsigned int linesize, |
|
|
|
|
unsigned int uvlinesize, |
|
|
|
|
int pixel_shift) |
|
|
|
|
{ |
|
|
|
|
MpegEncContext * const s = &h->s; |
|
|
|
|
int chroma = !(CONFIG_GRAY && (s->flags&CODEC_FLAG_GRAY)); |
|
|
|
|
int chroma444 = CHROMA444; |
|
|
|
|