revert r12489.
Originally committed as revision 12490 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
6544f48f03
commit
2119bb8f51
@ -24,6 +24,6 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf,
|
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf,
|
||||||
unsigned int len) av_pure;
|
unsigned int len);
|
||||||
|
|
||||||
#endif /* FFMPEG_ADLER32_H */
|
#endif /* FFMPEG_ADLER32_H */
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
# define LEGACY_REGS "=q"
|
# define LEGACY_REGS "=q"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static av_always_inline av_const uint16_t bswap_16(uint16_t x)
|
static av_always_inline uint16_t bswap_16(uint16_t x)
|
||||||
{
|
{
|
||||||
#if defined(ARCH_X86)
|
#if defined(ARCH_X86)
|
||||||
__asm("rorw $8, %0" :
|
__asm("rorw $8, %0" :
|
||||||
@ -54,7 +54,7 @@ static av_always_inline av_const uint16_t bswap_16(uint16_t x)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
static av_always_inline av_const uint32_t bswap_32(uint32_t x)
|
static av_always_inline uint32_t bswap_32(uint32_t x)
|
||||||
{
|
{
|
||||||
#if defined(ARCH_X86)
|
#if defined(ARCH_X86)
|
||||||
#ifdef HAVE_BSWAP
|
#ifdef HAVE_BSWAP
|
||||||
@ -93,7 +93,7 @@ static av_always_inline av_const uint32_t bswap_32(uint32_t x)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64_t av_const bswap_64(uint64_t x)
|
static inline uint64_t bswap_64(uint64_t x)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
x= ((x<< 8)&0xFF00FF00FF00FF00ULL) | ((x>> 8)&0x00FF00FF00FF00FFULL);
|
x= ((x<< 8)&0xFF00FF00FF00FF00ULL) | ((x>> 8)&0x00FF00FF00FF00FFULL);
|
||||||
|
@ -57,22 +57,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef av_pure
|
|
||||||
#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
|
|
||||||
# define av_pure __attribute__((pure))
|
|
||||||
#else
|
|
||||||
# define av_pure
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef av_const
|
|
||||||
#if defined(__GNUC__) && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 5)
|
|
||||||
# define av_const __attribute__((const))
|
|
||||||
#else
|
|
||||||
# define av_const
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_AV_CONFIG_H
|
#ifdef HAVE_AV_CONFIG_H
|
||||||
# include "internal.h"
|
# include "internal.h"
|
||||||
#endif /* HAVE_AV_CONFIG_H */
|
#endif /* HAVE_AV_CONFIG_H */
|
||||||
@ -110,7 +94,7 @@
|
|||||||
/* misc math functions */
|
/* misc math functions */
|
||||||
extern const uint8_t ff_log2_tab[256];
|
extern const uint8_t ff_log2_tab[256];
|
||||||
|
|
||||||
static inline av_const int av_log2(unsigned int v)
|
static inline int av_log2(unsigned int v)
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
if (v & 0xffff0000) {
|
if (v & 0xffff0000) {
|
||||||
@ -126,7 +110,7 @@ static inline av_const int av_log2(unsigned int v)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline av_const int av_log2_16bit(unsigned int v)
|
static inline int av_log2_16bit(unsigned int v)
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
if (v & 0xff00) {
|
if (v & 0xff00) {
|
||||||
@ -139,7 +123,7 @@ static inline av_const int av_log2_16bit(unsigned int v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* median of 3 */
|
/* median of 3 */
|
||||||
static inline av_const int mid_pred(int a, int b, int c)
|
static inline int mid_pred(int a, int b, int c)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CMOV
|
#ifdef HAVE_CMOV
|
||||||
int i=b;
|
int i=b;
|
||||||
@ -186,7 +170,7 @@ static inline av_const int mid_pred(int a, int b, int c)
|
|||||||
* @param amax maximum value of the clip range
|
* @param amax maximum value of the clip range
|
||||||
* @return clipped value
|
* @return clipped value
|
||||||
*/
|
*/
|
||||||
static inline av_const int av_clip(int a, int amin, int amax)
|
static inline int av_clip(int a, int amin, int amax)
|
||||||
{
|
{
|
||||||
if (a < amin) return amin;
|
if (a < amin) return amin;
|
||||||
else if (a > amax) return amax;
|
else if (a > amax) return amax;
|
||||||
@ -198,7 +182,7 @@ static inline av_const int av_clip(int a, int amin, int amax)
|
|||||||
* @param a value to clip
|
* @param a value to clip
|
||||||
* @return clipped value
|
* @return clipped value
|
||||||
*/
|
*/
|
||||||
static inline av_const uint8_t av_clip_uint8(int a)
|
static inline uint8_t av_clip_uint8(int a)
|
||||||
{
|
{
|
||||||
if (a&(~255)) return (-a)>>31;
|
if (a&(~255)) return (-a)>>31;
|
||||||
else return a;
|
else return a;
|
||||||
@ -209,19 +193,19 @@ static inline av_const uint8_t av_clip_uint8(int a)
|
|||||||
* @param a value to clip
|
* @param a value to clip
|
||||||
* @return clipped value
|
* @return clipped value
|
||||||
*/
|
*/
|
||||||
static inline av_const int16_t av_clip_int16(int a)
|
static inline int16_t av_clip_int16(int a)
|
||||||
{
|
{
|
||||||
if ((a+32768) & ~65535) return (a>>31) ^ 32767;
|
if ((a+32768) & ~65535) return (a>>31) ^ 32767;
|
||||||
else return a;
|
else return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* math */
|
/* math */
|
||||||
int64_t av_const ff_gcd(int64_t a, int64_t b);
|
int64_t ff_gcd(int64_t a, int64_t b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* converts fourcc string to int
|
* converts fourcc string to int
|
||||||
*/
|
*/
|
||||||
static inline av_pure int ff_get_fourcc(const char *s){
|
static inline int ff_get_fourcc(const char *s){
|
||||||
#ifdef HAVE_AV_CONFIG_H
|
#ifdef HAVE_AV_CONFIG_H
|
||||||
assert( strlen(s)==4 );
|
assert( strlen(s)==4 );
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,7 +37,7 @@ typedef enum {
|
|||||||
|
|
||||||
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size);
|
int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size);
|
||||||
const AVCRC *av_crc_get_table(AVCRCId crc_id);
|
const AVCRC *av_crc_get_table(AVCRCId crc_id);
|
||||||
uint32_t av_crc(const AVCRC *ctx, uint32_t start_crc, const uint8_t *buffer, size_t length) av_pure;
|
uint32_t av_crc(const AVCRC *ctx, uint32_t start_crc, const uint8_t *buffer, size_t length);
|
||||||
|
|
||||||
#endif /* FFMPEG_CRC_H */
|
#endif /* FFMPEG_CRC_H */
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include "common.h"
|
|
||||||
#include "des.h"
|
#include "des.h"
|
||||||
|
|
||||||
#define T(a, b, c, d, e, f, g, h) 64-a,64-b,64-c,64-d,64-e,64-f,64-g,64-h
|
#define T(a, b, c, d, e, f, g, h) 64-a,64-b,64-c,64-d,64-e,64-f,64-g,64-h
|
||||||
|
@ -34,6 +34,6 @@
|
|||||||
* If your input data is in 8-bit blocks treat it as big-endian
|
* If your input data is in 8-bit blocks treat it as big-endian
|
||||||
* (use e.g. AV_RB64 and AV_WB64).
|
* (use e.g. AV_RB64 and AV_WB64).
|
||||||
*/
|
*/
|
||||||
uint64_t ff_des_encdec(uint64_t in, uint64_t key, int decrypt) av_const;
|
uint64_t ff_des_encdec(uint64_t in, uint64_t key, int decrypt);
|
||||||
|
|
||||||
#endif /* FFMPEG_DES_H */
|
#endif /* FFMPEG_DES_H */
|
||||||
|
@ -36,26 +36,26 @@ typedef struct AVInteger{
|
|||||||
uint16_t v[AV_INTEGER_SIZE];
|
uint16_t v[AV_INTEGER_SIZE];
|
||||||
} AVInteger;
|
} AVInteger;
|
||||||
|
|
||||||
AVInteger av_add_i(AVInteger a, AVInteger b) av_const;
|
AVInteger av_add_i(AVInteger a, AVInteger b);
|
||||||
AVInteger av_sub_i(AVInteger a, AVInteger b) av_const;
|
AVInteger av_sub_i(AVInteger a, AVInteger b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the rounded down value of the logarithm of base 2 of the given AVInteger.
|
* returns the rounded down value of the logarithm of base 2 of the given AVInteger.
|
||||||
* this is simply the index of the most significant bit which is 1. Or 0 of all bits are 0
|
* this is simply the index of the most significant bit which is 1. Or 0 of all bits are 0
|
||||||
*/
|
*/
|
||||||
int av_log2_i(AVInteger a) av_const;
|
int av_log2_i(AVInteger a);
|
||||||
AVInteger av_mul_i(AVInteger a, AVInteger b) av_const;
|
AVInteger av_mul_i(AVInteger a, AVInteger b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns 0 if a==b, 1 if a>b and -1 if a<b.
|
* returns 0 if a==b, 1 if a>b and -1 if a<b.
|
||||||
*/
|
*/
|
||||||
int av_cmp_i(AVInteger a, AVInteger b) av_const;
|
int av_cmp_i(AVInteger a, AVInteger b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bitwise shift.
|
* bitwise shift.
|
||||||
* @param s the number of bits by which the value should be shifted right, may be negative for shifting left
|
* @param s the number of bits by which the value should be shifted right, may be negative for shifting left
|
||||||
*/
|
*/
|
||||||
AVInteger av_shr_i(AVInteger a, int s) av_const;
|
AVInteger av_shr_i(AVInteger a, int s);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a % b.
|
* returns a % b.
|
||||||
@ -66,18 +66,18 @@ AVInteger av_mod_i(AVInteger *quot, AVInteger a, AVInteger b);
|
|||||||
/**
|
/**
|
||||||
* returns a/b.
|
* returns a/b.
|
||||||
*/
|
*/
|
||||||
AVInteger av_div_i(AVInteger a, AVInteger b) av_const;
|
AVInteger av_div_i(AVInteger a, AVInteger b);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* converts the given int64_t to an AVInteger.
|
* converts the given int64_t to an AVInteger.
|
||||||
*/
|
*/
|
||||||
AVInteger av_int2i(int64_t a) av_const;
|
AVInteger av_int2i(int64_t a);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* converts the given AVInteger to an int64_t.
|
* converts the given AVInteger to an int64_t.
|
||||||
* if the AVInteger is too large to fit into an int64_t,
|
* if the AVInteger is too large to fit into an int64_t,
|
||||||
* then only the least significant 64bit will be used
|
* then only the least significant 64bit will be used
|
||||||
*/
|
*/
|
||||||
int64_t av_i2int(AVInteger a) av_const;
|
int64_t av_i2int(AVInteger a);
|
||||||
|
|
||||||
#endif /* FFMPEG_INTEGER_H */
|
#endif /* FFMPEG_INTEGER_H */
|
||||||
|
@ -172,7 +172,7 @@ extern const uint8_t ff_sqrt_tab[256];
|
|||||||
|
|
||||||
static inline int av_log2_16bit(unsigned int v);
|
static inline int av_log2_16bit(unsigned int v);
|
||||||
|
|
||||||
static inline av_const unsigned int ff_sqrt(unsigned int a)
|
static inline unsigned int ff_sqrt(unsigned int a)
|
||||||
{
|
{
|
||||||
unsigned int b;
|
unsigned int b;
|
||||||
|
|
||||||
@ -267,35 +267,35 @@ if((y)<(x)){\
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_LLRINT
|
#ifndef HAVE_LLRINT
|
||||||
static av_always_inline av_const long long llrint(double x)
|
static av_always_inline long long llrint(double x)
|
||||||
{
|
{
|
||||||
return rint(x);
|
return rint(x);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LLRINT */
|
#endif /* HAVE_LLRINT */
|
||||||
|
|
||||||
#ifndef HAVE_LRINT
|
#ifndef HAVE_LRINT
|
||||||
static av_always_inline av_const long int lrint(double x)
|
static av_always_inline long int lrint(double x)
|
||||||
{
|
{
|
||||||
return rint(x);
|
return rint(x);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LRINT */
|
#endif /* HAVE_LRINT */
|
||||||
|
|
||||||
#ifndef HAVE_LRINTF
|
#ifndef HAVE_LRINTF
|
||||||
static av_always_inline av_const long int lrintf(float x)
|
static av_always_inline long int lrintf(float x)
|
||||||
{
|
{
|
||||||
return (int)(rint(x));
|
return (int)(rint(x));
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LRINTF */
|
#endif /* HAVE_LRINTF */
|
||||||
|
|
||||||
#ifndef HAVE_ROUND
|
#ifndef HAVE_ROUND
|
||||||
static av_always_inline av_const double round(double x)
|
static av_always_inline double round(double x)
|
||||||
{
|
{
|
||||||
return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
|
return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ROUND */
|
#endif /* HAVE_ROUND */
|
||||||
|
|
||||||
#ifndef HAVE_ROUNDF
|
#ifndef HAVE_ROUNDF
|
||||||
static av_always_inline av_const float roundf(float x)
|
static av_always_inline float roundf(float x)
|
||||||
{
|
{
|
||||||
return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
|
return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
|
||||||
}
|
}
|
||||||
|
@ -30,11 +30,11 @@ typedef struct AVExtFloat {
|
|||||||
uint8_t mantissa[8];
|
uint8_t mantissa[8];
|
||||||
} AVExtFloat;
|
} AVExtFloat;
|
||||||
|
|
||||||
double av_int2dbl(int64_t v) av_const;
|
double av_int2dbl(int64_t v);
|
||||||
float av_int2flt(int32_t v) av_const;
|
float av_int2flt(int32_t v);
|
||||||
double av_ext2dbl(const AVExtFloat ext) av_const;
|
double av_ext2dbl(const AVExtFloat ext);
|
||||||
int64_t av_dbl2int(double d) av_const;
|
int64_t av_dbl2int(double d);
|
||||||
int32_t av_flt2int(float d) av_const;
|
int32_t av_flt2int(float d);
|
||||||
AVExtFloat av_dbl2ext(double d) av_const;
|
AVExtFloat av_dbl2ext(double d);
|
||||||
|
|
||||||
#endif /* FFMPEG_INTFLOAT_READWRITE_H */
|
#endif /* FFMPEG_INTFLOAT_READWRITE_H */
|
||||||
|
@ -36,17 +36,17 @@ enum AVRounding {
|
|||||||
* rescale a 64bit integer with rounding to nearest.
|
* rescale a 64bit integer with rounding to nearest.
|
||||||
* a simple a*b/c isn't possible as it can overflow
|
* 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) av_const;
|
int64_t av_rescale(int64_t a, int64_t b, int64_t c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rescale a 64bit integer with specified rounding.
|
* rescale a 64bit integer with specified rounding.
|
||||||
* a simple a*b/c isn't possible as it can overflow
|
* 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) av_const;
|
int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rescale a 64bit integer by 2 rational numbers.
|
* rescale a 64bit integer by 2 rational numbers.
|
||||||
*/
|
*/
|
||||||
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
|
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq);
|
||||||
|
|
||||||
#endif /* FFMPEG_MATHEMATICS_H */
|
#endif /* FFMPEG_MATHEMATICS_H */
|
||||||
|
@ -42,12 +42,6 @@
|
|||||||
#define DECLARE_ASM_CONST(n,t,v) static const t v
|
#define DECLARE_ASM_CONST(n,t,v) static const t v
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#define av_malloc_attrib __attribute__((__malloc__))
|
|
||||||
#else
|
|
||||||
#define av_malloc_attrib
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate a block of \p size bytes with alignment suitable for all
|
* Allocate a block of \p size bytes with alignment suitable for all
|
||||||
* memory accesses (including vectors if available on the CPU).
|
* memory accesses (including vectors if available on the CPU).
|
||||||
@ -56,7 +50,7 @@
|
|||||||
* it.
|
* it.
|
||||||
* @see av_mallocz()
|
* @see av_mallocz()
|
||||||
*/
|
*/
|
||||||
void *av_malloc(unsigned int size) av_malloc_attrib;
|
void *av_malloc(unsigned int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocate or reallocate a block of memory.
|
* Allocate or reallocate a block of memory.
|
||||||
@ -91,7 +85,7 @@ void av_free(void *ptr);
|
|||||||
* it.
|
* it.
|
||||||
* @see av_malloc()
|
* @see av_malloc()
|
||||||
*/
|
*/
|
||||||
void *av_mallocz(unsigned int size) av_malloc_attrib;
|
void *av_mallocz(unsigned int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Duplicate the string \p s.
|
* Duplicate the string \p s.
|
||||||
@ -99,7 +93,7 @@ void *av_mallocz(unsigned int size) av_malloc_attrib;
|
|||||||
* @return Pointer to a newly allocated string containing a
|
* @return Pointer to a newly allocated string containing a
|
||||||
* copy of \p s or NULL if it cannot be allocated.
|
* copy of \p s or NULL if it cannot be allocated.
|
||||||
*/
|
*/
|
||||||
char *av_strdup(const char *s) av_malloc_attrib;
|
char *av_strdup(const char *s);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Free a memory block which has been allocated with av_malloc(z)() or
|
* Free a memory block which has been allocated with av_malloc(z)() or
|
||||||
|
@ -78,7 +78,7 @@ int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max)
|
|||||||
* @param c second rational.
|
* @param c second rational.
|
||||||
* @return b*c.
|
* @return b*c.
|
||||||
*/
|
*/
|
||||||
AVRational av_mul_q(AVRational b, AVRational c) av_const;
|
AVRational av_mul_q(AVRational b, AVRational c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Divides one rational by another.
|
* Divides one rational by another.
|
||||||
@ -86,7 +86,7 @@ AVRational av_mul_q(AVRational b, AVRational c) av_const;
|
|||||||
* @param c second rational.
|
* @param c second rational.
|
||||||
* @return b/c.
|
* @return b/c.
|
||||||
*/
|
*/
|
||||||
AVRational av_div_q(AVRational b, AVRational c) av_const;
|
AVRational av_div_q(AVRational b, AVRational c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds two rationals.
|
* Adds two rationals.
|
||||||
@ -94,7 +94,7 @@ AVRational av_div_q(AVRational b, AVRational c) av_const;
|
|||||||
* @param c second rational.
|
* @param c second rational.
|
||||||
* @return b+c.
|
* @return b+c.
|
||||||
*/
|
*/
|
||||||
AVRational av_add_q(AVRational b, AVRational c) av_const;
|
AVRational av_add_q(AVRational b, AVRational c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subtracts one rational from another.
|
* Subtracts one rational from another.
|
||||||
@ -102,7 +102,7 @@ AVRational av_add_q(AVRational b, AVRational c) av_const;
|
|||||||
* @param c second rational.
|
* @param c second rational.
|
||||||
* @return b-c.
|
* @return b-c.
|
||||||
*/
|
*/
|
||||||
AVRational av_sub_q(AVRational b, AVRational c) av_const;
|
AVRational av_sub_q(AVRational b, AVRational c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts a double precision floating point number to a rational.
|
* Converts a double precision floating point number to a rational.
|
||||||
@ -110,6 +110,6 @@ AVRational av_sub_q(AVRational b, AVRational c) av_const;
|
|||||||
* @param max the maximum allowed numerator and denominator
|
* @param max the maximum allowed numerator and denominator
|
||||||
* @return (AVRational) d.
|
* @return (AVRational) d.
|
||||||
*/
|
*/
|
||||||
AVRational av_d2q(double d, int max) av_const;
|
AVRational av_d2q(double d, int max);
|
||||||
|
|
||||||
#endif /* FFMPEG_RATIONAL_H */
|
#endif /* FFMPEG_RATIONAL_H */
|
||||||
|
@ -32,7 +32,7 @@ typedef struct SoftFloat{
|
|||||||
int32_t mant;
|
int32_t mant;
|
||||||
}SoftFloat;
|
}SoftFloat;
|
||||||
|
|
||||||
static av_const SoftFloat av_normalize_sf(SoftFloat a){
|
static SoftFloat av_normalize_sf(SoftFloat a){
|
||||||
if(a.mant){
|
if(a.mant){
|
||||||
#if 1
|
#if 1
|
||||||
while((a.mant + 0x20000000U)<0x40000000U){
|
while((a.mant + 0x20000000U)<0x40000000U){
|
||||||
@ -54,7 +54,7 @@ static av_const SoftFloat av_normalize_sf(SoftFloat a){
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline av_const SoftFloat av_normalize1_sf(SoftFloat a){
|
static inline SoftFloat av_normalize1_sf(SoftFloat a){
|
||||||
#if 1
|
#if 1
|
||||||
if(a.mant + 0x40000000 < 0){
|
if(a.mant + 0x40000000 < 0){
|
||||||
a.exp++;
|
a.exp++;
|
||||||
@ -76,7 +76,7 @@ static inline av_const SoftFloat av_normalize1_sf(SoftFloat a){
|
|||||||
* normalized then the output wont be worse then the other input
|
* normalized then the output wont be worse then the other input
|
||||||
* if both are normalized then the output will be normalized
|
* if both are normalized then the output will be normalized
|
||||||
*/
|
*/
|
||||||
static inline av_const SoftFloat av_mul_sf(SoftFloat a, SoftFloat b){
|
static inline SoftFloat av_mul_sf(SoftFloat a, SoftFloat b){
|
||||||
a.exp += b.exp;
|
a.exp += b.exp;
|
||||||
a.mant = (a.mant * (int64_t)b.mant) >> ONE_BITS;
|
a.mant = (a.mant * (int64_t)b.mant) >> ONE_BITS;
|
||||||
return av_normalize1_sf(a);
|
return av_normalize1_sf(a);
|
||||||
@ -87,31 +87,31 @@ static inline av_const SoftFloat av_mul_sf(SoftFloat a, SoftFloat b){
|
|||||||
* b has to be normalized and not zero
|
* b has to be normalized and not zero
|
||||||
* @return will not be more denormalized then a
|
* @return will not be more denormalized then a
|
||||||
*/
|
*/
|
||||||
static av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b){
|
static SoftFloat av_div_sf(SoftFloat a, SoftFloat b){
|
||||||
a.exp -= b.exp+1;
|
a.exp -= b.exp+1;
|
||||||
a.mant = ((int64_t)a.mant<<(ONE_BITS+1)) / b.mant;
|
a.mant = ((int64_t)a.mant<<(ONE_BITS+1)) / b.mant;
|
||||||
return av_normalize1_sf(a);
|
return av_normalize1_sf(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline av_const int av_cmp_sf(SoftFloat a, SoftFloat b){
|
static inline int av_cmp_sf(SoftFloat a, SoftFloat b){
|
||||||
int t= a.exp - b.exp;
|
int t= a.exp - b.exp;
|
||||||
if(t<0) return (a.mant >> (-t)) - b.mant ;
|
if(t<0) return (a.mant >> (-t)) - b.mant ;
|
||||||
else return a.mant - (b.mant >> t);
|
else return a.mant - (b.mant >> t);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline av_const SoftFloat av_add_sf(SoftFloat a, SoftFloat b){
|
static inline SoftFloat av_add_sf(SoftFloat a, SoftFloat b){
|
||||||
int t= a.exp - b.exp;
|
int t= a.exp - b.exp;
|
||||||
if(t<0) return av_normalize1_sf((SoftFloat){b.exp, b.mant + (a.mant >> (-t))});
|
if(t<0) return av_normalize1_sf((SoftFloat){b.exp, b.mant + (a.mant >> (-t))});
|
||||||
else return av_normalize1_sf((SoftFloat){a.exp, a.mant + (b.mant >> t )});
|
else return av_normalize1_sf((SoftFloat){a.exp, a.mant + (b.mant >> t )});
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline av_const SoftFloat av_sub_sf(SoftFloat a, SoftFloat b){
|
static inline SoftFloat av_sub_sf(SoftFloat a, SoftFloat b){
|
||||||
return av_add_sf(a, (SoftFloat){b.exp, -b.mant});
|
return av_add_sf(a, (SoftFloat){b.exp, -b.mant});
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME sqrt, log, exp, pow, sin, cos
|
//FIXME sqrt, log, exp, pow, sin, cos
|
||||||
|
|
||||||
static inline av_const SoftFloat av_int2sf(int v, int frac_bits){
|
static inline SoftFloat av_int2sf(int v, int frac_bits){
|
||||||
return av_normalize_sf((SoftFloat){ONE_BITS-frac_bits, v});
|
return av_normalize_sf((SoftFloat){ONE_BITS-frac_bits, v});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ static inline av_const SoftFloat av_int2sf(int v, int frac_bits){
|
|||||||
*
|
*
|
||||||
* rounding is to -inf
|
* rounding is to -inf
|
||||||
*/
|
*/
|
||||||
static inline av_const int av_sf2int(SoftFloat v, int frac_bits){
|
static inline int av_sf2int(SoftFloat v, int frac_bits){
|
||||||
v.exp += frac_bits - ONE_BITS;
|
v.exp += frac_bits - ONE_BITS;
|
||||||
if(v.exp >= 0) return v.mant << v.exp ;
|
if(v.exp >= 0) return v.mant << v.exp ;
|
||||||
else return v.mant >>(-v.exp);
|
else return v.mant >>(-v.exp);
|
||||||
|
Loading…
Reference in New Issue
Block a user