#ifndef MEDIA_FORMATS_HLS_RENDITION_H_
#define MEDIA_FORMATS_HLS_RENDITION_H_
#include <list>
#include <optional>
#include <string>
#include "base/containers/flat_map.h"
#include "base/memory/raw_ptr.h"
#include "base/types/pass_key.h"
#include "media/base/media_export.h"
#include "media/formats/hls/parse_status.h"
#include "media/formats/hls/rendition_group.h"
#include "media/formats/hls/tags.h"
#include "media/formats/hls/types.h"
#include "url/gurl.h"
namespace media::hls {
class MEDIA_EXPORT Rendition {
public:
struct CtorArgs;
using Group = RenditionGroup;
explicit Rendition(base::PassKey<Group>, CtorArgs args);
static Rendition CreateRenditionForTesting(CtorArgs args);
Rendition(const Rendition&) = delete;
Rendition(Rendition&&);
Rendition& operator=(const Rendition&) = delete;
Rendition& operator=(Rendition&&) = delete;
~Rendition();
const std::optional<GURL>& GetUri() const { return uri_; }
const std::string& GetName() const { return name_; }
const std::optional<std::string>& GetLanguage() const { return language_; }
const std::optional<std::string>& GetAssociatedLanguage() const {
return associated_language_;
}
const std::optional<types::StableId>& GetStableRenditionId() const {
return stable_rendition_id_;
}
const std::vector<std::string>& GetCharacteristics() const {
return characteristics_;
}
const std::optional<types::AudioChannels>& GetChannels() const {
return channels_;
}
bool MayAutoSelect() const { return autoselect_; }
private:
explicit Rendition(CtorArgs args);
std::optional<GURL> uri_;
std::string name_;
std::optional<std::string> language_;
std::optional<std::string> associated_language_;
std::optional<types::StableId> stable_rendition_id_;
std::vector<std::string> characteristics_;
std::optional<types::AudioChannels> channels_;
bool autoselect_ = false;
};
struct Rendition::CtorArgs {
decltype(Rendition::uri_) uri;
decltype(Rendition::name_) name;
decltype(Rendition::language_) language;
decltype(Rendition::associated_language_) associated_language;
decltype(Rendition::stable_rendition_id_) stable_rendition_id;
decltype(Rendition::channels_) channels;
decltype(Rendition::autoselect_) autoselect;
};
}
#endif