refactoring: improve function name & docs for parsing teletext PMT descriptor

This commit is contained in:
Moritz Bunkus 2023-12-13 18:53:17 +01:00
parent 68064b2f52
commit b8b6974549
No known key found for this signature in database
GPG Key ID: 74AF00ADF2E32C85
2 changed files with 19 additions and 18 deletions

View File

@ -737,29 +737,22 @@ track_c::parse_dts_pmt_descriptor(pmt_descriptor_t const &,
}
bool
track_c::parse_srt_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor,
pmt_pid_info_t const &pmt_pid_info) {
track_c::parse_teletext_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor,
pmt_pid_info_t const &pmt_pid_info) {
if (pmt_pid_info.stream_type != stream_type_e::iso_13818_pes_private)
return false;
auto buffer = reinterpret_cast<unsigned char const *>(&pmt_descriptor + 1);
auto num_entries = static_cast<unsigned int>(pmt_descriptor.length) / 5;
mxdebug_if(reader.m_debug_pat_pmt, fmt::format("parse_srt_pmt_descriptor: Teletext PMT descriptor, {0} entries\n", num_entries));
mxdebug_if(reader.m_debug_pat_pmt, fmt::format("parse_teletext_pmt_descriptor: Teletext PMT descriptor, {0} entries\n", num_entries));
for (auto idx = 0u; idx < num_entries; ++idx) {
// Bits:
// 023: ISO 639 language code
// 2428: teletext type
// 29-31: teletext magazine number
// 32-35: teletext page number (units)
// 36-39: teletext page number (tens)
// EN 300 468, 6.2.43 "Teletext descriptor":
// Teletext type is:
// 0: ?
// 1: teletext
// 2: teletext subtitles
// 3: teletext additional information
// 4: teletext program schedule
// 5: teletext subtitles: hearing impaired
// Bits:
// 24: ISO 639 language code
// 5: teletext type
// 3: teletext magazine number
// 8: teletext page number (4 bits: unit, 4 bits: tens)
mtx::bits::reader_c r{buffer, 5};
@ -774,6 +767,13 @@ track_c::parse_srt_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor,
idx, std::string(reinterpret_cast<char const *>(buffer), 3), ttx_type, ttx_magazine, ttx_page));
}
// Table 94: teletext_type
// 0x00: reserved for future use
// 0x01: initial Teletext page
// 0x02: Teletext subtitles page
// 0x03: additional information page
// 0x04: program schedule page
// 0x05: Teletext subtitle page for hearing impaired people
if (!mtx::included_in(ttx_type, 2u, 5u)) {
buffer += 5;
continue;
@ -1775,7 +1775,7 @@ reader_c::parse_pmt_pid_info(mm_mem_io_c &mem,
track->parse_iso639_language_from(pmt_descriptor + 1);
break;
case 0x56: // Teletext descriptor
track->parse_srt_pmt_descriptor(*pmt_descriptor, *pmt_pid_info);
track->parse_teletext_pmt_descriptor(*pmt_descriptor, *pmt_pid_info);
break;
case 0x59: // Subtitles descriptor
track->parse_subtitling_pmt_descriptor(*pmt_descriptor, *pmt_pid_info);

View File

@ -301,6 +301,7 @@ public:
std::optional<uint16_t> program_number, m_dovi_base_layer_pid;
std::optional<int> m_ttx_wanted_page;
std::optional<uint8_t> m_expected_next_continuity_counter;
std::optional<bool> m_hearing_impaired_flag;
std::size_t pes_payload_size_to_read; // size of the current PID payload in bytes
mtx::bytes::buffer_cptr pes_payload_read; // buffer with the current PID payload
@ -373,7 +374,7 @@ public:
bool parse_dovi_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor, pmt_pid_info_t const &pmt_pid_info);
bool parse_dts_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor, pmt_pid_info_t const &pmt_pid_info);
bool parse_registration_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor, pmt_pid_info_t const &pmt_pid_info);
bool parse_srt_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor, pmt_pid_info_t const &pmt_pid_info);
bool parse_teletext_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor, pmt_pid_info_t const &pmt_pid_info);
bool parse_subtitling_pmt_descriptor(pmt_descriptor_t const &pmt_descriptor, pmt_pid_info_t const &pmt_pid_info);
bool has_packetizer() const;