107 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* 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 0x47
 | 
						|
#define TS_PACKET_LEN 188
 | 
						|
#define TS_PAYLOAD_LEN 184
 | 
						|
#define TS_NULL_PACKET_PID 0x1fff
 | 
						|
#define TS_CC_MAX_VAL 0x0f /* 4 bits */
 | 
						|
#define TS_LAST_VALID_PID 8191
 | 
						|
#define TS_FILL_BYTE 0xff /* 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
 |