/usr/include/libdvbapi/dvbdemux.h is in dvb-apps 1.1.1+rev1500-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 | /*
* libdvbdemux - a DVB demux library
*
* Copyright (C) 2005 Andrew de Quincey (adq_dvb@lidskialf.net)
*
* This library 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; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef LIBDVBDEMUX_H
#define LIBDVBDEMUX_H 1
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
/**
* Source of the data to be demuxed.
*
* FRONTEND. The data will be read from the frontend on the adapter.
*
* DVR. The data will be read from the DVR device of the adapter (of course,
* you need to write data TO the DVR device as well).
*/
#define DVBDEMUX_INPUT_FRONTEND 0
#define DVBDEMUX_INPUT_DVR 1
/**
* Destination of the demuxed data.
*
* DECODER. Sends the data directly to a hardware decoder (if present).
*
* DEMUX. Sends the PID stream to the current demux file descriptor. HOWEVER, the
* data will be the payload *only* - transport stream headers will be stripped.
*
* DVR sends the data to the DVR device. The data will be the complete transport
* stream packets with headers intact. Note: if multiple filters specify
* DVBDEMUX_OUTPUT_DVR, the individual PID streams will be re-multiplexed
* together.
*/
#define DVBDEMUX_OUTPUT_DECODER 0
#define DVBDEMUX_OUTPUT_DEMUX 1
#define DVBDEMUX_OUTPUT_DVR 2
#define DVBDEMUX_OUTPUT_TS_DEMUX 3
/**
* PES types.
*/
#define DVBDEMUX_PESTYPE_AUDIO 0
#define DVBDEMUX_PESTYPE_VIDEO 1
#define DVBDEMUX_PESTYPE_TELETEXT 2
#define DVBDEMUX_PESTYPE_SUBTITLE 3
#define DVBDEMUX_PESTYPE_PCR 4
/**
* Open a demux device. Can be called multiple times. These let you setup a
* single filter per FD. It can can also be read() from if you use a section
* filter, or create a pes_filter or raw_filter with output DVBDEMUX_OUTPUT_DEMUX.
*
* @param adapter Index of the DVB adapter.
* @param demuxdevice Index of the demux device on that adapter (usually 0).
* @param nonblocking If 1, frontend will be opened in nonblocking mode.
* @return A unix file descriptor on success, or -1 on failure.
*/
extern int dvbdemux_open_demux(int adapter, int demuxdevice, int nonblocking);
/**
* Open a DVR device. May be opened for writing or reading once.
* It is used to either write() transport stream data to be demuxed
* (if input == DVBDEMUX_INPUT_DVR), or to read() a stream of demuxed data
* (if output == DVBDEMUX_OUTPUT_DVR).
*
* Note, all demux filters with output set to DVBDEMUX_OUTPUT_DVR will be
* multiplexed together and output their data on this device.
*
* @param adapter Index of the DVB adapter.
* @param dvrdevice Index of the dvr device on that adapter (usually 0)
* @param readonly If 1, frontend will be opened in readonly mode only.
* @param nonblocking If 1, frontend will be opened in nonblocking mode.
* @return A unix file descriptor on success, or -1 on failure.
*/
extern int dvbdemux_open_dvr(int adapter, int dvrdevice, int readonly, int nonblocking);
/**
* Set filter for the first 18 bytes of decoded SI table sections. Note that
* bytes 1 and 2 are _not_ filtered since they contain the length field.
*
* Conceptually, the driver computes the following for each filtered bit.
*
* (filter[X].bit[Y] & mask[X].bit[Y]) == (header[X].bit[Y] & mask[X].bit[Y])
*
* Any sections which do not match this criteria for every bit will be discarded.
*
* The SI data is always read from the frontend, and is always returned by
* read()ing the demux fd. FIXME: check this statement!
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @param pid PID of the stream.
* @param filter The filter values of the first 18 bytes of the desired sections.
* @param mask Bitmask indicating which bits in the filter array should be tested
* (if a bit is 1, it will be tested).
* @param start If 1, the filter will be started immediately. Otherwise you must
* call dvbdemux_start() manually.
* @param checkcrc If 1, the driver will check the CRC on the table sections.
* Any bad sections will be dropped.
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_set_section_filter(int fd, int pid,
uint8_t filter[18], uint8_t mask[18],
int start, int checkcrc);
/**
* Set filter for a stream of PES data. This call can only used for cards
* equipped with a hardware decoder.
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @param pid PID of the stream.
* @param input One of DVBDEMUX_INPUT_*.
* @param output One of DVBDEMUX_OUTPUT_*.
* @param pestype One of DVBDEMUX_PESTYPE_* - this tells the decoder the type
* of data in this stream.
* @param start If 1, the filter will be started immediately. Otherwise you must
* call dvbdemux_start() manually.
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_set_pes_filter(int fd, int pid,
int input, int output,
int pestype,
int start);
/**
* Create a pid filter - this will extract transport stream packets for a
* specified PID.
*
* Note: The wildcard PID can only be used on "budget" cards.
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @param pid PID to retrieve, or use -1 as a wildcard for ALL PIDs.
* @param input One of DVBDEMUX_INPUT_*.
* @param output One of DVBDEMUX_OUTPUT_*.
* @param start If 1, the filter will be started immediately. Otherwise you must
* call dvbdemux_start() manually.
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_set_pid_filter(int fd, int pid,
int input, int output,
int start);
/**
* Start a demux going.
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_start(int fd);
/**
* Stop a demux.
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_stop(int fd);
/**
* Retrieve the current STC from the demux. This call can only used for cards
* equipped with a hardware decoder.
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @param stc Where to put the retrieved STC value (in 90kHz clock).
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_get_stc(int fd, uint64_t *stc);
/**
* Change the internal buffer size used by the demuxer. The default buffer size
* is 8192 bytes. Can only be used if the demux in question is stopped.
*
* @param fd FD as opened with dvbdemux_open_demux() above.
* @param bufsize New buffer size to use.
* @return 0 on success, nonzero on failure.
*/
extern int dvbdemux_set_buffer(int fd, int bufsize);
#ifdef __cplusplus
}
#endif
#endif // LIBDVBDEMUX_H
|