[FFmpeg-devel] FFmpeg 3.5 / 4.0

wm4 nfxjfg at googlemail.com
Thu Apr 19 12:53:48 EEST 2018


On Thu, 19 Apr 2018 02:19:06 +0200
Michael Niedermayer <michael at niedermayer.cc> wrote:

> On Thu, Apr 19, 2018 at 12:56:05AM +0200, wm4 wrote:
> > On Thu, 19 Apr 2018 00:40:21 +0200
> > Michael Niedermayer <michael at niedermayer.cc> wrote:
> >   
> > > On Wed, Apr 18, 2018 at 11:55:09PM +0200, Paul B Mahol wrote:  
> > > > On 4/18/18, wm4 <nfxjfg at googlemail.com> wrote:    
> > > > > On Wed, 18 Apr 2018 23:15:47 +0200
> > > > > Michael Niedermayer <michael at niedermayer.cc> wrote:
> > > > >    
> > > > >> On Wed, Apr 18, 2018 at 04:09:41PM +0200, Hendrik Leppkes wrote:    
> > > > >> > On Mon, Apr 16, 2018 at 1:24 PM, Michael Niedermayer
> > > > >> > <michael at niedermayer.cc> wrote:    
> > > > >> > > On Sat, Apr 14, 2018 at 02:04:43PM +0200, Michael Niedermayer wrote:    
> > > > >> > >> On Fri, Apr 13, 2018 at 12:53:08AM +0200, Michael Niedermayer wrote:
> > > > >> > >>    
> > > > >> > >> > On Mon, Feb 19, 2018 at 02:50:08AM +0100, Michael Niedermayer
> > > > >> > >> > wrote:    
> > > > >> > >> > > Hi
> > > > >> > >> > >
> > > > >> > >> > > Its 4 months since 3.4 was branched so its time for a new major
> > > > >> > >> > > release
> > > > >> > >> > >
> > > > >> > >> > > Is 4.0 or 3.5 preferred ?
> > > > >> > >> > > Any name suggestions ?
> > > > >> > >> > >
> > > > >> > >> > > If there are no objections i will likely make that release in the
> > > > >> > >> > > next weeks    
> > > > >> > >> >
> > > > >> > >> > more time has passed than intended ...
> > > > >> > >> >
> > > > >> > >> > what issues do remain that need to be fixed before the release ?
> > > > >> > >> > I see fate.ffmpeg.org is not looking that well (compared to most
> > > > >> > >> > releases in the past) i remember this being pretty much green
> > > > >> > >> > longer ago
> > > > >> > >> > do people want these to be fixed before the release ?    
> > > > >> > >>
> > > > >> > >> ok, so, my plan is to create a release/4.0 branch from master in the
> > > > >> > >> next
> > > > >> > >> 24-48 hours unless theres some issue brought to my attention (CC me
> > > > >> > >> just to
> > > > >> > >> be sure if theres an issue)
> > > > >> > >>
> > > > >> > >> then wait 2 days or so and backport any newly found bugfixes to
> > > > >> > >> release/4.0
> > > > >> > >> and then make the release finally
> > > > >> > >>
> > > > >> > >> delays at any point are possible due to issues, lack of time or
> > > > >> > >> other.
> > > > >> > >>
> > > > >> > >> as name i think kierans suggestion of Wu would make sense. IIRC we
> > > > >> > >> had
> > > > >> > >> no name suggested by more than 1 developer. Please correct me if i
> > > > >> > >> miscounted i did only briefly re-check the mails in the thread.    
> > > > >> > >
> > > > >> > >
> > > > >> > > release/4.0 branched
> > > > >> > > next is the release in a few days.
> > > > >> > > If theres something i should wait for please say so and CC me
> > > > >> > > also please backport all bugfixes to 4.0    
> > > > >> >
> > > > >> > I have two more fixes that should really go in 4.0, one is the
> > > > >> > tls_schannel fix that I plan to push soon (I'm the author of that
> > > > >> > module, so unless someone says otherwise soon), and the MSVC configure
> > > > >> > breakage introduced in the last 2 days.
> > > > >> > Not sure when you planned to tag, but hopefully both of those are
> > > > >> > resolved by tomorrow afternoon.    
> > > > >>
> > > > >> well i had a bad headache today and iam a bit behind now with stuff
> > > > >> so i likely wont be ready before tomorrow evening either.    
> > > > >
> > > > > Please also wait with the release until we've sorted out the general
> > > > > avio EOF mess.    
> > > >     
> > >   
> > > > No, that need to wait 5.0    
> > > 
> > > +1  
> > 
> > At this point it won't be possibly anymore, so it has to happen for
> > 4.0. Also why would we release something that is likely to break even
> > more API users? Wouldn't you agree that bugs need to be fixed.  
> 
> The API we have now, has been discussed, implemented and tested quite a
> while ago.

It was about half a year ago, and we're finding new problems all the
time. Like schannel just a few days ago.

If we release it as it is, application users will suffer from these bugs
too.

> That was the time for everyone to bring their oppinions in.

I wasn't on the list at that time, you know why.

> About API change, was 0 ever documented to mean EOF ?
> If not, AVERROR_EOF was documented so iam not sure if the bug is not
> in code returning 0 for EOF in cases where this was not documented.
> 
> Thus rather a long standing bug that got fixed now instead of a new one
> 
> I looked a bit at the documentation but i couldnt find a reference to
> 0 means EOF, i looked at a old release to make sure iam not basing this
> on a recent change
> It is very possible iam missing something, in which case someone please
> correct me and
> 
> Ive not checked all docs but if i look at 
> avio_read()
> /**
>  * Read size bytes from AVIOContext into buf.
>  * @return number of bytes read or AVERROR
>  */
>  
>  0 is not EOF here in the API

It doesn't mention EOF at all. In practice, 0 and AVERROR_EOF have been
mixed inside and outside of ffmpeg all the time. In fact, the EOF
change immediately triggered regressions in a bunch of FFmpeg users at
the time.

Since you always argue for strict API compatibility, and going ways to
ensure it, you arguing the other way is quite strange.

>  if we look at the url,h one:
>  
>     /**
>      * Read data from the protocol.
>      * If data is immediately available (even less than size), EOF is
>      * reached or an error occurs (including EINTR), return immediately.
>      * Otherwise:
>      * In non-blocking mode, return AVERROR(EAGAIN) immediately.
>      * In blocking mode, wait for data/EOF/error with a short timeout (0.1s),
>      * and return AVERROR(EAGAIN) on timeout.
>      * Checking interrupt_callback, looping on EINTR and EAGAIN and until
>      * enough data has been read is left to the calling function; see
>      * retry_transfer_wrapper in avio.c.
>      */
>     int     (*url_read)( URLContext *h, unsigned char *buf, int size);
> 
> it also doesnt say 0 is EOF

That doesn't explain how EOF is handled.

> now, this is release/1.0 rather long ago its not a change
> 
> The only functions which i could find that are documented to return 0 on EOF
> are:
> 
>  * @note return 0 if EOF, so you cannot use it if EOF handling is
>  *       necessary
> ...
> int          avio_r8  (AVIOContext *s);
> unsigned int avio_rl16(AVIOContext *s);
> unsigned int avio_rl24(AVIOContext *s);
> unsigned int avio_rl32(AVIOContext *s);
> uint64_t     avio_rl64(AVIOContext *s);
> unsigned int avio_rb16(AVIOContext *s);
> unsigned int avio_rb24(AVIOContext *s);
> unsigned int avio_rb32(AVIOContext *s);
> uint64_t     avio_rb64(AVIOContext *s);
> 
> Also these dont say 0 means EOF, they say 
> "you cannot use it if EOF handling is necessary"

These functions inherently can't signal errors or EOF at all, so your
argumentation is very misleading. I never claimed that 0 means EOF
because these functions return 0 on EOF.

> 
> I do faintly remember that MANY years ago there was some intend to have 
> the API match the file stuff with 0 being EOF. But iam not sure if that 
> was actually documented or intended for network protocols where 0 sized 
> packets can occur.
> 
> also 4.0 is a new major version with new major API version

And? The deprecation period is 2 years. Everything from 2 years ago
must still work. Right now, at least EOF handling for datagram streams
will be broken with no backwards compatibility if a user has a custom
avio context and returns 0 for EOF (which previously worked).


More information about the ffmpeg-devel mailing list