linux/drivers/media/test-drivers/vidtv/vidtv_ts.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * The Virtual DVB test driver serves as a reference DVB driver and helps
   4 * validate the existing APIs in the media subsystem. It can also aid
   5 * developers working on userspace applications.
   6 *
   7 * Copyright (C) 2020 Daniel W. S. Almeida
   8 */
   9
  10#ifndef VIDTV_TS_H
  11#define VIDTV_TS_H
  12
  13#include <linux/types.h>
  14
  15#define TS_SYNC_BYTE 0x47
  16#define TS_PACKET_LEN 188
  17#define TS_PAYLOAD_LEN 184
  18#define TS_NULL_PACKET_PID 0x1fff
  19#define TS_CC_MAX_VAL 0x0f /* 4 bits */
  20#define TS_LAST_VALID_PID 8191
  21#define TS_FILL_BYTE 0xff /* the byte used in packet stuffing */
  22
  23struct vidtv_mpeg_ts_adaption {
  24        u8 length;
  25        struct {
  26                u8 extension:1;
  27                u8 private_data:1;
  28                u8 splicing_point:1;
  29                u8 OPCR:1;
  30                u8 PCR:1;
  31                u8 priority:1;
  32                u8 random_access:1;
  33                u8 discontinued:1;
  34        } __packed;
  35        u8 data[];
  36} __packed;
  37
  38struct vidtv_mpeg_ts {
  39        u8 sync_byte;
  40        __be16 bitfield; /* tei: 1, payload_start:1 priority: 1, pid:13 */
  41        struct {
  42                u8 continuity_counter:4;
  43                u8 payload:1;
  44                u8 adaptation_field:1;
  45                u8 scrambling:2;
  46        } __packed;
  47        struct vidtv_mpeg_ts_adaption *adaption;
  48} __packed;
  49
  50/**
  51 * struct pcr_write_args - Arguments for the pcr_write_into function.
  52 * @dest_buf: The buffer to write into.
  53 * @dest_offset: The byte offset into the buffer.
  54 * @pid: The TS PID for the PCR packets.
  55 * @buf_sz: The size of the buffer in bytes.
  56 * @continuity_counter: The TS continuity_counter.
  57 * @pcr: A sample from the system clock.
  58 */
  59struct pcr_write_args {
  60        void *dest_buf;
  61        u32 dest_offset;
  62        u16 pid;
  63        u32 buf_sz;
  64        u8 *continuity_counter;
  65        u64 pcr;
  66};
  67
  68/**
  69 * struct null_packet_write_args - Arguments for the null_write_into function
  70 * @dest_buf: The buffer to write into.
  71 * @dest_offset: The byte offset into the buffer.
  72 * @buf_sz: The size of the buffer in bytes.
  73 * @continuity_counter: The TS continuity_counter.
  74 */
  75struct null_packet_write_args {
  76        void *dest_buf;
  77        u32 dest_offset;
  78        u32 buf_sz;
  79        u8 *continuity_counter;
  80};
  81
  82/* Increment the continuity counter */
  83void vidtv_ts_inc_cc(u8 *continuity_counter);
  84
  85/**
  86 * vidtv_ts_null_write_into - Write a TS null packet into a buffer.
  87 * @args: the arguments to use when writing.
  88 *
  89 * This function will write a null packet into a buffer. This is usually used to
  90 * pad TS streams.
  91 *
  92 * Return: The number of bytes written into the buffer.
  93 */
  94u32 vidtv_ts_null_write_into(struct null_packet_write_args args);
  95
  96/**
  97 * vidtv_ts_pcr_write_into - Write a PCR  packet into a buffer.
  98 * @args: the arguments to use when writing.
  99 *
 100 * This function will write a PCR packet into a buffer. This is used to
 101 * synchronize the clocks between encoders and decoders.
 102 *
 103 * Return: The number of bytes written into the buffer.
 104 */
 105u32 vidtv_ts_pcr_write_into(struct pcr_write_args args);
 106
 107#endif //VIDTV_TS_H
 108