---
Only VAAPI and VDPAU tested, but hopefully mechanical.

 libavcodec/h263dec.c       |  9 +++++++++
 libavcodec/h264dec.c       | 18 ++++++++++++++++++
 libavcodec/hevcdec.c       | 18 ++++++++++++++++++
 libavcodec/mpeg12dec.c     | 23 ++++++++++++++++++++++-
 libavcodec/mpeg4videodec.c |  9 +++++++++
 libavcodec/vc1dec.c        | 30 ++++++++++++++++++++++++++++++
 libavcodec/vp8.c           |  6 ++++++
 7 files changed, 112 insertions(+), 1 deletion(-)

diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index 921ff5fb9..d4b5ba5d9 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -677,4 +677,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 AVCodecHWConfig[]) {
+#if CONFIG_H263_VAAPI_HWACCEL
+                      { AV_HWDEVICE_TYPE_VAAPI, AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_MPEG4_VDPAU_HWACCEL
+                      { AV_HWDEVICE_TYPE_VDPAU, AV_PIX_FMT_VDPAU },
+#endif
+                      { AV_HWDEVICE_TYPE_NONE },
+                    },
 };
diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 7a8293efa..e78451275 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -786,6 +786,24 @@ 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 AVCodecHWConfig[]) {
+#if CONFIG_H264_CUVID_HWACCEL
+                             { AV_HWDEVICE_TYPE_CUVID,   AV_PIX_FMT_CUVID },
+#endif
+#if CONFIG_H264_DXVA2_HWACCEL
+                             { AV_HWDEVICE_TYPE_DXVA2,   AV_PIX_FMT_DXVA2 },
+#endif
+#if CONFIG_H264_D3D11VA2_HWACCEL
+                             { AV_HWDEVICE_TYPE_D3D11VA, AV_PIX_FMT_D3D11 },
+#endif
+#if CONFIG_H264_VAAPI_HWACCEL
+                             { AV_HWDEVICE_TYPE_VAAPI,   AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_H264_VDPAU_HWACCEL
+                             { AV_HWDEVICE_TYPE_VDPAU,   AV_PIX_FMT_VDPAU },
+#endif
+                             { AV_HWDEVICE_TYPE_NONE },
+                           },
     .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..1a0460544 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -3113,4 +3113,22 @@ 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 AVCodecHWConfig[]) {
+#if CONFIG_HEVC_CUVID_HWACCEL
+                             { AV_HWDEVICE_TYPE_CUVID,   AV_PIX_FMT_CUVID },
+#endif
+#if CONFIG_HEVC_DXVA2_HWACCEL
+                             { AV_HWDEVICE_TYPE_DXVA2,   AV_PIX_FMT_DXVA2 },
+#endif
+#if CONFIG_HEVC_D3D11VA2_HWACCEL
+                             { AV_HWDEVICE_TYPE_D3D11VA, AV_PIX_FMT_D3D11 },
+#endif
+#if CONFIG_HEVC_VAAPI_HWACCEL
+                             { AV_HWDEVICE_TYPE_VAAPI,   AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_HEVC_VDPAU_HWACCEL
+                             { AV_HWDEVICE_TYPE_VDPAU,   AV_PIX_FMT_VDPAU },
+#endif
+                             { AV_HWDEVICE_TYPE_NONE },
+                           },
 };
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 9a9a92701..e7b8eeef7 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -2594,7 +2594,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 AVCodecHWConfig[]) {
+#if CONFIG_MPEG1_VDPAU_HWACCEL
+                             { AV_HWDEVICE_TYPE_VDPAU, AV_PIX_FMT_VDPAU },
+#endif
+                             { AV_HWDEVICE_TYPE_NONE },
+                           },
 };
 
 AVCodec ff_mpeg2video_decoder = {
@@ -2611,4 +2617,19 @@ AVCodec ff_mpeg2video_decoder = {
                       AV_CODEC_CAP_SLICE_THREADS,
     .flush          = flush,
     .profiles       = NULL_IF_CONFIG_SMALL(ff_mpeg2_video_profiles),
+    .hw_configs     = (const AVCodecHWConfig[]) {
+#if CONFIG_MPEG2_DXVA2_HWACCEL
+                      { AV_HWDEVICE_TYPE_DXVA2,   AV_PIX_FMT_DXVA2 },
+#endif
+#if CONFIG_MPEG2_D3D11VA2_HWACCEL
+                      { AV_HWDEVICE_TYPE_D3D11VA, AV_PIX_FMT_D3D11 },
+#endif
+#if CONFIG_MPEG2_VAAPI_HWACCEL
+                      { AV_HWDEVICE_TYPE_VAAPI,   AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_MPEG2_VDPAU_HWACCEL
+                      { AV_HWDEVICE_TYPE_VDPAU,   AV_PIX_FMT_VDPAU },
+#endif
+                      { AV_HWDEVICE_TYPE_NONE },
+                    },
 };
diff --git a/libavcodec/mpeg4videodec.c b/libavcodec/mpeg4videodec.c
index eb1b67273..4fe49bfad 100644
--- a/libavcodec/mpeg4videodec.c
+++ b/libavcodec/mpeg4videodec.c
@@ -2625,6 +2625,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 AVCodecHWConfig[]) {
+#if CONFIG_MPEG4_VAAPI_HWACCEL
+                             { AV_HWDEVICE_TYPE_VAAPI, AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_MPEG4_VDPAU_HWACCEL
+                             { AV_HWDEVICE_TYPE_VDPAU, AV_PIX_FMT_VDPAU },
+#endif
+                             { AV_HWDEVICE_TYPE_NONE },
+                           },
     .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/vc1dec.c b/libavcodec/vc1dec.c
index 5e00a33e3..f9891690f 100644
--- a/libavcodec/vc1dec.c
+++ b/libavcodec/vc1dec.c
@@ -985,6 +985,21 @@ AVCodec ff_vc1_decoder = {
     .decode         = vc1_decode_frame,
     .flush          = ff_mpeg_flush,
     .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
+    .hw_configs     = (const AVCodecHWConfig[]) {
+#if CONFIG_VC1_DXVA2_HWACCEL
+                      { AV_HWDEVICE_TYPE_DXVA2,   AV_PIX_FMT_DXVA2 },
+#endif
+#if CONFIG_VC1_D3D11VA2_HWACCEL
+                      { AV_HWDEVICE_TYPE_D3D11VA, AV_PIX_FMT_D3D11 },
+#endif
+#if CONFIG_VC1_VAAPI_HWACCEL
+                      { AV_HWDEVICE_TYPE_VAAPI,   AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_VC1_VDPAU_HWACCEL
+                      { AV_HWDEVICE_TYPE_VDPAU,   AV_PIX_FMT_VDPAU },
+#endif
+                      { AV_HWDEVICE_TYPE_NONE },
+                    },
     .pix_fmts       = vc1_hwaccel_pixfmt_list_420,
     .profiles       = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
 };
@@ -1001,6 +1016,21 @@ AVCodec ff_wmv3_decoder = {
     .decode         = vc1_decode_frame,
     .flush          = ff_mpeg_flush,
     .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
+    .hw_configs     = (const AVCodecHWConfig[]) {
+#if CONFIG_VC1_DXVA2_HWACCEL
+                      { AV_HWDEVICE_TYPE_DXVA2,   AV_PIX_FMT_DXVA2 },
+#endif
+#if CONFIG_VC1_D3D11VA2_HWACCEL
+                      { AV_HWDEVICE_TYPE_D3D11VA, AV_PIX_FMT_D3D11 },
+#endif
+#if CONFIG_VC1_VAAPI_HWACCEL
+                      { AV_HWDEVICE_TYPE_VAAPI,   AV_PIX_FMT_VAAPI },
+#endif
+#if CONFIG_VC1_VDPAU_HWACCEL
+                      { AV_HWDEVICE_TYPE_VDPAU,   AV_PIX_FMT_VDPAU },
+#endif
+                      { AV_HWDEVICE_TYPE_NONE },
+                    },
     .pix_fmts       = vc1_hwaccel_pixfmt_list_420,
     .profiles       = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
 };
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
index 43580a3a8..31c0550b6 100644
--- a/libavcodec/vp8.c
+++ b/libavcodec/vp8.c
@@ -2851,6 +2851,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 AVCodecHWConfig[]) {
+#if CONFIG_VP8_VAAPI_HWACCEL
+                             { AV_HWDEVICE_TYPE_VAAPI, AV_PIX_FMT_VAAPI },
+#endif
+                             { AV_HWDEVICE_TYPE_NONE },
+                           },
     .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
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to