Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] DocBook: Remove kdapi.xml

Now that the Demux kABI is documented at device-drivers.xml,
remove it from the API docbook.

Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>

-1239
-3
Documentation/DocBook/media/dvb/dvbapi.xml
··· 125 125 &sub-audio; 126 126 </section> 127 127 </chapter> 128 - <chapter id="dvb_kdapi"> 129 - &sub-kdapi; 130 - </chapter> 131 128 <chapter id="dvb_examples"> 132 129 &sub-examples; 133 130 </chapter>
-1236
Documentation/DocBook/media/dvb/kdapi.xml
··· 1 - <title>Kernel Demux API</title> 2 - <para>The kernel demux API defines a driver-internal interface for registering low-level, 3 - hardware specific driver to a hardware independent demux layer. It is only of interest for 4 - DVB device driver writers. The header file for this API is named <constant>demux.h</constant> and located in 5 - <constant>">drivers/media/dvb-core</constant>. 6 - </para> 7 - <para>Maintainer note: This section must be reviewed. It is probably out of date. 8 - </para> 9 - 10 - <section id="kernel_demux_data_types"> 11 - <title>Kernel Demux Data Types</title> 12 - 13 - 14 - </section> 15 - <section id="ts_filter_types"> 16 - <title>TS filter types</title> 17 - <programlisting> 18 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 19 - /&#x22C6; TS packet reception &#x22C6;/ 20 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 21 - 22 - /&#x22C6; TS filter type for set_type() &#x22C6;/ 23 - 24 - #define TS_PACKET 1 /&#x22C6; send TS packets (188 bytes) to callback (default) &#x22C6;/ 25 - #define TS_PAYLOAD_ONLY 2 /&#x22C6; in case TS_PACKET is set, only send the TS 26 - payload (&#x003C;=184 bytes per packet) to callback &#x22C6;/ 27 - #define TS_DECODER 4 /&#x22C6; send stream to built-in decoder (if present) &#x22C6;/ 28 - </programlisting> 29 - 30 - </section> 31 - <section id="dmx_ts_pes_t"> 32 - <title>dmx_ts_pes_t</title> 33 - <para>The structure 34 - </para> 35 - <programlisting> 36 - typedef enum 37 - { 38 - DMX_TS_PES_AUDIO, /&#x22C6; also send packets to audio decoder (if it exists) &#x22C6;/ 39 - DMX_TS_PES_VIDEO, /&#x22C6; ... &#x22C6;/ 40 - DMX_TS_PES_TELETEXT, 41 - DMX_TS_PES_SUBTITLE, 42 - DMX_TS_PES_PCR, 43 - DMX_TS_PES_OTHER, 44 - } dmx_ts_pes_t; 45 - </programlisting> 46 - <para>describes the PES type for filters which write to a built-in decoder. The correspond (and 47 - should be kept identical) to the types in the demux device. 48 - </para> 49 - <programlisting> 50 - struct dmx_ts_feed_s { 51 - int is_filtering; /&#x22C6; Set to non-zero when filtering in progress &#x22C6;/ 52 - struct dmx_demux_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/ 53 - void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/ 54 - int (&#x22C6;set) (struct dmx_ts_feed_s&#x22C6; feed, 55 - __u16 pid, 56 - size_t callback_length, 57 - size_t circular_buffer_size, 58 - int descramble, 59 - struct timespec timeout); 60 - int (&#x22C6;start_filtering) (struct dmx_ts_feed_s&#x22C6; feed); 61 - int (&#x22C6;stop_filtering) (struct dmx_ts_feed_s&#x22C6; feed); 62 - int (&#x22C6;set_type) (struct dmx_ts_feed_s&#x22C6; feed, 63 - int type, 64 - dmx_ts_pes_t pes_type); 65 - }; 66 - 67 - typedef struct dmx_ts_feed_s dmx_ts_feed_t; 68 - </programlisting> 69 - <programlisting> 70 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 71 - /&#x22C6; PES packet reception (not supported yet) &#x22C6;/ 72 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 73 - 74 - typedef struct dmx_pes_filter_s { 75 - struct dmx_pes_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/ 76 - void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/ 77 - } dmx_pes_filter_t; 78 - </programlisting> 79 - <programlisting> 80 - typedef struct dmx_pes_feed_s { 81 - int is_filtering; /&#x22C6; Set to non-zero when filtering in progress &#x22C6;/ 82 - struct dmx_demux_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/ 83 - void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/ 84 - int (&#x22C6;set) (struct dmx_pes_feed_s&#x22C6; feed, 85 - __u16 pid, 86 - size_t circular_buffer_size, 87 - int descramble, 88 - struct timespec timeout); 89 - int (&#x22C6;start_filtering) (struct dmx_pes_feed_s&#x22C6; feed); 90 - int (&#x22C6;stop_filtering) (struct dmx_pes_feed_s&#x22C6; feed); 91 - int (&#x22C6;allocate_filter) (struct dmx_pes_feed_s&#x22C6; feed, 92 - dmx_pes_filter_t&#x22C6;&#x22C6; filter); 93 - int (&#x22C6;release_filter) (struct dmx_pes_feed_s&#x22C6; feed, 94 - dmx_pes_filter_t&#x22C6; filter); 95 - } dmx_pes_feed_t; 96 - </programlisting> 97 - <programlisting> 98 - typedef struct { 99 - __u8 filter_value [DMX_MAX_FILTER_SIZE]; 100 - __u8 filter_mask [DMX_MAX_FILTER_SIZE]; 101 - struct dmx_section_feed_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/ 102 - void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/ 103 - } dmx_section_filter_t; 104 - </programlisting> 105 - <programlisting> 106 - struct dmx_section_feed_s { 107 - int is_filtering; /&#x22C6; Set to non-zero when filtering in progress &#x22C6;/ 108 - struct dmx_demux_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/ 109 - void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/ 110 - int (&#x22C6;set) (struct dmx_section_feed_s&#x22C6; feed, 111 - __u16 pid, 112 - size_t circular_buffer_size, 113 - int descramble, 114 - int check_crc); 115 - int (&#x22C6;allocate_filter) (struct dmx_section_feed_s&#x22C6; feed, 116 - dmx_section_filter_t&#x22C6;&#x22C6; filter); 117 - int (&#x22C6;release_filter) (struct dmx_section_feed_s&#x22C6; feed, 118 - dmx_section_filter_t&#x22C6; filter); 119 - int (&#x22C6;start_filtering) (struct dmx_section_feed_s&#x22C6; feed); 120 - int (&#x22C6;stop_filtering) (struct dmx_section_feed_s&#x22C6; feed); 121 - }; 122 - typedef struct dmx_section_feed_s dmx_section_feed_t; 123 - 124 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 125 - /&#x22C6; Callback functions &#x22C6;/ 126 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 127 - 128 - typedef int (&#x22C6;dmx_ts_cb) ( __u8 &#x22C6; buffer1, 129 - size_t buffer1_length, 130 - __u8 &#x22C6; buffer2, 131 - size_t buffer2_length, 132 - dmx_ts_feed_t&#x22C6; source) 133 - 134 - typedef int (&#x22C6;dmx_section_cb) ( __u8 &#x22C6; buffer1, 135 - size_t buffer1_len, 136 - __u8 &#x22C6; buffer2, 137 - size_t buffer2_len, 138 - dmx_section_filter_t &#x22C6; source); 139 - 140 - typedef int (&#x22C6;dmx_pes_cb) ( __u8 &#x22C6; buffer1, 141 - size_t buffer1_len, 142 - __u8 &#x22C6; buffer2, 143 - size_t buffer2_len, 144 - dmx_pes_filter_t&#x22C6; source); 145 - 146 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 147 - /&#x22C6; DVB Front-End &#x22C6;/ 148 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 149 - 150 - typedef enum { 151 - DMX_MEMORY_FE, 152 - DMX_FRONTEND_0, 153 - } dmx_frontend_source; 154 - 155 - typedef struct { 156 - /&#x22C6; The following char&#x22C6; fields point to NULL terminated strings &#x22C6;/ 157 - char&#x22C6; id; /&#x22C6; Unique front-end identifier &#x22C6;/ 158 - char&#x22C6; vendor; /&#x22C6; Name of the front-end vendor &#x22C6;/ 159 - char&#x22C6; model; /&#x22C6; Name of the front-end model &#x22C6;/ 160 - struct list_head connectivity_list; /&#x22C6; List of front-ends that can 161 - be connected to a particular 162 - demux &#x22C6;/ 163 - void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/ 164 - dmx_frontend_source source; 165 - } dmx_frontend_t; 166 - 167 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 168 - /&#x22C6; MPEG-2 TS Demux &#x22C6;/ 169 - /&#x22C6;--------------------------------------------------------------------------&#x22C6;/ 170 - 171 - /&#x22C6; 172 - &#x22C6; Flags OR'ed in the capabilites field of struct dmx_demux_s. 173 - &#x22C6;/ 174 - 175 - #define DMX_TS_FILTERING 1 176 - #define DMX_PES_FILTERING 2 177 - #define DMX_SECTION_FILTERING 4 178 - #define DMX_MEMORY_BASED_FILTERING 8 /&#x22C6; write() available &#x22C6;/ 179 - #define DMX_CRC_CHECKING 16 180 - #define DMX_TS_DESCRAMBLING 32 181 - #define DMX_SECTION_PAYLOAD_DESCRAMBLING 64 182 - #define DMX_MAC_ADDRESS_DESCRAMBLING 128 183 - </programlisting> 184 - 185 - </section> 186 - <section id="demux_demux_t"> 187 - <title>demux_demux_t</title> 188 - <programlisting> 189 - /&#x22C6; 190 - &#x22C6; DMX_FE_ENTRY(): Casts elements in the list of registered 191 - &#x22C6; front-ends from the generic type struct list_head 192 - &#x22C6; to the type &#x22C6; dmx_frontend_t 193 - &#x22C6;. 194 - &#x22C6;/ 195 - </programlisting> 196 - 197 - </section> 198 - <section id="demux_directory"> 199 - <title>Demux directory</title> 200 - <programlisting> 201 - /&#x22C6; 202 - &#x22C6; DMX_DIR_ENTRY(): Casts elements in the list of registered 203 - &#x22C6; demuxes from the generic type struct list_head&#x22C6; to the type dmx_demux_t 204 - &#x22C6;. 205 - &#x22C6;/ 206 - 207 - #define DMX_DIR_ENTRY(list) list_entry(list, dmx_demux_t, reg_list) 208 - 209 - int dmx_register_demux (dmx_demux_t&#x22C6; demux); 210 - int dmx_unregister_demux (dmx_demux_t&#x22C6; demux); 211 - struct list_head&#x22C6; dmx_get_demuxes (void); 212 - </programlisting> 213 - </section></section> 214 - <section id="demux_directory_api"> 215 - <title>Demux Directory API</title> 216 - <para>The demux directory is a Linux kernel-wide facility for registering and accessing the 217 - MPEG-2 TS demuxes in the system. Run-time registering and unregistering of demux drivers 218 - is possible using this API. 219 - </para> 220 - <para>All demux drivers in the directory implement the abstract interface dmx_demux_t. 221 - </para> 222 - 223 - <section 224 - role="subsection"><title>dmx_register_demux()</title> 225 - <para>DESCRIPTION 226 - </para> 227 - <informaltable><tgroup cols="1"><tbody><row><entry 228 - align="char"> 229 - <para>This function makes a demux driver interface available to the Linux kernel. It is 230 - usually called by the init_module() function of the kernel module that contains 231 - the demux driver. The caller of this function is responsible for allocating 232 - dynamic or static memory for the demux structure and for initializing its fields 233 - before calling this function. The memory allocated for the demux structure 234 - must not be freed before calling dmx_unregister_demux(),</para> 235 - </entry> 236 - </row></tbody></tgroup></informaltable> 237 - <para>SYNOPSIS 238 - </para> 239 - <informaltable><tgroup cols="1"><tbody><row><entry 240 - align="char"> 241 - <para>int dmx_register_demux ( dmx_demux_t &#x22C6;demux )</para> 242 - </entry> 243 - </row></tbody></tgroup></informaltable> 244 - <para>PARAMETERS 245 - </para> 246 - <informaltable><tgroup cols="2"><tbody><row><entry 247 - align="char"> 248 - <para>dmx_demux_t* 249 - demux</para> 250 - </entry><entry 251 - align="char"> 252 - <para>Pointer to the demux structure.</para> 253 - </entry> 254 - </row></tbody></tgroup></informaltable> 255 - <para>RETURNS 256 - </para> 257 - <informaltable><tgroup cols="2"><tbody><row><entry 258 - align="char"> 259 - <para>0</para> 260 - </entry><entry 261 - align="char"> 262 - <para>The function was completed without errors.</para> 263 - </entry> 264 - </row><row><entry 265 - align="char"> 266 - <para>-EEXIST</para> 267 - </entry><entry 268 - align="char"> 269 - <para>A demux with the same value of the id field already stored 270 - in the directory.</para> 271 - </entry> 272 - </row><row><entry 273 - align="char"> 274 - <para>-ENOSPC</para> 275 - </entry><entry 276 - align="char"> 277 - <para>No space left in the directory.</para> 278 - </entry> 279 - </row></tbody></tgroup></informaltable> 280 - 281 - </section><section 282 - role="subsection"><title>dmx_unregister_demux()</title> 283 - <para>DESCRIPTION 284 - </para> 285 - <informaltable><tgroup cols="1"><tbody><row><entry 286 - align="char"> 287 - <para>This function is called to indicate that the given demux interface is no 288 - longer available. The caller of this function is responsible for freeing the 289 - memory of the demux structure, if it was dynamically allocated before calling 290 - dmx_register_demux(). The cleanup_module() function of the kernel module 291 - that contains the demux driver should call this function. Note that this function 292 - fails if the demux is currently in use, i.e., release_demux() has not been called 293 - for the interface.</para> 294 - </entry> 295 - </row></tbody></tgroup></informaltable> 296 - <para>SYNOPSIS 297 - </para> 298 - <informaltable><tgroup cols="1"><tbody><row><entry 299 - align="char"> 300 - <para>int dmx_unregister_demux ( dmx_demux_t &#x22C6;demux )</para> 301 - </entry> 302 - </row></tbody></tgroup></informaltable> 303 - <para>PARAMETERS 304 - </para> 305 - <informaltable><tgroup cols="2"><tbody><row><entry 306 - align="char"> 307 - <para>dmx_demux_t* 308 - demux</para> 309 - </entry><entry 310 - align="char"> 311 - <para>Pointer to the demux structure which is to be 312 - unregistered.</para> 313 - </entry> 314 - </row></tbody></tgroup></informaltable> 315 - <para>RETURNS 316 - </para> 317 - <informaltable><tgroup cols="2"><tbody><row><entry 318 - align="char"> 319 - <para>0</para> 320 - </entry><entry 321 - align="char"> 322 - <para>The function was completed without errors.</para> 323 - </entry> 324 - </row><row><entry 325 - align="char"> 326 - <para>ENODEV</para> 327 - </entry><entry 328 - align="char"> 329 - <para>The specified demux is not registered in the demux 330 - directory.</para> 331 - </entry> 332 - </row><row><entry 333 - align="char"> 334 - <para>EBUSY</para> 335 - </entry><entry 336 - align="char"> 337 - <para>The specified demux is currently in use.</para> 338 - </entry> 339 - </row></tbody></tgroup></informaltable> 340 - 341 - </section><section 342 - role="subsection"><title>dmx_get_demuxes()</title> 343 - <para>DESCRIPTION 344 - </para> 345 - <informaltable><tgroup cols="1"><tbody><row><entry 346 - align="char"> 347 - <para>Provides the caller with the list of registered demux interfaces, using the 348 - standard list structure defined in the include file linux/list.h. The include file 349 - demux.h defines the macro DMX_DIR_ENTRY() for converting an element of 350 - the generic type struct list_head* to the type dmx_demux_t*. The caller must 351 - not free the memory of any of the elements obtained via this function call.</para> 352 - </entry> 353 - </row></tbody></tgroup></informaltable> 354 - <para>SYNOPSIS 355 - </para> 356 - <informaltable><tgroup cols="1"><tbody><row><entry 357 - align="char"> 358 - <para>struct list_head &#x22C6;dmx_get_demuxes ()</para> 359 - </entry> 360 - </row></tbody></tgroup></informaltable> 361 - <para>PARAMETERS 362 - </para> 363 - <informaltable><tgroup cols="2"><tbody><row><entry 364 - align="char"> 365 - <para>none</para> 366 - </entry> 367 - </row></tbody></tgroup></informaltable> 368 - <para>RETURNS 369 - </para> 370 - <informaltable><tgroup cols="2"><tbody><row><entry 371 - align="char"> 372 - <para>struct list_head *</para> 373 - </entry><entry 374 - align="char"> 375 - <para>A list of demux interfaces, or NULL in the case of an 376 - empty list.</para> 377 - </entry> 378 - </row></tbody></tgroup></informaltable> 379 - </section></section> 380 - <section id="demux_api"> 381 - <title>Demux API</title> 382 - <para>The demux API should be implemented for each demux in the system. It is used to select 383 - the TS source of a demux and to manage the demux resources. When the demux 384 - client allocates a resource via the demux API, it receives a pointer to the API of that 385 - resource. 386 - </para> 387 - <para>Each demux receives its TS input from a DVB front-end or from memory, as set via the 388 - demux API. In a system with more than one front-end, the API can be used to select one of 389 - the DVB front-ends as a TS source for a demux, unless this is fixed in the HW platform. The 390 - demux API only controls front-ends regarding their connections with demuxes; the APIs 391 - used to set the other front-end parameters, such as tuning, are not defined in this 392 - document. 393 - </para> 394 - <para>The functions that implement the abstract interface demux should be defined static or 395 - module private and registered to the Demux Directory for external access. It is not necessary 396 - to implement every function in the demux_t struct, however (for example, a demux interface 397 - might support Section filtering, but not TS or PES filtering). The API client is expected to 398 - check the value of any function pointer before calling the function: the value of NULL means 399 - &#8220;function not available&#8221;. 400 - </para> 401 - <para>Whenever the functions of the demux API modify shared data, the possibilities of lost 402 - update and race condition problems should be addressed, e.g. by protecting parts of code with 403 - mutexes. This is especially important on multi-processor hosts. 404 - </para> 405 - <para>Note that functions called from a bottom half context must not sleep, at least in the 2.2.x 406 - kernels. Even a simple memory allocation can result in a kernel thread being put to sleep if 407 - swapping is needed. For example, the Linux kernel calls the functions of a network device 408 - interface from a bottom half context. Thus, if a demux API function is called from network 409 - device code, the function must not sleep. 410 - </para> 411 - 412 - </section> 413 - <section id="demux_callback_api"> 414 - <title>Demux Callback API</title> 415 - <para>This kernel-space API comprises the callback functions that deliver filtered data to the 416 - demux client. Unlike the other APIs, these API functions are provided by the client and called 417 - from the demux code. 418 - </para> 419 - <para>The function pointers of this abstract interface are not packed into a structure as in the 420 - other demux APIs, because the callback functions are registered and used independent 421 - of each other. As an example, it is possible for the API client to provide several 422 - callback functions for receiving TS packets and no callbacks for PES packets or 423 - sections. 424 - </para> 425 - <para>The functions that implement the callback API need not be re-entrant: when a demux 426 - driver calls one of these functions, the driver is not allowed to call the function again before 427 - the original call returns. If a callback is triggered by a hardware interrupt, it is recommended 428 - to use the Linux &#8220;bottom half&#8221; mechanism or start a tasklet instead of making the callback 429 - function call directly from a hardware interrupt. 430 - </para> 431 - 432 - <section 433 - role="subsection"><title>dmx_ts_cb()</title> 434 - <para>DESCRIPTION 435 - </para> 436 - <informaltable><tgroup cols="1"><tbody><row><entry 437 - align="char"> 438 - <para>This function, provided by the client of the demux API, is called from the 439 - demux code. The function is only called when filtering on this TS feed has 440 - been enabled using the start_filtering() function.</para> 441 - </entry> 442 - </row><row><entry 443 - align="char"> 444 - <para>Any TS packets that match the filter settings are copied to a circular buffer. The 445 - filtered TS packets are delivered to the client using this callback function. The 446 - size of the circular buffer is controlled by the circular_buffer_size parameter 447 - of the set() function in the TS Feed API. It is expected that the buffer1 and 448 - buffer2 callback parameters point to addresses within the circular buffer, but 449 - other implementations are also possible. Note that the called party should not 450 - try to free the memory the buffer1 and buffer2 parameters point to.</para> 451 - </entry> 452 - </row><row><entry 453 - align="char"> 454 - <para>When this function is called, the buffer1 parameter typically points to the 455 - start of the first undelivered TS packet within a circular buffer. The buffer2 456 - buffer parameter is normally NULL, except when the received TS packets have 457 - crossed the last address of the circular buffer and &#8221;wrapped&#8221; to the beginning 458 - of the buffer. In the latter case the buffer1 parameter would contain an address 459 - within the circular buffer, while the buffer2 parameter would contain the first 460 - address of the circular buffer.</para> 461 - </entry> 462 - </row><row><entry 463 - align="char"> 464 - <para>The number of bytes delivered with this function (i.e. buffer1_length + 465 - buffer2_length) is usually equal to the value of callback_length parameter 466 - given in the set() function, with one exception: if a timeout occurs before 467 - receiving callback_length bytes of TS data, any undelivered packets are 468 - immediately delivered to the client by calling this function. The timeout 469 - duration is controlled by the set() function in the TS Feed API.</para> 470 - </entry> 471 - </row><row><entry 472 - align="char"> 473 - <para>If a TS packet is received with errors that could not be fixed by the TS-level 474 - forward error correction (FEC), the Transport_error_indicator flag of the TS 475 - packet header should be set. The TS packet should not be discarded, as 476 - the error can possibly be corrected by a higher layer protocol. If the called 477 - party is slow in processing the callback, it is possible that the circular buffer 478 - eventually fills up. If this happens, the demux driver should discard any TS 479 - packets received while the buffer is full. The error should be indicated to the 480 - client on the next callback by setting the success parameter to the value of 481 - DMX_OVERRUN_ERROR.</para> 482 - </entry> 483 - </row><row><entry 484 - align="char"> 485 - <para>The type of data returned to the callback can be selected by the new 486 - function int (*set_type) (struct dmx_ts_feed_s* feed, int type, dmx_ts_pes_t 487 - pes_type) which is part of the dmx_ts_feed_s struct (also cf. to the 488 - include file ost/demux.h) The type parameter decides if the raw TS packet 489 - (TS_PACKET) or just the payload (TS_PACKET&#8212;TS_PAYLOAD_ONLY) 490 - should be returned. If additionally the TS_DECODER bit is set the stream 491 - will also be sent to the hardware MPEG decoder. In this case, the second 492 - flag decides as what kind of data the stream should be interpreted. The 493 - possible choices are one of DMX_TS_PES_AUDIO, DMX_TS_PES_VIDEO, 494 - DMX_TS_PES_TELETEXT, DMX_TS_PES_SUBTITLE, 495 - DMX_TS_PES_PCR, or DMX_TS_PES_OTHER.</para> 496 - </entry> 497 - </row></tbody></tgroup></informaltable> 498 - <para>SYNOPSIS 499 - </para> 500 - <informaltable><tgroup cols="1"><tbody><row><entry 501 - align="char"> 502 - <para>int dmx_ts_cb(__u8&#x22C6; buffer1, size_t buffer1_length, 503 - __u8&#x22C6; buffer2, size_t buffer2_length, dmx_ts_feed_t&#x22C6; 504 - source);</para> 505 - </entry> 506 - </row></tbody></tgroup></informaltable> 507 - <para>PARAMETERS 508 - </para> 509 - <informaltable><tgroup cols="2"><tbody><row><entry 510 - align="char"> 511 - <para>__u8* buffer1</para> 512 - </entry><entry 513 - align="char"> 514 - <para>Pointer to the start of the filtered TS packets.</para> 515 - </entry> 516 - </row><row><entry 517 - align="char"> 518 - <para>size_t buffer1_length</para> 519 - </entry><entry 520 - align="char"> 521 - <para>Length of the TS data in buffer1.</para> 522 - </entry> 523 - </row><row><entry 524 - align="char"> 525 - <para>__u8* buffer2</para> 526 - </entry><entry 527 - align="char"> 528 - <para>Pointer to the tail of the filtered TS packets, or NULL.</para> 529 - </entry> 530 - </row><row><entry 531 - align="char"> 532 - <para>size_t buffer2_length</para> 533 - </entry><entry 534 - align="char"> 535 - <para>Length of the TS data in buffer2.</para> 536 - </entry> 537 - </row><row><entry 538 - align="char"> 539 - <para>dmx_ts_feed_t* 540 - source</para> 541 - </entry><entry 542 - align="char"> 543 - <para>Indicates which TS feed is the source of the callback.</para> 544 - </entry> 545 - </row></tbody></tgroup></informaltable> 546 - <para>RETURNS 547 - </para> 548 - <informaltable><tgroup cols="2"><tbody><row><entry 549 - align="char"> 550 - <para>0</para> 551 - </entry><entry 552 - align="char"> 553 - <para>Continue filtering.</para> 554 - </entry> 555 - </row><row><entry 556 - align="char"> 557 - <para>-1</para> 558 - </entry><entry 559 - align="char"> 560 - <para>Stop filtering - has the same effect as a call to 561 - stop_filtering() on the TS Feed API.</para> 562 - </entry> 563 - </row></tbody></tgroup></informaltable> 564 - 565 - </section><section 566 - role="subsection"><title>dmx_section_cb()</title> 567 - <para>DESCRIPTION 568 - </para> 569 - <informaltable><tgroup cols="1"><tbody><row><entry 570 - align="char"> 571 - <para>This function, provided by the client of the demux API, is called from the 572 - demux code. The function is only called when filtering of sections has been 573 - enabled using the function start_filtering() of the section feed API. When the 574 - demux driver has received a complete section that matches at least one section 575 - filter, the client is notified via this callback function. Normally this function is 576 - called for each received section; however, it is also possible to deliver multiple 577 - sections with one callback, for example when the system load is high. If an 578 - error occurs while receiving a section, this function should be called with 579 - the corresponding error type set in the success field, whether or not there is 580 - data to deliver. The Section Feed implementation should maintain a circular 581 - buffer for received sections. However, this is not necessary if the Section Feed 582 - API is implemented as a client of the TS Feed API, because the TS Feed 583 - implementation then buffers the received data. The size of the circular buffer 584 - can be configured using the set() function in the Section Feed API. If there 585 - is no room in the circular buffer when a new section is received, the section 586 - must be discarded. If this happens, the value of the success parameter should 587 - be DMX_OVERRUN_ERROR on the next callback.</para> 588 - </entry> 589 - </row></tbody></tgroup></informaltable> 590 - <para>SYNOPSIS 591 - </para> 592 - <informaltable><tgroup cols="1"><tbody><row><entry 593 - align="char"> 594 - <para>int dmx_section_cb(__u8&#x22C6; buffer1, size_t 595 - buffer1_length, __u8&#x22C6; buffer2, size_t 596 - buffer2_length, dmx_section_filter_t&#x22C6; source);</para> 597 - </entry> 598 - </row></tbody></tgroup></informaltable> 599 - <para>PARAMETERS 600 - </para> 601 - <informaltable><tgroup cols="2"><tbody><row><entry 602 - align="char"> 603 - <para>__u8* buffer1</para> 604 - </entry><entry 605 - align="char"> 606 - <para>Pointer to the start of the filtered section, e.g. within the 607 - circular buffer of the demux driver.</para> 608 - </entry> 609 - </row><row><entry 610 - align="char"> 611 - <para>size_t buffer1_length</para> 612 - </entry><entry 613 - align="char"> 614 - <para>Length of the filtered section data in buffer1, including 615 - headers and CRC.</para> 616 - </entry> 617 - </row><row><entry 618 - align="char"> 619 - <para>__u8* buffer2</para> 620 - </entry><entry 621 - align="char"> 622 - <para>Pointer to the tail of the filtered section data, or NULL. 623 - Useful to handle the wrapping of a circular buffer.</para> 624 - </entry> 625 - </row><row><entry 626 - align="char"> 627 - <para>size_t buffer2_length</para> 628 - </entry><entry 629 - align="char"> 630 - <para>Length of the filtered section data in buffer2, including 631 - headers and CRC.</para> 632 - </entry> 633 - </row><row><entry 634 - align="char"> 635 - <para>dmx_section_filter_t* 636 - filter</para> 637 - </entry><entry 638 - align="char"> 639 - <para>Indicates the filter that triggered the callback.</para> 640 - </entry> 641 - </row></tbody></tgroup></informaltable> 642 - <para>RETURNS 643 - </para> 644 - <informaltable><tgroup cols="2"><tbody><row><entry 645 - align="char"> 646 - <para>0</para> 647 - </entry><entry 648 - align="char"> 649 - <para>Continue filtering.</para> 650 - </entry> 651 - </row><row><entry 652 - align="char"> 653 - <para>-1</para> 654 - </entry><entry 655 - align="char"> 656 - <para>Stop filtering - has the same effect as a call to 657 - stop_filtering() on the Section Feed API.</para> 658 - </entry> 659 - </row></tbody></tgroup></informaltable> 660 - </section></section> 661 - <section id="ts_feed_api"> 662 - <title>TS Feed API</title> 663 - <para>A TS feed is typically mapped to a hardware PID filter on the demux chip. 664 - Using this API, the client can set the filtering properties to start/stop filtering TS 665 - packets on a particular TS feed. The API is defined as an abstract interface of the type 666 - dmx_ts_feed_t. 667 - </para> 668 - <para>The functions that implement the interface should be defined static or module private. The 669 - client can get the handle of a TS feed API by calling the function allocate_ts_feed() in the 670 - demux API. 671 - </para> 672 - 673 - <section 674 - role="subsection"><title>set()</title> 675 - <para>DESCRIPTION 676 - </para> 677 - <informaltable><tgroup cols="1"><tbody><row><entry 678 - align="char"> 679 - <para>This function sets the parameters of a TS feed. Any filtering in progress on the 680 - TS feed must be stopped before calling this function.</para> 681 - </entry> 682 - </row></tbody></tgroup></informaltable> 683 - <para>SYNOPSIS 684 - </para> 685 - <informaltable><tgroup cols="1"><tbody><row><entry 686 - align="char"> 687 - <para>int set ( dmx_ts_feed_t&#x22C6; feed, __u16 pid, size_t 688 - callback_length, size_t circular_buffer_size, int 689 - descramble, struct timespec timeout);</para> 690 - </entry> 691 - </row></tbody></tgroup></informaltable> 692 - <para>PARAMETERS 693 - </para> 694 - <informaltable><tgroup cols="2"><tbody><row><entry 695 - align="char"> 696 - <para>dmx_ts_feed_t* feed</para> 697 - </entry><entry 698 - align="char"> 699 - <para>Pointer to the TS feed API and instance data.</para> 700 - </entry> 701 - </row><row><entry 702 - align="char"> 703 - <para>__u16 pid</para> 704 - </entry><entry 705 - align="char"> 706 - <para>PID value to filter. Only the TS packets carrying the 707 - specified PID will be passed to the API client.</para> 708 - </entry> 709 - </row><row><entry 710 - align="char"> 711 - <para>size_t 712 - callback_length</para> 713 - </entry><entry 714 - align="char"> 715 - <para>Number of bytes to deliver with each call to the 716 - dmx_ts_cb() callback function. The value of this 717 - parameter should be a multiple of 188.</para> 718 - </entry> 719 - </row><row><entry 720 - align="char"> 721 - <para>size_t 722 - circular_buffer_size</para> 723 - </entry><entry 724 - align="char"> 725 - <para>Size of the circular buffer for the filtered TS packets.</para> 726 - </entry> 727 - </row><row><entry 728 - align="char"> 729 - <para>int descramble</para> 730 - </entry><entry 731 - align="char"> 732 - <para>If non-zero, descramble the filtered TS packets.</para> 733 - </entry> 734 - </row><row><entry 735 - align="char"> 736 - <para>struct timespec 737 - timeout</para> 738 - </entry><entry 739 - align="char"> 740 - <para>Maximum time to wait before delivering received TS 741 - packets to the client.</para> 742 - </entry> 743 - </row></tbody></tgroup></informaltable> 744 - <para>RETURNS 745 - </para> 746 - <informaltable><tgroup cols="2"><tbody><row><entry 747 - align="char"> 748 - <para>0</para> 749 - </entry><entry 750 - align="char"> 751 - <para>The function was completed without errors.</para> 752 - </entry> 753 - </row><row><entry 754 - align="char"> 755 - <para>-ENOMEM</para> 756 - </entry><entry 757 - align="char"> 758 - <para>Not enough memory for the requested buffer size.</para> 759 - </entry> 760 - </row><row><entry 761 - align="char"> 762 - <para>-ENOSYS</para> 763 - </entry><entry 764 - align="char"> 765 - <para>No descrambling facility available for TS.</para> 766 - </entry> 767 - </row><row><entry 768 - align="char"> 769 - <para>-EINVAL</para> 770 - </entry><entry 771 - align="char"> 772 - <para>Bad parameter.</para> 773 - </entry> 774 - </row></tbody></tgroup></informaltable> 775 - 776 - </section><section 777 - role="subsection"><title>start_filtering()</title> 778 - <para>DESCRIPTION 779 - </para> 780 - <informaltable><tgroup cols="1"><tbody><row><entry 781 - align="char"> 782 - <para>Starts filtering TS packets on this TS feed, according to its settings. The PID 783 - value to filter can be set by the API client. All matching TS packets are 784 - delivered asynchronously to the client, using the callback function registered 785 - with allocate_ts_feed().</para> 786 - </entry> 787 - </row></tbody></tgroup></informaltable> 788 - <para>SYNOPSIS 789 - </para> 790 - <informaltable><tgroup cols="1"><tbody><row><entry 791 - align="char"> 792 - <para>int start_filtering(dmx_ts_feed_t&#x22C6; feed);</para> 793 - </entry> 794 - </row></tbody></tgroup></informaltable> 795 - <para>PARAMETERS 796 - </para> 797 - <informaltable><tgroup cols="2"><tbody><row><entry 798 - align="char"> 799 - <para>dmx_ts_feed_t* feed</para> 800 - </entry><entry 801 - align="char"> 802 - <para>Pointer to the TS feed API and instance data.</para> 803 - </entry> 804 - </row></tbody></tgroup></informaltable> 805 - <para>RETURNS 806 - </para> 807 - <informaltable><tgroup cols="2"><tbody><row><entry 808 - align="char"> 809 - <para>0</para> 810 - </entry><entry 811 - align="char"> 812 - <para>The function was completed without errors.</para> 813 - </entry> 814 - </row><row><entry 815 - align="char"> 816 - <para>-EINVAL</para> 817 - </entry><entry 818 - align="char"> 819 - <para>Bad parameter.</para> 820 - </entry> 821 - </row></tbody></tgroup></informaltable> 822 - 823 - </section><section 824 - role="subsection"><title>stop_filtering()</title> 825 - <para>DESCRIPTION 826 - </para> 827 - <informaltable><tgroup cols="1"><tbody><row><entry 828 - align="char"> 829 - <para>Stops filtering TS packets on this TS feed.</para> 830 - </entry> 831 - </row></tbody></tgroup></informaltable> 832 - <para>SYNOPSIS 833 - </para> 834 - <informaltable><tgroup cols="1"><tbody><row><entry 835 - align="char"> 836 - <para>int stop_filtering(dmx_ts_feed_t&#x22C6; feed);</para> 837 - </entry> 838 - </row></tbody></tgroup></informaltable> 839 - <para>PARAMETERS 840 - </para> 841 - <informaltable><tgroup cols="2"><tbody><row><entry 842 - align="char"> 843 - <para>dmx_ts_feed_t* feed</para> 844 - </entry><entry 845 - align="char"> 846 - <para>Pointer to the TS feed API and instance data.</para> 847 - </entry> 848 - </row></tbody></tgroup></informaltable> 849 - <para>RETURNS 850 - </para> 851 - <informaltable><tgroup cols="2"><tbody><row><entry 852 - align="char"> 853 - <para>0</para> 854 - </entry><entry 855 - align="char"> 856 - <para>The function was completed without errors.</para> 857 - </entry> 858 - </row><row><entry 859 - align="char"> 860 - <para>-EINVAL</para> 861 - </entry><entry 862 - align="char"> 863 - <para>Bad parameter.</para> 864 - </entry> 865 - </row></tbody></tgroup></informaltable> 866 - </section></section> 867 - <section id="section_feed_api"> 868 - <title>Section Feed API</title> 869 - <para>A section feed is a resource consisting of a PID filter and a set of section filters. Using this 870 - API, the client can set the properties of a section feed and to start/stop filtering. The API is 871 - defined as an abstract interface of the type dmx_section_feed_t. The functions that implement 872 - the interface should be defined static or module private. The client can get the handle of 873 - a section feed API by calling the function allocate_section_feed() in the demux 874 - API. 875 - </para> 876 - <para>On demux platforms that provide section filtering in hardware, the Section Feed API 877 - implementation provides a software wrapper for the demux hardware. Other platforms may 878 - support only PID filtering in hardware, requiring that TS packets are converted to sections in 879 - software. In the latter case the Section Feed API implementation can be a client of the TS 880 - Feed API. 881 - </para> 882 - 883 - </section> 884 - <section id="kdapi_set"> 885 - <title>set()</title> 886 - <para>DESCRIPTION 887 - </para> 888 - <informaltable><tgroup cols="1"><tbody><row><entry 889 - align="char"> 890 - <para>This function sets the parameters of a section feed. Any filtering in progress on 891 - the section feed must be stopped before calling this function. If descrambling 892 - is enabled, the payload_scrambling_control and address_scrambling_control 893 - fields of received DVB datagram sections should be observed. If either one is 894 - non-zero, the section should be descrambled either in hardware or using the 895 - functions descramble_mac_address() and descramble_section_payload() of the 896 - demux API. Note that according to the MPEG-2 Systems specification, only 897 - the payloads of private sections can be scrambled while the rest of the section 898 - data must be sent in the clear.</para> 899 - </entry> 900 - </row></tbody></tgroup></informaltable> 901 - <para>SYNOPSIS 902 - </para> 903 - <informaltable><tgroup cols="1"><tbody><row><entry 904 - align="char"> 905 - <para>int set(dmx_section_feed_t&#x22C6; feed, __u16 pid, size_t 906 - circular_buffer_size, int descramble, int 907 - check_crc);</para> 908 - </entry> 909 - </row></tbody></tgroup></informaltable> 910 - <para>PARAMETERS 911 - </para> 912 - <informaltable><tgroup cols="2"><tbody><row><entry 913 - align="char"> 914 - <para>dmx_section_feed_t* 915 - feed</para> 916 - </entry><entry 917 - align="char"> 918 - <para>Pointer to the section feed API and instance data.</para> 919 - </entry> 920 - </row><row><entry 921 - align="char"> 922 - <para>__u16 pid</para> 923 - </entry><entry 924 - align="char"> 925 - <para>PID value to filter; only the TS packets carrying the 926 - specified PID will be accepted.</para> 927 - </entry> 928 - </row><row><entry 929 - align="char"> 930 - <para>size_t 931 - circular_buffer_size</para> 932 - </entry><entry 933 - align="char"> 934 - <para>Size of the circular buffer for filtered sections.</para> 935 - </entry> 936 - </row><row><entry 937 - align="char"> 938 - <para>int descramble</para> 939 - </entry><entry 940 - align="char"> 941 - <para>If non-zero, descramble any sections that are scrambled.</para> 942 - </entry> 943 - </row><row><entry 944 - align="char"> 945 - <para>int check_crc</para> 946 - </entry><entry 947 - align="char"> 948 - <para>If non-zero, check the CRC values of filtered sections.</para> 949 - </entry> 950 - </row></tbody></tgroup></informaltable> 951 - <para>RETURNS 952 - </para> 953 - <informaltable><tgroup cols="2"><tbody><row><entry 954 - align="char"> 955 - <para>0</para> 956 - </entry><entry 957 - align="char"> 958 - <para>The function was completed without errors.</para> 959 - </entry> 960 - </row><row><entry 961 - align="char"> 962 - <para>-ENOMEM</para> 963 - </entry><entry 964 - align="char"> 965 - <para>Not enough memory for the requested buffer size.</para> 966 - </entry> 967 - </row><row><entry 968 - align="char"> 969 - <para>-ENOSYS</para> 970 - </entry><entry 971 - align="char"> 972 - <para>No descrambling facility available for sections.</para> 973 - </entry> 974 - </row><row><entry 975 - align="char"> 976 - <para>-EINVAL</para> 977 - </entry><entry 978 - align="char"> 979 - <para>Bad parameters.</para> 980 - </entry> 981 - </row></tbody></tgroup></informaltable> 982 - 983 - </section><section 984 - role="subsection"><title>allocate_filter()</title> 985 - <para>DESCRIPTION 986 - </para> 987 - <informaltable><tgroup cols="1"><tbody><row><entry 988 - align="char"> 989 - <para>This function is used to allocate a section filter on the demux. It should only be 990 - called when no filtering is in progress on this section feed. If a filter cannot be 991 - allocated, the function fails with -ENOSPC. See in section ?? for the format of 992 - the section filter.</para> 993 - </entry> 994 - </row><row><entry 995 - align="char"> 996 - <para>The bitfields filter_mask and filter_value should only be modified when no 997 - filtering is in progress on this section feed. filter_mask controls which bits of 998 - filter_value are compared with the section headers/payload. On a binary value 999 - of 1 in filter_mask, the corresponding bits are compared. The filter only accepts 1000 - sections that are equal to filter_value in all the tested bit positions. Any changes 1001 - to the values of filter_mask and filter_value are guaranteed to take effect only 1002 - when the start_filtering() function is called next time. The parent pointer in 1003 - the struct is initialized by the API implementation to the value of the feed 1004 - parameter. The priv pointer is not used by the API implementation, and can 1005 - thus be freely utilized by the caller of this function. Any data pointed to by the 1006 - priv pointer is available to the recipient of the dmx_section_cb() function call.</para> 1007 - </entry> 1008 - </row><row><entry 1009 - align="char"> 1010 - <para>While the maximum section filter length (DMX_MAX_FILTER_SIZE) is 1011 - currently set at 16 bytes, hardware filters of that size are not available on all 1012 - platforms. Therefore, section filtering will often take place first in hardware, 1013 - followed by filtering in software for the header bytes that were not covered 1014 - by a hardware filter. The filter_mask field can be checked to determine how 1015 - many bytes of the section filter are actually used, and if the hardware filter will 1016 - suffice. Additionally, software-only section filters can optionally be allocated 1017 - to clients when all hardware section filters are in use. Note that on most demux 1018 - hardware it is not possible to filter on the section_length field of the section 1019 - header &#8211; thus this field is ignored, even though it is included in filter_value and 1020 - filter_mask fields.</para> 1021 - </entry> 1022 - </row></tbody></tgroup></informaltable> 1023 - <para>SYNOPSIS 1024 - </para> 1025 - <informaltable><tgroup cols="1"><tbody><row><entry 1026 - align="char"> 1027 - <para>int allocate_filter(dmx_section_feed_t&#x22C6; feed, 1028 - dmx_section_filter_t&#x22C6;&#x22C6; filter);</para> 1029 - </entry> 1030 - </row></tbody></tgroup></informaltable> 1031 - <para>PARAMETERS 1032 - </para> 1033 - <informaltable><tgroup cols="2"><tbody><row><entry 1034 - align="char"> 1035 - <para>dmx_section_feed_t* 1036 - feed</para> 1037 - </entry><entry 1038 - align="char"> 1039 - <para>Pointer to the section feed API and instance data.</para> 1040 - </entry> 1041 - </row><row><entry 1042 - align="char"> 1043 - <para>dmx_section_filter_t** 1044 - filter</para> 1045 - </entry><entry 1046 - align="char"> 1047 - <para>Pointer to the allocated filter.</para> 1048 - </entry> 1049 - </row></tbody></tgroup></informaltable> 1050 - <para>RETURNS 1051 - </para> 1052 - <informaltable><tgroup cols="2"><tbody><row><entry 1053 - align="char"> 1054 - <para>0</para> 1055 - </entry><entry 1056 - align="char"> 1057 - <para>The function was completed without errors.</para> 1058 - </entry> 1059 - </row><row><entry 1060 - align="char"> 1061 - <para>-ENOSPC</para> 1062 - </entry><entry 1063 - align="char"> 1064 - <para>No filters of given type and length available.</para> 1065 - </entry> 1066 - </row><row><entry 1067 - align="char"> 1068 - <para>-EINVAL</para> 1069 - </entry><entry 1070 - align="char"> 1071 - <para>Bad parameters.</para> 1072 - </entry> 1073 - </row></tbody></tgroup></informaltable> 1074 - 1075 - </section><section 1076 - role="subsection"><title>release_filter()</title> 1077 - <para>DESCRIPTION 1078 - </para> 1079 - <informaltable><tgroup cols="1"><tbody><row><entry 1080 - align="char"> 1081 - <para>This function releases all the resources of a previously allocated section filter. 1082 - The function should not be called while filtering is in progress on this section 1083 - feed. After calling this function, the caller should not try to dereference the 1084 - filter pointer.</para> 1085 - </entry> 1086 - </row></tbody></tgroup></informaltable> 1087 - <para>SYNOPSIS 1088 - </para> 1089 - <informaltable><tgroup cols="1"><tbody><row><entry 1090 - align="char"> 1091 - <para>int release_filter ( dmx_section_feed_t&#x22C6; feed, 1092 - dmx_section_filter_t&#x22C6; filter);</para> 1093 - </entry> 1094 - </row></tbody></tgroup></informaltable> 1095 - <para>PARAMETERS 1096 - </para> 1097 - <informaltable><tgroup cols="2"><tbody><row><entry 1098 - align="char"> 1099 - <para>dmx_section_feed_t* 1100 - feed</para> 1101 - </entry><entry 1102 - align="char"> 1103 - <para>Pointer to the section feed API and instance data.</para> 1104 - </entry> 1105 - </row><row><entry 1106 - align="char"> 1107 - <para>dmx_section_filter_t* 1108 - filter</para> 1109 - </entry><entry 1110 - align="char"> 1111 - <para>I/O Pointer to the instance data of a section filter.</para> 1112 - </entry> 1113 - </row></tbody></tgroup></informaltable> 1114 - <para>RETURNS 1115 - </para> 1116 - <informaltable><tgroup cols="2"><tbody><row><entry 1117 - align="char"> 1118 - <para>0</para> 1119 - </entry><entry 1120 - align="char"> 1121 - <para>The function was completed without errors.</para> 1122 - </entry> 1123 - </row><row><entry 1124 - align="char"> 1125 - <para>-ENODEV</para> 1126 - </entry><entry 1127 - align="char"> 1128 - <para>No such filter allocated.</para> 1129 - </entry> 1130 - </row><row><entry 1131 - align="char"> 1132 - <para>-EINVAL</para> 1133 - </entry><entry 1134 - align="char"> 1135 - <para>Bad parameter.</para> 1136 - </entry> 1137 - </row></tbody></tgroup></informaltable> 1138 - 1139 - </section><section 1140 - role="subsection"><title>start_filtering()</title> 1141 - <para>DESCRIPTION 1142 - </para> 1143 - <informaltable><tgroup cols="1"><tbody><row><entry 1144 - align="char"> 1145 - <para>Starts filtering sections on this section feed, according to its settings. Sections 1146 - are first filtered based on their PID and then matched with the section 1147 - filters allocated for this feed. If the section matches the PID filter and 1148 - at least one section filter, it is delivered to the API client. The section 1149 - is delivered asynchronously using the callback function registered with 1150 - allocate_section_feed().</para> 1151 - </entry> 1152 - </row></tbody></tgroup></informaltable> 1153 - <para>SYNOPSIS 1154 - </para> 1155 - <informaltable><tgroup cols="1"><tbody><row><entry 1156 - align="char"> 1157 - <para>int start_filtering ( dmx_section_feed_t&#x22C6; feed );</para> 1158 - </entry> 1159 - </row></tbody></tgroup></informaltable> 1160 - <para>PARAMETERS 1161 - </para> 1162 - <informaltable><tgroup cols="2"><tbody><row><entry 1163 - align="char"> 1164 - <para>dmx_section_feed_t* 1165 - feed</para> 1166 - </entry><entry 1167 - align="char"> 1168 - <para>Pointer to the section feed API and instance data.</para> 1169 - </entry> 1170 - </row></tbody></tgroup></informaltable> 1171 - <para>RETURNS 1172 - </para> 1173 - <informaltable><tgroup cols="2"><tbody><row><entry 1174 - align="char"> 1175 - <para>0</para> 1176 - </entry><entry 1177 - align="char"> 1178 - <para>The function was completed without errors.</para> 1179 - </entry> 1180 - </row><row><entry 1181 - align="char"> 1182 - <para>-EINVAL</para> 1183 - </entry><entry 1184 - align="char"> 1185 - <para>Bad parameter.</para> 1186 - </entry> 1187 - </row></tbody></tgroup></informaltable> 1188 - 1189 - </section><section 1190 - role="subsection"><title>stop_filtering()</title> 1191 - <para>DESCRIPTION 1192 - </para> 1193 - <informaltable><tgroup cols="1"><tbody><row><entry 1194 - align="char"> 1195 - <para>Stops filtering sections on this section feed. Note that any changes to the 1196 - filtering parameters (filter_value, filter_mask, etc.) should only be made when 1197 - filtering is stopped.</para> 1198 - </entry> 1199 - </row></tbody></tgroup></informaltable> 1200 - <para>SYNOPSIS 1201 - </para> 1202 - <informaltable><tgroup cols="1"><tbody><row><entry 1203 - align="char"> 1204 - <para>int stop_filtering ( dmx_section_feed_t&#x22C6; feed );</para> 1205 - </entry> 1206 - </row></tbody></tgroup></informaltable> 1207 - <para>PARAMETERS 1208 - </para> 1209 - <informaltable><tgroup cols="2"><tbody><row><entry 1210 - align="char"> 1211 - <para>dmx_section_feed_t* 1212 - feed</para> 1213 - </entry><entry 1214 - align="char"> 1215 - <para>Pointer to the section feed API and instance data.</para> 1216 - </entry> 1217 - </row></tbody></tgroup></informaltable> 1218 - <para>RETURNS 1219 - </para> 1220 - <informaltable><tgroup cols="2"><tbody><row><entry 1221 - align="char"> 1222 - <para>0</para> 1223 - </entry><entry 1224 - align="char"> 1225 - <para>The function was completed without errors.</para> 1226 - </entry> 1227 - </row><row><entry 1228 - align="char"> 1229 - <para>-EINVAL</para> 1230 - </entry><entry 1231 - align="char"> 1232 - <para>Bad parameter.</para> 1233 - </entry> 1234 - </row></tbody></tgroup></informaltable> 1235 - 1236 - </section>