// Copyright 2014 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_FORMATS_WEBM_WEBM_WEBVTT_PARSER_H_
#define COBALT_MEDIA_FORMATS_WEBM_WEBM_WEBVTT_PARSER_H_

#include <stdint.h>

#include <string>

#include "base/basictypes.h"
#include "cobalt/media/base/media_export.h"

namespace media {

class MEDIA_EXPORT WebMWebVTTParser {
 public:
  // Utility function to parse the WebVTT cue from a byte stream.
  static void Parse(const uint8_t* payload,
                    int payload_size,
                    std::string* id,
                    std::string* settings,
                    std::string* content);

 private:
  // The payload is the embedded WebVTT cue, stored in a WebM block.
  // The parser treats this as a UTF-8 byte stream.
  WebMWebVTTParser(const uint8_t* payload, int payload_size);

  // Parse the cue identifier, settings, and content from the stream.
  void Parse(std::string* id, std::string* settings, std::string* content);
  // Remove a byte from the stream, advancing the stream pointer.
  // Returns true if a character was returned; false means "end of stream".
  bool GetByte(uint8_t* byte);

  // Backup the stream pointer.
  void UngetByte();

  // Parse a line of text from the stream.
  void ParseLine(std::string* line);

  // Represents the portion of the stream that has not been consumed yet.
  const uint8_t* ptr_;
  const uint8_t* const ptr_end_;

  DISALLOW_COPY_AND_ASSIGN(WebMWebVTTParser);
};

}  // namespace media

#endif  // COBALT_MEDIA_FORMATS_WEBM_WEBM_WEBVTT_PARSER_H_
