chromium/media/formats/hls/tags.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef MEDIA_FORMATS_HLS_TAGS_H_
#define MEDIA_FORMATS_HLS_TAGS_H_

#include <optional>
#include <string>
#include <vector>

#include "base/time/time.h"
#include "media/base/media_export.h"
#include "media/formats/hls/parse_status.h"
#include "media/formats/hls/source_string.h"
#include "media/formats/hls/tag_name.h"
#include "media/formats/hls/types.h"
#include "media/formats/hls/variable_dictionary.h"

namespace media::hls {

class TagItem;

// All currently implemented HLS tag types.
// For organization, these appear in the same order as in `tag_name.h`.

// Represents the contents of the #EXTM3U tag
struct MEDIA_EXPORT M3uTag {};

// Represents the contents of the #EXT-X-DEFINE tag
struct MEDIA_EXPORT XDefineTag {};

// Represents the contents of the #EXT-X-INDEPENDENT-SEGMENTS tag
struct MEDIA_EXPORT XIndependentSegmentsTag {};

// Represents the contents of the #EXT-X-VERSION tag
struct MEDIA_EXPORT XVersionTag {};

enum class MediaType {};

// Represents the contents of the #EXT-X-MEDIA tag
struct MEDIA_EXPORT XMediaTag {};

// Represents the contents of the #EXT-X-STREAM-INF tag
struct MEDIA_EXPORT XStreamInfTag {};

// Represents the contents of the #EXTINF tag
struct MEDIA_EXPORT InfTag {};

// Represents the contents of the #EXT-X-BITRATE tag.
struct MEDIA_EXPORT XBitrateTag {};

// Represents the contents of the #EXT-X-BYTERANGE tag.
struct MEDIA_EXPORT XByteRangeTag {};

// Represents the contents of the #EXT-X-DISCONTINUITY tag
struct MEDIA_EXPORT XDiscontinuityTag {};

// Represents the contents of the #EXT-X-DISCONTINUITY-SEQUENCE tag.
struct MEDIA_EXPORT XDiscontinuitySequenceTag {};

// Represents the contents of the #EXT-X-ENDLIST tag
struct MEDIA_EXPORT XEndListTag {};

// Represents the contents of the #EXT-X-GAP tag
struct MEDIA_EXPORT XGapTag {};

// Represents the contents of the #EXT-X-I-FRAMES-ONLY tag
struct MEDIA_EXPORT XIFramesOnlyTag {};

// Represents the contents of the #EXT-X-MAP tag.
struct MEDIA_EXPORT XMapTag {};

// Represents the contents of the #EXT-X-MEDIA-SEQUENCE tag.
struct MEDIA_EXPORT XMediaSequenceTag {};

// Represents the contents of the #EXT-X-PART tag.
struct MEDIA_EXPORT XPartTag {};

// Represents the contents of the #EXT-PART-INF tag.
struct MEDIA_EXPORT XPartInfTag {};

enum class PlaylistType {};

// Represents the contents of the #EXT-X-PLAYLIST-TYPE tag
struct MEDIA_EXPORT XPlaylistTypeTag {};

// Represents the contents of the #EXT-X-SERVER-CONTROL tag.
struct MEDIA_EXPORT XServerControlTag {};

// Represents the contents of the #EXT-X-TARGETDURATION tag.
struct MEDIA_EXPORT XTargetDurationTag {};

struct MEDIA_EXPORT XSkipTag {};

// A server MAY omit adding an attribute to an EXT-X-RENDITION-REPORT tag - even
// a mandatory attribute - if its value is the same as that of the Rendition
// Report of the Media Playlist to which the EXT-X-RENDITION-REPORT tag is being
// added. Doing so reduces the size of the Rendition Report.
struct MEDIA_EXPORT XRenditionReportTag {};

// The EXT-X-PROGRAM-DATE-TIME tag associates the first sample of a Media
// Segment with an absolute date and/or time. It applies only to the next
// Media Segment.
struct MEDIA_EXPORT XProgramDateTimeTag {};

enum class XKeyTagMethod {};

enum class XKeyTagKeyFormat {};

struct MEDIA_EXPORT XKeyTag {};

struct MEDIA_EXPORT XSessionKeyTag {};

}  // namespace media::hls

#endif  // MEDIA_FORMATS_HLS_TAGS_H_