diff options
| author | Michael Niedermayer <[email protected]> | 2014-07-28 13:03:59 +0200 | 
|---|---|---|
| committer | Michael Niedermayer <[email protected]> | 2014-07-28 13:03:59 +0200 | 
| commit | 2fb8aa9b10fcb5f342398a9dcea69fe8ed33db39 (patch) | |
| tree | 3d0f0530f95e64ad0cf4ad06fa363176687714f7 | |
| parent | 453224f10b375c280ab2ef8f6e40213ba5b77d8a (diff) | |
| parent | 53a11135f2fb2123408b295f9aaae3d6f861aea5 (diff) | |
Merge commit '53a11135f2fb2123408b295f9aaae3d6f861aea5'
* commit '53a11135f2fb2123408b295f9aaae3d6f861aea5':
  hevc: simplify splitting the transform tree blocks
Conflicts:
	libavcodec/hevc.c
Merged-by: Michael Niedermayer <[email protected]>
| -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; | 
