summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2022-07-23 11:24:33 -0700
committerPhilip Langdale <philipl@overt.org>2022-08-03 14:10:55 -0700
commitd3f48e68b3236bc3fbf75cc489d53e9f397f5e0a (patch)
treef3602adbb12695b7aa46a269cfbd98ffc77c2920
parent2b720676e070c9920391ef29d35d8ca6a79bf0c6 (diff)
lavc/vaapi: Declare support for decoding 8bit 4:4:4 content
Now that we have a combination of capable hardware (new enough Intel) and a mutually understood format ("AYUV"), we can declare support for decoding 8bit 4:4:4 content via VAAPI. This requires listing AYUV as a supported format, and then adding VAAPI as a supported hwaccel for the relevant codecs (HEVC and VP9). I also had to add VP9Profile1 to the set of supported profiles for VAAPI as it was never relevant before.
-rw-r--r--Changelog1
-rw-r--r--libavcodec/hevcdec.c3
-rw-r--r--libavcodec/vaapi_decode.c2
-rw-r--r--libavcodec/version.h2
-rw-r--r--libavcodec/vp9.c5
5 files changed, 12 insertions, 1 deletions
diff --git a/Changelog b/Changelog
index 40ea7ccecf..d5f3d36094 100644
--- a/Changelog
+++ b/Changelog
@@ -8,6 +8,7 @@ version <next>:
- ffmpeg now requires threading to be built
- ffmpeg now runs every muxer in a separate thread
- Add new mode to cropdetect filter to detect crop-area based on motion vectors and edges
+- VAAPI hwaccel for 8bit 444 HEVC and VP9
version 5.1:
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 9b14fa50f9..539b656c65 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -453,6 +453,9 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps)
#endif
break;
case AV_PIX_FMT_YUV444P:
+#if CONFIG_HEVC_VAAPI_HWACCEL
+ *fmt++ = AV_PIX_FMT_VAAPI;
+#endif
#if CONFIG_HEVC_VDPAU_HWACCEL
*fmt++ = AV_PIX_FMT_VDPAU;
#endif
diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c
index a7abddb06b..db48efc3ed 100644
--- a/libavcodec/vaapi_decode.c
+++ b/libavcodec/vaapi_decode.c
@@ -267,6 +267,7 @@ static const struct {
MAP(422V, YUV440P),
// 4:4:4
MAP(444P, YUV444P),
+ MAP(AYUV, VUYA),
// 4:2:0 10-bit
#ifdef VA_FOURCC_P010
MAP(P010, P010),
@@ -410,6 +411,7 @@ static const struct {
MAP(VP9, VP9_0, VP9Profile0 ),
#endif
#if VA_CHECK_VERSION(0, 39, 0)
+ MAP(VP9, VP9_1, VP9Profile1 ),
MAP(VP9, VP9_2, VP9Profile2 ),
#endif
#if VA_CHECK_VERSION(1, 8, 0)
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 4a1205c718..751f0d2645 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -30,7 +30,7 @@
#include "version_major.h"
#define LIBAVCODEC_VERSION_MINOR 41
-#define LIBAVCODEC_VERSION_MICRO 100
+#define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \
diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index bd2951c92e..db06acd748 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -234,6 +234,11 @@ static int update_size(AVCodecContext *avctx, int w, int h)
*fmtp++ = AV_PIX_FMT_VDPAU;
#endif
break;
+ case AV_PIX_FMT_YUV444P:
+#if CONFIG_VP9_VAAPI_HWACCEL
+ *fmtp++ = AV_PIX_FMT_VAAPI;
+#endif
+ break;
}
*fmtp++ = s->pix_fmt;