Update of /cvsroot/audacity/lib-src/ffmpeg/libavutil In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv27433/libavutil
Added Files: avutil.h common.h intfloat_readwrite.h log.h mathematics.h mem.h rational.h Log Message: Sorry, i forgot to add FFmpeg headers. Here they are. Created in lib-src, as suggested by Richard. --- NEW FILE: mem.h --- /* * copyright (c) 2006 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file mem.h * Memory handling functions. */ #ifndef FFMPEG_MEM_H #define FFMPEG_MEM_H #ifdef __ICC #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n))) #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v #elif defined(__GNUC__) #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n))) #define DECLARE_ASM_CONST(n,t,v) static const t v attribute_used __attribute__ ((aligned (n))) #elif defined(_MSC_VER) #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v #elif defined(HAVE_INLINE_ASM) #error The asm code needs alignment, but we do not know how to do it for this compiler. #else #define DECLARE_ALIGNED(n,t,v) t v #define DECLARE_ASM_CONST(n,t,v) static const t v #endif #if defined(__GNUC__) && (__GNU__ > 3 || __GNU__ == 3 && __GNU_MINOR__ > 0) #define av_malloc_attrib __attribute__((__malloc__)) #else #define av_malloc_attrib #endif #if defined(__GNUC__) && (__GNU__ > 4 || __GNU__ == 4 && __GNU_MINOR__ > 1) #define av_alloc_size(n) __attribute__((alloc_size(n))) #else #define av_alloc_size(n) #endif /** * Allocate a block of \p size bytes with alignment suitable for all * memory accesses (including vectors if available on the CPU). * @param size Size in bytes for the memory block to be allocated. * @return Pointer to the allocated block, NULL if it cannot allocate * it. * @see av_mallocz() */ void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1); /** * Allocate or reallocate a block of memory. * If \p ptr is NULL and \p size > 0, allocate a new block. If \p * size is zero, free the memory block pointed by \p ptr. * @param size Size in bytes for the memory block to be allocated or * reallocated. * @param ptr Pointer to a memory block already allocated with * av_malloc(z)() or av_realloc() or NULL. * @return Pointer to a newly reallocated block or NULL if it cannot * reallocate or the function is used to free the memory block. * @see av_fast_realloc() */ void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2); /** * Free a memory block which has been allocated with av_malloc(z)() or * av_realloc(). * @param ptr Pointer to the memory block which should be freed. * @note ptr = NULL is explicitly allowed. * @note It is recommended that you use av_freep() instead. * @see av_freep() */ void av_free(void *ptr); /** * Allocate a block of \p size bytes with alignment suitable for all * memory accesses (including vectors if available on the CPU) and * set to zeroes all the bytes of the block. * @param size Size in bytes for the memory block to be allocated. * @return Pointer to the allocated block, NULL if it cannot allocate * it. * @see av_malloc() */ void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1); /** * Duplicate the string \p s. * @param s String to be duplicated. * @return Pointer to a newly allocated string containing a * copy of \p s or NULL if it cannot be allocated. */ char *av_strdup(const char *s) av_malloc_attrib; /** * Free a memory block which has been allocated with av_malloc(z)() or * av_realloc() and set to NULL the pointer to it. * @param ptr Pointer to the pointer to the memory block which should * be freed. * @see av_free() */ void av_freep(void *ptr); #endif /* FFMPEG_MEM_H */ --- NEW FILE: common.h --- /* * copyright (c) 2006 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file common.h * common internal and external API header */ #ifndef FFMPEG_COMMON_H #define FFMPEG_COMMON_H #include <inttypes.h> #ifdef HAVE_AV_CONFIG_H /* only include the following when compiling package */ # include "config.h" # include <stdlib.h> # include <stdio.h> # include <string.h> # include <ctype.h> # include <limits.h> # include <errno.h> # include <math.h> #endif /* HAVE_AV_CONFIG_H */ #ifndef av_always_inline #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) # define av_always_inline __attribute__((always_inline)) inline #else # define av_always_inline inline #endif #endif #ifndef av_noinline #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) # define av_noinline __attribute__((noinline)) #else # define av_noinline #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 #ifndef av_cold #if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ > 2) # define av_cold __attribute__((cold)) #else # define av_cold #endif #endif #ifdef HAVE_AV_CONFIG_H # include "internal.h" #endif /* HAVE_AV_CONFIG_H */ #ifndef attribute_deprecated #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) # define attribute_deprecated __attribute__((deprecated)) #else # define attribute_deprecated #endif #endif #ifndef av_unused #if defined(__GNUC__) # define av_unused __attribute__((unused)) #else # define av_unused #endif #endif #include "mem.h" //rounded divison & shift #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) /* assume b>0 */ #define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b)) #define FFABS(a) ((a) >= 0 ? (a) : (-(a))) #define FFSIGN(a) ((a) > 0 ? 1 : -1) #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) #define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) #define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) /* misc math functions */ extern const uint8_t ff_log2_tab[256]; static inline av_const int av_log2(unsigned int v) { int n = 0; if (v & 0xffff0000) { v >>= 16; n += 16; } if (v & 0xff00) { v >>= 8; n += 8; } n += ff_log2_tab[v]; return n; } static inline av_const int av_log2_16bit(unsigned int v) { int n = 0; if (v & 0xff00) { v >>= 8; n += 8; } n += ff_log2_tab[v]; return n; } /* median of 3 */ static inline av_const int mid_pred(int a, int b, int c) { #ifdef 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 * @param amin minimum value of the clip range * @param amax maximum value of the clip range * @return clipped value */ static inline av_const int av_clip(int a, int amin, int amax) { if (a < amin) return amin; else if (a > amax) return amax; else return a; } /** * clip a signed integer value into the 0-255 range * @param a value to clip * @return clipped value */ static inline av_const uint8_t av_clip_uint8(int a) { if (a&(~255)) return (-a)>>31; else return a; } /** * clip a signed integer value into the -32768,32767 range * @param a value to clip * @return clipped value */ static inline av_const int16_t av_clip_int16(int a) { if ((a+32768) & ~65535) return (a>>31) ^ 32767; else return a; } /* math */ int64_t av_const ff_gcd(int64_t a, int64_t b); /** * converts fourcc string to int */ static inline av_pure int ff_get_fourcc(const char *s){ #ifdef HAVE_AV_CONFIG_H assert( strlen(s)==4 ); #endif 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)) /*! * \def GET_UTF8(val, GET_BYTE, ERROR) * converts a UTF-8 character (up to 4 bytes long) to its 32-bit UCS-4 encoded form * \param val is the output and should be of type uint32_t. It holds the converted * UCS-4 character and should be a left value. * \param GET_BYTE gets UTF-8 encoded bytes from any proper source. It can be * a function or a statement whose return value or evaluated value is of type * uint8_t. It will be executed up to 4 times for values in the valid UTF-8 range, * and up to 7 times in the general case. * \param ERROR action that should be taken when an invalid UTF-8 byte is returned * from GET_BYTE. It should be a statement that jumps out of the macro, * like exit(), goto, return, break, or continue. */ #define GET_UTF8(val, GET_BYTE, ERROR)\ val= GET_BYTE;\ {\ int ones= 7 - av_log2(val ^ 255);\ if(ones==1)\ ERROR\ val&= 127>>ones;\ while(--ones > 0){\ int tmp= GET_BYTE - 128;\ if(tmp>>6)\ ERROR\ val= (val<<6) + tmp;\ }\ } /*! * \def PUT_UTF8(val, tmp, PUT_BYTE) * converts a 32-bit unicode character to its UTF-8 encoded form (up to 4 bytes long). * \param val is an input only argument and should be of type uint32_t. It holds * a ucs4 encoded unicode character that is to be converted to UTF-8. If * val is given as a function it's executed only once. * \param tmp is a temporary variable and should be of type uint8_t. It * represents an intermediate value during conversion that is to be * outputted by PUT_BYTE. * \param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. * It could be a function or a statement, and uses tmp as the input byte. * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be * executed up to 4 times for values in the valid UTF-8 range and up to * 7 times in the general case, depending on the length of the converted * unicode character. */ #define PUT_UTF8(val, tmp, PUT_BYTE)\ {\ int bytes, shift;\ uint32_t in = val;\ if (in < 0x80) {\ tmp = in;\ PUT_BYTE\ } else {\ bytes = (av_log2(in) + 4) / 5;\ shift = (bytes - 1) * 6;\ tmp = (256 - (256 >> bytes)) | (in >> shift);\ PUT_BYTE\ while (shift >= 6) {\ shift -= 6;\ tmp = 0x80 | ((in >> shift) & 0x3f);\ PUT_BYTE\ }\ }\ } #if defined(ARCH_X86) || defined(ARCH_POWERPC) || defined(ARCH_BFIN) #define AV_READ_TIME read_time #if defined(ARCH_X86_64) static inline uint64_t read_time(void) { uint64_t a, d; asm volatile("rdtsc\n\t" : "=a" (a), "=d" (d)); return (d << 32) | (a & 0xffffffff); } #elif defined(ARCH_X86_32) static inline long long read_time(void) { long long l; asm volatile("rdtsc\n\t" : "=A" (l)); return l; } #elif ARCH_BFIN static inline uint64_t read_time(void) { union { struct { unsigned lo; unsigned hi; } p; unsigned long long c; } t; asm volatile ("%0=cycles; %1=cycles2;" : "=d" (t.p.lo), "=d" (t.p.hi)); return t.c; } #else //FIXME check ppc64 static inline uint64_t read_time(void) { uint32_t tbu, tbl, temp; /* from section 2.2.1 of the 32-bit PowerPC PEM */ asm volatile( "1:\n" "mftbu %2\n" "mftb %0\n" "mftbu %1\n" "cmpw %2,%1\n" "bne 1b\n" : "=r"(tbl), "=r"(tbu), "=r"(temp) : : "cc"); return (((uint64_t)tbu)<<32) | (uint64_t)tbl; } #endif #elif defined(HAVE_GETHRTIME) #define AV_READ_TIME gethrtime #endif #ifdef AV_READ_TIME #define START_TIMER \ uint64_t tend;\ uint64_t tstart= AV_READ_TIME();\ #define STOP_TIMER(id) \ tend= AV_READ_TIME();\ {\ static uint64_t tsum=0;\ static int tcount=0;\ static int tskip_count=0;\ if(tcount<2 || tend - tstart < FFMAX(8*tsum/tcount, 2000)){\ tsum+= tend - tstart;\ tcount++;\ }else\ tskip_count++;\ if(((tcount+tskip_count)&(tcount+tskip_count-1))==0){\ av_log(NULL, AV_LOG_DEBUG, "%"PRIu64" dezicycles in %s, %d runs, %d skips\n",\ tsum*10/tcount, id, tcount, tskip_count);\ }\ } #else #define START_TIMER #define STOP_TIMER(id) {} #endif #endif /* FFMPEG_COMMON_H */ --- NEW FILE: mathematics.h --- /* * copyright (c) 2005 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FFMPEG_MATHEMATICS_H #define FFMPEG_MATHEMATICS_H #include <stdint.h> #include "rational.h" enum AVRounding { AV_ROUND_ZERO = 0, ///< round toward zero AV_ROUND_INF = 1, ///< round away from zero AV_ROUND_DOWN = 2, ///< round toward -infinity AV_ROUND_UP = 3, ///< round toward +infinity AV_ROUND_NEAR_INF = 5, ///< round to nearest and halfway cases away from zero }; /** * rescale a 64bit integer with rounding to nearest. * 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; /** * rescale a 64bit integer with specified rounding. * 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; /** * rescale a 64bit integer by 2 rational numbers. */ int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; #endif /* FFMPEG_MATHEMATICS_H */ --- NEW FILE: log.h --- /* * copyright (c) 2006 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FFMPEG_LOG_H #define FFMPEG_LOG_H #include <stdarg.h> /** * Describes the class of an AVClass context structure, that is an * arbitrary struct of which the first field is a pointer to an * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). */ typedef struct AVCLASS AVClass; struct AVCLASS { /** * The name of the class; usually it is the same name as the * context structure type to which the AVClass is associated. */ const char* class_name; /** * a pointer to a function which returns the name of a context * instance \p ctx associated with the class */ const char* (*item_name)(void* ctx); /** * a pointer to the first option specified in the class if any or NULL * * @see av_set_default_options() */ const struct AVOption *option; }; /* av_log API */ #if LIBAVUTIL_VERSION_INT < (50<<16) #define AV_LOG_QUIET -1 #define AV_LOG_FATAL 0 #define AV_LOG_ERROR 0 #define AV_LOG_WARNING 1 #define AV_LOG_INFO 1 #define AV_LOG_VERBOSE 1 #define AV_LOG_DEBUG 2 #else #define AV_LOG_QUIET -8 /** * something went really wrong and we will crash now */ #define AV_LOG_PANIC 0 /** * something went wrong and recovery is not possible * like no header in a format which depends on it or a combination * of parameters which are not allowed */ #define AV_LOG_FATAL 8 /** * something went wrong and cannot losslessly be recovered * but not all future data is affected */ #define AV_LOG_ERROR 16 /** * something somehow does not look correct / something which may or may not * lead to some problems like use of -vstrict -2 */ #define AV_LOG_WARNING 24 #define AV_LOG_INFO 32 #define AV_LOG_VERBOSE 40 /** * stuff which is only useful for libav* developers */ #define AV_LOG_DEBUG 48 #endif #if LIBAVUTIL_VERSION_INT < (50<<16) extern int av_log_level; #endif /** * Send the specified message to the log if the level is less than or equal to * the current av_log_level. By default, all logging messages are sent to * stderr. This behavior can be altered by setting a different av_vlog callback * function. * * @param avcl A pointer to an arbitrary struct of which the first field is a * pointer to an AVClass struct. * @param level The importance level of the message, lower values signifying * higher importance. * @param fmt The format string (printf-compatible) that specifies how * subsequent arguments are converted to output. * @see av_vlog */ #ifdef __GNUC__ void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4))); #else void av_log(void*, int level, const char *fmt, ...); #endif void av_vlog(void*, int level, const char *fmt, va_list); int av_log_get_level(void); void av_log_set_level(int); void av_log_set_callback(void (*)(void*, int, const char*, va_list)); void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl); #endif /* FFMPEG_LOG_H */ --- NEW FILE: intfloat_readwrite.h --- /* * copyright (c) 2005 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FFMPEG_INTFLOAT_READWRITE_H #define FFMPEG_INTFLOAT_READWRITE_H #include <stdint.h> #include "common.h" /* IEEE 80 bits extended float */ typedef struct AVExtFloat { uint8_t exponent[2]; uint8_t mantissa[8]; } AVExtFloat; double av_int2dbl(int64_t v) av_const; float av_int2flt(int32_t v) av_const; double av_ext2dbl(const AVExtFloat ext) av_const; int64_t av_dbl2int(double d) av_const; int32_t av_flt2int(float d) av_const; AVExtFloat av_dbl2ext(double d) av_const; #endif /* FFMPEG_INTFLOAT_READWRITE_H */ --- NEW FILE: rational.h --- /* * Rational numbers * Copyright (c) 2003 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file rational.h * Rational numbers. * @author Michael Niedermayer <[EMAIL PROTECTED]> */ #ifndef FFMPEG_RATIONAL_H #define FFMPEG_RATIONAL_H #include <stdint.h> #include "common.h" /** * Rational number num/den. */ typedef struct AVRational{ int num; ///< numerator int den; ///< denominator } AVRational; /** * Compare two rationals. * @param a first rational * @param b second rational * @return 0 if a==b, 1 if a>b and -1 if a<b. */ static inline int av_cmp_q(AVRational a, AVRational b){ const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den; if(tmp) return (tmp>>63)|1; else return 0; } /** * Rational to double conversion. * @param a rational to convert * @return (double) a */ static inline double av_q2d(AVRational a){ return a.num / (double) a.den; } /** * Reduce a fraction. * This is useful for framerate calculations. * @param dst_nom destination numerator * @param dst_den destination denominator * @param nom source numerator * @param den source denominator * @param max the maximum allowed for dst_nom & dst_den * @return 1 if exact, 0 otherwise */ int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max); /** * Multiplies two rationals. * @param b first rational. * @param c second rational. * @return b*c. */ AVRational av_mul_q(AVRational b, AVRational c) av_const; /** * Divides one rational by another. * @param b first rational. * @param c second rational. * @return b/c. */ AVRational av_div_q(AVRational b, AVRational c) av_const; /** * Adds two rationals. * @param b first rational. * @param c second rational. * @return b+c. */ AVRational av_add_q(AVRational b, AVRational c) av_const; /** * Subtracts one rational from another. * @param b first rational. * @param c second rational. * @return b-c. */ AVRational av_sub_q(AVRational b, AVRational c) av_const; /** * Converts a double precision floating point number to a rational. * @param d double to convert * @param max the maximum allowed numerator and denominator * @return (AVRational) d. */ AVRational av_d2q(double d, int max) av_const; #endif /* FFMPEG_RATIONAL_H */ --- NEW FILE: avutil.h --- /* * copyright (c) 2006 Michael Niedermayer <[EMAIL PROTECTED]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FFMPEG_AVUTIL_H #define FFMPEG_AVUTIL_H /** * @file avutil.h * external API header */ #define AV_STRINGIFY(s) AV_TOSTRING(s) #define AV_TOSTRING(s) #s #define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c) #define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) #define LIBAVUTIL_VERSION_MAJOR 49 #define LIBAVUTIL_VERSION_MINOR 6 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MICRO) #define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MICRO) #define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT #define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) #include "common.h" #include "mathematics.h" #include "rational.h" #include "intfloat_readwrite.h" #include "log.h" /** * Pixel format. Notes: * * PIX_FMT_RGB32 is handled in an endian-specific manner. A RGBA * color is put together as: * (A << 24) | (R << 16) | (G << 8) | B * This is stored as BGRA on little endian CPU architectures and ARGB on * big endian CPUs. * * When the pixel format is palettized RGB (PIX_FMT_PAL8), the palettized * image data is stored in AVFrame.data[0]. The palette is transported in * AVFrame.data[1] and, is 1024 bytes long (256 4-byte entries) and is * formatted the same as in PIX_FMT_RGB32 described above (i.e., it is * also endian-specific). Note also that the individual RGB palette * components stored in AVFrame.data[1] should be in the range 0..255. * This is important as many custom PAL8 video codecs that were designed * to run on the IBM VGA graphics adapter use 6-bit palette components. */ enum PixelFormat { PIX_FMT_NONE= -1, PIX_FMT_YUV420P, ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) PIX_FMT_YUYV422, ///< Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr PIX_FMT_RGB24, ///< Packed RGB 8:8:8, 24bpp, RGBRGB... PIX_FMT_BGR24, ///< Packed RGB 8:8:8, 24bpp, BGRBGR... PIX_FMT_YUV422P, ///< Planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) PIX_FMT_YUV444P, ///< Planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) PIX_FMT_RGB32, ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness PIX_FMT_YUV410P, ///< Planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) PIX_FMT_YUV411P, ///< Planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) PIX_FMT_RGB565, ///< Packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), in cpu endianness PIX_FMT_RGB555, ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), in cpu endianness most significant bit to 0 PIX_FMT_GRAY8, ///< Y , 8bpp PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette PIX_FMT_YUVJ420P, ///< Planar YUV 4:2:0, 12bpp, full scale (jpeg) PIX_FMT_YUVJ422P, ///< Planar YUV 4:2:2, 16bpp, full scale (jpeg) PIX_FMT_YUVJ444P, ///< Planar YUV 4:4:4, 24bpp, full scale (jpeg) PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing(xvmc_render.h) PIX_FMT_XVMC_MPEG2_IDCT, PIX_FMT_UYVY422, ///< Packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 PIX_FMT_UYYVYY411, ///< Packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 PIX_FMT_BGR32, ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8B 8G 8R(lsb), in cpu endianness PIX_FMT_BGR565, ///< Packed RGB 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), in cpu endianness PIX_FMT_BGR555, ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), in cpu endianness most significant bit to 1 PIX_FMT_BGR8, ///< Packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) PIX_FMT_BGR4, ///< Packed RGB 1:2:1, 4bpp, (msb)1B 2G 1R(lsb) PIX_FMT_BGR4_BYTE, ///< Packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) PIX_FMT_RGB8, ///< Packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) PIX_FMT_RGB4, ///< Packed RGB 1:2:1, 4bpp, (msb)2R 3G 3B(lsb) PIX_FMT_RGB4_BYTE, ///< Packed RGB 1:2:1, 8bpp, (msb)2R 3G 3B(lsb) PIX_FMT_NV12, ///< Planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 for UV PIX_FMT_NV21, ///< as above, but U and V bytes are swapped PIX_FMT_RGB32_1, ///< Packed RGB 8:8:8, 32bpp, (msb)8R 8G 8B 8A(lsb), in cpu endianness PIX_FMT_BGR32_1, ///< Packed RGB 8:8:8, 32bpp, (msb)8B 8G 8R 8A(lsb), in cpu endianness PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian PIX_FMT_YUV440P, ///< Planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) PIX_FMT_YUVJ440P, ///< Planar YUV 4:4:0 full scale (jpeg) PIX_FMT_YUVA420P, ///< Planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) PIX_FMT_NB, ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; #ifdef WORDS_BIGENDIAN #define PIX_FMT_RGBA PIX_FMT_RGB32_1 #define PIX_FMT_BGRA PIX_FMT_BGR32_1 #define PIX_FMT_ARGB PIX_FMT_RGB32 #define PIX_FMT_ABGR PIX_FMT_BGR32 #define PIX_FMT_GRAY16 PIX_FMT_GRAY16BE #else #define PIX_FMT_RGBA PIX_FMT_BGR32 #define PIX_FMT_BGRA PIX_FMT_RGB32 #define PIX_FMT_ARGB PIX_FMT_BGR32_1 #define PIX_FMT_ABGR PIX_FMT_RGB32_1 #define PIX_FMT_GRAY16 PIX_FMT_GRAY16LE #endif #if LIBAVUTIL_VERSION_INT < (50<<16) #define PIX_FMT_UYVY411 PIX_FMT_UYYVYY411 #define PIX_FMT_RGBA32 PIX_FMT_RGB32 #define PIX_FMT_YUV422 PIX_FMT_YUYV422 #endif #endif /* FFMPEG_AVUTIL_H */ ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Audacity-cvs mailing list Audacity-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/audacity-cvs