// 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_TEST_IMAGE_H_
#define MEDIA_GPU_TEST_IMAGE_H_

#include <string>

#include "base/files/file_path.h"
#include "base/files/memory_mapped_file.h"
#include "media/base/video_transformation.h"
#include "media/base/video_types.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"

namespace media {
namespace test {

// The Image class provides functionality to load image files and manage their
// properties such as format, size, checksums,... Currently only raw yuv files
// are supported.
class Image {
 public:
  explicit Image(const base::FilePath& file_path);

  Image(const Image&) = delete;
  Image& operator=(const Image&) = delete;

  ~Image();

  // Load the image file and accompanying metadata from disk.
  bool Load();
  // Returns true if the Image file was loaded.
  bool IsLoaded() const;

  // Load image metadata from the json file accompanying the image file.
  bool LoadMetadata();
  // Return true if image metadata is already loaded.
  bool IsMetadataLoaded() const;

  // Get the image data.
  uint8_t* Data() const;
  // Get the image data size.
  size_t DataSize() const;

  // Get the image pixel format.
  VideoPixelFormat PixelFormat() const;
  // Get the image size.
  const gfx::Size& Size() const;
  // Get the visible rectangle of the image.
  const gfx::Rect& VisibleRect() const;
  // Get the image rotation info.
  VideoRotation Rotation() const;
  // Get the image checksum.
  const char* Checksum() const;

 private:
  // The image file path, can be absolute or relative to the test data path.
  base::FilePath file_path_;

  // The mapped image data.
  // TODO(dstaessens@) Investigate creating const video frames from const data
  // so we can remove mutable here.
  mutable base::MemoryMappedFile mapped_file_;
  // The image pixel format.
  VideoPixelFormat pixel_format_ = PIXEL_FORMAT_UNKNOWN;
  // The image size.
  gfx::Size size_;
  // The visible rectangle of the image.
  gfx::Rect visible_rect_;
  // The rotation info of image.
  VideoRotation rotation_;
  // The image md5 checksum.
  std::string checksum_;
};

}  // namespace test
}  // namespace media

#endif  // MEDIA_GPU_TEST_IMAGE_H_
