diff mbox

[FFmpeg-devel] lavc: drop VDA

Message ID 20170929091131.13147-1-u@pkh.me
State New
Headers show

Commit Message

Clément Bœsch Sept. 29, 2017, 9:11 a.m. UTC
From: Clément Bœsch <cboesch@gopro.com>

Deprecated (aka removed) in OSX 10.11, and we have a replacement for it
(VideoToolbox).
---
Changes since RFC: rebase, ifdefery depreciation dance for the pix fmt,
Changelog entry.

I'll apply soon since the RFC seemed to raise acceptance.
---
 Changelog                                       |   1 +
 MAINTAINERS                                     |   1 -
 Makefile                                        |   3 -
 configure                                       |  14 -
 ffmpeg.h                                        |   2 -
 ffmpeg_opt.c                                    |   6 +-
 ffmpeg_videotoolbox.c                           |  45 +--
 libavcodec/Makefile                             |   7 +-
 libavcodec/allcodecs.c                          |   3 -
 libavcodec/h264_slice.c                         |   5 -
 libavcodec/vda.c                                |  84 -----
 libavcodec/vda.h                                | 230 -------------
 libavcodec/vda_h264.c                           | 425 ------------------------
 libavcodec/vda_h264_dec.c                       | 263 ---------------
 libavcodec/videotoolbox.c                       |  10 +-
 libavcodec/{vda_vt_internal.h => vt_internal.h} |  16 +-
 libavutil/pixdesc.c                             |   4 +
 libavutil/pixfmt.h                              |   8 +-
 libavutil/version.h                             |   3 +
 19 files changed, 27 insertions(+), 1103 deletions(-)
 delete mode 100644 libavcodec/vda.c
 delete mode 100644 libavcodec/vda.h
 delete mode 100644 libavcodec/vda_h264.c
 delete mode 100644 libavcodec/vda_h264_dec.c
 rename libavcodec/{vda_vt_internal.h => vt_internal.h} (82%)

Comments

Hendrik Leppkes Sept. 29, 2017, 9:38 a.m. UTC | #1
On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
> From: Clément Bœsch <cboesch@gopro.com>
>
> Deprecated (aka removed) in OSX 10.11, and we have a replacement for it
> (VideoToolbox).
> ---
> Changes since RFC: rebase, ifdefery depreciation dance for the pix fmt,
> Changelog entry.
>

vda.h is an installed header with public API in it, removing it
entirely would be an API and ABI break.

- Hendrik
Clément Bœsch Sept. 29, 2017, 12:40 p.m. UTC | #2
On Fri, Sep 29, 2017 at 11:38:42AM +0200, Hendrik Leppkes wrote:
> On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
> > From: Clément Bœsch <cboesch@gopro.com>
> >
> > Deprecated (aka removed) in OSX 10.11, and we have a replacement for it
> > (VideoToolbox).
> > ---
> > Changes since RFC: rebase, ifdefery depreciation dance for the pix fmt,
> > Changelog entry.
> >
> 
> vda.h is an installed header with public API in it, removing it
> entirely would be an API and ABI break.
> 

vda.h may be exposed unconditionally, but its associated object vda.o
isn't. Since it depends on vda to be assembled, the vda stub itself
doesn't seem to be present ever. So we're basically exposing a header for
functions we can never link against.

So should I somehow fix VDA while dropping it by providing a stub that was
never present?
Hendrik Leppkes Sept. 29, 2017, 4:15 p.m. UTC | #3
On Fri, Sep 29, 2017 at 2:40 PM, Clément Bœsch <u@pkh.me> wrote:
> On Fri, Sep 29, 2017 at 11:38:42AM +0200, Hendrik Leppkes wrote:
>> On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
>> > From: Clément Bœsch <cboesch@gopro.com>
>> >
>> > Deprecated (aka removed) in OSX 10.11, and we have a replacement for it
>> > (VideoToolbox).
>> > ---
>> > Changes since RFC: rebase, ifdefery depreciation dance for the pix fmt,
>> > Changelog entry.
>> >
>>
>> vda.h is an installed header with public API in it, removing it
>> entirely would be an API and ABI break.
>>
>
> vda.h may be exposed unconditionally, but its associated object vda.o
> isn't. Since it depends on vda to be assembled, the vda stub itself
> doesn't seem to be present ever. So we're basically exposing a header for
> functions we can never link against.
>
> So should I somehow fix VDA while dropping it by providing a stub that was
> never present?
>

vda is autodetected so a "naive" build would have it, so I would argue
the ABI of such a "naive" build should probably remain constant?

- Hendrik
Clément Bœsch Sept. 29, 2017, 5:08 p.m. UTC | #4
On Fri, Sep 29, 2017 at 06:15:57PM +0200, Hendrik Leppkes wrote:
> On Fri, Sep 29, 2017 at 2:40 PM, Clément Bœsch <u@pkh.me> wrote:
> > On Fri, Sep 29, 2017 at 11:38:42AM +0200, Hendrik Leppkes wrote:
> >> On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
> >> > From: Clément Bœsch <cboesch@gopro.com>
> >> >
> >> > Deprecated (aka removed) in OSX 10.11, and we have a replacement for it
> >> > (VideoToolbox).
> >> > ---
> >> > Changes since RFC: rebase, ifdefery depreciation dance for the pix fmt,
> >> > Changelog entry.
> >> >
> >>
> >> vda.h is an installed header with public API in it, removing it
> >> entirely would be an API and ABI break.
> >>
> >
> > vda.h may be exposed unconditionally, but its associated object vda.o
> > isn't. Since it depends on vda to be assembled, the vda stub itself
> > doesn't seem to be present ever. So we're basically exposing a header for
> > functions we can never link against.
> >
> > So should I somehow fix VDA while dropping it by providing a stub that was
> > never present?
> >
> 
> vda is autodetected so a "naive" build would have it, so I would argue
> the ABI of such a "naive" build should probably remain constant?

Just to be clear (sorry if I make you repeat yourself), we currently have
the following:

- Systems without VDA (that is, almost all of them) do not have access to
  either VDA or the stub: for them, we are exposing a header with FFmpeg
  symbols not accessible.

- Systems with VDA have access to the VDA code (assuming it still build)

What you suggest:

- Both systems (with and without VDA) should now use the existing stub we
  currently never build so the ABI for systems with VDA will be kept.

Is that correct?

If so, this means we will start introducing a deprecated API stub for VDA
on all systems.

Or should I start exposing the stub only for VDA systems, meaning I'll
need to keep the VDA detection in the configure?
Carl Eugen Hoyos Sept. 29, 2017, 5:17 p.m. UTC | #5
2017-09-29 11:11 GMT+02:00 Clément Bœsch <u@pkh.me>:
> From: Clément Bœsch <cboesch@gopro.com>
>
> Deprecated (aka removed) in OSX 10.11, and we have a
> replacement for it (VideoToolbox).

Does this mean binaries built on older systems do not
start on 10.11?

If yes, my suggestion would be to disable auto-detection
until removal at the next major bump.

If there is no imminent issue, I wonder if waiting isn't the
simpler solution.

Carl Eugen
Hendrik Leppkes Sept. 29, 2017, 6:12 p.m. UTC | #6
On Fri, Sep 29, 2017 at 7:08 PM, Clément Bœsch <u@pkh.me> wrote:
> On Fri, Sep 29, 2017 at 06:15:57PM +0200, Hendrik Leppkes wrote:
>> On Fri, Sep 29, 2017 at 2:40 PM, Clément Bœsch <u@pkh.me> wrote:
>> > On Fri, Sep 29, 2017 at 11:38:42AM +0200, Hendrik Leppkes wrote:
>> >> On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
>> >> > From: Clément Bœsch <cboesch@gopro.com>
>> >> >
>> >> > Deprecated (aka removed) in OSX 10.11, and we have a replacement for it
>> >> > (VideoToolbox).
>> >> > ---
>> >> > Changes since RFC: rebase, ifdefery depreciation dance for the pix fmt,
>> >> > Changelog entry.
>> >> >
>> >>
>> >> vda.h is an installed header with public API in it, removing it
>> >> entirely would be an API and ABI break.
>> >>
>> >
>> > vda.h may be exposed unconditionally, but its associated object vda.o
>> > isn't. Since it depends on vda to be assembled, the vda stub itself
>> > doesn't seem to be present ever. So we're basically exposing a header for
>> > functions we can never link against.
>> >
>> > So should I somehow fix VDA while dropping it by providing a stub that was
>> > never present?
>> >
>>
>> vda is autodetected so a "naive" build would have it, so I would argue
>> the ABI of such a "naive" build should probably remain constant?
>
> Just to be clear (sorry if I make you repeat yourself), we currently have
> the following:
>
> - Systems without VDA (that is, almost all of them) do not have access to
>   either VDA or the stub: for them, we are exposing a header with FFmpeg
>   symbols not accessible.
>
> - Systems with VDA have access to the VDA code (assuming it still build)
>
> What you suggest:
>
> - Both systems (with and without VDA) should now use the existing stub we
>   currently never build so the ABI for systems with VDA will be kept.
>
> Is that correct?
>
> If so, this means we will start introducing a deprecated API stub for VDA
> on all systems.
>
> Or should I start exposing the stub only for VDA systems, meaning I'll
> need to keep the VDA detection in the configure?
>

Obivously including the stub everywhere is much easier and far saner,
does it really harm to do that?

- Hendrik
Ronald S. Bultje Sept. 29, 2017, 6:25 p.m. UTC | #7
Hi,

On Fri, Sep 29, 2017 at 2:12 PM, Hendrik Leppkes <h.leppkes@gmail.com>
wrote:

> On Fri, Sep 29, 2017 at 7:08 PM, Clément Bœsch <u@pkh.me> wrote:
> > On Fri, Sep 29, 2017 at 06:15:57PM +0200, Hendrik Leppkes wrote:
> >> On Fri, Sep 29, 2017 at 2:40 PM, Clément Bœsch <u@pkh.me> wrote:
> >> > On Fri, Sep 29, 2017 at 11:38:42AM +0200, Hendrik Leppkes wrote:
> >> >> On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
> >> >> > From: Clément Bœsch <cboesch@gopro.com>
> >> >> >
> >> >> > Deprecated (aka removed) in OSX 10.11, and we have a replacement
> for it
> >> >> > (VideoToolbox).
> >> >> > ---
> >> >> > Changes since RFC: rebase, ifdefery depreciation dance for the pix
> fmt,
> >> >> > Changelog entry.
> >> >> >
> >> >>
> >> >> vda.h is an installed header with public API in it, removing it
> >> >> entirely would be an API and ABI break.
> >> >>
> >> >
> >> > vda.h may be exposed unconditionally, but its associated object vda.o
> >> > isn't. Since it depends on vda to be assembled, the vda stub itself
> >> > doesn't seem to be present ever. So we're basically exposing a header
> for
> >> > functions we can never link against.
> >> >
> >> > So should I somehow fix VDA while dropping it by providing a stub
> that was
> >> > never present?
> >> >
> >>
> >> vda is autodetected so a "naive" build would have it, so I would argue
> >> the ABI of such a "naive" build should probably remain constant?
> >
> > Just to be clear (sorry if I make you repeat yourself), we currently have
> > the following:
> >
> > - Systems without VDA (that is, almost all of them) do not have access to
> >   either VDA or the stub: for them, we are exposing a header with FFmpeg
> >   symbols not accessible.
> >
> > - Systems with VDA have access to the VDA code (assuming it still build)
> >
> > What you suggest:
> >
> > - Both systems (with and without VDA) should now use the existing stub we
> >   currently never build so the ABI for systems with VDA will be kept.
> >
> > Is that correct?
> >
> > If so, this means we will start introducing a deprecated API stub for VDA
> > on all systems.
> >
> > Or should I start exposing the stub only for VDA systems, meaning I'll
> > need to keep the VDA detection in the configure?
> >
>
> Obivously including the stub everywhere is much easier and far saner,
> does it really harm to do that?


I don't think it's reasonable to ask people to fix a feature if all they
want to do is deprecate and remove it.

Ronald
Clément Bœsch Sept. 29, 2017, 6:39 p.m. UTC | #8
On Fri, Sep 29, 2017 at 08:12:14PM +0200, Hendrik Leppkes wrote:
[...]
> > Just to be clear (sorry if I make you repeat yourself), we currently have
> > the following:
> >
> > - Systems without VDA (that is, almost all of them) do not have access to
> >   either VDA or the stub: for them, we are exposing a header with FFmpeg
> >   symbols not accessible.
> >
> > - Systems with VDA have access to the VDA code (assuming it still build)
> >
> > What you suggest:
> >
> > - Both systems (with and without VDA) should now use the existing stub we
> >   currently never build so the ABI for systems with VDA will be kept.
> >
> > Is that correct?
> >
> > If so, this means we will start introducing a deprecated API stub for VDA
> > on all systems.
> >
> > Or should I start exposing the stub only for VDA systems, meaning I'll
> > need to keep the VDA detection in the configure?
> >
> 
> Obivously including the stub everywhere is much easier and far saner,
> does it really harm to do that?
> 

It's just a bit weird to actually introduce deprecated symbols that
weren't there in the first place.
Hendrik Leppkes Sept. 29, 2017, 7:37 p.m. UTC | #9
On Fri, Sep 29, 2017 at 8:25 PM, Ronald S. Bultje <rsbultje@gmail.com> wrote:
> Hi,
>
> On Fri, Sep 29, 2017 at 2:12 PM, Hendrik Leppkes <h.leppkes@gmail.com>
> wrote:
>
>> On Fri, Sep 29, 2017 at 7:08 PM, Clément Bœsch <u@pkh.me> wrote:
>> > On Fri, Sep 29, 2017 at 06:15:57PM +0200, Hendrik Leppkes wrote:
>> >> On Fri, Sep 29, 2017 at 2:40 PM, Clément Bœsch <u@pkh.me> wrote:
>> >> > On Fri, Sep 29, 2017 at 11:38:42AM +0200, Hendrik Leppkes wrote:
>> >> >> On Fri, Sep 29, 2017 at 11:11 AM, Clément Bœsch <u@pkh.me> wrote:
>> >> >> > From: Clément Bœsch <cboesch@gopro.com>
>> >> >> >
>> >> >> > Deprecated (aka removed) in OSX 10.11, and we have a replacement
>> for it
>> >> >> > (VideoToolbox).
>> >> >> > ---
>> >> >> > Changes since RFC: rebase, ifdefery depreciation dance for the pix
>> fmt,
>> >> >> > Changelog entry.
>> >> >> >
>> >> >>
>> >> >> vda.h is an installed header with public API in it, removing it
>> >> >> entirely would be an API and ABI break.
>> >> >>
>> >> >
>> >> > vda.h may be exposed unconditionally, but its associated object vda.o
>> >> > isn't. Since it depends on vda to be assembled, the vda stub itself
>> >> > doesn't seem to be present ever. So we're basically exposing a header
>> for
>> >> > functions we can never link against.
>> >> >
>> >> > So should I somehow fix VDA while dropping it by providing a stub
>> that was
>> >> > never present?
>> >> >
>> >>
>> >> vda is autodetected so a "naive" build would have it, so I would argue
>> >> the ABI of such a "naive" build should probably remain constant?
>> >
>> > Just to be clear (sorry if I make you repeat yourself), we currently have
>> > the following:
>> >
>> > - Systems without VDA (that is, almost all of them) do not have access to
>> >   either VDA or the stub: for them, we are exposing a header with FFmpeg
>> >   symbols not accessible.
>> >
>> > - Systems with VDA have access to the VDA code (assuming it still build)
>> >
>> > What you suggest:
>> >
>> > - Both systems (with and without VDA) should now use the existing stub we
>> >   currently never build so the ABI for systems with VDA will be kept.
>> >
>> > Is that correct?
>> >
>> > If so, this means we will start introducing a deprecated API stub for VDA
>> > on all systems.
>> >
>> > Or should I start exposing the stub only for VDA systems, meaning I'll
>> > need to keep the VDA detection in the configure?
>> >
>>
>> Obivously including the stub everywhere is much easier and far saner,
>> does it really harm to do that?
>
>
> I don't think it's reasonable to ask people to fix a feature if all they
> want to do is deprecate and remove it.
>

Its not exactly any effort, however.

- Hendrik
Hendrik Leppkes Sept. 29, 2017, 9:56 p.m. UTC | #10
On Fri, Sep 29, 2017 at 8:39 PM, Clément Bœsch <u@pkh.me> wrote:
> On Fri, Sep 29, 2017 at 08:12:14PM +0200, Hendrik Leppkes wrote:
> [...]
>> > Just to be clear (sorry if I make you repeat yourself), we currently have
>> > the following:
>> >
>> > - Systems without VDA (that is, almost all of them) do not have access to
>> >   either VDA or the stub: for them, we are exposing a header with FFmpeg
>> >   symbols not accessible.
>> >
>> > - Systems with VDA have access to the VDA code (assuming it still build)
>> >
>> > What you suggest:
>> >
>> > - Both systems (with and without VDA) should now use the existing stub we
>> >   currently never build so the ABI for systems with VDA will be kept.
>> >
>> > Is that correct?
>> >
>> > If so, this means we will start introducing a deprecated API stub for VDA
>> > on all systems.
>> >
>> > Or should I start exposing the stub only for VDA systems, meaning I'll
>> > need to keep the VDA detection in the configure?
>> >
>>
>> Obivously including the stub everywhere is much easier and far saner,
>> does it really harm to do that?
>>
>
> It's just a bit weird to actually introduce deprecated symbols that
> weren't there in the first place.
>

Since at least BBB was slightly confused by my comments, just to clarfiy:
I don't really care how its done, but the ABI should remain intact. If
I do a simple build on mac today with ./configure && make and it
includes vda symbols, then so it should afterwards, even if they are
non-functional. How thats done, I don't mind.

- Hendrik
James Almer Sept. 29, 2017, 9:59 p.m. UTC | #11
On 9/29/2017 6:56 PM, Hendrik Leppkes wrote:
> On Fri, Sep 29, 2017 at 8:39 PM, Clément Bœsch <u@pkh.me> wrote:
>> On Fri, Sep 29, 2017 at 08:12:14PM +0200, Hendrik Leppkes wrote:
>> [...]
>>>> Just to be clear (sorry if I make you repeat yourself), we currently have
>>>> the following:
>>>>
>>>> - Systems without VDA (that is, almost all of them) do not have access to
>>>>   either VDA or the stub: for them, we are exposing a header with FFmpeg
>>>>   symbols not accessible.
>>>>
>>>> - Systems with VDA have access to the VDA code (assuming it still build)
>>>>
>>>> What you suggest:
>>>>
>>>> - Both systems (with and without VDA) should now use the existing stub we
>>>>   currently never build so the ABI for systems with VDA will be kept.
>>>>
>>>> Is that correct?
>>>>
>>>> If so, this means we will start introducing a deprecated API stub for VDA
>>>> on all systems.
>>>>
>>>> Or should I start exposing the stub only for VDA systems, meaning I'll
>>>> need to keep the VDA detection in the configure?
>>>>
>>>
>>> Obivously including the stub everywhere is much easier and far saner,
>>> does it really harm to do that?
>>>
>>
>> It's just a bit weird to actually introduce deprecated symbols that
>> weren't there in the first place.
>>
> 
> Since at least BBB was slightly confused by my comments, just to clarfiy:
> I don't really care how its done, but the ABI should remain intact. If
> I do a simple build on mac today with ./configure && make and it
> includes vda symbols, then so it should afterwards, even if they are
> non-functional. How thats done, I don't mind.

Then IMO we should wait until the major bump (Which is not too far
away). Leaving a stub object for the symbols and configure clutter
should be avoided.
Clément Bœsch Oct. 23, 2017, 9:57 a.m. UTC | #12
On Fri, Sep 29, 2017 at 06:59:56PM -0300, James Almer wrote:
[...]
> Then IMO we should wait until the major bump (Which is not too far
> away). Leaving a stub object for the symbols and configure clutter
> should be avoided.

Patch applied.

Thanks
diff mbox

Patch

diff --git a/Changelog b/Changelog
index c64cef4c89..10ac42f0ef 100644
--- a/Changelog
+++ b/Changelog
@@ -51,6 +51,7 @@  version <next>:
 - CUDA thumbnail filter
 - V4L2 mem2mem HW assisted codecs
 - Rockchip MPP hardware decoding
+- VDA dropped (use VideoToolbox instead)
 
 
 version 3.3:
diff --git a/MAINTAINERS b/MAINTAINERS
index 77f48b984b..8ea0568bf0 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -244,7 +244,6 @@  Codecs:
   txd.c                                 Ivo van Poorten
   vc2*                                  Rostislav Pehlivanov
   vcr1.c                                Michael Niedermayer
-  vda_h264_dec.c                        Xidorn Quan
   videotoolboxenc.c                     Rick Kern
   vima.c                                Paul B Mahol
   vorbisdec.c                           Denes Balatoni, David Conrad
diff --git a/Makefile b/Makefile
index e4eb050226..667d58ceac 100644
--- a/Makefile
+++ b/Makefile
@@ -34,9 +34,6 @@  $(foreach prog,$(AVBASENAMES),$(eval OBJS-$(prog)-$(CONFIG_OPENCL) += cmdutils_o
 OBJS-ffmpeg                   += ffmpeg_opt.o ffmpeg_filter.o ffmpeg_hw.o
 OBJS-ffmpeg-$(CONFIG_VIDEOTOOLBOX) += ffmpeg_videotoolbox.o
 OBJS-ffmpeg-$(CONFIG_LIBMFX)  += ffmpeg_qsv.o
-ifndef CONFIG_VIDEOTOOLBOX
-OBJS-ffmpeg-$(CONFIG_VDA)     += ffmpeg_videotoolbox.o
-endif
 OBJS-ffmpeg-$(CONFIG_CUVID)   += ffmpeg_cuvid.o
 OBJS-ffserver                 += ffserver_config.o
 
diff --git a/configure b/configure
index 8e4775be8c..4a4e7c7d70 100755
--- a/configure
+++ b/configure
@@ -318,7 +318,6 @@  External library support:
   --enable-omx-rpi         enable OpenMAX IL code for Raspberry Pi [no]
   --enable-rkmpp           enable Rockchip Media Process Platform code [no]
   --disable-vaapi          disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
-  --disable-vda            disable Apple Video Decode Acceleration code [autodetect]
   --disable-vdpau          disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
   --disable-videotoolbox   disable VideoToolbox code [autodetect]
 
@@ -1649,7 +1648,6 @@  HWACCEL_AUTODETECT_LIBRARY_LIST="
     dxva2
     nvenc
     vaapi
-    vda
     vdpau
     videotoolbox
     v4l2_m2m
@@ -2650,10 +2648,6 @@  cuvid_deps="cuda"
 d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder ID3D11VideoContext"
 dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32"
 dxva2_extralibs="-luser32"
-vda_framework_deps="VideoDecodeAcceleration_VDADecoder_h blocks_extension"
-vda_framework_extralibs="-framework VideoDecodeAcceleration"
-vda_deps="vda_framework pthreads"
-vda_extralibs="-framework CoreFoundation -framework QuartzCore"
 videotoolbox_hwaccel_deps="videotoolbox pthreads"
 videotoolbox_hwaccel_extralibs="-framework QuartzCore"
 xvmc_deps="X11_extensions_XvMClib_h"
@@ -2675,10 +2669,6 @@  h264_mmal_hwaccel_deps="mmal"
 h264_qsv_hwaccel_deps="libmfx"
 h264_vaapi_hwaccel_deps="vaapi"
 h264_vaapi_hwaccel_select="h264_decoder"
-h264_vda_hwaccel_deps="vda"
-h264_vda_hwaccel_select="h264_decoder"
-h264_vda_old_hwaccel_deps="vda"
-h264_vda_old_hwaccel_select="h264_decoder"
 h264_vdpau_hwaccel_deps="vdpau"
 h264_vdpau_hwaccel_select="h264_decoder"
 h264_videotoolbox_hwaccel_deps="videotoolbox"
@@ -2813,8 +2803,6 @@  h264_rkmpp_decoder_deps="rkmpp"
 h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
 h264_vaapi_encoder_deps="VAEncPictureParameterBufferH264"
 h264_vaapi_encoder_select="vaapi_encode golomb"
-h264_vda_decoder_deps="vda"
-h264_vda_decoder_select="h264_decoder"
 h264_vdpau_decoder_deps="vdpau"
 h264_vdpau_decoder_select="h264_decoder"
 h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
@@ -2995,7 +2983,6 @@  libxvid_encoder_deps="libxvid"
 libzvbi_teletext_decoder_deps="libzvbi"
 videotoolbox_extralibs="-framework CoreFoundation -framework VideoToolbox -framework CoreMedia -framework CoreVideo"
 videotoolbox_encoder_deps="videotoolbox VTCompressionSessionPrepareToEncodeFrames"
-videotoolbox_encoder_suggest="vda_framework"
 
 # demuxers / muxers
 ac3_demuxer_select="ac3_parser"
@@ -5791,7 +5778,6 @@  check_header sys/un.h
 check_header termios.h
 check_header unistd.h
 check_header valgrind/valgrind.h
-check_header VideoDecodeAcceleration/VDADecoder.h
 check_func_headers VideoToolbox/VTCompressionSession.h VTCompressionSessionPrepareToEncodeFrames -framework VideoToolbox
 check_header windows.h
 check_header X11/extensions/XvMClib.h
diff --git a/ffmpeg.h b/ffmpeg.h
index d2deb432b7..1811f42a76 100644
--- a/ffmpeg.h
+++ b/ffmpeg.h
@@ -63,7 +63,6 @@  enum HWAccelID {
     HWACCEL_AUTO,
     HWACCEL_VDPAU,
     HWACCEL_DXVA2,
-    HWACCEL_VDA,
     HWACCEL_VIDEOTOOLBOX,
     HWACCEL_QSV,
     HWACCEL_VAAPI,
@@ -662,7 +661,6 @@  int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame);
 
 int ffmpeg_parse_options(int argc, char **argv);
 
-int vda_init(AVCodecContext *s);
 int videotoolbox_init(AVCodecContext *s);
 int qsv_init(AVCodecContext *s);
 int cuvid_init(AVCodecContext *s);
diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
index 100fa76e46..2b2303e45c 100644
--- a/ffmpeg_opt.c
+++ b/ffmpeg_opt.c
@@ -78,10 +78,6 @@  const HWAccel hwaccels[] = {
     { "dxva2", hwaccel_decode_init, HWACCEL_DXVA2, AV_PIX_FMT_DXVA2_VLD,
       AV_HWDEVICE_TYPE_DXVA2 },
 #endif
-#if CONFIG_VDA
-    { "vda",   videotoolbox_init,   HWACCEL_VDA,   AV_PIX_FMT_VDA,
-      AV_HWDEVICE_TYPE_NONE },
-#endif
 #if CONFIG_VIDEOTOOLBOX
     { "videotoolbox",   videotoolbox_init,   HWACCEL_VIDEOTOOLBOX,   AV_PIX_FMT_VIDEOTOOLBOX,
       AV_HWDEVICE_TYPE_NONE },
@@ -3632,7 +3628,7 @@  const OptionDef options[] = {
     { "hwaccel_output_format", OPT_VIDEO | OPT_STRING | HAS_ARG | OPT_EXPERT |
                           OPT_SPEC | OPT_INPUT,                                  { .off = OFFSET(hwaccel_output_formats) },
         "select output format used with HW accelerated decoding", "format" },
-#if CONFIG_VDA || CONFIG_VIDEOTOOLBOX
+#if CONFIG_VIDEOTOOLBOX
     { "videotoolbox_pixfmt", HAS_ARG | OPT_STRING | OPT_EXPERT, { &videotoolbox_pixfmt}, "" },
 #endif
     { "hwaccels",         OPT_EXIT,                                              { .func_arg = show_hwaccels },
diff --git a/ffmpeg_videotoolbox.c b/ffmpeg_videotoolbox.c
index e9039654b9..b820aec017 100644
--- a/ffmpeg_videotoolbox.c
+++ b/ffmpeg_videotoolbox.c
@@ -23,12 +23,7 @@ 
 #endif
 
 #include "libavcodec/avcodec.h"
-#if CONFIG_VDA
-#  include "libavcodec/vda.h"
-#endif
-#if CONFIG_VIDEOTOOLBOX
-#  include "libavcodec/videotoolbox.h"
-#endif
+#include "libavcodec/videotoolbox.h"
 #include "libavutil/imgutils.h"
 #include "ffmpeg.h"
 
@@ -114,15 +109,7 @@  static void videotoolbox_uninit(AVCodecContext *s)
 
     av_frame_free(&vt->tmp_frame);
 
-    if (ist->hwaccel_id == HWACCEL_VIDEOTOOLBOX) {
-#if CONFIG_VIDEOTOOLBOX
-        av_videotoolbox_default_free(s);
-#endif
-    } else {
-#if CONFIG_VDA
-        av_vda_default_free(s);
-#endif
-    }
+    av_videotoolbox_default_free(s);
     av_freep(&ist->hwaccel_ctx);
 }
 
@@ -147,8 +134,7 @@  int videotoolbox_init(AVCodecContext *s)
         goto fail;
     }
 
-    if (ist->hwaccel_id == HWACCEL_VIDEOTOOLBOX) {
-#if CONFIG_VIDEOTOOLBOX
+    // TODO: reindent
         if (!videotoolbox_pixfmt) {
             ret = av_videotoolbox_default_init(s);
         } else {
@@ -166,31 +152,8 @@  int videotoolbox_init(AVCodecContext *s)
             ret = av_videotoolbox_default_init2(s, vtctx);
             CFRelease(pixfmt_str);
         }
-#endif
-    } else {
-#if CONFIG_VDA
-        if (!videotoolbox_pixfmt) {
-            ret = av_vda_default_init(s);
-        } else {
-            AVVDAContext *vdactx = av_vda_alloc_context();
-            CFStringRef pixfmt_str = CFStringCreateWithCString(kCFAllocatorDefault,
-                                                               videotoolbox_pixfmt,
-                                                               kCFStringEncodingUTF8);
-#if HAVE_UTGETOSTYPEFROMSTRING
-            vdactx->cv_pix_fmt_type = UTGetOSTypeFromString(pixfmt_str);
-#else
-            av_log(s, loglevel, "UTGetOSTypeFromString() is not available "
-                   "on this platform, %s pixel format can not be honored from "
-                   "the command line\n", videotoolbox_pixfmt);
-#endif
-            ret = av_vda_default_init2(s, vdactx);
-            CFRelease(pixfmt_str);
-        }
-#endif
-    }
     if (ret < 0) {
-        av_log(NULL, loglevel,
-               "Error creating %s decoder.\n", ist->hwaccel_id == HWACCEL_VIDEOTOOLBOX ? "Videotoolbox" : "VDA");
+        av_log(NULL, loglevel, "Error creating Videotoolbox decoder.\n");
         goto fail;
     }
 
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index c4ec09b1c4..e3df464c76 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -12,7 +12,6 @@  HEADERS = avcodec.h                                                     \
           mediacodec.h                                                  \
           qsv.h                                                         \
           vaapi.h                                                       \
-          vda.h                                                         \
           vdpau.h                                                       \
           version.h                                                     \
           videotoolbox.h                                                \
@@ -337,7 +336,6 @@  OBJS-$(CONFIG_H264_MMAL_DECODER)       += mmaldec.o
 OBJS-$(CONFIG_H264_NVENC_ENCODER)      += nvenc_h264.o
 OBJS-$(CONFIG_NVENC_ENCODER)           += nvenc_h264.o
 OBJS-$(CONFIG_NVENC_H264_ENCODER)      += nvenc_h264.o
-OBJS-$(CONFIG_H264_VDA_DECODER)        += vda_h264_dec.o
 OBJS-$(CONFIG_H264_OMX_ENCODER)        += omx.o
 OBJS-$(CONFIG_H264_QSV_DECODER)        += qsvdec_h2645.o
 OBJS-$(CONFIG_H264_QSV_ENCODER)        += qsvenc_h264.o
@@ -823,7 +821,6 @@  OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER)       += adpcmenc.o adpcm_data.o
 OBJS-$(CONFIG_D3D11VA)                    += dxva2.o
 OBJS-$(CONFIG_DXVA2)                      += dxva2.o
 OBJS-$(CONFIG_VAAPI)                      += vaapi_decode.o
-OBJS-$(CONFIG_VDA)                        += vda.o videotoolbox.o
 OBJS-$(CONFIG_VIDEOTOOLBOX)               += videotoolbox.o
 OBJS-$(CONFIG_VDPAU)                      += vdpau.o
 
@@ -833,7 +830,6 @@  OBJS-$(CONFIG_H264_D3D11VA_HWACCEL)       += dxva2_h264.o
 OBJS-$(CONFIG_H264_DXVA2_HWACCEL)         += dxva2_h264.o
 OBJS-$(CONFIG_H264_QSV_HWACCEL)           += qsvdec_h2645.o
 OBJS-$(CONFIG_H264_VAAPI_HWACCEL)         += vaapi_h264.o
-OBJS-$(CONFIG_H264_VDA_HWACCEL)           += vda_h264.o
 OBJS-$(CONFIG_H264_VDPAU_HWACCEL)         += vdpau_h264.o
 OBJS-$(CONFIG_H264_VIDEOTOOLBOX_HWACCEL)  += videotoolbox.o
 OBJS-$(CONFIG_HEVC_D3D11VA_HWACCEL)       += dxva2_hevc.o
@@ -1060,9 +1056,8 @@  SKIPHEADERS-$(CONFIG_QSVDEC)           += qsvdec.h
 SKIPHEADERS-$(CONFIG_QSVENC)           += qsvenc.h
 SKIPHEADERS-$(CONFIG_XVMC)             += xvmc.h
 SKIPHEADERS-$(CONFIG_VAAPI)            += vaapi_decode.h vaapi_encode.h
-SKIPHEADERS-$(CONFIG_VDA)              += vda.h vda_vt_internal.h
 SKIPHEADERS-$(CONFIG_VDPAU)            += vdpau.h vdpau_internal.h
-SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX)     += videotoolbox.h vda_vt_internal.h
+SKIPHEADERS-$(CONFIG_VIDEOTOOLBOX)     += videotoolbox.h vt_internal.h
 SKIPHEADERS-$(CONFIG_V4L2_M2M)         += v4l2_buffers.h v4l2_context.h v4l2_m2m.h
 
 TESTPROGS = avpacket                                                    \
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 4f34312e67..60b66d46b9 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -72,8 +72,6 @@  static void register_all(void)
     REGISTER_HWACCEL(H264_MMAL,         h264_mmal);
     REGISTER_HWACCEL(H264_QSV,          h264_qsv);
     REGISTER_HWACCEL(H264_VAAPI,        h264_vaapi);
-    REGISTER_HWACCEL(H264_VDA,          h264_vda);
-    REGISTER_HWACCEL(H264_VDA_OLD,      h264_vda_old);
     REGISTER_HWACCEL(H264_VDPAU,        h264_vdpau);
     REGISTER_HWACCEL(H264_VIDEOTOOLBOX, h264_videotoolbox);
     REGISTER_HWACCEL(HEVC_CUVID,        hevc_cuvid);
@@ -217,7 +215,6 @@  static void register_all(void)
     REGISTER_DECODER(H264_MMAL,         h264_mmal);
     REGISTER_DECODER(H264_QSV,          h264_qsv);
     REGISTER_DECODER(H264_RKMPP,        h264_rkmpp);
-    REGISTER_DECODER(H264_VDA,          h264_vda);
 #if FF_API_VDPAU
     REGISTER_DECODER(H264_VDPAU,        h264_vdpau);
 #endif
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 2577edd8a6..be62f33a28 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -759,7 +759,6 @@  static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
 #define HWACCEL_MAX (CONFIG_H264_DXVA2_HWACCEL + \
                      (CONFIG_H264_D3D11VA_HWACCEL * 2) + \
                      CONFIG_H264_VAAPI_HWACCEL + \
-                     (CONFIG_H264_VDA_HWACCEL * 2) + \
                      CONFIG_H264_VIDEOTOOLBOX_HWACCEL + \
                      CONFIG_H264_VDPAU_HWACCEL)
     enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmt = pix_fmts;
@@ -838,10 +837,6 @@  static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
 #if CONFIG_H264_VAAPI_HWACCEL
             *fmt++ = AV_PIX_FMT_VAAPI;
 #endif
-#if CONFIG_H264_VDA_HWACCEL
-            *fmt++ = AV_PIX_FMT_VDA_VLD;
-            *fmt++ = AV_PIX_FMT_VDA;
-#endif
 #if CONFIG_H264_VIDEOTOOLBOX_HWACCEL
             *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX;
 #endif
diff --git a/libavcodec/vda.c b/libavcodec/vda.c
deleted file mode 100644
index 819ae030b0..0000000000
--- a/libavcodec/vda.c
+++ /dev/null
@@ -1,84 +0,0 @@ 
-/*
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-
-#include "libavutil/mem.h"
-
-#include "vda.h"
-#include "vda_vt_internal.h"
-
-#if CONFIG_H264_VDA_HWACCEL
-AVVDAContext *av_vda_alloc_context(void)
-{
-    AVVDAContext *ret = av_mallocz(sizeof(*ret));
-
-    if (ret) {
-        ret->output_callback = ff_vda_output_callback;
-        ret->cv_pix_fmt_type = kCVPixelFormatType_422YpCbCr8;
-    }
-
-    return ret;
-}
-
-int av_vda_default_init(AVCodecContext *avctx)
-{
-    return av_vda_default_init2(avctx, NULL);
-}
-
-int av_vda_default_init2(AVCodecContext *avctx, AVVDAContext *vdactx)
-{
-    avctx->hwaccel_context = vdactx ?: av_vda_alloc_context();
-    if (!avctx->hwaccel_context)
-        return AVERROR(ENOMEM);
-    return ff_vda_default_init(avctx);
-}
-
-void av_vda_default_free(AVCodecContext *avctx)
-{
-    ff_vda_default_free(avctx);
-    av_freep(&avctx->hwaccel_context);
-}
-
-void ff_vda_default_free(AVCodecContext *avctx)
-{
-    AVVDAContext *vda = avctx->hwaccel_context;
-    if (vda && vda->decoder)
-        VDADecoderDestroy(vda->decoder);
-}
-
-#else
-AVVDAContext *av_vda_alloc_context(void)
-{
-    return NULL;
-}
-
-int av_vda_default_init(AVCodecContext *avctx)
-{
-    return AVERROR(ENOSYS);
-}
-
-int av_vda_default_init2(AVCodecContext *avctx, AVVDAContext *vdactx)
-{
-    return AVERROR(ENOSYS);
-}
-
-void av_vda_default_free(AVCodecContext *ctx)
-{
-}
-#endif
diff --git a/libavcodec/vda.h b/libavcodec/vda.h
deleted file mode 100644
index bde14e31d7..0000000000
--- a/libavcodec/vda.h
+++ /dev/null
@@ -1,230 +0,0 @@ 
-/*
- * VDA HW acceleration
- *
- * copyright (c) 2011 Sebastien Zwickert
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_VDA_H
-#define AVCODEC_VDA_H
-
-/**
- * @file
- * @ingroup lavc_codec_hwaccel_vda
- * Public libavcodec VDA header.
- */
-
-#include "libavcodec/avcodec.h"
-
-#include <stdint.h>
-
-// emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes
-// http://openradar.appspot.com/8026390
-#undef __GNUC_STDC_INLINE__
-
-#define Picture QuickdrawPicture
-#include <VideoDecodeAcceleration/VDADecoder.h>
-#undef Picture
-
-#include "libavcodec/version.h"
-
-// extra flags not defined in VDADecoder.h
-enum {
-    kVDADecodeInfo_Asynchronous = 1UL << 0,
-    kVDADecodeInfo_FrameDropped = 1UL << 1
-};
-
-/**
- * @defgroup lavc_codec_hwaccel_vda VDA
- * @ingroup lavc_codec_hwaccel
- *
- * @{
- */
-
-/**
- * This structure is used to provide the necessary configurations and data
- * to the VDA FFmpeg HWAccel implementation.
- *
- * The application must make it available as AVCodecContext.hwaccel_context.
- */
-struct vda_context {
-    /**
-     * VDA decoder object.
-     *
-     * - encoding: unused
-     * - decoding: Set/Unset by libavcodec.
-     */
-    VDADecoder          decoder;
-
-    /**
-     * The Core Video pixel buffer that contains the current image data.
-     *
-     * encoding: unused
-     * decoding: Set by libavcodec. Unset by user.
-     */
-    CVPixelBufferRef    cv_buffer;
-
-    /**
-     * Use the hardware decoder in synchronous mode.
-     *
-     * encoding: unused
-     * decoding: Set by user.
-     */
-    int                 use_sync_decoding;
-
-    /**
-     * The frame width.
-     *
-     * - encoding: unused
-     * - decoding: Set/Unset by user.
-     */
-    int                 width;
-
-    /**
-     * The frame height.
-     *
-     * - encoding: unused
-     * - decoding: Set/Unset by user.
-     */
-    int                 height;
-
-    /**
-     * The frame format.
-     *
-     * - encoding: unused
-     * - decoding: Set/Unset by user.
-     */
-    int                 format;
-
-    /**
-     * The pixel format for output image buffers.
-     *
-     * - encoding: unused
-     * - decoding: Set/Unset by user.
-     */
-    OSType              cv_pix_fmt_type;
-
-    /**
-     * unused
-     */
-    uint8_t             *priv_bitstream;
-
-    /**
-     * unused
-     */
-    int                 priv_bitstream_size;
-
-    /**
-     * unused
-     */
-    int                 priv_allocated_size;
-
-    /**
-     * Use av_buffer to manage buffer.
-     * When the flag is set, the CVPixelBuffers returned by the decoder will
-     * be released automatically, so you have to retain them if necessary.
-     * Not setting this flag may cause memory leak.
-     *
-     * encoding: unused
-     * decoding: Set by user.
-     */
-    int                 use_ref_buffer;
-};
-
-/** Create the video decoder. */
-int ff_vda_create_decoder(struct vda_context *vda_ctx,
-                          uint8_t *extradata,
-                          int extradata_size);
-
-/** Destroy the video decoder. */
-int ff_vda_destroy_decoder(struct vda_context *vda_ctx);
-
-/**
- * This struct holds all the information that needs to be passed
- * between the caller and libavcodec for initializing VDA decoding.
- * Its size is not a part of the public ABI, it must be allocated with
- * av_vda_alloc_context() and freed with av_free().
- */
-typedef struct AVVDAContext {
-    /**
-     * VDA decoder object. Created and freed by the caller.
-     */
-    VDADecoder decoder;
-
-    /**
-     * The output callback that must be passed to VDADecoderCreate.
-     * Set by av_vda_alloc_context().
-     */
-    VDADecoderOutputCallback output_callback;
-
-    /**
-     * CVPixelBuffer Format Type that VDA will use for decoded frames; set by
-     * the caller.
-     */
-    OSType cv_pix_fmt_type;
-} AVVDAContext;
-
-/**
- * Allocate and initialize a VDA context.
- *
- * This function should be called from the get_format() callback when the caller
- * selects the AV_PIX_FMT_VDA format. The caller must then create the decoder
- * object (using the output callback provided by libavcodec) that will be used
- * for VDA-accelerated decoding.
- *
- * When decoding with VDA is finished, the caller must destroy the decoder
- * object and free the VDA context using av_free().
- *
- * @return the newly allocated context or NULL on failure
- */
-AVVDAContext *av_vda_alloc_context(void);
-
-/**
- * This is a convenience function that creates and sets up the VDA context using
- * an internal implementation.
- *
- * @param avctx the corresponding codec context
- *
- * @return >= 0 on success, a negative AVERROR code on failure
- */
-int av_vda_default_init(AVCodecContext *avctx);
-
-/**
- * This is a convenience function that creates and sets up the VDA context using
- * an internal implementation.
- *
- * @param avctx the corresponding codec context
- * @param vdactx the VDA context to use
- *
- * @return >= 0 on success, a negative AVERROR code on failure
- */
-int av_vda_default_init2(AVCodecContext *avctx, AVVDAContext *vdactx);
-
-/**
- * This function must be called to free the VDA context initialized with
- * av_vda_default_init().
- *
- * @param avctx the corresponding codec context
- */
-void av_vda_default_free(AVCodecContext *avctx);
-
-/**
- * @}
- */
-
-#endif /* AVCODEC_VDA_H */
diff --git a/libavcodec/vda_h264.c b/libavcodec/vda_h264.c
deleted file mode 100644
index 7b88ec7015..0000000000
--- a/libavcodec/vda_h264.c
+++ /dev/null
@@ -1,425 +0,0 @@ 
-/*
- * VDA H264 HW acceleration.
- *
- * copyright (c) 2011 Sebastien Zwickert
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <CoreFoundation/CFDictionary.h>
-#include <CoreFoundation/CFNumber.h>
-#include <CoreFoundation/CFData.h>
-
-#include "vda.h"
-#include "libavutil/avutil.h"
-#include "h264dec.h"
-
-struct vda_buffer {
-    CVPixelBufferRef cv_buffer;
-};
-#include "internal.h"
-#include "vda_vt_internal.h"
-
-/* Decoder callback that adds the vda frame to the queue in display order. */
-static void vda_decoder_callback(void *vda_hw_ctx,
-                                 CFDictionaryRef user_info,
-                                 OSStatus status,
-                                 uint32_t infoFlags,
-                                 CVImageBufferRef image_buffer)
-{
-    struct vda_context *vda_ctx = vda_hw_ctx;
-
-    if (infoFlags & kVDADecodeInfo_FrameDropped)
-        vda_ctx->cv_buffer = NULL;
-
-    if (!image_buffer)
-        return;
-
-    if (vda_ctx->cv_pix_fmt_type != CVPixelBufferGetPixelFormatType(image_buffer))
-        return;
-
-    vda_ctx->cv_buffer = CVPixelBufferRetain(image_buffer);
-}
-
-static int vda_sync_decode(VTContext *ctx, struct vda_context *vda_ctx)
-{
-    OSStatus status;
-    CFDataRef coded_frame;
-    uint32_t flush_flags = 1 << 0; ///< kVDADecoderFlush_emitFrames
-
-    coded_frame = CFDataCreate(kCFAllocatorDefault,
-                               ctx->bitstream,
-                               ctx->bitstream_size);
-
-    status = VDADecoderDecode(vda_ctx->decoder, 0, coded_frame, NULL);
-
-    if (kVDADecoderNoErr == status)
-        status = VDADecoderFlush(vda_ctx->decoder, flush_flags);
-
-    CFRelease(coded_frame);
-
-    return status;
-}
-
-
-static int vda_old_h264_start_frame(AVCodecContext *avctx,
-                                av_unused const uint8_t *buffer,
-                                av_unused uint32_t size)
-{
-    VTContext *vda = avctx->internal->hwaccel_priv_data;
-    struct vda_context *vda_ctx = avctx->hwaccel_context;
-
-    if (!vda_ctx->decoder)
-        return -1;
-
-    vda->bitstream_size = 0;
-
-    return 0;
-}
-
-static int vda_old_h264_decode_slice(AVCodecContext *avctx,
-                                 const uint8_t *buffer,
-                                 uint32_t size)
-{
-    VTContext *vda              = avctx->internal->hwaccel_priv_data;
-    struct vda_context *vda_ctx = avctx->hwaccel_context;
-    void *tmp;
-
-    if (!vda_ctx->decoder)
-        return -1;
-
-    tmp = av_fast_realloc(vda->bitstream,
-                          &vda->allocated_size,
-                          vda->bitstream_size + size + 4);
-    if (!tmp)
-        return AVERROR(ENOMEM);
-
-    vda->bitstream = tmp;
-
-    AV_WB32(vda->bitstream + vda->bitstream_size, size);
-    memcpy(vda->bitstream + vda->bitstream_size + 4, buffer, size);
-
-    vda->bitstream_size += size + 4;
-
-    return 0;
-}
-
-static void vda_h264_release_buffer(void *opaque, uint8_t *data)
-{
-    struct vda_buffer *context = opaque;
-    CVPixelBufferRelease(context->cv_buffer);
-    av_free(context);
-}
-
-static int vda_old_h264_end_frame(AVCodecContext *avctx)
-{
-    H264Context *h                      = avctx->priv_data;
-    VTContext *vda                      = avctx->internal->hwaccel_priv_data;
-    struct vda_context *vda_ctx         = avctx->hwaccel_context;
-    AVFrame *frame                      = h->cur_pic_ptr->f;
-    struct vda_buffer *context;
-    AVBufferRef *buffer;
-    int status;
-
-    if (!vda_ctx->decoder || !vda->bitstream)
-        return -1;
-
-    status = vda_sync_decode(vda, vda_ctx);
-    frame->data[3] = (void*)vda_ctx->cv_buffer;
-
-    if (status)
-        av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status);
-
-    if (!vda_ctx->use_ref_buffer || status)
-        return status;
-
-    context = av_mallocz(sizeof(*context));
-    buffer = av_buffer_create(NULL, 0, vda_h264_release_buffer, context, 0);
-    if (!context || !buffer) {
-        CVPixelBufferRelease(vda_ctx->cv_buffer);
-        av_free(context);
-        return -1;
-    }
-
-    context->cv_buffer = vda_ctx->cv_buffer;
-    frame->buf[3] = buffer;
-
-    return status;
-}
-
-int ff_vda_create_decoder(struct vda_context *vda_ctx,
-                          uint8_t *extradata,
-                          int extradata_size)
-{
-    OSStatus status;
-    CFNumberRef height;
-    CFNumberRef width;
-    CFNumberRef format;
-    CFDataRef avc_data;
-    CFMutableDictionaryRef config_info;
-    CFMutableDictionaryRef buffer_attributes;
-    CFMutableDictionaryRef io_surface_properties;
-    CFNumberRef cv_pix_fmt;
-
-    vda_ctx->priv_bitstream = NULL;
-    vda_ctx->priv_allocated_size = 0;
-
-    /* Each VCL NAL in the bitstream sent to the decoder
-     * is preceded by a 4 bytes length header.
-     * Change the avcC atom header if needed, to signal headers of 4 bytes. */
-    if (extradata_size >= 4 && (extradata[4] & 0x03) != 0x03) {
-        uint8_t *rw_extradata;
-
-        if (!(rw_extradata = av_malloc(extradata_size)))
-            return AVERROR(ENOMEM);
-
-        memcpy(rw_extradata, extradata, extradata_size);
-
-        rw_extradata[4] |= 0x03;
-
-        avc_data = CFDataCreate(kCFAllocatorDefault, rw_extradata, extradata_size);
-
-        av_freep(&rw_extradata);
-    } else {
-        avc_data = CFDataCreate(kCFAllocatorDefault, extradata, extradata_size);
-    }
-
-    config_info = CFDictionaryCreateMutable(kCFAllocatorDefault,
-                                            4,
-                                            &kCFTypeDictionaryKeyCallBacks,
-                                            &kCFTypeDictionaryValueCallBacks);
-
-    height   = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vda_ctx->height);
-    width    = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vda_ctx->width);
-    format   = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &vda_ctx->format);
-
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_Height, height);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_Width, width);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_SourceFormat, format);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_avcCData, avc_data);
-
-    buffer_attributes = CFDictionaryCreateMutable(kCFAllocatorDefault,
-                                                  2,
-                                                  &kCFTypeDictionaryKeyCallBacks,
-                                                  &kCFTypeDictionaryValueCallBacks);
-    io_surface_properties = CFDictionaryCreateMutable(kCFAllocatorDefault,
-                                                      0,
-                                                      &kCFTypeDictionaryKeyCallBacks,
-                                                      &kCFTypeDictionaryValueCallBacks);
-    cv_pix_fmt  = CFNumberCreate(kCFAllocatorDefault,
-                                 kCFNumberSInt32Type,
-                                 &vda_ctx->cv_pix_fmt_type);
-    CFDictionarySetValue(buffer_attributes,
-                         kCVPixelBufferPixelFormatTypeKey,
-                         cv_pix_fmt);
-    CFDictionarySetValue(buffer_attributes,
-                         kCVPixelBufferIOSurfacePropertiesKey,
-                         io_surface_properties);
-
-    status = VDADecoderCreate(config_info,
-                              buffer_attributes,
-                              (VDADecoderOutputCallback *)vda_decoder_callback,
-                              vda_ctx,
-                              &vda_ctx->decoder);
-
-    CFRelease(height);
-    CFRelease(width);
-    CFRelease(format);
-    CFRelease(avc_data);
-    CFRelease(config_info);
-    CFRelease(io_surface_properties);
-    CFRelease(cv_pix_fmt);
-    CFRelease(buffer_attributes);
-
-    return status;
-}
-
-int ff_vda_destroy_decoder(struct vda_context *vda_ctx)
-{
-    OSStatus status = kVDADecoderNoErr;
-
-    if (vda_ctx->decoder)
-        status = VDADecoderDestroy(vda_ctx->decoder);
-
-    return status;
-}
-
-AVHWAccel ff_h264_vda_old_hwaccel = {
-    .name           = "h264_vda",
-    .type           = AVMEDIA_TYPE_VIDEO,
-    .id             = AV_CODEC_ID_H264,
-    .pix_fmt        = AV_PIX_FMT_VDA_VLD,
-    .start_frame    = vda_old_h264_start_frame,
-    .decode_slice   = vda_old_h264_decode_slice,
-    .end_frame      = vda_old_h264_end_frame,
-    .uninit         = ff_videotoolbox_uninit,
-    .priv_data_size = sizeof(VTContext),
-};
-
-void ff_vda_output_callback(void *opaque,
-                            CFDictionaryRef user_info,
-                            OSStatus status,
-                            uint32_t infoFlags,
-                            CVImageBufferRef image_buffer)
-{
-    AVCodecContext *ctx = opaque;
-    VTContext *vda = ctx->internal->hwaccel_priv_data;
-
-
-    if (vda->frame) {
-        CVPixelBufferRelease(vda->frame);
-        vda->frame = NULL;
-    }
-
-    if (!image_buffer)
-        return;
-
-    vda->frame = CVPixelBufferRetain(image_buffer);
-}
-
-static int vda_h264_end_frame(AVCodecContext *avctx)
-{
-    H264Context *h        = avctx->priv_data;
-    VTContext *vda        = avctx->internal->hwaccel_priv_data;
-    AVVDAContext *vda_ctx = avctx->hwaccel_context;
-    AVFrame *frame        = h->cur_pic_ptr->f;
-    uint32_t flush_flags  = 1 << 0; ///< kVDADecoderFlush_emitFrames
-    CFDataRef coded_frame;
-    OSStatus status;
-
-    if (!vda->bitstream_size)
-        return AVERROR_INVALIDDATA;
-
-
-    coded_frame = CFDataCreate(kCFAllocatorDefault,
-                               vda->bitstream,
-                               vda->bitstream_size);
-
-    status = VDADecoderDecode(vda_ctx->decoder, 0, coded_frame, NULL);
-
-    if (status == kVDADecoderNoErr)
-        status = VDADecoderFlush(vda_ctx->decoder, flush_flags);
-
-    CFRelease(coded_frame);
-
-    if (!vda->frame)
-        return AVERROR_UNKNOWN;
-
-    if (status != kVDADecoderNoErr) {
-        av_log(avctx, AV_LOG_ERROR, "Failed to decode frame (%d)\n", status);
-        return AVERROR_UNKNOWN;
-    }
-
-    return ff_videotoolbox_buffer_create(vda, frame);
-}
-
-int ff_vda_default_init(AVCodecContext *avctx)
-{
-    AVVDAContext *vda_ctx = avctx->hwaccel_context;
-    OSStatus status = kVDADecoderNoErr;
-    CFNumberRef height;
-    CFNumberRef width;
-    CFNumberRef format;
-    CFDataRef avc_data;
-    CFMutableDictionaryRef config_info;
-    CFMutableDictionaryRef buffer_attributes;
-    CFMutableDictionaryRef io_surface_properties;
-    CFNumberRef cv_pix_fmt;
-    int32_t fmt = 'avc1', pix_fmt = vda_ctx->cv_pix_fmt_type;
-
-    // kCVPixelFormatType_420YpCbCr8Planar;
-
-    avc_data = ff_videotoolbox_avcc_extradata_create(avctx);
-
-    config_info = CFDictionaryCreateMutable(kCFAllocatorDefault,
-                                            4,
-                                            &kCFTypeDictionaryKeyCallBacks,
-                                            &kCFTypeDictionaryValueCallBacks);
-
-    height = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &avctx->height);
-    width  = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &avctx->width);
-    format = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &fmt);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_Height, height);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_Width, width);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_avcCData, avc_data);
-    CFDictionarySetValue(config_info, kVDADecoderConfiguration_SourceFormat, format);
-
-    buffer_attributes = CFDictionaryCreateMutable(kCFAllocatorDefault,
-                                                  2,
-                                                  &kCFTypeDictionaryKeyCallBacks,
-                                                  &kCFTypeDictionaryValueCallBacks);
-    io_surface_properties = CFDictionaryCreateMutable(kCFAllocatorDefault,
-                                                      0,
-                                                      &kCFTypeDictionaryKeyCallBacks,
-                                                      &kCFTypeDictionaryValueCallBacks);
-    cv_pix_fmt      = CFNumberCreate(kCFAllocatorDefault,
-                                     kCFNumberSInt32Type,
-                                     &pix_fmt);
-
-    CFDictionarySetValue(buffer_attributes,
-                         kCVPixelBufferPixelFormatTypeKey,
-                         cv_pix_fmt);
-    CFDictionarySetValue(buffer_attributes,
-                         kCVPixelBufferIOSurfacePropertiesKey,
-                         io_surface_properties);
-
-    status = VDADecoderCreate(config_info,
-                              buffer_attributes,
-                              (VDADecoderOutputCallback *)ff_vda_output_callback,
-                              avctx,
-                              &vda_ctx->decoder);
-
-    CFRelease(format);
-    CFRelease(height);
-    CFRelease(width);
-    CFRelease(avc_data);
-    CFRelease(config_info);
-    CFRelease(cv_pix_fmt);
-    CFRelease(io_surface_properties);
-    CFRelease(buffer_attributes);
-
-    if (status != kVDADecoderNoErr) {
-        av_log(avctx, AV_LOG_ERROR, "Cannot initialize VDA %d\n", status);
-    }
-
-    switch (status) {
-    case kVDADecoderHardwareNotSupportedErr:
-    case kVDADecoderFormatNotSupportedErr:
-        return AVERROR(ENOSYS);
-    case kVDADecoderConfigurationError:
-        return AVERROR(EINVAL);
-    case kVDADecoderDecoderFailedErr:
-        return AVERROR_INVALIDDATA;
-    case kVDADecoderNoErr:
-        return 0;
-    default:
-        return AVERROR_UNKNOWN;
-    }
-}
-
-AVHWAccel ff_h264_vda_hwaccel = {
-    .name           = "h264_vda",
-    .type           = AVMEDIA_TYPE_VIDEO,
-    .id             = AV_CODEC_ID_H264,
-    .pix_fmt        = AV_PIX_FMT_VDA,
-    .alloc_frame    = ff_videotoolbox_alloc_frame,
-    .start_frame    = ff_videotoolbox_h264_start_frame,
-    .decode_slice   = ff_videotoolbox_h264_decode_slice,
-    .end_frame      = vda_h264_end_frame,
-    .uninit         = ff_videotoolbox_uninit,
-    .priv_data_size = sizeof(VTContext),
-};
diff --git a/libavcodec/vda_h264_dec.c b/libavcodec/vda_h264_dec.c
deleted file mode 100644
index 972bd6bbd6..0000000000
--- a/libavcodec/vda_h264_dec.c
+++ /dev/null
@@ -1,263 +0,0 @@ 
-/*
- * Copyright (c) 2012, Xidorn Quan
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * H.264 decoder via VDA
- * @author Xidorn Quan <quanxunzhen@gmail.com>
- */
-
-#include <string.h>
-#include <CoreFoundation/CoreFoundation.h>
-
-#include "vda.h"
-#include "h264dec.h"
-#include "avcodec.h"
-
-#ifndef kCFCoreFoundationVersionNumber10_7
-#define kCFCoreFoundationVersionNumber10_7      635.00
-#endif
-
-extern AVCodec ff_h264_decoder, ff_h264_vda_decoder;
-
-static const enum AVPixelFormat vda_pixfmts_prior_10_7[] = {
-    AV_PIX_FMT_UYVY422,
-    AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_NONE
-};
-
-static const enum AVPixelFormat vda_pixfmts[] = {
-    AV_PIX_FMT_UYVY422,
-    AV_PIX_FMT_YUYV422,
-    AV_PIX_FMT_NV12,
-    AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_NONE
-};
-
-typedef struct {
-    H264Context h264ctx;
-    int h264_initialized;
-    struct vda_context vda_ctx;
-    enum AVPixelFormat pix_fmt;
-
-    /* for backing-up fields set by user.
-     * we have to gain full control of such fields here */
-    void *hwaccel_context;
-    enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
-    int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);
-} VDADecoderContext;
-
-static enum AVPixelFormat get_format(struct AVCodecContext *avctx,
-        const enum AVPixelFormat *fmt)
-{
-    return AV_PIX_FMT_VDA_VLD;
-}
-
-typedef struct {
-    CVPixelBufferRef cv_buffer;
-} VDABufferContext;
-
-static void release_buffer(void *opaque, uint8_t *data)
-{
-    VDABufferContext *context = opaque;
-    CVPixelBufferUnlockBaseAddress(context->cv_buffer, 0);
-    CVPixelBufferRelease(context->cv_buffer);
-    av_free(context);
-}
-
-static int get_buffer2(AVCodecContext *avctx, AVFrame *pic, int flag)
-{
-    VDABufferContext *context = av_mallocz(sizeof(VDABufferContext));
-    AVBufferRef *buffer = av_buffer_create(NULL, 0, release_buffer, context, 0);
-    if (!context || !buffer) {
-        av_free(context);
-        return AVERROR(ENOMEM);
-    }
-
-    pic->buf[0] = buffer;
-    pic->data[0] = (void *)1;
-    return 0;
-}
-
-static inline void set_context(AVCodecContext *avctx)
-{
-    VDADecoderContext *ctx = avctx->priv_data;
-    ctx->hwaccel_context = avctx->hwaccel_context;
-    avctx->hwaccel_context = &ctx->vda_ctx;
-    ctx->get_format = avctx->get_format;
-    avctx->get_format = get_format;
-    ctx->get_buffer2 = avctx->get_buffer2;
-    avctx->get_buffer2 = get_buffer2;
-}
-
-static inline void restore_context(AVCodecContext *avctx)
-{
-    VDADecoderContext *ctx = avctx->priv_data;
-    avctx->hwaccel_context = ctx->hwaccel_context;
-    avctx->get_format = ctx->get_format;
-    avctx->get_buffer2 = ctx->get_buffer2;
-}
-
-static int vdadec_decode(AVCodecContext *avctx,
-        void *data, int *got_frame, AVPacket *avpkt)
-{
-    VDADecoderContext *ctx = avctx->priv_data;
-    AVFrame *pic = data;
-    int ret;
-
-    set_context(avctx);
-    ret = ff_h264_decoder.decode(avctx, data, got_frame, avpkt);
-    restore_context(avctx);
-    if (*got_frame) {
-        AVBufferRef *buffer = pic->buf[0];
-        VDABufferContext *context = av_buffer_get_opaque(buffer);
-        CVPixelBufferRef cv_buffer = (CVPixelBufferRef)pic->data[3];
-
-        CVPixelBufferRetain(cv_buffer);
-        CVPixelBufferLockBaseAddress(cv_buffer, 0);
-        context->cv_buffer = cv_buffer;
-        pic->format = ctx->pix_fmt;
-        if (CVPixelBufferIsPlanar(cv_buffer)) {
-            int i, count = CVPixelBufferGetPlaneCount(cv_buffer);
-            av_assert0(count < 4);
-            for (i = 0; i < count; i++) {
-                pic->data[i] = CVPixelBufferGetBaseAddressOfPlane(cv_buffer, i);
-                pic->linesize[i] = CVPixelBufferGetBytesPerRowOfPlane(cv_buffer, i);
-            }
-        } else {
-            pic->data[0] = CVPixelBufferGetBaseAddress(cv_buffer);
-            pic->linesize[0] = CVPixelBufferGetBytesPerRow(cv_buffer);
-        }
-    }
-    avctx->pix_fmt = ctx->pix_fmt;
-
-    return ret;
-}
-
-static av_cold int vdadec_close(AVCodecContext *avctx)
-{
-    VDADecoderContext *ctx = avctx->priv_data;
-    /* release buffers and decoder */
-    ff_vda_destroy_decoder(&ctx->vda_ctx);
-    /* close H.264 decoder */
-    if (ctx->h264_initialized) {
-        set_context(avctx);
-        ff_h264_decoder.close(avctx);
-        restore_context(avctx);
-    }
-    return 0;
-}
-
-static av_cold int vdadec_init(AVCodecContext *avctx)
-{
-    VDADecoderContext *ctx = avctx->priv_data;
-    struct vda_context *vda_ctx = &ctx->vda_ctx;
-    OSStatus status;
-    int ret, i;
-
-    ctx->h264_initialized = 0;
-
-    /* init pix_fmts of codec */
-    if (!ff_h264_vda_decoder.pix_fmts) {
-        if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber10_7)
-            ff_h264_vda_decoder.pix_fmts = vda_pixfmts_prior_10_7;
-        else
-            ff_h264_vda_decoder.pix_fmts = vda_pixfmts;
-    }
-
-    /* init vda */
-    memset(vda_ctx, 0, sizeof(struct vda_context));
-    vda_ctx->width = avctx->width;
-    vda_ctx->height = avctx->height;
-    vda_ctx->format = 'avc1';
-    vda_ctx->use_sync_decoding = 1;
-    vda_ctx->use_ref_buffer = 1;
-    ctx->pix_fmt = avctx->get_format(avctx, avctx->codec->pix_fmts);
-    switch (ctx->pix_fmt) {
-    case AV_PIX_FMT_UYVY422:
-        vda_ctx->cv_pix_fmt_type = '2vuy';
-        break;
-    case AV_PIX_FMT_YUYV422:
-        vda_ctx->cv_pix_fmt_type = 'yuvs';
-        break;
-    case AV_PIX_FMT_NV12:
-        vda_ctx->cv_pix_fmt_type = '420v';
-        break;
-    case AV_PIX_FMT_YUV420P:
-        vda_ctx->cv_pix_fmt_type = 'y420';
-        break;
-    default:
-        av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format: %d\n", avctx->pix_fmt);
-        goto failed;
-    }
-    status = ff_vda_create_decoder(vda_ctx,
-                                   avctx->extradata, avctx->extradata_size);
-    if (status != kVDADecoderNoErr) {
-        av_log(avctx, AV_LOG_ERROR,
-                "Failed to init VDA decoder: %d.\n", status);
-        goto failed;
-    }
-
-    /* init H.264 decoder */
-    set_context(avctx);
-    ret = ff_h264_decoder.init(avctx);
-    restore_context(avctx);
-    if (ret < 0) {
-        av_log(avctx, AV_LOG_ERROR, "Failed to open H.264 decoder.\n");
-        goto failed;
-    }
-    ctx->h264_initialized = 1;
-
-    for (i = 0; i < MAX_SPS_COUNT; i++) {
-        const SPS *sps = ctx->h264ctx.ps.sps_list[i] ? (const SPS*)ctx->h264ctx.ps.sps_list[i]->data : NULL;
-        if (sps && (sps->bit_depth_luma != 8 ||
-                sps->chroma_format_idc == 2 ||
-                sps->chroma_format_idc == 3)) {
-            av_log(avctx, AV_LOG_ERROR, "Format is not supported.\n");
-            goto failed;
-        }
-    }
-
-    return 0;
-
-failed:
-    vdadec_close(avctx);
-    return -1;
-}
-
-static void vdadec_flush(AVCodecContext *avctx)
-{
-    set_context(avctx);
-    ff_h264_decoder.flush(avctx);
-    restore_context(avctx);
-}
-
-AVCodec ff_h264_vda_decoder = {
-    .name           = "h264_vda",
-    .type           = AVMEDIA_TYPE_VIDEO,
-    .id             = AV_CODEC_ID_H264,
-    .priv_data_size = sizeof(VDADecoderContext),
-    .init           = vdadec_init,
-    .close          = vdadec_close,
-    .decode         = vdadec_decode,
-    .capabilities   = AV_CODEC_CAP_DELAY,
-    .flush          = vdadec_flush,
-    .long_name      = NULL_IF_CONFIG_SMALL("H.264 (VDA acceleration)"),
-};
diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c
index ec8b6d885c..3bdc1f7d1f 100644
--- a/libavcodec/videotoolbox.c
+++ b/libavcodec/videotoolbox.c
@@ -21,13 +21,9 @@ 
  */
 
 #include "config.h"
-#if CONFIG_VIDEOTOOLBOX
-#  include "videotoolbox.h"
-#  include "libavutil/hwcontext_videotoolbox.h"
-#else
-#  include "vda.h"
-#endif
-#include "vda_vt_internal.h"
+#include "videotoolbox.h"
+#include "libavutil/hwcontext_videotoolbox.h"
+#include "vt_internal.h"
 #include "libavutil/avutil.h"
 #include "libavutil/hwcontext.h"
 #include "bytestream.h"
diff --git a/libavcodec/vda_vt_internal.h b/libavcodec/vt_internal.h
similarity index 82%
rename from libavcodec/vda_vt_internal.h
rename to libavcodec/vt_internal.h
index 326a60a695..607dd7a6d0 100644
--- a/libavcodec/vda_vt_internal.h
+++ b/libavcodec/vt_internal.h
@@ -16,17 +16,8 @@ 
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_VDA_VT_INTERNAL_H
-#define AVCODEC_VDA_VT_INTERNAL_H
-
-void ff_vda_output_callback(void *vda_hw_ctx,
-                            CFDictionaryRef user_info,
-                            OSStatus status,
-                            uint32_t infoFlags,
-                            CVImageBufferRef image_buffer);
-
-int ff_vda_default_init(AVCodecContext *avctx);
-void ff_vda_default_free(AVCodecContext *avctx);
+#ifndef AVCODEC_VT_INTERNAL_H
+#define AVCODEC_VT_INTERNAL_H
 
 typedef struct VTContext {
     // The current bitstream buffer.
@@ -60,4 +51,5 @@  int ff_videotoolbox_h264_decode_slice(AVCodecContext *avctx,
                                       uint32_t size);
 CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx);
 CFDataRef ff_videotoolbox_hvcc_extradata_create(AVCodecContext *avctx);
-#endif /* AVCODEC_VDA_VT_INTERNAL_H */
+
+#endif /* AVCODEC_VT_INTERNAL_H */
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index 2cfab89c03..3586bcd71f 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -1670,12 +1670,14 @@  static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         .log2_chroma_h = 1,
         .flags = AV_PIX_FMT_FLAG_HWACCEL,
     },
+#if FF_API_VDA
     [AV_PIX_FMT_VDA_VLD] = {
         .name = "vda_vld",
         .log2_chroma_w = 1,
         .log2_chroma_h = 1,
         .flags = AV_PIX_FMT_FLAG_HWACCEL,
     },
+#endif
     [AV_PIX_FMT_YA8] = {
         .name = "ya8",
         .nb_components = 2,
@@ -2029,10 +2031,12 @@  static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
     },
+#if FF_API_VDA
     [AV_PIX_FMT_VDA] = {
         .name = "vda",
         .flags = AV_PIX_FMT_FLAG_HWACCEL,
     },
+#endif
     [AV_PIX_FMT_QSV] = {
         .name = "qsv",
         .flags = AV_PIX_FMT_FLAG_HWACCEL,
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index 24889c8e52..9dabae47c9 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -176,7 +176,9 @@  enum AVPixelFormat {
     AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
     AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
     AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-    AV_PIX_FMT_VDA_VLD,    ///< hardware decoding through VDA
+#if FF_API_VDA
+    AV_PIX_FMT_VDA_VLD,    ///< hardware decoding through VDA (deprecated in favor of AV_PIX_FMT_VIDEOTOOLBOX)
+#endif
     AV_PIX_FMT_GBRP,      ///< planar GBR 4:4:4 24bpp
     AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP
     AV_PIX_FMT_GBRP9BE,   ///< planar GBR 4:4:4 27bpp, big-endian
@@ -221,7 +223,9 @@  enum AVPixelFormat {
 
     AV_PIX_FMT_YVYU422,   ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
 
-    AV_PIX_FMT_VDA,          ///< HW acceleration through VDA, data[3] contains a CVPixelBufferRef
+#if FF_API_VDA
+    AV_PIX_FMT_VDA,          ///< HW acceleration through VDA, data[3] contains a CVPixelBufferRef (deprecated in favor of AV_PIX_FMT_VIDEOTOOLBOX)
+#endif
 
     AV_PIX_FMT_YA16BE,       ///< 16 bits gray, 16 bits alpha (big-endian)
     AV_PIX_FMT_YA16LE,       ///< 16 bits gray, 16 bits alpha (little-endian)
diff --git a/libavutil/version.h b/libavutil/version.h
index dee4f5b4c5..8dfee54cae 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -139,6 +139,9 @@ 
 #ifndef FF_API_CRYPTO_SIZE_T
 #define FF_API_CRYPTO_SIZE_T            (LIBAVUTIL_VERSION_MAJOR < 56)
 #endif
+#ifndef FF_API_VDA
+#define FF_API_VDA                      (LIBAVUTIL_VERSION_MAJOR < 56)
+#endif
 
 
 /**