// Copyright 2015 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.

#include "base/files/memory_mapped_file.h"
#include "cobalt/media/base/test_data_util.h"
#include "cobalt/media/filters/ivf_parser.h"
#include "starboard/memory.h"
#include "starboard/types.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace cobalt {
namespace media {

TEST(IvfParserTest, StreamFileParsing) {
  base::FilePath file_path = GetTestDataFilePath("test-25fps.vp8");

  base::MemoryMappedFile stream;
  ASSERT_TRUE(stream.Initialize(file_path)) << "Couldn't open stream file: "
                                            << file_path.MaybeAsASCII();

  IvfParser parser;
  IvfFileHeader file_header = {};

  EXPECT_TRUE(parser.Initialize(stream.data(), stream.length(), &file_header));

  // Check file header fields.
  EXPECT_EQ(0, SbMemoryCompare(file_header.signature, kIvfHeaderSignature,
                               sizeof(file_header.signature)));
  EXPECT_EQ(0, file_header.version);
  EXPECT_EQ(sizeof(IvfFileHeader), file_header.header_size);
  EXPECT_EQ(0x30385056u, file_header.fourcc);  // VP80
  EXPECT_EQ(320u, file_header.width);
  EXPECT_EQ(240u, file_header.height);
  EXPECT_EQ(50u, file_header.timebase_denum);
  EXPECT_EQ(2u, file_header.timebase_num);
  EXPECT_EQ(250u, file_header.num_frames);

  IvfFrameHeader frame_header;
  size_t num_parsed_frames = 0;
  const uint8_t* payload = NULL;
  while (parser.ParseNextFrame(&frame_header, &payload)) {
    ++num_parsed_frames;
    EXPECT_TRUE(payload != NULL);

    // Only check the first frame.
    if (num_parsed_frames == 1u) {
      EXPECT_EQ(14788u, frame_header.frame_size);
      EXPECT_EQ(0u, frame_header.timestamp);
      EXPECT_EQ(
          static_cast<ptrdiff_t>(sizeof(file_header) + sizeof(frame_header)),
          payload - stream.data());
    }
  }

  EXPECT_EQ(file_header.num_frames, num_parsed_frames);
}

}  // namespace media
}  // namespace cobalt
