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