This file is indexed.

/usr/include/libdvbv5/mpeg_pes.h is in libdvbv5-dev 1.12.3-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
/*
 * Copyright (c) 2013-2014 - Andre Roth <neolynx@gmail.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation version 2.1 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 * Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 *
 */

#ifndef _MPEG_PES_H
#define _MPEG_PES_H

/**
 * @file mpeg_pes.h
 * @ingroup dvb_table
 * @brief Provides the table parser for the MPEG-PES Elementary Stream
 * @copyright GNU Lesser General Public License version 2.1 (LGPLv2.1)
 * @author Andre Roth
 *
 * @par Relevant specs
 * The table described herein is defined in ISO 13818-1
 *
 * @see
 * http://dvd.sourceforge.net/dvdinfo/pes-hdr.html
 *
 * @par Bug Report
 * Please submit bug reports and patches to linux-media@vger.kernel.org
 */

#include <stdint.h>
#include <unistd.h> /* ssize_t */


/**
 * @def DVB_MPEG_PES
 *	@brief MPEG Packetized Elementary Stream magic
 *	@ingroup dvb_table
 * @def DVB_MPEG_PES_AUDIO
 *	@brief PES Audio
 *	@ingroup dvb_table
 * @def DVB_MPEG_PES_VIDEO
 *	@brief PES Video
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_MAP
 *	@brief PES Stream map
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_PADDING
 *	@brief PES padding
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_PRIVATE_2
 *	@brief PES private
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_ECM
 *	@brief PES ECM Stream
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_EMM
 *	@brief PES EMM Stream
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_DIRECTORY
 *	@brief PES Stream directory
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_DSMCC
 *	@brief PES DSMCC
 *	@ingroup dvb_table
 * @def DVB_MPEG_STREAM_H222E
 *	@brief PES H.222.1 type E
 *	@ingroup dvb_table
 */

#define DVB_MPEG_PES  0x00001

#define DVB_MPEG_PES_AUDIO  0xc0 ... 0xcf
#define DVB_MPEG_PES_VIDEO  0xe0 ... 0xef

#define DVB_MPEG_STREAM_MAP       0xBC
#define DVB_MPEG_STREAM_PADDING   0xBE
#define DVB_MPEG_STREAM_PRIVATE_2 0x5F
#define DVB_MPEG_STREAM_ECM       0x70
#define DVB_MPEG_STREAM_EMM       0x71
#define DVB_MPEG_STREAM_DIRECTORY 0xFF
#define DVB_MPEG_STREAM_DSMCC     0x7A
#define DVB_MPEG_STREAM_H222E     0xF8

/**
 * @struct ts_t
 * @brief MPEG PES timestamp structure, used for dts and pts
 * @ingroup dvb_table
 *
 * @param tag		4 bits  Should be 0010 for PTS and 0011 for DTS
 * @param bits30	3 bits	Timestamp bits 30-32
 * @param one		1 bit	Sould be 1
 * @param bits15	15 bits	Timestamp bits 15-29
 * @param one1		1 bit	Should be 1
 * @param bits00	15 Bits	Timestamp bits 0-14
 * @param one2		1 bit	Should be 1
 */

struct ts_t {
	uint8_t  one:1;
	uint8_t  bits30:3;
	uint8_t  tag:4;

	union {
		uint16_t bitfield;
		struct {
			uint16_t  one1:1;
			uint16_t  bits15:15;
		} __attribute__((packed));
	} __attribute__((packed));

	union {
		uint16_t bitfield2;
		struct {
			uint16_t  one2:1;
			uint16_t  bits00:15;
		} __attribute__((packed));
	} __attribute__((packed));
} __attribute__((packed));

/**
 * @struct dvb_mpeg_pes_optional
 * @brief MPEG PES optional header
 * @ingroup dvb_table
 *
 * @param two				2 bits	Should be 10
 * @param PES_scrambling_control	2 bits	PES Scrambling Control (Not Scrambled=00, otherwise scrambled)
 * @param PES_priority			1 bit	PES Priority
 * @param data_alignment_indicator	1 bit	PES data alignment
 * @param copyright			1 bit	PES content protected by copyright
 * @param original_or_copy		1 bit	PES content is original (=1) or copied (=0)
 * @param PTS_DTS			2 bit	PES header contains PTS (=10, =11) and/or DTS (=01, =11)
 * @param ESCR				1 bit	PES header contains ESCR fields
 * @param ES_rate			1 bit	PES header contains ES_rate field
 * @param DSM_trick_mode		1 bit	PES header contains DSM_trick_mode field
 * @param additional_copy_info		1 bit	PES header contains additional_copy_info field
 * @param PES_CRC			1 bit	PES header contains CRC field
 * @param PES_extension			1 bit	PES header contains extension field
 * @param length			8 bit	PES header data length
 * @param pts				64 bit	PES PTS timestamp
 * @param dts				64 bit	PES DTS timestamp
 */
struct dvb_mpeg_pes_optional {
	union {
		uint16_t bitfield;
		struct {
			uint16_t PES_extension:1;
			uint16_t PES_CRC:1;
			uint16_t additional_copy_info:1;
			uint16_t DSM_trick_mode:1;
			uint16_t ES_rate:1;
			uint16_t ESCR:1;
			uint16_t PTS_DTS:2;
			uint16_t original_or_copy:1;
			uint16_t copyright:1;
			uint16_t data_alignment_indicator:1;
			uint16_t PES_priority:1;
			uint16_t PES_scrambling_control:2;
			uint16_t two:2;
		} __attribute__((packed));
	} __attribute__((packed));
	uint8_t length;
	uint64_t pts;
	uint64_t dts;
} __attribute__((packed));

/**
 * @struct dvb_mpeg_pes
 * @brief MPEG PES data structure
 * @ingroup dvb_table
 *
 * @param sync		24 bits	DVB_MPEG_PES
 * @param stream_id	8 bits	PES Stream ID
 * @param length	16 bits	PES packet length
 * @param optional	Pointer to optional PES header
 */
struct dvb_mpeg_pes {
	union {
		uint32_t bitfield;
		struct {
			uint32_t  stream_id:8;
			uint32_t  sync:24;
		} __attribute__((packed));
	} __attribute__((packed));
	uint16_t length;
	struct dvb_mpeg_pes_optional optional[];
} __attribute__((packed));

struct dvb_v5_fe_parms;

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Initialize a struct dvb_mpeg_pes from buffer
 * @ingroup dvb_table
 *
 * @param parms		struct dvb_v5_fe_parms for log functions
 * @param buf		Buffer
 * @param buflen	Length of buffer
 * @param table		Pointer to allocated struct dvb_mpeg_pes
 *
 * @return		Length of data in table
 *
 * This function copies the length of struct dvb_mpeg_pes
 * to table and fixes endianness. The pointer table has to be
 * allocated on stack or dynamically.
 */
ssize_t dvb_mpeg_pes_init(struct dvb_v5_fe_parms *parms, const uint8_t *buf, ssize_t buflen,
		uint8_t *table);

/**
 * @brief Deallocate memory associated with a struct dvb_mpeg_pes
 * @ingroup dvb_table
 *
 * @param pes	struct dvb_mpeg_pes to be deallocated
 *
 * If the pointer pes was allocated dynamically, this function
 * can be used to free the memory.
 */
void dvb_mpeg_pes_free(struct dvb_mpeg_pes *pes);

/**
 * @brief Print details of struct dvb_mpeg_pes
 * @ingroup dvb_table
 *
 * @param parms		struct dvb_v5_fe_parms for log functions
 * @param pes    	Pointer to struct dvb_mpeg_pes to print
 *
 * This function prints the fields of struct dvb_mpeg_pes
 */
void dvb_mpeg_pes_print (struct dvb_v5_fe_parms *parms, struct dvb_mpeg_pes *pes);

#ifdef __cplusplus
}
#endif

#endif