vaapi-add-av1-support.patch 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. From 1245d8c56a0e9197e20f73b33b31f2bf6cfbe4bd Mon Sep 17 00:00:00 2001
  2. From: Xuanxi Leng <xuanxi.leng@intel.com>
  3. Date: Fri, 14 Oct 2022 09:36:39 -0400
  4. Subject: [PATCH] VaVDA: Add 'VDAVideoDecoder' support for AV1.
  5. This CL adds 'VDAVideoDecoder' support for AV1.
  6. Bug: 1325824
  7. Change-Id: I7787761c080aba680543e173bef12254ab7ccafe
  8. ---
  9. diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
  10. index 37e3520..4e77924 100644
  11. --- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
  12. +++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
  13. @@ -41,6 +41,7 @@
  14. #include "media/gpu/vaapi/vaapi_utils.h"
  15. #include "media/gpu/vaapi/vp8_vaapi_video_decoder_delegate.h"
  16. #include "media/gpu/vaapi/vp9_vaapi_video_decoder_delegate.h"
  17. +#include "media/gpu/vaapi/av1_vaapi_video_decoder_delegate.h"
  18. #include "media/gpu/vp8_decoder.h"
  19. #include "media/gpu/vp9_decoder.h"
  20. #include "media/video/picture.h"
  21. @@ -229,6 +230,12 @@
  22. decoder_delegate_ = accelerator.get();
  23. decoder_.reset(new VP9Decoder(std::move(accelerator), profile,
  24. config.container_color_space));
  25. + } else if (profile >= AV1PROFILE_MIN && profile <= AV1PROFILE_MAX) {
  26. + auto accelerator =
  27. + std::make_unique<AV1VaapiVideoDecoderDelegate>(this, vaapi_wrapper_);
  28. + decoder_delegate_ = accelerator.get();
  29. + decoder_.reset(new AV1Decoder(std::move(accelerator), profile,
  30. + config.container_color_space));
  31. } else {
  32. VLOGF(1) << "Unsupported profile " << GetProfileName(profile);
  33. return false;
  34. @@ -1196,12 +1203,11 @@
  35. VaapiVideoDecodeAccelerator::GetSupportedProfiles() {
  36. VideoDecodeAccelerator::SupportedProfiles profiles =
  37. VaapiWrapper::GetSupportedDecodeProfiles();
  38. - // VaVDA never supported VP9 Profile 2, AV1 and HEVC, but VaapiWrapper does.
  39. + // VaVDA never supported VP9 Profile 2 and HEVC, but VaapiWrapper does.
  40. // Filter them out.
  41. base::EraseIf(profiles, [](const auto& profile) {
  42. VideoCodec codec = VideoCodecProfileToVideoCodec(profile.profile);
  43. - return profile.profile == VP9PROFILE_PROFILE2 ||
  44. - codec == VideoCodec::kAV1 || codec == VideoCodec::kHEVC;
  45. + return profile.profile == VP9PROFILE_PROFILE2 || codec == VideoCodec::kHEVC;
  46. });
  47. return profiles;
  48. }