Commit 115af9fb authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/gpu/vaapi/AV1VaapiVideoDecoderDelegate: Implement FillGlobalMotionInfo()

Bug: 1000988
Test: video_decode_accelerator_tests
Change-Id: I83123233222398f62b622fcb596f49b1e114f4d1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2442212
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: default avatarAndres Calderon Jaramillo <andrescj@chromium.org>
Reviewed-by: default avatarSreerenj Balachandran <sreerenj.balachandran@intel.com>
Cr-Commit-Position: refs/heads/master@{#827599}
parent e67f5091
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "media/gpu/vaapi/vaapi_wrapper.h" #include "media/gpu/vaapi/vaapi_wrapper.h"
#include "third_party/libgav1/src/src/obu_parser.h" #include "third_party/libgav1/src/src/obu_parser.h"
#include "third_party/libgav1/src/src/utils/types.h" #include "third_party/libgav1/src/src/utils/types.h"
#include "third_party/libgav1/src/src/warp_prediction.h"
namespace media { namespace media {
namespace { namespace {
...@@ -178,6 +179,44 @@ void FillFilmGrainInfo(VAFilmGrainStructAV1& va_film_grain_info, ...@@ -178,6 +179,44 @@ void FillFilmGrainInfo(VAFilmGrainStructAV1& va_film_grain_info,
#undef COPY_FILM_GRAIN_FIELD2 #undef COPY_FILM_GRAIN_FIELD2
} }
void FillGlobalMotionInfo(
VAWarpedMotionParamsAV1 va_warped_motion[7],
const std::array<libgav1::GlobalMotion, libgav1::kNumReferenceFrameTypes>&
global_motion) {
// global_motion[0] (for kReferenceFrameIntra) is not used.
constexpr size_t kWarpedMotionSize = libgav1::kNumReferenceFrameTypes - 1;
for (size_t i = 0; i < kWarpedMotionSize; ++i) {
// Copy |global_motion| because SetupShear updates the affine variables of
// the |global_motion|.
auto gm = global_motion[i + 1];
switch (gm.type) {
case libgav1::kGlobalMotionTransformationTypeIdentity:
va_warped_motion[i].wmtype = VAAV1TransformationIdentity;
break;
case libgav1::kGlobalMotionTransformationTypeTranslation:
va_warped_motion[i].wmtype = VAAV1TransformationTranslation;
break;
case libgav1::kGlobalMotionTransformationTypeRotZoom:
va_warped_motion[i].wmtype = VAAV1TransformationRotzoom;
break;
case libgav1::kGlobalMotionTransformationTypeAffine:
va_warped_motion[i].wmtype = VAAV1TransformationAffine;
break;
default:
NOTREACHED() << "Invalid global motion transformation type, "
<< va_warped_motion[i].wmtype;
}
static_assert(ARRAY_SIZE(va_warped_motion[i].wmmat) == 8 &&
ARRAY_SIZE(gm.params) == 6,
"Invalid size of warp motion parameters");
for (size_t j = 0; j < 6; ++j)
va_warped_motion[i].wmmat[j] = gm.params[j];
va_warped_motion[i].wmmat[6] = 0;
va_warped_motion[i].wmmat[7] = 0;
va_warped_motion[i].invalid = !libgav1::SetupShear(&gm);
}
}
bool FillAV1PictureParameter(const AV1Picture& pic, bool FillAV1PictureParameter(const AV1Picture& pic,
const libgav1::ObuSequenceHeader& seq_header, const libgav1::ObuSequenceHeader& seq_header,
const AV1ReferenceFrameVector& ref_frames, const AV1ReferenceFrameVector& ref_frames,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment