27 const NewStreamInfoCB& new_stream_info_cb,
28 const EmitTextSampleCB& emit_sample_cb,
29 const uint8_t* descriptor,
30 const size_t descriptor_length);
35 bool Parse(
const uint8_t* buf,
int size, int64_t pts, int64_t dts)
override;
36 bool Flush()
override;
37 void Reset()
override;
40 using RowColReplacementMap =
41 std::unordered_map<uint8_t, std::unordered_map<uint8_t, std::string>>;
44 TextAlignment alignment;
51 std::vector<TextRow> rows;
52 RowColReplacementMap packet_26_replacements;
56 bool ParseInternal(
const uint8_t* data,
const size_t size,
const int64_t pts);
57 bool ParseDataBlock(
const int64_t pts,
58 const uint8_t* data_block,
59 const uint8_t packet_nr,
60 const uint8_t magazine,
61 TextRow& display_text);
63 TextRow BuildRow(
const uint8_t* data_block,
const uint8_t row)
const;
64 void ParsePacket26(
const uint8_t* data_block);
65 void UpdateNationalSubset(
const uint8_t national_subset[13][3]);
66 void SendCueStart(
const uint16_t index);
67 void SendCueEnd(
const uint16_t index,
const int64_t pts);
68 void SendTextHeartBeat(
const uint16_t index,
const int64_t pts);
70 static void SetPacket26ReplacementString(
71 RowColReplacementMap& replacement_map,
74 std::string&& replacement_string);
76 NewStreamInfoCB new_stream_info_cb_;
77 EmitTextSampleCB emit_sample_cb_;
79 std::unordered_map<uint16_t, std::string> languages_;
80 bool sent_info_ =
false;
83 std::unordered_map<uint16_t, TextBlock> page_state_;
84 uint8_t charset_code_;
85 char current_charset_[96][3];
87 int64_t last_end_pts_;