[FFmpeg-devel] Broken compile with latest libavutil/common.h

Michael Niedermayer michaelni
Thu Jan 15 15:12:55 CET 2009


On Thu, Jan 15, 2009 at 12:43:27AM +0000, M?ns Rullg?rd wrote:
> Aurelien Jacobs <aurel at gnuage.org> writes:
> 
> > M?ns Rullg?rd wrote:
[...]
> 
> > +/* math */
> > +int64_t av_const ff_gcd(int64_t a, int64_t b);
> 
> The function is in mathematics.c.  Maybe mathematics.h would be a good
> place for this prototype.  

> Maybe we should even make that function
> public.

I think so too

> 
> > +/**
> > + * converts fourcc string to int
> > + */
> > +static inline av_pure int ff_get_fourcc(const char *s){
> > +    assert( strlen(s)==4 );
> > +    return (s[0]) + (s[1]<<8) + (s[2]<<16) + (s[3]<<24);
> > +}
> 
> This looks a lot like AV_RL32().  

indeed and i wouldnt mind seeing all ff_get_fourcc replaced by it


> BTW, assert(strlen(s) ... ) is a
> stupid idea.  If there's bad data, what's to say there will be a null
> terminator anywhere close?

nothing, but if its not it will either segfault by reading to much
or the assert will end the program thus i dont see it as a problem.


> 
> > +#if ARCH_X86 || ARCH_PPC || ARCH_BFIN
> > +#define AV_READ_TIME read_time
> > +#if ARCH_X86
> > +static inline uint64_t read_time(void)
> > +{
> > +    uint32_t a, d;
> > +    __asm__ volatile("rdtsc\n\t"
> > +                 : "=a" (a), "=d" (d));
> > +    return ((uint64_t)d << 32) + a;
> > +}
> > +#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 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_ERROR, "%"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
> 
> How about a new header, timer.h or so?

iam in favor of this too


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Many that live deserve death. And some that die deserve life. Can you give
it to them? Then do not be too eager to deal out death in judgement. For
even the very wise cannot see all ends. -- Gandalf
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090115/ec736447/attachment.pgp>



More information about the ffmpeg-devel mailing list