From: Jaroslav Kysela Date: Mon, 16 Oct 2017 16:08:43 +0000 (+0200) Subject: transcode: add vp9_vaapi codec support X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=18f5056bf52cf9cf05e66718d3f7da3e0e079146;p=thirdparty%2Ftvheadend.git transcode: add vp9_vaapi codec support --- diff --git a/Makefile.ffmpeg b/Makefile.ffmpeg index 91d1dd97b..e85bdde11 100644 --- a/Makefile.ffmpeg +++ b/Makefile.ffmpeg @@ -554,7 +554,7 @@ endif ifeq (yes,$(CONFIG_VAAPI)) EXTLIBS += vaapi -ENCODERS += h264_vaapi hevc_vaapi vp8_vaapi +ENCODERS += h264_vaapi hevc_vaapi vp8_vaapi vp9_vaapi HWACCELS += mpeg2_vaapi h264_vaapi hevc_vaapi vp9_vaapi FILTERS += deinterlace_vaapi scale_vaapi FFMPEG_DIFFS += ffmpeg.vaapi_encode.diff diff --git a/src/transcoding/codec/codec.c b/src/transcoding/codec/codec.c index 5b5bc6012..16434ce69 100644 --- a/src/transcoding/codec/codec.c +++ b/src/transcoding/codec/codec.c @@ -62,6 +62,7 @@ extern TVHCodec tvh_codec_libopus; extern TVHCodec tvh_codec_vaapi_h264; extern TVHCodec tvh_codec_vaapi_hevc; extern TVHCodec tvh_codec_vaapi_vp8; +extern TVHCodec tvh_codec_vaapi_vp9; #endif #if ENABLE_NVENC @@ -282,6 +283,7 @@ tvh_codecs_register() tvh_codec_register(&tvh_codec_vaapi_h264); tvh_codec_register(&tvh_codec_vaapi_hevc); tvh_codec_register(&tvh_codec_vaapi_vp8); + tvh_codec_register(&tvh_codec_vaapi_vp9); #endif #if ENABLE_NVENC diff --git a/src/transcoding/codec/codecs/libs/vaapi.c b/src/transcoding/codec/codecs/libs/vaapi.c index b5da9907c..fd2af241d 100644 --- a/src/transcoding/codec/codecs/libs/vaapi.c +++ b/src/transcoding/codec/codecs/libs/vaapi.c @@ -306,3 +306,45 @@ TVHVideoCodec tvh_codec_vaapi_vp8 = { .profile_init = tvh_codec_profile_video_init, .profile_destroy = tvh_codec_profile_video_destroy, }; + +/* vp9_vaapi =============================================================== */ + +static const AVProfile vaapi_vp9_profiles[] = { + { FF_PROFILE_UNKNOWN }, +}; + +static int +tvh_codec_profile_vaapi_vp9_open(tvh_codec_profile_vaapi_t *self, + AVDictionary **opts) +{ + // bit_rate or qp + if (self->bit_rate) { + AV_DICT_SET_BIT_RATE(opts, self->bit_rate); + } + else { + AV_DICT_SET_QP(opts, self->qp, 25); + } + // force zero here, until encoder is fixed + AV_DICT_SET_INT(opts, "bf", 0, 0); + return 0; +} + + +static const codec_profile_class_t codec_profile_vaapi_vp9_class = { + { + .ic_super = (idclass_t *)&codec_profile_vaapi_class, + .ic_class = "codec_profile_vaapi_vp9", + .ic_caption = N_("vaapi_vp9") + }, + .open = (codec_profile_open_meth)tvh_codec_profile_vaapi_vp9_open, +}; + + +TVHVideoCodec tvh_codec_vaapi_vp9 = { + .name = "vp9_vaapi", + .size = sizeof(tvh_codec_profile_vaapi_t), + .idclass = &codec_profile_vaapi_vp9_class, + .profiles = vaapi_vp9_profiles, + .profile_init = tvh_codec_profile_video_init, + .profile_destroy = tvh_codec_profile_video_destroy, +};