Teletext Subtitles Sink

This module contains an element capable of decoding Teletext subtitles in accordance to the ETSI EN 300 706 specification. The element presents the decoded images on the video overlay provided by the Hardware Abstraction Layer (HAL) through the Hardware Abstraction Interface (HAI).

Loadable Module Properties

Module Name Streamer Teletext Subtitle Elements
File Name libdvbteletextsubelement.so
Class Count 1

Element Quick Index

DVB Teletext Subtitle Decoder Element.

DVB Teletext Subtitle Decoder at end of typical pipeline.

Generic Pipeline-wide HAL Access Negotiation

All elements that wish to use HAL decoder resources must coordinate their HAL access. The element in this module participate in such a coordination by obeying to the generic pipeline-wide HAL access negotiation rules described in this section.

DVB Teletext Subtitle Decoder Element

The DVB Teletext Subtitle Decoder Element capable of decoding EBU Teletext subtitles in accordance to the ETSI EN 300 706 specification. The EBU Teletext data stream is fetched from the PES stream in accordance to ETSI EN 300 472. The element depends on the teletext subtitle page information being previously decoded from the teletext_descriptor of a DVB encoded stream (ETSI EN 300 468).

Class Properties

Name DVB Teletext Subtitle Decoder Descriptor
Version1
Interface Name IElementDescriptor
BindingC++

Element Descriptor

Name DVB Teletext Subtitle Decoder
TypeSink
Priority500
Input Formats MPEG-2/Transport Stream/Teletext Subtitle
Output Formats (none)

Metadata

Key Input Output
PES_STARTRequiredReleased
_ActiveSubtitleStreamRequiredPublished
_PlaybackModeRequiredPublished

Theory of Operation

On ISink::Activate(), it opens the HAI Overlay resource instance 0 (zero) in exclusive mode. The HAI resource is closed on ISink::Deactivate().

The element decodes all PES packets having the stream_id field set to private_stream_1 (0xbd). When a subtitles page is decoded, it is rendered on the HAL Overlay immediately. The teletext stream does not contain any time synchronization information, so the subtitles are rendered on the overlay as soon as their content changes.

The element simply ignores all calls to Block() and Unblock() methods in the ISink interface, since the subtitles should just freeze in their current position when the stream is blocked (i.e. paused). When the element receives a call to ISink::Flush() it will release all segments pending on the input pad. No operation is issued on any HAI interface at this stage.