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);
272 PROMEKI_DATATYPE(Subtitle, DataTypeSubtitle, 1)
293 Subtitle(TimeStamp start, TimeStamp end, String text,
294 SubtitleAnchor anchor = SubtitleAnchor::Default);
305 Subtitle(TimeStamp start, TimeStamp end, String text, SubtitleAnchor anchor, Rect2Di32 region,
306 String speaker, Metadata metadata);
316 Subtitle(TimeStamp start, TimeStamp end, SubtitleSpan::List spans, SubtitleAnchor anchor,
317 Rect2Di32 region, String speaker, Metadata metadata);
319 Subtitle(const Subtitle &);
320 Subtitle(Subtitle &&) noexcept;
322 Subtitle &operator=(const Subtitle &);
323 Subtitle &operator=(Subtitle &&) noexcept;
328 const TimeStamp &start() const;
331 const TimeStamp &end() const;
334 TimeStamp::Duration duration() const;
344 const String &text() const;
347 const SubtitleSpan::List &spans() const;
350 const SubtitleAnchor &anchor() const;
357 const CaptionMode &mode() const;
378 int rollUpRows() const;
381 const Rect2Di32 ®ion() const;
384 const String &speaker() const;
387 const Metadata &metadata() const;
391 void setStart(const TimeStamp &v);
392 void setEnd(const TimeStamp &v);
400 void setText(const String &v);
403 void setSpans(SubtitleSpan::List v);
405 void setAnchor(const SubtitleAnchor &v);
406 void setMode(const CaptionMode &v);
407 void setRollUpRows(
int v);
408 void setRegion(const Rect2Di32 &v);
409 void setSpeaker(const String &v);
410 void setMetadata(const Metadata &v);
449 Subtitle wrapped(
int maxCols,
int maxRows) const;
455 bool isEmpty() const;
459 bool isActiveAt(const TimeStamp &t) const;
463 bool operator==(const Subtitle &o) const;
464 bool operator!=(const Subtitle &o)
const {
return !(*
this == o); }
467 JsonObject toJson()
const;
470 String toString()
const;
481 Error writeToStream(DataStream &s)
const;
487 template <u
int32_t V>
static Result<Subtitle> readFromStream(DataStream &s);
490 SharedPtr<SubtitleImpl> _d;
497struct SubtitleListImpl;
529 explicit SubtitleList(List<Subtitle> entries);
530 SubtitleList(
const SubtitleList &);
531 SubtitleList(SubtitleList &&) noexcept;
533 SubtitleList &operator=(const SubtitleList &);
534 SubtitleList &operator=(SubtitleList &&) noexcept;
539 bool isEmpty() const;
542 const Subtitle &at(
size_t i) const;
545 const Subtitle &operator[](
size_t i) const;
551 void append(const Subtitle &s);
560 void reserve(
size_t n);
572 int64_t findActiveAt(const TimeStamp &t) const;
579 int64_t findNextAfter(const TimeStamp &t) const;
585 SubtitleList findInRange(const TimeStamp &start, const TimeStamp &end) const;
609 SubtitleList snapToFrames(const FrameRate &frameRate) const;
614 const List<Subtitle> &entries() const;
618 bool operator==(const SubtitleList &o) const;
619 bool operator!=(const SubtitleList &o)
const {
return !(*
this == o); }
622 JsonObject toJson()
const;
625 String toString()
const;
628 SharedPtr<SubtitleListImpl> _d;