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 | ||||