summaryrefslogtreecommitdiff
path: root/libavcodec/hevc.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-07-28 13:03:59 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-28 13:03:59 +0200
commit2fb8aa9b10fcb5f342398a9dcea69fe8ed33db39 (patch)
tree3d0f0530f95e64ad0cf4ad06fa363176687714f7 /libavcodec/hevc.c
parent453224f10b375c280ab2ef8f6e40213ba5b77d8a (diff)
parent53a11135f2fb2123408b295f9aaae3d6f861aea5 (diff)
Merge commit '53a11135f2fb2123408b295f9aaae3d6f861aea5'
* commit '53a11135f2fb2123408b295f9aaae3d6f861aea5': hevc: simplify splitting the transform tree blocks Conflicts: libavcodec/hevc.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/hevc.c')
-rw-r--r--libavcodec/hevc.c40
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;