Source code for ebu_tt_live.node.encoder


from datetime import timedelta
from .base import AbstractCombinedNode
from ebu_tt_live.clocks.media import MediaClock
from ebu_tt_live.documents.converters import EBUTT3EBUTTDConverter
from ebu_tt_live.documents import EBUTTDDocument, EBUTT3Document


[docs]class EBUTTDEncoder(AbstractCombinedNode): _ebuttd_converter = None _default_ns = None _default_ebuttd_doc = None _expects = EBUTT3Document _provides = EBUTTDDocument def __init__(self, node_id, media_time_zero, default_ns=False, producer_carriage=None, consumer_carriage=None, **kwargs): super(EBUTTDEncoder, self).__init__( producer_carriage=producer_carriage, consumer_carriage=consumer_carriage, node_id=node_id, **kwargs ) self._default_ns = default_ns media_clock = MediaClock() media_clock.adjust_time(timedelta(), media_time_zero) self._ebuttd_converter = EBUTT3EBUTTDConverter( media_clock=media_clock ) self._default_ebuttd_doc = EBUTTDDocument(lang='en-GB') self._default_ebuttd_doc.set_implicit_ns(self._default_ns) self._default_ebuttd_doc.validate()
[docs] def process_document(self, document, **kwargs): # Convert each received document into EBU-TT-D if self.is_document(document): self.limit_sequence_to_one(document) converted_doc = EBUTTDDocument.create_from_raw_binding( self._ebuttd_converter.convert_document(document.binding) ) # Specify the time_base since the FilesystemProducerImpl can't derive it otherwise. # Hard coded to 'media' because that's all that's permitted in EBU-TT-D. Alternative # would be to extract it from the EBUTTDDocument but since it's the only permitted # value that would be an unnecessary overhead... self.producer_carriage.emit_data(data=converted_doc, sequence_identifier='default', time_base='media', **kwargs)