/* SPDX-License-Identifier: GPL-2.0 */
/*
* The Virtual DVB test driver serves as a reference DVB driver and helps
* validate the existing APIs in the media subsystem . It can also aid
* developers working on userspace applications .
*
* Copyright ( C ) 2020 Daniel W . S . Almeida
*/
#ifndef VIDTV_TS_H
#define VIDTV_TS_H
#include <linux/types.h>
#define TS_SYNC_BYTE 0 x47
#define TS_PACKET_LEN 188
#define TS_PAYLOAD_LEN 184
#define TS_NULL_PACKET_PID 0 x1fff
#define TS_CC_MAX_VAL 0 x0f /* 4 bits */
#define TS_LAST_VALID_PID 8191
#define TS_FILL_BYTE 0 xff /* the byte used in packet stuffing */
struct vidtv_mpeg_ts_adaption {
u8 length;
struct {
u8 extension:1 ;
u8 private_data:1 ;
u8 splicing_point:1 ;
u8 OPCR:1 ;
u8 PCR:1 ;
u8 priority:1 ;
u8 random_access:1 ;
u8 discontinued:1 ;
} __packed;
u8 data[];
} __packed;
struct vidtv_mpeg_ts {
u8 sync_byte;
__be16 bitfield; /* tei: 1, payload_start:1 priority: 1, pid:13 */
struct {
u8 continuity_counter:4 ;
u8 payload:1 ;
u8 adaptation_field:1 ;
u8 scrambling:2 ;
} __packed;
} __packed;
/**
* struct pcr_write_args - Arguments for the pcr_write_into function .
* @ dest_buf : The buffer to write into .
* @ dest_offset : The byte offset into the buffer .
* @ pid : The TS PID for the PCR packets .
* @ buf_sz : The size of the buffer in bytes .
* @ continuity_counter : The TS continuity_counter .
* @ pcr : A sample from the system clock .
*/
struct pcr_write_args {
void *dest_buf;
u32 dest_offset;
u16 pid;
u32 buf_sz;
u8 *continuity_counter;
u64 pcr;
};
/**
* struct null_packet_write_args - Arguments for the null_write_into function
* @ dest_buf : The buffer to write into .
* @ dest_offset : The byte offset into the buffer .
* @ buf_sz : The size of the buffer in bytes .
* @ continuity_counter : The TS continuity_counter .
*/
struct null_packet_write_args {
void *dest_buf;
u32 dest_offset;
u32 buf_sz;
u8 *continuity_counter;
};
/* Increment the continuity counter */
void vidtv_ts_inc_cc(u8 *continuity_counter);
/**
* vidtv_ts_null_write_into - Write a TS null packet into a buffer .
* @ args : the arguments to use when writing .
*
* This function will write a null packet into a buffer . This is usually used to
* pad TS streams .
*
* Return : The number of bytes written into the buffer .
*/
u32 vidtv_ts_null_write_into(struct null_packet_write_args args);
/**
* vidtv_ts_pcr_write_into - Write a PCR packet into a buffer .
* @ args : the arguments to use when writing .
*
* This function will write a PCR packet into a buffer . This is used to
* synchronize the clocks between encoders and decoders .
*
* Return : The number of bytes written into the buffer .
*/
u32 vidtv_ts_pcr_write_into(struct pcr_write_args args);
#endif //VIDTV_TS_H
Messung V0.5 in Prozent C=94 H=89 G=91
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland