[FFmpeg-devel] ABI break between 3.0 and 3.3 without symvers/SONAME changes
Jan Engelhardt
jengelh at inai.de
Sat Jun 3 15:07:30 EEST 2017
On Saturday 2017-06-03 13:34, Hendrik Leppkes wrote:
>On Sat, Jun 3, 2017 at 1:18 PM, Jan Engelhardt <jengelh at inai.de> wrote:
>>
>>The layout of struct AVCodec changed. Four function pointers were
>>inserted in the middle, shifting void (*flush) to a new address.
>>The size of AVCodec also changed, which would have required a full
>>MAJOR bump.
>
>Our ABI is stable in one direction, not in both. [...]
>The same applies to structs. The size of structs is not part of the
>ABI, and as such we are free to grow it to accomodate new fields
>without breaking the ABI.
Size changes are breakers in both directions.
You claim your ABI is stable in one direction, which means that a
program built with 3.0 headers should work with a 3.3 library on a
separate system. However, a 3.0 program which invokes
someAVcontext->flush(...) would, under 3.3, invoke someAVc->send_frame
because of the changed layout. So it's not ABI compatible in that one
direction that ffmpeg is supposed to be compile, either.
More information about the ffmpeg-devel
mailing list