|
|
|
@ -778,24 +778,6 @@ static av_always_inline void hl_motion(H264Context *h, uint8_t *dest_y, uint8_t |
|
|
|
|
prefetch_motion(h, 1, pixel_shift, chroma444); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define hl_motion_fn(sh, bits) \ |
|
|
|
|
static av_always_inline void hl_motion_ ## bits(H264Context *h, \
|
|
|
|
|
uint8_t *dest_y, \
|
|
|
|
|
uint8_t *dest_cb, uint8_t *dest_cr, \
|
|
|
|
|
qpel_mc_func (*qpix_put)[16], \
|
|
|
|
|
h264_chroma_mc_func (*chroma_put), \
|
|
|
|
|
qpel_mc_func (*qpix_avg)[16], \
|
|
|
|
|
h264_chroma_mc_func (*chroma_avg), \
|
|
|
|
|
h264_weight_func *weight_op, \
|
|
|
|
|
h264_biweight_func *weight_avg, \
|
|
|
|
|
int chroma444) \
|
|
|
|
|
{ \
|
|
|
|
|
hl_motion(h, dest_y, dest_cb, dest_cr, qpix_put, chroma_put, \
|
|
|
|
|
qpix_avg, chroma_avg, weight_op, weight_avg, sh, chroma444); \
|
|
|
|
|
} |
|
|
|
|
hl_motion_fn(0, 8); |
|
|
|
|
hl_motion_fn(1, 16); |
|
|
|
|
|
|
|
|
|
static void free_tables(H264Context *h, int free_rbsp){ |
|
|
|
|
int i; |
|
|
|
|
H264Context *hx; |
|
|
|
@ -1876,18 +1858,11 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple, i |
|
|
|
|
if(h->deblocking_filter) |
|
|
|
|
xchg_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, 0, 0, simple, pixel_shift); |
|
|
|
|
}else if(is_h264){ |
|
|
|
|
if (pixel_shift) { |
|
|
|
|
hl_motion_16(h, dest_y, dest_cb, dest_cr, |
|
|
|
|
s->me.qpel_put, s->dsp.put_h264_chroma_pixels_tab, |
|
|
|
|
s->me.qpel_avg, s->dsp.avg_h264_chroma_pixels_tab, |
|
|
|
|
h->h264dsp.weight_h264_pixels_tab, |
|
|
|
|
h->h264dsp.biweight_h264_pixels_tab, 0); |
|
|
|
|
} else |
|
|
|
|
hl_motion_8(h, dest_y, dest_cb, dest_cr, |
|
|
|
|
s->me.qpel_put, s->dsp.put_h264_chroma_pixels_tab, |
|
|
|
|
s->me.qpel_avg, s->dsp.avg_h264_chroma_pixels_tab, |
|
|
|
|
h->h264dsp.weight_h264_pixels_tab, |
|
|
|
|
h->h264dsp.biweight_h264_pixels_tab, 0); |
|
|
|
|
hl_motion(h, dest_y, dest_cb, dest_cr, |
|
|
|
|
s->me.qpel_put, s->dsp.put_h264_chroma_pixels_tab, |
|
|
|
|
s->me.qpel_avg, s->dsp.avg_h264_chroma_pixels_tab, |
|
|
|
|
h->h264dsp.weight_h264_pixels_tab, |
|
|
|
|
h->h264dsp.biweight_h264_pixels_tab, pixel_shift, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hl_decode_mb_idct_luma(h, mb_type, is_h264, simple, transform_bypass, pixel_shift, block_offset, linesize, dest_y, 0); |
|
|
|
@ -2017,18 +1992,11 @@ static av_always_inline void hl_decode_mb_444_internal(H264Context *h, int simpl |
|
|
|
|
if(h->deblocking_filter) |
|
|
|
|
xchg_mb_border(h, dest[0], dest[1], dest[2], linesize, linesize, 0, 1, simple, pixel_shift); |
|
|
|
|
}else{ |
|
|
|
|
if (pixel_shift) { |
|
|
|
|
hl_motion_16(h, dest[0], dest[1], dest[2], |
|
|
|
|
s->me.qpel_put, s->dsp.put_h264_chroma_pixels_tab, |
|
|
|
|
s->me.qpel_avg, s->dsp.avg_h264_chroma_pixels_tab, |
|
|
|
|
h->h264dsp.weight_h264_pixels_tab, |
|
|
|
|
h->h264dsp.biweight_h264_pixels_tab, 1); |
|
|
|
|
} else |
|
|
|
|
hl_motion_8(h, dest[0], dest[1], dest[2], |
|
|
|
|
s->me.qpel_put, s->dsp.put_h264_chroma_pixels_tab, |
|
|
|
|
s->me.qpel_avg, s->dsp.avg_h264_chroma_pixels_tab, |
|
|
|
|
h->h264dsp.weight_h264_pixels_tab, |
|
|
|
|
h->h264dsp.biweight_h264_pixels_tab, 1); |
|
|
|
|
hl_motion(h, dest[0], dest[1], dest[2], |
|
|
|
|
s->me.qpel_put, s->dsp.put_h264_chroma_pixels_tab, |
|
|
|
|
s->me.qpel_avg, s->dsp.avg_h264_chroma_pixels_tab, |
|
|
|
|
h->h264dsp.weight_h264_pixels_tab, |
|
|
|
|
h->h264dsp.biweight_h264_pixels_tab, pixel_shift, 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (p = 0; p < plane_count; p++) |
|
|
|
|