On the other hand, the stride is known at compilation time, so the asm could use that to reduce the number of gprs and therefore helps having a x86_32 version.
-- Christophe
From 55047bbb991c95f126d597bbe05e424406af4ec4 Mon Sep 17 00:00:00 2001 From: Christophe Gisquet <christophe.gisq...@gmail.com> Date: Tue, 3 Feb 2015 14:06:39 +0100 Subject: [PATCH] hevc/sao: do in-place band filtering when possible The copies are only needed when data must be restored, so skip them when it must not be. --- libavcodec/hevc_filter.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libavcodec/hevc_filter.c b/libavcodec/hevc_filter.c index d524b0d..affeded 100644 --- a/libavcodec/hevc_filter.c +++ b/libavcodec/hevc_filter.c @@ -321,16 +321,23 @@ static void sao_filter_CTB(HEVCContext *s, int x, int y) switch (sao->type_idx[c_idx]) { case SAO_BAND: + copy_CTB_to_hv(s, src, stride_src, x0, y0, width, height, c_idx, + x_ctb, y_ctb); + if (s->pps->transquant_bypass_enable_flag || + (s->sps->pcm.loop_filter_disable_flag && s->sps->pcm_enabled_flag)) { dst = lc->edge_emu_buffer; stride_dst = 2*MAX_PB_SIZE; copy_CTB(dst, src, width << s->sps->pixel_shift, height, stride_dst, stride_src); - copy_CTB_to_hv(s, src, stride_src, x0, y0, width, height, c_idx, - x_ctb, y_ctb); s->hevcdsp.sao_band_filter[tab](src, dst, stride_src, stride_dst, sao->offset_val[c_idx], sao->band_position[c_idx], width, height); restore_tqb_pixels(s, src, dst, stride_src, stride_dst, x, y, width, height, c_idx); + } else { + s->hevcdsp.sao_band_filter[tab](src, src, stride_src, stride_src, + sao->offset_val[c_idx], sao->band_position[c_idx], + width, height); + } sao->type_idx[c_idx] = SAO_APPLIED; break; case SAO_EDGE: -- 1.9.2.msysgit.0
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel