Commit 199436b9 authored by Aurelien Jacobs's avatar Aurelien Jacobs

moves mid_pred() into mathops.h (with arch specific code split by directory)

Originally committed as revision 16681 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 48a81c0f
......@@ -28,6 +28,7 @@
#include "avcodec.h"
#include "bitstream.h"
#include "golomb.h"
#include "mathops.h"
#include "cavs.h"
#include "cavsdata.h"
......
......@@ -32,6 +32,7 @@
#include "simple_idct.h"
#include "faandct.h"
#include "faanidct.h"
#include "mathops.h"
#include "h263.h"
#include "snow.h"
......
......@@ -30,6 +30,7 @@
#include "dsputil.h"
#include "rangecoder.h"
#include "golomb.h"
#include "mathops.h"
#define MAX_PLANES 4
#define CONTEXT_SIZE 32
......
......@@ -39,6 +39,7 @@
#include "mpegvideo.h"
#include "h263data.h"
#include "mpeg4data.h"
#include "mathops.h"
//#undef NDEBUG
//#include <assert.h>
......
......@@ -32,6 +32,7 @@
#include "h264data.h"
#include "h264_parser.h"
#include "golomb.h"
#include "mathops.h"
#include "rectangle.h"
#include "vdpau_internal.h"
......
......@@ -31,6 +31,7 @@
#include "avcodec.h"
#include "bitstream.h"
#include "dsputil.h"
#include "mathops.h"
#define VLC_BITS 11
......
......@@ -28,6 +28,7 @@
#include "avcodec.h"
#include "bitstream.h"
#include "golomb.h"
#include "mathops.h"
#include "mjpeg.h"
#include "mjpegdec.h"
#include "jpegls.h"
......
......@@ -28,6 +28,7 @@
#include "avcodec.h"
#include "bitstream.h"
#include "golomb.h"
#include "mathops.h"
#include "dsputil.h"
#include "mjpeg.h"
#include "jpegls.h"
......
......@@ -27,6 +27,7 @@
#include "avcodec.h"
#include "bitstream.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,
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))
#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 */
......@@ -32,6 +32,7 @@
#include <limits.h>
#include "avcodec.h"
#include "dsputil.h"
#include "mathops.h"
#include "mpegvideo.h"
#undef NDEBUG
......
......@@ -60,6 +60,7 @@
#include "roqvideo.h"
#include "bytestream.h"
#include "elbg.h"
#include "mathops.h"
#define CHROMA_BIAS 1
......
......@@ -28,6 +28,7 @@
#include "dsputil.h"
#include "mpegvideo.h"
#include "golomb.h"
#include "mathops.h"
#include "rectangle.h"
#include "rv34vlc.h"
......
......@@ -23,6 +23,7 @@
#include "snow.h"
#include "rangecoder.h"
#include "mathops.h"
#include "mpegvideo.h"
......
......@@ -37,6 +37,7 @@
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
#include "mathops.h"
#include "svq1.h"
......
......@@ -34,6 +34,7 @@
#include "msmpeg4data.h"
#include "unary.h"
#include "simple_idct.h"
#include "mathops.h"
#undef NDEBUG
#include <assert.h>
......
......@@ -21,6 +21,7 @@
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
#include "mathops.h"
#include "msmpeg4.h"
#include "msmpeg4data.h"
#include "intrax8.h"
......
......@@ -25,6 +25,7 @@
#include "libavutil/x86_cpu.h"
#include "libavcodec/dsputil.h"
#include "libavcodec/mpegvideo.h"
#include "libavcodec/mathops.h"
#include "dsputil_mmx.h"
......
......@@ -22,6 +22,9 @@
#ifndef AVCODEC_X86_MATHOPS_H
#define AVCODEC_X86_MATHOPS_H
#include "config.h"
#include "libavutil/common.h"
#define MULL(ra, rb, shift) \
({ int rt, dummy; __asm__ (\
"imull %3 \n\t"\
......@@ -40,4 +43,25 @@
__asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)ra), "g" ((int)rb));\
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 */
......@@ -151,47 +151,6 @@ static inline av_const int av_log2_16bit(unsigned int v)
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
* @param a value to clip
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment