From b926b6282d3b9fc8115660ae013f74f4f8c06d30 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 30 Sep 2010 21:57:31 +0000 Subject: av_assert() system. With this the developer can now choose if he wants an assert always enabled or at which compile time assert level. This can thus replace the #define NDEBUG hacks Originally committed as revision 25278 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavutil/Makefile | 1 + libavutil/assert.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ libavutil/avutil.h | 2 +- libavutil/rational.c | 4 ++-- 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 libavutil/assert.h (limited to 'libavutil') diff --git a/libavutil/Makefile b/libavutil/Makefile index f9178e87d9..3f13092c3c 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -3,6 +3,7 @@ include $(SUBDIR)../config.mak NAME = avutil HEADERS = adler32.h \ + assert.h \ attributes.h \ avstring.h \ avutil.h \ diff --git a/libavutil/assert.h b/libavutil/assert.h new file mode 100644 index 0000000000..8f6e2f0208 --- /dev/null +++ b/libavutil/assert.h @@ -0,0 +1,59 @@ +/* + * copyright (c) 2010 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * simple assert() macros that are a bit more flexible than ISO C assert(). + * @author Michael Niedermayer + */ + +#ifndef AVUTIL_ASSERT_H +#define AVUTIL_ASSERT_H + +#include "avutil.h" +#include "log.h" + +/** + * assert() equivalent, that is always enabled. + */ +#define av_assert0(cond) do {if(!(cond)) { av_log(NULL, AV_LOG_FATAL, "Assertion %s failed at %s:%d\n", AV_STRINGIFY(cond), __FILE__, __LINE__); abort(); }}while(0) + + +/** + * assert() equivalent, that does not lie in speed critical code. + * These asserts() thus can be enabled without fearing speedloss. + */ +#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0 +#define av_assert1(cond) av_assert_always(cond) +#else +#define av_assert1(cond) ((void)0) +#endif + + +/** + * assert() equivalent, that does lie in speed critical code. + */ +#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 +#define av_assert2(cond) av_assert_always(cond) +#else +#define av_assert2(cond) ((void)0) +#endif + +#endif diff --git a/libavutil/avutil.h b/libavutil/avutil.h index a40bd957ae..e3391e58a2 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -40,7 +40,7 @@ #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define LIBAVUTIL_VERSION_MAJOR 50 -#define LIBAVUTIL_VERSION_MINOR 31 +#define LIBAVUTIL_VERSION_MINOR 32 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ diff --git a/libavutil/rational.c b/libavutil/rational.c index 3e8b885d49..4e3c50be81 100644 --- a/libavutil/rational.c +++ b/libavutil/rational.c @@ -25,7 +25,7 @@ * @author Michael Niedermayer */ -#include +#include "assert.h" //#include #include @@ -67,7 +67,7 @@ int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max) num= den; den= next_den; } - assert(av_gcd(a1.num, a1.den) <= 1U); + av_assert2(av_gcd(a1.num, a1.den) <= 1U); *dst_num = sign ? -a1.num : a1.num; *dst_den = a1.den; -- cgit v1.2.3