diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/common.h')
-rw-r--r-- | src/libffmpeg/libavcodec/common.h | 200 |
1 files changed, 126 insertions, 74 deletions
diff --git a/src/libffmpeg/libavcodec/common.h b/src/libffmpeg/libavcodec/common.h index 893b7ed64..6c0271916 100644 --- a/src/libffmpeg/libavcodec/common.h +++ b/src/libffmpeg/libavcodec/common.h @@ -1,9 +1,11 @@ +/** + * @file common.h + * common internal api header. + */ + #ifndef COMMON_H #define COMMON_H -#define FFMPEG_VERSION_INT 0x000406 -#define FFMPEG_VERSION "0.4.6" - #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) # define CONFIG_WIN32 #endif @@ -37,6 +39,34 @@ #define M_PI 3.14159265358979323846 #endif +#include <stddef.h> +#ifndef offsetof +# define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F)) +#endif + +#define AVOPTION_CODEC_BOOL(name, help, field) \ + { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_BOOL } +#define AVOPTION_CODEC_DOUBLE(name, help, field, minv, maxv, defval) \ + { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_DOUBLE, minv, maxv, defval } +#define AVOPTION_CODEC_FLAG(name, help, field, flag, defval) \ + { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_FLAG, flag, 0, defval } +#define AVOPTION_CODEC_INT(name, help, field, minv, maxv, defval) \ + { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_INT, minv, maxv, defval } +#define AVOPTION_CODEC_STRING(name, help, field, str, val) \ + { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_STRING, .defval = val, .defstr = str } +#define AVOPTION_CODEC_RCOVERRIDE(name, help, field) \ + { name, help, offsetof(AVCodecContext, field), FF_OPT_TYPE_RCOVERRIDE, .defval = 0, .defstr = NULL } +#define AVOPTION_SUB(ptr) { .name = NULL, .help = (const char*)ptr } +#define AVOPTION_END() AVOPTION_SUB(NULL) + +struct AVOption; +#ifdef HAVE_MMX +extern const struct AVOption avoptions_common[3 + 5]; +#else +extern const struct AVOption avoptions_common[3]; +#endif +extern const struct AVOption avoptions_workaround_bug[11]; + #endif /* HAVE_AV_CONFIG_H */ /* Suppress restrict if it was not defined in config.h. */ @@ -54,33 +84,24 @@ /* windows */ -typedef unsigned short UINT16; -typedef signed short INT16; -typedef unsigned char UINT8; -typedef unsigned int UINT32; -typedef unsigned __int64 UINT64; -typedef signed char INT8; -typedef signed int INT32; -typedef signed __int64 INT64; - -typedef UINT8 uint8_t; -typedef INT8 int8_t; -typedef UINT16 uint16_t; -typedef INT16 int16_t; -typedef UINT32 uint32_t; -typedef INT32 int32_t; -typedef UINT64 uint64_t; -typedef INT64 int64_t; +typedef unsigned short uint16_t; +typedef signed short int16_t; +typedef unsigned char uint8_t; +typedef unsigned int uint32_t; +typedef unsigned __int64 uint64_t; +typedef signed char int8_t; +typedef signed int int32_t; +typedef signed __int64 int64_t; # ifndef __MINGW32__ -# define INT64_C(c) (c ## i64) -# define UINT64_C(c) (c ## i64) +# define int64_t_C(c) (c ## i64) +# define uint64_t_C(c) (c ## i64) # define inline __inline # else -# define INT64_C(c) (c ## LL) -# define UINT64_C(c) (c ## ULL) +# define int64_t_C(c) (c ## LL) +# define uint64_t_C(c) (c ## ULL) # endif /* __MINGW32__ */ # ifdef _DEBUG @@ -96,20 +117,11 @@ typedef INT64 int64_t; #include <inttypes.h> -typedef unsigned char UINT8; -typedef unsigned short UINT16; -typedef unsigned int UINT32; -typedef unsigned long long UINT64; -typedef signed char INT8; -typedef signed short INT16; -typedef signed int INT32; -typedef signed long long INT64; - #ifdef HAVE_AV_CONFIG_H -#ifndef INT64_C -#define INT64_C(c) (c ## LL) -#define UINT64_C(c) (c ## ULL) +#ifndef int64_t_C +#define int64_t_C(c) (c ## LL) +#define uint64_t_C(c) (c ## ULL) #endif #ifdef USE_FASTMEMCPY @@ -127,23 +139,10 @@ typedef signed long long INT64; # include <inttypes.h> -# ifndef __WINE_WINDEF16_H -/* workaround for typedef conflict in MPlayer (wine typedefs) */ -typedef unsigned short UINT16; -typedef signed short INT16; -# endif - -typedef unsigned char UINT8; -typedef unsigned int UINT32; -typedef unsigned long long UINT64; -typedef signed char INT8; -typedef signed int INT32; -typedef signed long long INT64; - # ifdef HAVE_AV_CONFIG_H -# ifndef INT64_C -# define INT64_C(c) (c ## LL) -# define UINT64_C(c) (c ## ULL) +# ifndef int64_t_C +# define int64_t_C(c) (c ## LL) +# define uint64_t_C(c) (c ## ULL) # endif # ifdef USE_FASTMEMCPY @@ -169,6 +168,7 @@ typedef signed long long INT64; # ifndef DEBUG # define NDEBUG # endif +# include <assert.h> /* dprintf macros */ # if defined(CONFIG_WIN32) && !defined(__MINGW32__) @@ -229,26 +229,26 @@ static inline uint32_t NEG_USR32(uint32_t a, int8_t s){ struct PutBitContext; -typedef void (*WriteDataFunc)(void *, UINT8 *, int); +typedef void (*WriteDataFunc)(void *, uint8_t *, int); typedef struct PutBitContext { #ifdef ALT_BITSTREAM_WRITER - UINT8 *buf, *buf_end; + uint8_t *buf, *buf_end; int index; #else - UINT32 bit_buf; + uint32_t bit_buf; int bit_left; - UINT8 *buf, *buf_ptr, *buf_end; + uint8_t *buf, *buf_ptr, *buf_end; #endif - INT64 data_out_size; /* in bytes */ + int64_t data_out_size; /* in bytes */ } PutBitContext; void init_put_bits(PutBitContext *s, - UINT8 *buffer, int buffer_size, + uint8_t *buffer, int buffer_size, void *opaque, - void (*write_data)(void *, UINT8 *, int)); + void (*write_data)(void *, uint8_t *, int)); -INT64 get_bit_count(PutBitContext *s); /* XXX: change function name */ +int64_t get_bit_count(PutBitContext *s); /* XXX: change function name */ void align_put_bits(PutBitContext *s); void flush_put_bits(PutBitContext *s); void put_string(PutBitContext * pbc, char *s); @@ -256,17 +256,17 @@ void put_string(PutBitContext * pbc, char *s); /* bit input */ typedef struct GetBitContext { - UINT8 *buffer, *buffer_end; + const uint8_t *buffer, *buffer_end; #ifdef ALT_BITSTREAM_READER int index; #elif defined LIBMPEG2_BITSTREAM_READER - UINT8 *buffer_ptr; - UINT32 cache; + uint8_t *buffer_ptr; + uint32_t cache; int bit_count; #elif defined A32_BITSTREAM_READER - UINT32 *buffer_ptr; - UINT32 cache0; - UINT32 cache1; + uint32_t *buffer_ptr; + uint32_t cache0; + uint32_t cache1; int bit_count; #endif int size_in_bits; @@ -274,11 +274,11 @@ typedef struct GetBitContext { static inline int get_bits_count(GetBitContext *s); -#define VLC_TYPE INT16 +#define VLC_TYPE int16_t typedef struct VLC { int bits; - VLC_TYPE (*table)[2]; // code, bits + VLC_TYPE (*table)[2]; ///< code, bits int table_size, table_allocated; } VLC; @@ -294,7 +294,7 @@ typedef struct RL_VLC_ELEM { /* used to avoid missaligned exceptions on some archs (alpha, ...) */ #ifdef ARCH_X86 -# define unaligned32(a) (*(UINT32*)(a)) +# define unaligned32(a) (*(uint32_t*)(a)) #else # ifdef __GNUC__ static inline uint32_t unaligned32(const void *v) { @@ -325,7 +325,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) st_out_bit_counts[st_current_index] += n; #endif // printf("put_bits=%d %x\n", n, value); - XINE_ASSERT((n == 32 || value < (1U << n)), "?"); + assert(n == 32 || value < (1U << n)); bit_buf = s->bit_buf; bit_left = s->bit_left; @@ -346,7 +346,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) s->buf_ptr[3] = bit_buf ; } else #endif - *(UINT32 *)s->buf_ptr = be2me_32(bit_buf); + *(uint32_t *)s->buf_ptr = be2me_32(bit_buf); //printf("bitbuf = %08x\n", bit_buf); s->buf_ptr+=4; bit_left+=32 - n; @@ -689,7 +689,7 @@ static inline void skip_bits1(GetBitContext *s){ } void init_get_bits(GetBitContext *s, - UINT8 *buffer, int buffer_size); + const uint8_t *buffer, int buffer_size); int check_marker(GetBitContext *s, const char *msg); void align_get_bits(GetBitContext *s); @@ -772,6 +772,14 @@ static inline int get_vlc(GetBitContext *s, VLC *vlc) return code; } +/** + * parses a vlc code, faster then get_vlc() + * @param bits is the number of bits which will be read at once, must be + * identical to nb_bits in init_vlc() + * @param max_depth is the number of times bits bits must be readed to completly + * read the longest vlc code + * = (max_vlc_length + bits - 1) / bits + */ static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth) { @@ -786,6 +794,46 @@ static always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], return code; } +//#define TRACE + +#ifdef TRACE + +static inline void print_bin(int bits, int n){ + int i; + + for(i=n-1; i>=0; i--){ + printf("%d", (bits>>i)&1); + } + for(i=n; i<24; i++) + printf(" "); +} + +static inline int get_bits_trace(GetBitContext *s, int n, char *file, char *func, int line){ + int r= get_bits(s, n); + + print_bin(r, n); + printf("%5d %2d %3d bit @%5d in %s %s:%d\n", r, n, r, get_bits_count(s)-n, file, func, line); + return r; +} +static inline int get_vlc_trace(GetBitContext *s, VLC_TYPE (*table)[2], int bits, int max_depth, char *file, char *func, int line){ + int show= show_bits(s, 24); + int pos= get_bits_count(s); + int r= get_vlc2(s, table, bits, max_depth); + int len= get_bits_count(s) - pos; + int bits2= show>>(24-len); + + print_bin(bits2, len); + + printf("%5d %2d %3d vlc @%5d in %s %s:%d\n", bits2, len, r, pos, file, func, line); + return r; +} + +#define get_bits(s, n) get_bits_trace(s, n, __FILE__, __PRETTY_FUNCTION__, __LINE__) +#define get_bits1(s) get_bits_trace(s, 1, __FILE__, __PRETTY_FUNCTION__, __LINE__) +#define get_vlc(s, vlc) get_vlc_trace(s, (vlc)->table, (vlc)->bits, 3, __FILE__, __PRETTY_FUNCTION__, __LINE__) +#define get_vlc2(s, tab, bits, max) get_vlc_trace(s, tab, bits, max, __FILE__, __PRETTY_FUNCTION__, __LINE__) + +#endif //TRACE /* define it to include statistics code (useful only for optimizing codec efficiency */ @@ -878,7 +926,7 @@ static inline int clip(int a, int amin, int amax) /* math */ extern const uint8_t ff_sqrt_tab[128]; -int ff_gcd(int a, int b); +int64_t ff_gcd(int64_t a, int64_t b); static inline int ff_sqrt(int a) { @@ -902,11 +950,15 @@ static inline int ff_sqrt(int a) * converts fourcc string to int */ static inline int ff_get_fourcc(const char *s){ - XINE_ASSERT( strlen(s)==4, "lenght of value 's' != 4: %d", strlen(s) ); + assert( strlen(s)==4 ); return (s[0]) + (s[1]<<8) + (s[2]<<16) + (s[3]<<24); } +#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) +#define MKBETAG(a,b,c,d) (d | (c << 8) | (b << 16) | (a << 24)) + + void ff_float2fraction(int *nom_arg, int *denom_arg, double f, int max); |