summaryrefslogtreecommitdiff
path: root/dvb-spec/API/dvb_api/demux.xml
diff options
context:
space:
mode:
Diffstat (limited to 'dvb-spec/API/dvb_api/demux.xml')
-rw-r--r--dvb-spec/API/dvb_api/demux.xml568
1 files changed, 568 insertions, 0 deletions
diff --git a/dvb-spec/API/dvb_api/demux.xml b/dvb-spec/API/dvb_api/demux.xml
new file mode 100644
index 000000000..b15824d0b
--- /dev/null
+++ b/dvb-spec/API/dvb_api/demux.xml
@@ -0,0 +1,568 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><title>
+ linuxtv.org|DVB Demux API</title></head><body bgcolor="#000000"
+link="#ffcc00" text="#ffffff" vlink="#ffdd00"><table border="0"
+cellpadding="0" cellspacing="0" width="100%"><tr><td><table border="0"
+cellpadding="0" cellspacing="0" width="100%"><tr><td width="610"><table
+border="0" cellpadding="0" cellspacing="0"><tr valign="top"><td><table
+border="0" cellpadding="0" cellspacing="0" width="180"><tr align="right"
+valign="top"><td><img height="30" src="/images/top01.gif"
+width="180"></td></tr><tr><td align="center" height="38"
+valign="bottom"><img border="0" height="38" src="/images/cimlogo02.gif"
+width="45"></td></tr></table></td><td><table border="0" cellpadding="0"
+cellspacing="0" width="50"><tr><td><img height="30"
+src="/images/top02.gif" width="284"></td></tr><tr><td><img height="45"
+src="/images/top06.gif" width="20">&nbsp;
+
+ </td></tr></table></td><td><table border="0" cellpadding="0"
+cellspacing="0" width="170"><tr><td background="/images/squares05.gif"
+colspan="2"><img height="68" src="/images/squares04.gif"
+width="32"></td></tr></table></td></tr><tr><td></td></tr></table></td><td
+height="68" valign="top" width="100%"><table border="0" cellpadding="0"
+cellspacing="0" width="100%"><tr><td background="/images/squares05.gif"
+height="68"
+width="100%">&nbsp;</td></tr></table></td></tr></table></td></tr><tr><td height="30">
+ &nbsp;
+ </td></tr></table><table border="0" cellpadding="0"
+cellspacing="0"><tr><td width="181"><table border="0" cellpadding="0"
+cellspacing="0" width="181"><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gruen.gif" width="20"></td><td
+bgcolor="#003d19" valign="top" width="19"><img height="22"
+src="/images/pfeilgruen.gif" width="19"></td><td bgcolor="#000000"
+valign="top" width="2"></td><td bgcolor="#003d19" width="120"><a
+href="http://www.convergence.de"><font color="#ffcc00"
+face="arial, helvetica" size="2"><b>
+ &nbsp;convergence.de
+ </b></font></a></td><td align="right" bgcolor="#003d19"
+valign="bottom" width="20"><img height="22"
+src="/images/eckeswgruen.gif" width="8"></td></tr><tr><td
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gruen.gif" width="20"></td><td
+bgcolor="#003d19" valign="top" width="19"><img height="22"
+src="/images/pfeilgruen.gif" width="19"></td><td bgcolor="#000000"
+valign="top" width="2"></td><td bgcolor="#003d19" width="120"><a
+href="http://www.cryptolabs.org"><font color="#ffcc00"
+face="arial, helvetica" size="2"><b>
+ &nbsp;cryptolabs.org</b></font></a></td><td align="right"
+bgcolor="#003d19" valign="bottom" width="20"><img height="22"
+src="/images/eckeswgruen.gif" width="8"></td></tr><tr><td
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gruen.gif" width="20"></td><td
+bgcolor="#003d19" valign="top" width="19"><img height="22"
+src="/images/pfeilgruen.gif" width="19"></td><td bgcolor="#000000"
+valign="top" width="2"></td><td bgcolor="#003d19" width="120"><a
+href="http://www.directfb.org"><font color="#ffcc00"
+face="arial, helvetica" size="2"><b>
+ &nbsp;directfb.org
+ </b></font></a></td><td align="right" bgcolor="#003d19"
+valign="bottom" width="20"><img height="22"
+src="/images/eckeswgruen.gif" width="8"></td></tr><tr><td
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gleb.gif" width="20"></td><td
+bgcolor="#ffcc00" valign="top" width="19"><img height="22"
+src="/images/pfeilgelb.gif" width="19"></td><td bgcolor="#000000"
+valign="top" width="2"></td><td bgcolor="#ffcc00" width="120"><a
+href="/"><font color="#003d19" face="arial, helvetica" size="2"><b>
+ &nbsp;linuxtv.org
+ </b></font></a></td><td align="right" bgcolor="#ffcc00"
+valign="bottom" width="20"><img height="22" src="/images/eckeswgelb.gif"
+width="8"></td></tr><tr><td height="2"></td></tr></table></td><td width="20">
+ &nbsp;
+ </td><td valign="top" width="500"><img height="60"
+src="/images/linuxtv.gif" width="245"></td></tr><tr><td align="left"
+valign="top" width="181"><table bgcolor="#ffcc00" border="0"
+cellpadding="0" cellspacing="0" width="185"><tr><td bgcolor="#000000"
+valign="top" width="20"><img height="22" src="/images/gleb.gif"
+width="20"></td><td bgcolor="#ffcc00" width="19"><img height="22"
+src="/images/arrow_main.gif" width="19"></td><td bgcolor="#000000"
+width="2"></td><td bgcolor="#ffcc00" width="131">
+ &nbsp;<a href="/"><font color="#003d19" face="helvetica"
+size="2"><b>linuxtv</b></font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" colspan="5"
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gleb.gif" width="20"></td><td
+bgcolor="#ffcc00" width="19"><img height="22"
+src="/images/arrow_main.gif" width="19"></td><td bgcolor="#000000"
+width="2"></td><td bgcolor="#ffcc00" width="131">
+ &nbsp;<a href="/projects.xml"><font color="#003d19" face="helvetica"
+size="2"><b>projects</b></font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" colspan="5"
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gleb.gif" width="20"></td><td
+bgcolor="#ffcc00" width="19"><img height="22"
+src="/images/arrow_main_open.gif" width="19"></td><td bgcolor="#000000"
+width="2"></td><td bgcolor="#ffcc00" width="131">
+ &nbsp;<a href="/developer/"><font color="#003d19" face="helvetica"
+size="2"><b>developer</b></font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" width="20"></td><td
+bgcolor="#ffcc00" width="19">&nbsp;</td><td bgcolor="#000000"
+width="2"></td><td width="131"><img height="13"
+src="/images/arrow_sub_open.gif" width="13">
+ &nbsp;<a href="/developer/dvb.xml"><font color="#000000"
+face="helvetica" size="2">DVB</font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" width="20"></td><td
+width="19">&nbsp;</td><td bgcolor="#000000" width="2"></td><td width="131">&nbsp;
+ <img height="13" src="/images/space_sub.gif" width="13"><img
+height="13" src="/images/kulleropen.gif" width="13"><a
+href="/developer/dvb_api.xml"><font color="#000000" face="helvetica" size="2">
+ &nbsp;API</font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" width="20"></td><td
+bgcolor="#ffcc00" width="19">&nbsp;</td><td bgcolor="#000000"
+width="2"></td><td width="131"><img height="13"
+src="/images/arrow_sub.gif" width="13">
+ &nbsp;<a href="/developer/dvd.xml"><font color="#000000"
+face="helvetica" size="2">DVD</font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" width="20"></td><td
+bgcolor="#ffcc00" width="19">&nbsp;</td><td bgcolor="#000000"
+width="2"></td><td width="131"><img height="13"
+src="/images/arrow_sub.gif" width="13">
+ &nbsp;<a href="/developer/mbone.xml"><font color="#000000"
+face="helvetica" size="2">Mbone</font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" width="20"></td><td
+bgcolor="#ffcc00" width="19">&nbsp;</td><td bgcolor="#000000"
+width="2"></td><td width="131"><img height="13"
+src="/images/arrow_sub.gif" width="13">
+ &nbsp;<a href="/cvs/"><font color="#000000" face="helvetica"
+size="2">CVS</font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" colspan="5"
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gleb.gif" width="20"></td><td
+bgcolor="#ffcc00" width="19"><img height="22"
+src="/images/arrow_main.gif" width="19"></td><td bgcolor="#000000"
+width="2"></td><td bgcolor="#ffcc00" width="131">
+ &nbsp;<a href="/download/"><font color="#003d19" face="helvetica"
+size="2"><b>download</b></font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" colspan="5"
+height="2"></td></tr><tr><td bgcolor="#000000" valign="top"
+width="20"><img height="22" src="/images/gleb.gif" width="20"></td><td
+bgcolor="#ffcc00" width="19"><img height="22"
+src="/images/arrow_main.gif" width="19"></td><td bgcolor="#000000"
+width="2"></td><td bgcolor="#ffcc00" width="131">
+ &nbsp;<a href="/contact.xml"><font color="#003d19" face="helvetica"
+size="2"><b>contact</b></font></a></td><td bgcolor="#000000"
+width="9"></td></tr><tr><td bgcolor="#000000" colspan="5"
+height="2"></td></tr></table></td><td width="20">
+ &nbsp;
+ </td><td valign="top" width="500"><font color="#ffcc00" face="arial, helvetica"><h2>DVB Demux API</h2></font>
+
+ <p>
+ The DVB demux device lets you set TS, PID and section filters in the DVB
+ device. This is internally accomplished through calls to the
+ <a href="demux_mod.xml">demux kernel module</a>.
+ The demux device can be accessed through /dev/ost/demux.
+ </p>
+
+ <p>
+ The function calls defined in the include file
+ <a href="dmx.h">dmx.h</a> are described in detail below:
+ </p>
+
+ <p>
+ <font face="arial, helvetica" size="+1">Demux API IO control calls</font>
+
+<p>
+<pre>
+
+int open(const char *deviceName, int flags);
+
+ DESCRIPTION
+
+ This system call, used with a device name of /dev/ost/demuxn, where n
+ denotes the specific demux device to be opened, allocates a new filter
+ and returns a handle which can be used for subsequent control of that
+ filter. This call has to be made for each filter to be used, i.e. every
+ returned file descriptor is a reference to a single filter.
+ /dev/ost/dvrn is a logical device to be used for retrieving Transport
+ Streams for digital video recording. n identifies the physical demux
+ device that provides the actual DVR functionlaity. When reading from
+ this device a transport stream containing the packets from all PES
+ filters set in the corresponfing demux device (/dev/osst/demuxn) having the output set to DMX_OUT_TS_TAP. A recorded Transport Stream
+ is replayed by writing to this device.
+ This device can only be opened in read-write mode.
+ The significance of blocking or non-blocking mode is described in the
+ documentation for functions where there is a difference. It does not
+ affect the semantics of the open() call itself. A device opened in
+ blocking mode can later be put into non-blocking mode
+ (and vice versa) using the F_SETFL command of the fcntl system call.
+
+
+ PARAMETERS
+
+ const char *deviceName I Name of the demux device, which should be
+ /dev/ost/demuxn where n denotes the
+ specific demux device to be opened, or the
+ name of a logical DVR device, /dev/ost/dvrn.
+
+ int flags I A bit-wise OR of the following flags:
+ O_RDWR read/write access.
+ O_NONBLOCK open in non-blocking mode
+ (blocking mode is the default).
+
+ RETURNS
+
+ ENODEV Device driver not loaded/available.
+
+ EINVAL Invalid argument.
+
+ EMFILE &quot;Too many open files&quot;, i.e. no more filters available.
+
+ ENOMEM The driver failed to allocate enough memory.
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int close(int fd);
+
+ DESCRIPTION
+
+ This system call deactivates and deallocates a filter that was previously
+ allocated via the open() call.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ RETURNS
+
+ EBADF fd is not a valid open file descriptor
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+size_t read(int fd, void *buf, size_t count);
+
+ DESCRIPTION
+
+ This system call returns filtered data, which might be section or PES
+ data. The filtered data is transferred from the driver's internal circular
+ buffer to buf. The maximum amount of data to be transferred is implied by
+ count.
+
+ When returning section data the driver always tries to return a complete
+ single section (even though buf would provide buffer space for more data).
+ If the size of the buffer is smaller than the section as much as possible
+ will be returned, and the remaining data will be provided in subsequent
+ calls.
+ The size of the internal buffer is 2 * 4096 bytes (the size of two maximum
+ sized sections) by default. The size of this buffer may be changed by
+ using the DMX_SET_BUFFER_SIZE function. If the buffer is not large enough,
+ or if the read operations are not performed fast enough, this may result
+ in a buffer overflow error. In this case EBUFFEROVERFLOW will be returned,
+ and the circular buffer will be emptied.
+ This call is blocking if there is no data to return, i.e. the process
+ will be put to sleep waiting for data, unless the O_NONBLOCK flag is
+ specified.
+ Note that in order to be able to read, the filtering process has to be
+ started by defining either a section or a PES filter by means of the
+ ioctl functions, and then starting the filtering process via the DMX_START
+ ioctl function or by setting the DMX_IMMEDIATE_START flag.
+ If the reading is done from a logical DVR demux device, the data will
+ constitute a Transport Stream including the packets from all PES filters
+ in the corresponding demux device /dev/ost/demuxn having the output set
+ to DMX_OUT_TS_TAP.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ void *buf O Pointer to the buffer to be used for returned filtered data.
+
+ size_t count I Size of buf.
+
+ RETURNS
+
+ EWOULDBLOCK No data to return and O_NONBLOCK was specified.
+
+ EBADF fd is not a valid open file descriptor
+
+ ECRC Last section had a CRC error &shy; no data
+ returned. The buffer is flushed.
+
+ EBUFFEROVERFLOW The filtered data was not read from the buffer in
+ due time, resulting in non-read data being lost.
+ The buffer is flushed.
+
+ ETIMEDOUT The section was not loaded within the stated
+ timeout period. See ioctl DMX_SET_FILTER for
+ how to set a timeout.
+
+ EFAULT The driver failed to write to the callers buffer
+ due to an invalid *buf pointer.
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+ssize_t write(int fd, const void *buf, size_t count);
+
+ DESCRIPTION
+
+ This system call is only provided by the logical device /dev/ost/dvrn,
+ where n identifies the physical demux device that provides the actual
+ DVR functionality. It is used for replay of a digitally recorded
+ Transport Stream. Matching filters have to be defined in the
+ corresponding physical demux device, /dev/ost/demuxn.
+ The amount of data to be transferred is implied by count.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ void *buf I Pointer to the buffer containing the Transport Stream.
+
+ size_t count I Size of buf.
+
+ RETURNS
+
+ EWOULDBLOCK No data was written. This might happen if
+ O_NONBLOCK was specified and there is no more
+ buffer space available (if O_NONBLOCK is not
+ specified the function will block until buffer
+ space is available).
+
+ EBUSY This error code indicates that there are
+ conflicting requests. The corresponding demux
+ device is setup to receive data from the front-
+ end. Make sure that these filters are stopped
+ and that the filters with input set to DMX_IN_DVR
+ are started.
+
+ EBADF fd is not a valid open file descriptor
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int ioctl( int fd, int request = DMX_START);
+
+ DESCRIPTION
+
+ This ioctl call is used to start the actual filtering operation
+ defined via the ioctl calls DMX_SET_FILTER or DMX_SET_PES_FILTER.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ int request I Equals DMX_START for this command.
+
+ RETURNS
+
+ EBADF fd is not a valid file descriptor
+
+ EINVAL Invalid argument, i.e. no filtering parameters
+ provided via the DMX_SET_FILTER or
+ DMX_SET_PES_FILTER functions.
+
+ EBUSY This error code indicates that there are
+ conflicting requests. There are active filters
+ filtering data from another input source. Make
+ sure that these filters are stopped before starting
+ this filter.
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int ioctl( int fd, int request = DMX_STOP);
+
+ DESCRIPTION
+
+ This ioctl call is used to stop the actual filtering operation defined
+ via the ioctl calls DMX_SET_FILTER or DMX_SET_PES_FILTER and started via
+ the DMX_START command.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ int request I Equals DMX_STOP for this command.
+
+ RETURNS
+
+ EBADF fd is not a valid file descriptor
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int ioctl( int fd, int request = DMX_SET_FILTER, struct dmxSctFilterParams *params);
+
+ DESCRIPTION
+
+ This ioctl call sets up a filter according to the filter and mask
+ parameters provided. A timeout may be defined stating number of seconds
+ to wait for a section to be loaded. A value of 0 means that no timeout
+ should be applied. Finally there is a flag field where it is possible to
+ state whether a section should be CRC-checked, whether the filter should
+ be a &quot;one-shot&quot; filter, i.e. if the filtering operation should be stopped
+ after the first section is received, and whether the filtering operation
+ should be started immediately (without waiting for a DMX_START ioctl call).
+ If a filter was previously set-up, this filter will be cancelled, and the
+ receive buffer will be flushed.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ int request I Equals DMX_SET_FILTER for this command.
+
+ struct I Pointer to structure containing filter
+
+ dmxSctFilterParams parameters.
+ *params
+
+ RETURNS
+
+ EBADF fd is not a valid file descriptor
+
+ EINVAL Invalid argument.
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int ioctl( int fd, int request = DMX_SET_PES_FILTER, struct dmxPesFilterParams *params);
+
+ DESCRIPTION
+
+ This ioctl call sets up a PES filter according to the parameters provided.
+ By a PES filter is meant a filter that is based just on the packet
+ identifier (PID), i.e. no PES header or payload filtering capability is
+ supported.
+ The transport stream destination for the filtered output may be set. Also
+ the PES type may be stated in order to be able to e.g. direct a video
+ stream directly to the video decoder. Finally there is a flag field where
+ it is possible to state whether the filtering operation should be started
+ immediately (without waiting for a DMX_START ioctl call).
+ If a filter was previously set-up, this filter will be cancelled, and the
+ receive buffer will be flushed.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ int request I Equals DMX_SET_PES_FILTER for this command.
+
+ struct I Pointer to structure containing filter
+
+ dmxPesFilterParams parameters.
+ *params
+
+ RETURNS
+
+ EBADF fd is not a valid file descriptor
+
+ EINVAL Invalid argument.
+
+ EBUSY This error code indicates that there are
+ conflicting requests. There are active filters
+ filtering data from another input source. Make
+ sure that these filters are stopped before starting
+ this filter.
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int ioctl( int fd, int request = DMX_SET_BUFFER_SIZE, unsigned long size);
+
+ DESCRIPTION
+
+ This ioctl call is used to set the size of the circular buffer used
+ for filtered data. The default size is two maximum sized sections, i.e.
+ if this function is not called a buffer size of 2 * 4096 bytes will be
+ used.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ int request I Equals DMX_SET_BUFFER_SIZE for this command.
+
+ unsigned long size I Size of circular buffer.
+
+ RETURNS
+
+ EBADF fd is not a valid file descriptor.
+
+ ENOMEM The driver was not able to allocate a buffer of the requested size.
+
+
+
+</pre>
+</p>
+
+<p>
+<pre>
+
+int ioctl( int fd, int request = DMX_GET_EVENT, struct dmxEvent *ev);
+
+ DESCRIPTION
+
+ This ioctl call returns an event if available. If an event is not
+ available, the behavior depends on whether the device is in blocking or
+ non-blocking mode. In the latter case, the call fails immediately with
+ errno set to EWOULDBLOCK. In the former case, the call blocks until an
+ event becomes available.
+ The standard Linux poll() and/or select() system calls can be used with
+ the device file descriptor to watch for new events. For select(), the
+ file descriptor should be included in the exceptfds argument, and for
+ poll(), POLLPRI should be specified as the wake-up condition.
+ Only the latest event for each filter is saved.
+
+ PARAMETERS
+
+ int fd I File descriptor returned by a previous call to open().
+
+ int request I Equals DMX_SET_BUFFER_SIZE for this command.
+
+ struct dmxEvent *ev O Pointer to the location where the event is to be stored.
+
+ RETURNS
+
+ EBADF fd is not a valid file descriptor.
+
+ EFAULT ev points to an invalid address.
+
+ EWOULDBLOCK There is no event pending, and the device is in non-blocking mode.
+
+
+
+</pre>
+</p>
+ </p>
+
+ </td></tr></table></body></html>
+
+<!-- This page was served in 1643 milliseconds by Cocoon 1.7.4 -->