On 7/4/2020 7:54 PM, Jan Engelhardt wrote: > Greetings. > > > Between ffmpeg-4.2.3 and ffmpeg-4.3, struct AVCodecContext, > publicly exposed through /usr/include, has been changed thus: > > --- avcodec.h 2020-06-11 11:45:16.000000000 +0200 > +++ avcodec.h 2020-07-01 03:45:24.000000000 +0200 > @@ -3370,6 +2334,24 @@ typedef struct AVCodecContext { > * - encoding: unused > */ > int discard_damaged_percentage; > + > + /** > + * The number of samples per frame to maximally accept. > + * > + * - decoding: set by user > + * - encoding: set by user > + */ > + int64_t max_samples; > + > + /** > + * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of > + * metadata exported in frame, packet, or coded stream side data by > + * decoders and encoders. > + * > + * - decoding: set by user > + * - encoding: set by user > + */ > + int export_side_data; > } AVCodecContext; > > #if FF_API_CODEC_GET_SET > > > Second, struct AVDCT, which is publicly exposed through /usr/include, has been > changed: > > --- avdct.h 2020-06-11 11:45:16.000000000 +0200 > +++ avdct.h 2020-07-01 03:45:24.000000000 +0200 > @@ -67,6 +67,10 @@ typedef struct AVDCT { > ptrdiff_t line_size); > > int bits_per_sample; > + > + void (*get_pixels_unaligned)(int16_t *block /* align 16 */, > + const uint8_t *pixels, > + ptrdiff_t line_size); > } AVDCT; > > /** > > > The abidiff(1) utility confirms this situation such: > > $ abidiff > b42/usr/lib/debug/usr/lib64/libavcodec.so.58.54.100-4.2.3-1.1.x86_64.debug \ > > b43/usr/lib/debug/usr/lib64/libavcodec.so.58.91.100-4.3-136.2.x86_64.debug > > [...] in pointed to type 'struct AVCodecContext' at avcodec.h:526:1: > type size changed from 8448 to 8576 (in bits) > [...] > underlying type 'struct AVDCT' at avdct.h:29:1 changed: > type size changed from 896 to 960 (in bits) > > > These struct changes constitute an ABI break, and ABI breaks require SO > version > bumps, but which was not done for 4.3. This is bad. > > A user has summarily reported crashes through {not a proper bug reporting > medium} already. > https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-4
Neither of these are breaks as sizeof(AVCodecContext) and sizeof(AVDCT) are not part of the ABI. Both structs are meant to be allocated using avcodec_alloc_context3() and avcodec_dct_alloc() respectively, and not stored on stack or allocated with av_malloc(sizeof()). Fields can be added at the end of such structs without the need for a soname bump and remain backwards compatible. A break would be adding a field in the middle of such structs, moving the offset of other fields, and that's not what happened here. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".