[Ffmpeg-devel] FFMPEG RTSP for Windows

Rich Felker dalias
Thu Mar 30 18:49:28 CEST 2006


On Thu, Mar 30, 2006 at 07:39:07AM -0600, Michael A. Kohn wrote:
> >          sleep(1);
> > +#else
> > +        Sleep(1000);
> 
> > This is wrong. I doubt win32 is missing sleep, but if it is, you need
> > to make an emulation of sleep() using Sleep in a separate
> > win32-dependent file.
> 
> This is not wrong... try compiling this in Visual C++:

You missed the second half of my sentence. Adding #ifdef everywhere is
not acceptable. Instead if emulation of missing functions is required
you must include:

#ifdef MINGW
unsigned sleep(unsigned x)
{
	Sleep(1000*x);
}
#endif

once in an unobtrusive place, or just:

#ifdef MINGW
#define sleep(x) Sleep((x)*1000)
#endif

However I'm still skeptical since you explicitly stated your test was
in MSVC.

> it doesn't have sleep.. when I compiled libavformat as it was it gave a
> warning on sleep(1); .. and broke other places so I assumed mingw was
> missing sleep() also and changed it to Win32 style:

Don't assume. I'm almost sure that's incorrect.

> > +#undef rand
> > +#define random rand
> > random is not allowed in libav*. If it's used this is a bug and must
> > be corrected.
> 
> notice above these lines i wrote:
> 
> > +/* I'm sure the next two lines are evil in some way, but I'm not sure
> > +   how else to do that right now */
> 
> the way it is right now does not compile.  i was hoping someone could have
> been nice enough to explain why instead of you coming around and insulting
> me...  i'm sorry if what i did is so horrible, but that was the only way
> that was going to compile..

Well if there's buggy code you need to fix it, not pile workarounds on
top of it that hide the bugs.

> > +#ifdef CONFIG_WIN32
> > +        getsockopt (fd, SOL_SOCKET, SO_ERROR, (char FAR *)&ret, (int
> FAR
> > *)&optlen);
> 
> > The use of the FAR pointer qualifier is ABSOLUTELY WRONG!
> > This is win16 code!!
> 
> According to MSDN Libaray that came with the Visual Studio I use when I
> have to do VC++ things:

Again MSVC is _not supported_. This is intentional due to noncompliant
broken things exactly like what you've described here.

> > -#ifdef __BEOS__
> > +#if defined(__BEOS__) || defined(CONFIG_WIN32)
> >              len = recv(s->fd, buf, size, 0);
> >  #else
> >              len = read(s->fd, buf, size);
> 
> > IMO it's safe to use recv always.
> 
> that's fine..  however the code as it was originally written was using
> recv() only for BEOS and read() otherwise.  I did not choose to use read()
> on Unix so don't blame me for that.  And same for send.

Yes, I don't blame you for missing this. It was just a comment to
other developers.

> 
> > Using shutdown() instead of close() or closesocket() should be safe on
> > both unix and windows.
> 
> once again... the original code was written close() so I chose to stick

Sorry, I was wrong about what shutdown() does anyway.

Rich





More information about the ffmpeg-devel mailing list