[FFmpeg-devel] Experimental MSVC port

Ole Andre Vadla Ravnås ole.andre.ravnas
Wed Mar 26 17:28:47 CET 2008


Hi,

Thanks for the review, I hope you didn't review the whole thing (that would
make me feel bad); as I said previously it's not yet ready for serious review,
even if it was split up. (The changes were all done in a hurry and it all needs
a lot of work to even be considered.)

My intention in posting this in the first place was to get a feel for whether
anyone else could be interested in helping maintain this crazy stunt, as I've
already got way too many unfinished patches up in the air for various F/OSS
projects on Windows. Sorry for not making that clear in my initial post,
it's all very alpha at the moment.

Ole Andr?


> -----Original Message-----
> From: ffmpeg-devel-bounces at mplayerhq.hu [mailto:ffmpeg-devel-
> bounces at mplayerhq.hu] On Behalf Of Ronald S. Bultje
> Sent: Wednesday, March 26, 2008 4:46 PM
> To: FFmpeg development discussions and patches
> Subject: Re: [FFmpeg-devel] Experimental MSVC port
> 
> Hi,
> 
> On Wed, Mar 26, 2008 at 11:16 AM, Ole Andre Vadla Ravn?s <
> ole.andre.ravnas at tandberg.com> wrote:
> 
> You want to split this stuff up in many, many small patches for the
> obvious
> stuff. It'll make applying a lot easier. For example:
> 
> +#include <assert.h>
> >  #include <inttypes.h>
> 
> 
> or
> 
> 
> > @@ -39,6 +44,11 @@
> >  #    include <limits.h>
> >  #    include <errno.h>
> >  #    include <math.h>
> > +
> > +#    ifdef _MSC_VER
> > +#        define WIN32_LEAN_AND_MEAN
> > +#        include <windows.h>
> > +#    endif
> >  #endif /* HAVE_AV_CONFIG_H */
> >
> >  #ifndef av_always_inline
> 
> 
> (actually, why do you need windows.h? What's wrong with standard libc
> headers on win32? If specific functions need windows.h (as below in
> read_time()), then just include them in those particular functions, not
> everywhere)
> 
> or
> 
> 
> > @@ -298,11 +308,17 @@ static inline uint64_t read_time(void)
> >  #elif defined(ARCH_X86_32)
> >  static inline long long read_time(void)
> >  {
> > +#ifndef _MSC_VER
> >          long long l;
> >          asm volatile(   "rdtsc\n\t"
> >                  : "=A" (l)
> >          );
> >          return l;
> > +#else
> > +        LARGE_INTEGER i;
> > +        QueryPerformanceCounter(&i);
> > +        return i.QuadPart;
> > +#endif
> >  }
> >  #elif ARCH_BFIN
> >  static inline uint64_t read_time(void)
> 
> 
> Each of those (and others) can be done in separate patches and I don't
> think
> many people would mind.
> 
> +#ifdef _MSC_VER
> > +#define inline __inline
> > +#endif
> 
> 
> -> liboss (same in random.h)
> 
> 
> > Index: ffmpeg/libavutil/intfloat_readwrite.c
> > ===================================================================
> > --- ffmpeg.orig/libavutil/intfloat_readwrite.c
> > +++ ffmpeg/libavutil/intfloat_readwrite.c
> > @@ -28,15 +28,22 @@
> >  #include "common.h"
> >  #include "intfloat_readwrite.h"
> >
> > +#ifndef _MSC_VER
> > +#define NaN (0.0/0.0)
> > +#else
> > +static unsigned long nan[2] = { 0xffffffff, 0x7fffffff };
> > +#define NaN (*((double *) nan))
> > +#endif
> > +
> >  double av_int2dbl(int64_t v){
> >      if(v+v > 0xFFEULL<<52)
> > -        return 0.0/0.0;
> > +        return NaN;
> >      return ldexp(((v&((1LL<<52)-1)) + (1LL<<52)) * (v>>63|1),
> > (v>>52&0x7FF)-1075);
> >  }
> >
> >  float av_int2flt(int32_t v){
> >      if(v+v > 0xFF000000U)
> > -        return 0.0/0.0;
> > +        return NaN;
> >      return ldexp(((v&0x7FFFFF) + (1<<23)) * (v>>31|1), (v>>23&0xFF)-
> 150);
> >  }
> >
> > @@ -48,7 +55,7 @@ double av_ext2dbl(const AVExtFloat ext){
> >          m = (m<<8) + ext.mantissa[i];
> >      e = (((int)ext.exponent[0]&0x7f)<<8) | ext.exponent[1];
> >      if (e == 0x7fff && m)
> > -        return 0.0/0.0;
> > +        return NaN;
> >      e -= 16383 + 63;        /* In IEEE 80 bits, the whole (i.e.
> 1.xxxx)
> >                               * mantissa bit is written as opposed to
> the
> >                               * single and double precision formats
> */
> > @@ -87,7 +94,7 @@ AVExtFloat av_dbl2ext(double d){
> >              ext.mantissa[i] = m>>(56-(i<<3));
> >      } else if (f != 0.0) {
> >          ext.exponent[0] = 0x7f; ext.exponent[1] = 0xff;
> > -        if (f != 1/0.0)
> > +        if (f != NaN)
> >              ext.mantissa[0] = ~0;
> >      }
> >      if (d < 0)
> 
> 
> Can be done separately also.
> 
> 
> > @@ -1747,7 +1755,10 @@ enum CodecID av_codec_get_id(const AVCod
> >  #define MAX_STD_TIMEBASES (60*12+5)
> >  static int get_std_framerate(int i){
> >      if(i<60*12) return i*1001;
> > -    else        return ((int[]){24,30,60,12,15})[i-60*12]*1000*12;
> > +    else {
> > +        int values[] = {24,30,60,12,15};
> > +        return values[i-60*12]*1000*12;
> > +    }
> >  }
> >
> >  int av_find_stream_info(AVFormatContext *ic)
> 
> 
> Can you do your changes in rationale.c, opt.c and h263.c in this style
> also
> (i.e. don't remove the unnamed struct intialized in favour of value
> initializes, but rather in favour of named struct initializers).
> 
> Ronald
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel




More information about the ffmpeg-devel mailing list