#ifndef ASH_PROJECTOR_PROJECTOR_METADATA_MODEL_H_
#define ASH_PROJECTOR_PROJECTOR_METADATA_MODEL_H_
#include <memory>
#include <string>
#include <vector>
#include "ash/ash_export.h"
#include "base/time/time.h"
#include "base/values.h"
#include "media/mojo/mojom/speech_recognition_result.h"
namespace ash {
enum class ASH_EXPORT RecognitionStatus : int {
kIncomplete = 0,
kComplete = 1,
kError = 2
};
enum class ASH_EXPORT MetadataVersionNumber : int {
kUnknown = 0,
kV1 = 1,
kV2 = 2
};
class MetadataItem {
public:
MetadataItem(const base::TimeDelta start_time,
const base::TimeDelta end_time,
const std::string& text);
MetadataItem(const MetadataItem&) = delete;
MetadataItem& operator=(const MetadataItem&) = delete;
virtual ~MetadataItem();
base::TimeDelta& start_time() { return start_time_; }
base::TimeDelta& end_time() { return end_time_; }
std::string& text() { return text_; }
virtual base::Value::Dict ToJson() = 0;
protected:
base::TimeDelta start_time_;
base::TimeDelta end_time_;
std::string text_;
};
class ASH_EXPORT ProjectorKeyIdea : public MetadataItem {
public:
ProjectorKeyIdea(const base::TimeDelta start_time,
const base::TimeDelta end_time,
const std::string& text = std::string());
ProjectorKeyIdea(const ProjectorKeyIdea&) = delete;
ProjectorKeyIdea& operator=(const ProjectorKeyIdea&) = delete;
~ProjectorKeyIdea() override;
base::Value::Dict ToJson() override;
};
class ASH_EXPORT ProjectorTranscript : public MetadataItem {
public:
ProjectorTranscript(
const base::TimeDelta start_time,
const base::TimeDelta end_time,
int group_id,
const std::string& text,
const std::vector<media::HypothesisParts>& hypothesis_parts);
ProjectorTranscript(const ProjectorTranscript&) = delete;
ProjectorTranscript& operator=(const ProjectorTranscript&) = delete;
~ProjectorTranscript() override;
base::Value::Dict ToJson() override;
std::vector<media::HypothesisParts>& hypothesis_parts() {
return hypothesis_parts_;
}
private:
const int group_id_;
std::vector<media::HypothesisParts> hypothesis_parts_;
};
class ASH_EXPORT ProjectorMetadata {
public:
ProjectorMetadata();
ProjectorMetadata(const ProjectorMetadata&) = delete;
ProjectorMetadata& operator=(const ProjectorMetadata&) = delete;
~ProjectorMetadata();
void SetCaptionLanguage(const std::string& language);
void AddTranscript(std::unique_ptr<ProjectorTranscript> transcript);
void SetSpeechRecognitionStatus(RecognitionStatus status);
void SetMetadataVersionNumber(MetadataVersionNumber version);
void MarkKeyIdea();
std::string Serialize();
size_t GetTranscriptsCount() const { return transcripts_.size(); }
private:
base::Value::Dict ToJson();
void AddSentenceTranscripts(
std::vector<std::unique_ptr<ProjectorTranscript>> sentence_transcripts);
std::vector<std::unique_ptr<ProjectorTranscript>> transcripts_;
std::vector<std::unique_ptr<ProjectorKeyIdea>> key_ideas_;
std::string caption_language_;
bool should_mark_key_idea_ = false;
RecognitionStatus speech_recognition_status_ = RecognitionStatus::kIncomplete;
MetadataVersionNumber metadata_version_number_;
};
}
#endif