mirror of https://github.com/FFmpeg/FFmpeg.git
Originally committed as revision 4489 to svn://svn.ffmpeg.org/ffmpeg/trunkpull/126/head
parent
0cc64d3d1c
commit
c11c2bc20b
20 changed files with 369 additions and 175 deletions
@ -0,0 +1,92 @@ |
|||||||
|
#
|
||||||
|
# libavutil Makefile
|
||||||
|
#
|
||||||
|
include ../config.mak |
||||||
|
|
||||||
|
VPATH=$(SRC_PATH)/libavutil
|
||||||
|
|
||||||
|
# NOTE: -I.. is needed to include config.h
|
||||||
|
CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE
|
||||||
|
|
||||||
|
OBJS= mathematics.o \
|
||||||
|
integer.o \
|
||||||
|
rational.o \
|
||||||
|
intfloat_readwrite.o \
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(TARGET_ARCH_SPARC64),yes) |
||||||
|
CFLAGS+= -mcpu=ultrasparc -mtune=ultrasparc
|
||||||
|
endif |
||||||
|
|
||||||
|
SRCS := $(OBJS:.o=.c)
|
||||||
|
|
||||||
|
LIB= $(LIBPREF)avutil$(LIBSUF)
|
||||||
|
ifeq ($(BUILD_SHARED),yes) |
||||||
|
SLIB= $(SLIBPREF)avutil$(SLIBSUF)
|
||||||
|
endif |
||||||
|
|
||||||
|
all: $(LIB) $(SLIB) |
||||||
|
|
||||||
|
$(LIB): $(OBJS) |
||||||
|
rm -f $@
|
||||||
|
$(AR) rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
$(SLIB): $(OBJS) |
||||||
|
ifeq ($(CONFIG_WIN32),yes) |
||||||
|
$(CC) $(SHFLAGS) -Wl,--output-def,$(@:.dll=.def) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS)
|
||||||
|
-lib /machine:i386 /def:$(@:.dll=.def)
|
||||||
|
else |
||||||
|
$(CC) $(SHFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(AMREXTRALIBS) $(LDFLAGS)
|
||||||
|
endif |
||||||
|
|
||||||
|
%.o: %.c |
||||||
|
$(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
depend: $(SRCS) |
||||||
|
$(CC) -MM $(CFLAGS) $^ 1>.depend
|
||||||
|
|
||||||
|
dep: depend |
||||||
|
|
||||||
|
clean: |
||||||
|
rm -f *.o *.d *~ .depend $(LIB) $(SLIB) *.so
|
||||||
|
|
||||||
|
distclean: clean |
||||||
|
rm -f Makefile.bak .depend
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(BUILD_SHARED),yes) |
||||||
|
install: all install-headers |
||||||
|
ifeq ($(CONFIG_WIN32),yes) |
||||||
|
install $(INSTALLSTRIP) -m 755 $(SLIB) "$(prefix)"
|
||||||
|
else |
||||||
|
install -d $(libdir)
|
||||||
|
install $(INSTALLSTRIP) -m 755 $(SLIB) $(libdir)/libavutil-$(VERSION).so
|
||||||
|
ln -sf libavutil-$(VERSION).so $(libdir)/libavutil.so
|
||||||
|
$(LDCONFIG) || true
|
||||||
|
endif |
||||||
|
else |
||||||
|
install: |
||||||
|
endif |
||||||
|
|
||||||
|
installlib: all install-headers |
||||||
|
install -m 644 $(LIB) "$(libdir)"
|
||||||
|
|
||||||
|
install-headers: |
||||||
|
mkdir -p "$(prefix)/include/ffmpeg"
|
||||||
|
install -m 644 $(SRC_PATH)/libavutil/avutil.h \
|
||||||
|
$(SRC_PATH)/libavutil/common.h \
|
||||||
|
$(SRC_PATH)/libavutil/mathematics.h \
|
||||||
|
$(SRC_PATH)/libavutil/integer.h \
|
||||||
|
$(SRC_PATH)/libavutil/rational.h \
|
||||||
|
$(SRC_PATH)/libavutil/intfloat_readwrite.h \
|
||||||
|
"$(prefix)/include/ffmpeg"
|
||||||
|
# install -d $(libdir)/pkgconfig
|
||||||
|
# install -m 644 ../libavutil.pc $(libdir)/pkgconfig
|
||||||
|
|
||||||
|
#
|
||||||
|
# include dependency files if they exist
|
||||||
|
#
|
||||||
|
ifneq ($(wildcard .depend),) |
||||||
|
include .depend |
||||||
|
endif |
@ -0,0 +1,34 @@ |
|||||||
|
#ifndef AVUTIL_H |
||||||
|
#define AVUTIL_H |
||||||
|
|
||||||
|
/**
|
||||||
|
* @file avutil.h |
||||||
|
* external api header. |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
extern "C" { |
||||||
|
#endif |
||||||
|
|
||||||
|
#define AV_STRINGIFY(s) AV_TOSTRING(s) |
||||||
|
#define AV_TOSTRING(s) #s |
||||||
|
|
||||||
|
#define LIBAVUTIL_VERSION_INT ((49<<16)+(0<<8)+0) |
||||||
|
#define LIBAVUTIL_VERSION 49.0.0 |
||||||
|
#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT |
||||||
|
|
||||||
|
#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) |
||||||
|
|
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
#include "mathematics.h" |
||||||
|
#include "rational.h" |
||||||
|
#include "integer.h" |
||||||
|
#include "intfloat_readwrite.h" |
||||||
|
|
||||||
|
#ifdef __cplusplus |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
||||||
|
#endif /* AVUTIL_H */ |
@ -0,0 +1,54 @@ |
|||||||
|
/*
|
||||||
|
* portable IEEE float/double read/write functions |
||||||
|
* |
||||||
|
* Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> |
||||||
|
* |
||||||
|
* This library 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 of the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* This library 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 this library; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
/**
|
||||||
|
* @file intfloat_readwrite.c |
||||||
|
* Portable IEEE float/double read/write functions. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
|
||||||
|
double av_int2dbl(int64_t v){ |
||||||
|
if(v+v > 0xFFELLU<<52) |
||||||
|
return 0.0/0.0; |
||||||
|
return ldexp(((v&(1LL<<52)-1) + (1LL<<52)) * (v>>63|1), (v>>52&0x7FF)-1075); |
||||||
|
} |
||||||
|
|
||||||
|
float av_int2flt(int32_t v){ |
||||||
|
if(v+v > 0xFF000000U) |
||||||
|
return 0.0/0.0; |
||||||
|
return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-150); |
||||||
|
} |
||||||
|
|
||||||
|
int64_t av_dbl2int(double d){ |
||||||
|
int e; |
||||||
|
if ( !d) return 0; |
||||||
|
else if(d-d) return 0x7FF0000000000000LL + ((int64_t)(d<0)<<63) + (d!=d); |
||||||
|
d= frexp(d, &e); |
||||||
|
return (int64_t)(d<0)<<63 | (e+1022LL)<<52 | (int64_t)((fabs(d)-0.5)*(1LL<<53)); |
||||||
|
} |
||||||
|
|
||||||
|
int32_t av_flt2int(float d){ |
||||||
|
int e; |
||||||
|
if ( !d) return 0; |
||||||
|
else if(d-d) return 0x7F800000 + ((d<0)<<31) + (d!=d); |
||||||
|
d= frexp(d, &e); |
||||||
|
return (d<0)<<31 | (e+126)<<23 | (int64_t)((fabs(d)-0.5)*(1<<24)); |
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
#ifndef INTFLOAT_READWRITE_H |
||||||
|
#define INTFLOAT_READWRITE_H |
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
|
||||||
|
double av_int2dbl(int64_t v); |
||||||
|
float av_int2flt(int32_t v); |
||||||
|
int64_t av_dbl2int(double d); |
||||||
|
int32_t av_flt2int(float d); |
||||||
|
|
||||||
|
#endif /* INTFLOAT_READWRITE_H */ |
@ -0,0 +1,84 @@ |
|||||||
|
/*
|
||||||
|
* Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> |
||||||
|
* |
||||||
|
* This library 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 of the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* This library 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 this library; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
/**
|
||||||
|
* @file mathematics.c |
||||||
|
* Miscellaneous math routines and tables. |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
#include "integer.h" |
||||||
|
#include "mathematics.h" |
||||||
|
|
||||||
|
const uint8_t ff_sqrt_tab[128]={ |
||||||
|
0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, |
||||||
|
5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, |
||||||
|
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, |
||||||
|
9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11 |
||||||
|
}; |
||||||
|
|
||||||
|
const uint8_t ff_log2_tab[256]={ |
||||||
|
0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, |
||||||
|
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, |
||||||
|
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, |
||||||
|
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, |
||||||
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, |
||||||
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, |
||||||
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, |
||||||
|
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 |
||||||
|
}; |
||||||
|
|
||||||
|
int64_t ff_gcd(int64_t a, int64_t b){ |
||||||
|
if(b) return ff_gcd(b, a%b); |
||||||
|
else return a; |
||||||
|
} |
||||||
|
|
||||||
|
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd){ |
||||||
|
AVInteger ai; |
||||||
|
int64_t r=0; |
||||||
|
assert(c > 0); |
||||||
|
assert(b >=0); |
||||||
|
assert(rnd >=0 && rnd<=5 && rnd!=4); |
||||||
|
|
||||||
|
if(a<0 && a != INT64_MIN) return -av_rescale_rnd(-a, b, c, rnd ^ ((rnd>>1)&1));
|
||||||
|
|
||||||
|
if(rnd==AV_ROUND_NEAR_INF) r= c/2; |
||||||
|
else if(rnd&1) r= c-1; |
||||||
|
|
||||||
|
if(b<=INT_MAX && c<=INT_MAX){ |
||||||
|
if(a<=INT_MAX) |
||||||
|
return (a * b + r)/c; |
||||||
|
else |
||||||
|
return a/c*b + (a%c*b + r)/c; |
||||||
|
} |
||||||
|
|
||||||
|
ai= av_mul_i(av_int2i(a), av_int2i(b)); |
||||||
|
ai= av_add_i(ai, av_int2i(r)); |
||||||
|
|
||||||
|
return av_i2int(av_div_i(ai, av_int2i(c))); |
||||||
|
} |
||||||
|
|
||||||
|
int64_t av_rescale(int64_t a, int64_t b, int64_t c){ |
||||||
|
return av_rescale_rnd(a, b, c, AV_ROUND_NEAR_INF); |
||||||
|
} |
||||||
|
|
||||||
|
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq){ |
||||||
|
int64_t b= bq.num * (int64_t)cq.den; |
||||||
|
int64_t c= cq.num * (int64_t)bq.den; |
||||||
|
return av_rescale_rnd(a, b, c, AV_ROUND_NEAR_INF); |
||||||
|
} |
@ -0,0 +1,31 @@ |
|||||||
|
#ifndef MATHEMATICS_H |
||||||
|
#define MATHEMATICS_H |
||||||
|
|
||||||
|
#include "rational.h" |
||||||
|
|
||||||
|
enum AVRounding { |
||||||
|
AV_ROUND_ZERO = 0, ///< round toward zero
|
||||||
|
AV_ROUND_INF = 1, ///< round away from zero
|
||||||
|
AV_ROUND_DOWN = 2, ///< round toward -infinity
|
||||||
|
AV_ROUND_UP = 3, ///< round toward +infinity
|
||||||
|
AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero
|
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* rescale a 64bit integer with rounding to nearest. |
||||||
|
* a simple a*b/c isn't possible as it can overflow |
||||||
|
*/ |
||||||
|
int64_t av_rescale(int64_t a, int64_t b, int64_t c); |
||||||
|
|
||||||
|
/**
|
||||||
|
* rescale a 64bit integer with specified rounding. |
||||||
|
* a simple a*b/c isn't possible as it can overflow |
||||||
|
*/ |
||||||
|
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding); |
||||||
|
|
||||||
|
/**
|
||||||
|
* rescale a 64bit integer by 2 rational numbers. |
||||||
|
*/ |
||||||
|
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq); |
||||||
|
|
||||||
|
#endif /* MATHEMATICS_H */ |
Loading…
Reference in new issue