28 const NewStreamInfoCB& new_stream_info_cb,
29 const EmitTextSampleCB& emit_sample_cb,
30 const uint8_t* descriptor,
31 const size_t descriptor_length);
36 bool Parse(
const uint8_t* buf,
int size, int64_t pts, int64_t dts)
override;
37 bool Flush()
override;
38 void Reset()
override;
41 using RowColReplacementMap =
42 std::unordered_map<uint8_t, std::unordered_map<uint8_t, std::string>>;
45 TextAlignment alignment;
52 std::vector<TextRow> rows;
53 RowColReplacementMap packet_26_replacements;
57 bool ParseInternal(
const uint8_t* data,
const size_t size,
const int64_t pts);
58 bool ParseDataBlock(
const int64_t pts,
59 const uint8_t* data_block,
60 const uint8_t packet_nr,
61 const uint8_t magazine,
62 TextRow& display_text);
64 TextRow BuildRow(
const uint8_t* data_block,
const uint8_t row)
const;
65 void ParsePacket26(
const uint8_t* data_block);
66 void UpdateNationalSubset(
const uint8_t national_subset[13][3]);
67 void SendCueStart(
const uint16_t index);
68 void SendCueEnd(
const uint16_t index,
const int64_t pts);
69 void SendTextHeartBeat(
const uint16_t index,
const int64_t pts);
71 static void SetPacket26ReplacementString(
72 RowColReplacementMap& replacement_map,
75 std::string&& replacement_string);
77 NewStreamInfoCB new_stream_info_cb_;
78 EmitTextSampleCB emit_sample_cb_;
80 std::unordered_map<uint16_t, std::string> languages_;
81 bool sent_info_ =
false;
84 std::unordered_map<uint16_t, TextBlock> page_state_;
85 uint8_t charset_code_;
86 char current_charset_[96][3];
88 int64_t last_end_pts_;