// Copyright 2016 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_WEBM_WEBM_COLOUR_PARSER_H_
#define MEDIA_WEBM_WEBM_COLOUR_PARSER_H_

#include "base/compiler_specific.h"
#include "media/base/color_space.h"
#include "media/base/hdr_metadata.h"
#include "media/webm/webm_parser.h"

namespace media {

// WebM color information, containing HDR metadata:
// http://www.webmproject.org/docs/container/#Colour
struct MEDIA_EXPORT WebMColorMetadata {
  unsigned int BitsPerChannel;
  unsigned int ChromaSubsamplingHorz;
  unsigned int ChromaSubsamplingVert;
  unsigned int CbSubsamplingHorz;
  unsigned int CbSubsamplingVert;
  unsigned int ChromaSitingHorz;
  unsigned int ChromaSitingVert;

  gfx::ColorSpace color_space;

  HDRMetadata hdr_metadata;

  WebMColorMetadata();
  WebMColorMetadata(const WebMColorMetadata& rhs);
};

// Parser for WebM MasteringMetadata within Colour element:
// http://www.webmproject.org/docs/container/#MasteringMetadata
class WebMMasteringMetadataParser : public WebMParserClient {
 public:
  WebMMasteringMetadataParser();
  ~WebMMasteringMetadataParser() OVERRIDE;

  MasteringMetadata GetMasteringMetadata() const { return mastering_metadata_; }

 private:
  // WebMParserClient implementation.
  bool OnFloat(int id, double val) OVERRIDE;

  MasteringMetadata mastering_metadata_;
  DISALLOW_COPY_AND_ASSIGN(WebMMasteringMetadataParser);
};

// Parser for WebM Colour element:
// http://www.webmproject.org/docs/container/#colour
class WebMColourParser : public WebMParserClient {
 public:
  WebMColourParser();
  ~WebMColourParser() OVERRIDE;

  void Reset();

  WebMColorMetadata GetWebMColorMetadata() const;

 private:
  // WebMParserClient implementation.
  WebMParserClient* OnListStart(int id) OVERRIDE;
  bool OnListEnd(int id) OVERRIDE;
  bool OnUInt(int id, int64_t val) OVERRIDE;

  int64_t matrix_coefficients_;
  int64_t bits_per_channel_;
  int64_t chroma_subsampling_horz_;
  int64_t chroma_subsampling_vert_;
  int64_t cb_subsampling_horz_;
  int64_t cb_subsampling_vert_;
  int64_t chroma_siting_horz_;
  int64_t chroma_siting_vert_;
  int64_t range_;
  int64_t transfer_characteristics_;
  int64_t primaries_;
  int64_t max_cll_;
  int64_t max_fall_;

  WebMMasteringMetadataParser mastering_metadata_parser_;
  bool mastering_metadata_parsed_;

  DISALLOW_COPY_AND_ASSIGN(WebMColourParser);
};

}  // namespace media

#endif  // MEDIA_WEBM_WEBM_COLOUR_PARSER_H_
