// Copyright 2019 The Chromium OS 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 ARC_CODEC_TEST_VIDEO_FRAME_H_
#define ARC_CODEC_TEST_VIDEO_FRAME_H_

#include <fstream>
#include <memory>
#include <string>

#include "arc/codec-test/common.h"
#include "arc/codec-test/md5.h"

namespace android {

// The helper class to convert video frame data to I420 format and make a copy
// of planes, cropped within the visible window.
class VideoFrame {
 public:
  // Pre-check the validity of input parameters.
  static std::unique_ptr<VideoFrame> Create(const uint8_t* data,
                                            size_t data_size,
                                            const Size& coded_size,
                                            const Size& visible_size,
                                            int32_t color_format);
  VideoFrame() = delete;
  ~VideoFrame() = default;

  enum {
    // Android color format similar to I420.
    YUV_420_PLANAR = 0x13,
    // Android color format which is flexible. For Chrome OS devices, it may be
    // either YV12 or NV12 as HAL pixel format.
    // Note: This format is not able to parse, client is required to call
    //       MatchHalFormatByGoldenMD5() first to identify the corresponding HAL
    //       pixel format.
    YUV_420_FLEXIBLE = 0x7f420888,

    // NV12: semiplanar = true, crcb_swap = false.
    HAL_PIXEL_FORMAT_NV12 = 0x3231564e,
    // YV12: semiplanar = false, crcb_swap = true.
    HAL_PIXEL_FORMAT_YV12 = 0x32315659,
  };

  // Verify the calculated MD5 of video frame by comparing to |golden|.
  // It will call MatchHalFormatByGoldenMD5() to find corresponding HAL format
  // if current color format is YUV_420_FLEXIBLE
  bool VerifyMD5(const std::string& golden);

  // Write video frame planes to |output_file| as I420 format.
  bool WriteFrame(std::ofstream* output_file) const;

  int32_t color_format() const { return color_format_; }

 private:
  VideoFrame(const uint8_t* data,
             const Size& coded_size,
             const Size& visible_size,
             int32_t color_format);

  // Convert frame data from source |data_| as format |curr_format| to
  // destination |frame_data_| as I420 and make a copy, with |visible_size_| as
  // crop window.
  void CopyAndConvertToI420Frame(int32_t curr_format);

  // Try to match corresponding HAL pixel format by comparing to |golden| MD5.
  // Return true on found and overwrite |color_format_| to HAL format.
  bool MatchHalFormatByGoldenMD5(const std::string& golden);

  // Compute and return MD5 for video frame planes as I420 format.
  std::string ComputeMD5FromFrame() const;

  // Return True if current color format is YUV_420_FLEXIBLE.
  bool IsFlexibleFormat() const;

  // The frame data returned by decoder.
  const uint8_t* data_;
  // The specified coded size from output format.
  Size coded_size_;
  // The specified visible size from output format.
  Size visible_size_;
  // The specified color format from output format. It may be overwritten by
  // MatchHalFormatByGoldenMD5().
  int32_t color_format_;

  // Converted frame data stored by planes. [0]:Y, [1]:U, [2]:V
  std::unique_ptr<uint8_t[]> frame_data_[3];
};

}  // namespace android

#endif  // ARC_CODEC_TEST_VIDEO_FRAME_H_
