This includes a pointer to the associated hwaccel for decoders using
hwaccels - these will be used later to implement the hwaccel setup
without needing a global list.

Also added is a new file listing all hwaccels as external declarations -
this will be used later to generate the hwaccel list at configure time.
---
On 05/11/17 19:27, Diego Biurrun wrote:
> On Sun, Nov 05, 2017 at 12:00:01AM +0000, Mark Thompson wrote:
>> These will be used later to generate the hwaccel list at configure time,
>> but are needed now for the config structures in the following patch.
>> ---
>>  libavcodec/hwaccels.h | 59 
>> +++++++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 59 insertions(+)
>>  create mode 100644 libavcodec/hwaccels.h
> 
> I really don't understand why this is not part of the next patch. IMO
> this extra commit just creates churn in the Git history and should be
> avoided.

Ok, squashed.


 libavcodec/h263dec.c       | 10 ++++++++
 libavcodec/h264dec.c       | 28 ++++++++++++++++++++++
 libavcodec/hevcdec.c       | 22 +++++++++++++++++
 libavcodec/hwaccel.h       | 48 +++++++++++++++++++++++++++++++++++++
 libavcodec/hwaccels.h      | 59 ++++++++++++++++++++++++++++++++++++++++++++++
 libavcodec/mmaldec.c       |  7 ++++++
 libavcodec/mpeg12dec.c     | 27 ++++++++++++++++++++-
 libavcodec/mpeg4videodec.c | 10 ++++++++
 libavcodec/qsvdec.c        | 13 ++++++++++
 libavcodec/qsvdec.h        |  3 +++
 libavcodec/qsvdec_h2645.c  |  2 ++
 libavcodec/qsvdec_other.c  |  3 +++
 libavcodec/vc1dec.c        | 37 +++++++++++++++++++++++++++++
 libavcodec/vp8.c           |  7 ++++++
 14 files changed, 275 insertions(+), 1 deletion(-)
 create mode 100644 libavcodec/hwaccels.h

diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 921ff5fb9..b0000883c 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -31,6 +31,7 @@
 #include "flv.h"
 #include "h263.h"
 #include "h263_parser.h"
+#include "hwaccel.h"
 #include "internal.h"
 #include "mpeg_er.h"
 #include "mpeg4video.h"
@@ -677,4 +678,13 @@ AVCodec ff_h263_decoder = {
                       AV_CODEC_CAP_TRUNCATED | AV_CODEC_CAP_DELAY,
     .flush          = ff_mpeg_flush,
     .pix_fmts       = ff_h263_hwaccel_pixfmt_list_420,
+    .hw_configs     = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_H263_VAAPI_HWACCEL
+                        HWACCEL_VAAPI(h263),
+#endif
+#if CONFIG_MPEG4_VDPAU_HWACCEL
+                        HWACCEL_VDPAU(mpeg4),
+#endif
+                        NULL
+                    },
 };
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 7a8293efa..440644f61 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -44,6 +44,7 @@
 #include "h264chroma.h"
 #include "h264_mvpred.h"
 #include "h264_ps.h"
+#include "hwaccel.h"
 #include "mathops.h"
 #include "me_cmp.h"
 #include "mpegutils.h"
@@ -786,6 +787,33 @@ AVCodec ff_h264_decoder = {
     .capabilities          = /*AV_CODEC_CAP_DRAW_HORIZ_BAND |*/ 
AV_CODEC_CAP_DR1 |
                              AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
                              AV_CODEC_CAP_FRAME_THREADS,
+    .hw_configs            = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_H264_CUVID_HWACCEL
+                               HWACCEL_CUVID(h264),
+#endif
+#if CONFIG_H264_DXVA2_HWACCEL
+                               HWACCEL_DXVA2(h264),
+#endif
+#if CONFIG_H264_D3D11VA_HWACCEL
+                               HWACCEL_D3D11VA(h264),
+#endif
+#if CONFIG_H264_D3D11VA2_HWACCEL
+                               HWACCEL_D3D11VA2(h264),
+#endif
+#if CONFIG_H264_VAAPI_HWACCEL
+                               HWACCEL_VAAPI(h264),
+#endif
+#if CONFIG_H264_VDPAU_HWACCEL
+                               HWACCEL_VDPAU(h264),
+#endif
+#if CONFIG_H264_VDA_HWACCEL
+                               HW_CONFIG_AD_HOC_HWACCEL(VDA, 
ff_h264_vda_hwaccel)
+#endif
+#if CONFIG_H264_VDA_OLD_HWACCEL
+                               HW_CONFIG_AD_HOC_HWACCEL(VDA_VLD, 
ff_h264_vda_old_hwaccel)
+#endif
+                               NULL
+                           },
     .caps_internal         = FF_CODEC_CAP_INIT_THREADSAFE | 
FF_CODEC_CAP_EXPORTS_CROPPING,
     .flush                 = flush_dpb,
     .init_thread_copy      = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index a1619cf4b..145c14289 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -39,6 +39,7 @@
 #include "hevc.h"
 #include "hevc_data.h"
 #include "hevcdec.h"
+#include "hwaccel.h"
 #include "profiles.h"
 
 const uint8_t ff_hevc_qpel_extra_before[4] = { 0, 3, 3, 3 };
@@ -3113,4 +3114,25 @@ AVCodec ff_hevc_decoder = {
                              AV_CODEC_CAP_FRAME_THREADS,
     .profiles              = NULL_IF_CONFIG_SMALL(ff_hevc_profiles),
     .caps_internal         = FF_CODEC_CAP_EXPORTS_CROPPING | 
FF_CODEC_CAP_INIT_THREADSAFE,
+    .hw_configs            = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_HEVC_CUVID_HWACCEL
+                               HWACCEL_CUVID(hevc),
+#endif
+#if CONFIG_HEVC_DXVA2_HWACCEL
+                               HWACCEL_DXVA2(hevc),
+#endif
+#if CONFIG_HEVC_D3D11VA_HWACCEL
+                               HWACCEL_D3D11VA(hevc),
+#endif
+#if CONFIG_HEVC_D3D11VA2_HWACCEL
+                               HWACCEL_D3D11VA2(hevc),
+#endif
+#if CONFIG_HEVC_VAAPI_HWACCEL
+                               HWACCEL_VAAPI(hevc),
+#endif
+#if CONFIG_HEVC_VDPAU_HWACCEL
+                               HWACCEL_VDPAU(hevc),
+#endif
+                               NULL
+                           },
 };
diff --git a/libavcodec/hwaccel.h b/libavcodec/hwaccel.h
index b6d566248..981de543d 100644
--- a/libavcodec/hwaccel.h
+++ b/libavcodec/hwaccel.h
@@ -20,6 +20,7 @@
 #define AVCODEC_HWACCEL_H
 
 #include "avcodec.h"
+#include "hwaccels.h"
 
 
 #define HWACCEL_CAP_ASYNC_SAFE      (1 << 0)
@@ -39,4 +40,51 @@ typedef struct AVCodecHWConfigInternal {
 } AVCodecHWConfigInternal;
 
 
+// These macros are used to simplify AVCodecHWConfigInternal definitions.
+
+#define HW_CONFIG_HWACCEL(format, device, name) \
+    &(const AVCodecHWConfigInternal) { \
+        .public          = { \
+            .pix_fmt     = AV_PIX_FMT_ ## format, \
+            .methods     = AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX | \
+                           AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, \
+            .device_type = AV_HWDEVICE_TYPE_ ## device, \
+        }, \
+        .hwaccel         = &name, \
+    }
+
+#define HW_CONFIG_INTERNAL(format) \
+    &(const AVCodecHWConfigInternal) { \
+        .public          = { \
+            .pix_fmt     = AV_PIX_FMT_ ## format, \
+            .methods     = AV_CODEC_HW_CONFIG_METHOD_INTERNAL, \
+            .device_type = AV_HWDEVICE_TYPE_NONE, \
+        }, \
+        .hwaccel         = NULL, \
+    }
+
+#define HW_CONFIG_AD_HOC_HWACCEL(format, name) \
+    &(const AVCodecHWConfigInternal) { \
+        .public =      { \
+            .pix_fmt     = AV_PIX_FMT_ ## format, \
+            .methods     = AV_CODEC_HW_CONFIG_METHOD_AD_HOC, \
+            .device_type = AV_HWDEVICE_TYPE_NONE, \
+        }, \
+        .hwaccel = &name, \
+    }
+
+#define HWACCEL_CUVID(codec) \
+    HW_CONFIG_HWACCEL(CUDA,      CUDA,    ff_ ## codec ## _cuvid_hwaccel)
+#define HWACCEL_DXVA2(codec) \
+    HW_CONFIG_HWACCEL(DXVA2_VLD, DXVA2,   ff_ ## codec ## _dxva2_hwaccel)
+#define HWACCEL_D3D11VA2(codec) \
+    HW_CONFIG_HWACCEL(D3D11,     D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
+#define HWACCEL_VAAPI(codec) \
+    HW_CONFIG_HWACCEL(VAAPI,     VAAPI,   ff_ ## codec ## _vaapi_hwaccel)
+#define HWACCEL_VDPAU(codec) \
+    HW_CONFIG_HWACCEL(VDPAU,     VDPAU,   ff_ ## codec ## _vdpau_hwaccel)
+
+#define HWACCEL_D3D11VA(codec) \
+    HW_CONFIG_AD_HOC_HWACCEL(D3D11VA_VLD, ff_ ## codec ## _d3d11va_hwaccel)
+
 #endif /* AVCODEC_HWACCEL_H */
diff --git a/libavcodec/hwaccels.h b/libavcodec/hwaccels.h
new file mode 100644
index 000000000..6dee94b44
--- /dev/null
+++ b/libavcodec/hwaccels.h
@@ -0,0 +1,59 @@
+/*
+ * This file is part of Libav.
+ *
+ * Libav 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.
+ *
+ * Libav 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 Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_HWACCELS_H
+#define AVCODEC_HWACCELS_H
+
+#include "avcodec.h"
+
+extern AVHWAccel ff_h263_vaapi_hwaccel;
+extern AVHWAccel ff_h264_cuvid_hwaccel;
+extern AVHWAccel ff_h264_d3d11va_hwaccel;
+extern AVHWAccel ff_h264_d3d11va2_hwaccel;
+extern AVHWAccel ff_h264_dxva2_hwaccel;
+extern AVHWAccel ff_h264_vaapi_hwaccel;
+extern AVHWAccel ff_h264_vda_hwaccel;
+extern AVHWAccel ff_h264_vda_old_hwaccel;
+extern AVHWAccel ff_h264_vdpau_hwaccel;
+extern AVHWAccel ff_hevc_cuvid_hwaccel;
+extern AVHWAccel ff_hevc_d3d11va_hwaccel;
+extern AVHWAccel ff_hevc_d3d11va2_hwaccel;
+extern AVHWAccel ff_hevc_dxva2_hwaccel;
+extern AVHWAccel ff_hevc_vaapi_hwaccel;
+extern AVHWAccel ff_hevc_vdpau_hwaccel;
+extern AVHWAccel ff_mpeg1_vdpau_hwaccel;
+extern AVHWAccel ff_mpeg2_d3d11va_hwaccel;
+extern AVHWAccel ff_mpeg2_d3d11va2_hwaccel;
+extern AVHWAccel ff_mpeg2_dxva2_hwaccel;
+extern AVHWAccel ff_mpeg2_vaapi_hwaccel;
+extern AVHWAccel ff_mpeg2_vdpau_hwaccel;
+extern AVHWAccel ff_mpeg4_vaapi_hwaccel;
+extern AVHWAccel ff_mpeg4_vdpau_hwaccel;
+extern AVHWAccel ff_vc1_d3d11va_hwaccel;
+extern AVHWAccel ff_vc1_d3d11va2_hwaccel;
+extern AVHWAccel ff_vc1_dxva2_hwaccel;
+extern AVHWAccel ff_vc1_vaapi_hwaccel;
+extern AVHWAccel ff_vc1_vdpau_hwaccel;
+extern AVHWAccel ff_vp8_vaapi_hwaccel;
+extern AVHWAccel ff_wmv3_d3d11va_hwaccel;
+extern AVHWAccel ff_wmv3_d3d11va2_hwaccel;
+extern AVHWAccel ff_wmv3_dxva2_hwaccel;
+extern AVHWAccel ff_wmv3_vaapi_hwaccel;
+extern AVHWAccel ff_wmv3_vdpau_hwaccel;
+
+#endif /* AVCODEC_HWACCELS_H */
diff --git a/libavcodec/mmaldec.c b/libavcodec/mmaldec.c
index 023ebe80d..9d92ee715 100644
--- a/libavcodec/mmaldec.c
+++ b/libavcodec/mmaldec.c
@@ -34,6 +34,7 @@
 #include <stdatomic.h>
 
 #include "avcodec.h"
+#include "hwaccel.h"
 #include "internal.h"
 #include "libavutil/avassert.h"
 #include "libavutil/buffer.h"
@@ -808,6 +809,11 @@ AVHWAccel ff_vc1_mmal_hwaccel = {
     .pix_fmt    = AV_PIX_FMT_MMAL,
 };
 
+static const AVCodecHWConfigInternal *mmal_hw_configs = {
+    HW_CONFIG_INTERNAL(MMAL),
+    NULL
+};
+
 static const AVOption options[]={
     {"extra_buffers", "extra buffers", offsetof(MMALDecodeContext, 
extra_buffers), AV_OPT_TYPE_INT, {.i64 = 10}, 0, 256, 0},
     {"extra_decoder_buffers", "extra MMAL internal buffered frames", 
offsetof(MMALDecodeContext, extra_decoder_buffers), AV_OPT_TYPE_INT, {.i64 = 
10}, 0, 256, 0},
@@ -840,6 +846,7 @@ static const AVOption options[]={
         .pix_fmts       = (const enum AVPixelFormat[]) { AV_PIX_FMT_MMAL, \
                                                          AV_PIX_FMT_YUV420P, \
                                                          AV_PIX_FMT_NONE}, \
+        .hw_configs     = mmal_hw_configs,
     };
 
 FFMMAL_DEC(h264, AV_CODEC_ID_H264)
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 9a9a92701..532934ccb 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -34,6 +34,7 @@
 #include "avcodec.h"
 #include "bytestream.h"
 #include "error_resilience.h"
+#include "hwaccel.h"
 #include "idctdsp.h"
 #include "internal.h"
 #include "mpeg_er.h"
@@ -2594,7 +2595,13 @@ AVCodec ff_mpeg1video_decoder = {
                              AV_CODEC_CAP_TRUNCATED | AV_CODEC_CAP_DELAY |
                              AV_CODEC_CAP_SLICE_THREADS,
     .flush                 = flush,
-    .update_thread_context = 
ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context)
+    .update_thread_context = 
ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context),
+    .hw_configs            = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_MPEG1_VDPAU_HWACCEL
+                               HWACCEL_VDPAU(mpeg1),
+#endif
+                               NULL
+                           },
 };
 
 AVCodec ff_mpeg2video_decoder = {
@@ -2611,4 +2618,22 @@ AVCodec ff_mpeg2video_decoder = {
                       AV_CODEC_CAP_SLICE_THREADS,
     .flush          = flush,
     .profiles       = NULL_IF_CONFIG_SMALL(ff_mpeg2_video_profiles),
+    .hw_configs     = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_MPEG2_DXVA2_HWACCEL
+                        HWACCEL_DXVA2(mpeg2),
+#endif
+#if CONFIG_MPEG2_D3D11VA_HWACCEL
+                        HWACCEL_D3D11VA(mpeg2),
+#endif
+#if CONFIG_MPEG2_D3D11VA2_HWACCEL
+                        HWACCEL_D3D11VA2(mpeg2),
+#endif
+#if CONFIG_MPEG2_VAAPI_HWACCEL
+                        HWACCEL_VAAPI(mpeg2),
+#endif
+#if CONFIG_MPEG2_VDPAU_HWACCEL
+                        HWACCEL_VDPAU(mpeg2),
+#endif
+                        NULL
+                    },
 };
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index eb1b67273..566fd3a89 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -21,6 +21,7 @@
  */
 
 #include "error_resilience.h"
+#include "hwaccel.h"
 #include "idctdsp.h"
 #include "internal.h"
 #include "mpegutils.h"
@@ -2625,6 +2626,15 @@ AVCodec ff_mpeg4_decoder = {
     .capabilities          = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1 |
                              AV_CODEC_CAP_TRUNCATED | AV_CODEC_CAP_DELAY |
                              AV_CODEC_CAP_FRAME_THREADS,
+    .hw_configs            = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_MPEG4_VAAPI_HWACCEL
+                               HWACCEL_VAAPI(mpeg4),
+#endif
+#if CONFIG_MPEG4_VDPAU_HWACCEL
+                               HWACCEL_VDPAU(mpeg4),
+#endif
+                               NULL
+                           },
     .flush                 = ff_mpeg_flush,
     .pix_fmts              = ff_h263_hwaccel_pixfmt_list_420,
     .profiles              = NULL_IF_CONFIG_SMALL(ff_mpeg4_video_profiles),
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index 2c90436a1..c74ec6836 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -41,6 +41,19 @@
 #include "qsv_internal.h"
 #include "qsvdec.h"
 
+const AVCodecHWConfigInternal *ff_qsv_hw_configs[] = {
+    &(const AVCodecHWConfigInternal) {
+        .public = {
+            .pix_fmt     = AV_PIX_FMT_QSV,
+            .methods     = AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX |
+                           AV_CODEC_HW_CONFIG_METHOD_AD_HOC,
+            .device_type = AV_HWDEVICE_TYPE_QSV,
+        },
+        .hwaccel = NULL,
+    },
+    NULL
+};
+
 static int qsv_init_session(AVCodecContext *avctx, QSVContext *q, mfxSession 
session,
                             AVBufferRef *hw_frames_ref, AVBufferRef 
*hw_device_ref)
 {
diff --git a/libavcodec/qsvdec.h b/libavcodec/qsvdec.h
index c6ec99af1..e25c4d6c9 100644
--- a/libavcodec/qsvdec.h
+++ b/libavcodec/qsvdec.h
@@ -33,6 +33,7 @@
 #include "libavutil/pixfmt.h"
 
 #include "avcodec.h"
+#include "hwaccel.h"
 #include "qsv_internal.h"
 
 typedef struct QSVContext {
@@ -70,6 +71,8 @@ typedef struct QSVContext {
     int         nb_ext_buffers;
 } QSVContext;
 
+extern const AVCodecHWConfigInternal *ff_qsv_hw_configs[];
+
 int ff_qsv_process_data(AVCodecContext *avctx, QSVContext *q,
                         AVFrame *frame, int *got_frame, AVPacket *pkt);
 
diff --git a/libavcodec/qsvdec_h2645.c b/libavcodec/qsvdec_h2645.c
index a2a6cc3c4..05c1db3d7 100644
--- a/libavcodec/qsvdec_h2645.c
+++ b/libavcodec/qsvdec_h2645.c
@@ -220,6 +220,7 @@ AVCodec ff_hevc_qsv_decoder = {
                                                     AV_PIX_FMT_P010,
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_NONE },
+    .hw_configs     = ff_qsv_hw_configs,
     .bsfs           = "hevc_mp4toannexb",
 };
 #endif
@@ -262,6 +263,7 @@ AVCodec ff_h264_qsv_decoder = {
                                                     AV_PIX_FMT_P010,
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_NONE },
+    .hw_configs     = ff_qsv_hw_configs,
     .bsfs           = "h264_mp4toannexb",
 };
 #endif
diff --git a/libavcodec/qsvdec_other.c b/libavcodec/qsvdec_other.c
index 3ea1859bf..0a506a154 100644
--- a/libavcodec/qsvdec_other.c
+++ b/libavcodec/qsvdec_other.c
@@ -190,6 +190,7 @@ AVCodec ff_mpeg2_qsv_decoder = {
     .pix_fmts       = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_NONE },
+    .hw_configs     = ff_qsv_hw_configs,
 };
 #endif
 
@@ -225,6 +226,7 @@ AVCodec ff_vc1_qsv_decoder = {
     .pix_fmts       = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_NONE },
+    .hw_configs     = ff_qsv_hw_configs,
 };
 #endif
 
@@ -260,5 +262,6 @@ AVCodec ff_vp8_qsv_decoder = {
     .pix_fmts       = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
                                                     AV_PIX_FMT_QSV,
                                                     AV_PIX_FMT_NONE },
+    .hw_configs     = ff_qsv_hw_configs,
 };
 #endif
diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c
index 5e00a33e3..0061ba62f 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -29,6 +29,7 @@
 #include "avcodec.h"
 #include "blockdsp.h"
 #include "get_bits.h"
+#include "hwaccel.h"
 #include "internal.h"
 #include "mpeg_er.h"
 #include "mpegvideo.h"
@@ -986,6 +987,24 @@ AVCodec ff_vc1_decoder = {
     .flush          = ff_mpeg_flush,
     .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
     .pix_fmts       = vc1_hwaccel_pixfmt_list_420,
+    .hw_configs     = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_VC1_DXVA2_HWACCEL
+                        HWACCEL_DXVA2(vc1),
+#endif
+#if CONFIG_VC1_D3D11VA_HWACCEL
+                        HWACCEL_D3D11VA(vc1),
+#endif
+#if CONFIG_VC1_D3D11VA2_HWACCEL
+                        HWACCEL_D3D11VA2(vc1),
+#endif
+#if CONFIG_VC1_VAAPI_HWACCEL
+                        HWACCEL_VAAPI(vc1),
+#endif
+#if CONFIG_VC1_VDPAU_HWACCEL
+                        HWACCEL_VDPAU(vc1),
+#endif
+                        NULL
+                    },
     .profiles       = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
 };
 
@@ -1002,6 +1021,24 @@ AVCodec ff_wmv3_decoder = {
     .flush          = ff_mpeg_flush,
     .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
     .pix_fmts       = vc1_hwaccel_pixfmt_list_420,
+    .hw_configs     = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_VC1_DXVA2_HWACCEL
+                        HWACCEL_DXVA2(wmv3),
+#endif
+#if CONFIG_VC1_D3D11VA_HWACCEL
+                        HWACCEL_D3D11VA(wmv3),
+#endif
+#if CONFIG_VC1_D3D11VA2_HWACCEL
+                        HWACCEL_D3D11VA2(wmv3),
+#endif
+#if CONFIG_VC1_VAAPI_HWACCEL
+                        HWACCEL_VAAPI(wmv3),
+#endif
+#if CONFIG_VC1_VDPAU_HWACCEL
+                        HWACCEL_VDPAU(wmv3),
+#endif
+                        NULL
+                    },
     .profiles       = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
 };
 #endif
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
index 43580a3a8..6d1a39930 100644
--- a/libavcodec/vp8.c
+++ b/libavcodec/vp8.c
@@ -27,6 +27,7 @@
 #include "libavutil/imgutils.h"
 
 #include "avcodec.h"
+#include "hwaccel.h"
 #include "internal.h"
 #include "mathops.h"
 #include "rectangle.h"
@@ -2851,6 +2852,12 @@ AVCodec ff_vp8_decoder = {
     .decode                = ff_vp8_decode_frame,
     .capabilities          = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS |
                              AV_CODEC_CAP_SLICE_THREADS,
+    .hw_configs            = (const AVCodecHWConfigInternal*[]) {
+#if CONFIG_VP8_VAAPI_HWACCEL
+                               HWACCEL_VAAPI(vp8),
+#endif
+                               NULL
+                           },
     .flush                 = vp8_decode_flush,
     .init_thread_copy      = 
ONLY_IF_THREADS_ENABLED(vp8_decode_init_thread_copy),
     .update_thread_context = 
ONLY_IF_THREADS_ENABLED(vp8_decode_update_thread_context),
-- 
2.11.0
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to