aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFei Wang <fei.w.wang@intel.com>2024-06-14 16:28:54 +0800
committerHaihao Xiang <haihao.xiang@intel.com>2024-07-30 13:40:21 +0800
commitd30a9fdc809c90fa39549e7dc9f040824488999a (patch)
treee83b08f22f717a9e5d1f4cc66d5ab8d3bc589ae1
parentcf9c398fc1c4efc53c0fdd9cd6a8099b9b2d4012 (diff)
downloadffmpeg-d30a9fdc809c90fa39549e7dc9f040824488999a.tar.gz
lavc/qsvdec: Add VVC decoder
Signed-off-by: Fei Wang <fei.w.wang@intel.com>
-rw-r--r--Changelog2
-rwxr-xr-xconfigure1
-rw-r--r--doc/decoders.texi2
-rw-r--r--libavcodec/allcodecs.c1
-rw-r--r--libavcodec/qsv.c4
-rw-r--r--libavcodec/qsvdec.c7
-rw-r--r--libavcodec/version.h2
7 files changed, 16 insertions, 3 deletions
diff --git a/Changelog b/Changelog
index 3708e35a2a..571b27ad98 100644
--- a/Changelog
+++ b/Changelog
@@ -17,6 +17,8 @@ version <next>:
- perlin video source
- D3D12VA HEVC encoder
- Cropping metadata parsing and writing in Matroska and MP4/MOV de/muxers
+- Intel QSV-accelerated VVC decoding
+
version 7.0:
- DXV DXT1 encoder
diff --git a/configure b/configure
index a222d91dbd..770a637aad 100755
--- a/configure
+++ b/configure
@@ -3425,6 +3425,7 @@ vp9_vaapi_encoder_select="vaapi_encode"
vp9_qsv_encoder_deps="libmfx MFX_CODEC_VP9"
vp9_qsv_encoder_select="qsvenc"
vp9_v4l2m2m_decoder_deps="v4l2_m2m vp9_v4l2_m2m"
+vvc_qsv_decoder_select="qsvdec"
# parsers
aac_parser_select="adts_header mpeg4audio"
diff --git a/doc/decoders.texi b/doc/decoders.texi
index 293c82c2ba..2fcc761d2f 100644
--- a/doc/decoders.texi
+++ b/doc/decoders.texi
@@ -157,7 +157,7 @@ Force to use a specific number of threads
@section QSV Decoders
The family of Intel QuickSync Video decoders (VC1, MPEG-2, H.264, HEVC,
-JPEG/MJPEG, VP8, VP9, AV1).
+JPEG/MJPEG, VP8, VP9, AV1, VVC).
@subsection Common Options
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 9598e0fea2..09385be4ee 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -887,6 +887,7 @@ extern const FFCodec ff_vp9_mediacodec_encoder;
extern const FFCodec ff_vp9_qsv_decoder;
extern const FFCodec ff_vp9_vaapi_encoder;
extern const FFCodec ff_vp9_qsv_encoder;
+extern const FFCodec ff_vvc_qsv_decoder;
// null codecs
extern const FFCodec ff_vnull_decoder;
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 0c6fbd0dc0..221c1b24e5 100644
--- a/libavcodec/qsv.c
+++ b/libavcodec/qsv.c
@@ -73,6 +73,10 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id)
case AV_CODEC_ID_AV1:
return MFX_CODEC_AV1;
#endif
+#if QSV_VERSION_ATLEAST(2, 11)
+ case AV_CODEC_ID_VVC:
+ return MFX_CODEC_VVC;
+#endif
default:
break;
diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c
index f2cd6ae05c..9ad3439991 100644
--- a/libavcodec/qsvdec.c
+++ b/libavcodec/qsvdec.c
@@ -933,7 +933,8 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q,
frame->pict_type = ff_qsv_map_pictype(aframe.frame->dec_info.FrameType);
if (avctx->codec_id == AV_CODEC_ID_H264 ||
- avctx->codec_id == AV_CODEC_ID_HEVC) {
+ avctx->codec_id == AV_CODEC_ID_HEVC ||
+ avctx->codec_id == AV_CODEC_ID_VVC) {
if (aframe.frame->dec_info.FrameType & MFX_FRAMETYPE_IDR)
frame->flags |= AV_FRAME_FLAG_KEY;
else
@@ -1300,3 +1301,7 @@ DEFINE_QSV_DECODER(vp9, VP9, NULL)
#if CONFIG_AV1_QSV_DECODER
DEFINE_QSV_DECODER(av1, AV1, NULL)
#endif
+
+#if CONFIG_VVC_QSV_DECODER
+DEFINE_QSV_DECODER(vvc, VVC, NULL)
+#endif
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 80e2ae630d..8b53586be1 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
#include "version_major.h"
-#define LIBAVCODEC_VERSION_MINOR 10
+#define LIBAVCODEC_VERSION_MINOR 11
#define LIBAVCODEC_VERSION_MICRO 100
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \