1 <title>DVB Demux Device</title>
3 <para>The DVB demux device controls the filters of the DVB hardware/software. It can be
4 accessed through <constant>/dev/adapter?/demux?</constant>. Data types and and ioctl definitions can be
5 accessed by including <constant>linux/dvb/dmx.h</constant> in your application.
7 <section id="dmx_types">
8 <title>Demux Data Types</title>
10 <section id="dmx-output-t">
11 <title>Output for the demux</title>
13 <table pgwide="1" frame="none" id="dmx-output">
14 <title>enum dmx_output</title>
20 <entry>Description</entry>
25 <entry align="char" id="DMX-OUT-DECODER">DMX_OUT_DECODER</entry>
26 <entry>Streaming directly to decoder.</entry>
28 <entry align="char" id="DMX-OUT-TAP">DMX_OUT_TAP</entry>
29 <entry>Output going to a memory buffer (to be retrieved via the
30 read command). Delivers the stream output to the demux
31 device on which the ioctl is called.</entry>
33 <entry align="char" id="DMX-OUT-TS-TAP">DMX_OUT_TS_TAP</entry>
34 <entry>Output multiplexed into a new TS (to be retrieved by
35 reading from the logical DVR device). Routes output to the
36 logical DVR device <constant>/dev/dvb/adapter?/dvr?</constant>,
37 which delivers a TS multiplexed from all filters for which
38 <constant>DMX_OUT_TS_TAP</constant> was specified.</entry>
40 <entry align="char" id="DMX-OUT-TSDEMUX-TAP">DMX_OUT_TSDEMUX_TAP</entry>
41 <entry>Like &DMX-OUT-TS-TAP; but retrieved from the DMX
50 <section id="dmx-input-t">
51 <title>dmx_input_t</title>
55 DMX_IN_FRONTEND, /⋆ Input from a front-end device. ⋆/
56 DMX_IN_DVR /⋆ Input from the logical DVR device. ⋆/
61 <section id="dmx-pes-type-t">
62 <title>dmx_pes_type_t</title>
95 <section id="dmx-filter">
96 <title>struct dmx_filter</title>
98 typedef struct dmx_filter
100 __u8 filter[DMX_FILTER_SIZE];
101 __u8 mask[DMX_FILTER_SIZE];
102 __u8 mode[DMX_FILTER_SIZE];
107 <section id="dmx-sct-filter-params">
108 <title>struct dmx_sct_filter_params</title>
110 struct dmx_sct_filter_params
116 #define DMX_CHECK_CRC 1
117 #define DMX_ONESHOT 2
118 #define DMX_IMMEDIATE_START 4
119 #define DMX_KERNEL_CLIENT 0x8000
124 <section id="dmx-pes-filter-params">
125 <title>struct dmx_pes_filter_params</title>
127 struct dmx_pes_filter_params
132 dmx_pes_type_t pes_type;
138 <section id="dmx-event">
139 <title>struct dmx_event</title>
147 dmx_scrambling_status_t scrambling;
153 <section id="dmx-stc">
154 <title>struct dmx_stc</title>
157 unsigned int num; /⋆ input : which STC? 0..N ⋆/
158 unsigned int base; /⋆ output: divisor for stc to get 90 kHz clock ⋆/
159 __u64 stc; /⋆ output: stc in 'base'⋆90 kHz units ⋆/
164 <section id="dmx-caps">
165 <title>struct dmx_caps</title>
167 typedef struct dmx_caps {
174 <section id="dmx-source-t">
175 <title>enum dmx_source_t</title>
178 DMX_SOURCE_FRONT0 = 0,
182 DMX_SOURCE_DVR0 = 16,
191 <section id="dmx_fcalls">
192 <title>Demux Function Calls</title>
194 <section id="dmx_fopen">
195 <title>open()</title>
198 <informaltable><tgroup cols="1"><tbody><row><entry
200 <para>This system call, used with a device name of /dev/dvb/adapter0/demux0,
201 allocates a new filter and returns a handle which can be used for subsequent
202 control of that filter. This call has to be made for each filter to be used, i.e. every
203 returned file descriptor is a reference to a single filter. /dev/dvb/adapter0/dvr0
204 is a logical device to be used for retrieving Transport Streams for digital
205 video recording. When reading from this device a transport stream containing
206 the packets from all PES filters set in the corresponding demux device
207 (/dev/dvb/adapter0/demux0) having the output set to DMX_OUT_TS_TAP. A
208 recorded Transport Stream is replayed by writing to this device. </para>
209 <para>The significance of blocking or non-blocking mode is described in the
210 documentation for functions where there is a difference. It does not affect the
211 semantics of the open() call itself. A device opened in blocking mode can later
212 be put into non-blocking mode (and vice versa) using the F_SETFL command
213 of the fcntl system call.</para>
215 </row></tbody></tgroup></informaltable>
218 <informaltable><tgroup cols="1"><tbody><row><entry
220 <para>int open(const char ⋆deviceName, int flags);</para>
222 </row></tbody></tgroup></informaltable>
225 <informaltable><tgroup cols="2"><tbody><row><entry
231 <para>Name of demux device.</para>
235 <para>int flags</para>
238 <para>A bit-wise OR of the following flags:</para>
244 <para>O_RDWR read/write access</para>
250 <para>O_NONBLOCK open in non-blocking mode</para>
256 <para>(blocking mode is the default)</para>
258 </row></tbody></tgroup></informaltable>
259 <para>RETURN VALUE</para>
260 <informaltable><tgroup cols="2"><tbody><row><entry
265 <para>Device driver not loaded/available.</para>
272 <para>Invalid argument.</para>
279 <para>“Too many open files”, i.e. no more filters available.</para>
286 <para>The driver failed to allocate enough memory.</para>
288 </row></tbody></tgroup></informaltable>
291 <section id="dmx_fclose">
292 <title>close()</title>
295 <informaltable><tgroup cols="1"><tbody><row><entry
297 <para>This system call deactivates and deallocates a filter that was previously
298 allocated via the open() call.</para>
300 </row></tbody></tgroup></informaltable>
303 <informaltable><tgroup cols="1"><tbody><row><entry
305 <para>int close(int fd);</para>
307 </row></tbody></tgroup></informaltable>
310 <informaltable><tgroup cols="2"><tbody><row><entry
315 <para>File descriptor returned by a previous call to open().</para>
317 </row></tbody></tgroup></informaltable>
318 <para>RETURN VALUE</para>
319 <informaltable><tgroup cols="2"><tbody><row><entry
324 <para>fd is not a valid open file descriptor.</para>
326 </row></tbody></tgroup></informaltable>
329 <section id="dmx_fread">
330 <title>read()</title>
333 <informaltable><tgroup cols="1"><tbody><row><entry
335 <para>This system call returns filtered data, which might be section or PES data. The
336 filtered data is transferred from the driver’s internal circular buffer to buf. The
337 maximum amount of data to be transferred is implied by count.</para>
341 <para>When returning section data the driver always tries to return a complete single
342 section (even though buf would provide buffer space for more data). If the size
343 of the buffer is smaller than the section as much as possible will be returned,
344 and the remaining data will be provided in subsequent calls.</para>
348 <para>The size of the internal buffer is 2 * 4096 bytes (the size of two maximum
349 sized sections) by default. The size of this buffer may be changed by using the
350 DMX_SET_BUFFER_SIZE function. If the buffer is not large enough, or if
351 the read operations are not performed fast enough, this may result in a buffer
352 overflow error. In this case EOVERFLOW will be returned, and the circular
353 buffer will be emptied. This call is blocking if there is no data to return, i.e. the
354 process will be put to sleep waiting for data, unless the O_NONBLOCK flag
359 <para>Note that in order to be able to read, the filtering process has to be started
360 by defining either a section or a PES filter by means of the ioctl functions,
361 and then starting the filtering process via the DMX_START ioctl function
362 or by setting the DMX_IMMEDIATE_START flag. If the reading is done
363 from a logical DVR demux device, the data will constitute a Transport Stream
364 including the packets from all PES filters in the corresponding demux device
365 /dev/dvb/adapter0/demux0 having the output set to DMX_OUT_TS_TAP.</para>
367 </row></tbody></tgroup></informaltable>
370 <informaltable><tgroup cols="1"><tbody><row><entry
372 <para>size_t read(int fd, void ⋆buf, size_t count);</para>
374 </row></tbody></tgroup></informaltable>
377 <informaltable><tgroup cols="2"><tbody><row><entry
382 <para>File descriptor returned by a previous call to open().</para>
386 <para>void *buf</para>
389 <para>Pointer to the buffer to be used for returned filtered data.</para>
393 <para>size_t count</para>
396 <para>Size of buf.</para>
398 </row></tbody></tgroup></informaltable>
399 <para>RETURN VALUE</para>
400 <informaltable><tgroup cols="2"><tbody><row><entry
402 <para>EWOULDBLOCK</para>
405 <para>No data to return and O_NONBLOCK was specified.</para>
412 <para>fd is not a valid open file descriptor.</para>
419 <para>Last section had a CRC error - no data returned. The
420 buffer is flushed.</para>
424 <para>EOVERFLOW</para>
432 <para>The filtered data was not read from the buffer in due
433 time, resulting in non-read data being lost. The buffer is
438 <para>ETIMEDOUT</para>
441 <para>The section was not loaded within the stated timeout
442 period. See ioctl DMX_SET_FILTER for how to set a
450 <para>The driver failed to write to the callers buffer due to an
451 invalid *buf pointer.</para>
453 </row></tbody></tgroup></informaltable>
456 <section id="dmx_fwrite">
457 <title>write()</title>
460 <informaltable><tgroup cols="1"><tbody><row><entry
462 <para>This system call is only provided by the logical device /dev/dvb/adapter0/dvr0,
463 associated with the physical demux device that provides the actual DVR
464 functionality. It is used for replay of a digitally recorded Transport Stream.
465 Matching filters have to be defined in the corresponding physical demux
466 device, /dev/dvb/adapter0/demux0. The amount of data to be transferred is
467 implied by count.</para>
469 </row></tbody></tgroup></informaltable>
472 <informaltable><tgroup cols="1"><tbody><row><entry
474 <para>ssize_t write(int fd, const void ⋆buf, size_t
477 </row></tbody></tgroup></informaltable>
480 <informaltable><tgroup cols="2"><tbody><row><entry
485 <para>File descriptor returned by a previous call to open().</para>
489 <para>void *buf</para>
492 <para>Pointer to the buffer containing the Transport Stream.</para>
496 <para>size_t count</para>
499 <para>Size of buf.</para>
501 </row></tbody></tgroup></informaltable>
502 <para>RETURN VALUE</para>
503 <informaltable><tgroup cols="2"><tbody><row><entry
505 <para>EWOULDBLOCK</para>
508 <para>No data was written. This
509 might happen if O_NONBLOCK was specified and there
510 is no more buffer space available (if O_NONBLOCK is
511 not specified the function will block until buffer space is
519 <para>This error code indicates that there are conflicting
520 requests. The corresponding demux device is setup to
521 receive data from the front- end. Make sure that these
522 filters are stopped and that the filters with input set to
523 DMX_IN_DVR are started.</para>
530 <para>fd is not a valid open file descriptor.</para>
532 </row></tbody></tgroup></informaltable>
535 <section id="DMX_START">
536 <title>DMX_START</title>
539 <informaltable><tgroup cols="1"><tbody><row><entry
541 <para>This ioctl call is used to start the actual filtering operation defined via the ioctl
542 calls DMX_SET_FILTER or DMX_SET_PES_FILTER.</para>
544 </row></tbody></tgroup></informaltable>
547 <informaltable><tgroup cols="1"><tbody><row><entry
549 <para>int ioctl( int fd, int request = DMX_START);</para>
551 </row></tbody></tgroup></informaltable>
554 <informaltable><tgroup cols="2"><tbody><row><entry
559 <para>File descriptor returned by a previous call to open().</para>
563 <para>int request</para>
566 <para>Equals DMX_START for this command.</para>
568 </row></tbody></tgroup></informaltable>
570 <informaltable><tgroup cols="2"><tbody><row><entry
575 <para>Invalid argument, i.e. no filtering parameters provided via
576 the DMX_SET_FILTER or DMX_SET_PES_FILTER
584 <para>This error code indicates that there are conflicting
585 requests. There are active filters filtering data from
586 another input source. Make sure that these filters are
587 stopped before starting this filter.</para>
589 </row></tbody></tgroup></informaltable>
592 <section id="DMX_STOP">
593 <title>DMX_STOP</title>
596 <informaltable><tgroup cols="1"><tbody><row><entry
598 <para>This ioctl call is used to stop the actual filtering operation defined via the
599 ioctl calls DMX_SET_FILTER or DMX_SET_PES_FILTER and started via
600 the DMX_START command.</para>
602 </row></tbody></tgroup></informaltable>
605 <informaltable><tgroup cols="1"><tbody><row><entry
607 <para>int ioctl( int fd, int request = DMX_STOP);</para>
609 </row></tbody></tgroup></informaltable>
612 <informaltable><tgroup cols="2"><tbody><row><entry
617 <para>File descriptor returned by a previous call to open().</para>
621 <para>int request</para>
624 <para>Equals DMX_STOP for this command.</para>
626 </row></tbody></tgroup></informaltable>
630 <section id="DMX_SET_FILTER">
631 <title>DMX_SET_FILTER</title>
634 <informaltable><tgroup cols="1"><tbody><row><entry
636 <para>This ioctl call sets up a filter according to the filter and mask parameters
637 provided. A timeout may be defined stating number of seconds to wait for a
638 section to be loaded. A value of 0 means that no timeout should be applied.
639 Finally there is a flag field where it is possible to state whether a section should
640 be CRC-checked, whether the filter should be a ”one-shot” filter, i.e. if the
641 filtering operation should be stopped after the first section is received, and
642 whether the filtering operation should be started immediately (without waiting
643 for a DMX_START ioctl call). If a filter was previously set-up, this filter will
644 be canceled, and the receive buffer will be flushed.</para>
646 </row></tbody></tgroup></informaltable>
649 <informaltable><tgroup cols="1"><tbody><row><entry
651 <para>int ioctl( int fd, int request = DMX_SET_FILTER,
652 struct dmx_sct_filter_params ⋆params);</para>
654 </row></tbody></tgroup></informaltable>
657 <informaltable><tgroup cols="2"><tbody><row><entry
662 <para>File descriptor returned by a previous call to open().</para>
666 <para>int request</para>
669 <para>Equals DMX_SET_FILTER for this command.</para>
674 dmx_sct_filter_params
678 <para>Pointer to structure containing filter parameters.</para>
680 </row></tbody></tgroup></informaltable>
684 <section id="DMX_SET_PES_FILTER">
685 <title>DMX_SET_PES_FILTER</title>
688 <informaltable><tgroup cols="1"><tbody><row><entry
690 <para>This ioctl call sets up a PES filter according to the parameters provided. By a
691 PES filter is meant a filter that is based just on the packet identifier (PID), i.e.
692 no PES header or payload filtering capability is supported.</para>
696 <para>The transport stream destination for the filtered output may be set. Also the
697 PES type may be stated in order to be able to e.g. direct a video stream directly
698 to the video decoder. Finally there is a flag field where it is possible to state
699 whether the filtering operation should be started immediately (without waiting
700 for a DMX_START ioctl call). If a filter was previously set-up, this filter will
701 be cancelled, and the receive buffer will be flushed.</para>
703 </row></tbody></tgroup></informaltable>
706 <informaltable><tgroup cols="1"><tbody><row><entry
708 <para>int ioctl( int fd, int request = DMX_SET_PES_FILTER,
709 struct dmx_pes_filter_params ⋆params);</para>
711 </row></tbody></tgroup></informaltable>
714 <informaltable><tgroup cols="2"><tbody><row><entry
719 <para>File descriptor returned by a previous call to open().</para>
723 <para>int request</para>
726 <para>Equals DMX_SET_PES_FILTER for this command.</para>
731 dmx_pes_filter_params
735 <para>Pointer to structure containing filter parameters.</para>
737 </row></tbody></tgroup></informaltable>
739 <informaltable><tgroup cols="2"><tbody><row><entry
744 <para>This error code indicates that there are conflicting
745 requests. There are active filters filtering data from
746 another input source. Make sure that these filters are
747 stopped before starting this filter.</para>
749 </row></tbody></tgroup></informaltable>
752 <section id="DMX_SET_BUFFER_SIZE">
753 <title>DMX_SET_BUFFER_SIZE</title>
756 <informaltable><tgroup cols="1"><tbody><row><entry
758 <para>This ioctl call is used to set the size of the circular buffer used for filtered data.
759 The default size is two maximum sized sections, i.e. if this function is not called
760 a buffer size of 2 * 4096 bytes will be used.</para>
762 </row></tbody></tgroup></informaltable>
765 <informaltable><tgroup cols="1"><tbody><row><entry
767 <para>int ioctl( int fd, int request =
768 DMX_SET_BUFFER_SIZE, unsigned long size);</para>
770 </row></tbody></tgroup></informaltable>
773 <informaltable><tgroup cols="2"><tbody><row><entry
778 <para>File descriptor returned by a previous call to open().</para>
782 <para>int request</para>
785 <para>Equals DMX_SET_BUFFER_SIZE for this command.</para>
789 <para>unsigned long size</para>
792 <para>Size of circular buffer.</para>
794 </row></tbody></tgroup></informaltable>
798 <section id="DMX_GET_EVENT">
799 <title>DMX_GET_EVENT</title>
802 <informaltable><tgroup cols="1"><tbody><row><entry
804 <para>This ioctl call returns an event if available. If an event is not available,
805 the behavior depends on whether the device is in blocking or non-blocking
806 mode. In the latter case, the call fails immediately with errno set to
807 EWOULDBLOCK. In the former case, the call blocks until an event becomes
812 <para>The standard Linux poll() and/or select() system calls can be used with the
813 device file descriptor to watch for new events. For select(), the file descriptor
814 should be included in the exceptfds argument, and for poll(), POLLPRI should
815 be specified as the wake-up condition. Only the latest event for each filter is
818 </row></tbody></tgroup></informaltable>
821 <informaltable><tgroup cols="1"><tbody><row><entry
823 <para>int ioctl( int fd, int request = DMX_GET_EVENT,
824 struct dmx_event ⋆ev);</para>
826 </row></tbody></tgroup></informaltable>
829 <informaltable><tgroup cols="2"><tbody><row><entry
834 <para>File descriptor returned by a previous call to open().</para>
838 <para>int request</para>
841 <para>Equals DMX_GET_EVENT for this command.</para>
845 <para>struct dmx_event *ev</para>
848 <para>Pointer to the location where the event is to be stored.</para>
850 </row></tbody></tgroup></informaltable>
852 <informaltable><tgroup cols="2"><tbody><row><entry
854 <para>EWOULDBLOCK</para>
857 <para>There is no event pending, and the device is in
858 non-blocking mode.</para>
860 </row></tbody></tgroup></informaltable>
863 <section id="DMX_GET_STC">
864 <title>DMX_GET_STC</title>
867 <informaltable><tgroup cols="1"><tbody><row><entry
869 <para>This ioctl call returns the current value of the system time counter (which is driven
870 by a PES filter of type DMX_PES_PCR). Some hardware supports more than one
871 STC, so you must specify which one by setting the num field of stc before the ioctl
872 (range 0...n). The result is returned in form of a ratio with a 64 bit numerator
873 and a 32 bit denominator, so the real 90kHz STC value is stc->stc /
877 </row></tbody></tgroup></informaltable>
880 <informaltable><tgroup cols="1"><tbody><row><entry
882 <para>int ioctl( int fd, int request = DMX_GET_STC, struct
883 dmx_stc ⋆stc);</para>
885 </row></tbody></tgroup></informaltable>
888 <informaltable><tgroup cols="2"><tbody><row><entry
893 <para>File descriptor returned by a previous call to open().</para>
897 <para>int request</para>
900 <para>Equals DMX_GET_STC for this command.</para>
904 <para>struct dmx_stc *stc</para>
907 <para>Pointer to the location where the stc is to be stored.</para>
909 </row></tbody></tgroup></informaltable>
911 <informaltable><tgroup cols="2"><tbody><row><entry
916 <para>Invalid stc number.</para>
918 </row></tbody></tgroup></informaltable>
921 <section id="DMX_GET_PES_PIDS"
922 role="subsection"><title>DMX_GET_PES_PIDS</title>
925 <informaltable><tgroup cols="1"><tbody><row><entry
927 <para>This ioctl is undocumented. Documentation is welcome.</para>
929 </row></tbody></tgroup></informaltable>
932 <informaltable><tgroup cols="1"><tbody><row><entry
934 <para>int ioctl(fd, int request = DMX_GET_PES_PIDS,
937 </row></tbody></tgroup></informaltable>
940 <informaltable><tgroup cols="2"><tbody><row><entry
945 <para>File descriptor returned by a previous call to open().</para>
949 <para>int request</para>
952 <para>Equals DMX_GET_PES_PIDS for this command.</para>
960 <para>Undocumented.</para>
962 </row></tbody></tgroup></informaltable>
966 <section id="DMX_GET_CAPS"
967 role="subsection"><title>DMX_GET_CAPS</title>
970 <informaltable><tgroup cols="1"><tbody><row><entry
972 <para>This ioctl is undocumented. Documentation is welcome.</para>
974 </row></tbody></tgroup></informaltable>
977 <informaltable><tgroup cols="1"><tbody><row><entry
979 <para>int ioctl(fd, int request = DMX_GET_CAPS,
980 dmx_caps_t *);</para>
982 </row></tbody></tgroup></informaltable>
985 <informaltable><tgroup cols="2"><tbody><row><entry
990 <para>File descriptor returned by a previous call to open().</para>
994 <para>int request</para>
997 <para>Equals DMX_GET_CAPS for this command.</para>
1005 <para>Undocumented.</para>
1007 </row></tbody></tgroup></informaltable>
1011 <section id="DMX_SET_SOURCE"
1012 role="subsection"><title>DMX_SET_SOURCE</title>
1015 <informaltable><tgroup cols="1"><tbody><row><entry
1017 <para>This ioctl is undocumented. Documentation is welcome.</para>
1019 </row></tbody></tgroup></informaltable>
1022 <informaltable><tgroup cols="1"><tbody><row><entry
1024 <para>int ioctl(fd, int request = DMX_SET_SOURCE,
1025 dmx_source_t *);</para>
1027 </row></tbody></tgroup></informaltable>
1030 <informaltable><tgroup cols="2"><tbody><row><entry
1035 <para>File descriptor returned by a previous call to open().</para>
1039 <para>int request</para>
1042 <para>Equals DMX_SET_SOURCE for this command.</para>
1046 <para>dmx_source_t *
1050 <para>Undocumented.</para>
1052 </row></tbody></tgroup></informaltable>
1056 <section id="DMX_ADD_PID"
1057 role="subsection"><title>DMX_ADD_PID</title>
1060 <informaltable><tgroup cols="1"><tbody><row><entry
1062 <para>This ioctl call allows to add multiple PIDs to a transport stream filter
1063 previously set up with DMX_SET_PES_FILTER and output equal to DMX_OUT_TSDEMUX_TAP.
1064 </para></entry></row><row><entry align="char"><para>
1065 It is used by readers of /dev/dvb/adapterX/demuxY.
1066 </para></entry></row><row><entry align="char"><para>
1067 It may be called at any time, i.e. before or after the first filter on the
1068 shared file descriptor was started. It makes it possible to record multiple
1069 services without the need to de-multiplex or re-multiplex TS packets.</para>
1071 </row></tbody></tgroup></informaltable>
1074 <informaltable><tgroup cols="1"><tbody><row><entry
1076 <para>int ioctl(fd, int request = DMX_ADD_PID,
1079 </row></tbody></tgroup></informaltable>
1082 <informaltable><tgroup cols="2"><tbody><row><entry
1087 <para>File descriptor returned by a previous call to open().</para>
1091 <para>int request</para>
1094 <para>Equals DMX_ADD_PID for this command.</para>
1102 <para>PID number to be filtered.</para>
1104 </row></tbody></tgroup></informaltable>
1108 <section id="DMX_REMOVE_PID"
1109 role="subsection"><title>DMX_REMOVE_PID</title>
1112 <informaltable><tgroup cols="1"><tbody><row><entry
1114 <para>This ioctl call allows to remove a PID when multiple PIDs are set on a
1115 transport stream filter, e. g. a filter previously set up with output equal to
1116 DMX_OUT_TSDEMUX_TAP, created via either DMX_SET_PES_FILTER or DMX_ADD_PID.
1117 </para></entry></row><row><entry align="char"><para>
1118 It is used by readers of /dev/dvb/adapterX/demuxY.
1119 </para></entry></row><row><entry align="char"><para>
1120 It may be called at any time, i.e. before or after the first filter on the
1121 shared file descriptor was started. It makes it possible to record multiple
1122 services without the need to de-multiplex or re-multiplex TS packets.</para>
1124 </row></tbody></tgroup></informaltable>
1127 <informaltable><tgroup cols="1"><tbody><row><entry
1129 <para>int ioctl(fd, int request = DMX_REMOVE_PID,
1132 </row></tbody></tgroup></informaltable>
1135 <informaltable><tgroup cols="2"><tbody><row><entry
1140 <para>File descriptor returned by a previous call to open().</para>
1144 <para>int request</para>
1147 <para>Equals DMX_REMOVE_PID for this command.</para>
1155 <para>PID of the PES filter to be removed.</para>
1157 </row></tbody></tgroup></informaltable>