// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_GPU_VAAPI_TEST_UTILS_H_
#define MEDIA_GPU_VAAPI_TEST_UTILS_H_

#include <stddef.h>
#include <stdint.h>
#include <va/va.h>

#include <string>

// This has to be included first.
// See http://code.google.com/p/googletest/issues/detail?id=371
#include "testing/gtest/include/gtest/gtest.h"

#include "base/cxx17_backports.h"
#include "ui/gfx/geometry/size.h"

namespace media {

class ScopedVAImage;

namespace vaapi_test_utils {

struct TestParam {
  const char* test_name;
  const char* filename;
};

std::string TestParamToString(
    const testing::TestParamInfo<TestParam>& param_info);

constexpr size_t kMaxNumberPlanes = base::size(VAImage().pitches);
static_assert(kMaxNumberPlanes <= 3u, "The number of planes should be <= 3");
static_assert(
    base::size(VAImage().pitches) == base::size(VAImage().offsets),
    "The number of VAImage pitches is not equal to the number of offsets");

// A structure to hold generic image decodes in planar format.
struct DecodedImage {
  uint32_t fourcc;
  uint32_t number_of_planes;  // Can not be greater than kMaxNumberPlanes.
  gfx::Size size;
  struct {
    uint8_t* data;
    int stride;
  } planes[kMaxNumberPlanes];
};

// Takes a ScopedVAImage and returns a DecodedImage object that represents
// the same decoded result.
DecodedImage ScopedVAImageToDecodedImage(const ScopedVAImage* scoped_va_image);

// Compares the result of sw decoding |reference_image| with |hw_decoded_image|
// using SSIM. Returns true if all conversions work and SSIM is at least
// |min_ssim|, or false otherwise. Note that |reference_image| must be given in
// I420 format.
bool CompareImages(const DecodedImage& reference_image,
                   const DecodedImage& hw_decoded_image,
                   double min_ssim = 0.995);

}  // namespace vaapi_test_utils
}  // namespace media

#endif  // MEDIA_GPU_VAAPI_TEST_UTILS_H_
