From e8bc642202c10beda1ea4e93ec8492b1e39805e5 Mon Sep 17 00:00:00 2001 From: Clément Bœsch Date: Fri, 8 Jan 2016 16:16:10 +0100 Subject: lavu: add AV_CEIL_RSHIFT and use it in various places Signed-off-by: Vittorio Giovara --- libavutil/common.h | 8 ++++++++ libavutil/frame.c | 2 +- libavutil/imgutils.c | 2 +- libavutil/version.h | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) (limited to 'libavutil') diff --git a/libavutil/common.h b/libavutil/common.h index 7a43ccf10a..d2ddcba9ed 100644 --- a/libavutil/common.h +++ b/libavutil/common.h @@ -50,6 +50,14 @@ #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) /* assume b>0 */ #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) + +/** + * Fast a / (1 << b) rounded toward +inf, assuming a >= 0 and b >= 0. + */ +#define AV_CEIL_RSHIFT(a, b) \ + (av_builtin_constant_p(b) ? ((a) + (1 << (b)) - 1) >> (b) \ + : -((-(a)) >> (b))) + #define FFABS(a) ((a) >= 0 ? (a) : (-(a))) #define FFSIGN(a) ((a) > 0 ? 1 : -1) diff --git a/libavutil/frame.c b/libavutil/frame.c index e4f6ab3daa..15276fee49 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -111,7 +111,7 @@ static int get_video_buffer(AVFrame *frame, int align) for (i = 0; i < 4 && frame->linesize[i]; i++) { int h = frame->height; if (i == 1 || i == 2) - h = -((-h) >> desc->log2_chroma_h); + h = AV_CEIL_RSHIFT(h, desc->log2_chroma_h); frame->buf[i] = av_buffer_alloc(frame->linesize[i] * h); if (!frame->buf[i]) diff --git a/libavutil/imgutils.c b/libavutil/imgutils.c index 4fb7a9b0aa..6c581396a3 100644 --- a/libavutil/imgutils.c +++ b/libavutil/imgutils.c @@ -291,7 +291,7 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], int h = height; int bwidth = av_image_get_linesize(pix_fmt, width, i); if (i == 1 || i == 2) { - h= -((-height)>>desc->log2_chroma_h); + h = AV_CEIL_RSHIFT(height, desc->log2_chroma_h); } av_image_copy_plane(dst_data[i], dst_linesizes[i], src_data[i], src_linesizes[i], diff --git a/libavutil/version.h b/libavutil/version.h index 802a44549f..25457acaf0 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -54,7 +54,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 55 -#define LIBAVUTIL_VERSION_MINOR 4 +#define LIBAVUTIL_VERSION_MINOR 5 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ -- cgit v1.2.3