[libav-devel] [FFmpeg-devel] [PATCH 0/20] removal of deprecated features

Andreas Cadhalpun andreas.cadhalpun at googlemail.com
Wed Aug 5 21:31:38 CEST 2015


On 04.08.2015 07:57, Reimar Döffinger wrote:
> I do have on more proposal, but the problem is it needs someone to do the work.
> For each removed feature, prepare documentation "a monkey could follow" on how
> to replace it (you could call it a transition guide).
> Even better, a script that automates it where reasonable.

I think this is a very good idea.

> In some cases it is just a matter of copy-pasting some existing wrapper code,
> particularly if we remove that wrapper code it is useful if people still have
> it available in the new release.
> If it's just a few hours of someone's time who even doesn't need to understand
> the code, I think we can very confidently say "not really our problem" if some
> applications still use it.

Agreed.

> If we that way find out that there are non-trivial cases or cases where the code
> gets a lot more complicated it might be a hint the new API is still crap and we
> maybe should come up with something better first.

A more complete usage list for the deprecated APIs is:

FF_API_PIX_FMT: 71
amide avbin avifile bino blender chromium-browser dff dolphin-emu dvbcut
dvswitch ffdiaporama ffmpeg2theora ffmpegthumbnailer ffmpegthumbs ffms2
fuse-emulator-utils gazebo gmerlin-avdecoder gmerlin-encoders gnash gpac
gst-libav1.0 guvcview harvid hedgewars info-beamer jugglemaster karlyriceditor
kino kodi lightspark lebiniou libam7xxx libavg libde265 libextractor
libquicktime linphone lives lynkeos.app mlt mplayer mplayer2 mrpt opal
opencv openmw openscenegraph ovito paraview performous pjproject qutecom
rbdoom3bfg renpy shotdetect sflphone strigi survex transcode vcmi vlc vtk vtk6
vxl wxsvg x264 xjadeo xpra yorick-av zoneminder

FF_API_AVFRAME_LAVC: 53
alsa-plugins amarok aubio avbin blender chromaprint dff dolphin-emu dvbcut
ffdiaporama ffmpegthumbnailer ffmpegthumbs fuse-emulator-utils gazebo
gmerlin-avdecoder gmerlin-encoders goldendict gpac gst-libav1.0 hedgewars
info-beamer jugglemaster kino libavg libextractor libquicktime lightspark
linphone mplayer mplayer2 mrpt opal opencv openscenegraph ovito paraview
performous pianopar qutecom renpy shotdetect spek squeezelite transcode
vcmi vlc vtk vtk6 vxl xine-lib-1.2 xpra yorick-av zoneminder

FF_API_GET_BUFFER: 9
avifile dvswitch gmerlin-avdecoder gst-libav1.0 libavg mplayer mplayer2 openmw
openscenegraph

FF_API_AUDIOCONVERT: 7
alsa-plugins cantata ffdiaporama moc mplayer2 mpv vlc

FF_API_SWS_CPU_CAPS: 6
fuse-emulator-utils kodi mlt mplayer2 vlc zoneminder

FF_API_DEINTERLACE: 5
blender dff ffmpegthumbnailer ffmpegthumbs vxl

FF_API_AVFRAME_LAVC(qscale): 3
ffmpeg2theora kodi xine-lib-1.2

FF_API_CODEC_ID: 3
chromium-browser dvswitch ffms2

FF_API_CONTEXT_SIZE: 3
mplayer mplayer2 xine-lib-1.2

FF_API_REQUEST_CHANNELS: 3
mplayer mplayer2 renpy

FF_API_AV_REVERSE: 2
mplayer mplayer2

FF_API_AVCODEC_RESAMPLE: 2
mlt mplayer

FF_API_DESTRUCT_PACKET: 2
lives openmw

FF_API_AVFILTERBUFFER: 2
ffdiaporama pianobar

FF_API_AVFILTERPAD_PUBLIC: 1
mplayer

FF_API_VIMA_DECODER: 1
mplayer



FF_API_PIX_FMT and FF_API_AVFRAME_LAVC are still widely used, but the
"patch-monkey" could deal with the changes and also with FF_API_AUDIOCONVERT,
FF_API_SWS_CPU_CAPS, FF_API_CODEC_ID, FF_API_CONTEXT_SIZE,
FF_API_REQUEST_CHANNELS and FF_API_VIMA_DECODER.

Regarding FF_API_GET_BUFFER, get_buffer should be replaced with get_buffer2,
but it's not clear how release_buffer/reget_buffer should be replaced.
Can someone explain/document this?

To get rid of FF_API_DEINTERLACE, one should 'use yadif (in libavfilter) instead'.
Well, ... how?

Then, as part of FF_API_AVFRAME_LAVC(qscale), the fields qscale_table, qstride and
qscale_type of AVFrame are to be removed, but (at least in FFmpeg) these are used by
the not deprecated functions av_frame_set_qp_table and av_frame_get_qp_table, so they
shouldn't be removed. Anyway it's not clear how to replace their usage. 

Why is FF_API_AV_REVERSE deprecated?
It is used in FFmpeg's libavutil/eval.c.

One should 'use libswresample instead' of FF_API_AVCODEC_RESAMPLE.
A more detailed explanation would be good.

Same holds for FF_API_DESTRUCT_PACKET, where one should 'use the AVBuffer API
instead'.

For FF_API_AVFILTERBUFFER no replacement is documented.

FF_API_AVFILTERPAD_PUBLIC should be replaced by avfilter_pad_get_name and
avfilter_pad_get_type, but it seems that mplayer also uses others.

Better documentation would surely be helpful.

> Btw. the magic option to enable compatibility is still somewhat useful as it lists
> and allows testing the specific changes that are coming up. But I agree it's only
> a minor help.

The problem with such a magic option is that it combines the disadvantages of
removing and not removing: Programs using the old API get broken by default
and the deprecated functionality remains in the code base.

Best regards,
Andreas


More information about the libav-devel mailing list