[FFmpeg-devel] [PATCH] libavformat: not treat 0 as EOF
Jan Ekstrom
jeebjp at gmail.com
Tue Oct 24 22:37:25 EEST 2017
On Tue, Oct 24, 2017 at 10:17 PM, Nicolas George <george at nsup.org> wrote:
> Le tridi 3 brumaire, an CCXXVI, Jan Ekstrom a écrit :
> I do not consider this a public API change because 0 was never
> documented as a valid return value for a read_packet callback, while
> AVERROR_EOF has been around for a long time.
>
You might be very true, but funny enough I just checked the AVIO
example doc/examples/avio_reading.c, and the read function there does
not seem to utilize AVERROR_EOF either :) .
> But my goal is not to break existing code on purpose. Fortunately, there
> is a rather simple workaround, I will try to implement it tomorrow.
> Still, lacking a simple test case, I will not be able to test it.
>
Just for your information, I decided to call people out a bit on the
IRC channel to see what people would prefer, and it seems like James,
BtbN and Martin voiced their opinion that they would like a flag that
would let you enable the 0 != EOF behavior. Additionally, a warning
would be given out if zero is returned and the flag is unset. Quote
follows:
> <+JEEB> can anyone else chime on the EOF thing, if we want to
> either A) leave things as they are and just break old
> clients with an API behavior change B) add an option for
> the new behavior , or C) revert the 0 != EOF thing
> <+JEEB> because while those people that are on IRC have most
> likely adapted their stuff, we will have quite a bit of
> breakage due to this :P
> <+JEEB> I'd probably go for B but I'm not sure how many places I'd
> have to poke to add the option
> < jamrial> maybe a temporary option to recover the old behavior
> should be added for the usual period of ~2 years, and a
> notice about it being removed eventually added
> < jamrial> basically, deprecating the old behavior and leaving a
> compat mode for it
> <+JEEB> yes
> < jamrial> library users will nontheless have to update their code
> to enable said option
> < jamrial> then again to remove it two years from now :p
> < jamrial> so dunno
> < jamrial> is this change, unintended breakage aside, a good one?
> because if it doesn't really bring any worthwile
> benefit maybe we should just revert it
> <+JEEB> the requirement for the change was zero-byte UDP packets
> which seem to be valid. originally the code was added into
> the UDP lavf module, but then it was requested to be moved
> into lavf general
> <+JEEB> which thus broke the API behavior
> <@nevcairiel> jamrial: i have always questioned the usefulness of
> the change, but apparently there is obscure crazy
> things that might use it
> <+JEEB> yes, most users don't find that stuff on their networks
> <@nevcairiel> and re: flag, if anything it should be inverted, or
> its still an API break =p
> <+JEEB> well flag to have the NEW behavior
> <+JEEB> so that the default behavior is the old one
> <+JEEB> that's what I meant
> < jamrial> yeah, probably
> <@BtbN> It should behave as it used to, which is imo a bit broken,
> with some flag somewhere to flip it to sane behaviour
> <+JEEB> BtbN: agreed
> <@BtbN> And it should throw a depercation warning if the flag is
> unset
> <@wbs> alternatively, only throw a warning if the flag is unset
> _and_ you return 0?
> <@wbs> then you can write code that uses AVERROR_EOF for older
> lavf versions without any ifdefs for the new flag, while
> still running without warnings on the new lavf as well
Any opinions?
Jan
More information about the ffmpeg-devel
mailing list