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