123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973 |
- <title>DVB Demux Device</title>
- <para>The DVB demux device controls the filters of the DVB hardware/software. It can be
- accessed through <emphasis role="tt">/dev/adapter0/demux0</emphasis>. Data types and and ioctl definitions can be
- accessed by including <emphasis role="tt">linux/dvb/dmx.h</emphasis> in your application.
- </para>
- <section id="dmx_types">
- <title>Demux Data Types</title>
- <section id="dmx_output_t">
- <title>dmx_output_t</title>
- <programlisting>
- typedef enum
- {
- DMX_OUT_DECODER,
- DMX_OUT_TAP,
- DMX_OUT_TS_TAP
- } dmx_output_t;
- </programlisting>
- <para><emphasis role="tt">DMX_OUT_TAP</emphasis> delivers the stream output to the demux device on which the ioctl is
- called.
- </para>
- <para><emphasis role="tt">DMX_OUT_TS_TAP</emphasis> routes output to the logical DVR device <emphasis role="tt">/dev/dvb/adapter0/dvr0</emphasis>,
- which delivers a TS multiplexed from all filters for which <emphasis role="tt">DMX_OUT_TS_TAP</emphasis> was
- specified.
- </para>
- </section>
- <section id="dmx_input_t">
- <title>dmx_input_t</title>
- <programlisting>
- typedef enum
- {
- DMX_IN_FRONTEND,
- DMX_IN_DVR
- } dmx_input_t;
- </programlisting>
- </section>
- <section id="dmx_pes_type_t">
- <title>dmx_pes_type_t</title>
- <programlisting>
- typedef enum
- {
- DMX_PES_AUDIO,
- DMX_PES_VIDEO,
- DMX_PES_TELETEXT,
- DMX_PES_SUBTITLE,
- DMX_PES_PCR,
- DMX_PES_OTHER
- } dmx_pes_type_t;
- </programlisting>
- </section>
- <section id="dmx_event_t">
- <title>dmx_event_t</title>
- <programlisting>
- typedef enum
- {
- DMX_SCRAMBLING_EV,
- DMX_FRONTEND_EV
- } dmx_event_t;
- </programlisting>
- </section>
- <section id="dmx_scrambling_status_t">
- <title>dmx_scrambling_status_t</title>
- <programlisting>
- typedef enum
- {
- DMX_SCRAMBLING_OFF,
- DMX_SCRAMBLING_ON
- } dmx_scrambling_status_t;
- </programlisting>
- </section>
- <section id="dmx_filter">
- <title>struct dmx_filter</title>
- <programlisting>
- typedef struct dmx_filter
- {
- uint8_t filter[DMX_FILTER_SIZE];
- uint8_t mask[DMX_FILTER_SIZE];
- } dmx_filter_t;
- </programlisting>
- </section>
- <section id="dmx_sct_filter_params">
- <title>struct dmx_sct_filter_params</title>
- <programlisting>
- struct dmx_sct_filter_params
- {
- uint16_t pid;
- dmx_filter_t filter;
- uint32_t timeout;
- uint32_t flags;
- #define DMX_CHECK_CRC 1
- #define DMX_ONESHOT 2
- #define DMX_IMMEDIATE_START 4
- };
- </programlisting>
- </section>
- <section id="dmx_pes_filter_params">
- <title>struct dmx_pes_filter_params</title>
- <programlisting>
- struct dmx_pes_filter_params
- {
- uint16_t pid;
- dmx_input_t input;
- dmx_output_t output;
- dmx_pes_type_t pes_type;
- uint32_t flags;
- };
- </programlisting>
- </section>
- <section id="dmx_event">
- <title>struct dmx_event</title>
- <programlisting>
- struct dmx_event
- {
- dmx_event_t event;
- time_t timeStamp;
- union
- {
- dmx_scrambling_status_t scrambling;
- } u;
- };
- </programlisting>
- </section>
- <section id="dmx_stc">
- <title>struct dmx_stc</title>
- <programlisting>
- struct dmx_stc {
- unsigned int num; /⋆ input : which STC? 0..N ⋆/
- unsigned int base; /⋆ output: divisor for stc to get 90 kHz clock ⋆/
- uint64_t stc; /⋆ output: stc in 'base'⋆90 kHz units ⋆/
- };
- </programlisting>
- </section>
- </section>
- <section id="dmx_fcalls">
- <title>Demux Function Calls</title>
- <section id="dmx_fopen">
- <title>open()</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>This system call, used with a device name of /dev/dvb/adapter0/demux0,
- 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/dvb/adapter0/dvr0
- is a logical device to be used for retrieving Transport Streams for digital
- video recording. When reading from this device a transport stream containing
- the packets from all PES filters set in the corresponding demux device
- (/dev/dvb/adapter0/demux0) having the output set to DMX_OUT_TS_TAP. A
- recorded Transport Stream is replayed by writing to this device. </para>
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int open(const char ⋆deviceName, int flags);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>const char
- *deviceName</para>
- </entry><entry
- align="char">
- <para>Name of demux device.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int flags</para>
- </entry><entry
- align="char">
- <para>A bit-wise OR of the following flags:</para>
- </entry>
- </row><row><entry
- align="char">
- </entry><entry
- align="char">
- <para>O_RDWR read/write access</para>
- </entry>
- </row><row><entry
- align="char">
- </entry><entry
- align="char">
- <para>O_NONBLOCK open in non-blocking mode</para>
- </entry>
- </row><row><entry
- align="char">
- </entry><entry
- align="char">
- <para>(blocking mode is the default)</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>ENODEV</para>
- </entry><entry
- align="char">
- <para>Device driver not loaded/available.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EINVAL</para>
- </entry><entry
- align="char">
- <para>Invalid argument.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EMFILE</para>
- </entry><entry
- align="char">
- <para>“Too many open files”, i.e. no more filters available.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>ENOMEM</para>
- </entry><entry
- align="char">
- <para>The driver failed to allocate enough memory.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_fclose">
- <title>close()</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>This system call deactivates and deallocates a filter that was previously
- allocated via the open() call.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int close(int fd);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid open file descriptor.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_fread">
- <title>read()</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>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 EOVERFLOW 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.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>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/dvb/adapter0/demux0 having the output set to DMX_OUT_TS_TAP.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>size_t read(int fd, void ⋆buf, size_t count);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>void *buf</para>
- </entry><entry
- align="char">
- <para>Pointer to the buffer to be used for returned filtered data.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>size_t count</para>
- </entry><entry
- align="char">
- <para>Size of buf.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EWOULDBLOCK</para>
- </entry><entry
- align="char">
- <para>No data to return and O_NONBLOCK was specified.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid open file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>ECRC</para>
- </entry><entry
- align="char">
- <para>Last section had a CRC error - no data returned. The
- buffer is flushed.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EOVERFLOW</para>
- </entry><entry
- align="char">
- </entry>
- </row><row><entry
- align="char">
- </entry><entry
- align="char">
- <para>The filtered data was not read from the buffer in due
- time, resulting in non-read data being lost. The buffer is
- flushed.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>ETIMEDOUT</para>
- </entry><entry
- align="char">
- <para>The section was not loaded within the stated timeout
- period. See ioctl DMX_SET_FILTER for how to set a
- timeout.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EFAULT</para>
- </entry><entry
- align="char">
- <para>The driver failed to write to the callers buffer due to an
- invalid *buf pointer.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_fwrite">
- <title>write()</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>This system call is only provided by the logical device /dev/dvb/adapter0/dvr0,
- associated with 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/dvb/adapter0/demux0. The amount of data to be transferred is
- implied by count.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>ssize_t write(int fd, const void ⋆buf, size_t
- count);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>void *buf</para>
- </entry><entry
- align="char">
- <para>Pointer to the buffer containing the Transport Stream.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>size_t count</para>
- </entry><entry
- align="char">
- <para>Size of buf.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EWOULDBLOCK</para>
- </entry><entry
- align="char">
- <para>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).</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EBUSY</para>
- </entry><entry
- align="char">
- <para>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.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid open file descriptor.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_start">
- <title>DMX_START</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>This ioctl call is used to start the actual filtering operation defined via the ioctl
- calls DMX_SET_FILTER or DMX_SET_PES_FILTER.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request = DMX_START);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_START for this command.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EINVAL</para>
- </entry><entry
- align="char">
- <para>Invalid argument, i.e. no filtering parameters provided via
- the DMX_SET_FILTER or DMX_SET_PES_FILTER
- functions.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EBUSY</para>
- </entry><entry
- align="char">
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_stop">
- <title>DMX_STOP</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request = DMX_STOP);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_STOP for this command.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_set_filter">
- <title>DMX_SET_FILTER</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>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 ”one-shot” 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 canceled, and the receive buffer will be flushed.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request = DMX_SET_FILTER,
- struct dmx_sct_filter_params ⋆params);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_SET_FILTER for this command.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>struct
- dmx_sct_filter_params
- *params</para>
- </entry><entry
- align="char">
- <para>Pointer to structure containing filter parameters.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EINVAL</para>
- </entry><entry
- align="char">
- <para>Invalid argument.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_set_pes_filter">
- <title>DMX_SET_PES_FILTER</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request = DMX_SET_PES_FILTER,
- struct dmx_pes_filter_params ⋆params);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_SET_PES_FILTER for this command.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>struct
- dmx_pes_filter_params
- *params</para>
- </entry><entry
- align="char">
- <para>Pointer to structure containing filter parameters.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EINVAL</para>
- </entry><entry
- align="char">
- <para>Invalid argument.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EBUSY</para>
- </entry><entry
- align="char">
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dms_set_buffer_size">
- <title>DMX_SET_BUFFER_SIZE</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request =
- DMX_SET_BUFFER_SIZE, unsigned long size);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_SET_BUFFER_SIZE for this command.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>unsigned long size</para>
- </entry><entry
- align="char">
- <para>Size of circular buffer.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>ENOMEM</para>
- </entry><entry
- align="char">
- <para>The driver was not able to allocate a buffer of the
- requested size.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_get_event">
- <title>DMX_GET_EVENT</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>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.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request = DMX_GET_EVENT,
- struct dmx_event ⋆ev);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_GET_EVENT for this command.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>struct dmx_event *ev</para>
- </entry><entry
- align="char">
- <para>Pointer to the location where the event is to be stored.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EFAULT</para>
- </entry><entry
- align="char">
- <para>ev points to an invalid address.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EWOULDBLOCK</para>
- </entry><entry
- align="char">
- <para>There is no event pending, and the device is in
- non-blocking mode.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section>
- <section id="dmx_get_stc">
- <title>DMX_GET_STC</title>
- <para>DESCRIPTION
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>This ioctl call returns the current value of the system time counter (which is driven
- by a PES filter of type DMX_PES_PCR). Some hardware supports more than one
- STC, so you must specify which one by setting the num field of stc before the ioctl
- (range 0...n). The result is returned in form of a ratio with a 64 bit numerator
- and a 32 bit denominator, so the real 90kHz STC value is stc->stc /
- stc->base
- .</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>SYNOPSIS
- </para>
- <informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
- <para>int ioctl( int fd, int request = DMX_GET_STC, struct
- dmx_stc ⋆stc);</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>PARAMETERS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>int fd</para>
- </entry><entry
- align="char">
- <para>File descriptor returned by a previous call to open().</para>
- </entry>
- </row><row><entry
- align="char">
- <para>int request</para>
- </entry><entry
- align="char">
- <para>Equals DMX_GET_STC for this command.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>struct dmx_stc *stc</para>
- </entry><entry
- align="char">
- <para>Pointer to the location where the stc is to be stored.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- <para>ERRORS
- </para>
- <informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
- <para>EBADF</para>
- </entry><entry
- align="char">
- <para>fd is not a valid file descriptor.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EFAULT</para>
- </entry><entry
- align="char">
- <para>stc points to an invalid address.</para>
- </entry>
- </row><row><entry
- align="char">
- <para>EINVAL</para>
- </entry><entry
- align="char">
- <para>Invalid stc number.</para>
- </entry>
- </row></tbody></tgroup></informaltable>
- </section></section>
|