diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-07-28 13:03:59 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-07-28 13:03:59 +0200 |
commit | 2fb8aa9b10fcb5f342398a9dcea69fe8ed33db39 (patch) | |
tree | 3d0f0530f95e64ad0cf4ad06fa363176687714f7 | |
parent | 453224f10b375c280ab2ef8f6e40213ba5b77d8a (diff) | |
parent | 53a11135f2fb2123408b295f9aaae3d6f861aea5 (diff) | |
download | ffmpeg-2fb8aa9b10fcb5f342398a9dcea69fe8ed33db39.tar.gz |
Merge commit '53a11135f2fb2123408b295f9aaae3d6f861aea5'
* commit '53a11135f2fb2123408b295f9aaae3d6f861aea5':
hevc: simplify splitting the transform tree blocks
Conflicts:
libavcodec/hevc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/hevc.c | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index ff5b9a17e1..bf2d8b5e7f 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -1152,29 +1152,25 @@ static int hls_transform_tree(HEVCContext *s, int x0, int y0, } if (split_transform_flag) { - int x1 = x0 + ((1 << log2_trafo_size) >> 1); - int y1 = y0 + ((1 << log2_trafo_size) >> 1); + const int trafo_size_split = 1 << (log2_trafo_size - 1); + const int x1 = x0 + trafo_size_split; + const int y1 = y0 + trafo_size_split; + +#define SUBDIVIDE(x, y, idx) \ +do { \ + ret = hls_transform_tree(s, x, y, x0, y0, cb_xBase, cb_yBase, log2_cb_size, \ + log2_trafo_size - 1, trafo_depth + 1, idx, \ + cbf_cb, cbf_cr); \ + if (ret < 0) \ + return ret; \ +} while (0) - ret = hls_transform_tree(s, x0, y0, x0, y0, cb_xBase, cb_yBase, - log2_cb_size, log2_trafo_size - 1, - trafo_depth + 1, 0, cbf_cb, cbf_cr); - if (ret < 0) - return ret; - ret = hls_transform_tree(s, x1, y0, x0, y0, cb_xBase, cb_yBase, - log2_cb_size, log2_trafo_size - 1, - trafo_depth + 1, 1, cbf_cb, cbf_cr); - if (ret < 0) - return ret; - ret = hls_transform_tree(s, x0, y1, x0, y0, cb_xBase, cb_yBase, - log2_cb_size, log2_trafo_size - 1, - trafo_depth + 1, 2, cbf_cb, cbf_cr); - if (ret < 0) - return ret; - ret = hls_transform_tree(s, x1, y1, x0, y0, cb_xBase, cb_yBase, - log2_cb_size, log2_trafo_size - 1, - trafo_depth + 1, 3, cbf_cb, cbf_cr); - if (ret < 0) - return ret; + SUBDIVIDE(x0, y0, 0); + SUBDIVIDE(x1, y0, 1); + SUBDIVIDE(x0, y1, 2); + SUBDIVIDE(x1, y1, 3); + +#undef SUBDIVIDE } else { int min_tu_size = 1 << s->sps->log2_min_tb_size; int log2_min_tu_size = s->sps->log2_min_tb_size; |