From c7ecc1157112eea08a2e414f6bea6dfeb221a6b7 Mon Sep 17 00:00:00 2001 From: "mikhal@webrtc.org" Date: Fri, 28 Sep 2012 16:07:10 +0000 Subject: [PATCH] Switching to a general align function. Review URL: https://webrtc-codereview.appspot.com/851005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2847 4adac7df-926f-26a2-2b94-8c16560cd09d --- src/common_video/libyuv/include/webrtc_libyuv.h | 9 +++++---- src/common_video/libyuv/libyuv_unittest.cc | 13 ++++--------- src/common_video/libyuv/webrtc_libyuv.cc | 5 +++-- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/common_video/libyuv/include/webrtc_libyuv.h b/src/common_video/libyuv/include/webrtc_libyuv.h index a39ea32b20..a539ae69ff 100644 --- a/src/common_video/libyuv/include/webrtc_libyuv.h +++ b/src/common_video/libyuv/include/webrtc_libyuv.h @@ -57,11 +57,12 @@ enum VideoRotationMode { kRotate270 = 270, }; -// Align value to 64 bits. +// Align integer values. // Input: -// - value : Input value to be aligned. -// Return value: An aligned to 64 bit form of the input value. -int AlignTo64Bit(int value); +// - value : Input value to be aligned. +// - alignment : Alignment basis (power of 2). +// Return value: An aligned form of the input value. +int AlignInt(int value, int alignment); // Calculate the required buffer size. // Input: diff --git a/src/common_video/libyuv/libyuv_unittest.cc b/src/common_video/libyuv/libyuv_unittest.cc index 4af5aa572c..ced0b6e96c 100644 --- a/src/common_video/libyuv/libyuv_unittest.cc +++ b/src/common_video/libyuv/libyuv_unittest.cc @@ -332,15 +332,10 @@ TEST_F(TestLibYuv, DISABLED_MirrorTest) { } TEST_F(TestLibYuv, alignment) { - int value = 640; - int aligned_value = (value + 63) & ~63; - EXPECT_EQ(AlignTo64Bit(value), aligned_value); - value = 600; - aligned_value = (value + 63) & ~63; - EXPECT_EQ(AlignTo64Bit(value), aligned_value); - value = 0; - aligned_value = (value + 63) & ~63; - EXPECT_EQ(AlignTo64Bit(value), aligned_value); + int value = 0x3FF; // 1023 + EXPECT_EQ(0x400, AlignInt(value, 128)); // Low 7 bits are zero. + EXPECT_EQ(0x400, AlignInt(value, 64)); // Low 6 bits are zero. + EXPECT_EQ(0x400, AlignInt(value, 32)); // Low 5 bits are zero. } } // namespace diff --git a/src/common_video/libyuv/webrtc_libyuv.cc b/src/common_video/libyuv/webrtc_libyuv.cc index b39b242ba8..41648f8890 100644 --- a/src/common_video/libyuv/webrtc_libyuv.cc +++ b/src/common_video/libyuv/webrtc_libyuv.cc @@ -52,8 +52,9 @@ VideoType RawVideoTypeToCommonVideoVideoType(RawVideoType type) { return kUnknown; } -int AlignTo64Bit(int value) { - return ((value + 63) & ~63); +int AlignInt(int value, int alignment) { + assert(!((alignment - 1) & alignment)); + return ((value + alignment - 1) & ~ (alignment - 1)); } int CalcBufferSize(VideoType type, int width, int height) {