/* * section and descriptor parser * * Copyright (C) 2005 Kenneth Aafloy (kenneth@linuxtv.org) * Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef _UCSI_MPEG_CONTENT_LABELLING_DESCRIPTOR #define _UCSI_MPEG_CONTENT_LABELLING_DESCRIPTOR 1 #ifdef __cplusplus extern "C" { #endif #include #include /** * Possible values for content_time_base_indicator. */ enum { MPEG_CONTENT_TIME_BASE_STC = 0x01, MPEG_CONTENT_TIME_BASE_NPT = 0x02, }; /** * mpeg_content_labelling_descriptor structure. */ struct mpeg_content_labelling_descriptor { struct descriptor d; uint16_t metadata_application_format; /* struct mpeg_content_labelling_descriptor_application_format_identifier id */ /* struct mpeg_content_labelling_descriptor_flags flags */ /* struct mpeg_content_labelling_descriptor_reference_id reference_id */ /* struct mpeg_content_labelling_descriptor_time_base time_base */ /* struct mpeg_content_labelling_descriptor_content_id content_id */ /* struct mpeg_content_labelling_descriptor_time_base_association time_base_assoc */ /* uint8_t private_data[] */ } __ucsi_packed; /** * id field of a content_labelling_descriptor. */ struct mpeg_content_labelling_descriptor_application_format_identifier { uint32_t id; } __ucsi_packed; /** * Flags field of a content_labelling_descriptor */ struct mpeg_content_labelling_descriptor_flags { EBIT3(uint8_t content_reference_id_record_flag : 1; , uint8_t content_time_base_indicator : 4; , uint8_t reserved : 3; ); } __ucsi_packed; /** * Reference_id field of a content_labelling_descriptor. */ struct mpeg_content_labelling_descriptor_reference_id { uint8_t content_reference_id_record_length; /* uint8_t data[] */ } __ucsi_packed; /** * time_base field of a content_labelling_descriptor. */ struct mpeg_content_labelling_descriptor_time_base { EBIT2(uint64_t reserved_1 : 7; , uint64_t content_time_base_value :33; ); EBIT2(uint64_t reserved_2 : 7; , uint64_t metadata_time_base_value :33; ); } __ucsi_packed; /** * content_id field of a content_labelling_descriptor. */ struct mpeg_content_labelling_descriptor_content_id { EBIT2(uint8_t reserved : 1; , uint8_t contentId : 7; ); } __ucsi_packed; /** * time_base_assoc field of a content_labelling_descriptor. */ struct mpeg_content_labelling_descriptor_time_base_association { uint8_t time_base_association_data_length; /* uint8_t data[] */ } __ucsi_packed; /** * Process an mpeg_content_labelling_descriptor. * * @param d Generic descriptor. * @return Pointer to an mpeg_content_labelling_descriptor, or NULL on error. */ static inline struct mpeg_content_labelling_descriptor* mpeg_content_labelling_descriptor_codec(struct descriptor* d) { uint32_t pos = 2; uint8_t *buf = (uint8_t*) d; uint32_t len = d->len + 2; struct mpeg_content_labelling_descriptor_flags *flags; int id; if (len < sizeof(struct mpeg_content_labelling_descriptor)) return NULL; bswap16(buf + pos); id = *((uint16_t*) (buf+pos)); pos += 2; if (id == 0xffff) { if (len < (pos+4)) return NULL; bswap32(buf+pos); pos += 4; } if (len < (pos + sizeof(struct mpeg_content_labelling_descriptor_flags))) return NULL; flags = (struct mpeg_content_labelling_descriptor_flags*) (buf+pos); pos += sizeof(struct mpeg_content_labelling_descriptor_flags); if (flags->content_reference_id_record_flag == 1) { if (len < (po
# Hungary / Szeged
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
#
# A.multiplex UHF-60:
# FREE -----------------------------------------------------------------------------------
# m1 HD, m2 HD, Duna World, Duna HD, MR1 Kossuth Radio, MR2 Petofi Radio, MR3 Bartok Radio
T 786000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE
#
# B.multiplex UHF-22:
# NON-FREE --------------------------------------------------------------------------------
# PRO4, VIASAT3, Prizma TV, Muzsika TV, Universal Channel, Comedy Central, Minimax,
# Cartoon Network, Spektrum, History, Sport1, Sport2, Dorcel TV
T 482000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE
#
# C.multiplex UHF-65:
# FREE --------------------------------------------------------------------------------
# RTL Klub, TV2, Euronews Test, Info csatorna, Neo FM
# NON-FREE ----------------------------------------------------------------------------
# Cool, Film+, HBO, National Geographic, Disney Channel, AXN, FEM3, Private spice, ATV,
# HirTV, Sportklub
T 826000000 8MHz 3/4 NONE QAM64 8k 1/4 NONE
(uint8_t*) d + d->d.len + 2; if (flags->content_reference_id_record_flag == 1) buf += 1 + buf[1]; if ((flags->content_time_base_indicator==1) || (flags->content_time_base_indicator==2)) buf += sizeof(struct mpeg_content_labelling_descriptor_time_base); if (flags->content_time_base_indicator==2) buf += sizeof(struct mpeg_content_labelling_descriptor_content_id); if (flags->content_time_base_indicator<3) buf += 1 + buf[1]; *length = end - buf; return buf; } #ifdef __cplusplus } #endif #endif