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

#include <stdint.h>

#include "base/macros.h"

namespace media {

class BitReader;

namespace mp2t {

class TsPacket {
 public:
  static const int kPacketSize = 188;

  // Return the number of bytes to discard
  // to be synchronized on a TS syncword.
  static int Sync(const uint8_t* buf, int size);

  // Parse a TS packet.
  // Return a TsPacket only when parsing was successful.
  // Return NULL otherwise.
  static TsPacket* Parse(const uint8_t* buf, int size);

  TsPacket(const TsPacket&) = delete;
  TsPacket& operator=(const TsPacket&) = delete;

  ~TsPacket();

  // TS header accessors.
  bool payload_unit_start_indicator() const {
    return payload_unit_start_indicator_;
  }
  int pid() const { return pid_; }
  int continuity_counter() const { return continuity_counter_; }
  bool discontinuity_indicator() const { return discontinuity_indicator_; }
  bool random_access_indicator() const { return random_access_indicator_; }

  // Return the offset and the size of the payload.
  const uint8_t* payload() const { return payload_; }
  int payload_size() const { return payload_size_; }

 private:
  TsPacket();

  // Parse an Mpeg2 TS header.
  // The buffer size should be at least |kPacketSize|
  bool ParseHeader(const uint8_t* buf);
  bool ParseAdaptationField(BitReader* bit_reader,
                            int adaptation_field_length);

  // Size of the payload.
  const uint8_t* payload_;
  int payload_size_;

  // TS header.
  bool payload_unit_start_indicator_;
  int pid_;
  int continuity_counter_;

  // Params from the adaptation field.
  bool discontinuity_indicator_;
  bool random_access_indicator_;
};

}  // namespace mp2t
}  // namespace media

#endif  // MEDIA_FORMATS_MP2T_TS_PACKET_H_
