Originally committed as revision 4489 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -6,7 +6,7 @@ include config.mak | |||||
| VPATH=$(SRC_PATH) | VPATH=$(SRC_PATH) | ||||
| CFLAGS=$(OPTFLAGS) -I. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE | |||||
| CFLAGS=$(OPTFLAGS) -I. -I$(SRC_PATH) -I$(SRC_PATH)/libavutil -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE | |||||
| LDFLAGS+= -g | LDFLAGS+= -g | ||||
| ifeq ($(TARGET_GPROF),yes) | ifeq ($(TARGET_GPROF),yes) | ||||
| @@ -91,11 +91,12 @@ endif | |||||
| OBJS = ffmpeg.o ffserver.o cmdutils.o $(FFPLAY_O) | OBJS = ffmpeg.o ffserver.o cmdutils.o $(FFPLAY_O) | ||||
| SRCS = $(OBJS:.o=.c) $(ASM_OBJS:.o=.s) | SRCS = $(OBJS:.o=.c) $(ASM_OBJS:.o=.s) | ||||
| FFLIBS = -L./libavformat -lavformat$(BUILDSUF) -L./libavcodec -lavcodec$(BUILDSUF) | |||||
| FFLIBS = -L./libavformat -lavformat$(BUILDSUF) -L./libavcodec -lavcodec$(BUILDSUF) -L./libavutil -lavutil$(BUILDSUF) | |||||
| all: lib $(PROG) $(PROGTEST) $(VHOOK) $(QTFASTSTART) $(DOC) | all: lib $(PROG) $(PROGTEST) $(VHOOK) $(QTFASTSTART) $(DOC) | ||||
| lib: | lib: | ||||
| $(MAKE) -C libavutil all | |||||
| $(MAKE) -C libavcodec all | $(MAKE) -C libavcodec all | ||||
| $(MAKE) -C libavformat all | $(MAKE) -C libavformat all | ||||
| @@ -140,6 +141,7 @@ documentation: | |||||
| .PHONY: install | .PHONY: install | ||||
| install: all install-man $(INSTALLVHOOK) | install: all install-man $(INSTALLVHOOK) | ||||
| $(MAKE) -C libavutil install | |||||
| $(MAKE) -C libavcodec install | $(MAKE) -C libavcodec install | ||||
| $(MAKE) -C libavformat install | $(MAKE) -C libavformat install | ||||
| install -d "$(bindir)" | install -d "$(bindir)" | ||||
| @@ -162,6 +164,7 @@ install-vhook: | |||||
| $(MAKE) -C vhook install | $(MAKE) -C vhook install | ||||
| installlib: | installlib: | ||||
| $(MAKE) -C libavutil installlib | |||||
| $(MAKE) -C libavcodec installlib | $(MAKE) -C libavcodec installlib | ||||
| $(MAKE) -C libavformat installlib | $(MAKE) -C libavformat installlib | ||||
| @@ -182,6 +185,7 @@ endif | |||||
| @for i in $(DEP_LIBS) ; do if $(TEST) $$i -nt .libs ; then touch .libs; fi ; done | @for i in $(DEP_LIBS) ; do if $(TEST) $$i -nt .libs ; then touch .libs; fi ; done | ||||
| clean: $(CLEANVHOOK) | clean: $(CLEANVHOOK) | ||||
| $(MAKE) -C libavutil clean | |||||
| $(MAKE) -C libavcodec clean | $(MAKE) -C libavcodec clean | ||||
| $(MAKE) -C libavformat clean | $(MAKE) -C libavformat clean | ||||
| $(MAKE) -C tests clean | $(MAKE) -C tests clean | ||||
| @@ -7,7 +7,7 @@ include ../config.mak | |||||
| VPATH=$(SRC_PATH)/libavcodec | VPATH=$(SRC_PATH)/libavcodec | ||||
| # NOTE: -I.. is needed to include config.h | # 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 $(AMR_CFLAGS) | |||||
| CFLAGS=$(OPTFLAGS) -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavutil -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE $(AMR_CFLAGS) | |||||
| OBJS= bitstream.o utils.o mem.o allcodecs.o \ | OBJS= bitstream.o utils.o mem.o allcodecs.o \ | ||||
| mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o\ | mpegvideo.o jrevdct.o jfdctfst.o jfdctint.o\ | ||||
| @@ -16,8 +16,8 @@ OBJS= bitstream.o utils.o mem.o allcodecs.o \ | |||||
| mpeg12.o mpegaudiodec.o pcm.o simple_idct.o \ | mpeg12.o mpegaudiodec.o pcm.o simple_idct.o \ | ||||
| ratecontrol.o adpcm.o eval.o error_resilience.o \ | ratecontrol.o adpcm.o eval.o error_resilience.o \ | ||||
| fft.o mdct.o raw.o golomb.o cabac.o\ | fft.o mdct.o raw.o golomb.o cabac.o\ | ||||
| dpcm.o adx.o rational.o faandct.o parser.o g726.o \ | |||||
| vp3dsp.o integer.o h264idct.o rangecoder.o pnm.o h263.o msmpeg4.o h263dec.o dvdsub.o dvbsub.o dvbsubdec.o | |||||
| dpcm.o adx.o faandct.o parser.o g726.o \ | |||||
| vp3dsp.o h264idct.o rangecoder.o pnm.o h263.o msmpeg4.o h263dec.o dvdsub.o dvbsub.o dvbsubdec.o | |||||
| ifeq ($(CONFIG_AASC_DECODER),yes) | ifeq ($(CONFIG_AASC_DECODER),yes) | ||||
| OBJS+= aasc.o | OBJS+= aasc.o | ||||
| @@ -234,6 +234,8 @@ OBJS+= liba52/bit_allocate.o liba52/bitstream.o liba52/downmix.o \ | |||||
| endif | endif | ||||
| endif | endif | ||||
| EXTRALIBS += -L$(SRC_PATH)/libavutil -lavutil$(BUILDSUF) | |||||
| # currently using libdts for dts decoding | # currently using libdts for dts decoding | ||||
| ifeq ($(CONFIG_DTS),yes) | ifeq ($(CONFIG_DTS),yes) | ||||
| OBJS+= dtsdec.o | OBJS+= dtsdec.o | ||||
| @@ -375,6 +377,7 @@ SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S) | |||||
| OBJS := $(OBJS) $(ASM_OBJS) | OBJS := $(OBJS) $(ASM_OBJS) | ||||
| LIB= $(LIBPREF)avcodec$(LIBSUF) | LIB= $(LIBPREF)avcodec$(LIBSUF) | ||||
| LIBAVUTIL= $(SRC_PATH)/libavutil/$(LIBPREF)avutil$(LIBSUF) | |||||
| ifeq ($(BUILD_SHARED),yes) | ifeq ($(BUILD_SHARED),yes) | ||||
| SLIB= $(SLIBPREF)avcodec$(SLIBSUF) | SLIB= $(SLIBPREF)avcodec$(SLIBSUF) | ||||
| endif | endif | ||||
| @@ -446,7 +449,7 @@ cleanamrwbfloat: | |||||
| # api example program | # api example program | ||||
| apiexample: apiexample.c $(LIB) | apiexample: apiexample.c $(LIB) | ||||
| $(CC) $(CFLAGS) -o $@ $< $(LIB) $(EXTRALIBS) -lm | |||||
| $(CC) $(CFLAGS) -o $@ $< $(LIB) $(LIBAVUTIL) $(EXTRALIBS) -lm | |||||
| # cpuid test | # cpuid test | ||||
| cpuid_test: i386/cputest.c | cpuid_test: i386/cputest.c | ||||
| @@ -464,7 +467,7 @@ motion-test: motion_test.o $(LIB) | |||||
| $(CC) -o $@ $^ -lm | $(CC) -o $@ $^ -lm | ||||
| fft-test: fft-test.o $(LIB) | fft-test: fft-test.o $(LIB) | ||||
| $(CC) -o $@ $^ -lm | |||||
| $(CC) -o $@ $^ $(LIBAVUTIL) -lm | |||||
| ifeq ($(BUILD_SHARED),yes) | ifeq ($(BUILD_SHARED),yes) | ||||
| install: all install-headers | install: all install-headers | ||||
| @@ -489,8 +492,6 @@ installlib: all install-headers | |||||
| install-headers: | install-headers: | ||||
| mkdir -p "$(prefix)/include/ffmpeg" | mkdir -p "$(prefix)/include/ffmpeg" | ||||
| install -m 644 $(SRC_PATH)/libavcodec/avcodec.h \ | install -m 644 $(SRC_PATH)/libavcodec/avcodec.h \ | ||||
| $(SRC_PATH)/libavcodec/common.h \ | |||||
| $(SRC_PATH)/libavcodec/rational.h \ | |||||
| "$(prefix)/include/ffmpeg" | "$(prefix)/include/ffmpeg" | ||||
| install -d $(libdir)/pkgconfig | install -d $(libdir)/pkgconfig | ||||
| install -m 644 ../libavcodec.pc $(libdir)/pkgconfig | install -m 644 ../libavcodec.pc $(libdir)/pkgconfig | ||||
| @@ -11,8 +11,7 @@ | |||||
| extern "C" { | extern "C" { | ||||
| #endif | #endif | ||||
| #include "common.h" | |||||
| #include "rational.h" | |||||
| #include "avutil.h" | |||||
| #include <sys/types.h> /* size_t */ | #include <sys/types.h> /* size_t */ | ||||
| //FIXME the following 2 really dont belong in here | //FIXME the following 2 really dont belong in here | ||||
| @@ -22,8 +21,8 @@ extern "C" { | |||||
| #define AV_STRINGIFY(s) AV_TOSTRING(s) | #define AV_STRINGIFY(s) AV_TOSTRING(s) | ||||
| #define AV_TOSTRING(s) #s | #define AV_TOSTRING(s) #s | ||||
| #define LIBAVCODEC_VERSION_INT ((49<<16)+(0<<8)+0) | |||||
| #define LIBAVCODEC_VERSION 49.0.0 | |||||
| #define LIBAVCODEC_VERSION_INT ((49<<16)+(0<<8)+1) | |||||
| #define LIBAVCODEC_VERSION 49.0.1 | |||||
| #define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT | #define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT | ||||
| #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) | #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) | ||||
| @@ -279,14 +278,6 @@ enum Motion_Est_ID { | |||||
| ME_X1 | ME_X1 | ||||
| }; | }; | ||||
| 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 | |||||
| }; | |||||
| enum AVDiscard{ | enum AVDiscard{ | ||||
| //we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames) | //we leave some space between them for extensions (drop some keyframes for intra only or drop just some bidir frames) | ||||
| AVDISCARD_NONE =-16, ///< discard nothing | AVDISCARD_NONE =-16, ///< discard nothing | ||||
| @@ -2308,36 +2299,6 @@ void avcodec_default_free_buffers(AVCodecContext *s); | |||||
| */ | */ | ||||
| char av_get_pict_type_char(int pict_type); | char av_get_pict_type_char(int pict_type); | ||||
| /** | |||||
| * reduce a fraction. | |||||
| * this is usefull for framerate calculations | |||||
| * @param max the maximum allowed for dst_nom & dst_den | |||||
| * @return 1 if exact, 0 otherwise | |||||
| */ | |||||
| int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max); | |||||
| /** | |||||
| * 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); | |||||
| double av_int2dbl(int64_t v); | |||||
| float av_int2flt(int32_t v); | |||||
| int64_t av_dbl2int(double d); | |||||
| int32_t av_flt2int(float d); | |||||
| /* frame parsing */ | /* frame parsing */ | ||||
| typedef struct AVCodecParserContext { | typedef struct AVCodecParserContext { | ||||
| @@ -13,7 +13,7 @@ | |||||
| * a page about fdct at http://www.geocities.com/ssavekar/dct.htm | * a page about fdct at http://www.geocities.com/ssavekar/dct.htm | ||||
| * Skal's fdct at http://skal.planet-d.net/coding/dct.html | * Skal's fdct at http://skal.planet-d.net/coding/dct.html | ||||
| */ | */ | ||||
| #include "../common.h" | |||||
| #include "common.h" | |||||
| #include "../dsputil.h" | #include "../dsputil.h" | ||||
| #include "mmx.h" | #include "mmx.h" | ||||
| @@ -22,7 +22,7 @@ | |||||
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
| */ | */ | ||||
| #include "../common.h" | |||||
| #include "common.h" | |||||
| #include "../dsputil.h" | #include "../dsputil.h" | ||||
| #include "mmx.h" | #include "mmx.h" | ||||
| @@ -31,24 +31,6 @@ | |||||
| #include <stdarg.h> | #include <stdarg.h> | ||||
| #include <limits.h> | #include <limits.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 | |||||
| }; | |||||
| const uint8_t ff_reverse[256]={ | const uint8_t ff_reverse[256]={ | ||||
| 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, | 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, | ||||
| 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, | 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, | ||||
| @@ -938,107 +920,6 @@ char av_get_pict_type_char(int pict_type){ | |||||
| } | } | ||||
| } | } | ||||
| int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){ | |||||
| AVRational a0={0,1}, a1={1,0}; | |||||
| int sign= (nom<0) ^ (den<0); | |||||
| int64_t gcd= ff_gcd(ABS(nom), ABS(den)); | |||||
| nom = ABS(nom)/gcd; | |||||
| den = ABS(den)/gcd; | |||||
| if(nom<=max && den<=max){ | |||||
| a1= (AVRational){nom, den}; | |||||
| den=0; | |||||
| } | |||||
| while(den){ | |||||
| int64_t x = nom / den; | |||||
| int64_t next_den= nom - den*x; | |||||
| int64_t a2n= x*a1.num + a0.num; | |||||
| int64_t a2d= x*a1.den + a0.den; | |||||
| if(a2n > max || a2d > max) break; | |||||
| a0= a1; | |||||
| a1= (AVRational){a2n, a2d}; | |||||
| nom= den; | |||||
| den= next_den; | |||||
| } | |||||
| assert(ff_gcd(a1.num, a1.den) == 1); | |||||
| *dst_nom = sign ? -a1.num : a1.num; | |||||
| *dst_den = a1.den; | |||||
| return den==0; | |||||
| } | |||||
| 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); | |||||
| } | |||||
| int64_t ff_gcd(int64_t a, int64_t b){ | |||||
| if(b) return ff_gcd(b, a%b); | |||||
| else return a; | |||||
| } | |||||
| 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)); | |||||
| } | |||||
| /* av_log API */ | /* av_log API */ | ||||
| static int av_log_level = AV_LOG_INFO; | static int av_log_level = AV_LOG_INFO; | ||||
| @@ -6,7 +6,7 @@ include ../config.mak | |||||
| VPATH=$(SRC_PATH)/libavformat | VPATH=$(SRC_PATH)/libavformat | ||||
| CFLAGS=$(OPTFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE | |||||
| CFLAGS=$(OPTFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavutil -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE | |||||
| OBJS= utils.o cutils.o os_support.o allformats.o | OBJS= utils.o cutils.o os_support.o allformats.o | ||||
| PPOBJS= | PPOBJS= | ||||
| @@ -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 */ | |||||
| @@ -28,9 +28,42 @@ | |||||
| #include <limits.h> | #include <limits.h> | ||||
| #include "common.h" | #include "common.h" | ||||
| #include "avcodec.h" | |||||
| #include "mathematics.h" | |||||
| #include "rational.h" | #include "rational.h" | ||||
| int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){ | |||||
| AVRational a0={0,1}, a1={1,0}; | |||||
| int sign= (nom<0) ^ (den<0); | |||||
| int64_t gcd= ff_gcd(ABS(nom), ABS(den)); | |||||
| nom = ABS(nom)/gcd; | |||||
| den = ABS(den)/gcd; | |||||
| if(nom<=max && den<=max){ | |||||
| a1= (AVRational){nom, den}; | |||||
| den=0; | |||||
| } | |||||
| while(den){ | |||||
| int64_t x = nom / den; | |||||
| int64_t next_den= nom - den*x; | |||||
| int64_t a2n= x*a1.num + a0.num; | |||||
| int64_t a2d= x*a1.den + a0.den; | |||||
| if(a2n > max || a2d > max) break; | |||||
| a0= a1; | |||||
| a1= (AVRational){a2n, a2d}; | |||||
| nom= den; | |||||
| den= next_den; | |||||
| } | |||||
| assert(ff_gcd(a1.num, a1.den) == 1); | |||||
| *dst_nom = sign ? -a1.num : a1.num; | |||||
| *dst_den = a1.den; | |||||
| return den==0; | |||||
| } | |||||
| /** | /** | ||||
| * returns b*c. | * returns b*c. | ||||
| */ | */ | ||||
| @@ -52,6 +52,14 @@ static inline double av_q2d(AVRational a){ | |||||
| return a.num / (double) a.den; | return a.num / (double) a.den; | ||||
| } | } | ||||
| /** | |||||
| * reduce a fraction. | |||||
| * this is usefull for framerate calculations | |||||
| * @param max the maximum allowed for dst_nom & dst_den | |||||
| * @return 1 if exact, 0 otherwise | |||||
| */ | |||||
| int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max); | |||||
| AVRational av_mul_q(AVRational b, AVRational c); | AVRational av_mul_q(AVRational b, AVRational c); | ||||
| AVRational av_div_q(AVRational b, AVRational c); | AVRational av_div_q(AVRational b, AVRational c); | ||||
| AVRational av_add_q(AVRational b, AVRational c); | AVRational av_add_q(AVRational b, AVRational c); | ||||
| @@ -2,7 +2,7 @@ include ../config.mak | |||||
| VPATH=$(SRC_PATH)/vhook | VPATH=$(SRC_PATH)/vhook | ||||
| CFLAGS=-fPIC $(SHCFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavformat -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H | |||||
| CFLAGS=-fPIC $(SHCFLAGS) -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavformat -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavutil -DHAVE_AV_CONFIG_H | |||||
| ifeq ($(CONFIG_DARWIN),yes) | ifeq ($(CONFIG_DARWIN),yes) | ||||
| SHFLAGS+=-flat_namespace -undefined suppress | SHFLAGS+=-flat_namespace -undefined suppress | ||||