lavc/vaapi_encode: enable 8bit 4:4:4 encoding for HEVC and VP9

Sufficiently recent Intel hardware is able to do encoding of 8bit 4:4:4
content in HEVC and VP9. The main requirement here is that the frames
must be provided in the AYUV format.

Enabling support is done by adding the appropriate encoding profiles
and noting that AYUV is officially a four channel format with alpha so
we must state that we expect all four channels.
pull/388/head
Philip Langdale 2 years ago
parent 737298b4f7
commit 109515e16d
  1. 2
      Changelog
  2. 1
      libavcodec/vaapi_encode.c
  3. 2
      libavcodec/vaapi_encode_h265.c
  4. 2
      libavcodec/vaapi_encode_vp9.c
  5. 2
      libavcodec/version.h

@ -8,7 +8,7 @@ version <next>:
- ffmpeg now requires threading to be built - ffmpeg now requires threading to be built
- ffmpeg now runs every muxer in a separate thread - 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 - Add new mode to cropdetect filter to detect crop-area based on motion vectors and edges
- VAAPI hwaccel for 8bit 444 HEVC and VP9 - VAAPI decoding and encoding for 8bit 444 HEVC and VP9
- WBMP (Wireless Application Protocol Bitmap) image format - WBMP (Wireless Application Protocol Bitmap) image format

@ -1308,6 +1308,7 @@ static const VAAPIEncodeRTFormat vaapi_encode_rt_formats[] = {
{ "YUV422_10", VA_RT_FORMAT_YUV422_10, 10, 3, 1, 0 }, { "YUV422_10", VA_RT_FORMAT_YUV422_10, 10, 3, 1, 0 },
#endif #endif
{ "YUV444", VA_RT_FORMAT_YUV444, 8, 3, 0, 0 }, { "YUV444", VA_RT_FORMAT_YUV444, 8, 3, 0, 0 },
{ "AYUV", VA_RT_FORMAT_YUV444, 8, 4, 0, 0 },
{ "YUV411", VA_RT_FORMAT_YUV411, 8, 3, 2, 0 }, { "YUV411", VA_RT_FORMAT_YUV411, 8, 3, 2, 0 },
#if VA_CHECK_VERSION(0, 38, 1) #if VA_CHECK_VERSION(0, 38, 1)
{ "YUV420_10", VA_RT_FORMAT_YUV420_10BPP, 10, 3, 1, 1 }, { "YUV420_10", VA_RT_FORMAT_YUV420_10BPP, 10, 3, 1, 1 },

@ -1278,6 +1278,8 @@ static const VAAPIEncodeProfile vaapi_encode_h265_profiles[] = {
#if VA_CHECK_VERSION(1, 2, 0) #if VA_CHECK_VERSION(1, 2, 0)
{ FF_PROFILE_HEVC_REXT, 8, 3, 1, 0, VAProfileHEVCMain422_10 }, { FF_PROFILE_HEVC_REXT, 8, 3, 1, 0, VAProfileHEVCMain422_10 },
{ FF_PROFILE_HEVC_REXT, 10, 3, 1, 0, VAProfileHEVCMain422_10 }, { FF_PROFILE_HEVC_REXT, 10, 3, 1, 0, VAProfileHEVCMain422_10 },
// Four channels because this uses the AYUV format which has Alpha
{ FF_PROFILE_HEVC_REXT, 8, 4, 0, 0, VAProfileHEVCMain444 },
#endif #endif
{ FF_PROFILE_UNKNOWN } { FF_PROFILE_UNKNOWN }
}; };

@ -228,6 +228,8 @@ static av_cold int vaapi_encode_vp9_configure(AVCodecContext *avctx)
static const VAAPIEncodeProfile vaapi_encode_vp9_profiles[] = { static const VAAPIEncodeProfile vaapi_encode_vp9_profiles[] = {
{ FF_PROFILE_VP9_0, 8, 3, 1, 1, VAProfileVP9Profile0 }, { FF_PROFILE_VP9_0, 8, 3, 1, 1, VAProfileVP9Profile0 },
// Four channels because this uses the AYUV format which has Alpha
{ FF_PROFILE_VP9_1, 8, 4, 0, 0, VAProfileVP9Profile1 },
{ FF_PROFILE_VP9_2, 10, 3, 1, 1, VAProfileVP9Profile2 }, { FF_PROFILE_VP9_2, 10, 3, 1, 1, VAProfileVP9Profile2 },
{ FF_PROFILE_UNKNOWN } { FF_PROFILE_UNKNOWN }
}; };

@ -30,7 +30,7 @@
#include "version_major.h" #include "version_major.h"
#define LIBAVCODEC_VERSION_MINOR 42 #define LIBAVCODEC_VERSION_MINOR 42
#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MICRO 101
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \

Loading…
Cancel
Save