ifeq (yes,$(CONFIG_VAAPI))
EXTLIBS += vaapi
-ENCODERS += h264_vaapi hevc_vaapi
-HWACCELS += mpeg2_vaapi h264_vaapi hevc_vaapi
+ENCODERS += h264_vaapi hevc_vaapi vp8_vaapi
+HWACCELS += mpeg2_vaapi h264_vaapi hevc_vaapi vp9_vaapi
FILTERS += deinterlace_vaapi scale_vaapi
FFMPEG_DIFFS += ffmpeg.vaapi_encode.diff
#if ENABLE_VAAPI
extern TVHCodec tvh_codec_vaapi_h264;
extern TVHCodec tvh_codec_vaapi_hevc;
+extern TVHCodec tvh_codec_vaapi_vp8;
#endif
#if ENABLE_OMX
#if ENABLE_VAAPI
tvh_codec_register(&tvh_codec_vaapi_h264);
tvh_codec_register(&tvh_codec_vaapi_hevc);
+ tvh_codec_register(&tvh_codec_vaapi_vp8);
#endif
#if ENABLE_OMX
.profiles = vaapi_hevc_profiles,
.profile_init = tvh_codec_profile_video_init,
};
+
+
+/* vp8_vaapi =============================================================== */
+
+static const AVProfile vaapi_vp8_profiles[] = {
+ { FF_PROFILE_UNKNOWN },
+};
+
+static int
+tvh_codec_profile_vaapi_vp8_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_vp8_class = {
+ {
+ .ic_super = (idclass_t *)&codec_profile_vaapi_class,
+ .ic_class = "codec_profile_vaapi_vp8",
+ .ic_caption = N_("vaapi_vp8")
+ },
+ .open = (codec_profile_open_meth)tvh_codec_profile_vaapi_vp8_open,
+};
+
+
+TVHVideoCodec tvh_codec_vaapi_vp8 = {
+ .name = "vp8_vaapi",
+ .size = sizeof(tvh_codec_profile_vaapi_t),
+ .idclass = &codec_profile_vaapi_vp8_class,
+ .profiles = vaapi_vp8_profiles,
+ .profile_init = tvh_codec_profile_video_init,
+};
break;
}
break;
+ case AV_CODEC_ID_VP8:
+ switch (avctx->profile) {
+ case FF_PROFILE_UNKNOWN:
+ check = VAProfileVP8Version0_3;
+ break;
+ default:
+ break;
+ }
+ break;
+ case AV_CODEC_ID_VP9:
+ switch (avctx->profile) {
+ case FF_PROFILE_UNKNOWN:
+ case FF_PROFILE_VP9_0:
+ check = VAProfileVP9Profile0;
+ break;
+ case FF_PROFILE_VP9_1:
+ check = VAProfileVP9Profile1;
+ break;
+ case FF_PROFILE_VP9_2:
+ check = VAProfileVP9Profile2;
+ break;
+ case FF_PROFILE_VP9_3:
+ check = VAProfileVP9Profile3;
+ break;
+ default:
+ break;
+ }
+ break;
default:
break;
}