• Daniel W. S. Almeida's avatar
    media: vidtv: add a bridge driver · f90cf607
    Daniel W. S. Almeida authored
    Digital TV devices consist of several independent hardware components
    which are controlled by different drivers.
    Each media device is controlled by a group of cooperating drivers with the
    bridge driver as the main driver.
    
    This patch adds a bridge driver for the Virtual Digital TV driver [vidtv].
    
    The bridge driver binds to the other drivers, that is, vidtv_tuner and
    vidtv_demod and implements the digital demux logic, providing userspace
    with a MPEG Transport Stream.
    
    The MPEG related code is split in the following way:
    
    - vidtv_ts: code to work with MPEG TS packets, such as TS headers,
    adaptation fields, PCR packets and NULL packets.
    
    - vidtv_psi: this is the PSI generator.
    PSI packets contain general information about a MPEG Transport Stream.
    A PSI generator is needed so userspace apps can retrieve information
    about the Transport Stream and eventually tune into a (dummy) channel.
    
    Because the generator is implemented in a separate file, it can be
    reused elsewhere in the media subsystem.
    
    Currently vidtv supports working with 3 PSI tables:
    PAT, PMT and SDT.
    
    - vidtv_pes: implements the PES logic to convert encoder data into
    MPEG TS packets. These can then be fed into a TS multiplexer and
    eventually into userspace.
    
    - vidtv_s302m: implements a S302M encoder to make it possible to
    insert PCM audio data in the generated MPEG Transport Stream.
    
    This shall enable passing an audio signal into userspace so it can be
    decoded and played by media software.
    
    - vidtv_channels: Implements a 'channel' abstraction
    
    When vidtv boots, it will create some hardcoded channels:
    
    Their services will be concatenated to populate the SDT.
    Their programs will be concatenated to populate the PAT
    For each program in the PAT, a PMT section will be created
    The PMT section for a channel will be assigned its streams.
    Every stream will have its corresponding encoder polled to produce TS
    packets
    These packets may be interleaved by the mux and then delivered to the
    bridge
    
    - vidtv_mux - Implements a MPEG TS mux, loosely based on the ffmpeg
    implementation
    
    The multiplexer is responsible for polling encoders,
    interleaving packets, padding the resulting stream with NULL packets if
    necessary and then delivering the resulting TS packets to the bridge
    driver so it can feed the demux.
    Signed-off-by: default avatarDaniel W. S. Almeida <dwlsalmeida@gmail.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    f90cf607
vidtv_pes.c 11.2 KB