class ShortEventDescriptor(Descriptor): """短形式イベント記述子(ARIB-STD-B10-2-6.2.15)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) ISO_639_language_code = char(24) event_name_length = uimsbf(8) event_name_char = aribstr(event_name_length) text_length = uimsbf(8) text_char = aribstr(text_length)
class ServiceDescriptor(Descriptor): """サービス記述子(ARIB-STD-B10-2-6.2.13)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) service_type = uimsbf(8) service_provider_name_length = uimsbf(8) service_provider_name = aribstr(service_provider_name_length) service_name_length = uimsbf(8) service_name = aribstr(service_name_length)
class AudioComponentDescriptor(Descriptor): """音声コンポーネント記述子(ARIB-STD-B10-2-6.2.26)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) reserved_future_use = bslbf(4) stream_content = uimsbf(4) component_type = uimsbf(8) component_tag = uimsbf(8) stream_type = uimsbf(8) simulcast_group_tag = bslbf(8) ES_multi_lingual_flag = bslbf(1) main_component_flag = bslbf(1) quality_indicator = bslbf(2) sampling_rate = uimsbf(3) reserved_future_use_2 = bslbf(1) ISO_639_language_code = char(24) @case(ES_multi_lingual_flag) class with_ES_multi_lingual(Syntax): ISO_639_language_code_2 = char(24) audio_text = aribstr(lambda self: ( self.descriptor_length - 12 if self.ES_multi_lingual_flag == 1 else self.descriptor_length - 9 ))
class NetworkNameDescriptor(Descriptor): """ネットワーク名記述子(ARIB-STD-B10-2.6.2.11)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) char = aribstr(descriptor_length)
class BroadcasterNameDescriptor(Descriptor): """ブロードキャスタ名記述子(ARIB-STD-B10-2-6.2.36)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) char = aribstr(descriptor_length)
class BouquetNameDescriptor(Descriptor): """ブーケ名記述子(ARIB-STD-B10-2.6.2.1)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) char = aribstr(descriptor_length)
class items(Syntax): item_description_length = uimsbf(8) item_description_char = aribstr(item_description_length) item_length = uimsbf(8) # マルチバイトの途中でitemが別れていることがあるので、 # ここでaribstrとしてパースすると文字化けすることがある item_char = raw(item_length)
class ComponentDescriptor(Descriptor): """コンポーネント記述子(ARIB-STD-B10-2-6.2.3)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) reserved_future_use = bslbf(4) stream_content = uimsbf(4) component_type = uimsbf(8) component_tag = uimsbf(8) ISO_639_language_code = char(24) component_text = aribstr(lambda self: self.descriptor_length - 6)
class SeriesDescriptor(Descriptor): """シリーズ記述子 (ARIB-STD-B10-2-6.2.33)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) series_id = uimsbf(16) repeat_label = uimsbf(4) program_pattern = uimsbf(3) expire_date_valid_flag = uimsbf(1) expire_date = mjd(16) episode_number = uimsbf(12) last_episode_number = uimsbf(12) series_name_char = aribstr(lambda self: self.descriptor_length - 8)
class TSInformationDescriptor(Descriptor): """TS情報記述子(ARIB-STD-B10-2.6.2.42)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) remote_control_key_id = uimsbf(8) length_of_ts_name = uimsbf(6) transmission_type_count = uimsbf(2) ts_name_char = aribstr(length_of_ts_name) @times(transmission_type_count) class transmissions(Syntax): transmission_type_info = bslbf(8) num_of_service = uimsbf(8) @times(num_of_service) class services(Syntax): service_id = uimsbf(16)
class DataContentDescriptor(Descriptor): """データコンテンツ記述子(ARIB-STD-B10-2-6.2.28) data_component_idが0x0008のものは、selector_byteに 字幕・文字スーパーの識別情報が入っている(ARIB-STD-B24-1-3-9.6.2) """ descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) data_component_id = uimsbf(16) entry_component = uimsbf(8) selector_length = uimsbf(8) # ARIB-STD-B24-1-3-9.6.2 # これ以外のselector_byteの実装は、ifの入れ子が正しく処理できないと実装できない @case(lambda self: self.data_component_id == 0x08) class arib_caption_info(Syntax): num_languages = uimsbf(8) @times(num_languages) class languages(Syntax): language_tag = bslbf(3) reserved = bslbf(1) DMF = bslbf(4) ISO_639_language_code = char(24) @case(lambda self: self.data_component_id != 0x08) class other(Syntax): selector_byte = uimsbf(lambda self: self.selector_length) num_of_component_ref = uimsbf(8) @times(num_of_component_ref) class component_refs(Syntax): component_ref = uimsbf(8) ISO_639_language_code = char(24) text_length = uimsbf(8) data_text = aribstr(text_length)
class ExtendedEventDescriptor(Descriptor): """拡張形式イベント記述子(ARIB-STD-B10-2-6.2.7)""" descriptor_tag = uimsbf(8) descriptor_length = uimsbf(8) descriptor_number = uimsbf(4) last_descriptor_number = uimsbf(4) ISO_639_language_code = char(24) length_of_items = uimsbf(8) @loop(lambda self: self.length_of_items) class items(Syntax): item_description_length = uimsbf(8) item_description_char = aribstr(item_description_length) item_length = uimsbf(8) # マルチバイトの途中でitemが別れていることがあるので、 # ここでaribstrとしてパースすると文字化けすることがある item_char = raw(item_length) text_length = uimsbf(8) text_char = aribstr(text_length)
class without_network(Syntax): private_data_byte = aribstr(lambda self: ( self.descriptor_length - 1 - self.event_count * 4 ))
class type_03(Syntax): logo_char = aribstr(lambda self: self.descriptor_length - 1)
class TextInfo(Syntax): ISO_639_language_code = char(24) text_length = uimsbf(8) text_char = aribstr(text_length)
class names(Syntax): ISO_639_language_code = char(24) platform_name_length = uimsbf(8) text_char = aribstr(platform_name_length)
class linkage_type_0x03(Syntax): message_id = uimsbf(8) message = aribstr(lambda self: self.descriptor_length - 8)