11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
24PROMEKI_NAMESPACE_BEGIN
32struct SubtitleSpanImpl;
87 explicit SubtitleSpan(String text);
97 SubtitleSpan(String text,
bool bold,
bool italic,
bool underline, Color color = Color());
99 SubtitleSpan(
const SubtitleSpan &);
100 SubtitleSpan(SubtitleSpan &&) noexcept;
102 SubtitleSpan &operator=(const SubtitleSpan &);
103 SubtitleSpan &operator=(SubtitleSpan &&) noexcept;
108 const String &text() const;
117 bool underline() const;
127 const Color &color() const;
132 const Color &backgroundColor() const;
137 const Color &edgeColor() const;
141 const SubtitleEdgeStyle &edgeStyle() const;
146 const SubtitleFontFace &fontFace() const;
150 const SubtitleOpacity &foregroundOpacity() const;
153 const SubtitleOpacity &backgroundOpacity() const;
156 const SubtitleOpacity &edgeOpacity() const;
159 bool hasStyle() const;
162 bool isEmpty() const;
166 void setText(String v);
167 void setBold(
bool v);
168 void setItalic(
bool v);
169 void setUnderline(
bool v);
170 void setColor(const Color &v);
171 void setBackgroundColor(const Color &v);
172 void setEdgeColor(const Color &v);
173 void setEdgeStyle(const SubtitleEdgeStyle &v);
174 void setFontFace(const SubtitleFontFace &v);
175 void setForegroundOpacity(const SubtitleOpacity &v);
176 void setBackgroundOpacity(const SubtitleOpacity &v);
177 void setEdgeOpacity(const SubtitleOpacity &v);
181 bool operator==(const SubtitleSpan &o) const;
182 bool operator!=(const SubtitleSpan &o)
const {
return !(*
this == o); }
185 JsonObject toJson()
const;
188 String toString()
const;
191 using List = ::promeki::List<SubtitleSpan>;
194 SharedPtr<SubtitleSpanImpl> _d;
198DataStream &operator<<(DataStream &stream,
const SubtitleSpan &span);
201DataStream &operator>>(DataStream &stream, SubtitleSpan &span);
279 PROMEKI_DATATYPE(Subtitle, DataTypeSubtitle, 1)
300 Subtitle(TimeStamp start, TimeStamp end, String text,
301 SubtitleAnchor anchor = SubtitleAnchor::Default);
312 Subtitle(TimeStamp start, TimeStamp end, String text, SubtitleAnchor anchor, Rect2Di32 region,
313 String speaker, Metadata metadata);
323 Subtitle(TimeStamp start, TimeStamp end, SubtitleSpan::List spans, SubtitleAnchor anchor,
324 Rect2Di32 region, String speaker, Metadata metadata);
326 Subtitle(const Subtitle &);
327 Subtitle(Subtitle &&) noexcept;
329 Subtitle &operator=(const Subtitle &);
330 Subtitle &operator=(Subtitle &&) noexcept;
335 const TimeStamp &start() const;
338 const TimeStamp &end() const;
341 TimeStamp::Duration duration() const;
351 const String &text() const;
354 const SubtitleSpan::List &spans() const;
357 const SubtitleAnchor &anchor() const;
364 const CaptionMode &mode() const;
385 int rollUpRows() const;
388 const Rect2Di32 ®ion() const;
391 const String &speaker() const;
410 bool partial() const;
413 const Metadata &metadata() const;
417 void setStart(const TimeStamp &v);
418 void setEnd(const TimeStamp &v);
426 void setText(const String &v);
429 void setSpans(SubtitleSpan::List v);
431 void setAnchor(const SubtitleAnchor &v);
432 void setMode(const CaptionMode &v);
433 void setRollUpRows(
int v);
434 void setRegion(const Rect2Di32 &v);
435 void setSpeaker(const String &v);
436 void setPartial(
bool v);
437 void setMetadata(const Metadata &v);
476 Subtitle wrapped(
int maxCols,
int maxRows) const;
482 bool isEmpty() const;
486 bool isActiveAt(const TimeStamp &t) const;
490 bool operator==(const Subtitle &o) const;
491 bool operator!=(const Subtitle &o)
const {
return !(*
this == o); }
494 JsonObject toJson()
const;
497 String toString()
const;
508 Error writeToStream(DataStream &s)
const;
514 template <u
int32_t V>
static Result<Subtitle> readFromStream(DataStream &s);
517 SharedPtr<SubtitleImpl> _d;
524struct SubtitleListImpl;
556 explicit SubtitleList(List<Subtitle> entries);
557 SubtitleList(
const SubtitleList &);
558 SubtitleList(SubtitleList &&) noexcept;
560 SubtitleList &operator=(const SubtitleList &);
561 SubtitleList &operator=(SubtitleList &&) noexcept;
566 bool isEmpty() const;
569 const Subtitle &at(
size_t i) const;
572 const Subtitle &operator[](
size_t i) const;
578 void append(const Subtitle &s);
587 void reserve(
size_t n);
599 int64_t findActiveAt(const TimeStamp &t) const;
606 int64_t findNextAfter(const TimeStamp &t) const;
612 SubtitleList findInRange(const TimeStamp &start, const TimeStamp &end) const;
636 SubtitleList snapToFrames(const FrameRate &frameRate) const;
641 const List<Subtitle> &entries() const;
645 bool operator==(const SubtitleList &o) const;
646 bool operator!=(const SubtitleList &o)
const {
return !(*
this == o); }
649 JsonObject toJson()
const;
652 String toString()
const;
655 SharedPtr<SubtitleListImpl> _d;