Loading include/media/stagefright/foundation/AUtils.h 0 → 100644 +65 −0 Original line number Diff line number Diff line /* * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef A_UTILS_H_ #define A_UTILS_H_ /* ============================ math templates ============================ */ /* T must be integer type, den must not be 0 */ template<class T> inline static const T divRound(const T &nom, const T &den) { if ((nom >= 0) ^ (den >= 0)) { return (nom - den / 2) / den; } else { return (nom + den / 2) / den; } } /* == ceil(nom / den). T must be integer type, den must not be 0 */ template<class T> inline static const T divUp(const T &nom, const T &den) { if (den < 0) { return (nom < 0 ? nom + den + 1 : nom) / den; } else { return (nom < 0 ? nom : nom + den - 1) / den; } } template<class T> inline static T abs(const T &a) { return a < 0 ? -a : a; } template<class T> inline static const T &min(const T &a, const T &b) { return a < b ? a : b; } template<class T> inline static const T &max(const T &a, const T &b) { return a > b ? a : b; } /* T must be integer type, period must be positive */ template<class T> inline static T periodicError(const T &val, const T &period) { T err = abs(val) % period; return (err < (period / 2)) ? err : (period - err); } #endif // A_UTILS_H_ media/libmediaplayerservice/VideoFrameScheduler.cpp +1 −30 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <ui/DisplayStatInfo.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AUtils.h> #include "VideoFrameScheduler.h" Loading @@ -34,36 +35,6 @@ namespace android { static const nsecs_t kNanosIn1s = 1000000000; template<class T> inline static const T divRound(const T &nom, const T &den) { if ((nom >= 0) ^ (den >= 0)) { return (nom - den / 2) / den; } else { return (nom + den / 2) / den; } } template<class T> inline static T abs(const T &a) { return a < 0 ? -a : a; } template<class T> inline static const T &min(const T &a, const T &b) { return a < b ? a : b; } template<class T> inline static const T &max(const T &a, const T &b) { return a > b ? a : b; } template<class T> inline static T periodicError(const T &val, const T &period) { T err = abs(val) % period; return (err < (period / 2)) ? err : (period - err); } template<class T> static int compare(const T *lhs, const T *rhs) { if (*lhs < *rhs) { Loading media/libstagefright/tests/Android.mk +40 −5 Original line number Diff line number Diff line Loading @@ -47,6 +47,41 @@ include $(BUILD_EXECUTABLE) endif include $(CLEAR_VARS) LOCAL_MODULE := Utils_test LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := \ Utils_test.cpp \ LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ libmedia \ libstagefright \ libstagefright_foundation \ libstagefright_omx \ libstlport \ LOCAL_STATIC_LIBRARIES := \ libgtest \ libgtest_main \ LOCAL_C_INCLUDES := \ bionic \ bionic/libstdc++/include \ external/gtest/include \ external/stlport/stlport \ frameworks/av/include \ frameworks/av/media/libstagefright \ frameworks/av/media/libstagefright/include \ $(TOP)/frameworks/native/include/media/openmax \ include $(BUILD_EXECUTABLE) # Include subdirectory makefiles # ============================================================ Loading media/libstagefright/tests/Utils_test.cpp 0 → 100644 +101 −0 Original line number Diff line number Diff line /* * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //#define LOG_NDEBUG 0 #define LOG_TAG "Utils_test" #include <gtest/gtest.h> #include <utils/String8.h> #include <utils/Errors.h> #include <fcntl.h> #include <unistd.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AUtils.h> #include <media/stagefright/Utils.h> namespace android { class UtilsTest : public ::testing::Test { }; TEST_F(UtilsTest, TestFourCC) { ASSERT_EQ(FOURCC('s', 't', 'm' , 'u'), 'stmu'); } TEST_F(UtilsTest, TestMathTemplates) { ASSERT_EQ(divRound(-10, -4), 3); ASSERT_EQ(divRound(-11, -4), 3); ASSERT_EQ(divRound(-12, -4), 3); ASSERT_EQ(divRound(-13, -4), 3); ASSERT_EQ(divRound(-14, -4), 4); ASSERT_EQ(divRound(10, -4), -3); ASSERT_EQ(divRound(11, -4), -3); ASSERT_EQ(divRound(12, -4), -3); ASSERT_EQ(divRound(13, -4), -3); ASSERT_EQ(divRound(14, -4), -4); ASSERT_EQ(divRound(-10, 4), -3); ASSERT_EQ(divRound(-11, 4), -3); ASSERT_EQ(divRound(-12, 4), -3); ASSERT_EQ(divRound(-13, 4), -3); ASSERT_EQ(divRound(-14, 4), -4); ASSERT_EQ(divRound(10, 4), 3); ASSERT_EQ(divRound(11, 4), 3); ASSERT_EQ(divRound(12, 4), 3); ASSERT_EQ(divRound(13, 4), 3); ASSERT_EQ(divRound(14, 4), 4); ASSERT_EQ(divUp(-11, -4), 3); ASSERT_EQ(divUp(-12, -4), 3); ASSERT_EQ(divUp(-13, -4), 4); ASSERT_EQ(divUp(11, -4), -2); ASSERT_EQ(divUp(12, -4), -3); ASSERT_EQ(divUp(13, -4), -3); ASSERT_EQ(divUp(-11, 4), -2); ASSERT_EQ(divUp(-12, 4), -3); ASSERT_EQ(divUp(-13, 4), -3); ASSERT_EQ(divUp(11, 4), 3); ASSERT_EQ(divUp(12, 4), 3); ASSERT_EQ(divUp(13, 4), 4); ASSERT_EQ(abs(5L), 5L); ASSERT_EQ(abs(-25), 25); ASSERT_EQ(min(5.6f, 6.0f), 5.6f); ASSERT_EQ(min(6.0f, 5.6f), 5.6f); ASSERT_EQ(min(-4.3, 8.6), -4.3); ASSERT_EQ(min(8.6, -4.3), -4.3); ASSERT_EQ(max(5.6f, 6.0f), 6.0f); ASSERT_EQ(max(6.0f, 5.6f), 6.0f); ASSERT_EQ(max(-4.3, 8.6), 8.6); ASSERT_EQ(max(8.6, -4.3), 8.6); ASSERT_EQ(periodicError(124, 100), 24); ASSERT_EQ(periodicError(288, 100), 12); ASSERT_EQ(periodicError(-345, 100), 45); ASSERT_EQ(periodicError(-493, 100), 7); ASSERT_EQ(periodicError(-550, 100), 50); ASSERT_EQ(periodicError(-600, 100), 0); } } // namespace android Loading
include/media/stagefright/foundation/AUtils.h 0 → 100644 +65 −0 Original line number Diff line number Diff line /* * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef A_UTILS_H_ #define A_UTILS_H_ /* ============================ math templates ============================ */ /* T must be integer type, den must not be 0 */ template<class T> inline static const T divRound(const T &nom, const T &den) { if ((nom >= 0) ^ (den >= 0)) { return (nom - den / 2) / den; } else { return (nom + den / 2) / den; } } /* == ceil(nom / den). T must be integer type, den must not be 0 */ template<class T> inline static const T divUp(const T &nom, const T &den) { if (den < 0) { return (nom < 0 ? nom + den + 1 : nom) / den; } else { return (nom < 0 ? nom : nom + den - 1) / den; } } template<class T> inline static T abs(const T &a) { return a < 0 ? -a : a; } template<class T> inline static const T &min(const T &a, const T &b) { return a < b ? a : b; } template<class T> inline static const T &max(const T &a, const T &b) { return a > b ? a : b; } /* T must be integer type, period must be positive */ template<class T> inline static T periodicError(const T &val, const T &period) { T err = abs(val) % period; return (err < (period / 2)) ? err : (period - err); } #endif // A_UTILS_H_
media/libmediaplayerservice/VideoFrameScheduler.cpp +1 −30 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include <ui/DisplayStatInfo.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AUtils.h> #include "VideoFrameScheduler.h" Loading @@ -34,36 +35,6 @@ namespace android { static const nsecs_t kNanosIn1s = 1000000000; template<class T> inline static const T divRound(const T &nom, const T &den) { if ((nom >= 0) ^ (den >= 0)) { return (nom - den / 2) / den; } else { return (nom + den / 2) / den; } } template<class T> inline static T abs(const T &a) { return a < 0 ? -a : a; } template<class T> inline static const T &min(const T &a, const T &b) { return a < b ? a : b; } template<class T> inline static const T &max(const T &a, const T &b) { return a > b ? a : b; } template<class T> inline static T periodicError(const T &val, const T &period) { T err = abs(val) % period; return (err < (period / 2)) ? err : (period - err); } template<class T> static int compare(const T *lhs, const T *rhs) { if (*lhs < *rhs) { Loading
media/libstagefright/tests/Android.mk +40 −5 Original line number Diff line number Diff line Loading @@ -47,6 +47,41 @@ include $(BUILD_EXECUTABLE) endif include $(CLEAR_VARS) LOCAL_MODULE := Utils_test LOCAL_MODULE_TAGS := tests LOCAL_SRC_FILES := \ Utils_test.cpp \ LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ libmedia \ libstagefright \ libstagefright_foundation \ libstagefright_omx \ libstlport \ LOCAL_STATIC_LIBRARIES := \ libgtest \ libgtest_main \ LOCAL_C_INCLUDES := \ bionic \ bionic/libstdc++/include \ external/gtest/include \ external/stlport/stlport \ frameworks/av/include \ frameworks/av/media/libstagefright \ frameworks/av/media/libstagefright/include \ $(TOP)/frameworks/native/include/media/openmax \ include $(BUILD_EXECUTABLE) # Include subdirectory makefiles # ============================================================ Loading
media/libstagefright/tests/Utils_test.cpp 0 → 100644 +101 −0 Original line number Diff line number Diff line /* * Copyright 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //#define LOG_NDEBUG 0 #define LOG_TAG "Utils_test" #include <gtest/gtest.h> #include <utils/String8.h> #include <utils/Errors.h> #include <fcntl.h> #include <unistd.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AUtils.h> #include <media/stagefright/Utils.h> namespace android { class UtilsTest : public ::testing::Test { }; TEST_F(UtilsTest, TestFourCC) { ASSERT_EQ(FOURCC('s', 't', 'm' , 'u'), 'stmu'); } TEST_F(UtilsTest, TestMathTemplates) { ASSERT_EQ(divRound(-10, -4), 3); ASSERT_EQ(divRound(-11, -4), 3); ASSERT_EQ(divRound(-12, -4), 3); ASSERT_EQ(divRound(-13, -4), 3); ASSERT_EQ(divRound(-14, -4), 4); ASSERT_EQ(divRound(10, -4), -3); ASSERT_EQ(divRound(11, -4), -3); ASSERT_EQ(divRound(12, -4), -3); ASSERT_EQ(divRound(13, -4), -3); ASSERT_EQ(divRound(14, -4), -4); ASSERT_EQ(divRound(-10, 4), -3); ASSERT_EQ(divRound(-11, 4), -3); ASSERT_EQ(divRound(-12, 4), -3); ASSERT_EQ(divRound(-13, 4), -3); ASSERT_EQ(divRound(-14, 4), -4); ASSERT_EQ(divRound(10, 4), 3); ASSERT_EQ(divRound(11, 4), 3); ASSERT_EQ(divRound(12, 4), 3); ASSERT_EQ(divRound(13, 4), 3); ASSERT_EQ(divRound(14, 4), 4); ASSERT_EQ(divUp(-11, -4), 3); ASSERT_EQ(divUp(-12, -4), 3); ASSERT_EQ(divUp(-13, -4), 4); ASSERT_EQ(divUp(11, -4), -2); ASSERT_EQ(divUp(12, -4), -3); ASSERT_EQ(divUp(13, -4), -3); ASSERT_EQ(divUp(-11, 4), -2); ASSERT_EQ(divUp(-12, 4), -3); ASSERT_EQ(divUp(-13, 4), -3); ASSERT_EQ(divUp(11, 4), 3); ASSERT_EQ(divUp(12, 4), 3); ASSERT_EQ(divUp(13, 4), 4); ASSERT_EQ(abs(5L), 5L); ASSERT_EQ(abs(-25), 25); ASSERT_EQ(min(5.6f, 6.0f), 5.6f); ASSERT_EQ(min(6.0f, 5.6f), 5.6f); ASSERT_EQ(min(-4.3, 8.6), -4.3); ASSERT_EQ(min(8.6, -4.3), -4.3); ASSERT_EQ(max(5.6f, 6.0f), 6.0f); ASSERT_EQ(max(6.0f, 5.6f), 6.0f); ASSERT_EQ(max(-4.3, 8.6), 8.6); ASSERT_EQ(max(8.6, -4.3), 8.6); ASSERT_EQ(periodicError(124, 100), 24); ASSERT_EQ(periodicError(288, 100), 12); ASSERT_EQ(periodicError(-345, 100), 45); ASSERT_EQ(periodicError(-493, 100), 7); ASSERT_EQ(periodicError(-550, 100), 50); ASSERT_EQ(periodicError(-600, 100), 0); } } // namespace android