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

Aurelien Jacobs aurel
Fri Jan 16 00:53:24 CET 2009


Michael Niedermayer wrote:

> 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:
> > > [...]
> > > Index: libavutil/internal.h
> > > ===================================================================
> > > --- libavutil/internal.h	(revision 16611)
> > > +++ libavutil/internal.h	(working copy)
> > > @@ -301,4 +301,140 @@
> > >  }
> > >  #endif /* HAVE_TRUNCF */
> > >  
> > > +/* 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
> > > +}  
> > 
> > This would be better placed nearer the only place that uses it, which
> > is somewhere in lavc.

Attached patch moves it to libavcodec/internal.h.

> [...]
> > 
> > > +/* 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

Done in attached patch.

> > > +/**
> > > + * 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

See attached patch.

> > > +#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

Committed.

Aurel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: move_mid_pred.diff
Type: text/x-patch
Size: 2888 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090116/6d0fa1f7/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: av_gcd.diff
Type: text/x-patch
Size: 7729 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090116/6d0fa1f7/attachment-0001.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: replace_ff_get_fourcc.diff
Type: text/x-patch
Size: 13651 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090116/6d0fa1f7/attachment-0002.bin>



More information about the ffmpeg-devel mailing list