Originally committed as revision 16681 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
@@ -28,6 +28,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "bitstream.h" | #include "bitstream.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
#include "cavs.h" | #include "cavs.h" | ||||
#include "cavsdata.h" | #include "cavsdata.h" | ||||
@@ -32,6 +32,7 @@ | |||||
#include "simple_idct.h" | #include "simple_idct.h" | ||||
#include "faandct.h" | #include "faandct.h" | ||||
#include "faanidct.h" | #include "faanidct.h" | ||||
#include "mathops.h" | |||||
#include "h263.h" | #include "h263.h" | ||||
#include "snow.h" | #include "snow.h" | ||||
@@ -30,6 +30,7 @@ | |||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "rangecoder.h" | #include "rangecoder.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
#define MAX_PLANES 4 | #define MAX_PLANES 4 | ||||
#define CONTEXT_SIZE 32 | #define CONTEXT_SIZE 32 | ||||
@@ -39,6 +39,7 @@ | |||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
#include "h263data.h" | #include "h263data.h" | ||||
#include "mpeg4data.h" | #include "mpeg4data.h" | ||||
#include "mathops.h" | |||||
//#undef NDEBUG | //#undef NDEBUG | ||||
//#include <assert.h> | //#include <assert.h> | ||||
@@ -32,6 +32,7 @@ | |||||
#include "h264data.h" | #include "h264data.h" | ||||
#include "h264_parser.h" | #include "h264_parser.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
#include "rectangle.h" | #include "rectangle.h" | ||||
#include "vdpau_internal.h" | #include "vdpau_internal.h" | ||||
@@ -31,6 +31,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "bitstream.h" | #include "bitstream.h" | ||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mathops.h" | |||||
#define VLC_BITS 11 | #define VLC_BITS 11 | ||||
@@ -28,6 +28,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "bitstream.h" | #include "bitstream.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
#include "mjpeg.h" | #include "mjpeg.h" | ||||
#include "mjpegdec.h" | #include "mjpegdec.h" | ||||
#include "jpegls.h" | #include "jpegls.h" | ||||
@@ -28,6 +28,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "bitstream.h" | #include "bitstream.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mjpeg.h" | #include "mjpeg.h" | ||||
#include "jpegls.h" | #include "jpegls.h" | ||||
@@ -27,6 +27,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "bitstream.h" | #include "bitstream.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
enum LOCO_MODE {LOCO_UNKN=0, LOCO_CYUY2=-1, LOCO_CRGB=-2, LOCO_CRGBA=-3, LOCO_CYV12=-4, | enum LOCO_MODE {LOCO_UNKN=0, LOCO_CYUY2=-1, LOCO_CRGB=-2, LOCO_CRGBA=-3, LOCO_CYV12=-4, | ||||
LOCO_YUY2=1, LOCO_UYVY=2, LOCO_RGB=3, LOCO_RGBA=4, LOCO_YV12=5}; | LOCO_YUY2=1, LOCO_UYVY=2, LOCO_RGB=3, LOCO_RGBA=4, LOCO_YV12=5}; | ||||
@@ -83,5 +83,35 @@ static av_always_inline int MULH(int a, int b){ | |||||
# define MLS16(rt, ra, rb) ((rt) -= (ra) * (rb)) | # define MLS16(rt, ra, rb) ((rt) -= (ra) * (rb)) | ||||
#endif | #endif | ||||
/* median of 3 */ | |||||
#ifndef mid_pred | |||||
#define mid_pred mid_pred | |||||
static inline av_const int mid_pred(int a, int b, int c) | |||||
{ | |||||
#if 0 | |||||
int t= (a-b)&((a-b)>>31); | |||||
a-=t; | |||||
b+=t; | |||||
b-= (b-c)&((b-c)>>31); | |||||
b+= (a-b)&((a-b)>>31); | |||||
return b; | |||||
#else | |||||
if(a>b){ | |||||
if(c>b){ | |||||
if(c>a) b=a; | |||||
else b=c; | |||||
} | |||||
}else{ | |||||
if(b>c){ | |||||
if(c>a) b=c; | |||||
else b=a; | |||||
} | |||||
} | |||||
return b; | |||||
#endif | |||||
} | |||||
#endif | |||||
#endif /* AVCODEC_MATHOPS_H */ | #endif /* AVCODEC_MATHOPS_H */ | ||||
@@ -32,6 +32,7 @@ | |||||
#include <limits.h> | #include <limits.h> | ||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mathops.h" | |||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
#undef NDEBUG | #undef NDEBUG | ||||
@@ -60,6 +60,7 @@ | |||||
#include "roqvideo.h" | #include "roqvideo.h" | ||||
#include "bytestream.h" | #include "bytestream.h" | ||||
#include "elbg.h" | #include "elbg.h" | ||||
#include "mathops.h" | |||||
#define CHROMA_BIAS 1 | #define CHROMA_BIAS 1 | ||||
@@ -28,6 +28,7 @@ | |||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
#include "golomb.h" | #include "golomb.h" | ||||
#include "mathops.h" | |||||
#include "rectangle.h" | #include "rectangle.h" | ||||
#include "rv34vlc.h" | #include "rv34vlc.h" | ||||
@@ -23,6 +23,7 @@ | |||||
#include "snow.h" | #include "snow.h" | ||||
#include "rangecoder.h" | #include "rangecoder.h" | ||||
#include "mathops.h" | |||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
@@ -37,6 +37,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
#include "mathops.h" | |||||
#include "svq1.h" | #include "svq1.h" | ||||
@@ -34,6 +34,7 @@ | |||||
#include "msmpeg4data.h" | #include "msmpeg4data.h" | ||||
#include "unary.h" | #include "unary.h" | ||||
#include "simple_idct.h" | #include "simple_idct.h" | ||||
#include "mathops.h" | |||||
#undef NDEBUG | #undef NDEBUG | ||||
#include <assert.h> | #include <assert.h> | ||||
@@ -21,6 +21,7 @@ | |||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "dsputil.h" | #include "dsputil.h" | ||||
#include "mpegvideo.h" | #include "mpegvideo.h" | ||||
#include "mathops.h" | |||||
#include "msmpeg4.h" | #include "msmpeg4.h" | ||||
#include "msmpeg4data.h" | #include "msmpeg4data.h" | ||||
#include "intrax8.h" | #include "intrax8.h" | ||||
@@ -25,6 +25,7 @@ | |||||
#include "libavutil/x86_cpu.h" | #include "libavutil/x86_cpu.h" | ||||
#include "libavcodec/dsputil.h" | #include "libavcodec/dsputil.h" | ||||
#include "libavcodec/mpegvideo.h" | #include "libavcodec/mpegvideo.h" | ||||
#include "libavcodec/mathops.h" | |||||
#include "dsputil_mmx.h" | #include "dsputil_mmx.h" | ||||
@@ -22,6 +22,9 @@ | |||||
#ifndef AVCODEC_X86_MATHOPS_H | #ifndef AVCODEC_X86_MATHOPS_H | ||||
#define AVCODEC_X86_MATHOPS_H | #define AVCODEC_X86_MATHOPS_H | ||||
#include "config.h" | |||||
#include "libavutil/common.h" | |||||
#define MULL(ra, rb, shift) \ | #define MULL(ra, rb, shift) \ | ||||
({ int rt, dummy; __asm__ (\ | ({ int rt, dummy; __asm__ (\ | ||||
"imull %3 \n\t"\ | "imull %3 \n\t"\ | ||||
@@ -40,4 +43,25 @@ | |||||
__asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)ra), "g" ((int)rb));\ | __asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)ra), "g" ((int)rb));\ | ||||
rt; }) | rt; }) | ||||
#if HAVE_CMOV | |||||
/* median of 3 */ | |||||
#define mid_pred mid_pred | |||||
static inline av_const int mid_pred(int a, int b, int c) | |||||
{ | |||||
int i=b; | |||||
__asm__ volatile( | |||||
"cmp %2, %1 \n\t" | |||||
"cmovg %1, %0 \n\t" | |||||
"cmovg %2, %1 \n\t" | |||||
"cmp %3, %1 \n\t" | |||||
"cmovl %3, %1 \n\t" | |||||
"cmp %1, %0 \n\t" | |||||
"cmovg %1, %0 \n\t" | |||||
:"+&r"(i), "+&r"(a) | |||||
:"r"(b), "r"(c) | |||||
); | |||||
return i; | |||||
} | |||||
#endif | |||||
#endif /* AVCODEC_X86_MATHOPS_H */ | #endif /* AVCODEC_X86_MATHOPS_H */ |
@@ -151,47 +151,6 @@ static inline av_const int av_log2_16bit(unsigned int v) | |||||
return n; | return n; | ||||
} | } | ||||
/* median of 3 */ | |||||
static inline av_const int mid_pred(int a, int b, int c) | |||||
{ | |||||
#if HAVE_CMOV | |||||
int i=b; | |||||
__asm__ volatile( | |||||
"cmp %2, %1 \n\t" | |||||
"cmovg %1, %0 \n\t" | |||||
"cmovg %2, %1 \n\t" | |||||
"cmp %3, %1 \n\t" | |||||
"cmovl %3, %1 \n\t" | |||||
"cmp %1, %0 \n\t" | |||||
"cmovg %1, %0 \n\t" | |||||
:"+&r"(i), "+&r"(a) | |||||
:"r"(b), "r"(c) | |||||
); | |||||
return i; | |||||
#elif 0 | |||||
int t= (a-b)&((a-b)>>31); | |||||
a-=t; | |||||
b+=t; | |||||
b-= (b-c)&((b-c)>>31); | |||||
b+= (a-b)&((a-b)>>31); | |||||
return b; | |||||
#else | |||||
if(a>b){ | |||||
if(c>b){ | |||||
if(c>a) b=a; | |||||
else b=c; | |||||
} | |||||
}else{ | |||||
if(b>c){ | |||||
if(c>a) b=c; | |||||
else b=a; | |||||
} | |||||
} | |||||
return b; | |||||
#endif | |||||
} | |||||
/** | /** | ||||
* clip a signed integer value into the amin-amax range | * clip a signed integer value into the amin-amax range | ||||
* @param a value to clip | * @param a value to clip | ||||