// 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 COBALT_MEDIA_FILTERS_VP9_UNCOMPRESSED_HEADER_PARSER_H_
#define COBALT_MEDIA_FILTERS_VP9_UNCOMPRESSED_HEADER_PARSER_H_

#include "cobalt/media/filters/vp9_parser.h"
#include "cobalt/media/filters/vp9_raw_bits_reader.h"

namespace cobalt {
namespace media {

class Vp9UncompressedHeaderParser {
 public:
  explicit Vp9UncompressedHeaderParser(Vp9Parser::Context* context);

  // Parses VP9 uncompressed header in |stream| with |frame_size| into |fhdr|.
  // Returns true if no error.
  bool Parse(const uint8_t* stream, off_t frame_size, Vp9FrameHeader* fhdr);

 private:
  uint8_t ReadProfile();
  bool VerifySyncCode();
  bool ReadColorConfig(Vp9FrameHeader* fhdr);
  void ReadFrameSize(Vp9FrameHeader* fhdr);
  bool ReadFrameSizeFromRefs(Vp9FrameHeader* fhdr);
  void ReadRenderSize(Vp9FrameHeader* fhdr);
  Vp9InterpolationFilter ReadInterpolationFilter();
  void ResetLoopfilter();
  void SetupPastIndependence(Vp9FrameHeader* fhdr);
  void ReadLoopFilterParams();
  void ReadQuantizationParams(Vp9QuantizationParams* quants);
  int8_t ReadDeltaQ();
  uint8_t ReadProb();
  bool ReadSegmentationParams();
  bool ReadTileInfo(Vp9FrameHeader* fhdr);

  // Raw bits reader for uncompressed frame header.
  Vp9RawBitsReader reader_;

  Vp9Parser::Context* context_;

  DISALLOW_COPY_AND_ASSIGN(Vp9UncompressedHeaderParser);
};

}  // namespace media
}  // namespace cobalt

#endif  // COBALT_MEDIA_FILTERS_VP9_UNCOMPRESSED_HEADER_PARSER_H_
