Unified · Split
| @@ -0,0 +1,3 @@ | ||
| 1 | +[spatch] | |
| 2 | + options = --timeout 200 | |
| 3 | + options = --use-gitgrep | |
| @@ -37,6 +37,7 @@ modules.builtin · 36 unmodified lines | ||
| 37 | 37 | Module.symvers |
| 38 | 38 | *.dwo |
| 39 | 39 | *.su |
| 40 | +*.c.[012]*.* | |
| 40 | 41 | |
| 41 | 42 | # |
| 42 | 43 | # Top-level generic files |
| @@ -66,6 +67,7 @@ Module.symvers · 23 unmodified lines | ||
| 66 | 67 | # |
| 67 | 68 | !.gitignore |
| 68 | 69 | !.mailmap |
| 70 | +!.cocciconfig | |
| 69 | 71 | |
| 70 | 72 | # |
| 71 | 73 | # Generated include files |
| @@ -92,9 +92,17 @@ Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com> · 91 unmodified lines | ||
| 92 | 92 | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| 93 | 93 | Leonid I Ananiev <leonid.i.ananiev@intel.com> |
| 94 | 94 | Linas Vepstas <linas@austin.ibm.com> |
| 95 | +Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@web.de> | |
| 96 | +Linus Lüssing <linus.luessing@c0d3.blue> <linus.luessing@ascom.ch> | |
| 95 | 97 | Mark Brown <broonie@sirena.org.uk> |
| 96 | 98 | Matthieu CASTET <castet.matthieu@free.fr> |
| 97 | −Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> <mchehab@infradead.org> <mchehab@redhat.com> <m.chehab@samsung.com> <mchehab@osg.samsung.com> <mchehab@s-opensource.com> | |
| 99 | +Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@brturbo.com.br> | |
| 100 | +Mauro Carvalho Chehab <mchehab@kernel.org> <maurochehab@gmail.com> | |
| 101 | +Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@infradead.org> | |
| 102 | +Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@redhat.com> | |
| 103 | +Mauro Carvalho Chehab <mchehab@kernel.org> <m.chehab@samsung.com> | |
| 104 | +Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@osg.samsung.com> | |
| 105 | +Mauro Carvalho Chehab <mchehab@kernel.org> <mchehab@s-opensource.com> | |
| 98 | 106 | Matt Ranostay <mranostay@gmail.com> Matthew Ranostay <mranostay@embeddedalley.com> |
| 99 | 107 | Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com> |
| 100 | 108 | Mayuresh Janorkar <mayur@ti.com> |
| @@ -130,7 +138,10 @@ Santosh Shilimkar <santosh.shilimkar@oracle.org> · 29 unmodified lines | ||
| 130 | 138 | Sascha Hauer <s.hauer@pengutronix.de> |
| 131 | 139 | S.Çağlar Onur <caglar@pardus.org.tr> |
| 132 | 140 | Shiraz Hashim <shiraz.linux.kernel@gmail.com> <shiraz.hashim@st.com> |
| 133 | −Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> <shuah.khan@hp.com> <shuahkh@osg.samsung.com> <shuah.kh@samsung.com> | |
| 141 | +Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com> | |
| 142 | +Shuah Khan <shuah@kernel.org> <shuah.khan@hp.com> | |
| 143 | +Shuah Khan <shuah@kernel.org> <shuahkh@osg.samsung.com> | |
| 144 | +Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com> | |
| 134 | 145 | Simon Kelley <simon@thekelleys.org.uk> |
| 135 | 146 | Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> |
| 136 | 147 | Stephen Hemminger <shemminger@osdl.org> |
| @@ -77,3 +77,12 @@ Description: · 76 unmodified lines | ||
| 77 | 77 | Enable/disable the PWM signal. |
| 78 | 78 | 0 is disabled |
| 79 | 79 | 1 is enabled |
| 80 | + | |
| 81 | +What: /sys/class/pwm/pwmchipN/pwmX/capture | |
| 82 | +Date: June 2016 | |
| 83 | +KernelVersion: 4.8 | |
| 84 | +Contact: Lee Jones <lee.jones@linaro.org> | |
| 85 | +Description: | |
| 86 | + Capture information about a PWM signal. The output format is a | |
| 87 | + pair unsigned integers (period and duty cycle), separated by a | |
| 88 | + single space. | |
| @@ -369,35 +369,32 @@ See also dma_map_single(). · 368 unmodified lines | ||
| 369 | 369 | dma_addr_t |
| 370 | 370 | dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size, |
| 371 | 371 | enum dma_data_direction dir, |
| 372 | − struct dma_attrs *attrs) | |
| 372 | + unsigned long attrs) | |
| 373 | 373 | |
| 374 | 374 | void |
| 375 | 375 | dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, |
| 376 | 376 | size_t size, enum dma_data_direction dir, |
| 377 | − struct dma_attrs *attrs) | |
| 377 | + unsigned long attrs) | |
| 378 | 378 | |
| 379 | 379 | int |
| 380 | 380 | dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, |
| 381 | 381 | int nents, enum dma_data_direction dir, |
| 382 | − struct dma_attrs *attrs) | |
| 382 | + unsigned long attrs) | |
| 383 | 383 | |
| 384 | 384 | void |
| 385 | 385 | dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, |
| 386 | 386 | int nents, enum dma_data_direction dir, |
| 387 | − struct dma_attrs *attrs) | |
| 387 | + unsigned long attrs) | |
| 388 | 388 | |
| 389 | 389 | The four functions above are just like the counterpart functions |
| 390 | 390 | without the _attrs suffixes, except that they pass an optional |
| 391 | −struct dma_attrs*. | |
| 392 | − | |
| 393 | −struct dma_attrs encapsulates a set of "DMA attributes". For the | |
| 394 | −definition of struct dma_attrs see linux/dma-attrs.h. | |
| 391 | +dma_attrs. | |
| 395 | 392 | |
| 396 | 393 | The interpretation of DMA attributes is architecture-specific, and |
| 397 | 394 | each attribute should be documented in Documentation/DMA-attributes.txt. |
| 398 | 395 | |
| 399 | −If struct dma_attrs* is NULL, the semantics of each of these | |
| 400 | −functions is identical to those of the corresponding function | |
| 396 | +If dma_attrs are 0, the semantics of each of these functions | |
| 397 | +is identical to those of the corresponding function | |
| 401 | 398 | without the _attrs suffix. As a result dma_map_single_attrs() |
| 402 | 399 | can generally replace dma_map_single(), etc. |
| 403 | 400 | |
| @@ -405,15 +402,15 @@ As an example of the use of the *_attrs functions, here's how · 1 unmodified line | ||
| 405 | 402 | you could pass an attribute DMA_ATTR_FOO when mapping memory |
| 406 | 403 | for DMA: |
| 407 | 404 | |
| 408 | −#include <linux/dma-attrs.h> | |
| 409 | −/* DMA_ATTR_FOO should be defined in linux/dma-attrs.h and | |
| 405 | +#include <linux/dma-mapping.h> | |
| 406 | +/* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and | |
| 410 | 407 | * documented in Documentation/DMA-attributes.txt */ |
| 411 | 408 | ... |
| 412 | 409 | |
| 413 | − DEFINE_DMA_ATTRS(attrs); | |
| 414 | − dma_set_attr(DMA_ATTR_FOO, &attrs); | |
| 410 | + unsigned long attr; | |
| 411 | + attr |= DMA_ATTR_FOO; | |
| 415 | 412 | .... |
| 416 | − n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, &attr); | |
| 413 | + n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr); | |
| 417 | 414 | .... |
| 418 | 415 | |
| 419 | 416 | Architectures that care about DMA_ATTR_FOO would check for its |
| @@ -422,12 +419,10 @@ routines, e.g.: · 2 unmodified lines | ||
| 422 | 419 | |
| 423 | 420 | void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, |
| 424 | 421 | size_t size, enum dma_data_direction dir, |
| 425 | − struct dma_attrs *attrs) | |
| 422 | + unsigned long attrs) | |
| 426 | 423 | { |
| 427 | 424 | .... |
| 428 | − int foo = dma_get_attr(DMA_ATTR_FOO, attrs); | |
| 429 | − .... | |
| 430 | − if (foo) | |
| 425 | + if (attrs & DMA_ATTR_FOO) | |
| 431 | 426 | /* twizzle the frobnozzle */ |
| 432 | 427 | .... |
| 433 | 428 | |
| @@ -2,7 +2,7 @@ · 1 unmodified line | ||
| 2 | 2 | ============== |
| 3 | 3 | |
| 4 | 4 | This document describes the semantics of the DMA attributes that are |
| 5 | −defined in linux/dma-attrs.h. | |
| 5 | +defined in linux/dma-mapping.h. | |
| 6 | 6 | |
| 7 | 7 | DMA_ATTR_WRITE_BARRIER |
| 8 | 8 | ---------------------- |
| @@ -6,8 +6,6 @@ · 5 unmodified lines | ||
| 6 | 6 | # To add a new book the only step required is to add the book to the |
| 7 | 7 | # list of DOCBOOKS. |
| 8 | 8 | |
| 9 | −ifeq ($(IGNORE_DOCBOOKS),) | |
| 10 | − | |
| 11 | 9 | DOCBOOKS := z8530book.xml device-drivers.xml \ |
| 12 | 10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ |
| 13 | 11 | writing_usb_driver.xml networking.xml \ |
| @@ -16,10 +14,16 @@ DOCBOOKS := z8530book.xml device-drivers.xml \ · 2 unmodified lines | ||
| 16 | 14 | genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ |
| 17 | 15 | 80211.xml debugobjects.xml sh.xml regulator.xml \ |
| 18 | 16 | alsa-driver-api.xml writing-an-alsa-driver.xml \ |
| 19 | − tracepoint.xml gpu.xml media_api.xml w1.xml \ | |
| 17 | + tracepoint.xml w1.xml \ | |
| 20 | 18 | writing_musb_glue_layer.xml crypto-API.xml iio.xml |
| 21 | 19 | |
| 22 | −include Documentation/DocBook/media/Makefile | |
| 20 | +ifeq ($(DOCBOOKS),) | |
| 21 | + | |
| 22 | +# Skip DocBook build if the user explicitly requested no DOCBOOKS. | |
| 23 | +.DEFAULT: | |
| 24 | + @echo " SKIP DocBook $@ target (DOCBOOKS=\"\" specified)." | |
| 25 | + | |
| 26 | +else | |
| 23 | 27 | |
| 24 | 28 | ### |
| 25 | 29 | # The build process is as follows (targets): |
| @@ -49,7 +53,6 @@ pdfdocs: $(PDF) · 23 unmodified lines | ||
| 49 | 53 | HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) |
| 50 | 54 | htmldocs: $(HTML) |
| 51 | 55 | $(call cmd,build_main_index) |
| 52 | − $(call install_media_images) | |
| 53 | 56 | |
| 54 | 57 | MAN := $(patsubst %.xml, %.9, $(BOOKS)) |
| 55 | 58 | mandocs: $(MAN) |
| @@ -217,19 +220,7 @@ silent_gen_xml = : · 161 unmodified lines | ||
| 217 | 220 | -e "s/>/\\>/g"; \ |
| 218 | 221 | echo "</programlisting>") > $@ |
| 219 | 222 | |
| 220 | −else | |
| 221 | − | |
| 222 | −# Needed, due to cleanmediadocs | |
| 223 | −include Documentation/DocBook/media/Makefile | |
| 224 | − | |
| 225 | −htmldocs: | |
| 226 | −pdfdocs: | |
| 227 | −psdocs: | |
| 228 | −xmldocs: | |
| 229 | −installmandocs: | |
| 230 | − | |
| 231 | −endif # IGNORE_DOCBOOKS | |
| 232 | − | |
| 223 | +endif # DOCBOOKS="" | |
| 233 | 224 | |
| 234 | 225 | ### |
| 235 | 226 | # Help targets as used by the top-level makefile |
| @@ -246,7 +237,7 @@ dochelp: · 10 unmodified lines | ||
| 246 | 237 | @echo ' make DOCBOOKS="s1.xml s2.xml" [target] Generate only docs s1.xml s2.xml' |
| 247 | 238 | @echo ' valid values for DOCBOOKS are: $(DOCBOOKS)' |
| 248 | 239 | @echo |
| 249 | − @echo " make IGNORE_DOCBOOKS=1 [target] Don't generate docs from Docbook" | |
| 240 | + @echo " make DOCBOOKS=\"\" [target] Don't generate docs from Docbook" | |
| 250 | 241 | @echo ' This is useful to generate only the ReST docs (Sphinx)' |
| 251 | 242 | |
| 252 | 243 | |
| @@ -269,7 +260,7 @@ clean-files := $(DOCBOOKS) \ · 16 unmodified lines | ||
| 269 | 260 | |
| 270 | 261 | clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man |
| 271 | 262 | |
| 272 | −cleandocs: cleanmediadocs | |
| 263 | +cleandocs: | |
| 273 | 264 | $(Q)rm -f $(call objectify, $(clean-files)) |
| 274 | 265 | $(Q)rm -rf $(call objectify, $(clean-dirs)) |
| 275 | 266 | |
| @@ -161,6 +161,10 @@ X!Edrivers/base/interface.c · 160 unmodified lines | ||
| 161 | 161 | !Iinclude/linux/fence.h |
| 162 | 162 | !Edrivers/dma-buf/seqno-fence.c |
| 163 | 163 | !Iinclude/linux/seqno-fence.h |
| 164 | +!Edrivers/dma-buf/fence-array.c | |
| 165 | +!Iinclude/linux/fence-array.h | |
| 166 | +!Edrivers/dma-buf/reservation.c | |
| 167 | +!Iinclude/linux/reservation.h | |
| 164 | 168 | !Edrivers/dma-buf/sync_file.c |
| 165 | 169 | !Iinclude/linux/sync_file.h |
| 166 | 170 | </sect2> |
| @@ -1,3540 +0,0 @@ | ||
| 1 | −<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | −<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | |
| 3 | − "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | |
| 4 | − | |
| 5 | −<book id="gpuDevelopersGuide"> | |
| 6 | − <bookinfo> | |
| 7 | − <title>Linux GPU Driver Developer's Guide</title> | |
| 8 | − | |
| 9 | − <authorgroup> | |
| 10 | − <author> | |
| 11 | − <firstname>Jesse</firstname> | |
| 12 | − <surname>Barnes</surname> | |
| 13 | − <contrib>Initial version</contrib> | |
| 14 | − <affiliation> | |
| 15 | − <orgname>Intel Corporation</orgname> | |
| 16 | − <address> | |
| 17 | − <email>jesse.barnes@intel.com</email> | |
| 18 | − </address> | |
| 19 | − </affiliation> | |
| 20 | − </author> | |
| 21 | − <author> | |
| 22 | − <firstname>Laurent</firstname> | |
| 23 | − <surname>Pinchart</surname> | |
| 24 | − <contrib>Driver internals</contrib> | |
| 25 | − <affiliation> | |
| 26 | − <orgname>Ideas on board SPRL</orgname> | |
| 27 | − <address> | |
| 28 | − <email>laurent.pinchart@ideasonboard.com</email> | |
| 29 | − </address> | |
| 30 | − </affiliation> | |
| 31 | − </author> | |
| 32 | − <author> | |
| 33 | − <firstname>Daniel</firstname> | |
| 34 | − <surname>Vetter</surname> | |
| 35 | − <contrib>Contributions all over the place</contrib> | |
| 36 | − <affiliation> | |
| 37 | − <orgname>Intel Corporation</orgname> | |
| 38 | − <address> | |
| 39 | − <email>daniel.vetter@ffwll.ch</email> | |
| 40 | − </address> | |
| 41 | − </affiliation> | |
| 42 | − </author> | |
| 43 | − <author> | |
| 44 | − <firstname>Lukas</firstname> | |
| 45 | − <surname>Wunner</surname> | |
| 46 | − <contrib>vga_switcheroo documentation</contrib> | |
| 47 | − <affiliation> | |
| 48 | − <address> | |
| 49 | − <email>lukas@wunner.de</email> | |
| 50 | − </address> | |
| 51 | − </affiliation> | |
| 52 | − </author> | |
| 53 | − </authorgroup> | |
| 54 | − | |
| 55 | − <copyright> | |
| 56 | − <year>2008-2009</year> | |
| 57 | − <year>2013-2014</year> | |
| 58 | − <holder>Intel Corporation</holder> | |
| 59 | − </copyright> | |
| 60 | − <copyright> | |
| 61 | − <year>2012</year> | |
| 62 | − <holder>Laurent Pinchart</holder> | |
| 63 | − </copyright> | |
| 64 | − <copyright> | |
| 65 | − <year>2015</year> | |
| 66 | − <holder>Lukas Wunner</holder> | |
| 67 | − </copyright> | |
| 68 | − | |
| 69 | − <legalnotice> | |
| 70 | − <para> | |
| 71 | − The contents of this file may be used under the terms of the GNU | |
| 72 | − General Public License version 2 (the "GPL") as distributed in | |
| 73 | − the kernel source COPYING file. | |
| 74 | − </para> | |
| 75 | − </legalnotice> | |
| 76 | − | |
| 77 | − <revhistory> | |
| 78 | − <!-- Put document revisions here, newest first. --> | |
| 79 | − <revision> | |
| 80 | − <revnumber>1.0</revnumber> | |
| 81 | − <date>2012-07-13</date> | |
| 82 | − <authorinitials>LP</authorinitials> | |
| 83 | − <revremark>Added extensive documentation about driver internals. | |
| 84 | − </revremark> | |
| 85 | − </revision> | |
| 86 | − <revision> | |
| 87 | − <revnumber>1.1</revnumber> | |
| 88 | − <date>2015-10-11</date> | |
| 89 | − <authorinitials>LW</authorinitials> | |
| 90 | − <revremark>Added vga_switcheroo documentation. | |
| 91 | − </revremark> | |
| 92 | − </revision> | |
| 93 | − </revhistory> | |
| 94 | − </bookinfo> | |
| 95 | − | |
| 96 | −<toc></toc> | |
| 97 | − | |
| 98 | −<part id="drmCore"> | |
| 99 | − <title>DRM Core</title> | |
| 100 | − <partintro> | |
| 101 | − <para> | |
| 102 | − This first part of the GPU Driver Developer's Guide documents core DRM | |
| 103 | − code, helper libraries for writing drivers and generic userspace | |
| 104 | − interfaces exposed by DRM drivers. | |
| 105 | − </para> | |
| 106 | − </partintro> | |
| 107 | − | |
| 108 | − <chapter id="drmIntroduction"> | |
| 109 | − <title>Introduction</title> | |
| 110 | − <para> | |
| 111 | − The Linux DRM layer contains code intended to support the needs | |
| 112 | − of complex graphics devices, usually containing programmable | |
| 113 | − pipelines well suited to 3D graphics acceleration. Graphics | |
| 114 | − drivers in the kernel may make use of DRM functions to make | |
| 115 | − tasks like memory management, interrupt handling and DMA easier, | |
| 116 | − and provide a uniform interface to applications. | |
| 117 | − </para> | |
| 118 | − <para> | |
| 119 | − A note on versions: this guide covers features found in the DRM | |
| 120 | − tree, including the TTM memory manager, output configuration and | |
| 121 | − mode setting, and the new vblank internals, in addition to all | |
| 122 | − the regular features found in current kernels. | |
| 123 | − </para> | |
| 124 | − <para> | |
| 125 | − [Insert diagram of typical DRM stack here] | |
| 126 | − </para> | |
| 127 | − <sect1> | |
| 128 | − <title>Style Guidelines</title> | |
| 129 | − <para> | |
| 130 | − For consistency this documentation uses American English. Abbreviations | |
| 131 | − are written as all-uppercase, for example: DRM, KMS, IOCTL, CRTC, and so | |
| 132 | − on. To aid in reading, documentations make full use of the markup | |
| 133 | − characters kerneldoc provides: @parameter for function parameters, @member | |
| 134 | − for structure members, &structure to reference structures and | |
| 135 | − function() for functions. These all get automatically hyperlinked if | |
| 136 | − kerneldoc for the referenced objects exists. When referencing entries in | |
| 137 | − function vtables please use ->vfunc(). Note that kerneldoc does | |
| 138 | − not support referencing struct members directly, so please add a reference | |
| 139 | − to the vtable struct somewhere in the same paragraph or at least section. | |
| 140 | − </para> | |
| 141 | − <para> | |
| 142 | − Except in special situations (to separate locked from unlocked variants) | |
| 143 | − locking requirements for functions aren't documented in the kerneldoc. | |
| 144 | − Instead locking should be check at runtime using e.g. | |
| 145 | − <code>WARN_ON(!mutex_is_locked(...));</code>. Since it's much easier to | |
| 146 | − ignore documentation than runtime noise this provides more value. And on | |
| 147 | − top of that runtime checks do need to be updated when the locking rules | |
| 148 | − change, increasing the chances that they're correct. Within the | |
| 149 | − documentation the locking rules should be explained in the relevant | |
| 150 | − structures: Either in the comment for the lock explaining what it | |
| 151 | − protects, or data fields need a note about which lock protects them, or | |
| 152 | − both. | |
| 153 | − </para> | |
| 154 | − <para> | |
| 155 | − Functions which have a non-<code>void</code> return value should have a | |
| 156 | − section called "Returns" explaining the expected return values in | |
| 157 | − different cases and their meanings. Currently there's no consensus whether | |
| 158 | − that section name should be all upper-case or not, and whether it should | |
| 159 | − end in a colon or not. Go with the file-local style. Other common section | |
| 160 | − names are "Notes" with information for dangerous or tricky corner cases, | |
| 161 | − and "FIXME" where the interface could be cleaned up. | |
| 162 | − </para> | |
| 163 | − </sect1> | |
| 164 | − </chapter> | |
| 165 | − | |
| 166 | − <!-- Internals --> | |
| 167 | − | |
| 168 | − <chapter id="drmInternals"> | |
| 169 | − <title>DRM Internals</title> | |
| 170 | − <para> | |
| 171 | − This chapter documents DRM internals relevant to driver authors | |
| 172 | − and developers working to add support for the latest features to | |
| 173 | − existing drivers. | |
| 174 | − </para> | |
| 175 | − <para> | |
| 176 | − First, we go over some typical driver initialization | |
| 177 | − requirements, like setting up command buffers, creating an | |
| 178 | − initial output configuration, and initializing core services. | |
| 179 | − Subsequent sections cover core internals in more detail, | |
| 180 | − providing implementation notes and examples. | |
| 181 | − </para> | |
| 182 | − <para> | |
| 183 | − The DRM layer provides several services to graphics drivers, | |
| 184 | − many of them driven by the application interfaces it provides | |
| 185 | − through libdrm, the library that wraps most of the DRM ioctls. | |
| 186 | − These include vblank event handling, memory | |
| 187 | − management, output management, framebuffer management, command | |
| 188 | − submission & fencing, suspend/resume support, and DMA | |
| 189 | − services. | |
| 190 | − </para> | |
| 191 | − | |
| 192 | − <!-- Internals: driver init --> | |
| 193 | − | |
| 194 | − <sect1> | |
| 195 | − <title>Driver Initialization</title> | |
| 196 | − <para> | |
| 197 | − At the core of every DRM driver is a <structname>drm_driver</structname> | |
| 198 | − structure. Drivers typically statically initialize a drm_driver structure, | |
| 199 | − and then pass it to <function>drm_dev_alloc()</function> to allocate a | |
| 200 | − device instance. After the device instance is fully initialized it can be | |
| 201 | − registered (which makes it accessible from userspace) using | |
| 202 | − <function>drm_dev_register()</function>. | |
| 203 | − </para> | |
| 204 | − <para> | |
| 205 | − The <structname>drm_driver</structname> structure contains static | |
| 206 | − information that describes the driver and features it supports, and | |
| 207 | − pointers to methods that the DRM core will call to implement the DRM API. | |
| 208 | − We will first go through the <structname>drm_driver</structname> static | |
| 209 | − information fields, and will then describe individual operations in | |
| 210 | − details as they get used in later sections. | |
| 211 | − </para> | |
| 212 | − <sect2> | |
| 213 | − <title>Driver Information</title> | |
| 214 | − <sect3> | |
| 215 | − <title>Driver Features</title> | |
| 216 | − <para> | |
| 217 | − Drivers inform the DRM core about their requirements and supported | |
| 218 | − features by setting appropriate flags in the | |
| 219 | − <structfield>driver_features</structfield> field. Since those flags | |
| 220 | − influence the DRM core behaviour since registration time, most of them | |
| 221 | − must be set to registering the <structname>drm_driver</structname> | |
| 222 | − instance. | |
| 223 | − </para> | |
| 224 | − <synopsis>u32 driver_features;</synopsis> | |
| 225 | − <variablelist> | |
| 226 | − <title>Driver Feature Flags</title> | |
| 227 | − <varlistentry> | |
| 228 | − <term>DRIVER_USE_AGP</term> | |
| 229 | − <listitem><para> | |
| 230 | − Driver uses AGP interface, the DRM core will manage AGP resources. | |
| 231 | − </para></listitem> | |
| 232 | − </varlistentry> | |
| 233 | − <varlistentry> | |
| 234 | − <term>DRIVER_REQUIRE_AGP</term> | |
| 235 | − <listitem><para> | |
| 236 | − Driver needs AGP interface to function. AGP initialization failure | |
| 237 | − will become a fatal error. | |
| 238 | − </para></listitem> | |
| 239 | − </varlistentry> | |
| 240 | − <varlistentry> | |
| 241 | − <term>DRIVER_PCI_DMA</term> | |
| 242 | − <listitem><para> | |
| 243 | − Driver is capable of PCI DMA, mapping of PCI DMA buffers to | |
| 244 | − userspace will be enabled. Deprecated. | |
| 245 | − </para></listitem> | |
| 246 | − </varlistentry> | |
| 247 | − <varlistentry> | |
| 248 | − <term>DRIVER_SG</term> | |
| 249 | − <listitem><para> | |
| 250 | − Driver can perform scatter/gather DMA, allocation and mapping of | |
| 251 | − scatter/gather buffers will be enabled. Deprecated. | |
| 252 | − </para></listitem> | |
| 253 | − </varlistentry> | |
| 254 | − <varlistentry> | |
| 255 | − <term>DRIVER_HAVE_DMA</term> | |
| 256 | − <listitem><para> | |
| 257 | − Driver supports DMA, the userspace DMA API will be supported. | |
| 258 | − Deprecated. | |
| 259 | − </para></listitem> | |
| 260 | − </varlistentry> | |
| 261 | − <varlistentry> | |
| 262 | − <term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term> | |
| 263 | − <listitem><para> | |
| 264 | − DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler | |
| 265 | − managed by the DRM Core. The core will support simple IRQ handler | |
| 266 | − installation when the flag is set. The installation process is | |
| 267 | − described in <xref linkend="drm-irq-registration"/>.</para> | |
| 268 | − <para>DRIVER_IRQ_SHARED indicates whether the device & handler | |
| 269 | − support shared IRQs (note that this is required of PCI drivers). | |
| 270 | − </para></listitem> | |
| 271 | − </varlistentry> | |
| 272 | − <varlistentry> | |
| 273 | − <term>DRIVER_GEM</term> | |
| 274 | − <listitem><para> | |
| 275 | − Driver use the GEM memory manager. | |
| 276 | − </para></listitem> | |
| 277 | − </varlistentry> | |
| 278 | − <varlistentry> | |
| 279 | − <term>DRIVER_MODESET</term> | |
| 280 | − <listitem><para> | |
| 281 | − Driver supports mode setting interfaces (KMS). | |
| 282 | − </para></listitem> | |
| 283 | − </varlistentry> | |
| 284 | − <varlistentry> | |
| 285 | − <term>DRIVER_PRIME</term> | |
| 286 | − <listitem><para> | |
| 287 | − Driver implements DRM PRIME buffer sharing. | |
| 288 | − </para></listitem> | |
| 289 | − </varlistentry> | |
| 290 | − <varlistentry> | |
| 291 | − <term>DRIVER_RENDER</term> | |
| 292 | − <listitem><para> | |
| 293 | − Driver supports dedicated render nodes. | |
| 294 | − </para></listitem> | |
| 295 | − </varlistentry> | |
| 296 | − <varlistentry> | |
| 297 | − <term>DRIVER_ATOMIC</term> | |
| 298 | − <listitem><para> | |
| 299 | − Driver supports atomic properties. In this case the driver | |
| 300 | − must implement appropriate obj->atomic_get_property() vfuncs | |
| 301 | − for any modeset objects with driver specific properties. | |
| 302 | − </para></listitem> | |
| 303 | − </varlistentry> | |
| 304 | − </variablelist> | |
| 305 | − </sect3> | |
| 306 | − <sect3> | |
| 307 | − <title>Major, Minor and Patchlevel</title> | |
| 308 | − <synopsis>int major; | |
| 309 | −int minor; | |
| 310 | −int patchlevel;</synopsis> | |
| 311 | − <para> | |
| 312 | − The DRM core identifies driver versions by a major, minor and patch | |
| 313 | − level triplet. The information is printed to the kernel log at | |
| 314 | − initialization time and passed to userspace through the | |
| 315 | − DRM_IOCTL_VERSION ioctl. | |
| 316 | − </para> | |
| 317 | − <para> | |
| 318 | − The major and minor numbers are also used to verify the requested driver | |
| 319 | − API version passed to DRM_IOCTL_SET_VERSION. When the driver API changes | |
| 320 | − between minor versions, applications can call DRM_IOCTL_SET_VERSION to | |
| 321 | − select a specific version of the API. If the requested major isn't equal | |
| 322 | − to the driver major, or the requested minor is larger than the driver | |
| 323 | − minor, the DRM_IOCTL_SET_VERSION call will return an error. Otherwise | |
| 324 | − the driver's set_version() method will be called with the requested | |
| 325 | − version. | |
| 326 | − </para> | |
| 327 | − </sect3> | |
| 328 | − <sect3> | |
| 329 | − <title>Name, Description and Date</title> | |
| 330 | − <synopsis>char *name; | |
| 331 | −char *desc; | |
| 332 | −char *date;</synopsis> | |
| 333 | − <para> | |
| 334 | − The driver name is printed to the kernel log at initialization time, | |
| 335 | − used for IRQ registration and passed to userspace through | |
| 336 | − DRM_IOCTL_VERSION. | |
| 337 | − </para> | |
| 338 | − <para> | |
| 339 | − The driver description is a purely informative string passed to | |
| 340 | − userspace through the DRM_IOCTL_VERSION ioctl and otherwise unused by | |
| 341 | − the kernel. | |
| 342 | − </para> | |
| 343 | − <para> | |
| 344 | − The driver date, formatted as YYYYMMDD, is meant to identify the date of | |
| 345 | − the latest modification to the driver. However, as most drivers fail to | |
| 346 | − update it, its value is mostly useless. The DRM core prints it to the | |
| 347 | − kernel log at initialization time and passes it to userspace through the | |
| 348 | − DRM_IOCTL_VERSION ioctl. | |
| 349 | − </para> | |
| 350 | − </sect3> | |
| 351 | − </sect2> | |
| 352 | − <sect2> | |
| 353 | − <title>Device Instance and Driver Handling</title> | |
| 354 | −!Pdrivers/gpu/drm/drm_drv.c driver instance overview | |
| 355 | −!Edrivers/gpu/drm/drm_drv.c | |
| 356 | − </sect2> | |
| 357 | − <sect2> | |
| 358 | − <title>Driver Load</title> | |
| 359 | − <sect3 id="drm-irq-registration"> | |
| 360 | − <title>IRQ Registration</title> | |
| 361 | − <para> | |
| 362 | − The DRM core tries to facilitate IRQ handler registration and | |
| 363 | − unregistration by providing <function>drm_irq_install</function> and | |
| 364 | − <function>drm_irq_uninstall</function> functions. Those functions only | |
| 365 | − support a single interrupt per device, devices that use more than one | |
| 366 | − IRQs need to be handled manually. | |
| 367 | − </para> | |
| 368 | − <sect4> | |
| 369 | − <title>Managed IRQ Registration</title> | |
| 370 | − <para> | |
| 371 | − <function>drm_irq_install</function> starts by calling the | |
| 372 | − <methodname>irq_preinstall</methodname> driver operation. The operation | |
| 373 | − is optional and must make sure that the interrupt will not get fired by | |
| 374 | − clearing all pending interrupt flags or disabling the interrupt. | |
| 375 | − </para> | |
| 376 | − <para> | |
| 377 | − The passed-in IRQ will then be requested by a call to | |
| 378 | − <function>request_irq</function>. If the DRIVER_IRQ_SHARED driver | |
| 379 | − feature flag is set, a shared (IRQF_SHARED) IRQ handler will be | |
| 380 | − requested. | |
| 381 | − </para> | |
| 382 | − <para> | |
| 383 | − The IRQ handler function must be provided as the mandatory irq_handler | |
| 384 | − driver operation. It will get passed directly to | |
| 385 | − <function>request_irq</function> and thus has the same prototype as all | |
| 386 | − IRQ handlers. It will get called with a pointer to the DRM device as the | |
| 387 | − second argument. | |
| 388 | − </para> | |
| 389 | − <para> | |
| 390 | − Finally the function calls the optional | |
| 391 | − <methodname>irq_postinstall</methodname> driver operation. The operation | |
| 392 | − usually enables interrupts (excluding the vblank interrupt, which is | |
| 393 | − enabled separately), but drivers may choose to enable/disable interrupts | |
| 394 | − at a different time. | |
| 395 | − </para> | |
| 396 | − <para> | |
| 397 | − <function>drm_irq_uninstall</function> is similarly used to uninstall an | |
| 398 | − IRQ handler. It starts by waking up all processes waiting on a vblank | |
| 399 | − interrupt to make sure they don't hang, and then calls the optional | |
| 400 | − <methodname>irq_uninstall</methodname> driver operation. The operation | |
| 401 | − must disable all hardware interrupts. Finally the function frees the IRQ | |
| 402 | − by calling <function>free_irq</function>. | |
| 403 | − </para> | |
| 404 | − </sect4> | |
| 405 | − <sect4> | |
| 406 | − <title>Manual IRQ Registration</title> | |
| 407 | − <para> | |
| 408 | − Drivers that require multiple interrupt handlers can't use the managed | |
| 409 | − IRQ registration functions. In that case IRQs must be registered and | |
| 410 | − unregistered manually (usually with the <function>request_irq</function> | |
| 411 | − and <function>free_irq</function> functions, or their devm_* equivalent). | |
| 412 | − </para> | |
| 413 | − <para> | |
| 414 | − When manually registering IRQs, drivers must not set the DRIVER_HAVE_IRQ | |
| 415 | − driver feature flag, and must not provide the | |
| 416 | − <methodname>irq_handler</methodname> driver operation. They must set the | |
| 417 | − <structname>drm_device</structname> <structfield>irq_enabled</structfield> | |
| 418 | − field to 1 upon registration of the IRQs, and clear it to 0 after | |
| 419 | − unregistering the IRQs. | |
| 420 | − </para> | |
| 421 | − </sect4> | |
| 422 | − </sect3> | |
| 423 | − <sect3> | |
| 424 | − <title>Memory Manager Initialization</title> | |
| 425 | − <para> | |
| 426 | − Every DRM driver requires a memory manager which must be initialized at | |
| 427 | − load time. DRM currently contains two memory managers, the Translation | |
| 428 | − Table Manager (TTM) and the Graphics Execution Manager (GEM). | |
| 429 | − This document describes the use of the GEM memory manager only. See | |
| 430 | − <xref linkend="drm-memory-management"/> for details. | |
| 431 | − </para> | |
| 432 | − </sect3> | |
| 433 | − <sect3> | |
| 434 | − <title>Miscellaneous Device Configuration</title> | |
| 435 | − <para> | |
| 436 | − Another task that may be necessary for PCI devices during configuration | |
| 437 | − is mapping the video BIOS. On many devices, the VBIOS describes device | |
| 438 | − configuration, LCD panel timings (if any), and contains flags indicating | |
| 439 | − device state. Mapping the BIOS can be done using the pci_map_rom() call, | |
| 440 | − a convenience function that takes care of mapping the actual ROM, | |
| 441 | − whether it has been shadowed into memory (typically at address 0xc0000) | |
| 442 | − or exists on the PCI device in the ROM BAR. Note that after the ROM has | |
| 443 | − been mapped and any necessary information has been extracted, it should | |
| 444 | − be unmapped; on many devices, the ROM address decoder is shared with | |
| 445 | − other BARs, so leaving it mapped could cause undesired behaviour like | |
| 446 | − hangs or memory corruption. | |
| 447 | − <!--!Fdrivers/pci/rom.c pci_map_rom--> | |
| 448 | − </para> | |
| 449 | − </sect3> | |
| 450 | − </sect2> | |
| 451 | − <sect2> | |
| 452 | − <title>Bus-specific Device Registration and PCI Support</title> | |
| 453 | − <para> | |
| 454 | − A number of functions are provided to help with device registration. | |
| 455 | − The functions deal with PCI and platform devices respectively and are | |
| 456 | − only provided for historical reasons. These are all deprecated and | |
| 457 | − shouldn't be used in new drivers. Besides that there's a few | |
| 458 | − helpers for pci drivers. | |
| 459 | − </para> | |
| 460 | −!Edrivers/gpu/drm/drm_pci.c | |
| 461 | −!Edrivers/gpu/drm/drm_platform.c | |
| 462 | − </sect2> | |
| 463 | − </sect1> | |
| 464 | − | |
| 465 | − <!-- Internals: memory management --> | |
| 466 | − | |
| 467 | − <sect1 id="drm-memory-management"> | |
| 468 | − <title>Memory management</title> | |
| 469 | − <para> | |
| 470 | − Modern Linux systems require large amount of graphics memory to store | |
| 471 | − frame buffers, textures, vertices and other graphics-related data. Given | |
| 472 | − the very dynamic nature of many of that data, managing graphics memory | |
| 473 | − efficiently is thus crucial for the graphics stack and plays a central | |
| 474 | − role in the DRM infrastructure. | |
| 475 | − </para> | |
| 476 | − <para> | |
| 477 | − The DRM core includes two memory managers, namely Translation Table Maps | |
| 478 | − (TTM) and Graphics Execution Manager (GEM). TTM was the first DRM memory | |
| 479 | − manager to be developed and tried to be a one-size-fits-them all | |
| 480 | − solution. It provides a single userspace API to accommodate the need of | |
| 481 | − all hardware, supporting both Unified Memory Architecture (UMA) devices | |
| 482 | − and devices with dedicated video RAM (i.e. most discrete video cards). | |
| 483 | − This resulted in a large, complex piece of code that turned out to be | |
| 484 | − hard to use for driver development. | |
| 485 | − </para> | |
| 486 | − <para> | |
| 487 | − GEM started as an Intel-sponsored project in reaction to TTM's | |
| 488 | − complexity. Its design philosophy is completely different: instead of | |
| 489 | − providing a solution to every graphics memory-related problems, GEM | |
| 490 | − identified common code between drivers and created a support library to | |
| 491 | − share it. GEM has simpler initialization and execution requirements than | |
| 492 | − TTM, but has no video RAM management capabilities and is thus limited to | |
| 493 | − UMA devices. | |
| 494 | − </para> | |
| 495 | − <sect2> | |
| 496 | − <title>The Translation Table Manager (TTM)</title> | |
| 497 | − <para> | |
| 498 | − TTM design background and information belongs here. | |
| 499 | − </para> | |
| 500 | − <sect3> | |
| 501 | − <title>TTM initialization</title> | |
| 502 | − <warning><para>This section is outdated.</para></warning> | |
| 503 | − <para> | |
| 504 | − Drivers wishing to support TTM must fill out a drm_bo_driver | |
| 505 | − structure. The structure contains several fields with function | |
| 506 | − pointers for initializing the TTM, allocating and freeing memory, | |
| 507 | − waiting for command completion and fence synchronization, and memory | |
| 508 | − migration. See the radeon_ttm.c file for an example of usage. | |
| 509 | − </para> | |
| 510 | − <para> | |
| 511 | − The ttm_global_reference structure is made up of several fields: | |
| 512 | − </para> | |
| 513 | − <programlisting> | |
| 514 | − struct ttm_global_reference { | |
| 515 | − enum ttm_global_types global_type; | |
| 516 | − size_t size; | |
| 517 | − void *object; | |
| 518 | − int (*init) (struct ttm_global_reference *); | |
| 519 | − void (*release) (struct ttm_global_reference *); | |
| 520 | − }; | |
| 521 | − </programlisting> | |
| 522 | − <para> | |
| 523 | − There should be one global reference structure for your memory | |
| 524 | − manager as a whole, and there will be others for each object | |
| 525 | − created by the memory manager at runtime. Your global TTM should | |
| 526 | − have a type of TTM_GLOBAL_TTM_MEM. The size field for the global | |
| 527 | − object should be sizeof(struct ttm_mem_global), and the init and | |
| 528 | − release hooks should point at your driver-specific init and | |
| 529 | − release routines, which probably eventually call | |
| 530 | − ttm_mem_global_init and ttm_mem_global_release, respectively. | |
| 531 | − </para> | |
| 532 | − <para> | |
| 533 | − Once your global TTM accounting structure is set up and initialized | |
| 534 | − by calling ttm_global_item_ref() on it, | |
| 535 | − you need to create a buffer object TTM to | |
| 536 | − provide a pool for buffer object allocation by clients and the | |
| 537 | − kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO, | |
| 538 | − and its size should be sizeof(struct ttm_bo_global). Again, | |
| 539 | − driver-specific init and release functions may be provided, | |
| 540 | − likely eventually calling ttm_bo_global_init() and | |
| 541 | − ttm_bo_global_release(), respectively. Also, like the previous | |
| 542 | − object, ttm_global_item_ref() is used to create an initial reference | |
| 543 | − count for the TTM, which will call your initialization function. | |
| 544 | − </para> | |
| 545 | − </sect3> | |
| 546 | − </sect2> | |
| 547 | − <sect2 id="drm-gem"> | |
| 548 | − <title>The Graphics Execution Manager (GEM)</title> | |
| 549 | − <para> | |
| 550 | − The GEM design approach has resulted in a memory manager that doesn't | |
| 551 | − provide full coverage of all (or even all common) use cases in its | |
| 552 | − userspace or kernel API. GEM exposes a set of standard memory-related | |
| 553 | − operations to userspace and a set of helper functions to drivers, and let | |
| 554 | − drivers implement hardware-specific operations with their own private API. | |
| 555 | − </para> | |
| 556 | − <para> | |
| 557 | − The GEM userspace API is described in the | |
| 558 | − <ulink url="http://lwn.net/Articles/283798/"><citetitle>GEM - the Graphics | |
| 559 | − Execution Manager</citetitle></ulink> article on LWN. While slightly | |
| 560 | − outdated, the document provides a good overview of the GEM API principles. | |
| 561 | − Buffer allocation and read and write operations, described as part of the | |
| 562 | − common GEM API, are currently implemented using driver-specific ioctls. | |
| 563 | − </para> | |
| 564 | − <para> | |
| 565 | − GEM is data-agnostic. It manages abstract buffer objects without knowing | |
| 566 | − what individual buffers contain. APIs that require knowledge of buffer | |
| 567 | − contents or purpose, such as buffer allocation or synchronization | |
| 568 | − primitives, are thus outside of the scope of GEM and must be implemented | |
| 569 | − using driver-specific ioctls. | |
| 570 | − </para> | |
| 571 | − <para> | |
| 572 | − On a fundamental level, GEM involves several operations: | |
| 573 | − <itemizedlist> | |
| 574 | − <listitem>Memory allocation and freeing</listitem> | |
| 575 | − <listitem>Command execution</listitem> | |
| 576 | − <listitem>Aperture management at command execution time</listitem> | |
| 577 | − </itemizedlist> | |
| 578 | − Buffer object allocation is relatively straightforward and largely | |
| 579 | − provided by Linux's shmem layer, which provides memory to back each | |
| 580 | − object. | |
| 581 | − </para> | |
| 582 | − <para> | |
| 583 | − Device-specific operations, such as command execution, pinning, buffer | |
| 584 | − read & write, mapping, and domain ownership transfers are left to | |
| 585 | − driver-specific ioctls. | |
| 586 | − </para> | |
| 587 | − <sect3> | |
| 588 | − <title>GEM Initialization</title> | |
| 589 | − <para> | |
| 590 | − Drivers that use GEM must set the DRIVER_GEM bit in the struct | |
| 591 | − <structname>drm_driver</structname> | |
| 592 | − <structfield>driver_features</structfield> field. The DRM core will | |
| 593 | − then automatically initialize the GEM core before calling the | |
| 594 | − <methodname>load</methodname> operation. Behind the scene, this will | |
| 595 | − create a DRM Memory Manager object which provides an address space | |
| 596 | − pool for object allocation. | |
| 597 | − </para> | |
| 598 | − <para> | |
| 599 | − In a KMS configuration, drivers need to allocate and initialize a | |
| 600 | − command ring buffer following core GEM initialization if required by | |
| 601 | − the hardware. UMA devices usually have what is called a "stolen" | |
| 602 | − memory region, which provides space for the initial framebuffer and | |
| 603 | − large, contiguous memory regions required by the device. This space is | |
| 604 | − typically not managed by GEM, and must be initialized separately into | |
| 605 | − its own DRM MM object. | |
| 606 | − </para> | |
| 607 | − </sect3> | |
| 608 | − <sect3> | |
| 609 | − <title>GEM Objects Creation</title> | |
| 610 | − <para> | |
| 611 | − GEM splits creation of GEM objects and allocation of the memory that | |
| 612 | − backs them in two distinct operations. | |
| 613 | − </para> | |
| 614 | − <para> | |
| 615 | − GEM objects are represented by an instance of struct | |
| 616 | − <structname>drm_gem_object</structname>. Drivers usually need to extend | |
| 617 | − GEM objects with private information and thus create a driver-specific | |
| 618 | − GEM object structure type that embeds an instance of struct | |
| 619 | − <structname>drm_gem_object</structname>. | |
| 620 | − </para> | |
| 621 | − <para> | |
| 622 | − To create a GEM object, a driver allocates memory for an instance of its | |
| 623 | − specific GEM object type and initializes the embedded struct | |
| 624 | − <structname>drm_gem_object</structname> with a call to | |
| 625 | − <function>drm_gem_object_init</function>. The function takes a pointer to | |
| 626 | − the DRM device, a pointer to the GEM object and the buffer object size | |
| 627 | − in bytes. | |
| 628 | − </para> | |
| 629 | − <para> | |
| 630 | − GEM uses shmem to allocate anonymous pageable memory. | |
| 631 | − <function>drm_gem_object_init</function> will create an shmfs file of | |
| 632 | − the requested size and store it into the struct | |
| 633 | − <structname>drm_gem_object</structname> <structfield>filp</structfield> | |
| 634 | − field. The memory is used as either main storage for the object when the | |
| 635 | − graphics hardware uses system memory directly or as a backing store | |
| 636 | − otherwise. | |
| 637 | − </para> | |
| 638 | − <para> | |
| 639 | − Drivers are responsible for the actual physical pages allocation by | |
| 640 | − calling <function>shmem_read_mapping_page_gfp</function> for each page. | |
| 641 | − Note that they can decide to allocate pages when initializing the GEM | |
| 642 | − object, or to delay allocation until the memory is needed (for instance | |
| 643 | − when a page fault occurs as a result of a userspace memory access or | |
| 644 | − when the driver needs to start a DMA transfer involving the memory). | |
| 645 | − </para> | |
| 646 | − <para> | |
| 647 | − Anonymous pageable memory allocation is not always desired, for instance | |
| 648 | − when the hardware requires physically contiguous system memory as is | |
| 649 | − often the case in embedded devices. Drivers can create GEM objects with | |
| 650 | − no shmfs backing (called private GEM objects) by initializing them with | |
| 651 | − a call to <function>drm_gem_private_object_init</function> instead of | |
| 652 | − <function>drm_gem_object_init</function>. Storage for private GEM | |
| 653 | − objects must be managed by drivers. | |
| 654 | − </para> | |
| 655 | − </sect3> | |
| 656 | − <sect3> | |
| 657 | − <title>GEM Objects Lifetime</title> | |
| 658 | − <para> | |
| 659 | − All GEM objects are reference-counted by the GEM core. References can be | |
| 660 | − acquired and release by <function>calling drm_gem_object_reference</function> | |
| 661 | − and <function>drm_gem_object_unreference</function> respectively. The | |
| 662 | − caller must hold the <structname>drm_device</structname> | |
| 663 | − <structfield>struct_mutex</structfield> lock when calling | |
| 664 | − <function>drm_gem_object_reference</function>. As a convenience, GEM | |
| 665 | − provides <function>drm_gem_object_unreference_unlocked</function> | |
| 666 | − functions that can be called without holding the lock. | |
| 667 | − </para> | |
| 668 | − <para> | |
| 669 | − When the last reference to a GEM object is released the GEM core calls | |
| 670 | − the <structname>drm_driver</structname> | |
| 671 | − <methodname>gem_free_object</methodname> operation. That operation is | |
| 672 | − mandatory for GEM-enabled drivers and must free the GEM object and all | |
| 673 | − associated resources. | |
| 674 | − </para> | |
| 675 | − <para> | |
| 676 | − <synopsis>void (*gem_free_object) (struct drm_gem_object *obj);</synopsis> | |
| 677 | − Drivers are responsible for freeing all GEM object resources. This includes | |
| 678 | − the resources created by the GEM core, which need to be released with | |
| 679 | − <function>drm_gem_object_release</function>. | |
| 680 | − </para> | |
| 681 | − </sect3> | |
| 682 | − <sect3> | |
| 683 | − <title>GEM Objects Naming</title> | |
| 684 | − <para> | |
| 685 | − Communication between userspace and the kernel refers to GEM objects | |
| 686 | − using local handles, global names or, more recently, file descriptors. | |
| 687 | − All of those are 32-bit integer values; the usual Linux kernel limits | |
| 688 | − apply to the file descriptors. | |
| 689 | − </para> | |
| 690 | − <para> | |
| 691 | − GEM handles are local to a DRM file. Applications get a handle to a GEM | |
| 692 | − object through a driver-specific ioctl, and can use that handle to refer | |
| 693 | − to the GEM object in other standard or driver-specific ioctls. Closing a | |
| 694 | − DRM file handle frees all its GEM handles and dereferences the | |
| 695 | − associated GEM objects. | |
| 696 | − </para> | |
| 697 | − <para> | |
| 698 | − To create a handle for a GEM object drivers call | |
| 699 | − <function>drm_gem_handle_create</function>. The function takes a pointer | |
| 700 | − to the DRM file and the GEM object and returns a locally unique handle. | |
| 701 | − When the handle is no longer needed drivers delete it with a call to | |
| 702 | − <function>drm_gem_handle_delete</function>. Finally the GEM object | |
| 703 | − associated with a handle can be retrieved by a call to | |
| 704 | − <function>drm_gem_object_lookup</function>. | |
| 705 | − </para> | |
| 706 | − <para> | |
| 707 | − Handles don't take ownership of GEM objects, they only take a reference | |
| 708 | − to the object that will be dropped when the handle is destroyed. To | |
| 709 | − avoid leaking GEM objects, drivers must make sure they drop the | |
| 710 | − reference(s) they own (such as the initial reference taken at object | |
| 711 | − creation time) as appropriate, without any special consideration for the | |
| 712 | − handle. For example, in the particular case of combined GEM object and | |
| 713 | − handle creation in the implementation of the | |
| 714 | − <methodname>dumb_create</methodname> operation, drivers must drop the | |
| 715 | − initial reference to the GEM object before returning the handle. | |
| 716 | − </para> | |
| 717 | − <para> | |
| 718 | − GEM names are similar in purpose to handles but are not local to DRM | |
| 719 | − files. They can be passed between processes to reference a GEM object | |
| 720 | − globally. Names can't be used directly to refer to objects in the DRM | |
| 721 | − API, applications must convert handles to names and names to handles | |
| 722 | − using the DRM_IOCTL_GEM_FLINK and DRM_IOCTL_GEM_OPEN ioctls | |
| 723 | − respectively. The conversion is handled by the DRM core without any | |
| 724 | − driver-specific support. | |
| 725 | − </para> | |
| 726 | − <para> | |
| 727 | − GEM also supports buffer sharing with dma-buf file descriptors through | |
| 728 | − PRIME. GEM-based drivers must use the provided helpers functions to | |
| 729 | − implement the exporting and importing correctly. See <xref linkend="drm-prime-support" />. | |
| 730 | − Since sharing file descriptors is inherently more secure than the | |
| 731 | − easily guessable and global GEM names it is the preferred buffer | |
| 732 | − sharing mechanism. Sharing buffers through GEM names is only supported | |
| 733 | − for legacy userspace. Furthermore PRIME also allows cross-device | |
| 734 | − buffer sharing since it is based on dma-bufs. | |
| 735 | − </para> | |
| 736 | − </sect3> | |
| 737 | − <sect3 id="drm-gem-objects-mapping"> | |
| 738 | − <title>GEM Objects Mapping</title> | |
| 739 | − <para> | |
| 740 | − Because mapping operations are fairly heavyweight GEM favours | |
| 741 | − read/write-like access to buffers, implemented through driver-specific | |
| 742 | − ioctls, over mapping buffers to userspace. However, when random access | |
| 743 | − to the buffer is needed (to perform software rendering for instance), | |
| 744 | − direct access to the object can be more efficient. | |
| 745 | − </para> | |
| 746 | − <para> | |
| 747 | − The mmap system call can't be used directly to map GEM objects, as they | |
| 748 | − don't have their own file handle. Two alternative methods currently | |
| 749 | − co-exist to map GEM objects to userspace. The first method uses a | |
| 750 | − driver-specific ioctl to perform the mapping operation, calling | |
| 751 | − <function>do_mmap</function> under the hood. This is often considered | |
| 752 | − dubious, seems to be discouraged for new GEM-enabled drivers, and will | |
| 753 | − thus not be described here. | |
| 754 | − </para> | |
| 755 | − <para> | |
| 756 | − The second method uses the mmap system call on the DRM file handle. | |
| 757 | − <synopsis>void *mmap(void *addr, size_t length, int prot, int flags, int fd, | |
| 758 | − off_t offset);</synopsis> | |
| 759 | − DRM identifies the GEM object to be mapped by a fake offset passed | |
| 760 | − through the mmap offset argument. Prior to being mapped, a GEM object | |
| 761 | − must thus be associated with a fake offset. To do so, drivers must call | |
| 762 | − <function>drm_gem_create_mmap_offset</function> on the object. | |
| 763 | − </para> | |
| 764 | − <para> | |
| 765 | − Once allocated, the fake offset value | |
| 766 | − must be passed to the application in a driver-specific way and can then | |
| 767 | − be used as the mmap offset argument. | |
| 768 | − </para> | |
| 769 | − <para> | |
| 770 | − The GEM core provides a helper method <function>drm_gem_mmap</function> | |
| 771 | − to handle object mapping. The method can be set directly as the mmap | |
| 772 | − file operation handler. It will look up the GEM object based on the | |
| 773 | − offset value and set the VMA operations to the | |
| 774 | − <structname>drm_driver</structname> <structfield>gem_vm_ops</structfield> | |
| 775 | − field. Note that <function>drm_gem_mmap</function> doesn't map memory to | |
| 776 | − userspace, but relies on the driver-provided fault handler to map pages | |
| 777 | − individually. | |
| 778 | − </para> | |
| 779 | − <para> | |
| 780 | − To use <function>drm_gem_mmap</function>, drivers must fill the struct | |
| 781 | − <structname>drm_driver</structname> <structfield>gem_vm_ops</structfield> | |
| 782 | − field with a pointer to VM operations. | |
| 783 | − </para> | |
| 784 | − <para> | |
| 785 | − <synopsis>struct vm_operations_struct *gem_vm_ops | |
| 786 | − | |
| 787 | − struct vm_operations_struct { | |
| 788 | − void (*open)(struct vm_area_struct * area); | |
| 789 | − void (*close)(struct vm_area_struct * area); | |
| 790 | − int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf); | |
| 791 | − };</synopsis> | |
| 792 | − </para> | |
| 793 | − <para> | |
| 794 | − The <methodname>open</methodname> and <methodname>close</methodname> | |
| 795 | − operations must update the GEM object reference count. Drivers can use | |
| 796 | − the <function>drm_gem_vm_open</function> and | |
| 797 | − <function>drm_gem_vm_close</function> helper functions directly as open | |
| 798 | − and close handlers. | |
| 799 | − </para> | |
| 800 | − <para> | |
| 801 | − The fault operation handler is responsible for mapping individual pages | |
| 802 | − to userspace when a page fault occurs. Depending on the memory | |
| 803 | − allocation scheme, drivers can allocate pages at fault time, or can | |
| 804 | − decide to allocate memory for the GEM object at the time the object is | |
| 805 | − created. | |
| 806 | − </para> | |
| 807 | − <para> | |
| 808 | − Drivers that want to map the GEM object upfront instead of handling page | |
| 809 | − faults can implement their own mmap file operation handler. | |
| 810 | − </para> | |
| 811 | − </sect3> | |
| 812 | − <sect3> | |
| 813 | − <title>Memory Coherency</title> | |
| 814 | − <para> | |
| 815 | − When mapped to the device or used in a command buffer, backing pages | |
| 816 | − for an object are flushed to memory and marked write combined so as to | |
| 817 | − be coherent with the GPU. Likewise, if the CPU accesses an object | |
| 818 | − after the GPU has finished rendering to the object, then the object | |
| 819 | − must be made coherent with the CPU's view of memory, usually involving | |
| 820 | − GPU cache flushing of various kinds. This core CPU<->GPU | |
| 821 | − coherency management is provided by a device-specific ioctl, which | |
| 822 | − evaluates an object's current domain and performs any necessary | |
| 823 | − flushing or synchronization to put the object into the desired | |
| 824 | − coherency domain (note that the object may be busy, i.e. an active | |
| 825 | − render target; in that case, setting the domain blocks the client and | |
| 826 | − waits for rendering to complete before performing any necessary | |
| 827 | − flushing operations). | |
| 828 | − </para> | |
| 829 | − </sect3> | |
| 830 | − <sect3> | |
| 831 | − <title>Command Execution</title> | |
| 832 | − <para> | |
| 833 | − Perhaps the most important GEM function for GPU devices is providing a | |
| 834 | − command execution interface to clients. Client programs construct | |
| 835 | − command buffers containing references to previously allocated memory | |
| 836 | − objects, and then submit them to GEM. At that point, GEM takes care to | |
| 837 | − bind all the objects into the GTT, execute the buffer, and provide | |
| 838 | − necessary synchronization between clients accessing the same buffers. | |
| 839 | − This often involves evicting some objects from the GTT and re-binding | |
| 840 | − others (a fairly expensive operation), and providing relocation | |
| 841 | − support which hides fixed GTT offsets from clients. Clients must take | |
| 842 | − care not to submit command buffers that reference more objects than | |
| 843 | − can fit in the GTT; otherwise, GEM will reject them and no rendering | |
| 844 | − will occur. Similarly, if several objects in the buffer require fence | |
| 845 | − registers to be allocated for correct rendering (e.g. 2D blits on | |
| 846 | − pre-965 chips), care must be taken not to require more fence registers | |
| 847 | − than are available to the client. Such resource management should be | |
| 848 | − abstracted from the client in libdrm. | |
| 849 | − </para> | |
| 850 | − </sect3> | |
| 851 | − </sect2> | |
| 852 | − <sect2> | |
| 853 | − <title>GEM Function Reference</title> | |
| 854 | −!Edrivers/gpu/drm/drm_gem.c | |
| 855 | −!Iinclude/drm/drm_gem.h | |
| 856 | − </sect2> | |
| 857 | − <sect2> | |
| 858 | − <title>VMA Offset Manager</title> | |
| 859 | −!Pdrivers/gpu/drm/drm_vma_manager.c vma offset manager | |
| 860 | −!Edrivers/gpu/drm/drm_vma_manager.c | |
| 861 | −!Iinclude/drm/drm_vma_manager.h | |
| 862 | − </sect2> | |
| 863 | − <sect2 id="drm-prime-support"> | |
| 864 | − <title>PRIME Buffer Sharing</title> | |
| 865 | − <para> | |
| 866 | − PRIME is the cross device buffer sharing framework in drm, originally | |
| 867 | − created for the OPTIMUS range of multi-gpu platforms. To userspace | |
| 868 | − PRIME buffers are dma-buf based file descriptors. | |
| 869 | − </para> | |
| 870 | − <sect3> | |
| 871 | − <title>Overview and Driver Interface</title> | |
| 872 | − <para> | |
| 873 | − Similar to GEM global names, PRIME file descriptors are | |
| 874 | − also used to share buffer objects across processes. They offer | |
| 875 | − additional security: as file descriptors must be explicitly sent over | |
| 876 | − UNIX domain sockets to be shared between applications, they can't be | |
| 877 | − guessed like the globally unique GEM names. | |
| 878 | − </para> | |
| 879 | − <para> | |
| 880 | − Drivers that support the PRIME | |
| 881 | − API must set the DRIVER_PRIME bit in the struct | |
| 882 | − <structname>drm_driver</structname> | |
| 883 | − <structfield>driver_features</structfield> field, and implement the | |
| 884 | − <methodname>prime_handle_to_fd</methodname> and | |
| 885 | − <methodname>prime_fd_to_handle</methodname> operations. | |
| 886 | − </para> | |
| 887 | − <para> | |
| 888 | − <synopsis>int (*prime_handle_to_fd)(struct drm_device *dev, | |
| 889 | − struct drm_file *file_priv, uint32_t handle, | |
| 890 | − uint32_t flags, int *prime_fd); | |
| 891 | −int (*prime_fd_to_handle)(struct drm_device *dev, | |
| 892 | − struct drm_file *file_priv, int prime_fd, | |
| 893 | − uint32_t *handle);</synopsis> | |
| 894 | − Those two operations convert a handle to a PRIME file descriptor and | |
| 895 | − vice versa. Drivers must use the kernel dma-buf buffer sharing framework | |
| 896 | − to manage the PRIME file descriptors. Similar to the mode setting | |
| 897 | − API PRIME is agnostic to the underlying buffer object manager, as | |
| 898 | − long as handles are 32bit unsigned integers. | |
| 899 | − </para> | |
| 900 | − <para> | |
| 901 | − While non-GEM drivers must implement the operations themselves, GEM | |
| 902 | − drivers must use the <function>drm_gem_prime_handle_to_fd</function> | |
| 903 | − and <function>drm_gem_prime_fd_to_handle</function> helper functions. | |
| 904 | − Those helpers rely on the driver | |
| 905 | − <methodname>gem_prime_export</methodname> and | |
| 906 | − <methodname>gem_prime_import</methodname> operations to create a dma-buf | |
| 907 | − instance from a GEM object (dma-buf exporter role) and to create a GEM | |
| 908 | − object from a dma-buf instance (dma-buf importer role). | |
| 909 | − </para> | |
| 910 | − <para> | |
| 911 | − <synopsis>struct dma_buf * (*gem_prime_export)(struct drm_device *dev, | |
| 912 | − struct drm_gem_object *obj, | |
| 913 | − int flags); | |
| 914 | −struct drm_gem_object * (*gem_prime_import)(struct drm_device *dev, | |
| 915 | − struct dma_buf *dma_buf);</synopsis> | |
| 916 | − These two operations are mandatory for GEM drivers that support | |
| 917 | − PRIME. | |
| 918 | − </para> | |
| 919 | − </sect3> | |
| 920 | − <sect3> | |
| 921 | − <title>PRIME Helper Functions</title> | |
| 922 | −!Pdrivers/gpu/drm/drm_prime.c PRIME Helpers | |
| 923 | − </sect3> | |
| 924 | − </sect2> | |
| 925 | − <sect2> | |
| 926 | − <title>PRIME Function References</title> | |
| 927 | −!Edrivers/gpu/drm/drm_prime.c | |
| 928 | − </sect2> | |
| 929 | − <sect2> | |
| 930 | − <title>DRM MM Range Allocator</title> | |
| 931 | − <sect3> | |
| 932 | − <title>Overview</title> | |
| 933 | −!Pdrivers/gpu/drm/drm_mm.c Overview | |
| 934 | − </sect3> | |
| 935 | − <sect3> | |
| 936 | − <title>LRU Scan/Eviction Support</title> | |
| 937 | −!Pdrivers/gpu/drm/drm_mm.c lru scan roaster | |
| 938 | − </sect3> | |
| 939 | − </sect2> | |
| 940 | − <sect2> | |
| 941 | − <title>DRM MM Range Allocator Function References</title> | |
| 942 | −!Edrivers/gpu/drm/drm_mm.c | |
| 943 | −!Iinclude/drm/drm_mm.h | |
| 944 | − </sect2> | |
| 945 | − <sect2> | |
| 946 | − <title>CMA Helper Functions Reference</title> | |
| 947 | −!Pdrivers/gpu/drm/drm_gem_cma_helper.c cma helpers | |
| 948 | −!Edrivers/gpu/drm/drm_gem_cma_helper.c | |
| 949 | −!Iinclude/drm/drm_gem_cma_helper.h | |
| 950 | − </sect2> | |
| 951 | − </sect1> | |
| 952 | − | |
| 953 | − <!-- Internals: mode setting --> | |
| 954 | − | |
| 955 | − <sect1 id="drm-mode-setting"> | |
| 956 | − <title>Mode Setting</title> | |
| 957 | − <para> | |
| 958 | − Drivers must initialize the mode setting core by calling | |
| 959 | − <function>drm_mode_config_init</function> on the DRM device. The function | |
| 960 | − initializes the <structname>drm_device</structname> | |
| 961 | − <structfield>mode_config</structfield> field and never fails. Once done, | |
| 962 | − mode configuration must be setup by initializing the following fields. | |
| 963 | − </para> | |
| 964 | − <itemizedlist> | |
| 965 | − <listitem> | |
| 966 | − <synopsis>int min_width, min_height; | |
| 967 | −int max_width, max_height;</synopsis> | |
| 968 | − <para> | |
| 969 | − Minimum and maximum width and height of the frame buffers in pixel | |
| 970 | − units. | |
| 971 | − </para> | |
| 972 | − </listitem> | |
| 973 | − <listitem> | |
| 974 | − <synopsis>struct drm_mode_config_funcs *funcs;</synopsis> | |
| 975 | − <para>Mode setting functions.</para> | |
| 976 | − </listitem> | |
| 977 | − </itemizedlist> | |
| 978 | − <sect2> | |
| 979 | − <title>Display Modes Function Reference</title> | |
| 980 | −!Iinclude/drm/drm_modes.h | |
| 981 | −!Edrivers/gpu/drm/drm_modes.c | |
| 982 | − </sect2> | |
| 983 | − <sect2> | |
| 984 | − <title>Atomic Mode Setting Function Reference</title> | |
| 985 | −!Edrivers/gpu/drm/drm_atomic.c | |
| 986 | −!Idrivers/gpu/drm/drm_atomic.c | |
| 987 | − </sect2> | |
| 988 | − <sect2> | |
| 989 | − <title>Frame Buffer Abstraction</title> | |
| 990 | − <para> | |
| 991 | − Frame buffers are abstract memory objects that provide a source of | |
| 992 | − pixels to scanout to a CRTC. Applications explicitly request the | |
| 993 | − creation of frame buffers through the DRM_IOCTL_MODE_ADDFB(2) ioctls and | |
| 994 | − receive an opaque handle that can be passed to the KMS CRTC control, | |
| 995 | − plane configuration and page flip functions. | |
| 996 | − </para> | |
| 997 | − <para> | |
| 998 | − Frame buffers rely on the underneath memory manager for low-level memory | |
| 999 | − operations. When creating a frame buffer applications pass a memory | |
| 1000 | − handle (or a list of memory handles for multi-planar formats) through | |
| 1001 | − the <parameter>drm_mode_fb_cmd2</parameter> argument. For drivers using | |
| 1002 | − GEM as their userspace buffer management interface this would be a GEM | |
| 1003 | − handle. Drivers are however free to use their own backing storage object | |
| 1004 | − handles, e.g. vmwgfx directly exposes special TTM handles to userspace | |
| 1005 | − and so expects TTM handles in the create ioctl and not GEM handles. | |
| 1006 | − </para> | |
| 1007 | − <para> | |
| 1008 | − The lifetime of a drm framebuffer is controlled with a reference count, | |
| 1009 | − drivers can grab additional references with | |
| 1010 | − <function>drm_framebuffer_reference</function>and drop them | |
| 1011 | − again with <function>drm_framebuffer_unreference</function>. For | |
| 1012 | − driver-private framebuffers for which the last reference is never | |
| 1013 | − dropped (e.g. for the fbdev framebuffer when the struct | |
| 1014 | − <structname>drm_framebuffer</structname> is embedded into the fbdev | |
| 1015 | − helper struct) drivers can manually clean up a framebuffer at module | |
| 1016 | − unload time with | |
| 1017 | − <function>drm_framebuffer_unregister_private</function>. | |
| 1018 | − </para> | |
| 1019 | − </sect2> | |
| 1020 | − <sect2> | |
| 1021 | − <title>Dumb Buffer Objects</title> | |
| 1022 | − <para> | |
| 1023 | − The KMS API doesn't standardize backing storage object creation and | |
| 1024 | − leaves it to driver-specific ioctls. Furthermore actually creating a | |
| 1025 | − buffer object even for GEM-based drivers is done through a | |
| 1026 | − driver-specific ioctl - GEM only has a common userspace interface for | |
| 1027 | − sharing and destroying objects. While not an issue for full-fledged | |
| 1028 | − graphics stacks that include device-specific userspace components (in | |
| 1029 | − libdrm for instance), this limit makes DRM-based early boot graphics | |
| 1030 | − unnecessarily complex. | |
| 1031 | − </para> | |
| 1032 | − <para> | |
| 1033 | − Dumb objects partly alleviate the problem by providing a standard | |
| 1034 | − API to create dumb buffers suitable for scanout, which can then be used | |
| 1035 | − to create KMS frame buffers. | |
| 1036 | − </para> | |
| 1037 | − <para> | |
| 1038 | − To support dumb objects drivers must implement the | |
| 1039 | − <methodname>dumb_create</methodname>, | |
| 1040 | − <methodname>dumb_destroy</methodname> and | |
| 1041 | − <methodname>dumb_map_offset</methodname> operations. | |
| 1042 | − </para> | |
| 1043 | − <itemizedlist> | |
| 1044 | − <listitem> | |
| 1045 | − <synopsis>int (*dumb_create)(struct drm_file *file_priv, struct drm_device *dev, | |
| 1046 | − struct drm_mode_create_dumb *args);</synopsis> | |
| 1047 | − <para> | |
| 1048 | − The <methodname>dumb_create</methodname> operation creates a driver | |
| 1049 | − object (GEM or TTM handle) suitable for scanout based on the | |
| 1050 | − width, height and depth from the struct | |
| 1051 | − <structname>drm_mode_create_dumb</structname> argument. It fills the | |
| 1052 | − argument's <structfield>handle</structfield>, | |
| 1053 | − <structfield>pitch</structfield> and <structfield>size</structfield> | |
| 1054 | − fields with a handle for the newly created object and its line | |
| 1055 | − pitch and size in bytes. | |
| 1056 | − </para> | |
| 1057 | − </listitem> | |
| 1058 | − <listitem> | |
| 1059 | − <synopsis>int (*dumb_destroy)(struct drm_file *file_priv, struct drm_device *dev, | |
| 1060 | − uint32_t handle);</synopsis> | |
| 1061 | − <para> | |
| 1062 | − The <methodname>dumb_destroy</methodname> operation destroys a dumb | |
| 1063 | − object created by <methodname>dumb_create</methodname>. | |
| 1064 | − </para> | |
| 1065 | − </listitem> | |
| 1066 | − <listitem> | |
| 1067 | − <synopsis>int (*dumb_map_offset)(struct drm_file *file_priv, struct drm_device *dev, | |
| 1068 | − uint32_t handle, uint64_t *offset);</synopsis> | |
| 1069 | − <para> | |
| 1070 | − The <methodname>dumb_map_offset</methodname> operation associates an | |
| 1071 | − mmap fake offset with the object given by the handle and returns | |
| 1072 | − it. Drivers must use the | |
| 1073 | − <function>drm_gem_create_mmap_offset</function> function to | |
| 1074 | − associate the fake offset as described in | |
| 1075 | − <xref linkend="drm-gem-objects-mapping"/>. | |
| 1076 | − </para> | |
| 1077 | − </listitem> | |
| 1078 | − </itemizedlist> | |
| 1079 | − <para> | |
| 1080 | − Note that dumb objects may not be used for gpu acceleration, as has been | |
| 1081 | − attempted on some ARM embedded platforms. Such drivers really must have | |
| 1082 | − a hardware-specific ioctl to allocate suitable buffer objects. | |
| 1083 | − </para> | |
| 1084 | − </sect2> | |
| 1085 | − <sect2> | |
| 1086 | − <title>Output Polling</title> | |
| 1087 | − <synopsis>void (*output_poll_changed)(struct drm_device *dev);</synopsis> | |
| 1088 | − <para> | |
| 1089 | − This operation notifies the driver that the status of one or more | |
| 1090 | − connectors has changed. Drivers that use the fb helper can just call the | |
| 1091 | − <function>drm_fb_helper_hotplug_event</function> function to handle this | |
| 1092 | − operation. | |
| 1093 | − </para> | |
| 1094 | − </sect2> | |
| 1095 | − <sect2> | |
| 1096 | − <title>Locking</title> | |
| 1097 | − <para> | |
| 1098 | − Beside some lookup structures with their own locking (which is hidden | |
| 1099 | − behind the interface functions) most of the modeset state is protected | |
| 1100 | − by the <code>dev-<mode_config.lock</code> mutex and additionally | |
| 1101 | − per-crtc locks to allow cursor updates, pageflips and similar operations | |
| 1102 | − to occur concurrently with background tasks like output detection. | |
| 1103 | − Operations which cross domains like a full modeset always grab all | |
| 1104 | − locks. Drivers there need to protect resources shared between crtcs with | |
| 1105 | − additional locking. They also need to be careful to always grab the | |
| 1106 | − relevant crtc locks if a modset functions touches crtc state, e.g. for | |
| 1107 | − load detection (which does only grab the <code>mode_config.lock</code> | |
| 1108 | − to allow concurrent screen updates on live crtcs). | |
| 1109 | − </para> | |
| 1110 | − </sect2> | |
| 1111 | − </sect1> | |
| 1112 | − | |
| 1113 | − <!-- Internals: kms initialization and cleanup --> | |
| 1114 | − | |
| 1115 | − <sect1 id="drm-kms-init"> | |
| 1116 | − <title>KMS Initialization and Cleanup</title> | |
| 1117 | − <para> | |
| 1118 | − A KMS device is abstracted and exposed as a set of planes, CRTCs, encoders | |
| 1119 | − and connectors. KMS drivers must thus create and initialize all those | |
| 1120 | − objects at load time after initializing mode setting. | |
| 1121 | − </para> | |
| 1122 | − <sect2> | |
| 1123 | − <title>CRTCs (struct <structname>drm_crtc</structname>)</title> | |
| 1124 | − <para> | |
| 1125 | − A CRTC is an abstraction representing a part of the chip that contains a | |
| 1126 | − pointer to a scanout buffer. Therefore, the number of CRTCs available | |
| 1127 | − determines how many independent scanout buffers can be active at any | |
| 1128 | − given time. The CRTC structure contains several fields to support this: | |
| 1129 | − a pointer to some video memory (abstracted as a frame buffer object), a | |
| 1130 | − display mode, and an (x, y) offset into the video memory to support | |
| 1131 | − panning or configurations where one piece of video memory spans multiple | |
| 1132 | − CRTCs. | |
| 1133 | − </para> | |
| 1134 | − <sect3> | |
| 1135 | − <title>CRTC Initialization</title> | |
| 1136 | − <para> | |
| 1137 | − A KMS device must create and register at least one struct | |
| 1138 | − <structname>drm_crtc</structname> instance. The instance is allocated | |
| 1139 | − and zeroed by the driver, possibly as part of a larger structure, and | |
| 1140 | − registered with a call to <function>drm_crtc_init</function> with a | |
| 1141 | − pointer to CRTC functions. | |
| 1142 | − </para> | |
| 1143 | − </sect3> | |
| 1144 | − </sect2> | |
| 1145 | − <sect2> | |
| 1146 | − <title>Planes (struct <structname>drm_plane</structname>)</title> | |
| 1147 | − <para> | |
| 1148 | − A plane represents an image source that can be blended with or overlayed | |
| 1149 | − on top of a CRTC during the scanout process. Planes are associated with | |
| 1150 | − a frame buffer to crop a portion of the image memory (source) and | |
| 1151 | − optionally scale it to a destination size. The result is then blended | |
| 1152 | − with or overlayed on top of a CRTC. | |
| 1153 | − </para> | |
| 1154 | − <para> | |
| 1155 | − The DRM core recognizes three types of planes: | |
| 1156 | − <itemizedlist> | |
| 1157 | − <listitem> | |
| 1158 | − DRM_PLANE_TYPE_PRIMARY represents a "main" plane for a CRTC. Primary | |
| 1159 | − planes are the planes operated upon by CRTC modesetting and flipping | |
| 1160 | − operations described in the page_flip hook in <structname>drm_crtc_funcs</structname>. | |
| 1161 | − </listitem> | |
| 1162 | − <listitem> | |
| 1163 | − DRM_PLANE_TYPE_CURSOR represents a "cursor" plane for a CRTC. Cursor | |
| 1164 | − planes are the planes operated upon by the DRM_IOCTL_MODE_CURSOR and | |
| 1165 | − DRM_IOCTL_MODE_CURSOR2 ioctls. | |
| 1166 | − </listitem> | |
| 1167 | − <listitem> | |
| 1168 | − DRM_PLANE_TYPE_OVERLAY represents all non-primary, non-cursor planes. | |
| 1169 | − Some drivers refer to these types of planes as "sprites" internally. | |
| 1170 | − </listitem> | |
| 1171 | − </itemizedlist> | |
| 1172 | − For compatibility with legacy userspace, only overlay planes are made | |
| 1173 | − available to userspace by default. Userspace clients may set the | |
| 1174 | − DRM_CLIENT_CAP_UNIVERSAL_PLANES client capability bit to indicate that | |
| 1175 | − they wish to receive a universal plane list containing all plane types. | |
| 1176 | − </para> | |
| 1177 | − <sect3> | |
| 1178 | − <title>Plane Initialization</title> | |
| 1179 | − <para> | |
| 1180 | − To create a plane, a KMS drivers allocates and | |
| 1181 | − zeroes an instances of struct <structname>drm_plane</structname> | |
| 1182 | − (possibly as part of a larger structure) and registers it with a call | |
| 1183 | − to <function>drm_universal_plane_init</function>. The function takes a bitmask | |
| 1184 | − of the CRTCs that can be associated with the plane, a pointer to the | |
| 1185 | − plane functions, a list of format supported formats, and the type of | |
| 1186 | − plane (primary, cursor, or overlay) being initialized. | |
| 1187 | − </para> | |
| 1188 | − <para> | |
| 1189 | − Cursor and overlay planes are optional. All drivers should provide | |
| 1190 | − one primary plane per CRTC (although this requirement may change in | |
| 1191 | − the future); drivers that do not wish to provide special handling for | |
| 1192 | − primary planes may make use of the helper functions described in | |
| 1193 | − <xref linkend="drm-kms-planehelpers"/> to create and register a | |
| 1194 | − primary plane with standard capabilities. | |
| 1195 | − </para> | |
| 1196 | − </sect3> | |
| 1197 | − </sect2> | |
| 1198 | − <sect2> | |
| 1199 | − <title>Encoders (struct <structname>drm_encoder</structname>)</title> | |
| 1200 | − <para> | |
| 1201 | − An encoder takes pixel data from a CRTC and converts it to a format | |
| 1202 | − suitable for any attached connectors. On some devices, it may be | |
| 1203 | − possible to have a CRTC send data to more than one encoder. In that | |
| 1204 | − case, both encoders would receive data from the same scanout buffer, | |
| 1205 | − resulting in a "cloned" display configuration across the connectors | |
| 1206 | − attached to each encoder. | |
| 1207 | − </para> | |
| 1208 | − <sect3> | |
| 1209 | − <title>Encoder Initialization</title> | |
| 1210 | − <para> | |
| 1211 | − As for CRTCs, a KMS driver must create, initialize and register at | |
| 1212 | − least one struct <structname>drm_encoder</structname> instance. The | |
| 1213 | − instance is allocated and zeroed by the driver, possibly as part of a | |
| 1214 | − larger structure. | |
| 1215 | − </para> | |
| 1216 | − <para> | |
| 1217 | − Drivers must initialize the struct <structname>drm_encoder</structname> | |
| 1218 | − <structfield>possible_crtcs</structfield> and | |
| 1219 | − <structfield>possible_clones</structfield> fields before registering the | |
| 1220 | − encoder. Both fields are bitmasks of respectively the CRTCs that the | |
| 1221 | − encoder can be connected to, and sibling encoders candidate for cloning. | |
| 1222 | − </para> | |
| 1223 | − <para> | |
| 1224 | − After being initialized, the encoder must be registered with a call to | |
| 1225 | − <function>drm_encoder_init</function>. The function takes a pointer to | |
| 1226 | − the encoder functions and an encoder type. Supported types are | |
| 1227 | − <itemizedlist> | |
| 1228 | − <listitem> | |
| 1229 | − DRM_MODE_ENCODER_DAC for VGA and analog on DVI-I/DVI-A | |
| 1230 | − </listitem> | |
| 1231 | − <listitem> | |
| 1232 | − DRM_MODE_ENCODER_TMDS for DVI, HDMI and (embedded) DisplayPort | |
| 1233 | − </listitem> | |
| 1234 | − <listitem> | |
| 1235 | − DRM_MODE_ENCODER_LVDS for display panels | |
| 1236 | − </listitem> | |
| 1237 | − <listitem> | |
| 1238 | − DRM_MODE_ENCODER_TVDAC for TV output (Composite, S-Video, Component, | |
| 1239 | − SCART) | |
| 1240 | − </listitem> | |
| 1241 | − <listitem> | |
| 1242 | − DRM_MODE_ENCODER_VIRTUAL for virtual machine displays | |
| 1243 | − </listitem> | |
| 1244 | − </itemizedlist> | |
| 1245 | − </para> | |
| 1246 | − <para> | |
| 1247 | − Encoders must be attached to a CRTC to be used. DRM drivers leave | |
| 1248 | − encoders unattached at initialization time. Applications (or the fbdev | |
| 1249 | − compatibility layer when implemented) are responsible for attaching the | |
| 1250 | − encoders they want to use to a CRTC. | |
| 1251 | − </para> | |
| 1252 | − </sect3> | |
| 1253 | − </sect2> | |
| 1254 | − <sect2> | |
| 1255 | − <title>Connectors (struct <structname>drm_connector</structname>)</title> | |
| 1256 | − <para> | |
| 1257 | − A connector is the final destination for pixel data on a device, and | |
| 1258 | − usually connects directly to an external display device like a monitor | |
| 1259 | − or laptop panel. A connector can only be attached to one encoder at a | |
| 1260 | − time. The connector is also the structure where information about the | |
| 1261 | − attached display is kept, so it contains fields for display data, EDID | |
| 1262 | − data, DPMS & connection status, and information about modes | |
| 1263 | − supported on the attached displays. | |
| 1264 | − </para> | |
| 1265 | − <sect3> | |
| 1266 | − <title>Connector Initialization</title> | |
| 1267 | − <para> | |
| 1268 | − Finally a KMS driver must create, initialize, register and attach at | |
| 1269 | − least one struct <structname>drm_connector</structname> instance. The | |
| 1270 | − instance is created as other KMS objects and initialized by setting the | |
| 1271 | − following fields. | |
| 1272 | − </para> | |
| 1273 | − <variablelist> | |
| 1274 | − <varlistentry> | |
| 1275 | − <term><structfield>interlace_allowed</structfield></term> | |
| 1276 | − <listitem><para> | |
| 1277 | − Whether the connector can handle interlaced modes. | |
| 1278 | − </para></listitem> | |
| 1279 | − </varlistentry> | |
| 1280 | − <varlistentry> | |
| 1281 | − <term><structfield>doublescan_allowed</structfield></term> | |
| 1282 | − <listitem><para> | |
| 1283 | − Whether the connector can handle doublescan. | |
| 1284 | − </para></listitem> | |
| 1285 | − </varlistentry> | |
| 1286 | − <varlistentry> | |
| 1287 | − <term><structfield>display_info | |
| 1288 | − </structfield></term> | |
| 1289 | − <listitem><para> | |
| 1290 | − Display information is filled from EDID information when a display | |
| 1291 | − is detected. For non hot-pluggable displays such as flat panels in | |
| 1292 | − embedded systems, the driver should initialize the | |
| 1293 | − <structfield>display_info</structfield>.<structfield>width_mm</structfield> | |
| 1294 | − and | |
| 1295 | − <structfield>display_info</structfield>.<structfield>height_mm</structfield> | |
| 1296 | − fields with the physical size of the display. | |
| 1297 | − </para></listitem> | |
| 1298 | − </varlistentry> | |
| 1299 | − <varlistentry> | |
| 1300 | − <term id="drm-kms-connector-polled"><structfield>polled</structfield></term> | |
| 1301 | − <listitem><para> | |
| 1302 | − Connector polling mode, a combination of | |
| 1303 | − <variablelist> | |
| 1304 | − <varlistentry> | |
| 1305 | − <term>DRM_CONNECTOR_POLL_HPD</term> | |
| 1306 | − <listitem><para> | |
| 1307 | − The connector generates hotplug events and doesn't need to be | |
| 1308 | − periodically polled. The CONNECT and DISCONNECT flags must not | |
| 1309 | − be set together with the HPD flag. | |
| 1310 | − </para></listitem> | |
| 1311 | − </varlistentry> | |
| 1312 | − <varlistentry> | |
| 1313 | − <term>DRM_CONNECTOR_POLL_CONNECT</term> | |
| 1314 | − <listitem><para> | |
| 1315 | − Periodically poll the connector for connection. | |
| 1316 | − </para></listitem> | |
| 1317 | − </varlistentry> | |
| 1318 | − <varlistentry> | |
| 1319 | − <term>DRM_CONNECTOR_POLL_DISCONNECT</term> | |
| 1320 | − <listitem><para> | |
| 1321 | − Periodically poll the connector for disconnection. | |
| 1322 | − </para></listitem> | |
| 1323 | − </varlistentry> | |
| 1324 | − </variablelist> | |
| 1325 | − Set to 0 for connectors that don't support connection status | |
| 1326 | − discovery. | |
| 1327 | − </para></listitem> | |
| 1328 | − </varlistentry> | |
| 1329 | − </variablelist> | |
| 1330 | − <para> | |
| 1331 | − The connector is then registered with a call to | |
| 1332 | − <function>drm_connector_init</function> with a pointer to the connector | |
| 1333 | − functions and a connector type, and exposed through sysfs with a call to | |
| 1334 | − <function>drm_connector_register</function>. | |
| 1335 | − </para> | |
| 1336 | − <para> | |
| 1337 | − Supported connector types are | |
| 1338 | − <itemizedlist> | |
| 1339 | − <listitem>DRM_MODE_CONNECTOR_VGA</listitem> | |
| 1340 | − <listitem>DRM_MODE_CONNECTOR_DVII</listitem> | |
| 1341 | − <listitem>DRM_MODE_CONNECTOR_DVID</listitem> | |
| 1342 | − <listitem>DRM_MODE_CONNECTOR_DVIA</listitem> | |
| 1343 | − <listitem>DRM_MODE_CONNECTOR_Composite</listitem> | |
| 1344 | − <listitem>DRM_MODE_CONNECTOR_SVIDEO</listitem> | |
| 1345 | − <listitem>DRM_MODE_CONNECTOR_LVDS</listitem> | |
| 1346 | − <listitem>DRM_MODE_CONNECTOR_Component</listitem> | |
| 1347 | − <listitem>DRM_MODE_CONNECTOR_9PinDIN</listitem> | |
| 1348 | − <listitem>DRM_MODE_CONNECTOR_DisplayPort</listitem> | |
| 1349 | − <listitem>DRM_MODE_CONNECTOR_HDMIA</listitem> | |
| 1350 | − <listitem>DRM_MODE_CONNECTOR_HDMIB</listitem> | |
| 1351 | − <listitem>DRM_MODE_CONNECTOR_TV</listitem> | |
| 1352 | − <listitem>DRM_MODE_CONNECTOR_eDP</listitem> | |
| 1353 | − <listitem>DRM_MODE_CONNECTOR_VIRTUAL</listitem> | |
| 1354 | − </itemizedlist> | |
| 1355 | − </para> | |
| 1356 | − <para> | |
| 1357 | − Connectors must be attached to an encoder to be used. For devices that | |
| 1358 | − map connectors to encoders 1:1, the connector should be attached at | |
| 1359 | − initialization time with a call to | |
| 1360 | − <function>drm_mode_connector_attach_encoder</function>. The driver must | |
| 1361 | − also set the <structname>drm_connector</structname> | |
| 1362 | − <structfield>encoder</structfield> field to point to the attached | |
| 1363 | − encoder. | |
| 1364 | − </para> | |
| 1365 | − <para> | |
| 1366 | − Finally, drivers must initialize the connectors state change detection | |
| 1367 | − with a call to <function>drm_kms_helper_poll_init</function>. If at | |
| 1368 | − least one connector is pollable but can't generate hotplug interrupts | |
| 1369 | − (indicated by the DRM_CONNECTOR_POLL_CONNECT and | |
| 1370 | − DRM_CONNECTOR_POLL_DISCONNECT connector flags), a delayed work will | |
| 1371 | − automatically be queued to periodically poll for changes. Connectors | |
| 1372 | − that can generate hotplug interrupts must be marked with the | |
| 1373 | − DRM_CONNECTOR_POLL_HPD flag instead, and their interrupt handler must | |
| 1374 | − call <function>drm_helper_hpd_irq_event</function>. The function will | |
| 1375 | − queue a delayed work to check the state of all connectors, but no | |
| 1376 | − periodic polling will be done. | |
| 1377 | − </para> | |
| 1378 | − </sect3> | |
| 1379 | − <sect3> | |
| 1380 | − <title>Connector Operations</title> | |
| 1381 | − <note><para> | |
| 1382 | − Unless otherwise state, all operations are mandatory. | |
| 1383 | − </para></note> | |
| 1384 | − <sect4> | |
| 1385 | − <title>DPMS</title> | |
| 1386 | − <synopsis>void (*dpms)(struct drm_connector *connector, int mode);</synopsis> | |
| 1387 | − <para> | |
| 1388 | − The DPMS operation sets the power state of a connector. The mode | |
| 1389 | − argument is one of | |
| 1390 | − <itemizedlist> | |
| 1391 | − <listitem><para>DRM_MODE_DPMS_ON</para></listitem> | |
| 1392 | − <listitem><para>DRM_MODE_DPMS_STANDBY</para></listitem> | |
| 1393 | − <listitem><para>DRM_MODE_DPMS_SUSPEND</para></listitem> | |
| 1394 | − <listitem><para>DRM_MODE_DPMS_OFF</para></listitem> | |
| 1395 | − </itemizedlist> | |
| 1396 | − </para> | |
| 1397 | − <para> | |
| 1398 | − In all but DPMS_ON mode the encoder to which the connector is attached | |
| 1399 | − should put the display in low-power mode by driving its signals | |
| 1400 | − appropriately. If more than one connector is attached to the encoder | |
| 1401 | − care should be taken not to change the power state of other displays as | |
| 1402 | − a side effect. Low-power mode should be propagated to the encoders and | |
| 1403 | − CRTCs when all related connectors are put in low-power mode. | |
| 1404 | − </para> | |
| 1405 | − </sect4> | |
| 1406 | − <sect4> | |
| 1407 | − <title>Modes</title> | |
| 1408 | − <synopsis>int (*fill_modes)(struct drm_connector *connector, uint32_t max_width, | |
| 1409 | − uint32_t max_height);</synopsis> | |
| 1410 | − <para> | |
| 1411 | − Fill the mode list with all supported modes for the connector. If the | |
| 1412 | − <parameter>max_width</parameter> and <parameter>max_height</parameter> | |
| 1413 | − arguments are non-zero, the implementation must ignore all modes wider | |
| 1414 | − than <parameter>max_width</parameter> or higher than | |
| 1415 | − <parameter>max_height</parameter>. | |
| 1416 | − </para> | |
| 1417 | − <para> | |
| 1418 | − The connector must also fill in this operation its | |
| 1419 | − <structfield>display_info</structfield> | |
| 1420 | − <structfield>width_mm</structfield> and | |
| 1421 | − <structfield>height_mm</structfield> fields with the connected display | |
| 1422 | − physical size in millimeters. The fields should be set to 0 if the value | |
| 1423 | − isn't known or is not applicable (for instance for projector devices). | |
| 1424 | − </para> | |
| 1425 | − </sect4> | |
| 1426 | − <sect4> | |
| 1427 | − <title>Connection Status</title> | |
| 1428 | − <para> | |
| 1429 | − The connection status is updated through polling or hotplug events when | |
| 1430 | − supported (see <xref linkend="drm-kms-connector-polled"/>). The status | |
| 1431 | − value is reported to userspace through ioctls and must not be used | |
| 1432 | − inside the driver, as it only gets initialized by a call to | |
| 1433 | − <function>drm_mode_getconnector</function> from userspace. | |
| 1434 | − </para> | |
| 1435 | − <synopsis>enum drm_connector_status (*detect)(struct drm_connector *connector, | |
| 1436 | − bool force);</synopsis> | |
| 1437 | − <para> | |
| 1438 | − Check to see if anything is attached to the connector. The | |
| 1439 | − <parameter>force</parameter> parameter is set to false whilst polling or | |
| 1440 | − to true when checking the connector due to user request. | |
| 1441 | − <parameter>force</parameter> can be used by the driver to avoid | |
| 1442 | − expensive, destructive operations during automated probing. | |
| 1443 | − </para> | |
| 1444 | − <para> | |
| 1445 | − Return connector_status_connected if something is connected to the | |
| 1446 | − connector, connector_status_disconnected if nothing is connected and | |
| 1447 | − connector_status_unknown if the connection state isn't known. | |
| 1448 | − </para> | |
| 1449 | − <para> | |
| 1450 | − Drivers should only return connector_status_connected if the connection | |
| 1451 | − status has really been probed as connected. Connectors that can't detect | |
| 1452 | − the connection status, or failed connection status probes, should return | |
| 1453 | − connector_status_unknown. | |
| 1454 | − </para> | |
| 1455 | − </sect4> | |
| 1456 | − </sect3> | |
| 1457 | − </sect2> | |
| 1458 | − <sect2> | |
| 1459 | − <title>Cleanup</title> | |
| 1460 | − <para> | |
| 1461 | − The DRM core manages its objects' lifetime. When an object is not needed | |
| 1462 | − anymore the core calls its destroy function, which must clean up and | |
| 1463 | − free every resource allocated for the object. Every | |
| 1464 | − <function>drm_*_init</function> call must be matched with a | |
| 1465 | − corresponding <function>drm_*_cleanup</function> call to cleanup CRTCs | |
| 1466 | − (<function>drm_crtc_cleanup</function>), planes | |
| 1467 | − (<function>drm_plane_cleanup</function>), encoders | |
| 1468 | − (<function>drm_encoder_cleanup</function>) and connectors | |
| 1469 | − (<function>drm_connector_cleanup</function>). Furthermore, connectors | |
| 1470 | − that have been added to sysfs must be removed by a call to | |
| 1471 | − <function>drm_connector_unregister</function> before calling | |
| 1472 | − <function>drm_connector_cleanup</function>. | |
| 1473 | − </para> | |
| 1474 | − <para> | |
| 1475 | − Connectors state change detection must be cleanup up with a call to | |
| 1476 | − <function>drm_kms_helper_poll_fini</function>. | |
| 1477 | − </para> | |
| 1478 | − </sect2> | |
| 1479 | − <sect2> | |
| 1480 | − <title>Output discovery and initialization example</title> | |
| 1481 | − <programlisting><![CDATA[ | |
| 1482 | −void intel_crt_init(struct drm_device *dev) | |
| 1483 | −{ | |
| 1484 | − struct drm_connector *connector; | |
| 1485 | − struct intel_output *intel_output; | |
| 1486 | − | |
| 1487 | − intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL); | |
| 1488 | − if (!intel_output) | |
| 1489 | − return; | |
| 1490 | − | |
| 1491 | − connector = &intel_output->base; | |
| 1492 | − drm_connector_init(dev, &intel_output->base, | |
| 1493 | − &intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA); | |
| 1494 | − | |
| 1495 | − drm_encoder_init(dev, &intel_output->enc, &intel_crt_enc_funcs, | |
| 1496 | − DRM_MODE_ENCODER_DAC); | |
| 1497 | − | |
| 1498 | − drm_mode_connector_attach_encoder(&intel_output->base, | |
| 1499 | − &intel_output->enc); | |
| 1500 | − | |
| 1501 | − /* Set up the DDC bus. */ | |
| 1502 | − intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A"); | |
| 1503 | − if (!intel_output->ddc_bus) { | |
| 1504 | − dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration " | |
| 1505 | − "failed.\n"); | |
| 1506 | − return; | |
| 1507 | − } | |
| 1508 | − | |
| 1509 | − intel_output->type = INTEL_OUTPUT_ANALOG; | |
| 1510 | − connector->interlace_allowed = 0; | |
| 1511 | − connector->doublescan_allowed = 0; | |
| 1512 | − | |
| 1513 | − drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs); | |
| 1514 | − drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs); | |
| 1515 | − | |
| 1516 | − drm_connector_register(connector); | |
| 1517 | −}]]></programlisting> | |
| 1518 | − <para> | |
| 1519 | − In the example above (taken from the i915 driver), a CRTC, connector and | |
| 1520 | − encoder combination is created. A device-specific i2c bus is also | |
| 1521 | − created for fetching EDID data and performing monitor detection. Once | |
| 1522 | − the process is complete, the new connector is registered with sysfs to | |
| 1523 | − make its properties available to applications. | |
| 1524 | − </para> | |
| 1525 | − </sect2> | |
| 1526 | − <sect2> | |
| 1527 | − <title>KMS API Functions</title> | |
| 1528 | −!Edrivers/gpu/drm/drm_crtc.c | |
| 1529 | − </sect2> | |
| 1530 | − <sect2> | |
| 1531 | − <title>KMS Data Structures</title> | |
| 1532 | −!Iinclude/drm/drm_crtc.h | |
| 1533 | − </sect2> | |
| 1534 | − <sect2> | |
| 1535 | − <title>KMS Locking</title> | |
| 1536 | −!Pdrivers/gpu/drm/drm_modeset_lock.c kms locking | |
| 1537 | −!Iinclude/drm/drm_modeset_lock.h | |
| 1538 | −!Edrivers/gpu/drm/drm_modeset_lock.c | |
| 1539 | − </sect2> | |
| 1540 | − </sect1> | |
| 1541 | − | |
| 1542 | − <!-- Internals: kms helper functions --> | |
| 1543 | − | |
| 1544 | − <sect1> | |
| 1545 | − <title>Mode Setting Helper Functions</title> | |
| 1546 | − <para> | |
| 1547 | − The plane, CRTC, encoder and connector functions provided by the drivers | |
| 1548 | − implement the DRM API. They're called by the DRM core and ioctl handlers | |
| 1549 | − to handle device state changes and configuration request. As implementing | |
| 1550 | − those functions often requires logic not specific to drivers, mid-layer | |
| 1551 | − helper functions are available to avoid duplicating boilerplate code. | |
| 1552 | − </para> | |
| 1553 | − <para> | |
| 1554 | − The DRM core contains one mid-layer implementation. The mid-layer provides | |
| 1555 | − implementations of several plane, CRTC, encoder and connector functions | |
| 1556 | − (called from the top of the mid-layer) that pre-process requests and call | |
| 1557 | − lower-level functions provided by the driver (at the bottom of the | |
| 1558 | − mid-layer). For instance, the | |
| 1559 | − <function>drm_crtc_helper_set_config</function> function can be used to | |
| 1560 | − fill the struct <structname>drm_crtc_funcs</structname> | |
| 1561 | − <structfield>set_config</structfield> field. When called, it will split | |
| 1562 | − the <methodname>set_config</methodname> operation in smaller, simpler | |
| 1563 | − operations and call the driver to handle them. | |
| 1564 | − </para> | |
| 1565 | − <para> | |
| 1566 | − To use the mid-layer, drivers call <function>drm_crtc_helper_add</function>, | |
| 1567 | − <function>drm_encoder_helper_add</function> and | |
| 1568 | − <function>drm_connector_helper_add</function> functions to install their | |
| 1569 | − mid-layer bottom operations handlers, and fill the | |
| 1570 | − <structname>drm_crtc_funcs</structname>, | |
| 1571 | − <structname>drm_encoder_funcs</structname> and | |
| 1572 | − <structname>drm_connector_funcs</structname> structures with pointers to | |
| 1573 | − the mid-layer top API functions. Installing the mid-layer bottom operation | |
| 1574 | − handlers is best done right after registering the corresponding KMS object. | |
| 1575 | − </para> | |
| 1576 | − <para> | |
| 1577 | − The mid-layer is not split between CRTC, encoder and connector operations. | |
| 1578 | − To use it, a driver must provide bottom functions for all of the three KMS | |
| 1579 | − entities. | |
| 1580 | − </para> | |
| 1581 | − <sect2> | |
| 1582 | − <title>Atomic Modeset Helper Functions Reference</title> | |
| 1583 | − <sect3> | |
| 1584 | − <title>Overview</title> | |
| 1585 | −!Pdrivers/gpu/drm/drm_atomic_helper.c overview | |
| 1586 | − </sect3> | |
| 1587 | − <sect3> | |
| 1588 | − <title>Implementing Asynchronous Atomic Commit</title> | |
| 1589 | −!Pdrivers/gpu/drm/drm_atomic_helper.c implementing async commit | |
| 1590 | − </sect3> | |
| 1591 | − <sect3> | |
| 1592 | − <title>Atomic State Reset and Initialization</title> | |
| 1593 | −!Pdrivers/gpu/drm/drm_atomic_helper.c atomic state reset and initialization | |
| 1594 | − </sect3> | |
| 1595 | −!Iinclude/drm/drm_atomic_helper.h | |
| 1596 | −!Edrivers/gpu/drm/drm_atomic_helper.c | |
| 1597 | − </sect2> | |
| 1598 | − <sect2> | |
| 1599 | − <title>Modeset Helper Reference for Common Vtables</title> | |
| 1600 | −!Iinclude/drm/drm_modeset_helper_vtables.h | |
| 1601 | −!Pinclude/drm/drm_modeset_helper_vtables.h overview | |
| 1602 | − </sect2> | |
| 1603 | − <sect2> | |
| 1604 | − <title>Legacy CRTC/Modeset Helper Functions Reference</title> | |
| 1605 | −!Edrivers/gpu/drm/drm_crtc_helper.c | |
| 1606 | −!Pdrivers/gpu/drm/drm_crtc_helper.c overview | |
| 1607 | − </sect2> | |
| 1608 | − <sect2> | |
| 1609 | − <title>Output Probing Helper Functions Reference</title> | |
| 1610 | −!Pdrivers/gpu/drm/drm_probe_helper.c output probing helper overview | |
| 1611 | −!Edrivers/gpu/drm/drm_probe_helper.c | |
| 1612 | − </sect2> | |
| 1613 | − <sect2> | |
| 1614 | − <title>fbdev Helper Functions Reference</title> | |
| 1615 | −!Pdrivers/gpu/drm/drm_fb_helper.c fbdev helpers | |
| 1616 | −!Edrivers/gpu/drm/drm_fb_helper.c | |
| 1617 | −!Iinclude/drm/drm_fb_helper.h | |
| 1618 | − </sect2> | |
| 1619 | − <sect2> | |
| 1620 | − <title>Framebuffer CMA Helper Functions Reference</title> | |
| 1621 | −!Pdrivers/gpu/drm/drm_fb_cma_helper.c framebuffer cma helper functions | |
| 1622 | −!Edrivers/gpu/drm/drm_fb_cma_helper.c | |
| 1623 | − </sect2> | |
| 1624 | − <sect2> | |
| 1625 | − <title>Display Port Helper Functions Reference</title> | |
| 1626 | −!Pdrivers/gpu/drm/drm_dp_helper.c dp helpers | |
| 1627 | −!Iinclude/drm/drm_dp_helper.h | |
| 1628 | −!Edrivers/gpu/drm/drm_dp_helper.c | |
| 1629 | − </sect2> | |
| 1630 | − <sect2> | |
| 1631 | − <title>Display Port Dual Mode Adaptor Helper Functions Reference</title> | |
| 1632 | −!Pdrivers/gpu/drm/drm_dp_dual_mode_helper.c dp dual mode helpers | |
| 1633 | −!Iinclude/drm/drm_dp_dual_mode_helper.h | |
| 1634 | −!Edrivers/gpu/drm/drm_dp_dual_mode_helper.c | |
| 1635 | − </sect2> | |
| 1636 | − <sect2> | |
| 1637 | − <title>Display Port MST Helper Functions Reference</title> | |
| 1638 | −!Pdrivers/gpu/drm/drm_dp_mst_topology.c dp mst helper | |
| 1639 | −!Iinclude/drm/drm_dp_mst_helper.h | |
| 1640 | −!Edrivers/gpu/drm/drm_dp_mst_topology.c | |
| 1641 | − </sect2> | |
| 1642 | − <sect2> | |
| 1643 | − <title>MIPI DSI Helper Functions Reference</title> | |
| 1644 | −!Pdrivers/gpu/drm/drm_mipi_dsi.c dsi helpers | |
| 1645 | −!Iinclude/drm/drm_mipi_dsi.h | |
| 1646 | −!Edrivers/gpu/drm/drm_mipi_dsi.c | |
| 1647 | − </sect2> | |
| 1648 | − <sect2> | |
| 1649 | − <title>EDID Helper Functions Reference</title> | |
| 1650 | −!Edrivers/gpu/drm/drm_edid.c | |
| 1651 | − </sect2> | |
| 1652 | − <sect2> | |
| 1653 | − <title>Rectangle Utilities Reference</title> | |
| 1654 | −!Pinclude/drm/drm_rect.h rect utils | |
| 1655 | −!Iinclude/drm/drm_rect.h | |
| 1656 | −!Edrivers/gpu/drm/drm_rect.c | |
| 1657 | − </sect2> | |
| 1658 | − <sect2> | |
| 1659 | − <title>Flip-work Helper Reference</title> | |
| 1660 | −!Pinclude/drm/drm_flip_work.h flip utils | |
| 1661 | −!Iinclude/drm/drm_flip_work.h | |
| 1662 | −!Edrivers/gpu/drm/drm_flip_work.c | |
| 1663 | − </sect2> | |
| 1664 | − <sect2> | |
| 1665 | − <title>HDMI Infoframes Helper Reference</title> | |
| 1666 | − <para> | |
| 1667 | − Strictly speaking this is not a DRM helper library but generally useable | |
| 1668 | − by any driver interfacing with HDMI outputs like v4l or alsa drivers. | |
| 1669 | − But it nicely fits into the overall topic of mode setting helper | |
| 1670 | − libraries and hence is also included here. | |
| 1671 | − </para> | |
| 1672 | −!Iinclude/linux/hdmi.h | |
| 1673 | −!Edrivers/video/hdmi.c | |
| 1674 | − </sect2> | |
| 1675 | − <sect2> | |
| 1676 | − <title id="drm-kms-planehelpers">Plane Helper Reference</title> | |
| 1677 | −!Edrivers/gpu/drm/drm_plane_helper.c | |
| 1678 | −!Pdrivers/gpu/drm/drm_plane_helper.c overview | |
| 1679 | − </sect2> | |
| 1680 | − <sect2> | |
| 1681 | − <title>Tile group</title> | |
| 1682 | −!Pdrivers/gpu/drm/drm_crtc.c Tile group | |
| 1683 | − </sect2> | |
| 1684 | − <sect2> | |
| 1685 | − <title>Bridges</title> | |
| 1686 | − <sect3> | |
| 1687 | − <title>Overview</title> | |
| 1688 | −!Pdrivers/gpu/drm/drm_bridge.c overview | |
| 1689 | − </sect3> | |
| 1690 | − <sect3> | |
| 1691 | − <title>Default bridge callback sequence</title> | |
| 1692 | −!Pdrivers/gpu/drm/drm_bridge.c bridge callbacks | |
| 1693 | − </sect3> | |
| 1694 | −!Edrivers/gpu/drm/drm_bridge.c | |
| 1695 | − </sect2> | |
| 1696 | − <sect2> | |
| 1697 | − <title>Panel Helper Reference</title> | |
| 1698 | −!Iinclude/drm/drm_panel.h | |
| 1699 | −!Edrivers/gpu/drm/drm_panel.c | |
| 1700 | −!Pdrivers/gpu/drm/drm_panel.c drm panel | |
| 1701 | − </sect2> | |
| 1702 | − </sect1> | |
| 1703 | − | |
| 1704 | − <!-- Internals: kms properties --> | |
| 1705 | − | |
| 1706 | − <sect1 id="drm-kms-properties"> | |
| 1707 | − <title>KMS Properties</title> | |
| 1708 | − <para> | |
| 1709 | − Drivers may need to expose additional parameters to applications than | |
| 1710 | − those described in the previous sections. KMS supports attaching | |
| 1711 | − properties to CRTCs, connectors and planes and offers a userspace API to | |
| 1712 | − list, get and set the property values. | |
| 1713 | − </para> | |
| 1714 | − <para> | |
| 1715 | − Properties are identified by a name that uniquely defines the property | |
| 1716 | − purpose, and store an associated value. For all property types except blob | |
| 1717 | − properties the value is a 64-bit unsigned integer. | |
| 1718 | − </para> | |
| 1719 | − <para> | |
| 1720 | − KMS differentiates between properties and property instances. Drivers | |
| 1721 | − first create properties and then create and associate individual instances | |
| 1722 | − of those properties to objects. A property can be instantiated multiple | |
| 1723 | − times and associated with different objects. Values are stored in property | |
| 1724 | − instances, and all other property information are stored in the property | |
| 1725 | − and shared between all instances of the property. | |
| 1726 | − </para> | |
| 1727 | − <para> | |
| 1728 | − Every property is created with a type that influences how the KMS core | |
| 1729 | − handles the property. Supported property types are | |
| 1730 | − <variablelist> | |
| 1731 | − <varlistentry> | |
| 1732 | − <term>DRM_MODE_PROP_RANGE</term> | |
| 1733 | − <listitem><para>Range properties report their minimum and maximum | |
| 1734 | − admissible values. The KMS core verifies that values set by | |
| 1735 | − application fit in that range.</para></listitem> | |
| 1736 | − </varlistentry> | |
| 1737 | − <varlistentry> | |
| 1738 | − <term>DRM_MODE_PROP_ENUM</term> | |
| 1739 | − <listitem><para>Enumerated properties take a numerical value that | |
| 1740 | − ranges from 0 to the number of enumerated values defined by the | |
| 1741 | − property minus one, and associate a free-formed string name to each | |
| 1742 | − value. Applications can retrieve the list of defined value-name pairs | |
| 1743 | − and use the numerical value to get and set property instance values. | |
| 1744 | − </para></listitem> | |
| 1745 | − </varlistentry> | |
| 1746 | − <varlistentry> | |
| 1747 | − <term>DRM_MODE_PROP_BITMASK</term> | |
| 1748 | − <listitem><para>Bitmask properties are enumeration properties that | |
| 1749 | − additionally restrict all enumerated values to the 0..63 range. | |
| 1750 | − Bitmask property instance values combine one or more of the | |
| 1751 | − enumerated bits defined by the property.</para></listitem> | |
| 1752 | − </varlistentry> | |
| 1753 | − <varlistentry> | |
| 1754 | − <term>DRM_MODE_PROP_BLOB</term> | |
| 1755 | − <listitem><para>Blob properties store a binary blob without any format | |
| 1756 | − restriction. The binary blobs are created as KMS standalone objects, | |
| 1757 | − and blob property instance values store the ID of their associated | |
| 1758 | − blob object.</para> | |
| 1759 | − <para>Blob properties are only used for the connector EDID property | |
| 1760 | − and cannot be created by drivers.</para></listitem> | |
| 1761 | − </varlistentry> | |
| 1762 | − </variablelist> | |
| 1763 | − </para> | |
| 1764 | − <para> | |
| 1765 | − To create a property drivers call one of the following functions depending | |
| 1766 | − on the property type. All property creation functions take property flags | |
| 1767 | − and name, as well as type-specific arguments. | |
| 1768 | − <itemizedlist> | |
| 1769 | − <listitem> | |
| 1770 | − <synopsis>struct drm_property *drm_property_create_range(struct drm_device *dev, int flags, | |
| 1771 | − const char *name, | |
| 1772 | − uint64_t min, uint64_t max);</synopsis> | |
| 1773 | − <para>Create a range property with the given minimum and maximum | |
| 1774 | − values.</para> | |
| 1775 | − </listitem> | |
| 1776 | − <listitem> | |
| 1777 | − <synopsis>struct drm_property *drm_property_create_enum(struct drm_device *dev, int flags, | |
| 1778 | − const char *name, | |
| 1779 | − const struct drm_prop_enum_list *props, | |
| 1780 | − int num_values);</synopsis> | |
| 1781 | − <para>Create an enumerated property. The <parameter>props</parameter> | |
| 1782 | − argument points to an array of <parameter>num_values</parameter> | |
| 1783 | − value-name pairs.</para> | |
| 1784 | − </listitem> | |
| 1785 | − <listitem> | |
| 1786 | − <synopsis>struct drm_property *drm_property_create_bitmask(struct drm_device *dev, | |
| 1787 | − int flags, const char *name, | |
| 1788 | − const struct drm_prop_enum_list *props, | |
| 1789 | − int num_values);</synopsis> | |
| 1790 | − <para>Create a bitmask property. The <parameter>props</parameter> | |
| 1791 | − argument points to an array of <parameter>num_values</parameter> | |
| 1792 | − value-name pairs.</para> | |
| 1793 | − </listitem> | |
| 1794 | − </itemizedlist> | |
| 1795 | − </para> | |
| 1796 | − <para> | |
| 1797 | − Properties can additionally be created as immutable, in which case they | |
| 1798 | − will be read-only for applications but can be modified by the driver. To | |
| 1799 | − create an immutable property drivers must set the DRM_MODE_PROP_IMMUTABLE | |
| 1800 | − flag at property creation time. | |
| 1801 | − </para> | |
| 1802 | − <para> | |
| 1803 | − When no array of value-name pairs is readily available at property | |
| 1804 | − creation time for enumerated or range properties, drivers can create | |
| 1805 | − the property using the <function>drm_property_create</function> function | |
| 1806 | − and manually add enumeration value-name pairs by calling the | |
| 1807 | − <function>drm_property_add_enum</function> function. Care must be taken to | |
| 1808 | − properly specify the property type through the <parameter>flags</parameter> | |
| 1809 | − argument. | |
| 1810 | − </para> | |
| 1811 | − <para> | |
| 1812 | − After creating properties drivers can attach property instances to CRTC, | |
| 1813 | − connector and plane objects by calling the | |
| 1814 | − <function>drm_object_attach_property</function>. The function takes a | |
| 1815 | − pointer to the target object, a pointer to the previously created property | |
| 1816 | − and an initial instance value. | |
| 1817 | − </para> | |
| 1818 | − <sect2> | |
| 1819 | − <title>Existing KMS Properties</title> | |
| 1820 | − <para> | |
| 1821 | − The following table gives description of drm properties exposed by various | |
| 1822 | − modules/drivers. | |
| 1823 | − </para> | |
| 1824 | − <table border="1" cellpadding="0" cellspacing="0"> | |
| 1825 | − <tbody> | |
| 1826 | − <tr style="font-weight: bold;"> | |
| 1827 | − <td valign="top" >Owner Module/Drivers</td> | |
| 1828 | − <td valign="top" >Group</td> | |
| 1829 | − <td valign="top" >Property Name</td> | |
| 1830 | − <td valign="top" >Type</td> | |
| 1831 | − <td valign="top" >Property Values</td> | |
| 1832 | − <td valign="top" >Object attached</td> | |
| 1833 | − <td valign="top" >Description/Restrictions</td> | |
| 1834 | − </tr> | |
| 1835 | − <tr> | |
| 1836 | − <td rowspan="42" valign="top" >DRM</td> | |
| 1837 | − <td rowspan="2" valign="top" >Generic</td> | |
| 1838 | − <td valign="top" >“rotation”</td> | |
| 1839 | − <td valign="top" >BITMASK</td> | |
| 1840 | − <td valign="top" >{ 0, "rotate-0" }, | |
| 1841 | − { 1, "rotate-90" }, | |
| 1842 | − { 2, "rotate-180" }, | |
| 1843 | − { 3, "rotate-270" }, | |
| 1844 | − { 4, "reflect-x" }, | |
| 1845 | − { 5, "reflect-y" }</td> | |
| 1846 | − <td valign="top" >CRTC, Plane</td> | |
| 1847 | − <td valign="top" >rotate-(degrees) rotates the image by the specified amount in degrees | |
| 1848 | − in counter clockwise direction. reflect-x and reflect-y reflects the | |
| 1849 | − image along the specified axis prior to rotation</td> | |
| 1850 | − </tr> | |
| 1851 | − <tr> | |
| 1852 | − <td valign="top" >“scaling mode”</td> | |
| 1853 | − <td valign="top" >ENUM</td> | |
| 1854 | − <td valign="top" >{ "None", "Full", "Center", "Full aspect" }</td> | |
| 1855 | − <td valign="top" >Connector</td> | |
| 1856 | − <td valign="top" >Supported by: amdgpu, gma500, i915, nouveau and radeon.</td> | |
| 1857 | − </tr> | |
| 1858 | − <tr> | |
| 1859 | − <td rowspan="5" valign="top" >Connector</td> | |
| 1860 | − <td valign="top" >“EDID”</td> | |
| 1861 | − <td valign="top" >BLOB | IMMUTABLE</td> | |
| 1862 | − <td valign="top" >0</td> | |
| 1863 | − <td valign="top" >Connector</td> | |
| 1864 | − <td valign="top" >Contains id of edid blob ptr object.</td> | |
| 1865 | − </tr> | |
| 1866 | − <tr> | |
| 1867 | − <td valign="top" >“DPMS”</td> | |
| 1868 | − <td valign="top" >ENUM</td> | |
| 1869 | − <td valign="top" >{ “On”, “Standby”, “Suspend”, “Off” }</td> | |
| 1870 | − <td valign="top" >Connector</td> | |
| 1871 | − <td valign="top" >Contains DPMS operation mode value.</td> | |
| 1872 | − </tr> | |
| 1873 | − <tr> | |
| 1874 | − <td valign="top" >“PATH”</td> | |
| 1875 | − <td valign="top" >BLOB | IMMUTABLE</td> | |
| 1876 | − <td valign="top" >0</td> | |
| 1877 | − <td valign="top" >Connector</td> | |
| 1878 | − <td valign="top" >Contains topology path to a connector.</td> | |
| 1879 | − </tr> | |
| 1880 | − <tr> | |
| 1881 | − <td valign="top" >“TILE”</td> | |
| 1882 | − <td valign="top" >BLOB | IMMUTABLE</td> | |
| 1883 | − <td valign="top" >0</td> | |
| 1884 | − <td valign="top" >Connector</td> | |
| 1885 | − <td valign="top" >Contains tiling information for a connector.</td> | |
| 1886 | − </tr> | |
| 1887 | − <tr> | |
| 1888 | − <td valign="top" >“CRTC_ID”</td> | |
| 1889 | − <td valign="top" >OBJECT</td> | |
| 1890 | − <td valign="top" >DRM_MODE_OBJECT_CRTC</td> | |
| 1891 | − <td valign="top" >Connector</td> | |
| 1892 | − <td valign="top" >CRTC that connector is attached to (atomic)</td> | |
| 1893 | − </tr> | |
| 1894 | − <tr> | |
| 1895 | − <td rowspan="11" valign="top" >Plane</td> | |
| 1896 | − <td valign="top" >“type”</td> | |
| 1897 | − <td valign="top" >ENUM | IMMUTABLE</td> | |
| 1898 | − <td valign="top" >{ "Overlay", "Primary", "Cursor" }</td> | |
| 1899 | − <td valign="top" >Plane</td> | |
| 1900 | − <td valign="top" >Plane type</td> | |
| 1901 | − </tr> | |
| 1902 | − <tr> | |
| 1903 | − <td valign="top" >“SRC_X”</td> | |
| 1904 | − <td valign="top" >RANGE</td> | |
| 1905 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 1906 | − <td valign="top" >Plane</td> | |
| 1907 | − <td valign="top" >Scanout source x coordinate in 16.16 fixed point (atomic)</td> | |
| 1908 | − </tr> | |
| 1909 | − <tr> | |
| 1910 | − <td valign="top" >“SRC_Y”</td> | |
| 1911 | − <td valign="top" >RANGE</td> | |
| 1912 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 1913 | − <td valign="top" >Plane</td> | |
| 1914 | − <td valign="top" >Scanout source y coordinate in 16.16 fixed point (atomic)</td> | |
| 1915 | − </tr> | |
| 1916 | − <tr> | |
| 1917 | − <td valign="top" >“SRC_W”</td> | |
| 1918 | − <td valign="top" >RANGE</td> | |
| 1919 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 1920 | − <td valign="top" >Plane</td> | |
| 1921 | − <td valign="top" >Scanout source width in 16.16 fixed point (atomic)</td> | |
| 1922 | − </tr> | |
| 1923 | − <tr> | |
| 1924 | − <td valign="top" >“SRC_H”</td> | |
| 1925 | − <td valign="top" >RANGE</td> | |
| 1926 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 1927 | − <td valign="top" >Plane</td> | |
| 1928 | − <td valign="top" >Scanout source height in 16.16 fixed point (atomic)</td> | |
| 1929 | − </tr> | |
| 1930 | − <tr> | |
| 1931 | − <td valign="top" >“CRTC_X”</td> | |
| 1932 | − <td valign="top" >SIGNED_RANGE</td> | |
| 1933 | − <td valign="top" >Min=INT_MIN, Max=INT_MAX</td> | |
| 1934 | − <td valign="top" >Plane</td> | |
| 1935 | − <td valign="top" >Scanout CRTC (destination) x coordinate (atomic)</td> | |
| 1936 | − </tr> | |
| 1937 | − <tr> | |
| 1938 | − <td valign="top" >“CRTC_Y”</td> | |
| 1939 | − <td valign="top" >SIGNED_RANGE</td> | |
| 1940 | − <td valign="top" >Min=INT_MIN, Max=INT_MAX</td> | |
| 1941 | − <td valign="top" >Plane</td> | |
| 1942 | − <td valign="top" >Scanout CRTC (destination) y coordinate (atomic)</td> | |
| 1943 | − </tr> | |
| 1944 | − <tr> | |
| 1945 | − <td valign="top" >“CRTC_W”</td> | |
| 1946 | − <td valign="top" >RANGE</td> | |
| 1947 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 1948 | − <td valign="top" >Plane</td> | |
| 1949 | − <td valign="top" >Scanout CRTC (destination) width (atomic)</td> | |
| 1950 | − </tr> | |
| 1951 | − <tr> | |
| 1952 | − <td valign="top" >“CRTC_H”</td> | |
| 1953 | − <td valign="top" >RANGE</td> | |
| 1954 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 1955 | − <td valign="top" >Plane</td> | |
| 1956 | − <td valign="top" >Scanout CRTC (destination) height (atomic)</td> | |
| 1957 | − </tr> | |
| 1958 | − <tr> | |
| 1959 | − <td valign="top" >“FB_ID”</td> | |
| 1960 | − <td valign="top" >OBJECT</td> | |
| 1961 | − <td valign="top" >DRM_MODE_OBJECT_FB</td> | |
| 1962 | − <td valign="top" >Plane</td> | |
| 1963 | − <td valign="top" >Scanout framebuffer (atomic)</td> | |
| 1964 | − </tr> | |
| 1965 | − <tr> | |
| 1966 | − <td valign="top" >“CRTC_ID”</td> | |
| 1967 | − <td valign="top" >OBJECT</td> | |
| 1968 | − <td valign="top" >DRM_MODE_OBJECT_CRTC</td> | |
| 1969 | − <td valign="top" >Plane</td> | |
| 1970 | − <td valign="top" >CRTC that plane is attached to (atomic)</td> | |
| 1971 | − </tr> | |
| 1972 | − <tr> | |
| 1973 | − <td rowspan="2" valign="top" >DVI-I</td> | |
| 1974 | − <td valign="top" >“subconnector”</td> | |
| 1975 | − <td valign="top" >ENUM</td> | |
| 1976 | − <td valign="top" >{ “Unknown”, “DVI-D”, “DVI-A” }</td> | |
| 1977 | − <td valign="top" >Connector</td> | |
| 1978 | − <td valign="top" >TBD</td> | |
| 1979 | − </tr> | |
| 1980 | − <tr> | |
| 1981 | − <td valign="top" >“select subconnector”</td> | |
| 1982 | − <td valign="top" >ENUM</td> | |
| 1983 | − <td valign="top" >{ “Automatic”, “DVI-D”, “DVI-A” }</td> | |
| 1984 | − <td valign="top" >Connector</td> | |
| 1985 | − <td valign="top" >TBD</td> | |
| 1986 | − </tr> | |
| 1987 | − <tr> | |
| 1988 | − <td rowspan="13" valign="top" >TV</td> | |
| 1989 | − <td valign="top" >“subconnector”</td> | |
| 1990 | − <td valign="top" >ENUM</td> | |
| 1991 | − <td valign="top" >{ "Unknown", "Composite", "SVIDEO", "Component", "SCART" }</td> | |
| 1992 | − <td valign="top" >Connector</td> | |
| 1993 | − <td valign="top" >TBD</td> | |
| 1994 | − </tr> | |
| 1995 | − <tr> | |
| 1996 | − <td valign="top" >“select subconnector”</td> | |
| 1997 | − <td valign="top" >ENUM</td> | |
| 1998 | − <td valign="top" >{ "Automatic", "Composite", "SVIDEO", "Component", "SCART" }</td> | |
| 1999 | − <td valign="top" >Connector</td> | |
| 2000 | − <td valign="top" >TBD</td> | |
| 2001 | − </tr> | |
| 2002 | − <tr> | |
| 2003 | − <td valign="top" >“mode”</td> | |
| 2004 | − <td valign="top" >ENUM</td> | |
| 2005 | − <td valign="top" >{ "NTSC_M", "NTSC_J", "NTSC_443", "PAL_B" } etc.</td> | |
| 2006 | − <td valign="top" >Connector</td> | |
| 2007 | − <td valign="top" >TBD</td> | |
| 2008 | − </tr> | |
| 2009 | − <tr> | |
| 2010 | − <td valign="top" >“left margin”</td> | |
| 2011 | − <td valign="top" >RANGE</td> | |
| 2012 | − <td valign="top" >Min=0, Max=100</td> | |
| 2013 | − <td valign="top" >Connector</td> | |
| 2014 | − <td valign="top" >TBD</td> | |
| 2015 | − </tr> | |
| 2016 | − <tr> | |
| 2017 | − <td valign="top" >“right margin”</td> | |
| 2018 | − <td valign="top" >RANGE</td> | |
| 2019 | − <td valign="top" >Min=0, Max=100</td> | |
| 2020 | − <td valign="top" >Connector</td> | |
| 2021 | − <td valign="top" >TBD</td> | |
| 2022 | − </tr> | |
| 2023 | − <tr> | |
| 2024 | − <td valign="top" >“top margin”</td> | |
| 2025 | − <td valign="top" >RANGE</td> | |
| 2026 | − <td valign="top" >Min=0, Max=100</td> | |
| 2027 | − <td valign="top" >Connector</td> | |
| 2028 | − <td valign="top" >TBD</td> | |
| 2029 | − </tr> | |
| 2030 | − <tr> | |
| 2031 | − <td valign="top" >“bottom margin”</td> | |
| 2032 | − <td valign="top" >RANGE</td> | |
| 2033 | − <td valign="top" >Min=0, Max=100</td> | |
| 2034 | − <td valign="top" >Connector</td> | |
| 2035 | − <td valign="top" >TBD</td> | |
| 2036 | − </tr> | |
| 2037 | − <tr> | |
| 2038 | − <td valign="top" >“brightness”</td> | |
| 2039 | − <td valign="top" >RANGE</td> | |
| 2040 | − <td valign="top" >Min=0, Max=100</td> | |
| 2041 | − <td valign="top" >Connector</td> | |
| 2042 | − <td valign="top" >TBD</td> | |
| 2043 | − </tr> | |
| 2044 | − <tr> | |
| 2045 | − <td valign="top" >“contrast”</td> | |
| 2046 | − <td valign="top" >RANGE</td> | |
| 2047 | − <td valign="top" >Min=0, Max=100</td> | |
| 2048 | − <td valign="top" >Connector</td> | |
| 2049 | − <td valign="top" >TBD</td> | |
| 2050 | − </tr> | |
| 2051 | − <tr> | |
| 2052 | − <td valign="top" >“flicker reduction”</td> | |
| 2053 | − <td valign="top" >RANGE</td> | |
| 2054 | − <td valign="top" >Min=0, Max=100</td> | |
| 2055 | − <td valign="top" >Connector</td> | |
| 2056 | − <td valign="top" >TBD</td> | |
| 2057 | − </tr> | |
| 2058 | − <tr> | |
| 2059 | − <td valign="top" >“overscan”</td> | |
| 2060 | − <td valign="top" >RANGE</td> | |
| 2061 | − <td valign="top" >Min=0, Max=100</td> | |
| 2062 | − <td valign="top" >Connector</td> | |
| 2063 | − <td valign="top" >TBD</td> | |
| 2064 | − </tr> | |
| 2065 | − <tr> | |
| 2066 | − <td valign="top" >“saturation”</td> | |
| 2067 | − <td valign="top" >RANGE</td> | |
| 2068 | − <td valign="top" >Min=0, Max=100</td> | |
| 2069 | − <td valign="top" >Connector</td> | |
| 2070 | − <td valign="top" >TBD</td> | |
| 2071 | − </tr> | |
| 2072 | − <tr> | |
| 2073 | − <td valign="top" >“hue”</td> | |
| 2074 | − <td valign="top" >RANGE</td> | |
| 2075 | − <td valign="top" >Min=0, Max=100</td> | |
| 2076 | − <td valign="top" >Connector</td> | |
| 2077 | − <td valign="top" >TBD</td> | |
| 2078 | − </tr> | |
| 2079 | − <tr> | |
| 2080 | − <td rowspan="2" valign="top" >Virtual GPU</td> | |
| 2081 | − <td valign="top" >“suggested X”</td> | |
| 2082 | − <td valign="top" >RANGE</td> | |
| 2083 | − <td valign="top" >Min=0, Max=0xffffffff</td> | |
| 2084 | − <td valign="top" >Connector</td> | |
| 2085 | − <td valign="top" >property to suggest an X offset for a connector</td> | |
| 2086 | − </tr> | |
| 2087 | − <tr> | |
| 2088 | − <td valign="top" >“suggested Y”</td> | |
| 2089 | − <td valign="top" >RANGE</td> | |
| 2090 | − <td valign="top" >Min=0, Max=0xffffffff</td> | |
| 2091 | − <td valign="top" >Connector</td> | |
| 2092 | − <td valign="top" >property to suggest an Y offset for a connector</td> | |
| 2093 | − </tr> | |
| 2094 | − <tr> | |
| 2095 | − <td rowspan="7" valign="top" >Optional</td> | |
| 2096 | − <td valign="top" >"aspect ratio"</td> | |
| 2097 | − <td valign="top" >ENUM</td> | |
| 2098 | − <td valign="top" >{ "None", "4:3", "16:9" }</td> | |
| 2099 | − <td valign="top" >Connector</td> | |
| 2100 | − <td valign="top" >TDB</td> | |
| 2101 | − </tr> | |
| 2102 | − <tr> | |
| 2103 | − <td valign="top" >“dirty”</td> | |
| 2104 | − <td valign="top" >ENUM | IMMUTABLE</td> | |
| 2105 | − <td valign="top" >{ "Off", "On", "Annotate" }</td> | |
| 2106 | − <td valign="top" >Connector</td> | |
| 2107 | − <td valign="top" >TBD</td> | |
| 2108 | − </tr> | |
| 2109 | − <tr> | |
| 2110 | − <td valign="top" >“DEGAMMA_LUT”</td> | |
| 2111 | − <td valign="top" >BLOB</td> | |
| 2112 | − <td valign="top" >0</td> | |
| 2113 | − <td valign="top" >CRTC</td> | |
| 2114 | − <td valign="top" >DRM property to set the degamma lookup table | |
| 2115 | − (LUT) mapping pixel data from the framebuffer before it is | |
| 2116 | − given to the transformation matrix. The data is an interpreted | |
| 2117 | − as an array of struct drm_color_lut elements. Hardware might | |
| 2118 | − choose not to use the full precision of the LUT elements nor | |
| 2119 | − use all the elements of the LUT (for example the hardware | |
| 2120 | − might choose to interpolate between LUT[0] and LUT[4]). </td> | |
| 2121 | − </tr> | |
| 2122 | − <tr> | |
| 2123 | − <td valign="top" >“DEGAMMA_LUT_SIZE”</td> | |
| 2124 | − <td valign="top" >RANGE | IMMUTABLE</td> | |
| 2125 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 2126 | − <td valign="top" >CRTC</td> | |
| 2127 | − <td valign="top" >DRM property to gives the size of the lookup | |
| 2128 | − table to be set on the DEGAMMA_LUT property (the size depends | |
| 2129 | − on the underlying hardware).</td> | |
| 2130 | − </tr> | |
| 2131 | − <tr> | |
| 2132 | − <td valign="top" >“CTM”</td> | |
| 2133 | − <td valign="top" >BLOB</td> | |
| 2134 | − <td valign="top" >0</td> | |
| 2135 | − <td valign="top" >CRTC</td> | |
| 2136 | − <td valign="top" >DRM property to set the current | |
| 2137 | − transformation matrix (CTM) apply to pixel data after the | |
| 2138 | − lookup through the degamma LUT and before the lookup through | |
| 2139 | − the gamma LUT. The data is an interpreted as a struct | |
| 2140 | − drm_color_ctm.</td> | |
| 2141 | − </tr> | |
| 2142 | − <tr> | |
| 2143 | − <td valign="top" >“GAMMA_LUT”</td> | |
| 2144 | − <td valign="top" >BLOB</td> | |
| 2145 | − <td valign="top" >0</td> | |
| 2146 | − <td valign="top" >CRTC</td> | |
| 2147 | − <td valign="top" >DRM property to set the gamma lookup table | |
| 2148 | − (LUT) mapping pixel data after to the transformation matrix to | |
| 2149 | − data sent to the connector. The data is an interpreted as an | |
| 2150 | − array of struct drm_color_lut elements. Hardware might choose | |
| 2151 | − not to use the full precision of the LUT elements nor use all | |
| 2152 | − the elements of the LUT (for example the hardware might choose | |
| 2153 | − to interpolate between LUT[0] and LUT[4]).</td> | |
| 2154 | − </tr> | |
| 2155 | − <tr> | |
| 2156 | − <td valign="top" >“GAMMA_LUT_SIZE”</td> | |
| 2157 | − <td valign="top" >RANGE | IMMUTABLE</td> | |
| 2158 | − <td valign="top" >Min=0, Max=UINT_MAX</td> | |
| 2159 | − <td valign="top" >CRTC</td> | |
| 2160 | − <td valign="top" >DRM property to gives the size of the lookup | |
| 2161 | − table to be set on the GAMMA_LUT property (the size depends on | |
| 2162 | − the underlying hardware).</td> | |
| 2163 | − </tr> | |
| 2164 | − <tr> | |
| 2165 | − <td rowspan="20" valign="top" >i915</td> | |
| 2166 | − <td rowspan="2" valign="top" >Generic</td> | |
| 2167 | − <td valign="top" >"Broadcast RGB"</td> | |
| 2168 | − <td valign="top" >ENUM</td> | |
| 2169 | − <td valign="top" >{ "Automatic", "Full", "Limited 16:235" }</td> | |
| 2170 | − <td valign="top" >Connector</td> | |
| 2171 | − <td valign="top" >When this property is set to Limited 16:235 | |
| 2172 | − and CTM is set, the hardware will be programmed with the | |
| 2173 | − result of the multiplication of CTM by the limited range | |
| 2174 | − matrix to ensure the pixels normaly in the range 0..1.0 are | |
| 2175 | − remapped to the range 16/255..235/255.</td> | |
| 2176 | − </tr> | |
| 2177 | − <tr> | |
| 2178 | − <td valign="top" >“audio”</td> | |
| 2179 | − <td valign="top" >ENUM</td> | |
| 2180 | − <td valign="top" >{ "force-dvi", "off", "auto", "on" }</td> | |
| 2181 | − <td valign="top" >Connector</td> | |
| 2182 | − <td valign="top" >TBD</td> | |
| 2183 | − </tr> | |
| 2184 | − <tr> | |
| 2185 | − <td rowspan="17" valign="top" >SDVO-TV</td> | |
| 2186 | − <td valign="top" >“mode”</td> | |
| 2187 | − <td valign="top" >ENUM</td> | |
| 2188 | − <td valign="top" >{ "NTSC_M", "NTSC_J", "NTSC_443", "PAL_B" } etc.</td> | |
| 2189 | − <td valign="top" >Connector</td> | |
| 2190 | − <td valign="top" >TBD</td> | |
| 2191 | − </tr> | |
| 2192 | − <tr> | |
| 2193 | − <td valign="top" >"left_margin"</td> | |
| 2194 | − <td valign="top" >RANGE</td> | |
| 2195 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2196 | − <td valign="top" >Connector</td> | |
| 2197 | − <td valign="top" >TBD</td> | |
| 2198 | − </tr> | |
| 2199 | − <tr> | |
| 2200 | − <td valign="top" >"right_margin"</td> | |
| 2201 | − <td valign="top" >RANGE</td> | |
| 2202 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2203 | − <td valign="top" >Connector</td> | |
| 2204 | − <td valign="top" >TBD</td> | |
| 2205 | − </tr> | |
| 2206 | − <tr> | |
| 2207 | − <td valign="top" >"top_margin"</td> | |
| 2208 | − <td valign="top" >RANGE</td> | |
| 2209 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2210 | − <td valign="top" >Connector</td> | |
| 2211 | − <td valign="top" >TBD</td> | |
| 2212 | − </tr> | |
| 2213 | − <tr> | |
| 2214 | − <td valign="top" >"bottom_margin"</td> | |
| 2215 | − <td valign="top" >RANGE</td> | |
| 2216 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2217 | − <td valign="top" >Connector</td> | |
| 2218 | − <td valign="top" >TBD</td> | |
| 2219 | − </tr> | |
| 2220 | − <tr> | |
| 2221 | − <td valign="top" >“hpos”</td> | |
| 2222 | − <td valign="top" >RANGE</td> | |
| 2223 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2224 | − <td valign="top" >Connector</td> | |
| 2225 | − <td valign="top" >TBD</td> | |
| 2226 | − </tr> | |
| 2227 | − <tr> | |
| 2228 | − <td valign="top" >“vpos”</td> | |
| 2229 | − <td valign="top" >RANGE</td> | |
| 2230 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2231 | − <td valign="top" >Connector</td> | |
| 2232 | − <td valign="top" >TBD</td> | |
| 2233 | − </tr> | |
| 2234 | − <tr> | |
| 2235 | − <td valign="top" >“contrast”</td> | |
| 2236 | − <td valign="top" >RANGE</td> | |
| 2237 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2238 | − <td valign="top" >Connector</td> | |
| 2239 | − <td valign="top" >TBD</td> | |
| 2240 | − </tr> | |
| 2241 | − <tr> | |
| 2242 | − <td valign="top" >“saturation”</td> | |
| 2243 | − <td valign="top" >RANGE</td> | |
| 2244 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2245 | − <td valign="top" >Connector</td> | |
| 2246 | − <td valign="top" >TBD</td> | |
| 2247 | − </tr> | |
| 2248 | − <tr> | |
| 2249 | − <td valign="top" >“hue”</td> | |
| 2250 | − <td valign="top" >RANGE</td> | |
| 2251 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2252 | − <td valign="top" >Connector</td> | |
| 2253 | − <td valign="top" >TBD</td> | |
| 2254 | − </tr> | |
| 2255 | − <tr> | |
| 2256 | − <td valign="top" >“sharpness”</td> | |
| 2257 | − <td valign="top" >RANGE</td> | |
| 2258 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2259 | − <td valign="top" >Connector</td> | |
| 2260 | − <td valign="top" >TBD</td> | |
| 2261 | − </tr> | |
| 2262 | − <tr> | |
| 2263 | − <td valign="top" >“flicker_filter”</td> | |
| 2264 | − <td valign="top" >RANGE</td> | |
| 2265 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2266 | − <td valign="top" >Connector</td> | |
| 2267 | − <td valign="top" >TBD</td> | |
| 2268 | − </tr> | |
| 2269 | − <tr> | |
| 2270 | − <td valign="top" >“flicker_filter_adaptive”</td> | |
| 2271 | − <td valign="top" >RANGE</td> | |
| 2272 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2273 | − <td valign="top" >Connector</td> | |
| 2274 | − <td valign="top" >TBD</td> | |
| 2275 | − </tr> | |
| 2276 | − <tr> | |
| 2277 | − <td valign="top" >“flicker_filter_2d”</td> | |
| 2278 | − <td valign="top" >RANGE</td> | |
| 2279 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2280 | − <td valign="top" >Connector</td> | |
| 2281 | − <td valign="top" >TBD</td> | |
| 2282 | − </tr> | |
| 2283 | − <tr> | |
| 2284 | − <td valign="top" >“tv_chroma_filter”</td> | |
| 2285 | − <td valign="top" >RANGE</td> | |
| 2286 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2287 | − <td valign="top" >Connector</td> | |
| 2288 | − <td valign="top" >TBD</td> | |
| 2289 | − </tr> | |
| 2290 | − <tr> | |
| 2291 | − <td valign="top" >“tv_luma_filter”</td> | |
| 2292 | − <td valign="top" >RANGE</td> | |
| 2293 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2294 | − <td valign="top" >Connector</td> | |
| 2295 | − <td valign="top" >TBD</td> | |
| 2296 | − </tr> | |
| 2297 | − <tr> | |
| 2298 | − <td valign="top" >“dot_crawl”</td> | |
| 2299 | − <td valign="top" >RANGE</td> | |
| 2300 | − <td valign="top" >Min=0, Max=1</td> | |
| 2301 | − <td valign="top" >Connector</td> | |
| 2302 | − <td valign="top" >TBD</td> | |
| 2303 | − </tr> | |
| 2304 | − <tr> | |
| 2305 | − <td valign="top" >SDVO-TV/LVDS</td> | |
| 2306 | − <td valign="top" >“brightness”</td> | |
| 2307 | − <td valign="top" >RANGE</td> | |
| 2308 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2309 | − <td valign="top" >Connector</td> | |
| 2310 | − <td valign="top" >TBD</td> | |
| 2311 | − </tr> | |
| 2312 | − <tr> | |
| 2313 | − <td rowspan="2" valign="top" >CDV gma-500</td> | |
| 2314 | − <td rowspan="2" valign="top" >Generic</td> | |
| 2315 | − <td valign="top" >"Broadcast RGB"</td> | |
| 2316 | − <td valign="top" >ENUM</td> | |
| 2317 | − <td valign="top" >{ “Full”, “Limited 16:235” }</td> | |
| 2318 | − <td valign="top" >Connector</td> | |
| 2319 | − <td valign="top" >TBD</td> | |
| 2320 | − </tr> | |
| 2321 | − <tr> | |
| 2322 | − <td valign="top" >"Broadcast RGB"</td> | |
| 2323 | − <td valign="top" >ENUM</td> | |
| 2324 | − <td valign="top" >{ “off”, “auto”, “on” }</td> | |
| 2325 | − <td valign="top" >Connector</td> | |
| 2326 | − <td valign="top" >TBD</td> | |
| 2327 | − </tr> | |
| 2328 | − <tr> | |
| 2329 | − <td rowspan="19" valign="top" >Poulsbo</td> | |
| 2330 | − <td rowspan="1" valign="top" >Generic</td> | |
| 2331 | − <td valign="top" >“backlight”</td> | |
| 2332 | − <td valign="top" >RANGE</td> | |
| 2333 | − <td valign="top" >Min=0, Max=100</td> | |
| 2334 | − <td valign="top" >Connector</td> | |
| 2335 | − <td valign="top" >TBD</td> | |
| 2336 | − </tr> | |
| 2337 | − <tr> | |
| 2338 | − <td rowspan="17" valign="top" >SDVO-TV</td> | |
| 2339 | − <td valign="top" >“mode”</td> | |
| 2340 | − <td valign="top" >ENUM</td> | |
| 2341 | − <td valign="top" >{ "NTSC_M", "NTSC_J", "NTSC_443", "PAL_B" } etc.</td> | |
| 2342 | − <td valign="top" >Connector</td> | |
| 2343 | − <td valign="top" >TBD</td> | |
| 2344 | − </tr> | |
| 2345 | − <tr> | |
| 2346 | − <td valign="top" >"left_margin"</td> | |
| 2347 | − <td valign="top" >RANGE</td> | |
| 2348 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2349 | − <td valign="top" >Connector</td> | |
| 2350 | − <td valign="top" >TBD</td> | |
| 2351 | − </tr> | |
| 2352 | − <tr> | |
| 2353 | − <td valign="top" >"right_margin"</td> | |
| 2354 | − <td valign="top" >RANGE</td> | |
| 2355 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2356 | − <td valign="top" >Connector</td> | |
| 2357 | − <td valign="top" >TBD</td> | |
| 2358 | − </tr> | |
| 2359 | − <tr> | |
| 2360 | − <td valign="top" >"top_margin"</td> | |
| 2361 | − <td valign="top" >RANGE</td> | |
| 2362 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2363 | − <td valign="top" >Connector</td> | |
| 2364 | − <td valign="top" >TBD</td> | |
| 2365 | − </tr> | |
| 2366 | − <tr> | |
| 2367 | − <td valign="top" >"bottom_margin"</td> | |
| 2368 | − <td valign="top" >RANGE</td> | |
| 2369 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2370 | − <td valign="top" >Connector</td> | |
| 2371 | − <td valign="top" >TBD</td> | |
| 2372 | − </tr> | |
| 2373 | − <tr> | |
| 2374 | − <td valign="top" >“hpos”</td> | |
| 2375 | − <td valign="top" >RANGE</td> | |
| 2376 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2377 | − <td valign="top" >Connector</td> | |
| 2378 | − <td valign="top" >TBD</td> | |
| 2379 | − </tr> | |
| 2380 | − <tr> | |
| 2381 | − <td valign="top" >“vpos”</td> | |
| 2382 | − <td valign="top" >RANGE</td> | |
| 2383 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2384 | − <td valign="top" >Connector</td> | |
| 2385 | − <td valign="top" >TBD</td> | |
| 2386 | − </tr> | |
| 2387 | − <tr> | |
| 2388 | − <td valign="top" >“contrast”</td> | |
| 2389 | − <td valign="top" >RANGE</td> | |
| 2390 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2391 | − <td valign="top" >Connector</td> | |
| 2392 | − <td valign="top" >TBD</td> | |
| 2393 | − </tr> | |
| 2394 | − <tr> | |
| 2395 | − <td valign="top" >“saturation”</td> | |
| 2396 | − <td valign="top" >RANGE</td> | |
| 2397 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2398 | − <td valign="top" >Connector</td> | |
| 2399 | − <td valign="top" >TBD</td> | |
| 2400 | − </tr> | |
| 2401 | − <tr> | |
| 2402 | − <td valign="top" >“hue”</td> | |
| 2403 | − <td valign="top" >RANGE</td> | |
| 2404 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2405 | − <td valign="top" >Connector</td> | |
| 2406 | − <td valign="top" >TBD</td> | |
| 2407 | − </tr> | |
| 2408 | − <tr> | |
| 2409 | − <td valign="top" >“sharpness”</td> | |
| 2410 | − <td valign="top" >RANGE</td> | |
| 2411 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2412 | − <td valign="top" >Connector</td> | |
| 2413 | − <td valign="top" >TBD</td> | |
| 2414 | − </tr> | |
| 2415 | − <tr> | |
| 2416 | − <td valign="top" >“flicker_filter”</td> | |
| 2417 | − <td valign="top" >RANGE</td> | |
| 2418 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2419 | − <td valign="top" >Connector</td> | |
| 2420 | − <td valign="top" >TBD</td> | |
| 2421 | − </tr> | |
| 2422 | − <tr> | |
| 2423 | − <td valign="top" >“flicker_filter_adaptive”</td> | |
| 2424 | − <td valign="top" >RANGE</td> | |
| 2425 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2426 | − <td valign="top" >Connector</td> | |
| 2427 | − <td valign="top" >TBD</td> | |
| 2428 | − </tr> | |
| 2429 | − <tr> | |
| 2430 | − <td valign="top" >“flicker_filter_2d”</td> | |
| 2431 | − <td valign="top" >RANGE</td> | |
| 2432 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2433 | − <td valign="top" >Connector</td> | |
| 2434 | − <td valign="top" >TBD</td> | |
| 2435 | − </tr> | |
| 2436 | − <tr> | |
| 2437 | − <td valign="top" >“tv_chroma_filter”</td> | |
| 2438 | − <td valign="top" >RANGE</td> | |
| 2439 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2440 | − <td valign="top" >Connector</td> | |
| 2441 | − <td valign="top" >TBD</td> | |
| 2442 | − </tr> | |
| 2443 | − <tr> | |
| 2444 | − <td valign="top" >“tv_luma_filter”</td> | |
| 2445 | − <td valign="top" >RANGE</td> | |
| 2446 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2447 | − <td valign="top" >Connector</td> | |
| 2448 | − <td valign="top" >TBD</td> | |
| 2449 | − </tr> | |
| 2450 | − <tr> | |
| 2451 | − <td valign="top" >“dot_crawl”</td> | |
| 2452 | − <td valign="top" >RANGE</td> | |
| 2453 | − <td valign="top" >Min=0, Max=1</td> | |
| 2454 | − <td valign="top" >Connector</td> | |
| 2455 | − <td valign="top" >TBD</td> | |
| 2456 | − </tr> | |
| 2457 | − <tr> | |
| 2458 | − <td valign="top" >SDVO-TV/LVDS</td> | |
| 2459 | − <td valign="top" >“brightness”</td> | |
| 2460 | − <td valign="top" >RANGE</td> | |
| 2461 | − <td valign="top" >Min=0, Max= SDVO dependent</td> | |
| 2462 | − <td valign="top" >Connector</td> | |
| 2463 | − <td valign="top" >TBD</td> | |
| 2464 | − </tr> | |
| 2465 | − <tr> | |
| 2466 | − <td rowspan="11" valign="top" >armada</td> | |
| 2467 | − <td rowspan="2" valign="top" >CRTC</td> | |
| 2468 | − <td valign="top" >"CSC_YUV"</td> | |
| 2469 | − <td valign="top" >ENUM</td> | |
| 2470 | − <td valign="top" >{ "Auto" , "CCIR601", "CCIR709" }</td> | |
| 2471 | − <td valign="top" >CRTC</td> | |
| 2472 | − <td valign="top" >TBD</td> | |
| 2473 | − </tr> | |
| 2474 | − <tr> | |
| 2475 | − <td valign="top" >"CSC_RGB"</td> | |
| 2476 | − <td valign="top" >ENUM</td> | |
| 2477 | − <td valign="top" >{ "Auto", "Computer system", "Studio" }</td> | |
| 2478 | − <td valign="top" >CRTC</td> | |
| 2479 | − <td valign="top" >TBD</td> | |
| 2480 | − </tr> | |
| 2481 | − <tr> | |
| 2482 | − <td rowspan="9" valign="top" >Overlay</td> | |
| 2483 | − <td valign="top" >"colorkey"</td> | |
| 2484 | − <td valign="top" >RANGE</td> | |
| 2485 | − <td valign="top" >Min=0, Max=0xffffff</td> | |
| 2486 | − <td valign="top" >Plane</td> | |
| 2487 | − <td valign="top" >TBD</td> | |
| 2488 | − </tr> | |
| 2489 | − <tr> | |
| 2490 | − <td valign="top" >"colorkey_min"</td> | |
| 2491 | − <td valign="top" >RANGE</td> | |
| 2492 | − <td valign="top" >Min=0, Max=0xffffff</td> | |
| 2493 | − <td valign="top" >Plane</td> | |
| 2494 | − <td valign="top" >TBD</td> | |
| 2495 | − </tr> | |
| 2496 | − <tr> | |
| 2497 | − <td valign="top" >"colorkey_max"</td> | |
| 2498 | − <td valign="top" >RANGE</td> | |
| 2499 | − <td valign="top" >Min=0, Max=0xffffff</td> | |
| 2500 | − <td valign="top" >Plane</td> | |
| 2501 | − <td valign="top" >TBD</td> | |
| 2502 | − </tr> | |
| 2503 | − <tr> | |
| 2504 | − <td valign="top" >"colorkey_val"</td> | |
| 2505 | − <td valign="top" >RANGE</td> | |
| 2506 | − <td valign="top" >Min=0, Max=0xffffff</td> | |
| 2507 | − <td valign="top" >Plane</td> | |
| 2508 | − <td valign="top" >TBD</td> | |
| 2509 | − </tr> | |
| 2510 | − <tr> | |
| 2511 | − <td valign="top" >"colorkey_alpha"</td> | |
| 2512 | − <td valign="top" >RANGE</td> | |
| 2513 | − <td valign="top" >Min=0, Max=0xffffff</td> | |
| 2514 | − <td valign="top" >Plane</td> | |
| 2515 | − <td valign="top" >TBD</td> | |
| 2516 | − </tr> | |
| 2517 | − <tr> | |
| 2518 | − <td valign="top" >"colorkey_mode"</td> | |
| 2519 | − <td valign="top" >ENUM</td> | |
| 2520 | − <td valign="top" >{ "disabled", "Y component", "U component" | |
| 2521 | − , "V component", "RGB", “R component", "G component", "B component" }</td> | |
| 2522 | − <td valign="top" >Plane</td> | |
| 2523 | − <td valign="top" >TBD</td> | |
| 2524 | − </tr> | |
| 2525 | − <tr> | |
| 2526 | − <td valign="top" >"brightness"</td> | |
| 2527 | − <td valign="top" >RANGE</td> | |
| 2528 | − <td valign="top" >Min=0, Max=256 + 255</td> | |
| 2529 | − <td valign="top" >Plane</td> | |
| 2530 | − <td valign="top" >TBD</td> | |
| 2531 | − </tr> | |
| 2532 | − <tr> | |
| 2533 | − <td valign="top" >"contrast"</td> | |
| 2534 | − <td valign="top" >RANGE</td> | |
| 2535 | − <td valign="top" >Min=0, Max=0x7fff</td> | |
| 2536 | − <td valign="top" >Plane</td> | |
| 2537 | − <td valign="top" >TBD</td> | |
| 2538 | − </tr> | |
| 2539 | − <tr> | |
| 2540 | − <td valign="top" >"saturation"</td> | |
| 2541 | − <td valign="top" >RANGE</td> | |
| 2542 | − <td valign="top" >Min=0, Max=0x7fff</td> | |
| 2543 | − <td valign="top" >Plane</td> | |
| 2544 | − <td valign="top" >TBD</td> | |
| 2545 | − </tr> | |
| 2546 | − <tr> | |
| 2547 | − <td rowspan="2" valign="top" >exynos</td> | |
| 2548 | − <td valign="top" >CRTC</td> | |
| 2549 | − <td valign="top" >“mode”</td> | |
| 2550 | − <td valign="top" >ENUM</td> | |
| 2551 | − <td valign="top" >{ "normal", "blank" }</td> | |
| 2552 | − <td valign="top" >CRTC</td> | |
| 2553 | − <td valign="top" >TBD</td> | |
| 2554 | − </tr> | |
| 2555 | − <tr> | |
| 2556 | − <td valign="top" >Overlay</td> | |
| 2557 | − <td valign="top" >“zpos”</td> | |
| 2558 | − <td valign="top" >RANGE</td> | |
| 2559 | − <td valign="top" >Min=0, Max=MAX_PLANE-1</td> | |
| 2560 | − <td valign="top" >Plane</td> | |
| 2561 | − <td valign="top" >TBD</td> | |
| 2562 | − </tr> | |
| 2563 | − <tr> | |
| 2564 | − <td rowspan="2" valign="top" >i2c/ch7006_drv</td> | |
| 2565 | − <td valign="top" >Generic</td> | |
| 2566 | − <td valign="top" >“scale”</td> | |
| 2567 | − <td valign="top" >RANGE</td> | |
| 2568 | − <td valign="top" >Min=0, Max=2</td> | |
| 2569 | − <td valign="top" >Connector</td> | |
| 2570 | − <td valign="top" >TBD</td> | |
| 2571 | − </tr> | |
| 2572 | − <tr> | |
| 2573 | − <td rowspan="1" valign="top" >TV</td> | |
| 2574 | − <td valign="top" >“mode”</td> | |
| 2575 | − <td valign="top" >ENUM</td> | |
| 2576 | − <td valign="top" >{ "PAL", "PAL-M","PAL-N"}, ”PAL-Nc" | |
| 2577 | − , "PAL-60", "NTSC-M", "NTSC-J" }</td> | |
| 2578 | − <td valign="top" >Connector</td> | |
| 2579 | − <td valign="top" >TBD</td> | |
| 2580 | − </tr> | |
| 2581 | − <tr> | |
| 2582 | − <td rowspan="15" valign="top" >nouveau</td> | |
| 2583 | − <td rowspan="6" valign="top" >NV10 Overlay</td> | |
| 2584 | − <td valign="top" >"colorkey"</td> | |
| 2585 | − <td valign="top" >RANGE</td> | |
| 2586 | − <td valign="top" >Min=0, Max=0x01ffffff</td> | |
| 2587 | − <td valign="top" >Plane</td> | |
| 2588 | − <td valign="top" >TBD</td> | |
| 2589 | − </tr> | |
| 2590 | − <tr> | |
| 2591 | − <td valign="top" >“contrast”</td> | |
| 2592 | − <td valign="top" >RANGE</td> | |
| 2593 | − <td valign="top" >Min=0, Max=8192-1</td> | |
| 2594 | − <td valign="top" >Plane</td> | |
| 2595 | − <td valign="top" >TBD</td> | |
| 2596 | − </tr> | |
| 2597 | − <tr> | |
| 2598 | − <td valign="top" >“brightness”</td> | |
| 2599 | − <td valign="top" >RANGE</td> | |
| 2600 | − <td valign="top" >Min=0, Max=1024</td> | |
| 2601 | − <td valign="top" >Plane</td> | |
| 2602 | − <td valign="top" >TBD</td> | |
| 2603 | − </tr> | |
| 2604 | − <tr> | |
| 2605 | − <td valign="top" >“hue”</td> | |
| 2606 | − <td valign="top" >RANGE</td> | |
| 2607 | − <td valign="top" >Min=0, Max=359</td> | |
| 2608 | − <td valign="top" >Plane</td> | |
| 2609 | − <td valign="top" >TBD</td> | |
| 2610 | − </tr> | |
| 2611 | − <tr> | |
| 2612 | − <td valign="top" >“saturation”</td> | |
| 2613 | − <td valign="top" >RANGE</td> | |
| 2614 | − <td valign="top" >Min=0, Max=8192-1</td> | |
| 2615 | − <td valign="top" >Plane</td> | |
| 2616 | − <td valign="top" >TBD</td> | |
| 2617 | − </tr> | |
| 2618 | − <tr> | |
| 2619 | − <td valign="top" >“iturbt_709”</td> | |
| 2620 | − <td valign="top" >RANGE</td> | |
| 2621 | − <td valign="top" >Min=0, Max=1</td> | |
| 2622 | − <td valign="top" >Plane</td> | |
| 2623 | − <td valign="top" >TBD</td> | |
| 2624 | − </tr> | |
| 2625 | − <tr> | |
| 2626 | − <td rowspan="2" valign="top" >Nv04 Overlay</td> | |
| 2627 | − <td valign="top" >“colorkey”</td> | |
| 2628 | − <td valign="top" >RANGE</td> | |
| 2629 | − <td valign="top" >Min=0, Max=0x01ffffff</td> | |
| 2630 | − <td valign="top" >Plane</td> | |
| 2631 | − <td valign="top" >TBD</td> | |
| 2632 | − </tr> | |
| 2633 | − <tr> | |
| 2634 | − <td valign="top" >“brightness”</td> | |
| 2635 | − <td valign="top" >RANGE</td> | |
| 2636 | − <td valign="top" >Min=0, Max=1024</td> | |
| 2637 | − <td valign="top" >Plane</td> | |
| 2638 | − <td valign="top" >TBD</td> | |
| 2639 | − </tr> | |
| 2640 | − <tr> | |
| 2641 | − <td rowspan="7" valign="top" >Display</td> | |
| 2642 | − <td valign="top" >“dithering mode”</td> | |
| 2643 | − <td valign="top" >ENUM</td> | |
| 2644 | − <td valign="top" >{ "auto", "off", "on" }</td> | |
| 2645 | − <td valign="top" >Connector</td> | |
| 2646 | − <td valign="top" >TBD</td> | |
| 2647 | − </tr> | |
| 2648 | − <tr> | |
| 2649 | − <td valign="top" >“dithering depth”</td> | |
| 2650 | − <td valign="top" >ENUM</td> | |
| 2651 | − <td valign="top" >{ "auto", "off", "on", "static 2x2", "dynamic 2x2", "temporal" }</td> | |
| 2652 | − <td valign="top" >Connector</td> | |
| 2653 | − <td valign="top" >TBD</td> | |
| 2654 | − </tr> | |
| 2655 | − <tr> | |
| 2656 | − <td valign="top" >“underscan”</td> | |
| 2657 | − <td valign="top" >ENUM</td> | |
| 2658 | − <td valign="top" >{ "auto", "6 bpc", "8 bpc" }</td> | |
| 2659 | − <td valign="top" >Connector</td> | |
| 2660 | − <td valign="top" >TBD</td> | |
| 2661 | − </tr> | |
| 2662 | − <tr> | |
| 2663 | − <td valign="top" >“underscan hborder”</td> | |
| 2664 | − <td valign="top" >RANGE</td> | |
| 2665 | − <td valign="top" >Min=0, Max=128</td> | |
| 2666 | − <td valign="top" >Connector</td> | |
| 2667 | − <td valign="top" >TBD</td> | |
| 2668 | − </tr> | |
| 2669 | − <tr> | |
| 2670 | − <td valign="top" >“underscan vborder”</td> | |
| 2671 | − <td valign="top" >RANGE</td> | |
| 2672 | − <td valign="top" >Min=0, Max=128</td> | |
| 2673 | − <td valign="top" >Connector</td> | |
| 2674 | − <td valign="top" >TBD</td> | |
| 2675 | − </tr> | |
| 2676 | − <tr> | |
| 2677 | − <td valign="top" >“vibrant hue”</td> | |
| 2678 | − <td valign="top" >RANGE</td> | |
| 2679 | − <td valign="top" >Min=0, Max=180</td> | |
| 2680 | − <td valign="top" >Connector</td> | |
| 2681 | − <td valign="top" >TBD</td> | |
| 2682 | − </tr> | |
| 2683 | − <tr> | |
| 2684 | − <td valign="top" >“color vibrance”</td> | |
| 2685 | − <td valign="top" >RANGE</td> | |
| 2686 | − <td valign="top" >Min=0, Max=200</td> | |
| 2687 | − <td valign="top" >Connector</td> | |
| 2688 | − <td valign="top" >TBD</td> | |
| 2689 | − </tr> | |
| 2690 | − <tr> | |
| 2691 | − <td valign="top" >omap</td> | |
| 2692 | − <td valign="top" >Generic</td> | |
| 2693 | − <td valign="top" >“zorder”</td> | |
| 2694 | − <td valign="top" >RANGE</td> | |
| 2695 | − <td valign="top" >Min=0, Max=3</td> | |
| 2696 | − <td valign="top" >CRTC, Plane</td> | |
| 2697 | − <td valign="top" >TBD</td> | |
| 2698 | − </tr> | |
| 2699 | − <tr> | |
| 2700 | − <td valign="top" >qxl</td> | |
| 2701 | − <td valign="top" >Generic</td> | |
| 2702 | − <td valign="top" >“hotplug_mode_update"</td> | |
| 2703 | − <td valign="top" >RANGE</td> | |
| 2704 | − <td valign="top" >Min=0, Max=1</td> | |
| 2705 | − <td valign="top" >Connector</td> | |
| 2706 | − <td valign="top" >TBD</td> | |
| 2707 | − </tr> | |
| 2708 | − <tr> | |
| 2709 | − <td rowspan="9" valign="top" >radeon</td> | |
| 2710 | − <td valign="top" >DVI-I</td> | |
| 2711 | − <td valign="top" >“coherent”</td> | |
| 2712 | − <td valign="top" >RANGE</td> | |
| 2713 | − <td valign="top" >Min=0, Max=1</td> | |
| 2714 | − <td valign="top" >Connector</td> | |
| 2715 | − <td valign="top" >TBD</td> | |
| 2716 | − </tr> | |
| 2717 | − <tr> | |
| 2718 | − <td valign="top" >DAC enable load detect</td> | |
| 2719 | − <td valign="top" >“load detection”</td> | |
| 2720 | − <td valign="top" >RANGE</td> | |
| 2721 | − <td valign="top" >Min=0, Max=1</td> | |
| 2722 | − <td valign="top" >Connector</td> | |
| 2723 | − <td valign="top" >TBD</td> | |
| 2724 | − </tr> | |
| 2725 | − <tr> | |
| 2726 | − <td valign="top" >TV Standard</td> | |
| 2727 | − <td valign="top" >"tv standard"</td> | |
| 2728 | − <td valign="top" >ENUM</td> | |
| 2729 | − <td valign="top" >{ "ntsc", "pal", "pal-m", "pal-60", "ntsc-j" | |
| 2730 | − , "scart-pal", "pal-cn", "secam" }</td> | |
| 2731 | − <td valign="top" >Connector</td> | |
| 2732 | − <td valign="top" >TBD</td> | |
| 2733 | − </tr> | |
| 2734 | − <tr> | |
| 2735 | − <td valign="top" >legacy TMDS PLL detect</td> | |
| 2736 | − <td valign="top" >"tmds_pll"</td> | |
| 2737 | − <td valign="top" >ENUM</td> | |
| 2738 | − <td valign="top" >{ "driver", "bios" }</td> | |
| 2739 | − <td valign="top" >-</td> | |
| 2740 | − <td valign="top" >TBD</td> | |
| 2741 | − </tr> | |
| 2742 | − <tr> | |
| 2743 | − <td rowspan="3" valign="top" >Underscan</td> | |
| 2744 | − <td valign="top" >"underscan"</td> | |
| 2745 | − <td valign="top" >ENUM</td> | |
| 2746 | − <td valign="top" >{ "off", "on", "auto" }</td> | |
| 2747 | − <td valign="top" >Connector</td> | |
| 2748 | − <td valign="top" >TBD</td> | |
| 2749 | − </tr> | |
| 2750 | − <tr> | |
| 2751 | − <td valign="top" >"underscan hborder"</td> | |
| 2752 | − <td valign="top" >RANGE</td> | |
| 2753 | − <td valign="top" >Min=0, Max=128</td> | |
| 2754 | − <td valign="top" >Connector</td> | |
| 2755 | − <td valign="top" >TBD</td> | |
| 2756 | − </tr> | |
| 2757 | − <tr> | |
| 2758 | − <td valign="top" >"underscan vborder"</td> | |
| 2759 | − <td valign="top" >RANGE</td> | |
| 2760 | − <td valign="top" >Min=0, Max=128</td> | |
| 2761 | − <td valign="top" >Connector</td> | |
| 2762 | − <td valign="top" >TBD</td> | |
| 2763 | − </tr> | |
| 2764 | − <tr> | |
| 2765 | − <td valign="top" >Audio</td> | |
| 2766 | − <td valign="top" >“audio”</td> | |
| 2767 | − <td valign="top" >ENUM</td> | |
| 2768 | − <td valign="top" >{ "off", "on", "auto" }</td> | |
| 2769 | − <td valign="top" >Connector</td> | |
| 2770 | − <td valign="top" >TBD</td> | |
| 2771 | − </tr> | |
| 2772 | − <tr> | |
| 2773 | − <td valign="top" >FMT Dithering</td> | |
| 2774 | − <td valign="top" >“dither”</td> | |
| 2775 | − <td valign="top" >ENUM</td> | |
| 2776 | − <td valign="top" >{ "off", "on" }</td> | |
| 2777 | − <td valign="top" >Connector</td> | |
| 2778 | − <td valign="top" >TBD</td> | |
| 2779 | − </tr> | |
| 2780 | − <tr> | |
| 2781 | − <td rowspan="3" valign="top" >rcar-du</td> | |
| 2782 | − <td rowspan="3" valign="top" >Generic</td> | |
| 2783 | − <td valign="top" >"alpha"</td> | |
| 2784 | − <td valign="top" >RANGE</td> | |
| 2785 | − <td valign="top" >Min=0, Max=255</td> | |
| 2786 | − <td valign="top" >Plane</td> | |
| 2787 | − <td valign="top" >TBD</td> | |
| 2788 | − </tr> | |
| 2789 | − <tr> | |
| 2790 | − <td valign="top" >"colorkey"</td> | |
| 2791 | − <td valign="top" >RANGE</td> | |
| 2792 | − <td valign="top" >Min=0, Max=0x01ffffff</td> | |
| 2793 | − <td valign="top" >Plane</td> | |
| 2794 | − <td valign="top" >TBD</td> | |
| 2795 | − </tr> | |
| 2796 | − <tr> | |
| 2797 | − <td valign="top" >"zpos"</td> | |
| 2798 | − <td valign="top" >RANGE</td> | |
| 2799 | − <td valign="top" >Min=1, Max=7</td> | |
| 2800 | − <td valign="top" >Plane</td> | |
| 2801 | − <td valign="top" >TBD</td> | |
| 2802 | − </tr> | |
| 2803 | − </tbody> | |
| 2804 | − </table> | |
| 2805 | − </sect2> | |
| 2806 | − </sect1> | |
| 2807 | − | |
| 2808 | − <!-- Internals: vertical blanking --> | |
| 2809 | − | |
| 2810 | − <sect1 id="drm-vertical-blank"> | |
| 2811 | − <title>Vertical Blanking</title> | |
| 2812 | − <para> | |
| 2813 | − Vertical blanking plays a major role in graphics rendering. To achieve | |
| 2814 | − tear-free display, users must synchronize page flips and/or rendering to | |
| 2815 | − vertical blanking. The DRM API offers ioctls to perform page flips | |
| 2816 | − synchronized to vertical blanking and wait for vertical blanking. | |
| 2817 | − </para> | |
| 2818 | − <para> | |
| 2819 | − The DRM core handles most of the vertical blanking management logic, which | |
| 2820 | − involves filtering out spurious interrupts, keeping race-free blanking | |
| 2821 | − counters, coping with counter wrap-around and resets and keeping use | |
| 2822 | − counts. It relies on the driver to generate vertical blanking interrupts | |
| 2823 | − and optionally provide a hardware vertical blanking counter. Drivers must | |
| 2824 | − implement the following operations. | |
| 2825 | − </para> | |
| 2826 | − <itemizedlist> | |
| 2827 | − <listitem> | |
| 2828 | − <synopsis>int (*enable_vblank) (struct drm_device *dev, int crtc); | |
| 2829 | −void (*disable_vblank) (struct drm_device *dev, int crtc);</synopsis> | |
| 2830 | − <para> | |
| 2831 | − Enable or disable vertical blanking interrupts for the given CRTC. | |
| 2832 | − </para> | |
| 2833 | − </listitem> | |
| 2834 | − <listitem> | |
| 2835 | − <synopsis>u32 (*get_vblank_counter) (struct drm_device *dev, int crtc);</synopsis> | |
| 2836 | − <para> | |
| 2837 | − Retrieve the value of the vertical blanking counter for the given | |
| 2838 | − CRTC. If the hardware maintains a vertical blanking counter its value | |
| 2839 | − should be returned. Otherwise drivers can use the | |
| 2840 | − <function>drm_vblank_count</function> helper function to handle this | |
| 2841 | − operation. | |
| 2842 | − </para> | |
| 2843 | − </listitem> | |
| 2844 | − </itemizedlist> | |
| 2845 | − <para> | |
| 2846 | − Drivers must initialize the vertical blanking handling core with a call to | |
| 2847 | − <function>drm_vblank_init</function> in their | |
| 2848 | − <methodname>load</methodname> operation. The function will set the struct | |
| 2849 | − <structname>drm_device</structname> | |
| 2850 | − <structfield>vblank_disable_allowed</structfield> field to 0. This will | |
| 2851 | − keep vertical blanking interrupts enabled permanently until the first mode | |
| 2852 | − set operation, where <structfield>vblank_disable_allowed</structfield> is | |
| 2853 | − set to 1. The reason behind this is not clear. Drivers can set the field | |
| 2854 | − to 1 after <function>calling drm_vblank_init</function> to make vertical | |
| 2855 | − blanking interrupts dynamically managed from the beginning. | |
| 2856 | − </para> | |
| 2857 | − <para> | |
| 2858 | − Vertical blanking interrupts can be enabled by the DRM core or by drivers | |
| 2859 | − themselves (for instance to handle page flipping operations). The DRM core | |
| 2860 | − maintains a vertical blanking use count to ensure that the interrupts are | |
| 2861 | − not disabled while a user still needs them. To increment the use count, | |
| 2862 | − drivers call <function>drm_vblank_get</function>. Upon return vertical | |
| 2863 | − blanking interrupts are guaranteed to be enabled. | |
| 2864 | − </para> | |
| 2865 | − <para> | |
| 2866 | − To decrement the use count drivers call | |
| 2867 | − <function>drm_vblank_put</function>. Only when the use count drops to zero | |
| 2868 | − will the DRM core disable the vertical blanking interrupts after a delay | |
| 2869 | − by scheduling a timer. The delay is accessible through the vblankoffdelay | |
| 2870 | − module parameter or the <varname>drm_vblank_offdelay</varname> global | |
| 2871 | − variable and expressed in milliseconds. Its default value is 5000 ms. | |
| 2872 | − Zero means never disable, and a negative value means disable immediately. | |
| 2873 | − Drivers may override the behaviour by setting the | |
| 2874 | − <structname>drm_device</structname> | |
| 2875 | − <structfield>vblank_disable_immediate</structfield> flag, which when set | |
| 2876 | − causes vblank interrupts to be disabled immediately regardless of the | |
| 2877 | − drm_vblank_offdelay value. The flag should only be set if there's a | |
| 2878 | − properly working hardware vblank counter present. | |
| 2879 | − </para> | |
| 2880 | − <para> | |
| 2881 | − When a vertical blanking interrupt occurs drivers only need to call the | |
| 2882 | − <function>drm_handle_vblank</function> function to account for the | |
| 2883 | − interrupt. | |
| 2884 | − </para> | |
| 2885 | − <para> | |
| 2886 | − Resources allocated by <function>drm_vblank_init</function> must be freed | |
| 2887 | − with a call to <function>drm_vblank_cleanup</function> in the driver | |
| 2888 | − <methodname>unload</methodname> operation handler. | |
| 2889 | − </para> | |
| 2890 | − <sect2> | |
| 2891 | − <title>Vertical Blanking and Interrupt Handling Functions Reference</title> | |
| 2892 | −!Edrivers/gpu/drm/drm_irq.c | |
| 2893 | −!Finclude/drm/drmP.h drm_crtc_vblank_waitqueue | |
| 2894 | − </sect2> | |
| 2895 | − </sect1> | |
| 2896 | − | |
| 2897 | − <!-- Internals: open/close, file operations and ioctls --> | |
| 2898 | − | |
| 2899 | − <sect1> | |
| 2900 | − <title>Open/Close, File Operations and IOCTLs</title> | |
| 2901 | − <sect2> | |
| 2902 | − <title>Open and Close</title> | |
| 2903 | − <synopsis>int (*firstopen) (struct drm_device *); | |
| 2904 | −void (*lastclose) (struct drm_device *); | |
| 2905 | −int (*open) (struct drm_device *, struct drm_file *); | |
| 2906 | −void (*preclose) (struct drm_device *, struct drm_file *); | |
| 2907 | −void (*postclose) (struct drm_device *, struct drm_file *);</synopsis> | |
| 2908 | − <abstract>Open and close handlers. None of those methods are mandatory. | |
| 2909 | − </abstract> | |
| 2910 | − <para> | |
| 2911 | − The <methodname>firstopen</methodname> method is called by the DRM core | |
| 2912 | − for legacy UMS (User Mode Setting) drivers only when an application | |
| 2913 | − opens a device that has no other opened file handle. UMS drivers can | |
| 2914 | − implement it to acquire device resources. KMS drivers can't use the | |
| 2915 | − method and must acquire resources in the <methodname>load</methodname> | |
| 2916 | − method instead. | |
| 2917 | − </para> | |
| 2918 | − <para> | |
| 2919 | − Similarly the <methodname>lastclose</methodname> method is called when | |
| 2920 | − the last application holding a file handle opened on the device closes | |
| 2921 | − it, for both UMS and KMS drivers. Additionally, the method is also | |
| 2922 | − called at module unload time or, for hot-pluggable devices, when the | |
| 2923 | − device is unplugged. The <methodname>firstopen</methodname> and | |
| 2924 | − <methodname>lastclose</methodname> calls can thus be unbalanced. | |
| 2925 | − </para> | |
| 2926 | − <para> | |
| 2927 | − The <methodname>open</methodname> method is called every time the device | |
| 2928 | − is opened by an application. Drivers can allocate per-file private data | |
| 2929 | − in this method and store them in the struct | |
| 2930 | − <structname>drm_file</structname> <structfield>driver_priv</structfield> | |
| 2931 | − field. Note that the <methodname>open</methodname> method is called | |
| 2932 | − before <methodname>firstopen</methodname>. | |
| 2933 | − </para> | |
| 2934 | − <para> | |
| 2935 | − The close operation is split into <methodname>preclose</methodname> and | |
| 2936 | − <methodname>postclose</methodname> methods. Drivers must stop and | |
| 2937 | − cleanup all per-file operations in the <methodname>preclose</methodname> | |
| 2938 | − method. For instance pending vertical blanking and page flip events must | |
| 2939 | − be cancelled. No per-file operation is allowed on the file handle after | |
| 2940 | − returning from the <methodname>preclose</methodname> method. | |
| 2941 | − </para> | |
| 2942 | − <para> | |
| 2943 | − Finally the <methodname>postclose</methodname> method is called as the | |
| 2944 | − last step of the close operation, right before calling the | |
| 2945 | − <methodname>lastclose</methodname> method if no other open file handle | |
| 2946 | − exists for the device. Drivers that have allocated per-file private data | |
| 2947 | − in the <methodname>open</methodname> method should free it here. | |
| 2948 | − </para> | |
| 2949 | − <para> | |
| 2950 | − The <methodname>lastclose</methodname> method should restore CRTC and | |
| 2951 | − plane properties to default value, so that a subsequent open of the | |
| 2952 | − device will not inherit state from the previous user. It can also be | |
| 2953 | − used to execute delayed power switching state changes, e.g. in | |
| 2954 | − conjunction with the vga_switcheroo infrastructure (see | |
| 2955 | − <xref linkend="vga_switcheroo"/>). Beyond that KMS drivers should not | |
| 2956 | − do any further cleanup. Only legacy UMS drivers might need to clean up | |
| 2957 | − device state so that the vga console or an independent fbdev driver | |
| 2958 | − could take over. | |
| 2959 | − </para> | |
| 2960 | − </sect2> | |
| 2961 | − <sect2> | |
| 2962 | − <title>File Operations</title> | |
| 2963 | −!Pdrivers/gpu/drm/drm_fops.c file operations | |
| 2964 | −!Edrivers/gpu/drm/drm_fops.c | |
| 2965 | − </sect2> | |
| 2966 | − <sect2> | |
| 2967 | − <title>IOCTLs</title> | |
| 2968 | − <synopsis>struct drm_ioctl_desc *ioctls; | |
| 2969 | −int num_ioctls;</synopsis> | |
| 2970 | − <abstract>Driver-specific ioctls descriptors table.</abstract> | |
| 2971 | − <para> | |
| 2972 | − Driver-specific ioctls numbers start at DRM_COMMAND_BASE. The ioctls | |
| 2973 | − descriptors table is indexed by the ioctl number offset from the base | |
| 2974 | − value. Drivers can use the DRM_IOCTL_DEF_DRV() macro to initialize the | |
| 2975 | − table entries. | |
| 2976 | − </para> | |
| 2977 | − <para> | |
| 2978 | − <programlisting>DRM_IOCTL_DEF_DRV(ioctl, func, flags)</programlisting> | |
| 2979 | − <para> | |
| 2980 | − <parameter>ioctl</parameter> is the ioctl name. Drivers must define | |
| 2981 | − the DRM_##ioctl and DRM_IOCTL_##ioctl macros to the ioctl number | |
| 2982 | − offset from DRM_COMMAND_BASE and the ioctl number respectively. The | |
| 2983 | − first macro is private to the device while the second must be exposed | |
| 2984 | − to userspace in a public header. | |
| 2985 | − </para> | |
| 2986 | − <para> | |
| 2987 | − <parameter>func</parameter> is a pointer to the ioctl handler function | |
| 2988 | − compatible with the <type>drm_ioctl_t</type> type. | |
| 2989 | − <programlisting>typedef int drm_ioctl_t(struct drm_device *dev, void *data, | |
| 2990 | − struct drm_file *file_priv);</programlisting> | |
| 2991 | − </para> | |
| 2992 | − <para> | |
| 2993 | − <parameter>flags</parameter> is a bitmask combination of the following | |
| 2994 | − values. It restricts how the ioctl is allowed to be called. | |
| 2995 | − <itemizedlist> | |
| 2996 | − <listitem><para> | |
| 2997 | − DRM_AUTH - Only authenticated callers allowed | |
| 2998 | − </para></listitem> | |
| 2999 | − <listitem><para> | |
| 3000 | − DRM_MASTER - The ioctl can only be called on the master file | |
| 3001 | − handle | |
| 3002 | − </para></listitem> | |
| 3003 | − <listitem><para> | |
| 3004 | − DRM_ROOT_ONLY - Only callers with the SYSADMIN capability allowed | |
| 3005 | − </para></listitem> | |
| 3006 | − <listitem><para> | |
| 3007 | − DRM_CONTROL_ALLOW - The ioctl can only be called on a control | |
| 3008 | − device | |
| 3009 | − </para></listitem> | |
| 3010 | − <listitem><para> | |
| 3011 | − DRM_UNLOCKED - The ioctl handler will be called without locking | |
| 3012 | − the DRM global mutex. This is the enforced default for kms drivers | |
| 3013 | − (i.e. using the DRIVER_MODESET flag) and hence shouldn't be used | |
| 3014 | − any more for new drivers. | |
| 3015 | − </para></listitem> | |
| 3016 | − </itemizedlist> | |
| 3017 | − </para> | |
| 3018 | − </para> | |
| 3019 | −!Edrivers/gpu/drm/drm_ioctl.c | |
| 3020 | − </sect2> | |
| 3021 | − </sect1> | |
| 3022 | − <sect1> | |
| 3023 | − <title>Legacy Support Code</title> | |
| 3024 | − <para> | |
| 3025 | − The section very briefly covers some of the old legacy support code which | |
| 3026 | − is only used by old DRM drivers which have done a so-called shadow-attach | |
| 3027 | − to the underlying device instead of registering as a real driver. This | |
| 3028 | − also includes some of the old generic buffer management and command | |
| 3029 | − submission code. Do not use any of this in new and modern drivers. | |
| 3030 | − </para> | |
| 3031 | − | |
| 3032 | − <sect2> | |
| 3033 | − <title>Legacy Suspend/Resume</title> | |
| 3034 | − <para> | |
| 3035 | − The DRM core provides some suspend/resume code, but drivers wanting full | |
| 3036 | − suspend/resume support should provide save() and restore() functions. | |
| 3037 | − These are called at suspend, hibernate, or resume time, and should perform | |
| 3038 | − any state save or restore required by your device across suspend or | |
| 3039 | − hibernate states. | |
| 3040 | − </para> | |
| 3041 | − <synopsis>int (*suspend) (struct drm_device *, pm_message_t state); | |
| 3042 | − int (*resume) (struct drm_device *);</synopsis> | |
| 3043 | − <para> | |
| 3044 | − Those are legacy suspend and resume methods which | |
| 3045 | − <emphasis>only</emphasis> work with the legacy shadow-attach driver | |
| 3046 | − registration functions. New driver should use the power management | |
| 3047 | − interface provided by their bus type (usually through | |
| 3048 | − the struct <structname>device_driver</structname> dev_pm_ops) and set | |
| 3049 | − these methods to NULL. | |
| 3050 | − </para> | |
| 3051 | − </sect2> | |
| 3052 | − | |
| 3053 | − <sect2> | |
| 3054 | − <title>Legacy DMA Services</title> | |
| 3055 | − <para> | |
| 3056 | − This should cover how DMA mapping etc. is supported by the core. | |
| 3057 | − These functions are deprecated and should not be used. | |
| 3058 | − </para> | |
| 3059 | − </sect2> | |
| 3060 | − </sect1> | |
| 3061 | − </chapter> | |
| 3062 | − | |
| 3063 | −<!-- TODO | |
| 3064 | − | |
| 3065 | −- Add a glossary | |
| 3066 | −- Document the struct_mutex catch-all lock | |
| 3067 | −- Document connector properties | |
| 3068 | − | |
| 3069 | −- Why is the load method optional? | |
| 3070 | −- What are drivers supposed to set the initial display state to, and how? | |
| 3071 | − Connector's DPMS states are not initialized and are thus equal to | |
| 3072 | − DRM_MODE_DPMS_ON. The fbcon compatibility layer calls | |
| 3073 | − drm_helper_disable_unused_functions(), which disables unused encoders and | |
| 3074 | − CRTCs, but doesn't touch the connectors' DPMS state, and | |
| 3075 | − drm_helper_connector_dpms() in reaction to fbdev blanking events. Do drivers | |
| 3076 | − that don't implement (or just don't use) fbcon compatibility need to call | |
| 3077 | − those functions themselves? | |
| 3078 | −- KMS drivers must call drm_vblank_pre_modeset() and drm_vblank_post_modeset() | |
| 3079 | − around mode setting. Should this be done in the DRM core? | |
| 3080 | −- vblank_disable_allowed is set to 1 in the first drm_vblank_post_modeset() | |
| 3081 | − call and never set back to 0. It seems to be safe to permanently set it to 1 | |
| 3082 | − in drm_vblank_init() for KMS driver, and it might be safe for UMS drivers as | |
| 3083 | − well. This should be investigated. | |
| 3084 | −- crtc and connector .save and .restore operations are only used internally in | |
| 3085 | − drivers, should they be removed from the core? | |
| 3086 | −- encoder mid-layer .save and .restore operations are only used internally in | |
| 3087 | − drivers, should they be removed from the core? | |
| 3088 | −- encoder mid-layer .detect operation is only used internally in drivers, | |
| 3089 | − should it be removed from the core? | |
| 3090 | −--> | |
| 3091 | − | |
| 3092 | − <!-- External interfaces --> | |
| 3093 | − | |
| 3094 | − <chapter id="drmExternals"> | |
| 3095 | − <title>Userland interfaces</title> | |
| 3096 | − <para> | |
| 3097 | − The DRM core exports several interfaces to applications, | |
| 3098 | − generally intended to be used through corresponding libdrm | |
| 3099 | − wrapper functions. In addition, drivers export device-specific | |
| 3100 | − interfaces for use by userspace drivers & device-aware | |
| 3101 | − applications through ioctls and sysfs files. | |
| 3102 | − </para> | |
| 3103 | − <para> | |
| 3104 | − External interfaces include: memory mapping, context management, | |
| 3105 | − DMA operations, AGP management, vblank control, fence | |
| 3106 | − management, memory management, and output management. | |
| 3107 | − </para> | |
| 3108 | − <para> | |
| 3109 | − Cover generic ioctls and sysfs layout here. We only need high-level | |
| 3110 | − info, since man pages should cover the rest. | |
| 3111 | − </para> | |
| 3112 | − | |
| 3113 | − <!-- External: render nodes --> | |
| 3114 | − | |
| 3115 | − <sect1> | |
| 3116 | − <title>Render nodes</title> | |
| 3117 | − <para> | |
| 3118 | − DRM core provides multiple character-devices for user-space to use. | |
| 3119 | − Depending on which device is opened, user-space can perform a different | |
| 3120 | − set of operations (mainly ioctls). The primary node is always created | |
| 3121 | − and called card<num>. Additionally, a currently | |
| 3122 | − unused control node, called controlD<num> is also | |
| 3123 | − created. The primary node provides all legacy operations and | |
| 3124 | − historically was the only interface used by userspace. With KMS, the | |
| 3125 | − control node was introduced. However, the planned KMS control interface | |
| 3126 | − has never been written and so the control node stays unused to date. | |
| 3127 | − </para> | |
| 3128 | − <para> | |
| 3129 | − With the increased use of offscreen renderers and GPGPU applications, | |
| 3130 | − clients no longer require running compositors or graphics servers to | |
| 3131 | − make use of a GPU. But the DRM API required unprivileged clients to | |
| 3132 | − authenticate to a DRM-Master prior to getting GPU access. To avoid this | |
| 3133 | − step and to grant clients GPU access without authenticating, render | |
| 3134 | − nodes were introduced. Render nodes solely serve render clients, that | |
| 3135 | − is, no modesetting or privileged ioctls can be issued on render nodes. | |
| 3136 | − Only non-global rendering commands are allowed. If a driver supports | |
| 3137 | − render nodes, it must advertise it via the DRIVER_RENDER | |
| 3138 | − DRM driver capability. If not supported, the primary node must be used | |
| 3139 | − for render clients together with the legacy drmAuth authentication | |
| 3140 | − procedure. | |
| 3141 | − </para> | |
| 3142 | − <para> | |
| 3143 | − If a driver advertises render node support, DRM core will create a | |
| 3144 | − separate render node called renderD<num>. There will | |
| 3145 | − be one render node per device. No ioctls except PRIME-related ioctls | |
| 3146 | − will be allowed on this node. Especially GEM_OPEN will be | |
| 3147 | − explicitly prohibited. Render nodes are designed to avoid the | |
| 3148 | − buffer-leaks, which occur if clients guess the flink names or mmap | |
| 3149 | − offsets on the legacy interface. Additionally to this basic interface, | |
| 3150 | − drivers must mark their driver-dependent render-only ioctls as | |
| 3151 | − DRM_RENDER_ALLOW so render clients can use them. Driver | |
| 3152 | − authors must be careful not to allow any privileged ioctls on render | |
| 3153 | − nodes. | |
| 3154 | − </para> | |
| 3155 | − <para> | |
| 3156 | − With render nodes, user-space can now control access to the render node | |
| 3157 | − via basic file-system access-modes. A running graphics server which | |
| 3158 | − authenticates clients on the privileged primary/legacy node is no longer | |
| 3159 | − required. Instead, a client can open the render node and is immediately | |
| 3160 | − granted GPU access. Communication between clients (or servers) is done | |
| 3161 | − via PRIME. FLINK from render node to legacy node is not supported. New | |
| 3162 | − clients must not use the insecure FLINK interface. | |
| 3163 | − </para> | |
| 3164 | − <para> | |
| 3165 | − Besides dropping all modeset/global ioctls, render nodes also drop the | |
| 3166 | − DRM-Master concept. There is no reason to associate render clients with | |
| 3167 | − a DRM-Master as they are independent of any graphics server. Besides, | |
| 3168 | − they must work without any running master, anyway. | |
| 3169 | − Drivers must be able to run without a master object if they support | |
| 3170 | − render nodes. If, on the other hand, a driver requires shared state | |
| 3171 | − between clients which is visible to user-space and accessible beyond | |
| 3172 | − open-file boundaries, they cannot support render nodes. | |
| 3173 | − </para> | |
| 3174 | − </sect1> | |
| 3175 | − | |
| 3176 | − <!-- External: vblank handling --> | |
| 3177 | − | |
| 3178 | − <sect1> | |
| 3179 | − <title>VBlank event handling</title> | |
| 3180 | − <para> | |
| 3181 | − The DRM core exposes two vertical blank related ioctls: | |
| 3182 | − <variablelist> | |
| 3183 | − <varlistentry> | |
| 3184 | − <term>DRM_IOCTL_WAIT_VBLANK</term> | |
| 3185 | − <listitem> | |
| 3186 | − <para> | |
| 3187 | − This takes a struct drm_wait_vblank structure as its argument, | |
| 3188 | − and it is used to block or request a signal when a specified | |
| 3189 | − vblank event occurs. | |
| 3190 | − </para> | |
| 3191 | − </listitem> | |
| 3192 | − </varlistentry> | |
| 3193 | − <varlistentry> | |
| 3194 | − <term>DRM_IOCTL_MODESET_CTL</term> | |
| 3195 | − <listitem> | |
| 3196 | − <para> | |
| 3197 | − This was only used for user-mode-settind drivers around | |
| 3198 | − modesetting changes to allow the kernel to update the vblank | |
| 3199 | − interrupt after mode setting, since on many devices the vertical | |
| 3200 | − blank counter is reset to 0 at some point during modeset. Modern | |
| 3201 | − drivers should not call this any more since with kernel mode | |
| 3202 | − setting it is a no-op. | |
| 3203 | − </para> | |
| 3204 | − </listitem> | |
| 3205 | − </varlistentry> | |
| 3206 | − </variablelist> | |
| 3207 | − </para> | |
| 3208 | − </sect1> | |
| 3209 | − | |
| 3210 | − </chapter> | |
| 3211 | −</part> | |
| 3212 | −<part id="drmDrivers"> | |
| 3213 | − <title>DRM Drivers</title> | |
| 3214 | − | |
| 3215 | − <partintro> | |
| 3216 | − <para> | |
| 3217 | − This second part of the GPU Driver Developer's Guide documents driver | |
| 3218 | − code, implementation details and also all the driver-specific userspace | |
| 3219 | − interfaces. Especially since all hardware-acceleration interfaces to | |
| 3220 | − userspace are driver specific for efficiency and other reasons these | |
| 3221 | − interfaces can be rather substantial. Hence every driver has its own | |
| 3222 | − chapter. | |
| 3223 | − </para> | |
| 3224 | − </partintro> | |
| 3225 | − | |
| 3226 | − <chapter id="drmI915"> | |
| 3227 | − <title>drm/i915 Intel GFX Driver</title> | |
| 3228 | − <para> | |
| 3229 | − The drm/i915 driver supports all (with the exception of some very early | |
| 3230 | − models) integrated GFX chipsets with both Intel display and rendering | |
| 3231 | − blocks. This excludes a set of SoC platforms with an SGX rendering unit, | |
| 3232 | − those have basic support through the gma500 drm driver. | |
| 3233 | − </para> | |
| 3234 | − <sect1> | |
| 3235 | − <title>Core Driver Infrastructure</title> | |
| 3236 | − <para> | |
| 3237 | − This section covers core driver infrastructure used by both the display | |
| 3238 | − and the GEM parts of the driver. | |
| 3239 | − </para> | |
| 3240 | − <sect2> | |
| 3241 | − <title>Runtime Power Management</title> | |
| 3242 | −!Pdrivers/gpu/drm/i915/intel_runtime_pm.c runtime pm | |
| 3243 | −!Idrivers/gpu/drm/i915/intel_runtime_pm.c | |
| 3244 | −!Idrivers/gpu/drm/i915/intel_uncore.c | |
| 3245 | − </sect2> | |
| 3246 | − <sect2> | |
| 3247 | − <title>Interrupt Handling</title> | |
| 3248 | −!Pdrivers/gpu/drm/i915/i915_irq.c interrupt handling | |
| 3249 | −!Fdrivers/gpu/drm/i915/i915_irq.c intel_irq_init intel_irq_init_hw intel_hpd_init | |
| 3250 | −!Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_disable_interrupts | |
| 3251 | −!Fdrivers/gpu/drm/i915/i915_irq.c intel_runtime_pm_enable_interrupts | |
| 3252 | − </sect2> | |
| 3253 | − <sect2> | |
| 3254 | − <title>Intel GVT-g Guest Support(vGPU)</title> | |
| 3255 | −!Pdrivers/gpu/drm/i915/i915_vgpu.c Intel GVT-g guest support | |
| 3256 | −!Idrivers/gpu/drm/i915/i915_vgpu.c | |
| 3257 | − </sect2> | |
| 3258 | − </sect1> | |
| 3259 | − <sect1> | |
| 3260 | − <title>Display Hardware Handling</title> | |
| 3261 | − <para> | |
| 3262 | − This section covers everything related to the display hardware including | |
| 3263 | − the mode setting infrastructure, plane, sprite and cursor handling and | |
| 3264 | − display, output probing and related topics. | |
| 3265 | − </para> | |
| 3266 | − <sect2> | |
| 3267 | − <title>Mode Setting Infrastructure</title> | |
| 3268 | − <para> | |
| 3269 | − The i915 driver is thus far the only DRM driver which doesn't use the | |
| 3270 | − common DRM helper code to implement mode setting sequences. Thus it | |
| 3271 | − has its own tailor-made infrastructure for executing a display | |
| 3272 | − configuration change. | |
| 3273 | − </para> | |
| 3274 | − </sect2> | |
| 3275 | − <sect2> | |
| 3276 | − <title>Frontbuffer Tracking</title> | |
| 3277 | −!Pdrivers/gpu/drm/i915/intel_frontbuffer.c frontbuffer tracking | |
| 3278 | −!Idrivers/gpu/drm/i915/intel_frontbuffer.c | |
| 3279 | −!Fdrivers/gpu/drm/i915/i915_gem.c i915_gem_track_fb | |
| 3280 | − </sect2> | |
| 3281 | − <sect2> | |
| 3282 | − <title>Display FIFO Underrun Reporting</title> | |
| 3283 | −!Pdrivers/gpu/drm/i915/intel_fifo_underrun.c fifo underrun handling | |
| 3284 | −!Idrivers/gpu/drm/i915/intel_fifo_underrun.c | |
| 3285 | − </sect2> | |
| 3286 | − <sect2> | |
| 3287 | − <title>Plane Configuration</title> | |
| 3288 | − <para> | |
| 3289 | − This section covers plane configuration and composition with the | |
| 3290 | − primary plane, sprites, cursors and overlays. This includes the | |
| 3291 | − infrastructure to do atomic vsync'ed updates of all this state and | |
| 3292 | − also tightly coupled topics like watermark setup and computation, | |
| 3293 | − framebuffer compression and panel self refresh. | |
| 3294 | − </para> | |
| 3295 | − </sect2> | |
| 3296 | − <sect2> | |
| 3297 | − <title>Atomic Plane Helpers</title> | |
| 3298 | −!Pdrivers/gpu/drm/i915/intel_atomic_plane.c atomic plane helpers | |
| 3299 | −!Idrivers/gpu/drm/i915/intel_atomic_plane.c | |
| 3300 | − </sect2> | |
| 3301 | − <sect2> | |
| 3302 | − <title>Output Probing</title> | |
| 3303 | − <para> | |
| 3304 | − This section covers output probing and related infrastructure like the | |
| 3305 | − hotplug interrupt storm detection and mitigation code. Note that the | |
| 3306 | − i915 driver still uses most of the common DRM helper code for output | |
| 3307 | − probing, so those sections fully apply. | |
| 3308 | − </para> | |
| 3309 | − </sect2> | |
| 3310 | − <sect2> | |
| 3311 | − <title>Hotplug</title> | |
| 3312 | −!Pdrivers/gpu/drm/i915/intel_hotplug.c Hotplug | |
| 3313 | −!Idrivers/gpu/drm/i915/intel_hotplug.c | |
| 3314 | − </sect2> | |
| 3315 | − <sect2> | |
| 3316 | − <title>High Definition Audio</title> | |
| 3317 | −!Pdrivers/gpu/drm/i915/intel_audio.c High Definition Audio over HDMI and Display Port | |
| 3318 | −!Idrivers/gpu/drm/i915/intel_audio.c | |
| 3319 | −!Iinclude/drm/i915_component.h | |
| 3320 | − </sect2> | |
| 3321 | − <sect2> | |
| 3322 | − <title>Panel Self Refresh PSR (PSR/SRD)</title> | |
| 3323 | −!Pdrivers/gpu/drm/i915/intel_psr.c Panel Self Refresh (PSR/SRD) | |
| 3324 | −!Idrivers/gpu/drm/i915/intel_psr.c | |
| 3325 | − </sect2> | |
| 3326 | − <sect2> | |
| 3327 | − <title>Frame Buffer Compression (FBC)</title> | |
| 3328 | −!Pdrivers/gpu/drm/i915/intel_fbc.c Frame Buffer Compression (FBC) | |
| 3329 | −!Idrivers/gpu/drm/i915/intel_fbc.c | |
| 3330 | − </sect2> | |
| 3331 | − <sect2> | |
| 3332 | − <title>Display Refresh Rate Switching (DRRS)</title> | |
| 3333 | −!Pdrivers/gpu/drm/i915/intel_dp.c Display Refresh Rate Switching (DRRS) | |
| 3334 | −!Fdrivers/gpu/drm/i915/intel_dp.c intel_dp_set_drrs_state | |
| 3335 | −!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_enable | |
| 3336 | −!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_disable | |
| 3337 | −!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_invalidate | |
| 3338 | −!Fdrivers/gpu/drm/i915/intel_dp.c intel_edp_drrs_flush | |
| 3339 | −!Fdrivers/gpu/drm/i915/intel_dp.c intel_dp_drrs_init | |
| 3340 | − | |
| 3341 | − </sect2> | |
| 3342 | − <sect2> | |
| 3343 | − <title>DPIO</title> | |
| 3344 | −!Pdrivers/gpu/drm/i915/i915_reg.h DPIO | |
| 3345 | − </sect2> | |
| 3346 | − | |
| 3347 | − <sect2> | |
| 3348 | − <title>CSR firmware support for DMC</title> | |
| 3349 | −!Pdrivers/gpu/drm/i915/intel_csr.c csr support for dmc | |
| 3350 | −!Idrivers/gpu/drm/i915/intel_csr.c | |
| 3351 | − </sect2> | |
| 3352 | − <sect2> | |
| 3353 | − <title>Video BIOS Table (VBT)</title> | |
| 3354 | −!Pdrivers/gpu/drm/i915/intel_bios.c Video BIOS Table (VBT) | |
| 3355 | −!Idrivers/gpu/drm/i915/intel_bios.c | |
| 3356 | −!Idrivers/gpu/drm/i915/intel_vbt_defs.h | |
| 3357 | − </sect2> | |
| 3358 | − </sect1> | |
| 3359 | − | |
| 3360 | − <sect1> | |
| 3361 | − <title>Memory Management and Command Submission</title> | |
| 3362 | − <para> | |
| 3363 | − This sections covers all things related to the GEM implementation in the | |
| 3364 | − i915 driver. | |
| 3365 | − </para> | |
| 3366 | − <sect2> | |
| 3367 | − <title>Batchbuffer Parsing</title> | |
| 3368 | −!Pdrivers/gpu/drm/i915/i915_cmd_parser.c batch buffer command parser | |
| 3369 | −!Idrivers/gpu/drm/i915/i915_cmd_parser.c | |
| 3370 | − </sect2> | |
| 3371 | − <sect2> | |
| 3372 | − <title>Batchbuffer Pools</title> | |
| 3373 | −!Pdrivers/gpu/drm/i915/i915_gem_batch_pool.c batch pool | |
| 3374 | −!Idrivers/gpu/drm/i915/i915_gem_batch_pool.c | |
| 3375 | − </sect2> | |
| 3376 | − <sect2> | |
| 3377 | − <title>Logical Rings, Logical Ring Contexts and Execlists</title> | |
| 3378 | −!Pdrivers/gpu/drm/i915/intel_lrc.c Logical Rings, Logical Ring Contexts and Execlists | |
| 3379 | −!Idrivers/gpu/drm/i915/intel_lrc.c | |
| 3380 | − </sect2> | |
| 3381 | − <sect2> | |
| 3382 | − <title>Global GTT views</title> | |
| 3383 | −!Pdrivers/gpu/drm/i915/i915_gem_gtt.c Global GTT views | |
| 3384 | −!Idrivers/gpu/drm/i915/i915_gem_gtt.c | |
| 3385 | − </sect2> | |
| 3386 | − <sect2> | |
| 3387 | − <title>GTT Fences and Swizzling</title> | |
| 3388 | −!Idrivers/gpu/drm/i915/i915_gem_fence.c | |
| 3389 | − <sect3> | |
| 3390 | − <title>Global GTT Fence Handling</title> | |
| 3391 | −!Pdrivers/gpu/drm/i915/i915_gem_fence.c fence register handling | |
| 3392 | − </sect3> | |
| 3393 | − <sect3> | |
| 3394 | − <title>Hardware Tiling and Swizzling Details</title> | |
| 3395 | −!Pdrivers/gpu/drm/i915/i915_gem_fence.c tiling swizzling details | |
| 3396 | − </sect3> | |
| 3397 | − </sect2> | |
| 3398 | − <sect2> | |
| 3399 | − <title>Object Tiling IOCTLs</title> | |
| 3400 | −!Idrivers/gpu/drm/i915/i915_gem_tiling.c | |
| 3401 | −!Pdrivers/gpu/drm/i915/i915_gem_tiling.c buffer object tiling | |
| 3402 | − </sect2> | |
| 3403 | − <sect2> | |
| 3404 | − <title>Buffer Object Eviction</title> | |
| 3405 | − <para> | |
| 3406 | − This section documents the interface functions for evicting buffer | |
| 3407 | − objects to make space available in the virtual gpu address spaces. | |
| 3408 | − Note that this is mostly orthogonal to shrinking buffer objects | |
| 3409 | − caches, which has the goal to make main memory (shared with the gpu | |
| 3410 | − through the unified memory architecture) available. | |
| 3411 | − </para> | |
| 3412 | −!Idrivers/gpu/drm/i915/i915_gem_evict.c | |
| 3413 | − </sect2> | |
| 3414 | − <sect2> | |
| 3415 | − <title>Buffer Object Memory Shrinking</title> | |
| 3416 | − <para> | |
| 3417 | − This section documents the interface function for shrinking memory | |
| 3418 | − usage of buffer object caches. Shrinking is used to make main memory | |
| 3419 | − available. Note that this is mostly orthogonal to evicting buffer | |
| 3420 | − objects, which has the goal to make space in gpu virtual address | |
| 3421 | − spaces. | |
| 3422 | − </para> | |
| 3423 | −!Idrivers/gpu/drm/i915/i915_gem_shrinker.c | |
| 3424 | − </sect2> | |
| 3425 | − </sect1> | |
| 3426 | − <sect1> | |
| 3427 | − <title>GuC</title> | |
| 3428 | − <sect2> | |
| 3429 | − <title>GuC-specific firmware loader</title> | |
| 3430 | −!Pdrivers/gpu/drm/i915/intel_guc_loader.c GuC-specific firmware loader | |
| 3431 | −!Idrivers/gpu/drm/i915/intel_guc_loader.c | |
| 3432 | − </sect2> | |
| 3433 | − <sect2> | |
| 3434 | − <title>GuC-based command submission</title> | |
| 3435 | −!Pdrivers/gpu/drm/i915/i915_guc_submission.c GuC-based command submission | |
| 3436 | −!Idrivers/gpu/drm/i915/i915_guc_submission.c | |
| 3437 | − </sect2> | |
| 3438 | − <sect2> | |
| 3439 | − <title>GuC Firmware Layout</title> | |
| 3440 | −!Pdrivers/gpu/drm/i915/intel_guc_fwif.h GuC Firmware Layout | |
| 3441 | − </sect2> | |
| 3442 | − </sect1> | |
| 3443 | − | |
| 3444 | − <sect1> | |
| 3445 | − <title> Tracing </title> | |
| 3446 | − <para> | |
| 3447 | − This sections covers all things related to the tracepoints implemented in | |
| 3448 | − the i915 driver. | |
| 3449 | − </para> | |
| 3450 | − <sect2> | |
| 3451 | − <title> i915_ppgtt_create and i915_ppgtt_release </title> | |
| 3452 | −!Pdrivers/gpu/drm/i915/i915_trace.h i915_ppgtt_create and i915_ppgtt_release tracepoints | |
| 3453 | − </sect2> | |
| 3454 | − <sect2> | |
| 3455 | − <title> i915_context_create and i915_context_free </title> | |
| 3456 | −!Pdrivers/gpu/drm/i915/i915_trace.h i915_context_create and i915_context_free tracepoints | |
| 3457 | − </sect2> | |
| 3458 | − <sect2> | |
| 3459 | − <title> switch_mm </title> | |
| 3460 | −!Pdrivers/gpu/drm/i915/i915_trace.h switch_mm tracepoint | |
| 3461 | − </sect2> | |
| 3462 | − </sect1> | |
| 3463 | − | |
| 3464 | − </chapter> | |
| 3465 | −!Cdrivers/gpu/drm/i915/i915_irq.c | |
| 3466 | −</part> | |
| 3467 | − | |
| 3468 | −<part id="vga_switcheroo"> | |
| 3469 | − <title>vga_switcheroo</title> | |
| 3470 | − <partintro> | |
| 3471 | −!Pdrivers/gpu/vga/vga_switcheroo.c Overview | |
| 3472 | − </partintro> | |
| 3473 | − | |
| 3474 | − <chapter id="modes_of_use"> | |
| 3475 | − <title>Modes of Use</title> | |
| 3476 | − <sect1> | |
| 3477 | − <title>Manual switching and manual power control</title> | |
| 3478 | −!Pdrivers/gpu/vga/vga_switcheroo.c Manual switching and manual power control | |
| 3479 | − </sect1> | |
| 3480 | − <sect1> | |
| 3481 | − <title>Driver power control</title> | |
| 3482 | −!Pdrivers/gpu/vga/vga_switcheroo.c Driver power control | |
| 3483 | − </sect1> | |
| 3484 | − </chapter> | |
| 3485 | − | |
| 3486 | − <chapter id="api"> | |
| 3487 | − <title>API</title> | |
| 3488 | − <sect1> | |
| 3489 | − <title>Public functions</title> | |
| 3490 | −!Edrivers/gpu/vga/vga_switcheroo.c | |
| 3491 | − </sect1> | |
| 3492 | − <sect1> | |
| 3493 | − <title>Public structures</title> | |
| 3494 | −!Finclude/linux/vga_switcheroo.h vga_switcheroo_handler | |
| 3495 | −!Finclude/linux/vga_switcheroo.h vga_switcheroo_client_ops | |
| 3496 | − </sect1> | |
| 3497 | − <sect1> | |
| 3498 | − <title>Public constants</title> | |
| 3499 | −!Finclude/linux/vga_switcheroo.h vga_switcheroo_handler_flags_t | |
| 3500 | −!Finclude/linux/vga_switcheroo.h vga_switcheroo_client_id | |
| 3501 | −!Finclude/linux/vga_switcheroo.h vga_switcheroo_state | |
| 3502 | − </sect1> | |
| 3503 | − <sect1> | |
| 3504 | − <title>Private structures</title> | |
| 3505 | −!Fdrivers/gpu/vga/vga_switcheroo.c vgasr_priv | |
| 3506 | −!Fdrivers/gpu/vga/vga_switcheroo.c vga_switcheroo_client | |
| 3507 | − </sect1> | |
| 3508 | − </chapter> | |
| 3509 | − | |
| 3510 | − <chapter id="handlers"> | |
| 3511 | − <title>Handlers</title> | |
| 3512 | − <sect1> | |
| 3513 | − <title>apple-gmux Handler</title> | |
| 3514 | −!Pdrivers/platform/x86/apple-gmux.c Overview | |
| 3515 | −!Pdrivers/platform/x86/apple-gmux.c Interrupt | |
| 3516 | − <sect2> | |
| 3517 | − <title>Graphics mux</title> | |
| 3518 | −!Pdrivers/platform/x86/apple-gmux.c Graphics mux | |
| 3519 | − </sect2> | |
| 3520 | − <sect2> | |
| 3521 | − <title>Power control</title> | |
| 3522 | −!Pdrivers/platform/x86/apple-gmux.c Power control | |
| 3523 | − </sect2> | |
| 3524 | − <sect2> | |
| 3525 | − <title>Backlight control</title> | |
| 3526 | −!Pdrivers/platform/x86/apple-gmux.c Backlight control | |
| 3527 | − </sect2> | |
| 3528 | − <sect2> | |
| 3529 | − <title>Public functions</title> | |
| 3530 | −!Iinclude/linux/apple-gmux.h | |
| 3531 | − </sect2> | |
| 3532 | − </sect1> | |
| 3533 | − </chapter> | |
| 3534 | − | |
| 3535 | −!Cdrivers/gpu/vga/vga_switcheroo.c | |
| 3536 | −!Cinclude/linux/vga_switcheroo.h | |
| 3537 | −!Cdrivers/platform/x86/apple-gmux.c | |
| 3538 | −</part> | |
| 3539 | − | |
| 3540 | −</book> | |
| @@ -1 +0,0 @@ | ||
| 1 | −!*.svg | |
| @@ -1,427 +0,0 @@ | ||
| 1 | −### | |
| 2 | −# Media build rules - Auto-generates media contents/indexes and *.h xml's | |
| 3 | −# | |
| 4 | − | |
| 5 | −SHELL=/bin/bash | |
| 6 | − | |
| 7 | −MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/ | |
| 8 | −MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media | |
| 9 | − | |
| 10 | −MEDIA_TEMP = media-entities.tmpl \ | |
| 11 | − media-indices.tmpl \ | |
| 12 | − videodev2.h.xml \ | |
| 13 | − v4l2.xml \ | |
| 14 | − audio.h.xml \ | |
| 15 | − ca.h.xml \ | |
| 16 | − dmx.h.xml \ | |
| 17 | − frontend.h.xml \ | |
| 18 | − net.h.xml \ | |
| 19 | − video.h.xml \ | |
| 20 | − | |
| 21 | −IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64))) | |
| 22 | −OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES)) | |
| 23 | −GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP)) | |
| 24 | − | |
| 25 | −PHONY += cleanmediadocs | |
| 26 | − | |
| 27 | −cleanmediadocs: | |
| 28 | − -@rm -f `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null | |
| 29 | − | |
| 30 | −$(obj)/media_api.xml: $(GENFILES) FORCE | |
| 31 | − | |
| 32 | −#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml | |
| 33 | −#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml | |
| 34 | −#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml | |
| 35 | − | |
| 36 | −V4L_SGMLS = \ | |
| 37 | − $(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \ | |
| 38 | − capture.c.xml \ | |
| 39 | − keytable.c.xml \ | |
| 40 | − v4l2grab.c.xml | |
| 41 | − | |
| 42 | −DVB_SGMLS = \ | |
| 43 | − $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') | |
| 44 | − | |
| 45 | −MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP)) | |
| 46 | − | |
| 47 | −FUNCS = \ | |
| 48 | − close \ | |
| 49 | − ioctl \ | |
| 50 | − mmap \ | |
| 51 | − munmap \ | |
| 52 | − open \ | |
| 53 | − poll \ | |
| 54 | − read \ | |
| 55 | − select \ | |
| 56 | − write \ | |
| 57 | − | |
| 58 | −IOCTLS = \ | |
| 59 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \ | |
| 60 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \ | |
| 61 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \ | |
| 62 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \ | |
| 63 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \ | |
| 64 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \ | |
| 65 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \ | |
| 66 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \ | |
| 67 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/cec.h) \ | |
| 68 | − $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \ | |
| 69 | − | |
| 70 | −DEFINES = \ | |
| 71 | − $(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \ | |
| 72 | − | |
| 73 | −TYPES = \ | |
| 74 | − $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \ | |
| 75 | − $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/dvb/frontend.h) | |
| 76 | − | |
| 77 | −ENUMS = \ | |
| 78 | − $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' \ | |
| 79 | − $(srctree)/include/uapi/linux/videodev2.h \ | |
| 80 | − $(srctree)/include/uapi/linux/dvb/audio.h \ | |
| 81 | − $(srctree)/include/uapi/linux/dvb/ca.h \ | |
| 82 | − $(srctree)/include/uapi/linux/dvb/dmx.h \ | |
| 83 | − $(srctree)/include/uapi/linux/dvb/frontend.h \ | |
| 84 | − $(srctree)/include/uapi/linux/dvb/net.h \ | |
| 85 | − $(srctree)/include/uapi/linux/dvb/video.h \ | |
| 86 | − $(srctree)/include/uapi/linux/media.h \ | |
| 87 | − $(srctree)/include/uapi/linux/v4l2-mediabus.h \ | |
| 88 | − $(srctree)/include/uapi/linux/v4l2-subdev.h) | |
| 89 | − | |
| 90 | −ENUM_DEFS = \ | |
| 91 | − $(shell perl -e 'open IN,"cat @ARGV| cpp -fpreprocessed |"; while (<IN>) { if ($$enum) {print "$$1\n" if (/\s*([A-Z]\S+)\b/); } $$enum = 0 if ($$enum && /^\}/); $$enum = 1 if(/^\s*enum\s/); }; close IN;' \ | |
| 92 | − $(srctree)/include/uapi/linux/dvb/dmx.h \ | |
| 93 | − $(srctree)/include/uapi/linux/dvb/frontend.h) | |
| 94 | − | |
| 95 | −STRUCTS = \ | |
| 96 | − $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \ | |
| 97 | − $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \ | |
| 98 | − $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \ | |
| 99 | − $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \ | |
| 100 | − $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \ | |
| 101 | − $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \ | |
| 102 | − $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \ | |
| 103 | − $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \ | |
| 104 | − $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/cec.h) \ | |
| 105 | − $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \ | |
| 106 | − $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h) | |
| 107 | − | |
| 108 | −ERRORS = \ | |
| 109 | − E2BIG \ | |
| 110 | − EACCES \ | |
| 111 | − EAGAIN \ | |
| 112 | − EBADF \ | |
| 113 | − EBADFD \ | |
| 114 | − EBADR \ | |
| 115 | − EBADRQC \ | |
| 116 | − EBUSY \ | |
| 117 | − ECHILD \ | |
| 118 | − ECONNRESET \ | |
| 119 | − EDEADLK \ | |
| 120 | − EDOM \ | |
| 121 | − EEXIST \ | |
| 122 | − EFAULT \ | |
| 123 | − EFBIG \ | |
| 124 | − EILSEQ \ | |
| 125 | − EINIT \ | |
| 126 | − EINPROGRESS \ | |
| 127 | − EINTR \ | |
| 128 | − EINVAL \ | |
| 129 | − EIO \ | |
| 130 | − EMFILE \ | |
| 131 | − ENFILE \ | |
| 132 | − ENOBUFS \ | |
| 133 | − ENODATA \ | |
| 134 | − ENODEV \ | |
| 135 | − ENOENT \ | |
| 136 | − ENOIOCTLCMD \ | |
| 137 | − ENOMEM \ | |
| 138 | − ENOSPC \ | |
| 139 | − ENOSR \ | |
| 140 | − ENOSYS \ | |
| 141 | − ENOTSUP \ | |
| 142 | − ENOTSUPP \ | |
| 143 | − ENOTTY \ | |
| 144 | − ENXIO \ | |
| 145 | − EOPNOTSUPP \ | |
| 146 | − EOVERFLOW \ | |
| 147 | − EPERM \ | |
| 148 | − EPIPE \ | |
| 149 | − EPROTO \ | |
| 150 | − ERANGE \ | |
| 151 | − EREMOTE \ | |
| 152 | − EREMOTEIO \ | |
| 153 | − ERESTART \ | |
| 154 | − ERESTARTSYS \ | |
| 155 | − ESHUTDOWN \ | |
| 156 | − ESPIPE \ | |
| 157 | − ETIME \ | |
| 158 | − ETIMEDOUT \ | |
| 159 | − EUSERS \ | |
| 160 | − EWOULDBLOCK \ | |
| 161 | − EXDEV \ | |
| 162 | − | |
| 163 | −ESCAPE = \ | |
| 164 | − -e "s/&/\\&/g" \ | |
| 165 | − -e "s/</\\</g" \ | |
| 166 | − -e "s/>/\\>/g" | |
| 167 | − | |
| 168 | −FILENAME = \ | |
| 169 | − -e s,"^[^\/]*/",, \ | |
| 170 | − -e s/"\\.xml"// \ | |
| 171 | − -e s/"\\.tmpl"// \ | |
| 172 | − -e s/\\\./-/g \ | |
| 173 | − -e s/"^func-"// \ | |
| 174 | − -e s/"^pixfmt-"// \ | |
| 175 | − -e s/"^vidioc-"// | |
| 176 | − | |
| 177 | −# Generate references to these structs in videodev2.h.xml. | |
| 178 | −DOCUMENTED = \ | |
| 179 | − -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \ | |
| 180 | − -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \ | |
| 181 | − -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \ | |
| 182 | − -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ | |
| 183 | − -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g" | |
| 184 | − | |
| 185 | −DVB_DOCUMENTED = \ | |
| 186 | − -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ | |
| 187 | − -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \ | |
| 188 | − -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ | |
| 189 | − -e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \ | |
| 190 | − -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ | |
| 191 | − -e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \ | |
| 192 | − -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \ | |
| 193 | − -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ | |
| 194 | − -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \ | |
| 195 | − -e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \ | |
| 196 | − -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \ | |
| 197 | − -e "s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \ | |
| 198 | − | |
| 199 | −# | |
| 200 | −# Media targets and dependencies | |
| 201 | −# | |
| 202 | − | |
| 203 | −install_media_images = \ | |
| 204 | − $(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \ | |
| 205 | − mkdir -p $(MEDIA_OBJ_DIR)/media_api; \ | |
| 206 | − cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \ | |
| 207 | − fi | |
| 208 | − | |
| 209 | −$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64 | |
| 210 | − $(Q)base64 -d $< >$@ | |
| 211 | − | |
| 212 | −$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES) | |
| 213 | − @$($(quiet)gen_xml) | |
| 214 | − @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/) | |
| 215 | − @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/) | |
| 216 | − | |
| 217 | −$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 218 | − @$($(quiet)gen_xml) | |
| 219 | − @( \ | |
| 220 | − echo "<programlisting>") > $@ | |
| 221 | − @( \ | |
| 222 | − expand --tabs=8 < $< | \ | |
| 223 | − sed $(ESCAPE) $(DOCUMENTED) | \ | |
| 224 | − sed 's/i\.e\./&ie;/') >> $@ | |
| 225 | − @( \ | |
| 226 | − echo "</programlisting>") >> $@ | |
| 227 | − | |
| 228 | −$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 229 | − @$($(quiet)gen_xml) | |
| 230 | − @( \ | |
| 231 | − echo "<programlisting>") > $@ | |
| 232 | − @( \ | |
| 233 | − expand --tabs=8 < $< | \ | |
| 234 | − sed $(ESCAPE) $(DVB_DOCUMENTED) | \ | |
| 235 | − sed 's/i\.e\./&ie;/') >> $@ | |
| 236 | − @( \ | |
| 237 | − echo "</programlisting>") >> $@ | |
| 238 | − | |
| 239 | −$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 240 | − @$($(quiet)gen_xml) | |
| 241 | − @( \ | |
| 242 | − echo "<programlisting>") > $@ | |
| 243 | − @( \ | |
| 244 | − expand --tabs=8 < $< | \ | |
| 245 | − sed $(ESCAPE) $(DVB_DOCUMENTED) | \ | |
| 246 | − sed 's/i\.e\./&ie;/') >> $@ | |
| 247 | − @( \ | |
| 248 | − echo "</programlisting>") >> $@ | |
| 249 | − | |
| 250 | −$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 251 | − @$($(quiet)gen_xml) | |
| 252 | − @( \ | |
| 253 | − echo "<programlisting>") > $@ | |
| 254 | − @( \ | |
| 255 | − for ident in $(ENUM_DEFS) ; do \ | |
| 256 | − entity=`echo $$ident | tr _ -` ; \ | |
| 257 | − r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\ | |
| 258 | − done; \ | |
| 259 | − expand --tabs=8 < $< | \ | |
| 260 | − sed $(ESCAPE) $(DVB_DOCUMENTED) | \ | |
| 261 | − sed 's/i\.e\./&ie;/' | \ | |
| 262 | − perl -ne "$$r print $$_;") >> $@ | |
| 263 | − @( \ | |
| 264 | − echo "</programlisting>") >> $@ | |
| 265 | − | |
| 266 | −$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 267 | − @$($(quiet)gen_xml) | |
| 268 | − @( \ | |
| 269 | − echo "<programlisting>") > $@ | |
| 270 | − @( \ | |
| 271 | − for ident in $(ENUM_DEFS) ; do \ | |
| 272 | − entity=`echo $$ident | tr _ -` ; \ | |
| 273 | − r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\ | |
| 274 | − done; \ | |
| 275 | − expand --tabs=8 < $< | \ | |
| 276 | − sed $(ESCAPE) $(DVB_DOCUMENTED) | \ | |
| 277 | − sed 's/i\.e\./&ie;/' | \ | |
| 278 | − perl -ne "$$r print $$_;") >> $@ | |
| 279 | − @( \ | |
| 280 | − echo "</programlisting>") >> $@ | |
| 281 | − | |
| 282 | −$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 283 | − @$($(quiet)gen_xml) | |
| 284 | − @( \ | |
| 285 | − echo "<programlisting>") > $@ | |
| 286 | − @( \ | |
| 287 | − expand --tabs=8 < $< | \ | |
| 288 | − sed $(ESCAPE) $(DVB_DOCUMENTED) | \ | |
| 289 | − sed 's/i\.e\./&ie;/') >> $@ | |
| 290 | − @( \ | |
| 291 | − echo "</programlisting>") >> $@ | |
| 292 | − | |
| 293 | −$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 294 | − @$($(quiet)gen_xml) | |
| 295 | − @( \ | |
| 296 | − echo "<programlisting>") > $@ | |
| 297 | − @( \ | |
| 298 | − expand --tabs=8 < $< | \ | |
| 299 | − sed $(ESCAPE) $(DVB_DOCUMENTED) | \ | |
| 300 | − sed 's/i\.e\./&ie;/') >> $@ | |
| 301 | − @( \ | |
| 302 | − echo "</programlisting>") >> $@ | |
| 303 | − | |
| 304 | −$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 305 | − @$($(quiet)gen_xml) | |
| 306 | − @( \ | |
| 307 | − echo "<!-- Generated file! Do not edit. -->") >$@ | |
| 308 | − @( \ | |
| 309 | − echo -e "\n<!-- Functions -->") >>$@ | |
| 310 | − @( \ | |
| 311 | − for ident in $(FUNCS) ; do \ | |
| 312 | − entity=`echo $$ident | tr _ -` ; \ | |
| 313 | − echo "<!ENTITY func-$$entity \"<link" \ | |
| 314 | − "linkend='func-$$entity'><function>$$ident()</function></link>\">" \ | |
| 315 | − >>$@ ; \ | |
| 316 | − done) | |
| 317 | − @( \ | |
| 318 | − echo -e "\n<!-- Ioctls -->") >>$@ | |
| 319 | − @( \ | |
| 320 | − for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\ | |
| 321 | − entity=`echo $$ident | tr _ -` ; \ | |
| 322 | − id=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \ | |
| 323 | − if [ "$$id" != "" ]; then echo "<!ENTITY $$entity \"<link" \ | |
| 324 | − "linkend='$$id'><constant>$$ident</constant></link>\">" \ | |
| 325 | − >>$@ ; else \ | |
| 326 | − echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \ | |
| 327 | − fi; \ | |
| 328 | − done) | |
| 329 | − @( \ | |
| 330 | − echo -e "\n<!-- Defines -->") >>$@ | |
| 331 | − @( \ | |
| 332 | − for ident in $(DEFINES) ; do \ | |
| 333 | − entity=`echo $$ident | tr _ -` ; \ | |
| 334 | − echo "<!ENTITY $$entity \"<link" \ | |
| 335 | − "linkend='$$entity'><constant>$$ident</constant></link>\">" \ | |
| 336 | − >>$@ ; \ | |
| 337 | − done) | |
| 338 | − @( \ | |
| 339 | − echo -e "\n<!-- Types -->") >>$@ | |
| 340 | − @( \ | |
| 341 | − for ident in $(TYPES) ; do \ | |
| 342 | − entity=`echo $$ident | tr _ -` ; \ | |
| 343 | − echo "<!ENTITY $$entity \"<link" \ | |
| 344 | − "linkend='$$entity'>$$ident</link>\">" >>$@ ; \ | |
| 345 | − done) | |
| 346 | − @( \ | |
| 347 | − echo -e "\n<!-- Enums -->") >>$@ | |
| 348 | − @( \ | |
| 349 | − for ident in $(ENUMS) ; do \ | |
| 350 | − entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \ | |
| 351 | − echo "<!ENTITY $$entity \"enum <link" \ | |
| 352 | − "linkend='$$entity'>$$ident</link>\">" >>$@ ; \ | |
| 353 | − done) | |
| 354 | − @( \ | |
| 355 | − echo -e "\n<!-- Enum definitions -->") >>$@ | |
| 356 | − @( \ | |
| 357 | − for ident in $(ENUM_DEFS) ; do \ | |
| 358 | − entity=`echo $$ident | tr _ -` ; \ | |
| 359 | − echo "<!ENTITY $$entity \"<link" \ | |
| 360 | − "linkend='$$entity'><constant>$$ident</constant></link>\">" \ | |
| 361 | − >>$@ ; \ | |
| 362 | − done) | |
| 363 | − @( \ | |
| 364 | − echo -e "\n<!-- Structures -->") >>$@ | |
| 365 | − @( \ | |
| 366 | − for ident in $(STRUCTS) ; do \ | |
| 367 | − entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ | |
| 368 | − echo "<!ENTITY $$entity \"struct <link" \ | |
| 369 | − "linkend='$$entity'>$$ident</link>\">" >>$@ ; \ | |
| 370 | − done) | |
| 371 | − @( \ | |
| 372 | − echo -e "\n<!-- Error Codes -->") >>$@ | |
| 373 | − @( \ | |
| 374 | − for ident in $(ERRORS) ; do \ | |
| 375 | − echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \ | |
| 376 | − "error code\">" >>$@ ; \ | |
| 377 | − done) | |
| 378 | − @( \ | |
| 379 | − echo -e "\n<!-- Subsections -->") >>$@ | |
| 380 | − @( \ | |
| 381 | − for file in $(MEDIA_SGMLS) ; do \ | |
| 382 | − entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \ | |
| 383 | − if ! echo "$$file" | \ | |
| 384 | − grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \ | |
| 385 | − echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \ | |
| 386 | − fi ; \ | |
| 387 | − done) | |
| 388 | − @( \ | |
| 389 | − echo -e "\n<!-- Function Reference -->") >>$@ | |
| 390 | − @( \ | |
| 391 | − for file in $(MEDIA_SGMLS) ; do \ | |
| 392 | − if echo "$$file" | \ | |
| 393 | − grep -q -E -e '(func|vidioc|pixfmt)-' ; then \ | |
| 394 | − entity=`echo "$$file" |sed $(FILENAME)` ; \ | |
| 395 | − echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \ | |
| 396 | − fi ; \ | |
| 397 | − done) | |
| 398 | − | |
| 399 | −# Jade can auto-generate a list-of-tables, which includes all structs, | |
| 400 | −# but we only want data types, all types, and sorted please. | |
| 401 | −$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml | |
| 402 | − @$($(quiet)gen_xml) | |
| 403 | − @( \ | |
| 404 | − echo "<!-- Generated file! Do not edit. -->") >$@ | |
| 405 | − @( \ | |
| 406 | − echo -e "\n<index><title>List of Types</title>") >>$@ | |
| 407 | − @( \ | |
| 408 | − for ident in $(TYPES) ; do \ | |
| 409 | − id=`echo $$ident | tr _ -` ; \ | |
| 410 | − echo "<indexentry><primaryie><link" \ | |
| 411 | − "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ | |
| 412 | − done) | |
| 413 | − @( \ | |
| 414 | − for ident in $(ENUMS) ; do \ | |
| 415 | − id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \ | |
| 416 | − echo "<indexentry><primaryie>enum <link" \ | |
| 417 | − "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ | |
| 418 | − done) | |
| 419 | − @( \ | |
| 420 | − for ident in $(STRUCTS) ; do \ | |
| 421 | − id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \ | |
| 422 | − echo "<indexentry><primaryie>struct <link" \ | |
| 423 | − "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ | |
| 424 | − done) | |
| 425 | − @( \ | |
| 426 | − echo "</index>") >>$@ | |
| 427 | − | |
| @@ -1,171 +0,0 @@ | ||
| 1 | −iVBORw0KGgoAAAANSUhEUgAAAlgAAACqCAMAAABGfcHVAAAAAXNSR0IArs4c6QAAAwBQTFRFAAIA | |
| 2 | −CAICAAQVEQEBAgsAJgECAAogAwsTAQopHQYBNAEAAAxNARQAERIQAhoDABwAABZEHRQKGRYKQw0F | |
| 3 | −ACMBACUAERwpHR4cVRAFBR5rZhADACR2JiIhBDAGAiWGgQ4AcxQABDYACSeQMSYlJykmESxYlQ4A | |
| 4 | −PSYZIS05OSsJHS5JOC8kAEMDUC8SADXLNDUzADbEAEsAADX/2RABCFIAAD/qxB0AAD//BFgAK0Vp | |
| 5 | −WT4r3hwA3RsTRERAAEf/5CIA2iYCCUv+WUgz7iIAOk5g3CgVSU5SiD8uB2sABm8AE1X/U1RQOFyL | |
| 6 | −4jkfIlz/RV98M1j+G2H/fVk23jtD4T0pXl9ieFtGcV894UIiYWJfAIwA50gOV2p+4kssO2j+dGZx | |
| 7 | −bG1qVmj/OHH/aHJzfnBX5lQ7B50AZnahdXd0AKUG5V1ARnz/6mErCqgAAKsAent46GBIW4GhAK0A | |
| 8 | −AK8B42FtALIOin9/ALUAiIOBALkAVIf/6WxWg4eBi4SKJrEAmoVtdY2geoP/rYVXhoyOqYVuJbUh | |
| 9 | −IrgWX5D/jo6J7nszP7gAsI9S63xnN70zZqO/fZzCOb4+cZr+64dy8otYnJ6b7ImDRcM56IqcWMEo | |
| 10 | −oJb/N8ZoTMRL7Y9/QchcsaOTo6eohaj/7ZqKXspXj6v9xal+oK+7d7vTUM+Afco5r7CumLTVStKV | |
| 11 | −bs9ukbb/9qx/9q9l8queoLv/e9R66beG7rDImNRhi9aDwsPAs8bWzcK2cd67jtqP5MWUodyB8b+1 | |
| 12 | −tMr/z8L/j9+kbOXWnN2ZstD7yc7Rzs7Ly9xb183UwdD/+si/qeOmvuKIx9fj4tPCtuWiqOrL+tS2 | |
| 13 | −y9v++NPK2dvZt+m0ueq80+Wo3OeSwuy/yezG+d7f/eS/z/DS3uf/6Ono4PC71O39xPb02vPZ/+nR | |
| 14 | −+Ori6e399+vt+PGz+ur65fL55/Xb4vbh7ffX/PPY8vP9+vLy6Pf36fjr/PfM8vjr//f+/vn48P36 | |
| 15 | −9vv+/vzf+fv4/fvu//z7+v7//P/7/v/8//QpxAAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY8AABWW | |
| 16 | −AQ2TT8cAAAAHdElNRQfaCRQXGSltwbPRAAAgAElEQVR42u2dDXwU1bXAZwEJtEaNH1nbh68fpoWK | |
| 17 | −iE1ao2Bgo9RqIrEg+BIFmqLYLOlMcHHlU6DiQmrJM2jKo0QIBHgUjD5ETcQIlKq0gKDmA+UjiRAT | |
| 18 | −BCOBkGzC5re/++6987Ezszszdzc7s9jfPa2wO+zMPefc/5575t67Z5hB/0Ek/W668xckcmVmQZ5S | |
| 19 | −CvLmgshl4QCiZu+8ntCOgWlzVfrl5ZZFrl6T/VYSv9x5K3Pj9wnkh9fFFxQE6VcVqXY+8PjgH5K0 | |
| 20 | −+/0bBxDaYcsN0i+vLlTbzH9kjEknkEF3zptjLPPmXL2VwGC/nxysm+YRyc+/S2bHNYUgmtJkf5RI | |
| 21 | −vScH3HEvifz05mhqB8G68d6xJO3ecSWhHXYfYdvM99LHGEv6mEF3zmFJ5Gr49e9qVUh7O/wP/w/9 | |
| 22 | −gf4EXnKwbpjNGQs779bvktlxzULg7TCQzvDAItBvzqMD7hjrMJaxPx0Cv3OdBvqFBRZJs46xCCwi | |
| 23 | −O+xNwNfSclom6F2L4j1A/UsG1hgI1jyWUzLEKf/gX0CwevIzsvSlJoyh8IY5LmPhEFhEhsCI9b7L | |
| 24 | −oy/uI2GBRaDfPATWaGO596dDADhioJ+7PKyI5SBoF4NFZAcEa6ZjvL7MOg9MAWtPxv4aHdlfM315 | |
| 25 | −TMHy7Gg4pifN5cUxBMsPisub9dRrqHc1xBCsC7vHH6jVlQOO3eGBhccc9B+rGIWkP/ALBNYEA3uX | |
| 26 | −xxasooMGbVaWxhSs0kr9Njs8zbEE60C2UbOTTAOrR6/ZHjB/ZWzBet+gzR0xBmuHfpttsQbLIEP2 | |
| 27 | −ZpsGVrsBWMspWBQsGrEoWFEAK1UUDbBkQEkJu+Ko+WDxDRmApWmH+WCF0u/bCFYIMyIHK30CL1kZ | |
| 28 | −Y1J17wo51snhW1/4d9BdoZlgcZx7mcezzM1yemBp22E2WBzL66fsExVYjmxBxsNed1gHVra8XX2w | |
| 29 | −WBc2A/4dDbCSp4v/2PrGb1L1hkKnZ8sRNFH39cel6K1lQyFbvLcZXf3YrmWsNlg6dpgMFltc3dAN | |
| 30 | −j3+zazWrCVbKBun8ltcfS3FYBpb0D721L+uCxXoqxO5VfEMiBmsa6BL/+UxWqhZYMFytPSVd5yMU | |
| 31 | −qKxJ3jlub7f4D5f+xmqDpW2HuWCxr0r69b7N6oAV6JsTj6VYBpaciP9L0QaLVXQv13ewUqeBdjyS | |
| 32 | −ZM0/Cf6uBRbkak03uLSraBHnWfsJAJ/LEi2TIxZs7bPyZS6XZwu0XEaWCiwdO0wFi3sXgC/K4QDi | |
| 33 | −qfhEoV8QWNtT8FLK+L90gddHWwjWjNGw1dG/mgW7/jFNsFjYvd/sKnK73Kh7P4oSWHw3JOcDkJGq | |
| 34 | −BVbxBfD5IidKqpzOV/3gb05rwGJfRXEAfYM41nMKfMXpgaVhh5lgsVsAeJvj9YOMXVrE6YAlvHwa | |
| 35 | −XJSFLJPBOg8m8W2lpLwFQ5YjNFgc6t45OFCx0OVgNRu1iIVEByznu+ArIUixnPMfKGRZARaCSRpf | |
| 36 | −ENx/4wwiVgg7TASLc52CA4f4BiobCFmaYDlSusBUC8GaGgC6VgssFnavS3QtC7uXiyJYMP09o5m8 | |
| 37 | −O2GfOsW8il1TudoisF4FX8hGvy3lc1yGYAXZYSZYa+RBitvy9hyXIVij744RWP+jDRb8ygaCFLdm | |
| 38 | −x7KoJO/tyWj2Jz3/JPhjssY8lnNL91cvsNL8KOtk1fNY5iTv3D/AP2UJMaubvGvZYSJY8Jv+T04+ | |
| 39 | −8eAyBCsFdvBXVg6F2UK7k85oDoUs7N5FsiwjSsk7v5cKkqHsD3nEcm4BnznxHINTENaaCVJpcBGn | |
| 40 | −zXQilpYdZoL1iThSB+kXBNbu8VOhzFhwAICXrUzeF2RPnTpp6qy/nAG9YzWSd5gpfqZhRl/AkpjY | |
| 41 | −P0HrrtBZDQ468ZuKHVgqXdYk793Ag4zkllXyDZfq5FhadpgJVjMoxZ3g3sHrV84ZzmMB8LpjdCym | |
| 42 | −G3r/oDXdwFaD97EZHG9FxQ53VHKsadOh5K8/q51jYbDwC/FSiywFixX7/Sirk2Np2GEmWA2gHOvn | |
| 43 | −Efe3aCfvXiTA27J9lpVLOl7cLvyH2g2PaU6QSmCx4mXcXDTASkaSmpxxEvw1VXsofBLPt79/9AgU | |
| 44 | −2DJr5VDIFh2rh9IM6vXA0rDDgqGQW4b1awAN+neFvzoDvpTPjlqVvD8Nw+ToFG2wxKGQO3gUmnEk | |
| 45 | −GmAlS/M/Y5KXg5pkLbD45F3IsdhgsExO3vHS5JMV2mDp2GFJ8o71KzYCK+VhSJYjxXKw4A0DeF0P | |
| 46 | −LDF5xxOVXLQiltg384PAktaanxSmG+D9AkrtEFhWLEKzr4Jv+FsUNOizO/QjloYd5k439C6SVIID | |
| 47 | −doPRPNbTXeA96yPW6JS3AFCkWMrpBg/qXmmYcEcbLO2IxTrfBRdfcAqYOZ1WDYVozvGf0s2vkxAs | |
| 48 | −6yIWGqs/l9ZsnWtBsxFYKHa8bOEitDiPBQfhc49prhWyqHuliWhX1HIsvI1JL8eCMJ0CF1ezeBxk | |
| 49 | −iz+xLMdCSyYfzRZugbd0gCO6OVZoO0xd0lnTDT57QdiktqYDtBnOvMPYcc7CRWhpghSmWW9qgoVW | |
| 50 | −EC6u5uMGh7s3KmBNQzJ9+UnQpTnzzjmLTwHwRUVxcemWBnjnusuqRWi0ctX5cXlR8dq9HQB8s1pv | |
| 51 | −SUfDDlMjFkxPQO/H5auKy/e2of0XhmuFKQ93gTctHwpHO1ColA+GqkVovntXFQndG5WZd0m6fqe9 | |
| 52 | −bYZzej6RPvjZ6qAJUtP2vLNrpP0c53bNYXVm3rXsMHnbzFrJL727XtCbIA0srYA/pVg33SAu6dx9 | |
| 53 | −BpyQ3Teot80oujc6E6TtWBpr1mfobPRDUrzlSEfH10d3FcEbBws3+rnX7m3o6Pjm43K9jX46dpi8 | |
| 54 | −0Y9zFe891tHZ/HHFMo5zEawV/uo4+HKsVWCdli1C+2F2p7nRj+OK+O7dUeRio7vnPdVoazIr3/Ru | |
| 55 | −4dZkce2bI9vznmr51mRh2wd72e95T9HdmhzKDEt+paP4MQX9+Rf9lU60wKI//6JgUbAoWJczWMRF | |
| 56 | −QehQSMEyJWJNM7B3eYwj1re8KEhnjMGaZNSsaUVB0tcrZaPqbVaMyxiVVlcqRP22KLZljEqLlApV | |
| 57 | −q97uiG0ZowOOVzboyitmlTECK6fly2V6fr7qfXtMwTpaVKyUUtX74uYYggVAs1o9lX5F1SCGYDWB | |
| 58 | −l2bMVMos5dsZL4HwwTIQFwYrmmICWNEUM8CKnpgDFpmEAVZQM263+shsl1ZxWz/6H/oD/ukPC6x5 | |
| 59 | −s42L6s4mrEFqClgkRX8hWPeONRYzwBpN0i4Ci8iOkGB5Q7xjbP2CZGDwoX62K29Qy/U33RB8bEDS | |
| 60 | −SLUkpfUlYjE3EMmVIewIJTZ7sH4FfQHrqhuuV8tNQUduuJrpTyQ228hg/UoiByuXsN3+A64OtiPE | |
| 61 | −kauYEP0bslw4c9MD9xPIA9d/5wc/JJH+uWUlaunL6Di3P1GzPxhMaMfV920N0q8qcvVO27/34/80 | |
| 62 | −lh9/b8D9D5DIz+3B7ivZFzlYv73+AaKG7x9AaEd8YbB+IUdH5hdkddR/9H2iOuX3XrE1ujnW3O+Q | |
| 63 | −tXsdqR3PRnko/GUGQXX5jNsYjki9B5JIWvWSg3UrmVtY5jYSO9J/SV7n/efzOJKsDYI1mkSugOGp | |
| 64 | −7ai+HAsLrLEE2afj3uvI7JhzEwTrgJGEA9ZtRPXlbx/wJMlNCA/WfgNpB/4wwCJyy5PM7UQ56u0w | |
| 65 | −x2o7YtC/bSaB1eZx6xcqd9XHFKyXpLpnGuLYQBwTog+WF7wmlo3TkIzp7SB2YJ027F63p80csOoX | |
| 66 | −dXR3aksHKC2PKVjZG8BpPQEvzYgpWPkrhd1koaWnJqMmhmCdqXd3dOpJd4e73hywjngM7C2viClY | |
| 67 | −M7YbtPnKrFiDpSutWY0xBcuoe4HHNLC6KVgmgtUYa7AM8ncfBYuCRcGiYH3rwRJ+UKYLVookVoLl | |
| 68 | −0Gw3FFgh7TAZrNRkQVKNwVKXCLIIrNBuUYKlZUZfwOJYd3FpeemqZawOWI4VCwSZ6bAyYk0V2501 | |
| 69 | −VVnzIBgsDTvMBSt1+vL5WPKVtZNCgMW6iqB6pcs41lKwtNyiACt1gmjGNHWZ/IjBYj17+T0jX+9a | |
| 70 | −xGqCNT5wlZbXrQMrJUBEb+0f5D9NDwJLyw5zwUreLx4/80Z6qg5YrGvLMeykznplPXiTwZLc8o3K | |
| 71 | −LQqwkqX9cl5VdbGIwWLXXIDGNjc0dwBwSfFLRWXEAoB/NN3xLgBetw6sDeC00C5UT/5LXjVYmnaY | |
| 72 | −DNYe0IoeydgIe75GBywO/SC0t62hARXpV5S7NhcsdouWW9RgdfFm+EGXskx+hGCxW/yoTjnHch6o | |
| 73 | −wsUXdMDi053Rk94CQFFewmSwtgsp1oIz4M2xmmBp22E6WCtxapK+shv8MVUTLM8p0LurCFVRXauq | |
| 74 | −B28qWKj2hcwti3TAqklORRlWvrpMfoRgeU6Cz4VfvqLyDB+x2mA5UCV62OV3v6V8xoHpYOHC+6ic | |
| 75 | −9CUZ0CqwtO0wHaz1yWPSUfb7GngjWQss9l0UL4QSVKgevEVgofrtvFtw9Y1drA5YqenIjuT5UqGx | |
| 76 | −voCFCnzPFltzvgo+l1XADwZL6Oy/SHUIrAFLfH0azNACS8cOK8DCr1aCPVpgscXdgSjFek71yoqH | |
| 77 | −mAkWrt+u4ZbgiKWuYNcXsIrlNe9dntJlLpcxWG8pC+JYBdbDivroSrB07LAALFw9acwH2kMh7ODP | |
| 78 | −ZflN6arZ1kQsPbeEAAvbsTIaQyG79pQ8HXEpCnyHzrFSUHGJP8Ugx4Ij8InHNHIsPTtMB2vjmIyM | |
| 79 | −jKzpe5QdohwK/6GsB29R8q7rliCwxmRBM6at7z7zm2iABb7RLPCtBmsFlld2A/CplXeFtQtwuxvO | |
| 80 | −AHmxFDVY2naYDpbU+2O0wTolPPmBcwbVgzcVLB23aEw3gK7fJfd9uoEtB8f4Osw7ULnc+vpjHlYL | |
| 81 | −rIDjP1UW/jUZrIC8PFoTLB07LAML7E/XBMsnlBUv4tU7uoO1BKwK0S2VQrsezhAs0Pi71KiB5XaK | |
| 82 | −v6srZnXnsbygd/tMVWFnk8FqOYAnsb58KVt75l3PDvNzrFS0E3nCym7FWKgEqxsUadSrNxUsyS1t | |
| 83 | −wW4JcVcIBT2VrysKEWut/yIfossr0SMJOsEqVjfHelo9O2pRjvUW+FJZ9Fc9FGrbYdFdYWry/G4g | |
| 84 | −G0XUQyFOojkPUq/iiKxIr7lDodotRazBXWFqctZJ8NfkKCTvwnQsXw65Qw8sNI/FFwxPsRYs9BzH | |
| 85 | −46D3MZ2IpWOHVdMNY1JrwHwNsHTq1ZsJFgfd8oLCLYZgwZfrFfNxkc5jfSKfS2QNwBIKhv/J4oiF | |
| 86 | −XkxCFTS1F6F17LAMrGRtsFhUDz6g7A6LwFK5hbMQLG4NWl/gxJKMHXo5Ft+vdx9XFQy3BCx+ENZe | |
| 87 | −hNaxwyqwUtNPakcszyk0A87x6jmrZWXFzQULAh1wC8z0VhmClZr6RjTAQlN34O1l+HET7jUNQIa0 | |
| 88 | −BlgpDwNFOWmrJkhhqOzVWYTWtsOatcLk5DGvgTOy/Q2qJZ21F8AXq92ouoq7aK8ffMxatFao7ZZg | |
| 89 | −sPj9WMv9QHFbGCFYnAs23ftxZcWOgx3oOezGM+9BT8+waOYdDoafai9Ca9thOlh7lq+Esr4GKJJe | |
| 90 | −1SI03nzxBVSvGpW9/uwFa5Z0VG659LbOPFYjNmPlHgD+nhyV/VicVEi996NlrM5+LLG3YQ9flG+6 | |
| 91 | −Mxms3YFnGsufIBm0H0vLDqv2YwGwUXc/VvFe8XNflLo4y/ZjabpFcx5rf3qUdpCyruLqg0cOVpe7 | |
| 92 | −We2Nfo7aA9Ja4YLa2plWgbXi+EvSIvT22t1jdXaQathhMljra/BPlfe8sVK5jSloBynLeir2HqlH | |
| 93 | −5eBZ6/ZjSW6pVLtFCVa+YMaejdNTo73nnTXY8x76tfl73h2ybfcke97Z2Ox5Tybd887FZs87S7bn | |
| 94 | −PWjTu9m/0nE4ZC8dlu15d2i1e9n8SkeonfFt/5VOuoYd9Odf9OdffQKL/q6QgkXBomBRsPoKlo+C | |
| 95 | −9e8MllGzZoFV7+4EPm3pBqWxBSt7A/DqyWVQxqirpwv+H/6BRfybF9AY4zJGHt3u9YFOs8BqVlfi | |
| 96 | −KlIXXjsYU7BWOCYpC61NUr6f5NhArJ4ZYK1Pn6astKZ6mzWtNYZgnf7aYyjNPFizSeowQ7DGkgiq | |
| 97 | −QdpWf0QhR5Vv64+CcMAiaheBRWZHqFKRu1UCog7WbQOcROWucanID5RSs3+PUlrDKhVJ5BYnQ2iH | |
| 98 | −vQl8repetdTj/ZXMreyTBML+6EbHHSRyRYmv6fQZlYDI5ZnvELU7+joyO5w3PXO+6YJKuiNXr8l+ | |
| 99 | −+5hfGkv67cyjThI3329vamrqVYu61TCK2/6IzC2PwohFYAeMWB8Gd29IdZgBVwbJVVcFHxtgG0wk | |
| 100 | −tiH2IBnZB7BKCNu9NpQdwYeuZOKD1IvP7QNYSf0GBsmg4EP9mBC6XB3iWLB69viIn3ngA8+GajeU | |
| 101 | −MKR2BOtnD13nPbNuH4HUjcwl+ty+pMLgz9X1BayRZPpl9sGOPujXNKSs7kNjqSuzV5HoV1eYFOJo | |
| 102 | −U+Rg5RK6pcreBztCTgIwhF/XtKVkn0siqfPeRe6bQsLHWuROJrRjIYimNNnJqKyznyf63NakaGrn | |
| 103 | −Azk5ZJ/sIraDpM67VwCrcf1GXVnfDjtkLgANldX6gsAqA2C//vXWv0acJPBgvW/QbmUbADkQrI0b | |
| 104 | −CewoAJ1GZlSHAxYcB+r1L1gJ7773oWfQbDd4HNsBASwD7SobwgLLf3yDgWzn7TDqXtGOAxsM7fBi | |
| 105 | −sHqmTcifriP5WfkYrA6P+nlsKnFVYLBqMqZN15X0jWFFrGqXfrPFniIfAmtlhq4Zgh3PglJ3qbEd | |
| 106 | −YYBVb6Sfqx53yAbHzBm64qiFYPlAhUtfvyJPWzhgeWdkz9JtdqZjA7TjX4bdy9txoXb8jBmGdmCw | |
| 107 | −2rMMJtzemIDBanYbGFRZjMHak2VgbziP7oVgVRg98PSYuwOBZTRjzdvxLPAYPmG1OCywqosMPlRU | |
| 108 | −jcFascDgc9m7MVhGj+7tcDeEA9bp8bUGH1uwAoH1tbuDxI4LB7KBsR08WBP2AP6Rb/5QAjtkGg+W | |
| 109 | −0SNj0bOUk/hnQoe8EN9GTwRg6Q/sxzydAlh+YzuejfIzoavA+0ZgreLBemmBfgrgJQQrnGdCQ7DO | |
| 110 | −Zx8wSIh4sNoMA+EqASyyZ0IjsPYbfNPDBSuKT7EnilgSWAR2ULAoWBQsChYFi4JFwaJgfVvBajcA | |
| 111 | −azkFi4JFIxYFi4JFwaJgUbAoWBQsChZN3ilYNGJRsChYFCwKVphg5RCCVUAG1pCS6A6Fc0eSgNUB | |
| 112 | −cu4jBKsgumDFE4IVTwZWmT3KYGWC00RgxROCFU8MViEZWLklZGDlVEU3YpXlkkWswgIysKAdUQUr | |
| 113 | −s44IrLpMMrCqMkFUwVo4lzBiZf7raxKw6jK7ScECRGChaxGBBSWqYEEhAgsKCVjQDm80wUJCAhYS | |
| 114 | −ErCQRA8sLERg4e5tI7Jjd1TBQjuiiMDygegOhfCCZGD1kEUsnzeqEQvZSwSWjxAsX5TB8hGC5SME | |
| 115 | −yxdtsC77iOUnAwsKjViXU8QKC6xoRiwKFgWLRiwKFgWLgkXBomBRsChYFCwKFgWL3hVSsChYNGJR | |
| 116 | −sChYFCwKFgWLgkXBomBhsGoIwTIoR1IpgmWg4PIwk/dygw80IMUgWOsJwTKsNhNlsIolsPRlkgBW | |
| 117 | −pf7HOsIFy6jazIoVRN0r2LHbsNrMJBGsjNcaa3SkcT1fl6jBVd/coCNtFXz5nz0ZNcrrqa7emB8m | |
| 118 | −WMVtDbrtHnR1oC9e/nxdMyQ7PJUG16soDku/ao+uWxqaPTwpK2Ycr9WV8TxYxeW6+jUfcTWEo97p | |
| 119 | −8dv12z0+cwXfvUeI7Ng9vraWwA4IFliZkaWQaRMUbydk8KHAV+7WL+8t1G9vn66+nvJtFnEBfGGk | |
| 120 | −W2RQVhwXSvNDoLN0RbSj0uUhsoNUDOvaCxGmdrxKpirfOma04M/VG+jnLveFpd8Kh7Kd7Gy1IgeI | |
| 121 | −ulewo2WG6nrjs0PZwaCa4Y2tja2tjY3wL/g3fo3+j9/gF9LorpQO1Xt+jPaDdnxuo3AJ8bKyNkjr | |
| 122 | −lIuxv81AhM81tirsaNWyo43wepHqp37fKeQyLcdb9OT4eSEHazO4XpjqAf1moVZ8uz4jt3TyZpw3 | |
| 123 | −uh62gyFSzQ8uf/H/m9jxbyIMdQEVChYVChYVChYVKhQsKhQsKhQsKlQoWFQoWFQoWCD0g0V8fvUL | |
| 124 | −2SdDbKDwmqqu1xtQQd1SqCNBp/WYrKDkpR5/kEt9BKf5zFscUDTfE/zSq+llXwTdq4hYWwvmIlla | |
| 125 | −8o786M6SwmeXbj6ruOjhrYVzl5YdEo41FSycK5z5odnfhJadJagZ6XG7hULLSBm0ZFNXoDgiSi86 | |
| 126 | −benmdtO/qYGGsGuqeJfOXbi0rJVfUtonOHnp5h6VlxeqvRxlrsokXTa3KjpzHWq6Sd408vKzopel | |
| 127 | −M5eWHIpsKExjBIkfd1LEc93wBHxo2JRuiebD9wyxoWOJ4w7hz9QxktinmNp3LYtvxi3HD1si+EFs | |
| 128 | −2JY4hf9yyHXhu9ILehcPF0/zmxey4IV7BXfFDVvSjRvKlanzIj5SKB0Y9g7Q8rIpYKUxoZremZYg | |
| 129 | −eOuk6JqAlzerzhTACBesTGZkDpTJsKlbeANbHoH43Dc5J3M4w9wiXvP5BCYOHUuzMQO3ocel1jHx | |
| 130 | −OVgyYf89ZOJ37vBQ6JP7YDsJjO0hXsN4JlNs+SkcIhi7qAsDj3Sh074cJZ3G3GVaz6H9C7Ahu+Cu | |
| 131 | −u86iYwVMkqBOAtNvG3JNCX9kMjww6JD8tEzey2dN857QvTk5sH8HviN00xM2Ji5tMvZfIj7mlbyc | |
| 132 | −hrzs589ME8Eg9Z8KrBL+xbqh/V7EcX0iE7fkEPrWt6yTrvmcjZnyYQ+Ol6OYQTU4YsVLEaV/3Aem | |
| 133 | −9dyXI5jEzdjxdYttzO9xOLIzTfwQ9Hx/rEsVIz7bvOURW2KNeNqSJv60BHiaecPgKNjQId4PCcyD | |
| 134 | −PFjis5EPj7Jh1kqYTOHACPgRv+RlIHj5Qb95YJWIugy1Pci/eo6JEzpz3XAhdEB3DdvcJHr5KcWZ | |
| 135 | −6wbzYIQNlvjA9CeY3yKbN6GQJMh7gxkcGE8k2J4Sj50bxUzhwRLzu97/Mq/n4LWlqAnxjsOv7cw+ | |
| 136 | −4V+HM1sxWElisnnpZ7YXkRXPMbdIucEm4bToC24oUcpON/W3HVKABb66FkeoEiYNKojo2cQMA7yX | |
| 137 | −A6dBL79jHliFUjPMNThlec8WJ4FyYiizJNjLiScVSCIwIgfLDxZiPHqHMjI+JyIdusAjzDi/6Enw | |
| 138 | −pu2hs3Kw/HJPRrvjDg+OCzj93IjEDySwvH6o2HDbZgVYXYI9h69gtgXgHJG4zaxtWS3XMbJrTxy4 | |
| 139 | −TeUO/jvAg4XzdeYWrNJ1zIuB9GFi3IsWgNXL2M6jUW8UzFykf3+OeQpqj73slcYI6OUAWH6QRxo3 | |
| 140 | −QkescyP6ob54b8A1rYF/PXcIJiz+iz/jUwW+oUsfnvdaFrH+zPwk0AG9hw95gWwohN91/EWTR6x7 | |
| 141 | −bEuE0wLSiawwR95kftKtcpccrBPX9jskHwrBRD4rhNHjrPo08yPWoPNYpUEBiADsTOyuu4CkQm8n | |
| 142 | −9LIsYn05ot8HEYGVu68KyrpRcLSDt3+/tj0l3HBCEW6Ot18x7JR0DM+6+GU5Vi/MsfaY1XG/Zv4X | |
| 143 | −KNThc6wSrPPihMRtQJFj9T5iG/gBPu2/g08zI3VXNCT0TagcKw0rvPUe20N4UgJ62a/2sgU5Fmpz | |
| 144 | −Q/9xFwKdqeVldGYeD8bQuCWE92YqsEQZ181rsjTohHXMfUGXhmAVYMk19a5wKBNiGiU+XtSZn26o | |
| 145 | −YobMRark5eK7Qi867R1ggfjguLI56GgBM5JXJwfeSgt3haLGiYcwj6G8bBJYabwu8IZ0IJ4oeoZ5 | |
| 146 | −POj7EexlnwqMSMCyJyEZYkP5G5q+4BH3jeQlTYjkXlxCPAkfS6rDYEkTHQ+1muYaO1OHo03VEL7l | |
| 147 | −PB6sJEFnfGsMwZJ0ieMjwRCmisdfUDgH+MzpuJH47gGAJqGhTHisIDB3lMinEBAsXuEEG8zZ/TIv | |
| 148 | −JwW8bBJY4pyfeLeQJ8bTNEFlH/DFq7xcgM+UgxF5jtWybiiDponE75JPpAb75T4erCTh4D4MVi6U | |
| 149 | −oTbhZtskuVn4LolzoJkibcJEBx6Jqhg7VCUnIT5xyVnxtHeEWMZLmllgpQkRS5wvTsJgjczLzc0c | |
| 150 | −HD9MnPUXcyzv4XuYRMXXV+ZlsyIWdE1mf2bcZiHuSBFLRA7mqwlBXg4Moi3rbmYe8kcOFkzuEq75 | |
| 151 | −AA23S7AGvq1QqgqZIfD17sHj+ByrCh3cahfAQkc+HYxaNW+x60Zh9G/C6uSIYO0Tb/ZtP+mRcqxN | |
| 152 | −trglqtSMPy3XLLACORbvLogUBiuXny5KFO9MA3eFJ0b0ezHotELIo6k5Vu9E5hYxY39ezLFwZ5bF | |
| 153 | −I7DUXs5RpP0QjJo+gNUDhjNl6DZHfldYh8E68bNB2xTD077AXeGmBHT3ahpZf2YelC2eFirAQvdT | |
| 154 | −TL/zgbvC51CGhXVR3hVuNQss3JDM9io5WLA3+21TgyVMCilvJveZCVYh8si5UWjePYBJICXGEes5 | |
| 155 | −6OUumZdz5Gm/X5gtjBSsLhif4fmXZPNYfvAhAgvNYz0kW65UgAWet9leNAsrPzjcP64m8G6pGqxe | |
| 156 | −xtYjm26YaBO6Ep4mZu9ePygzD6xzV0jzWLChrXKwwLkRaNxTgCVOcp2TzbMhL5sLFpozGMrccoEP | |
| 157 | −sqOYpwJN92CwdvZPVHhZAVaXlEhGOBQKcUk+lQzvB6/FlPfv91RgkeVaOVj+XvhlOGkWWTiIB67+ | |
| 158 | −hHoofNP23XYZWOew+/zq0xabB5Ziih+6Sw4WzhOE5F1U4NJE2+9BsJeHmD6Ptckm8iRfWgGH8awp | |
| 159 | −dNddSi+LYHl5MPZHApYAZssjDB58YSOJwlrhzidsaAUCyNYKfXWLb7bZ6gJgecGJwba7zNs+EFjF | |
| 160 | −atl5j42ZrJggPTwUeyswQWjMGXEAAAJqSURBVPpef366gV8rPCuddp9pYPGLkry7HrEx4+RgoTUo | |
| 161 | −YbohU5zzs/FBLMjLfpPBgtFcXISeKK4Vnt+3OMEWh159qvTy44oJ0ntIJxxUYKUVoNu7nOEMjs5e | |
| 162 | −YXcDOmJjmHHC1/F5G9rdkItWv6EKfsXM+3MMs80srsR1d3hnAxWMm9LKg5WTh3TOTGDUM++PMGgM | |
| 163 | −9PrA4VH8adiKKa3m6Ye2UUjuwhMvAbBganNLK45YSdjJuXg/hh97+Z4QXjYTLDgY3iXQ/QQT6Mxx | |
| 164 | −7wS8PFn08ln+fhI7OedmJo5wUjD0fixmmLRss244nhey2ccJW3jwfqwEfr/OyCU9wv21CNalEcwg | |
| 165 | −8wZDaacQY59yiE/NmcBWITznt5Wxi2DBACJsQhH3Y/GnmSi968SGkLu8aD9WjrSM0h9veAjsx7Lz | |
| 166 | −82z8Nq74wGlmgZXGzBW/AZsYKbkS92PF4xiBs4qWxUPkXvaFBCMcsEpy87Aod1ruLJlbwG/HlO0w | |
| 167 | −hMcKln4oZDdNuXmBT+dONm8XKcqYdhbCljdLq2sFvMoFS/mOBHU5c6UAsi53ssiR+jTzBDaUt7Ss | |
| 168 | −SbwJzSmTdH8+93GYX1TlCE4uUygDvZyn9nKUwSrJqZLePZO7tNsrtHUYdTDuTG9IL/tkYBAvORnu | |
| 169 | −eff6Zb0qSo/OcADM3Pfu1VHWq3fAr2djlNlXudQXdCTYjV4L6uCodfEG97RwSL7nXa2zPwKwqFCJ | |
| 170 | −mlCwqFCwqFCwqFCwqFChYFGhYFGhYFGhQsGiQsGiQsGiQoWCRYWCRYWCRYUKBYsKBYsKBYsKFQoW | |
| 171 | −FQoWFQoWFSoULCqXq/w/gbudjI6bMwYAAAAASUVORK5CYII= | |
| @@ -1,59 +0,0 @@ | ||
| 1 | −iVBORw0KGgoAAAANSUhEUgAAAlQAAAFYCAYAAACVsmLPAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A | |
| 2 | −/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sLCBIAKVtZsMAAAAxxSURBVHja | |
| 3 | −7d3ZbqvIAkDRLsv//8v0QytXvpYZap7Wko56OAnE2AXbBSbhOI7jHwAAkr1sAgAAQQUAIKgAAAQV | |
| 4 | −AICgAgBAUAEACCoAAEEFACCoAAAQVAAAzb2jvyMEWw0AmFvh37xnhgoAQFABAPT1zvruwtNlAADV | |
| 5 | −VLxsyQwVAICgAgAQVAAAggoAQFABACCoYEohuFkugKACsmLq178DIKiAyJgSVQCCCigQU6IKQFAB | |
| 6 | −BWJKVAEIKqBgKIkqAEEFFAgkUQUgqIACYSSqAAQViKkwxjIAEFSwbUyJKgBBBWJq8GUCIKhgm5gS | |
| 7 | −VQCCCsSUqAIQVMBYoSOqAAQVLOk41lwXAIIKhoqqJyFUYhkACCpYMqpiQqjEMgAQVLBUVKWEUIll | |
| 8 | −ACCoYImoygmhEssAQFDBElHVexkACCoAAEEFACCoAAAQVAAAggoAQFABAAgqAAAEFQCAoAIAEFQA | |
| 9 | −AIIKAABBBQAgqAAABBUAgKACAOA/b5sAGjsO2wBgMWaoAAAEFQCAoAIAEFQAADtzUXohIQQbAYDi | |
| 10 | −Dh9kmYIZKgAAQQUAIKgAAAQVAICgAgAgmU/5VeSTGQDE8InxeZmhAgAQVAAAggoAQFABAAgqAAAE | |
| 11 | −FQCAoAIAEFQAAHtyY0/o4O7efe4JCzAXM1QAAIIKAEBQAQAIKgAAQQUAgKACABBUAACCCgBAUAEA | |
| 12 | −IKgAAAQVAICgAgAQVAAACCoAAEEFACCoAAAEFVBICGMsAwBBBVPHVE4QlVgGAIIKpo6ps/9utQwA | |
| 13 | −BBUsEVMpQVRiGQAIKlgqpmKCqMQyABBUsGRMzbouAAQVNHMca64LAEEFy0WVmAIQVCCqxBSAoAL6 | |
| 14 | −hI+YAhBUIKrEFICgAvqEkJgCEFQgqo4+3wuAoILto0pMAQgqICOQxBSAoAIyQklMAQgqICOYxBSA | |
| 15 | −oAIyokpMAQgqICOqxBTAvN42AYwTVQDMyQwVAICgAgAQVAAAggoAQFABAJDMp/y4FIJtwJx8ehJo | |
| 16 | −yQwVAICgAgDoyyk/HnMKhdE5RQ30YoYKAEBQAQAIKgAAQQUAIKgAABBUAACCCgBAUAEACCoAAAQV | |
| 17 | −AICgAgAQVAAAggoAAEEFACCoAAAEFQCAoAIAQFABAAgqAABBBQAgqAAAEFQAAIIKAEBQAQAIKgAA | |
| 18 | −BBUAgKACABBUAACCCgAAQQUAIKgAAAQVAICgAgBAUAEACCoAAEEFACCoAAAQVAAAggoAQFABAAgq | |
| 19 | −AACGCKoQPAs2JQAIquwCUAI2JQAIqowCOPtvbEoAEFQRBaAEbEoAEFQFCkAJ2JQAIKgKFIASsClh | |
| 20 | −szEKrDGoXkNuiOPwwim4iezYoc9+39iDfQbVq+mGEFOiCjZ7E23swR6D6tV8Q4gpUQWb7PeNPdhn | |
| 21 | −UL26bAgxJapgk/2+sQd7DKr3EDE1y96mUPT1fqgh6Ffosbsz9mDdQfXquiEY/rUKlBtLYgoqDJZB | |
| 22 | −Dmjlg8qRWlSBMSSmYLOoKhtUjtCiCowdMQUbRtXLswUgpkBU5XkXf9CmPJZ9nQJrft6Gife9XmC/ | |
| 23 | −t0mHg9tr3FcJYgrmjilgn8Fa55SfI7WYAvtnYKNBW+8+VLGn/zY6wtd4qDY1iCngx+BtdNCre1G6 | |
| 24 | −W3gPt7MXUwAwW1CJKjEFCzB2wODtH1SiSkyB/TKw+KB9DfnARJWYAvtnYKLB+m7+AJ+UgL2WTQmT | |
| 25 | −jz1jEJVf0ASD7jXck2/vY1PCQscwE+6wfkz1CaqrB6wAbEoQVcBkMdUvqH49cAVgU4KoAiaMqb5B | |
| 26 | −9bkBFIBNCaIKmDSm+geVArApYaOxZ4zCuoPq5VkDqL//F1Ow9qASVACV9/9iCtYfVIIKoOL+X0zB | |
| 27 | −HoNKUAFU2v+LKdhnUAkqgAZvqoG1B5WgAgAQVAAAggoAQFABAAgqAAAEFQCAoAIAEFQAAIIKAABB | |
| 28 | −BQAgqAAABBUAgKACAEBQAQAIKgAAQQUAIKgAABBUAACCCgBAUAEACCoAAAQVAICgAgAY3NsmIEYI | |
| 29 | −//3zONK/7u/v/nx+zdPl/1rO0++LWd6vZZ59Xe7jSfnZSq3z6jnJ2ValX09PHj9AD2aoiPJ34Lo6 | |
| 30 | −wJWKiJQD7N2BN/WAzbNtZTsCuzJDRZeD8XHkH3zPZo5CSJudeTKbdrX+lkE7QkzFbq8VHj/AGTNU | |
| 31 | −dDkY1ziw1jjY7nAA/wzKqxnIu5gSPICggoTIuDroXh1YRz3ohuCUlcgESOOUH81iZdR1fJ9+zL1Q | |
| 32 | −use1Y6nrvLsearR46rHNAQQVw6l14HtyOurJz5USVqs9LynXt8V+ShBAUMHHQfdzFuMsQGqHSW5M | |
| 33 | −PQmrVtdsjRCkOwY5gKBiGne3Okg5WJaMqbuw2uX5+P6aX4H8/f922F4AgorlgyD3hp47z3ycPfZf | |
| 34 | −p/FSb00BIKjg4kD8/cm4mFNjKfd/OpsJyb2GJ+V+UzEXSK9wAfuvqGr9s7ooHRiV2yYgDCe8xUOp | |
| 35 | −gHny2GNjVdwAOzJDRbUYSfnep8srfdCOWV6tr225ztzt3PpxiTRgdGaoAAAEFQBAX075sbS7C6dH | |
| 36 | −OJU0w8/ocQEIKjY2w0F71bAQTMBOnPIDABBUAAB9OeXHY36tCAD8ZoYKAEBQAQD05ZQfl3xSCwDu | |
| 37 | −maECABBUAACCCgBAUAEACCqgiRDczwtAUAFZMfXr3wEQVEBkTIkqAEEFFIgpUQUgqIACMSWqAAQV | |
| 38 | −UDCURBWAoAIKBJKoAhBUQIEwElUAggrEVBhjGQAIKtg2pkQVgKACMTX4MgEQVLBNTIkqAEEFYkpU | |
| 39 | −AQgqYKzQEVUAggqWdBxrrgsAQQVDRdWTECqxDAAEFSwZVTEhVGIZAAgqWCqqUkKoxDIAEFSwRFTl | |
| 40 | −hFCJZQAgqGCJqOq9DAAEFQCAoAIAEFQAAAgqAABBBQAwibdNAECqcPKLJo8fH1cNN7+U8up7jpOP | |
| 41 | −v6as//PvPr+/xPpTlsEazFABUDSmnsRTie/pvX74ZIYKgKz4+J55+fu7EMLPWZmU2auY9YsjejBD | |
| 42 | −BUDRmDk7pdZq/Vf/P2bZT7/2OI7/rU/ICSoAiHIVLS2uFyq5Dtc3kcspPwCairmQvHUghhBOT1U+ | |
| 43 | −eQx/fyfQBBUALBNrtcPmc/l/QYagAoDqYi9ib/2zPZ2l+hVw7Ms1VAAkKXXbgpIXkH9eIF7r8T15 | |
| 44 | −bEJLUAHA4wD6FQ5PPoVXc/0ll3/3db/+sCen/ABIio7PU3U5YfIdY0++78n6RzPqxfiUYYYKqh94 | |
| 45 | −rv/AzFGV8nelouLue3JC5e5XzTx57E777SUcsa+4zxeIo8HlOw/vOgBwLBlqA1drGDNUAACCCgBA | |
| 46 | −UAEATM2n/CpyQSIA7MEMFQCAoAIAEFQAAIIKAGBnLkovxI3XAGBfZqgAAAQVAEBfTvlBbXf3I3O6 | |
| 47 | −GGB6ZqgAAAQVAICgAgAQVAAAggoAAEEFACCoAAAEFQCAoAIAQFABAAgqAABBBQAgqAAAEFQAAIIK | |
| 48 | −AEBQAQAIKiBFCGMsAwBBBVPHVE4QlVgGAM29bQIoGFOf/30c7ZcBrV/zd6/Rq6/7fs1/fs3T5Z+9 | |
| 49 | −AckZO2dvaL6XeffGJ/XxpPxspdZ59ZzkbKve278BM1RQOqaeDvbSy4CW/g5WV6/RUhHRcuwYc2W2 | |
| 50 | −VY3tP/hzY4YKar5bfLIDeLIMM1WsOnaOI/9AeTZzETt2YmbTrtbfMmhH2PfFbq/Syxxk/2iGCmrF | |
| 51 | −1Kzrgplez78OpjUOsDu8qfkMyqsZyLvwSdleNZYpqGASLQe3GSpGHgNXB92r1+6or+sQvInptV+a | |
| 52 | −eF/nlB/kDv7aO14xxUpahErqOr7Hc+yF9y3Hbul13l27NPJ+aJBTgYIKRo4qMcXK46b2wTVlHb9m | |
| 53 | −3VpcXD/i85Kyb4v9lGCvZQoq2CiqxBQzvfY/ZzHOAqR2mOTG1JOwanXN1ghBunucR3INFYw4qMUU | |
| 54 | −K/sLsO9rlXKuXSoZU99jcfXxmPpp5LP7f5W+B9Ukz4GggtGiSkxBn5ja/UL0v3D5/nO1jyq1zWos | |
| 55 | −szGn/KDGTinnoliY9TV/FzZnr++U+z+dfcIw93qblPtNxVwUvcIF7N/7uZJRlbLMQS5KN0MFtQ4w | |
| 56 | −YgrWGberjs+Y21vExmqN/eDAz0M4jsifrtZ5alh5ZyWmAMbaJxfe75qhgl7veMUUwDIEFfSMKjEF | |
| 57 | −sAQXpUOrqJrk5nSwpLvT7yOMxxl+Ro9LUMFQUSWmoP348zN6XIIK7FgAWDWo/DZuAAAXpQMACCoA | |
| 58 | −gM7iT/m5BgQA4P+YoQIAEFQAAIIKAEBQAQAIKgAABBUAgKACABBUAAB7+hfHbDX87cMFJQAAAABJ | |
| 59 | −RU5ErkJggg== | |
| @@ -1,105 +0,0 @@ | ||
| 1 | −R0lGODlhuQJGAeMAAAAAAH9/fwCvAP8AANEA0dEAAK8Ar////wCOAAAA0QAA//////////////// | |
| 2 | −/////ywAAAAAuQJGAQAE/vDISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqP | |
| 3 | −yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaH | |
| 4 | −iImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6gQC9vr/A | |
| 5 | −wcLDxMXGx8jJysvMzc7P0NHS09TV1tfYxbth2d3e3+DRAePk5ebn6Onl4ezt7u3q8fLqANtg7/j5 | |
| 6 | −+s/z/f4B+wIKHAjsn8F09ex5IciwobuDEM1Bi0ixosWLGDNqrJhQIZdk/htDihxJsiTJiSZTqlzJ | |
| 7 | −MmNHj1q+tRznsKbNmzhzDoz3EiYWmTN7+vQJgOfQmN5mAjzKtCg9pj+TBoU61ClCqlaAthSKVZdV | |
| 8 | −dFy7NtHKMqxYW1/PmT2bhOzKtWxlpZUYF4pblXDrvpq7Tq+Tu+UGCB5MuLDhw4gTK17MuLHjx5Aj | |
| 9 | −S55MubLly5gza95MmVxev0EAkxsg8jNoVXNJ0zy9RPQ41RtNsz6V2vPstlLTwdYo+zap2qt9G3Ed | |
| 10 | −YLdL4bGAL0VOhLhxjL2Zf1IeXboM56Wtt6KuPXRudM8vVu+eiTt5H9hDjj9vyfyIXrTW80gfO4OC | |
| 11 | −+/jz69/Pv7///wAG/ijggAQWaOCBCCao4IIMNujggRe4J4IwBxBg4YUYZqjhhhx26OGHIIYo4ogk | |
| 12 | −loihMBbi1k084VlklgLsWQKjBRJqgIwEBJRyY4UqZsNidhjMGOMkQlLgnjERwkdBjuVpk2QFTB5B | |
| 13 | −H2/2DUlJkRNYhWQKUTKyJQpdFjHlcUFaSaQxo9nGQph/fCkDm0OMCV2VZh7iZpbnwCYfBnDKcecO | |
| 14 | −fXq3ojotckRnnXr8SQGWEtQIphuKEhEoEHKKdygHCUiQ6QEJdDrEphWA2oGo3UXaAaMHOHrCpFmY | |
| 15 | −2gSr6H2XJ5AXoHqBp5xyuimpPfCa6we+6uWqCaiqagKsTAxrBbLz/slqTqEUvWgBqLviSqqvnXpq | |
| 16 | −rbbZTpDtt9ziSsG3unKraabkltutWMq+UOyswa3A7A/tfjGvDpW6eKm3v+a667i38vvvuQLzW7Cm | |
| 17 | −AJ878L/W9ouuR/Xi8O6zasorRMRo3JtDvoaWOe2v4IIc7LUIE4zwtd1Sm7C6KZ8MLsmzYBzExIFV | |
| 18 | −rILGJsgcB843cBztvgqHWnKwup5s8rroVivwwEc3DHLR/jKcis5K0JxmvDezQLUePNvgc0TSBix0 | |
| 19 | −1OuG6nS56nob7ssqp132wuIi7cnWU1j9ms1chkD3IF3X8DVEYe9AtNi37M2F3cXh/WgFhjPSNw1/ | |
| 20 | −HxS4CS97MPjH/ts5uQfieqbQuCWPzxC5QZPncPnYoXz+BueKY+Bm6J3AHsPo/5TOmup5sB5vxLJv | |
| 21 | −0vsLtPtjO1W4D0Kz6r9nknwLwfczvFeam6IAmndjnfcsy2vtbM3qAT2KkhkULwj4SRITIbzLWYx9 | |
| 22 | −j9j82L3HvyljivzeG1tC9qCzf4379cEPigACCAYAB0jAAhrwgAhMoAIXyMAGOvCBEIygAVMVDBLo | |
| 23 | −Ln1ZWx8SmjeP521CAEYiXypAGML1XHBPF8BfJVToue1drX+1GgUJZTHDFJywBSycRA5PwEF5eFAT | |
| 24 | −NYRFEE9wwzXRYoc5c2H1YGgBW32QFkMk1vkoZr3FyQKJJeih/lH894kotsKLFpwi9zB4vSvqzxr8 | |
| 25 | −oxIXPQHGVbRRBEVUnxk3qMTEvS+GonjjBBCwxwMg4I+d0CMI4pjBOUqpjtACm/c4IUhASuCPfPQj | |
| 26 | −I1lAyDLGAosk0OJT1hhIC0RSkpDsoyg9GUpAhtKPp6QAJD9pB0F+oJJWvOQZq5FGMuExFFHkYyR1 | |
| 27 | −OUpWqrKPvHykJIXZyzy40gOwXNURZ0mNWs6Jk5P0JChXKUxHXsCXwQTlKIe5h2OeSowvRKEFMOkI | |
| 28 | −ck4IkbRqogyvaU1uZpOd1URlNXepSnriwZscSOaxlknHQekmnRVwIhAxgM09rtKXBrXnKalJzFTe | |
| 29 | −AZ8b0Of9/vh5SH+CB6CLWicPEAoIiGpAoiQwp+OYOQ1nWgqaT0TBQTl6TUN4tH7oEyeUKDocdN5R | |
| 30 | −nXnsAUv98FJO2i+kNBWTTZkYUI3SkJLgXKJMlxTU5gxVjbf8HxSRSqOY4rCpcXqqLXGKy6muAKQj | |
| 31 | −EOkixPoBTV4FpQOdRU+jiicqkjGWsCCrB8wKlkWm9KhfTaod36pMDVbUR4TC6AQEmom1spGqjLOq | |
| 32 | −Ef1aU4uiD6pclapaEWskxcpRlv0E7D9vWtScTjavVXXrUicgV0SUlgN0VYtd04pXFYBVBKc1RGxt | |
| 33 | −pNVnsvWwn3WtXju3WEM2VrMX5WxGPdtaG+62dftkrFAd/utWyHa2q7k1bmjHOFocYfVitT3pbTsZ | |
| 34 | −XRS8NgSzJUR4XZddfaG1sF7V7XTDeVXlOpW5Y3TucKFbXO8et4p99e1ygfvYrT5XsvUl4n35mlz9 | |
| 35 | −vpe/zfXvfAEcC8P+t63Uba+BswrfF8p3sEZtMGUhzN7eYvav7QuscDFMXA2DNrGilfCHfxvizRJ1 | |
| 36 | −wV1Mr3RRHGEPx5Wk0jCpebcbzQBLcb1KVfGNM9vi4L6YxPQ1sXpp3OHLDhnE+xPxkSVAWEw4uMcz | |
| 37 | −rmyKbfyK8ZYPwfFVMJIZLMQNN8qyhVzxfovcX9tGNsbdFTCQ91pdHrmXwmC2sJipnOEyn1jLNXZy | |
| 38 | −l3Es/g4pX5jPJfbzkgHd5DQ/mcVRdvGhD1DlS1z5rlnmcJC57Aov06i8HeMxphWd6TNvWdCdJjRK | |
| 39 | −JL1nSvf5FZdGNJM3jepWeJpxoP7Zea0sY/vOmbe1ZsWtS5jnJU660paINXr/rGk6C3nQRI60kY/9 | |
| 40 | −alco+7sgGLYftN2oXCty15butZxn7WxO21rV/DB0q5FdCWXzmtmmDrSjoQ1lNKrbzQ/GrY9LgO0P | |
| 41 | −cJsP/04tXcCdbHH/mNzAnneqo21vVuMbxvpWcqlThWZLPnrN0m6zdt8ccVL7GuHIneidsVthY6+7 | |
| 42 | −2l80M8VPrfBzM5yW9954vrm77zD+OuRAHbmgir1X/monGtYq/2lYr7tzNif44WOGc81H0G8P/HsP | |
| 43 | −Afc24Fa77KXDccB1fjrX0O0MHYea4zSX+McZTeuWC5vrzfC6rkXNWrGPm+zlDvYqol7ynp/859YO | |
| 44 | −esXhSm9IN3zad0+yx9/e7IRbvO8Y/7vGdwx2LA/+4HA3PN8XXm+YO1zmEA/74/mN9WdT3u+WBzzS | |
| 45 | −ZU1moMN75fI+/OcTH/rFf33mjjf9oguP86HrnFJSlxzV3231EDS9A1rPA915nsipE7zdBuf8zfFb | |
| 46 | −YDUf2OhhHr2r8Z7y0wsdtkTHfd2Lr/vjU8Ld4bb+3vPrfDxDX8/SZ/f3k29zkDNf5BMmOfEFS3ql | |
| 47 | −/rsd8rR/f87jX/SMHx3zSddxsjdx1wde2UcvuUc6uxd+vTdInWduZ/dyzRRzjAd7ozaAY5d/BAZ/ | |
| 48 | −5Sd/52dy6YdyrHBtDyh3qjB8H2h3IUh9I6h3LKd6Lld5E3h5FZh5sZd34veCkxeDoDeDogeA9SeA | |
| 49 | −ODh78dZoMBiBMlhSFPh6NniBQ0iA49d8F/d8/hd9QDh9goeBhFeEZXeEc4d2zKB238Z2VXd/yud+ | |
| 50 | −G7h/Hdh/ivd/NRiAmqeF+MeFcWd2XyiBSkiDTAiHN1h9RIh6RriDSNiDefiDbxiEcfiEGUiHkkd+ | |
| 51 | −U2h+VYh+V6h+kyBBlniJmJiJmriJluiCqSeI/neYhDm2hGvXeJzgCzEjQkxXgnZ4gmC4DGJofGS4 | |
| 52 | −CcAAC7XYfpFXe9h3ewi4ffSHhfGjiqvwC2eYi/pne/ynffM3YoiYOqhoi894dcuXhsi4hsqYgtyn | |
| 53 | −gN5XHt1mi93oe6zoha6Ih6Ooh6VogTpSZ+3RG7/HAcGHBygYiSA4idCYisgUjqA4jqJYaOY4hqY4 | |
| 54 | −NepYCcI4cwWYbQcYK77IjMBYj3KxFu24Ae94B/HYhlZ4iAuZHAFJCQP5kBoQkXYwka3nhnvYjAyJ | |
| 55 | −kWBXkP52kD0gcH2xjQBpj3CIkk6nks2SkFN2kWiRkZOgJByZAR5ZByDpg653jk1YCwM5jADQ/pN8 | |
| 56 | −QpM7wJIhR4l7oZOSoIoyCXxMiS8JWDsLaJRS+QgwQj5V6Y5XuTFZKTxbmZOvICRKEpYQOZY44JTv | |
| 57 | −B5Xx0ZWKgCW+EIUc+IgeKI8qSI9YcZSiUCxp0YhSiHhUSJGSaJFyWTh0WQjv0guB6IiGCYmIOY+K | |
| 58 | −GReA2QnHUxSEmZeTuZeV2ZeXWReZqQl2A5nHuIvJ2IvLeJOLuQ2leQmcA5lZ55Y9U5bOc5ZHEZtX | |
| 59 | −cl+8mZK8iJCt6XO305h6cEK/KZbBuZK42UG6STzGeQdFlJw+aZte05w+9Jx/GZ10QEjUOU7W6TfY | |
| 60 | −uUWzKCzcGQew9J2kFZ6QM56bVJ5+oZ6E/qBP6vmTdBCUhTiU/oiOtyGfgQBS1Gmfc4Cf5WiII4mT | |
| 61 | −0uGffvBavymgckCg/GigRMmH1qGgm4OP5GWVy1mTwxl4Q2KheNB0memgO/OKyhCL3QefzAGiddCO | |
| 62 | −R0micAChqyah+1mU58GicsCRwgijbyCj6daPsviPMYKjq4OhZdUTPOoGPtp1pFijFGomRMoGSvmN | |
| 63 | −draawomNv/iaCXqeh2Ok51Sl1siaWKqQWlqhXJoFU4pr7Ck67nlWKgqlZ2oFaQolUZo/5Bih+hmk | |
| 64 | −/IkoIfQHc8pUFKSXbBiSFXmgZcoedQoGf7qeWRKngrCkadekemqjfPokx+mlakilqQCp/mEoqSkq | |
| 65 | −pJWaoSGKqdXYp5tqoiDhqdr4pqFqqi1KqqppqabAqbCoqlrpkq3aqK86jbW5AYlqWqiKDCi6qqCa | |
| 66 | −q7Q1B4tqXR3wq4VAqydqq2aJq8bqqm6QrGCKWo4KlMF6DMN6q6w6rbIqpbBqgHqTrQ+6rdQDpJ+6 | |
| 67 | −p+C6rObqA9baNcy6behaDN0ard/arqKaBvGaRJzgrKmqrsTKrvo6V++aA/3KQwebBgArrNCam9Ja | |
| 68 | −sPtKBgmLAvMqkfVKDPcKsfkqscdKseNqkCtwsfeZscOwsc4ZsR4bPgsbAxU7si0bBg3LrQ+bsh27 | |
| 69 | −sr4asy3wstojCTObrjQ6qU+Ks/7q/gU8yzw6uwU/a681m50qS7Q52wVH6wIkuwZLq7FNS57FCrVZ | |
| 70 | −lLTFqIG92p4jdaczmqfrSqlcq7BoGrLAeZ2KcLUnm7XvubVpW7RVMLVsCqxk+6NBe7ZDW7cqULUu | |
| 71 | −y7Yz2ZRe+wRwKwwo67Q3C7jlWjeEq6HNIl4mq7hy66Z067gWe7gwpYOSiZWPWrnBsLhaS7CaG7ic | |
| 72 | −e5J4manMCQiJO7qXW1dPe7pfygR4O7l98LoFEbuqNbu0W7tJcLutC3Wiu7sC662Z+7swG7yRq5w1 | |
| 73 | −tXV7y6THi6/Jq7zLawTCi3vwWLy/QLpza7rWS7U6m73e8ZHce5e8O3CNG76bOwTk/otdJRu9kTq9 | |
| 74 | −HFu97Iu0M9O8bfkEgvsq54ua9Guz9nu/+Auv+tuRUtC/SqC73Zu+Lbm+BIy6PfC+h6Sk/8sXiWmo | |
| 75 | −EQy/OkDBdMQGDIy+Acy4A7zBwHOeHowbahDCANy3A4u2JnybN5DCSqDAQcDCGGyZGhzDTlUDNNwa | |
| 76 | −qQuB18iX2Yi84MvDbisDP5wsQSyOV0rEWYrEFQwDSzwWTVyYlEmoGTyhJCnFCOguB1yd3HDFpXqY | |
| 77 | −WqzDXIygXly+nhiZWNwFNmwDOOy9mHvEa0yWOfiJn/sFcTwDc+zAT3nHQAyFnvvG90DGzkuIBWq2 | |
| 78 | −L/y3gqy9cwiIXZiPfIzIYryP/mUrkml8qI8snl/LiLpIrmrQx0IsplBMpp38F+NRxUhBBX88wqUL | |
| 79 | −w6nMxq8Uxkv5BqS8x4MqlJrspF08y897j7zqeWuQy6ybxbxcqJsMzFEQm6xcyU7wyi5sxLLMzFkV | |
| 80 | −UbacQnZgzG2ryHjay0L7y9b8wT61umXsJ6krzYxMzY48zlNMkOYcq9t8uOoMzn4rzu6swpnHlgi8 | |
| 81 | −B9x8y5jMt+tMvXaczz2MiPx8yf4cs/WszL6sxgatyjiZ0ADdB//MqAEtvdNM0NUc0eSMhmHbJu/a | |
| 82 | −0Fv80Jzs0T8wPT1B0do8CNxM0mhs0ih9BTMCPiwNnoWQyzAtmjs801RQJPBx/tMzZSdcutNFzNHt | |
| 83 | −7NNHwCgtPMm6zAvcadRRrNSQ+2lf0ZnHnNPGKdWoTNVSMDGoidXnTNQ0wNWu6dVfDU69INbyvAgX | |
| 84 | −a9bEidZOgDioGdKOwKxw7aFybbvHFY2tmAiJmtcruNdNgJyl7NbVJdh+Sdh8Pcw4yiwGMAGRbQCU | |
| 85 | −jQGRnQKXvQWPfcF0LLsQzNg+XIIgiiyVLQGUfdmZTQGpbQKr3cpPbcqhedT1W9CgjbDhqKBsktmT | |
| 86 | −XdoHkNqtXdqnLdm7fdqVTdy7PcaGPMSxPdW1zbzD/GnHPNmm3duSXd0XIN3TTd3ajdoVwN1iIJ+K | |
| 87 | −PZrNjQQS9Z1wIt3GPd28/m0B2L3d2e3dxJ3dY2DenA3IcTnezg3SUdvNwu3b1d3aqt3b8P3e6m3d | |
| 88 | −AH7IIpvR87vRs93R+D3D48qbfbLaup3e7G3avD3g1G3c7W0GEl7fsPy9Dv7gof3c7prIolCa4d3T | |
| 89 | −JO6+kQuYssPhgL0WK77MLU4ED7mWQ40KOg6oCt6pIV7HI37jg2vi50Q+SVoGxIjR3pzJDh3OEE3k | |
| 90 | −tm3kR94RSa7k0VjjMi3l+Uvl5fqMV04GFaTlUH7SXL6FklyH/hrmZ+ALZH7PUX7mJa7fa2Iidn7n | |
| 91 | −eJ7ner7nJgLiDC7AtC3neezG9wuXG2jmgr6KXh7Bhv5DiT4D1qqvja6d/o/+h0K9spPuu5UujXTO | |
| 92 | −w5n+2ZsOjotOwJ9ewqGOi2ArxaUe6Keu6J0ew6s+5K3u6sZIjdYb60k962h+6R6L6/is64uY5myt | |
| 93 | −vL4e58Ae7LwuscWO6Me+XclesMve7EqczUQb7dJOxdSOs9Z+7S4Q6e267dzexk5N6m3q2aYe7uVc | |
| 94 | −yIVe7r0L6ugek/FM7OyuvudurAUgAfd+AAWw7z+Q7yfg79806utuk3F9uvyu7/qe7wCvAwtPAg3/ | |
| 95 | −UdmO6fP+wPVuJf5+7/uu8BXw8BmP8QrP7x0/AR0/8gl/8CKf8fhu8hpf8h4P8iHfuXpM7gAw8wBQ | |
| 96 | −8zZ/8zif8zrf2e1e/vEWj/AIv/L4fgEXD/QXX/RFL/JAv/RLr/JDb/Qpr/QmD/ECz746f/VYj/U8 | |
| 97 | −T++sjigYz/Jfn/AYsPBC7/Rkj/JJ//Ri//Qr//FKz/JU/+omnPV0X/dbT/FdXyco//ZCbwEHH/Z/ | |
| 98 | −//drb/Z9H/htz/Ypr/Fp7+zx/rt1//hXf/eB7LhkP/Qk7/eCn/hwr/kjf/lBv/d7v/mKj/ahn+4x | |
| 99 | −P/CQn/o5zNM2jtIPnwGvvwPeDq6qX/uSf99I3PkeEPtE7+JVH761r/q3f+g+zft+7/tyv8HBn/rD | |
| 100 | −7+jvLurJz+jL//jNT+nPb/qEbvXTb/f2fegP8v3gH/7iP/7kX/7m/n/+6D/707r93K8bnPH+8B// | |
| 101 | −8j//9F//9n//+E//oez47J/1SmHJEHDkpNVenPXm3X8wFEeyNM8RCFa2BVA4lme6tm8g13e+9/lW | |
| 102 | −UDgkFgOvW1K5ZDadT6hSVURGrVdsdvnjdntGcHhY1ZbNZ3Ra3ZkSyWt4XF7z1rtivNi+5/f9f8BA | |
| 103 | −wUHCQsNDxETFHaO3uUfISDa7vErLS8xMzU3OTr1Az1DRUdJS0yBHSdXVyL3TV9hY2dmjRdtb3NxB | |
| 104 | −2iNW3985XeFh4mLjY+Rk5WUeYOdn6Gjpaepq62vsbO1t7m7vb/Bw8XHycvNz9HT1dfZ293f4ePl5 | |
| 105 | −+nr7e/x8/X3+G37/f4ABBQ4kWNDgQYQJFS5k2NDhQ4gRJdKLAAA7 | |
| @@ -1 +0,0 @@ | ||
| 1 | −!*.xml | |
| @@ -1,1314 +0,0 @@ | ||
| 1 | −<title>DVB Audio Device</title> | |
| 2 | −<para>The DVB audio device controls the MPEG2 audio decoder of the DVB hardware. It | |
| 3 | −can be accessed through <constant>/dev/dvb/adapter?/audio?</constant>. Data types and and | |
| 4 | −ioctl definitions can be accessed by including <constant>linux/dvb/audio.h</constant> in your | |
| 5 | −application. | |
| 6 | −</para> | |
| 7 | −<para>Please note that some DVB cards don’t have their own MPEG decoder, which results in | |
| 8 | −the omission of the audio and video device. | |
| 9 | −</para> | |
| 10 | −<para> | |
| 11 | −These ioctls were also used by V4L2 to control MPEG decoders implemented in V4L2. The use | |
| 12 | −of these ioctls for that purpose has been made obsolete and proper V4L2 ioctls or controls | |
| 13 | −have been created to replace that functionality.</para> | |
| 14 | − | |
| 15 | −<section id="audio_data_types"> | |
| 16 | −<title>Audio Data Types</title> | |
| 17 | −<para>This section describes the structures, data types and defines used when talking to the | |
| 18 | −audio device. | |
| 19 | −</para> | |
| 20 | − | |
| 21 | −<section id="audio-stream-source-t"> | |
| 22 | −<title>audio_stream_source_t</title> | |
| 23 | −<para>The audio stream source is set through the AUDIO_SELECT_SOURCE call and can take | |
| 24 | −the following values, depending on whether we are replaying from an internal (demux) or | |
| 25 | −external (user write) source. | |
| 26 | −</para> | |
| 27 | −<programlisting> | |
| 28 | −typedef enum { | |
| 29 | − AUDIO_SOURCE_DEMUX, | |
| 30 | − AUDIO_SOURCE_MEMORY | |
| 31 | −} audio_stream_source_t; | |
| 32 | −</programlisting> | |
| 33 | −<para>AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the | |
| 34 | −DVR device) as the source of the video stream. If AUDIO_SOURCE_MEMORY | |
| 35 | −is selected the stream comes from the application through the <constant>write()</constant> system | |
| 36 | −call. | |
| 37 | −</para> | |
| 38 | − | |
| 39 | −</section> | |
| 40 | −<section id="audio-play-state-t"> | |
| 41 | −<title>audio_play_state_t</title> | |
| 42 | −<para>The following values can be returned by the AUDIO_GET_STATUS call representing the | |
| 43 | −state of audio playback. | |
| 44 | −</para> | |
| 45 | −<programlisting> | |
| 46 | −typedef enum { | |
| 47 | − AUDIO_STOPPED, | |
| 48 | − AUDIO_PLAYING, | |
| 49 | − AUDIO_PAUSED | |
| 50 | −} audio_play_state_t; | |
| 51 | −</programlisting> | |
| 52 | − | |
| 53 | −</section> | |
| 54 | −<section id="audio-channel-select-t"> | |
| 55 | −<title>audio_channel_select_t</title> | |
| 56 | −<para>The audio channel selected via AUDIO_CHANNEL_SELECT is determined by the | |
| 57 | −following values. | |
| 58 | −</para> | |
| 59 | −<programlisting> | |
| 60 | −typedef enum { | |
| 61 | − AUDIO_STEREO, | |
| 62 | − AUDIO_MONO_LEFT, | |
| 63 | − AUDIO_MONO_RIGHT, | |
| 64 | − AUDIO_MONO, | |
| 65 | − AUDIO_STEREO_SWAPPED | |
| 66 | −} audio_channel_select_t; | |
| 67 | −</programlisting> | |
| 68 | − | |
| 69 | −</section> | |
| 70 | −<section id="audio-status"> | |
| 71 | −<title>struct audio_status</title> | |
| 72 | −<para>The AUDIO_GET_STATUS call returns the following structure informing about various | |
| 73 | −states of the playback operation. | |
| 74 | −</para> | |
| 75 | −<programlisting> | |
| 76 | −typedef struct audio_status { | |
| 77 | − boolean AV_sync_state; | |
| 78 | − boolean mute_state; | |
| 79 | − audio_play_state_t play_state; | |
| 80 | − audio_stream_source_t stream_source; | |
| 81 | − audio_channel_select_t channel_select; | |
| 82 | − boolean bypass_mode; | |
| 83 | − audio_mixer_t mixer_state; | |
| 84 | −} audio_status_t; | |
| 85 | −</programlisting> | |
| 86 | − | |
| 87 | −</section> | |
| 88 | −<section id="audio-mixer"> | |
| 89 | −<title>struct audio_mixer</title> | |
| 90 | −<para>The following structure is used by the AUDIO_SET_MIXER call to set the audio | |
| 91 | −volume. | |
| 92 | −</para> | |
| 93 | −<programlisting> | |
| 94 | −typedef struct audio_mixer { | |
| 95 | − unsigned int volume_left; | |
| 96 | − unsigned int volume_right; | |
| 97 | −} audio_mixer_t; | |
| 98 | −</programlisting> | |
| 99 | − | |
| 100 | −</section> | |
| 101 | −<section id="audio_encodings"> | |
| 102 | −<title>audio encodings</title> | |
| 103 | −<para>A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the following | |
| 104 | −bits set according to the hardwares capabilities. | |
| 105 | −</para> | |
| 106 | −<programlisting> | |
| 107 | − #define AUDIO_CAP_DTS 1 | |
| 108 | − #define AUDIO_CAP_LPCM 2 | |
| 109 | − #define AUDIO_CAP_MP1 4 | |
| 110 | − #define AUDIO_CAP_MP2 8 | |
| 111 | − #define AUDIO_CAP_MP3 16 | |
| 112 | − #define AUDIO_CAP_AAC 32 | |
| 113 | − #define AUDIO_CAP_OGG 64 | |
| 114 | − #define AUDIO_CAP_SDDS 128 | |
| 115 | − #define AUDIO_CAP_AC3 256 | |
| 116 | −</programlisting> | |
| 117 | − | |
| 118 | −</section> | |
| 119 | −<section id="audio-karaoke"> | |
| 120 | −<title>struct audio_karaoke</title> | |
| 121 | −<para>The ioctl AUDIO_SET_KARAOKE uses the following format: | |
| 122 | −</para> | |
| 123 | −<programlisting> | |
| 124 | −typedef | |
| 125 | −struct audio_karaoke { | |
| 126 | − int vocal1; | |
| 127 | − int vocal2; | |
| 128 | − int melody; | |
| 129 | −} audio_karaoke_t; | |
| 130 | −</programlisting> | |
| 131 | −<para>If Vocal1 or Vocal2 are non-zero, they get mixed into left and right t at 70% each. If both, | |
| 132 | −Vocal1 and Vocal2 are non-zero, Vocal1 gets mixed into the left channel and Vocal2 into the | |
| 133 | −right channel at 100% each. Ff Melody is non-zero, the melody channel gets mixed into left | |
| 134 | −and right. | |
| 135 | −</para> | |
| 136 | − | |
| 137 | −</section> | |
| 138 | −<section id="audio-attributes-t"> | |
| 139 | −<title>audio attributes</title> | |
| 140 | −<para>The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES: | |
| 141 | −</para> | |
| 142 | −<programlisting> | |
| 143 | − typedef uint16_t audio_attributes_t; | |
| 144 | − /⋆ bits: descr. ⋆/ | |
| 145 | − /⋆ 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, ⋆/ | |
| 146 | − /⋆ 12 multichannel extension ⋆/ | |
| 147 | − /⋆ 11-10 audio type (0=not spec, 1=language included) ⋆/ | |
| 148 | − /⋆ 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) ⋆/ | |
| 149 | − /⋆ 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, ⋆/ | |
| 150 | − /⋆ 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) ⋆/ | |
| 151 | − /⋆ 2- 0 number of audio channels (n+1 channels) ⋆/ | |
| 152 | −</programlisting> | |
| 153 | − </section></section> | |
| 154 | −<section id="audio_function_calls"> | |
| 155 | −<title>Audio Function Calls</title> | |
| 156 | − | |
| 157 | − | |
| 158 | −<section id="audio_fopen"> | |
| 159 | −<title>open()</title> | |
| 160 | −<para>DESCRIPTION | |
| 161 | −</para> | |
| 162 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 163 | − align="char"> | |
| 164 | −<para>This system call opens a named audio device (e.g. /dev/dvb/adapter0/audio0) | |
| 165 | − for subsequent use. When an open() call has succeeded, the device will be ready | |
| 166 | − for use. The significance of blocking or non-blocking mode is described in the | |
| 167 | − documentation for functions where there is a difference. It does not affect the | |
| 168 | − semantics of the open() call itself. A device opened in blocking mode can later | |
| 169 | − be put into non-blocking mode (and vice versa) using the F_SETFL command | |
| 170 | − of the fcntl system call. This is a standard system call, documented in the Linux | |
| 171 | − manual page for fcntl. Only one user can open the Audio Device in O_RDWR | |
| 172 | − mode. All other attempts to open the device in this mode will fail, and an error | |
| 173 | − code will be returned. If the Audio Device is opened in O_RDONLY mode, the | |
| 174 | − only ioctl call that can be used is AUDIO_GET_STATUS. All other call will | |
| 175 | − return with an error code.</para> | |
| 176 | −</entry> | |
| 177 | − </row></tbody></tgroup></informaltable> | |
| 178 | −<para>SYNOPSIS | |
| 179 | −</para> | |
| 180 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 181 | − align="char"> | |
| 182 | −<para>int open(const char ⋆deviceName, int flags);</para> | |
| 183 | −</entry> | |
| 184 | − </row></tbody></tgroup></informaltable> | |
| 185 | −<para>PARAMETERS | |
| 186 | −</para> | |
| 187 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 188 | − align="char"> | |
| 189 | −<para>const char | |
| 190 | − *deviceName</para> | |
| 191 | −</entry><entry | |
| 192 | − align="char"> | |
| 193 | −<para>Name of specific audio device.</para> | |
| 194 | −</entry> | |
| 195 | − </row><row><entry | |
| 196 | − align="char"> | |
| 197 | −<para>int flags</para> | |
| 198 | −</entry><entry | |
| 199 | − align="char"> | |
| 200 | −<para>A bit-wise OR of the following flags:</para> | |
| 201 | −</entry> | |
| 202 | − </row><row><entry | |
| 203 | − align="char"> | |
| 204 | −</entry><entry | |
| 205 | − align="char"> | |
| 206 | −<para>O_RDONLY read-only access</para> | |
| 207 | −</entry> | |
| 208 | − </row><row><entry | |
| 209 | − align="char"> | |
| 210 | −</entry><entry | |
| 211 | − align="char"> | |
| 212 | −<para>O_RDWR read/write access</para> | |
| 213 | −</entry> | |
| 214 | − </row><row><entry | |
| 215 | − align="char"> | |
| 216 | −</entry><entry | |
| 217 | − align="char"> | |
| 218 | −<para>O_NONBLOCK open in non-blocking mode</para> | |
| 219 | −</entry> | |
| 220 | − </row><row><entry | |
| 221 | − align="char"> | |
| 222 | −</entry><entry | |
| 223 | − align="char"> | |
| 224 | −<para>(blocking mode is the default)</para> | |
| 225 | −</entry> | |
| 226 | − </row></tbody></tgroup></informaltable> | |
| 227 | −<para>RETURN VALUE</para> | |
| 228 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 229 | − align="char"> | |
| 230 | −<para>ENODEV</para> | |
| 231 | −</entry><entry | |
| 232 | − align="char"> | |
| 233 | −<para>Device driver not loaded/available.</para> | |
| 234 | −</entry> | |
| 235 | − </row><row><entry | |
| 236 | − align="char"> | |
| 237 | −<para>EBUSY</para> | |
| 238 | −</entry><entry | |
| 239 | − align="char"> | |
| 240 | −<para>Device or resource busy.</para> | |
| 241 | −</entry> | |
| 242 | − </row><row><entry | |
| 243 | − align="char"> | |
| 244 | −<para>EINVAL</para> | |
| 245 | −</entry><entry | |
| 246 | − align="char"> | |
| 247 | −<para>Invalid argument.</para> | |
| 248 | −</entry> | |
| 249 | − </row></tbody></tgroup></informaltable> | |
| 250 | − | |
| 251 | −</section> | |
| 252 | −<section id="audio_fclose"> | |
| 253 | −<title>close()</title> | |
| 254 | −<para>DESCRIPTION | |
| 255 | −</para> | |
| 256 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 257 | − align="char"> | |
| 258 | −<para>This system call closes a previously opened audio device.</para> | |
| 259 | −</entry> | |
| 260 | − </row></tbody></tgroup></informaltable> | |
| 261 | −<para>SYNOPSIS | |
| 262 | −</para> | |
| 263 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 264 | − align="char"> | |
| 265 | −<para>int close(int fd);</para> | |
| 266 | −</entry> | |
| 267 | − </row></tbody></tgroup></informaltable> | |
| 268 | −<para>PARAMETERS | |
| 269 | −</para> | |
| 270 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 271 | − align="char"> | |
| 272 | −<para>int fd</para> | |
| 273 | −</entry><entry | |
| 274 | − align="char"> | |
| 275 | −<para>File descriptor returned by a previous call to open().</para> | |
| 276 | −</entry> | |
| 277 | − </row></tbody></tgroup></informaltable> | |
| 278 | −<para>RETURN VALUE</para> | |
| 279 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 280 | − align="char"> | |
| 281 | −<para>EBADF</para> | |
| 282 | −</entry><entry | |
| 283 | − align="char"> | |
| 284 | −<para>fd is not a valid open file descriptor.</para> | |
| 285 | −</entry> | |
| 286 | − </row></tbody></tgroup></informaltable> | |
| 287 | − | |
| 288 | −</section> | |
| 289 | −<section id="audio_fwrite"> | |
| 290 | −<title>write()</title> | |
| 291 | −<para>DESCRIPTION | |
| 292 | −</para> | |
| 293 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 294 | − align="char"> | |
| 295 | −<para>This system call can only be used if AUDIO_SOURCE_MEMORY is selected | |
| 296 | − in the ioctl call AUDIO_SELECT_SOURCE. The data provided shall be in | |
| 297 | − PES format. If O_NONBLOCK is not specified the function will block until | |
| 298 | − buffer space is available. The amount of data to be transferred is implied by | |
| 299 | − count.</para> | |
| 300 | −</entry> | |
| 301 | − </row></tbody></tgroup></informaltable> | |
| 302 | −<para>SYNOPSIS | |
| 303 | −</para> | |
| 304 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 305 | − align="char"> | |
| 306 | −<para>size_t write(int fd, const void ⋆buf, size_t count);</para> | |
| 307 | −</entry> | |
| 308 | − </row></tbody></tgroup></informaltable> | |
| 309 | −<para>PARAMETERS | |
| 310 | −</para> | |
| 311 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 312 | − align="char"> | |
| 313 | −<para>int fd</para> | |
| 314 | −</entry><entry | |
| 315 | − align="char"> | |
| 316 | −<para>File descriptor returned by a previous call to open().</para> | |
| 317 | −</entry> | |
| 318 | − </row><row><entry | |
| 319 | − align="char"> | |
| 320 | −<para>void *buf</para> | |
| 321 | −</entry><entry | |
| 322 | − align="char"> | |
| 323 | −<para>Pointer to the buffer containing the PES data.</para> | |
| 324 | −</entry> | |
| 325 | − </row><row><entry | |
| 326 | − align="char"> | |
| 327 | −<para>size_t count</para> | |
| 328 | −</entry><entry | |
| 329 | − align="char"> | |
| 330 | −<para>Size of buf.</para> | |
| 331 | −</entry> | |
| 332 | − </row></tbody></tgroup></informaltable> | |
| 333 | −<para>RETURN VALUE</para> | |
| 334 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 335 | − align="char"> | |
| 336 | −<para>EPERM</para> | |
| 337 | −</entry><entry | |
| 338 | − align="char"> | |
| 339 | −<para>Mode AUDIO_SOURCE_MEMORY not selected.</para> | |
| 340 | −</entry> | |
| 341 | − </row><row><entry | |
| 342 | − align="char"> | |
| 343 | −<para>ENOMEM</para> | |
| 344 | −</entry><entry | |
| 345 | − align="char"> | |
| 346 | −<para>Attempted to write more data than the internal buffer can | |
| 347 | − hold.</para> | |
| 348 | −</entry> | |
| 349 | − </row><row><entry | |
| 350 | − align="char"> | |
| 351 | −<para>EBADF</para> | |
| 352 | −</entry><entry | |
| 353 | − align="char"> | |
| 354 | −<para>fd is not a valid open file descriptor.</para> | |
| 355 | −</entry> | |
| 356 | − </row></tbody></tgroup></informaltable> | |
| 357 | − | |
| 358 | −</section><section id="AUDIO_STOP" | |
| 359 | −role="subsection"><title>AUDIO_STOP</title> | |
| 360 | −<para>DESCRIPTION | |
| 361 | −</para> | |
| 362 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 363 | − align="char"> | |
| 364 | −<para>This ioctl call asks the Audio Device to stop playing the current stream.</para> | |
| 365 | −</entry> | |
| 366 | − </row></tbody></tgroup></informaltable> | |
| 367 | −<para>SYNOPSIS | |
| 368 | −</para> | |
| 369 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 370 | − align="char"> | |
| 371 | −<para>int ioctl(int fd, int request = AUDIO_STOP);</para> | |
| 372 | −</entry> | |
| 373 | − </row></tbody></tgroup></informaltable> | |
| 374 | −<para>PARAMETERS | |
| 375 | −</para> | |
| 376 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 377 | − align="char"> | |
| 378 | −<para>int fd</para> | |
| 379 | −</entry><entry | |
| 380 | − align="char"> | |
| 381 | −<para>File descriptor returned by a previous call to open().</para> | |
| 382 | −</entry> | |
| 383 | − </row><row><entry | |
| 384 | − align="char"> | |
| 385 | −<para>int request</para> | |
| 386 | −</entry><entry | |
| 387 | − align="char"> | |
| 388 | −<para>Equals AUDIO_STOP for this command.</para> | |
| 389 | −</entry> | |
| 390 | − </row></tbody></tgroup></informaltable> | |
| 391 | −&return-value-dvb; | |
| 392 | − | |
| 393 | −</section><section id="AUDIO_PLAY" | |
| 394 | −role="subsection"><title>AUDIO_PLAY</title> | |
| 395 | −<para>DESCRIPTION | |
| 396 | −</para> | |
| 397 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 398 | − align="char"> | |
| 399 | −<para>This ioctl call asks the Audio Device to start playing an audio stream from the | |
| 400 | − selected source.</para> | |
| 401 | −</entry> | |
| 402 | − </row></tbody></tgroup></informaltable> | |
| 403 | −<para>SYNOPSIS | |
| 404 | −</para> | |
| 405 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 406 | − align="char"> | |
| 407 | −<para>int ioctl(int fd, int request = AUDIO_PLAY);</para> | |
| 408 | −</entry> | |
| 409 | − </row></tbody></tgroup></informaltable> | |
| 410 | −<para>PARAMETERS | |
| 411 | −</para> | |
| 412 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 413 | − align="char"> | |
| 414 | −<para>int fd</para> | |
| 415 | −</entry><entry | |
| 416 | − align="char"> | |
| 417 | −<para>File descriptor returned by a previous call to open().</para> | |
| 418 | −</entry> | |
| 419 | − </row><row><entry | |
| 420 | − align="char"> | |
| 421 | −<para>int request</para> | |
| 422 | −</entry><entry | |
| 423 | − align="char"> | |
| 424 | −<para>Equals AUDIO_PLAY for this command.</para> | |
| 425 | −</entry> | |
| 426 | − </row></tbody></tgroup></informaltable> | |
| 427 | −&return-value-dvb; | |
| 428 | − | |
| 429 | −</section><section id="AUDIO_PAUSE" | |
| 430 | −role="subsection"><title>AUDIO_PAUSE</title> | |
| 431 | −<para>DESCRIPTION | |
| 432 | −</para> | |
| 433 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 434 | − align="char"> | |
| 435 | −<para>This ioctl call suspends the audio stream being played. Decoding and playing | |
| 436 | − are paused. It is then possible to restart again decoding and playing process of | |
| 437 | − the audio stream using AUDIO_CONTINUE command.</para> | |
| 438 | −</entry> | |
| 439 | − </row><row><entry | |
| 440 | − align="char"> | |
| 441 | −<para>If AUDIO_SOURCE_MEMORY is selected in the ioctl call | |
| 442 | − AUDIO_SELECT_SOURCE, the DVB-subsystem will not decode (consume) | |
| 443 | − any more data until the ioctl call AUDIO_CONTINUE or AUDIO_PLAY is | |
| 444 | − performed.</para> | |
| 445 | −</entry> | |
| 446 | − </row></tbody></tgroup></informaltable> | |
| 447 | −<para>SYNOPSIS | |
| 448 | −</para> | |
| 449 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 450 | − align="char"> | |
| 451 | −<para>int ioctl(int fd, int request = AUDIO_PAUSE);</para> | |
| 452 | −</entry> | |
| 453 | − </row></tbody></tgroup></informaltable> | |
| 454 | −<para>PARAMETERS | |
| 455 | −</para> | |
| 456 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 457 | − align="char"> | |
| 458 | −<para>int fd</para> | |
| 459 | −</entry><entry | |
| 460 | − align="char"> | |
| 461 | −<para>File descriptor returned by a previous call to open().</para> | |
| 462 | −</entry> | |
| 463 | − </row><row><entry | |
| 464 | − align="char"> | |
| 465 | −<para>int request</para> | |
| 466 | −</entry><entry | |
| 467 | − align="char"> | |
| 468 | −<para>Equals AUDIO_PAUSE for this command.</para> | |
| 469 | −</entry> | |
| 470 | − </row></tbody></tgroup></informaltable> | |
| 471 | −&return-value-dvb; | |
| 472 | − | |
| 473 | −</section><section id="AUDIO_CONTINUE" | |
| 474 | −role="subsection"><title>AUDIO_CONTINUE</title> | |
| 475 | −<para>DESCRIPTION | |
| 476 | −</para> | |
| 477 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 478 | − align="char"> | |
| 479 | −<para>This ioctl restarts the decoding and playing process previously paused | |
| 480 | −with AUDIO_PAUSE command.</para> | |
| 481 | −</entry> | |
| 482 | − </row><row><entry | |
| 483 | − align="char"> | |
| 484 | −<para>It only works if the stream were previously stopped with AUDIO_PAUSE</para> | |
| 485 | −</entry> | |
| 486 | − </row></tbody></tgroup></informaltable> | |
| 487 | −<para>SYNOPSIS | |
| 488 | −</para> | |
| 489 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 490 | − align="char"> | |
| 491 | −<para>int ioctl(int fd, int request = AUDIO_CONTINUE);</para> | |
| 492 | −</entry> | |
| 493 | − </row></tbody></tgroup></informaltable> | |
| 494 | −<para>PARAMETERS | |
| 495 | −</para> | |
| 496 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 497 | − align="char"> | |
| 498 | −<para>int fd</para> | |
| 499 | −</entry><entry | |
| 500 | − align="char"> | |
| 501 | −<para>File descriptor returned by a previous call to open().</para> | |
| 502 | −</entry> | |
| 503 | − </row><row><entry | |
| 504 | − align="char"> | |
| 505 | −<para>int request</para> | |
| 506 | −</entry><entry | |
| 507 | − align="char"> | |
| 508 | −<para>Equals AUDIO_CONTINUE for this command.</para> | |
| 509 | −</entry> | |
| 510 | − </row></tbody></tgroup></informaltable> | |
| 511 | −&return-value-dvb; | |
| 512 | − | |
| 513 | −</section><section id="AUDIO_SELECT_SOURCE" | |
| 514 | −role="subsection"><title>AUDIO_SELECT_SOURCE</title> | |
| 515 | −<para>DESCRIPTION | |
| 516 | −</para> | |
| 517 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 518 | − align="char"> | |
| 519 | −<para>This ioctl call informs the audio device which source shall be used | |
| 520 | − for the input data. The possible sources are demux or memory. If | |
| 521 | − AUDIO_SOURCE_MEMORY is selected, the data is fed to the Audio Device | |
| 522 | − through the write command.</para> | |
| 523 | −</entry> | |
| 524 | − </row></tbody></tgroup></informaltable> | |
| 525 | −<para>SYNOPSIS | |
| 526 | −</para> | |
| 527 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 528 | − align="char"> | |
| 529 | −<para>int ioctl(int fd, int request = AUDIO_SELECT_SOURCE, | |
| 530 | − audio_stream_source_t source);</para> | |
| 531 | −</entry> | |
| 532 | − </row></tbody></tgroup></informaltable> | |
| 533 | −<para>PARAMETERS | |
| 534 | −</para> | |
| 535 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 536 | − align="char"> | |
| 537 | −<para>int fd</para> | |
| 538 | −</entry><entry | |
| 539 | − align="char"> | |
| 540 | −<para>File descriptor returned by a previous call to open().</para> | |
| 541 | −</entry> | |
| 542 | − </row><row><entry | |
| 543 | − align="char"> | |
| 544 | −<para>int request</para> | |
| 545 | −</entry><entry | |
| 546 | − align="char"> | |
| 547 | −<para>Equals AUDIO_SELECT_SOURCE for this command.</para> | |
| 548 | −</entry> | |
| 549 | − </row><row><entry | |
| 550 | − align="char"> | |
| 551 | −<para>audio_stream_source_t | |
| 552 | − source</para> | |
| 553 | −</entry><entry | |
| 554 | − align="char"> | |
| 555 | −<para>Indicates the source that shall be used for the Audio | |
| 556 | − stream.</para> | |
| 557 | −</entry> | |
| 558 | − </row></tbody></tgroup></informaltable> | |
| 559 | −&return-value-dvb; | |
| 560 | − | |
| 561 | −</section><section id="AUDIO_SET_MUTE" | |
| 562 | −role="subsection"><title>AUDIO_SET_MUTE</title> | |
| 563 | −<para>DESCRIPTION | |
| 564 | −</para> | |
| 565 | −<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 | |
| 566 | −&VIDIOC-DECODER-CMD; with the <constant>V4L2_DEC_CMD_START_MUTE_AUDIO</constant> flag instead.</para> | |
| 567 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 568 | − align="char"> | |
| 569 | −<para>This ioctl call asks the audio device to mute the stream that is currently being | |
| 570 | − played.</para> | |
| 571 | −</entry> | |
| 572 | − </row></tbody></tgroup></informaltable> | |
| 573 | −<para>SYNOPSIS | |
| 574 | −</para> | |
| 575 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 576 | − align="char"> | |
| 577 | −<para>int ioctl(int fd, int request = AUDIO_SET_MUTE, | |
| 578 | − boolean state);</para> | |
| 579 | −</entry> | |
| 580 | − </row></tbody></tgroup></informaltable> | |
| 581 | −<para>PARAMETERS | |
| 582 | −</para> | |
| 583 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 584 | − align="char"> | |
| 585 | −<para>int fd</para> | |
| 586 | −</entry><entry | |
| 587 | − align="char"> | |
| 588 | −<para>File descriptor returned by a previous call to open().</para> | |
| 589 | −</entry> | |
| 590 | − </row><row><entry | |
| 591 | − align="char"> | |
| 592 | −<para>int request</para> | |
| 593 | −</entry><entry | |
| 594 | − align="char"> | |
| 595 | −<para>Equals AUDIO_SET_MUTE for this command.</para> | |
| 596 | −</entry> | |
| 597 | − </row><row><entry | |
| 598 | − align="char"> | |
| 599 | −<para>boolean state</para> | |
| 600 | −</entry><entry | |
| 601 | − align="char"> | |
| 602 | −<para>Indicates if audio device shall mute or not.</para> | |
| 603 | −</entry> | |
| 604 | − </row><row><entry | |
| 605 | − align="char"> | |
| 606 | −</entry><entry | |
| 607 | − align="char"> | |
| 608 | −<para>TRUE Audio Mute</para> | |
| 609 | −</entry> | |
| 610 | − </row><row><entry | |
| 611 | − align="char"> | |
| 612 | −</entry><entry | |
| 613 | − align="char"> | |
| 614 | −<para>FALSE Audio Un-mute</para> | |
| 615 | −</entry> | |
| 616 | − </row></tbody></tgroup></informaltable> | |
| 617 | −&return-value-dvb; | |
| 618 | − | |
| 619 | −</section><section id="AUDIO_SET_AV_SYNC" | |
| 620 | −role="subsection"><title>AUDIO_SET_AV_SYNC</title> | |
| 621 | −<para>DESCRIPTION | |
| 622 | −</para> | |
| 623 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 624 | − align="char"> | |
| 625 | −<para>This ioctl call asks the Audio Device to turn ON or OFF A/V synchronization.</para> | |
| 626 | −</entry> | |
| 627 | − </row></tbody></tgroup></informaltable> | |
| 628 | −<para>SYNOPSIS | |
| 629 | −</para> | |
| 630 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 631 | − align="char"> | |
| 632 | −<para>int ioctl(int fd, int request = AUDIO_SET_AV_SYNC, | |
| 633 | − boolean state);</para> | |
| 634 | −</entry> | |
| 635 | − </row></tbody></tgroup></informaltable> | |
| 636 | −<para>PARAMETERS | |
| 637 | −</para> | |
| 638 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 639 | − align="char"> | |
| 640 | −<para>int fd</para> | |
| 641 | −</entry><entry | |
| 642 | − align="char"> | |
| 643 | −<para>File descriptor returned by a previous call to open().</para> | |
| 644 | −</entry> | |
| 645 | − </row><row><entry | |
| 646 | − align="char"> | |
| 647 | −<para>int request</para> | |
| 648 | −</entry><entry | |
| 649 | − align="char"> | |
| 650 | −<para>Equals AUDIO_AV_SYNC for this command.</para> | |
| 651 | −</entry> | |
| 652 | − </row><row><entry | |
| 653 | − align="char"> | |
| 654 | −<para>boolean state</para> | |
| 655 | −</entry><entry | |
| 656 | − align="char"> | |
| 657 | −<para>Tells the DVB subsystem if A/V synchronization shall be | |
| 658 | − ON or OFF.</para> | |
| 659 | −</entry> | |
| 660 | − </row><row><entry | |
| 661 | − align="char"> | |
| 662 | −</entry><entry | |
| 663 | − align="char"> | |
| 664 | −<para>TRUE AV-sync ON</para> | |
| 665 | −</entry> | |
| 666 | − </row><row><entry | |
| 667 | − align="char"> | |
| 668 | −</entry><entry | |
| 669 | − align="char"> | |
| 670 | −<para>FALSE AV-sync OFF</para> | |
| 671 | −</entry> | |
| 672 | − </row></tbody></tgroup></informaltable> | |
| 673 | −&return-value-dvb; | |
| 674 | − | |
| 675 | −</section><section id="AUDIO_SET_BYPASS_MODE" | |
| 676 | −role="subsection"><title>AUDIO_SET_BYPASS_MODE</title> | |
| 677 | −<para>DESCRIPTION | |
| 678 | −</para> | |
| 679 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 680 | − align="char"> | |
| 681 | −<para>This ioctl call asks the Audio Device to bypass the Audio decoder and forward | |
| 682 | − the stream without decoding. This mode shall be used if streams that can’t be | |
| 683 | − handled by the DVB system shall be decoded. Dolby DigitalTM streams are | |
| 684 | − automatically forwarded by the DVB subsystem if the hardware can handle it.</para> | |
| 685 | −</entry> | |
| 686 | − </row></tbody></tgroup></informaltable> | |
| 687 | −<para>SYNOPSIS | |
| 688 | −</para> | |
| 689 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 690 | − align="char"> | |
| 691 | −<para>int ioctl(int fd, int request = | |
| 692 | − AUDIO_SET_BYPASS_MODE, boolean mode);</para> | |
| 693 | −</entry> | |
| 694 | − </row></tbody></tgroup></informaltable> | |
| 695 | −<para>PARAMETERS | |
| 696 | −</para> | |
| 697 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 698 | − align="char"> | |
| 699 | −<para>int fd</para> | |
| 700 | −</entry><entry | |
| 701 | − align="char"> | |
| 702 | −<para>File descriptor returned by a previous call to open().</para> | |
| 703 | −</entry> | |
| 704 | − </row><row><entry | |
| 705 | − align="char"> | |
| 706 | −<para>int request</para> | |
| 707 | −</entry><entry | |
| 708 | − align="char"> | |
| 709 | −<para>Equals AUDIO_SET_BYPASS_MODE for this | |
| 710 | − command.</para> | |
| 711 | −</entry> | |
| 712 | − </row><row><entry | |
| 713 | − align="char"> | |
| 714 | −<para>boolean mode</para> | |
| 715 | −</entry><entry | |
| 716 | − align="char"> | |
| 717 | −<para>Enables or disables the decoding of the current Audio | |
| 718 | − stream in the DVB subsystem.</para> | |
| 719 | −</entry> | |
| 720 | − </row><row><entry | |
| 721 | − align="char"> | |
| 722 | −</entry><entry | |
| 723 | − align="char"> | |
| 724 | −<para>TRUE Bypass is disabled</para> | |
| 725 | −</entry> | |
| 726 | − </row><row><entry | |
| 727 | − align="char"> | |
| 728 | −</entry><entry | |
| 729 | − align="char"> | |
| 730 | −<para>FALSE Bypass is enabled</para> | |
| 731 | −</entry> | |
| 732 | − </row></tbody></tgroup></informaltable> | |
| 733 | −&return-value-dvb; | |
| 734 | − | |
| 735 | −</section><section id="AUDIO_CHANNEL_SELECT" | |
| 736 | −role="subsection"><title>AUDIO_CHANNEL_SELECT</title> | |
| 737 | −<para>DESCRIPTION | |
| 738 | −</para> | |
| 739 | −<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 | |
| 740 | −<constant>V4L2_CID_MPEG_AUDIO_DEC_PLAYBACK</constant> control instead.</para> | |
| 741 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 742 | − align="char"> | |
| 743 | −<para>This ioctl call asks the Audio Device to select the requested channel if possible.</para> | |
| 744 | −</entry> | |
| 745 | − </row></tbody></tgroup></informaltable> | |
| 746 | −<para>SYNOPSIS | |
| 747 | −</para> | |
| 748 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 749 | − align="char"> | |
| 750 | −<para>int ioctl(int fd, int request = | |
| 751 | − AUDIO_CHANNEL_SELECT, audio_channel_select_t);</para> | |
| 752 | −</entry> | |
| 753 | − </row></tbody></tgroup></informaltable> | |
| 754 | −<para>PARAMETERS | |
| 755 | −</para> | |
| 756 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 757 | − align="char"> | |
| 758 | −<para>int fd</para> | |
| 759 | −</entry><entry | |
| 760 | − align="char"> | |
| 761 | −<para>File descriptor returned by a previous call to open().</para> | |
| 762 | −</entry> | |
| 763 | − </row><row><entry | |
| 764 | − align="char"> | |
| 765 | −<para>int request</para> | |
| 766 | −</entry><entry | |
| 767 | − align="char"> | |
| 768 | −<para>Equals AUDIO_CHANNEL_SELECT for this | |
| 769 | − command.</para> | |
| 770 | −</entry> | |
| 771 | − </row><row><entry | |
| 772 | − align="char"> | |
| 773 | −<para>audio_channel_select_t | |
| 774 | − ch</para> | |
| 775 | −</entry><entry | |
| 776 | − align="char"> | |
| 777 | −<para>Select the output format of the audio (mono left/right, | |
| 778 | − stereo).</para> | |
| 779 | −</entry> | |
| 780 | − </row></tbody></tgroup></informaltable> | |
| 781 | −&return-value-dvb; | |
| 782 | − | |
| 783 | −</section><section id="AUDIO_BILINGUAL_CHANNEL_SELECT" | |
| 784 | −role="subsection"><title>AUDIO_BILINGUAL_CHANNEL_SELECT</title> | |
| 785 | −<para>DESCRIPTION | |
| 786 | −</para> | |
| 787 | −<para>This ioctl is obsolete. Do not use in new drivers. It has been replaced by | |
| 788 | −the V4L2 <constant>V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK</constant> control | |
| 789 | −for MPEG decoders controlled through V4L2.</para> | |
| 790 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 791 | − align="char"> | |
| 792 | −<para>This ioctl call asks the Audio Device to select the requested channel for bilingual streams if possible.</para> | |
| 793 | −</entry> | |
| 794 | − </row></tbody></tgroup></informaltable> | |
| 795 | −<para>SYNOPSIS | |
| 796 | −</para> | |
| 797 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 798 | − align="char"> | |
| 799 | −<para>int ioctl(int fd, int request = | |
| 800 | − AUDIO_BILINGUAL_CHANNEL_SELECT, audio_channel_select_t);</para> | |
| 801 | −</entry> | |
| 802 | − </row></tbody></tgroup></informaltable> | |
| 803 | −<para>PARAMETERS | |
| 804 | −</para> | |
| 805 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 806 | − align="char"> | |
| 807 | −<para>int fd</para> | |
| 808 | −</entry><entry | |
| 809 | − align="char"> | |
| 810 | −<para>File descriptor returned by a previous call to open().</para> | |
| 811 | −</entry> | |
| 812 | − </row><row><entry | |
| 813 | − align="char"> | |
| 814 | −<para>int request</para> | |
| 815 | −</entry><entry | |
| 816 | − align="char"> | |
| 817 | −<para>Equals AUDIO_BILINGUAL_CHANNEL_SELECT for this | |
| 818 | − command.</para> | |
| 819 | −</entry> | |
| 820 | − </row><row><entry | |
| 821 | − align="char"> | |
| 822 | −<para>audio_channel_select_t | |
| 823 | −ch</para> | |
| 824 | −</entry><entry | |
| 825 | − align="char"> | |
| 826 | −<para>Select the output format of the audio (mono left/right, | |
| 827 | − stereo).</para> | |
| 828 | −</entry> | |
| 829 | − </row> | |
| 830 | −</tbody></tgroup></informaltable> | |
| 831 | −&return-value-dvb; | |
| 832 | − | |
| 833 | −</section><section id="AUDIO_GET_PTS" | |
| 834 | −role="subsection"><title>AUDIO_GET_PTS</title> | |
| 835 | −<para>DESCRIPTION | |
| 836 | −</para> | |
| 837 | −<para>This ioctl is obsolete. Do not use in new drivers. If you need this functionality, | |
| 838 | −then please contact the linux-media mailing list (&v4l-ml;).</para> | |
| 839 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 840 | − align="char"> | |
| 841 | −<para>This ioctl call asks the Audio Device to return the current PTS timestamp.</para> | |
| 842 | −</entry> | |
| 843 | − </row></tbody></tgroup></informaltable> | |
| 844 | −<para>SYNOPSIS | |
| 845 | −</para> | |
| 846 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 847 | − align="char"> | |
| 848 | −<para>int ioctl(int fd, int request = | |
| 849 | − AUDIO_GET_PTS, __u64 *pts);</para> | |
| 850 | −</entry> | |
| 851 | − </row></tbody></tgroup></informaltable> | |
| 852 | −<para>PARAMETERS | |
| 853 | −</para> | |
| 854 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 855 | − align="char"> | |
| 856 | −<para>int fd</para> | |
| 857 | −</entry><entry | |
| 858 | − align="char"> | |
| 859 | −<para>File descriptor returned by a previous call to open().</para> | |
| 860 | −</entry> | |
| 861 | − </row><row><entry | |
| 862 | − align="char"> | |
| 863 | −<para>int request</para> | |
| 864 | −</entry><entry | |
| 865 | − align="char"> | |
| 866 | −<para>Equals AUDIO_GET_PTS for this | |
| 867 | − command.</para> | |
| 868 | −</entry> | |
| 869 | − </row><row><entry | |
| 870 | − align="char"> | |
| 871 | −<para>__u64 *pts | |
| 872 | −</para> | |
| 873 | −</entry><entry | |
| 874 | − align="char"> | |
| 875 | −<para>Returns the 33-bit timestamp as defined in ITU T-REC-H.222.0 / ISO/IEC 13818-1. | |
| 876 | −</para> | |
| 877 | −<para> | |
| 878 | −The PTS should belong to the currently played | |
| 879 | −frame if possible, but may also be a value close to it | |
| 880 | −like the PTS of the last decoded frame or the last PTS | |
| 881 | −extracted by the PES parser.</para> | |
| 882 | −</entry> | |
| 883 | − </row></tbody></tgroup></informaltable> | |
| 884 | −&return-value-dvb; | |
| 885 | − | |
| 886 | −</section><section id="AUDIO_GET_STATUS" | |
| 887 | −role="subsection"><title>AUDIO_GET_STATUS</title> | |
| 888 | −<para>DESCRIPTION | |
| 889 | −</para> | |
| 890 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 891 | − align="char"> | |
| 892 | −<para>This ioctl call asks the Audio Device to return the current state of the Audio | |
| 893 | − Device.</para> | |
| 894 | −</entry> | |
| 895 | − </row></tbody></tgroup></informaltable> | |
| 896 | −<para>SYNOPSIS | |
| 897 | −</para> | |
| 898 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 899 | − align="char"> | |
| 900 | −<para>int ioctl(int fd, int request = AUDIO_GET_STATUS, | |
| 901 | − struct audio_status ⋆status);</para> | |
| 902 | −</entry> | |
| 903 | − </row></tbody></tgroup></informaltable> | |
| 904 | −<para>PARAMETERS | |
| 905 | −</para> | |
| 906 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 907 | − align="char"> | |
| 908 | −<para>int fd</para> | |
| 909 | −</entry><entry | |
| 910 | − align="char"> | |
| 911 | −<para>File descriptor returned by a previous call to open().</para> | |
| 912 | −</entry> | |
| 913 | − </row><row><entry | |
| 914 | − align="char"> | |
| 915 | −<para>int request</para> | |
| 916 | −</entry><entry | |
| 917 | − align="char"> | |
| 918 | −<para>Equals AUDIO_GET_STATUS for this command.</para> | |
| 919 | −</entry> | |
| 920 | − </row><row><entry | |
| 921 | − align="char"> | |
| 922 | −<para>struct audio_status | |
| 923 | − *status</para> | |
| 924 | −</entry><entry | |
| 925 | − align="char"> | |
| 926 | −<para>Returns the current state of Audio Device.</para> | |
| 927 | −</entry> | |
| 928 | − </row></tbody></tgroup></informaltable> | |
| 929 | −&return-value-dvb; | |
| 930 | − | |
| 931 | −</section><section id="AUDIO_GET_CAPABILITIES" | |
| 932 | −role="subsection"><title>AUDIO_GET_CAPABILITIES</title> | |
| 933 | −<para>DESCRIPTION | |
| 934 | −</para> | |
| 935 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 936 | − align="char"> | |
| 937 | −<para>This ioctl call asks the Audio Device to tell us about the decoding capabilities | |
| 938 | − of the audio hardware.</para> | |
| 939 | −</entry> | |
| 940 | − </row></tbody></tgroup></informaltable> | |
| 941 | −<para>SYNOPSIS | |
| 942 | −</para> | |
| 943 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 944 | − align="char"> | |
| 945 | −<para>int ioctl(int fd, int request = | |
| 946 | − AUDIO_GET_CAPABILITIES, unsigned int ⋆cap);</para> | |
| 947 | −</entry> | |
| 948 | − </row></tbody></tgroup></informaltable> | |
| 949 | −<para>PARAMETERS | |
| 950 | −</para> | |
| 951 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 952 | − align="char"> | |
| 953 | −<para>int fd</para> | |
| 954 | −</entry><entry | |
| 955 | − align="char"> | |
| 956 | −<para>File descriptor returned by a previous call to open().</para> | |
| 957 | −</entry> | |
| 958 | − </row><row><entry | |
| 959 | − align="char"> | |
| 960 | −<para>int request</para> | |
| 961 | −</entry><entry | |
| 962 | − align="char"> | |
| 963 | −<para>Equals AUDIO_GET_CAPABILITIES for this | |
| 964 | − command.</para> | |
| 965 | −</entry> | |
| 966 | − </row><row><entry | |
| 967 | − align="char"> | |
| 968 | −<para>unsigned int *cap</para> | |
| 969 | −</entry><entry | |
| 970 | − align="char"> | |
| 971 | −<para>Returns a bit array of supported sound formats.</para> | |
| 972 | −</entry> | |
| 973 | − </row></tbody></tgroup></informaltable> | |
| 974 | −&return-value-dvb; | |
| 975 | − | |
| 976 | −</section><section id="AUDIO_CLEAR_BUFFER" | |
| 977 | −role="subsection"><title>AUDIO_CLEAR_BUFFER</title> | |
| 978 | −<para>DESCRIPTION | |
| 979 | −</para> | |
| 980 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 981 | − align="char"> | |
| 982 | −<para>This ioctl call asks the Audio Device to clear all software and hardware buffers | |
| 983 | − of the audio decoder device.</para> | |
| 984 | −</entry> | |
| 985 | − </row></tbody></tgroup></informaltable> | |
| 986 | −<para>SYNOPSIS | |
| 987 | −</para> | |
| 988 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 989 | − align="char"> | |
| 990 | −<para>int ioctl(int fd, int request = AUDIO_CLEAR_BUFFER);</para> | |
| 991 | −</entry> | |
| 992 | − </row></tbody></tgroup></informaltable> | |
| 993 | −<para>PARAMETERS | |
| 994 | −</para> | |
| 995 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 996 | − align="char"> | |
| 997 | −<para>int fd</para> | |
| 998 | −</entry><entry | |
| 999 | − align="char"> | |
| 1000 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1001 | −</entry> | |
| 1002 | − </row><row><entry | |
| 1003 | − align="char"> | |
| 1004 | −<para>int request</para> | |
| 1005 | −</entry><entry | |
| 1006 | − align="char"> | |
| 1007 | −<para>Equals AUDIO_CLEAR_BUFFER for this command.</para> | |
| 1008 | −</entry> | |
| 1009 | − </row></tbody></tgroup></informaltable> | |
| 1010 | −&return-value-dvb; | |
| 1011 | − | |
| 1012 | −</section><section id="AUDIO_SET_ID" | |
| 1013 | −role="subsection"><title>AUDIO_SET_ID</title> | |
| 1014 | −<para>DESCRIPTION | |
| 1015 | −</para> | |
| 1016 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1017 | − align="char"> | |
| 1018 | −<para>This ioctl selects which sub-stream is to be decoded if a program or system | |
| 1019 | − stream is sent to the video device. If no audio stream type is set the id has to be | |
| 1020 | − in [0xC0,0xDF] for MPEG sound, in [0x80,0x87] for AC3 and in [0xA0,0xA7] | |
| 1021 | − for LPCM. More specifications may follow for other stream types. If the stream | |
| 1022 | − type is set the id just specifies the substream id of the audio stream and only | |
| 1023 | − the first 5 bits are recognized.</para> | |
| 1024 | −</entry> | |
| 1025 | − </row></tbody></tgroup></informaltable> | |
| 1026 | −<para>SYNOPSIS | |
| 1027 | −</para> | |
| 1028 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1029 | − align="char"> | |
| 1030 | −<para>int ioctl(int fd, int request = AUDIO_SET_ID, int | |
| 1031 | − id);</para> | |
| 1032 | −</entry> | |
| 1033 | − </row></tbody></tgroup></informaltable> | |
| 1034 | −<para>PARAMETERS | |
| 1035 | −</para> | |
| 1036 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1037 | − align="char"> | |
| 1038 | −<para>int fd</para> | |
| 1039 | −</entry><entry | |
| 1040 | − align="char"> | |
| 1041 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1042 | −</entry> | |
| 1043 | − </row><row><entry | |
| 1044 | − align="char"> | |
| 1045 | −<para>int request</para> | |
| 1046 | −</entry><entry | |
| 1047 | − align="char"> | |
| 1048 | −<para>Equals AUDIO_SET_ID for this command.</para> | |
| 1049 | −</entry> | |
| 1050 | − </row><row><entry | |
| 1051 | − align="char"> | |
| 1052 | −<para>int id</para> | |
| 1053 | −</entry><entry | |
| 1054 | − align="char"> | |
| 1055 | −<para>audio sub-stream id</para> | |
| 1056 | −</entry> | |
| 1057 | − </row></tbody></tgroup></informaltable> | |
| 1058 | −&return-value-dvb; | |
| 1059 | − | |
| 1060 | −</section><section id="AUDIO_SET_MIXER" | |
| 1061 | −role="subsection"><title>AUDIO_SET_MIXER</title> | |
| 1062 | −<para>DESCRIPTION | |
| 1063 | −</para> | |
| 1064 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1065 | − align="char"> | |
| 1066 | −<para>This ioctl lets you adjust the mixer settings of the audio decoder.</para> | |
| 1067 | −</entry> | |
| 1068 | − </row></tbody></tgroup></informaltable> | |
| 1069 | −<para>SYNOPSIS | |
| 1070 | −</para> | |
| 1071 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1072 | − align="char"> | |
| 1073 | −<para>int ioctl(int fd, int request = AUDIO_SET_MIXER, | |
| 1074 | − audio_mixer_t ⋆mix);</para> | |
| 1075 | −</entry> | |
| 1076 | − </row></tbody></tgroup></informaltable> | |
| 1077 | −<para>PARAMETERS | |
| 1078 | −</para> | |
| 1079 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1080 | − align="char"> | |
| 1081 | −<para>int fd</para> | |
| 1082 | −</entry><entry | |
| 1083 | − align="char"> | |
| 1084 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1085 | −</entry> | |
| 1086 | − </row><row><entry | |
| 1087 | − align="char"> | |
| 1088 | −<para>int request</para> | |
| 1089 | −</entry><entry | |
| 1090 | − align="char"> | |
| 1091 | −<para>Equals AUDIO_SET_ID for this command.</para> | |
| 1092 | −</entry> | |
| 1093 | − </row><row><entry | |
| 1094 | − align="char"> | |
| 1095 | −<para>audio_mixer_t *mix</para> | |
| 1096 | −</entry><entry | |
| 1097 | − align="char"> | |
| 1098 | −<para>mixer settings.</para> | |
| 1099 | −</entry> | |
| 1100 | − </row></tbody></tgroup></informaltable> | |
| 1101 | −&return-value-dvb; | |
| 1102 | − | |
| 1103 | −</section><section id="AUDIO_SET_STREAMTYPE" | |
| 1104 | −role="subsection"><title>AUDIO_SET_STREAMTYPE</title> | |
| 1105 | −<para>DESCRIPTION | |
| 1106 | −</para> | |
| 1107 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1108 | − align="char"> | |
| 1109 | −<para>This ioctl tells the driver which kind of audio stream to expect. This is useful | |
| 1110 | − if the stream offers several audio sub-streams like LPCM and AC3.</para> | |
| 1111 | −</entry> | |
| 1112 | − </row></tbody></tgroup></informaltable> | |
| 1113 | −<para>SYNOPSIS | |
| 1114 | −</para> | |
| 1115 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1116 | − align="char"> | |
| 1117 | −<para>int ioctl(fd, int request = AUDIO_SET_STREAMTYPE, | |
| 1118 | − int type);</para> | |
| 1119 | −</entry> | |
| 1120 | − </row></tbody></tgroup></informaltable> | |
| 1121 | −<para>PARAMETERS | |
| 1122 | −</para> | |
| 1123 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1124 | − align="char"> | |
| 1125 | −<para>int fd</para> | |
| 1126 | −</entry><entry | |
| 1127 | − align="char"> | |
| 1128 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1129 | −</entry> | |
| 1130 | − </row><row><entry | |
| 1131 | − align="char"> | |
| 1132 | −<para>int request</para> | |
| 1133 | −</entry><entry | |
| 1134 | − align="char"> | |
| 1135 | −<para>Equals AUDIO_SET_STREAMTYPE for this | |
| 1136 | − command.</para> | |
| 1137 | −</entry> | |
| 1138 | − </row><row><entry | |
| 1139 | − align="char"> | |
| 1140 | −<para>int type</para> | |
| 1141 | −</entry><entry | |
| 1142 | − align="char"> | |
| 1143 | −<para>stream type</para> | |
| 1144 | −</entry> | |
| 1145 | − </row></tbody></tgroup></informaltable> | |
| 1146 | −&return-value-dvb; | |
| 1147 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1148 | − align="char"> | |
| 1149 | −<para>EINVAL</para> | |
| 1150 | −</entry><entry | |
| 1151 | − align="char"> | |
| 1152 | −<para>type is not a valid or supported stream type.</para> | |
| 1153 | −</entry> | |
| 1154 | − </row></tbody></tgroup></informaltable> | |
| 1155 | − | |
| 1156 | −</section><section id="AUDIO_SET_EXT_ID" | |
| 1157 | −role="subsection"><title>AUDIO_SET_EXT_ID</title> | |
| 1158 | −<para>DESCRIPTION | |
| 1159 | −</para> | |
| 1160 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1161 | − align="char"> | |
| 1162 | −<para>This ioctl can be used to set the extension id for MPEG streams in DVD | |
| 1163 | − playback. Only the first 3 bits are recognized.</para> | |
| 1164 | −</entry> | |
| 1165 | − </row></tbody></tgroup></informaltable> | |
| 1166 | −<para>SYNOPSIS | |
| 1167 | −</para> | |
| 1168 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1169 | − align="char"> | |
| 1170 | −<para>int ioctl(fd, int request = AUDIO_SET_EXT_ID, int | |
| 1171 | − id);</para> | |
| 1172 | −</entry> | |
| 1173 | − </row></tbody></tgroup></informaltable> | |
| 1174 | −<para>PARAMETERS | |
| 1175 | −</para> | |
| 1176 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1177 | − align="char"> | |
| 1178 | −<para>int fd</para> | |
| 1179 | −</entry><entry | |
| 1180 | − align="char"> | |
| 1181 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1182 | −</entry> | |
| 1183 | − </row><row><entry | |
| 1184 | − align="char"> | |
| 1185 | −<para>int request</para> | |
| 1186 | −</entry><entry | |
| 1187 | − align="char"> | |
| 1188 | −<para>Equals AUDIO_SET_EXT_ID for this command.</para> | |
| 1189 | −</entry> | |
| 1190 | − </row><row><entry | |
| 1191 | − align="char"> | |
| 1192 | −<para>int id</para> | |
| 1193 | −</entry><entry | |
| 1194 | − align="char"> | |
| 1195 | −<para>audio sub_stream_id</para> | |
| 1196 | −</entry> | |
| 1197 | − </row></tbody></tgroup></informaltable> | |
| 1198 | −&return-value-dvb; | |
| 1199 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1200 | − align="char"> | |
| 1201 | −<para>EINVAL</para> | |
| 1202 | −</entry><entry | |
| 1203 | − align="char"> | |
| 1204 | −<para>id is not a valid id.</para> | |
| 1205 | −</entry> | |
| 1206 | − </row></tbody></tgroup></informaltable> | |
| 1207 | − | |
| 1208 | −</section><section id="AUDIO_SET_ATTRIBUTES" | |
| 1209 | −role="subsection"><title>AUDIO_SET_ATTRIBUTES</title> | |
| 1210 | −<para>DESCRIPTION | |
| 1211 | −</para> | |
| 1212 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1213 | − align="char"> | |
| 1214 | −<para>This ioctl is intended for DVD playback and allows you to set certain | |
| 1215 | − information about the audio stream.</para> | |
| 1216 | −</entry> | |
| 1217 | − </row></tbody></tgroup></informaltable> | |
| 1218 | −<para>SYNOPSIS | |
| 1219 | −</para> | |
| 1220 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1221 | − align="char"> | |
| 1222 | −<para>int ioctl(fd, int request = AUDIO_SET_ATTRIBUTES, | |
| 1223 | − audio_attributes_t attr );</para> | |
| 1224 | −</entry> | |
| 1225 | − </row></tbody></tgroup></informaltable> | |
| 1226 | −<para>PARAMETERS | |
| 1227 | −</para> | |
| 1228 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1229 | − align="char"> | |
| 1230 | −<para>int fd</para> | |
| 1231 | −</entry><entry | |
| 1232 | − align="char"> | |
| 1233 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1234 | −</entry> | |
| 1235 | − </row><row><entry | |
| 1236 | − align="char"> | |
| 1237 | −<para>int request</para> | |
| 1238 | −</entry><entry | |
| 1239 | − align="char"> | |
| 1240 | −<para>Equals AUDIO_SET_ATTRIBUTES for this command.</para> | |
| 1241 | −</entry> | |
| 1242 | − </row><row><entry | |
| 1243 | − align="char"> | |
| 1244 | −<para>audio_attributes_t | |
| 1245 | − attr</para> | |
| 1246 | −</entry><entry | |
| 1247 | − align="char"> | |
| 1248 | −<para>audio attributes according to section ??</para> | |
| 1249 | −</entry> | |
| 1250 | − </row></tbody></tgroup></informaltable> | |
| 1251 | −&return-value-dvb; | |
| 1252 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1253 | − align="char"> | |
| 1254 | −<para>EINVAL</para> | |
| 1255 | −</entry><entry | |
| 1256 | − align="char"> | |
| 1257 | −<para>attr is not a valid or supported attribute setting.</para> | |
| 1258 | −</entry> | |
| 1259 | − </row></tbody></tgroup></informaltable> | |
| 1260 | − | |
| 1261 | −</section><section id="AUDIO_SET_KARAOKE" | |
| 1262 | −role="subsection"><title>AUDIO_SET_KARAOKE</title> | |
| 1263 | −<para>DESCRIPTION | |
| 1264 | −</para> | |
| 1265 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1266 | − align="char"> | |
| 1267 | −<para>This ioctl allows one to set the mixer settings for a karaoke DVD.</para> | |
| 1268 | −</entry> | |
| 1269 | − </row></tbody></tgroup></informaltable> | |
| 1270 | −<para>SYNOPSIS | |
| 1271 | −</para> | |
| 1272 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1273 | − align="char"> | |
| 1274 | −<para>int ioctl(fd, int request = AUDIO_SET_KARAOKE, | |
| 1275 | − audio_karaoke_t ⋆karaoke);</para> | |
| 1276 | −</entry> | |
| 1277 | − </row></tbody></tgroup></informaltable> | |
| 1278 | −<para>PARAMETERS | |
| 1279 | −</para> | |
| 1280 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1281 | − align="char"> | |
| 1282 | −<para>int fd</para> | |
| 1283 | −</entry><entry | |
| 1284 | − align="char"> | |
| 1285 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1286 | −</entry> | |
| 1287 | − </row><row><entry | |
| 1288 | − align="char"> | |
| 1289 | −<para>int request</para> | |
| 1290 | −</entry><entry | |
| 1291 | − align="char"> | |
| 1292 | −<para>Equals AUDIO_SET_KARAOKE for this | |
| 1293 | − command.</para> | |
| 1294 | −</entry> | |
| 1295 | − </row><row><entry | |
| 1296 | − align="char"> | |
| 1297 | −<para>audio_karaoke_t | |
| 1298 | − *karaoke</para> | |
| 1299 | −</entry><entry | |
| 1300 | − align="char"> | |
| 1301 | −<para>karaoke settings according to section ??.</para> | |
| 1302 | −</entry> | |
| 1303 | − </row></tbody></tgroup></informaltable> | |
| 1304 | −&return-value-dvb; | |
| 1305 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1306 | − align="char"> | |
| 1307 | −<para>EINVAL</para> | |
| 1308 | −</entry><entry | |
| 1309 | − align="char"> | |
| 1310 | −<para>karaoke is not a valid or supported karaoke setting.</para> | |
| 1311 | −</entry> | |
| 1312 | − </row></tbody></tgroup></informaltable> | |
| 1313 | − </section> | |
| 1314 | −</section> | |
| @@ -1,582 +0,0 @@ | ||
| 1 | −<title>DVB CA Device</title> | |
| 2 | −<para>The DVB CA device controls the conditional access hardware. It can be accessed through | |
| 3 | −<constant>/dev/dvb/adapter?/ca?</constant>. Data types and and ioctl definitions can be accessed by | |
| 4 | −including <constant>linux/dvb/ca.h</constant> in your application. | |
| 5 | −</para> | |
| 6 | − | |
| 7 | −<section id="ca_data_types"> | |
| 8 | −<title>CA Data Types</title> | |
| 9 | − | |
| 10 | − | |
| 11 | −<section id="ca-slot-info"> | |
| 12 | −<title>ca_slot_info_t</title> | |
| 13 | − <programlisting> | |
| 14 | −typedef struct ca_slot_info { | |
| 15 | − int num; /⋆ slot number ⋆/ | |
| 16 | − | |
| 17 | − int type; /⋆ CA interface this slot supports ⋆/ | |
| 18 | −#define CA_CI 1 /⋆ CI high level interface ⋆/ | |
| 19 | −#define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ | |
| 20 | −#define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ | |
| 21 | −#define CA_DESCR 8 /⋆ built-in descrambler ⋆/ | |
| 22 | −#define CA_SC 128 /⋆ simple smart card interface ⋆/ | |
| 23 | − | |
| 24 | − unsigned int flags; | |
| 25 | −#define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ | |
| 26 | −#define CA_CI_MODULE_READY 2 | |
| 27 | −} ca_slot_info_t; | |
| 28 | −</programlisting> | |
| 29 | − | |
| 30 | −</section> | |
| 31 | −<section id="ca-descr-info"> | |
| 32 | −<title>ca_descr_info_t</title> | |
| 33 | −<programlisting> | |
| 34 | −typedef struct ca_descr_info { | |
| 35 | − unsigned int num; /⋆ number of available descramblers (keys) ⋆/ | |
| 36 | − unsigned int type; /⋆ type of supported scrambling system ⋆/ | |
| 37 | −#define CA_ECD 1 | |
| 38 | −#define CA_NDS 2 | |
| 39 | −#define CA_DSS 4 | |
| 40 | −} ca_descr_info_t; | |
| 41 | −</programlisting> | |
| 42 | − | |
| 43 | −</section> | |
| 44 | −<section id="ca-caps"> | |
| 45 | −<title>ca_caps_t</title> | |
| 46 | −<programlisting> | |
| 47 | −typedef struct ca_caps { | |
| 48 | − unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ | |
| 49 | − unsigned int slot_type; /⋆ OR of all supported types ⋆/ | |
| 50 | − unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ | |
| 51 | − unsigned int descr_type;/⋆ OR of all supported types ⋆/ | |
| 52 | − } ca_cap_t; | |
| 53 | −</programlisting> | |
| 54 | − | |
| 55 | −</section> | |
| 56 | −<section id="ca-msg"> | |
| 57 | −<title>ca_msg_t</title> | |
| 58 | −<programlisting> | |
| 59 | −/⋆ a message to/from a CI-CAM ⋆/ | |
| 60 | −typedef struct ca_msg { | |
| 61 | − unsigned int index; | |
| 62 | − unsigned int type; | |
| 63 | − unsigned int length; | |
| 64 | − unsigned char msg[256]; | |
| 65 | −} ca_msg_t; | |
| 66 | −</programlisting> | |
| 67 | − | |
| 68 | −</section> | |
| 69 | −<section id="ca-descr"> | |
| 70 | −<title>ca_descr_t</title> | |
| 71 | −<programlisting> | |
| 72 | −typedef struct ca_descr { | |
| 73 | − unsigned int index; | |
| 74 | − unsigned int parity; | |
| 75 | − unsigned char cw[8]; | |
| 76 | −} ca_descr_t; | |
| 77 | −</programlisting> | |
| 78 | −</section> | |
| 79 | − | |
| 80 | −<section id="ca-pid"> | |
| 81 | −<title>ca-pid</title> | |
| 82 | −<programlisting> | |
| 83 | −typedef struct ca_pid { | |
| 84 | − unsigned int pid; | |
| 85 | − int index; /⋆ -1 == disable⋆/ | |
| 86 | −} ca_pid_t; | |
| 87 | −</programlisting> | |
| 88 | −</section></section> | |
| 89 | − | |
| 90 | −<section id="ca_function_calls"> | |
| 91 | −<title>CA Function Calls</title> | |
| 92 | − | |
| 93 | − | |
| 94 | −<section id="ca_fopen"> | |
| 95 | −<title>open()</title> | |
| 96 | −<para>DESCRIPTION | |
| 97 | −</para> | |
| 98 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 99 | − align="char"> | |
| 100 | −<para>This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.</para> | |
| 101 | −<para>When an open() call has succeeded, the device will be ready for use. | |
| 102 | − The significance of blocking or non-blocking mode is described in the | |
| 103 | − documentation for functions where there is a difference. It does not affect the | |
| 104 | − semantics of the open() call itself. A device opened in blocking mode can later | |
| 105 | − be put into non-blocking mode (and vice versa) using the F_SETFL command | |
| 106 | − of the fcntl system call. This is a standard system call, documented in the Linux | |
| 107 | − manual page for fcntl. Only one user can open the CA Device in O_RDWR | |
| 108 | − mode. All other attempts to open the device in this mode will fail, and an error | |
| 109 | − code will be returned.</para> | |
| 110 | −</entry> | |
| 111 | − </row></tbody></tgroup></informaltable> | |
| 112 | −<para>SYNOPSIS | |
| 113 | −</para> | |
| 114 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 115 | − align="char"> | |
| 116 | −<para>int open(const char ⋆deviceName, int flags);</para> | |
| 117 | −</entry> | |
| 118 | − </row></tbody></tgroup></informaltable> | |
| 119 | −<para>PARAMETERS | |
| 120 | −</para> | |
| 121 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 122 | − align="char"> | |
| 123 | −<para>const char | |
| 124 | − *deviceName</para> | |
| 125 | −</entry><entry | |
| 126 | − align="char"> | |
| 127 | −<para>Name of specific video device.</para> | |
| 128 | −</entry> | |
| 129 | − </row><row><entry | |
| 130 | − align="char"> | |
| 131 | −<para>int flags</para> | |
| 132 | −</entry><entry | |
| 133 | − align="char"> | |
| 134 | −<para>A bit-wise OR of the following flags:</para> | |
| 135 | −</entry> | |
| 136 | − </row><row><entry | |
| 137 | − align="char"> | |
| 138 | −</entry><entry | |
| 139 | − align="char"> | |
| 140 | −<para>O_RDONLY read-only access</para> | |
| 141 | −</entry> | |
| 142 | − </row><row><entry | |
| 143 | − align="char"> | |
| 144 | −</entry><entry | |
| 145 | − align="char"> | |
| 146 | −<para>O_RDWR read/write access</para> | |
| 147 | −</entry> | |
| 148 | − </row><row><entry | |
| 149 | − align="char"> | |
| 150 | −</entry><entry | |
| 151 | − align="char"> | |
| 152 | −<para>O_NONBLOCK open in non-blocking mode</para> | |
| 153 | −</entry> | |
| 154 | − </row><row><entry | |
| 155 | − align="char"> | |
| 156 | −</entry><entry | |
| 157 | − align="char"> | |
| 158 | −<para>(blocking mode is the default)</para> | |
| 159 | −</entry> | |
| 160 | − </row></tbody></tgroup></informaltable> | |
| 161 | −<para>RETURN VALUE</para> | |
| 162 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 163 | − align="char"> | |
| 164 | −<para>ENODEV</para> | |
| 165 | −</entry><entry | |
| 166 | − align="char"> | |
| 167 | −<para>Device driver not loaded/available.</para> | |
| 168 | −</entry> | |
| 169 | − </row><row><entry | |
| 170 | − align="char"> | |
| 171 | −<para>EINTERNAL</para> | |
| 172 | −</entry><entry | |
| 173 | − align="char"> | |
| 174 | −<para>Internal error.</para> | |
| 175 | −</entry> | |
| 176 | − </row><row><entry | |
| 177 | − align="char"> | |
| 178 | −<para>EBUSY</para> | |
| 179 | −</entry><entry | |
| 180 | − align="char"> | |
| 181 | −<para>Device or resource busy.</para> | |
| 182 | −</entry> | |
| 183 | − </row><row><entry | |
| 184 | − align="char"> | |
| 185 | −<para>EINVAL</para> | |
| 186 | −</entry><entry | |
| 187 | − align="char"> | |
| 188 | −<para>Invalid argument.</para> | |
| 189 | −</entry> | |
| 190 | − </row></tbody></tgroup></informaltable> | |
| 191 | − | |
| 192 | −</section> | |
| 193 | −<section id="ca_fclose"> | |
| 194 | −<title>close()</title> | |
| 195 | −<para>DESCRIPTION | |
| 196 | −</para> | |
| 197 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 198 | − align="char"> | |
| 199 | −<para>This system call closes a previously opened audio device.</para> | |
| 200 | −</entry> | |
| 201 | − </row></tbody></tgroup></informaltable> | |
| 202 | −<para>SYNOPSIS | |
| 203 | −</para> | |
| 204 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 205 | − align="char"> | |
| 206 | −<para>int close(int fd);</para> | |
| 207 | −</entry> | |
| 208 | − </row></tbody></tgroup></informaltable> | |
| 209 | −<para>PARAMETERS | |
| 210 | −</para> | |
| 211 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 212 | − align="char"> | |
| 213 | −<para>int fd</para> | |
| 214 | −</entry><entry | |
| 215 | − align="char"> | |
| 216 | −<para>File descriptor returned by a previous call to open().</para> | |
| 217 | −</entry> | |
| 218 | − </row></tbody></tgroup></informaltable> | |
| 219 | −<para>RETURN VALUE</para> | |
| 220 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 221 | − align="char"> | |
| 222 | −<para>EBADF</para> | |
| 223 | −</entry><entry | |
| 224 | − align="char"> | |
| 225 | −<para>fd is not a valid open file descriptor.</para> | |
| 226 | −</entry> | |
| 227 | − </row></tbody></tgroup></informaltable> | |
| 228 | − </section> | |
| 229 | − | |
| 230 | −<section id="CA_RESET" | |
| 231 | −role="subsection"><title>CA_RESET</title> | |
| 232 | −<para>DESCRIPTION | |
| 233 | −</para> | |
| 234 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 235 | − align="char"> | |
| 236 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 237 | −</entry> | |
| 238 | − </row></tbody></tgroup></informaltable> | |
| 239 | −<para>SYNOPSIS | |
| 240 | −</para> | |
| 241 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 242 | − align="char"> | |
| 243 | −<para>int ioctl(fd, int request = CA_RESET); | |
| 244 | −</para> | |
| 245 | −</entry> | |
| 246 | − </row></tbody></tgroup></informaltable> | |
| 247 | −<para>PARAMETERS | |
| 248 | −</para> | |
| 249 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 250 | − align="char"> | |
| 251 | −<para>int fd</para> | |
| 252 | −</entry><entry | |
| 253 | − align="char"> | |
| 254 | −<para>File descriptor returned by a previous call to open().</para> | |
| 255 | −</entry> | |
| 256 | − </row><row><entry | |
| 257 | − align="char"> | |
| 258 | −<para>int request</para> | |
| 259 | −</entry><entry | |
| 260 | − align="char"> | |
| 261 | −<para>Equals CA_RESET for this command.</para> | |
| 262 | −</entry> | |
| 263 | − </row></tbody></tgroup></informaltable> | |
| 264 | −&return-value-dvb; | |
| 265 | −</section> | |
| 266 | − | |
| 267 | −<section id="CA_GET_CAP" | |
| 268 | −role="subsection"><title>CA_GET_CAP</title> | |
| 269 | −<para>DESCRIPTION | |
| 270 | −</para> | |
| 271 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 272 | − align="char"> | |
| 273 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 274 | −</entry> | |
| 275 | − </row></tbody></tgroup></informaltable> | |
| 276 | −<para>SYNOPSIS | |
| 277 | −</para> | |
| 278 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 279 | − align="char"> | |
| 280 | −<para>int ioctl(fd, int request = CA_GET_CAP, | |
| 281 | − ca_caps_t *);</para> | |
| 282 | −</entry> | |
| 283 | − </row></tbody></tgroup></informaltable> | |
| 284 | −<para>PARAMETERS | |
| 285 | −</para> | |
| 286 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 287 | − align="char"> | |
| 288 | −<para>int fd</para> | |
| 289 | −</entry><entry | |
| 290 | − align="char"> | |
| 291 | −<para>File descriptor returned by a previous call to open().</para> | |
| 292 | −</entry> | |
| 293 | − </row><row><entry | |
| 294 | − align="char"> | |
| 295 | −<para>int request</para> | |
| 296 | −</entry><entry | |
| 297 | − align="char"> | |
| 298 | −<para>Equals CA_GET_CAP for this command.</para> | |
| 299 | −</entry> | |
| 300 | − </row><row><entry | |
| 301 | − align="char"> | |
| 302 | −<para>ca_caps_t * | |
| 303 | −</para> | |
| 304 | −</entry><entry | |
| 305 | − align="char"> | |
| 306 | −<para>Undocumented.</para> | |
| 307 | −</entry> | |
| 308 | − </row></tbody></tgroup></informaltable> | |
| 309 | −&return-value-dvb; | |
| 310 | −</section> | |
| 311 | − | |
| 312 | −<section id="CA_GET_SLOT_INFO" | |
| 313 | −role="subsection"><title>CA_GET_SLOT_INFO</title> | |
| 314 | −<para>DESCRIPTION | |
| 315 | −</para> | |
| 316 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 317 | − align="char"> | |
| 318 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 319 | −</entry> | |
| 320 | − </row></tbody></tgroup></informaltable> | |
| 321 | −<para>SYNOPSIS | |
| 322 | −</para> | |
| 323 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 324 | − align="char"> | |
| 325 | −<para>int ioctl(fd, int request = CA_GET_SLOT_INFO, | |
| 326 | − ca_slot_info_t *);</para> | |
| 327 | −</entry> | |
| 328 | − </row></tbody></tgroup></informaltable> | |
| 329 | −<para>PARAMETERS | |
| 330 | −</para> | |
| 331 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 332 | − align="char"> | |
| 333 | −<para>int fd</para> | |
| 334 | −</entry><entry | |
| 335 | − align="char"> | |
| 336 | −<para>File descriptor returned by a previous call to open().</para> | |
| 337 | −</entry> | |
| 338 | − </row><row><entry | |
| 339 | − align="char"> | |
| 340 | −<para>int request</para> | |
| 341 | −</entry><entry | |
| 342 | − align="char"> | |
| 343 | −<para>Equals CA_GET_SLOT_INFO for this command.</para> | |
| 344 | −</entry> | |
| 345 | − </row><row><entry | |
| 346 | − align="char"> | |
| 347 | −<para>ca_slot_info_t * | |
| 348 | −</para> | |
| 349 | −</entry><entry | |
| 350 | − align="char"> | |
| 351 | −<para>Undocumented.</para> | |
| 352 | −</entry> | |
| 353 | − </row></tbody></tgroup></informaltable> | |
| 354 | −&return-value-dvb; | |
| 355 | −</section> | |
| 356 | − | |
| 357 | −<section id="CA_GET_DESCR_INFO" | |
| 358 | −role="subsection"><title>CA_GET_DESCR_INFO</title> | |
| 359 | −<para>DESCRIPTION | |
| 360 | −</para> | |
| 361 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 362 | − align="char"> | |
| 363 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 364 | −</entry> | |
| 365 | − </row></tbody></tgroup></informaltable> | |
| 366 | −<para>SYNOPSIS | |
| 367 | −</para> | |
| 368 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 369 | − align="char"> | |
| 370 | −<para>int ioctl(fd, int request = CA_GET_DESCR_INFO, | |
| 371 | − ca_descr_info_t *);</para> | |
| 372 | −</entry> | |
| 373 | − </row></tbody></tgroup></informaltable> | |
| 374 | −<para>PARAMETERS | |
| 375 | −</para> | |
| 376 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 377 | − align="char"> | |
| 378 | −<para>int fd</para> | |
| 379 | −</entry><entry | |
| 380 | − align="char"> | |
| 381 | −<para>File descriptor returned by a previous call to open().</para> | |
| 382 | −</entry> | |
| 383 | − </row><row><entry | |
| 384 | − align="char"> | |
| 385 | −<para>int request</para> | |
| 386 | −</entry><entry | |
| 387 | − align="char"> | |
| 388 | −<para>Equals CA_GET_DESCR_INFO for this command.</para> | |
| 389 | −</entry> | |
| 390 | − </row><row><entry | |
| 391 | − align="char"> | |
| 392 | −<para>ca_descr_info_t * | |
| 393 | −</para> | |
| 394 | −</entry><entry | |
| 395 | − align="char"> | |
| 396 | −<para>Undocumented.</para> | |
| 397 | −</entry> | |
| 398 | − </row></tbody></tgroup></informaltable> | |
| 399 | −&return-value-dvb; | |
| 400 | −</section> | |
| 401 | − | |
| 402 | −<section id="CA_GET_MSG" | |
| 403 | −role="subsection"><title>CA_GET_MSG</title> | |
| 404 | −<para>DESCRIPTION | |
| 405 | −</para> | |
| 406 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 407 | − align="char"> | |
| 408 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 409 | −</entry> | |
| 410 | − </row></tbody></tgroup></informaltable> | |
| 411 | −<para>SYNOPSIS | |
| 412 | −</para> | |
| 413 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 414 | − align="char"> | |
| 415 | −<para>int ioctl(fd, int request = CA_GET_MSG, | |
| 416 | − ca_msg_t *);</para> | |
| 417 | −</entry> | |
| 418 | − </row></tbody></tgroup></informaltable> | |
| 419 | −<para>PARAMETERS | |
| 420 | −</para> | |
| 421 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 422 | − align="char"> | |
| 423 | −<para>int fd</para> | |
| 424 | −</entry><entry | |
| 425 | − align="char"> | |
| 426 | −<para>File descriptor returned by a previous call to open().</para> | |
| 427 | −</entry> | |
| 428 | − </row><row><entry | |
| 429 | − align="char"> | |
| 430 | −<para>int request</para> | |
| 431 | −</entry><entry | |
| 432 | − align="char"> | |
| 433 | −<para>Equals CA_GET_MSG for this command.</para> | |
| 434 | −</entry> | |
| 435 | − </row><row><entry | |
| 436 | − align="char"> | |
| 437 | −<para>ca_msg_t * | |
| 438 | −</para> | |
| 439 | −</entry><entry | |
| 440 | − align="char"> | |
| 441 | −<para>Undocumented.</para> | |
| 442 | −</entry> | |
| 443 | − </row></tbody></tgroup></informaltable> | |
| 444 | −&return-value-dvb; | |
| 445 | −</section> | |
| 446 | − | |
| 447 | −<section id="CA_SEND_MSG" | |
| 448 | −role="subsection"><title>CA_SEND_MSG</title> | |
| 449 | −<para>DESCRIPTION | |
| 450 | −</para> | |
| 451 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 452 | − align="char"> | |
| 453 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 454 | −</entry> | |
| 455 | − </row></tbody></tgroup></informaltable> | |
| 456 | −<para>SYNOPSIS | |
| 457 | −</para> | |
| 458 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 459 | − align="char"> | |
| 460 | −<para>int ioctl(fd, int request = CA_SEND_MSG, | |
| 461 | − ca_msg_t *);</para> | |
| 462 | −</entry> | |
| 463 | − </row></tbody></tgroup></informaltable> | |
| 464 | −<para>PARAMETERS | |
| 465 | −</para> | |
| 466 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 467 | − align="char"> | |
| 468 | −<para>int fd</para> | |
| 469 | −</entry><entry | |
| 470 | − align="char"> | |
| 471 | −<para>File descriptor returned by a previous call to open().</para> | |
| 472 | −</entry> | |
| 473 | − </row><row><entry | |
| 474 | − align="char"> | |
| 475 | −<para>int request</para> | |
| 476 | −</entry><entry | |
| 477 | − align="char"> | |
| 478 | −<para>Equals CA_SEND_MSG for this command.</para> | |
| 479 | −</entry> | |
| 480 | − </row><row><entry | |
| 481 | − align="char"> | |
| 482 | −<para>ca_msg_t * | |
| 483 | −</para> | |
| 484 | −</entry><entry | |
| 485 | − align="char"> | |
| 486 | −<para>Undocumented.</para> | |
| 487 | −</entry> | |
| 488 | − </row></tbody></tgroup></informaltable> | |
| 489 | −&return-value-dvb; | |
| 490 | −</section> | |
| 491 | − | |
| 492 | −<section id="CA_SET_DESCR" | |
| 493 | −role="subsection"><title>CA_SET_DESCR</title> | |
| 494 | −<para>DESCRIPTION | |
| 495 | −</para> | |
| 496 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 497 | − align="char"> | |
| 498 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 499 | −</entry> | |
| 500 | − </row></tbody></tgroup></informaltable> | |
| 501 | −<para>SYNOPSIS | |
| 502 | −</para> | |
| 503 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 504 | − align="char"> | |
| 505 | −<para>int ioctl(fd, int request = CA_SET_DESCR, | |
| 506 | − ca_descr_t *);</para> | |
| 507 | −</entry> | |
| 508 | − </row></tbody></tgroup></informaltable> | |
| 509 | −<para>PARAMETERS | |
| 510 | −</para> | |
| 511 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 512 | − align="char"> | |
| 513 | −<para>int fd</para> | |
| 514 | −</entry><entry | |
| 515 | − align="char"> | |
| 516 | −<para>File descriptor returned by a previous call to open().</para> | |
| 517 | −</entry> | |
| 518 | − </row><row><entry | |
| 519 | − align="char"> | |
| 520 | −<para>int request</para> | |
| 521 | −</entry><entry | |
| 522 | − align="char"> | |
| 523 | −<para>Equals CA_SET_DESCR for this command.</para> | |
| 524 | −</entry> | |
| 525 | − </row><row><entry | |
| 526 | − align="char"> | |
| 527 | −<para>ca_descr_t * | |
| 528 | −</para> | |
| 529 | −</entry><entry | |
| 530 | − align="char"> | |
| 531 | −<para>Undocumented.</para> | |
| 532 | −</entry> | |
| 533 | − </row></tbody></tgroup></informaltable> | |
| 534 | −&return-value-dvb; | |
| 535 | −</section> | |
| 536 | − | |
| 537 | −<section id="CA_SET_PID" | |
| 538 | −role="subsection"><title>CA_SET_PID</title> | |
| 539 | −<para>DESCRIPTION | |
| 540 | −</para> | |
| 541 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 542 | − align="char"> | |
| 543 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 544 | −</entry> | |
| 545 | − </row></tbody></tgroup></informaltable> | |
| 546 | −<para>SYNOPSIS | |
| 547 | −</para> | |
| 548 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 549 | − align="char"> | |
| 550 | −<para>int ioctl(fd, int request = CA_SET_PID, | |
| 551 | − ca_pid_t *);</para> | |
| 552 | −</entry> | |
| 553 | − </row></tbody></tgroup></informaltable> | |
| 554 | −<para>PARAMETERS | |
| 555 | −</para> | |
| 556 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 557 | − align="char"> | |
| 558 | −<para>int fd</para> | |
| 559 | −</entry><entry | |
| 560 | − align="char"> | |
| 561 | −<para>File descriptor returned by a previous call to open().</para> | |
| 562 | −</entry> | |
| 563 | − </row><row><entry | |
| 564 | − align="char"> | |
| 565 | −<para>int request</para> | |
| 566 | −</entry><entry | |
| 567 | − align="char"> | |
| 568 | −<para>Equals CA_SET_PID for this command.</para> | |
| 569 | −</entry> | |
| 570 | − </row><row><entry | |
| 571 | − align="char"> | |
| 572 | −<para>ca_pid_t * | |
| 573 | −</para> | |
| 574 | −</entry><entry | |
| 575 | − align="char"> | |
| 576 | −<para>Undocumented.</para> | |
| 577 | −</entry> | |
| 578 | − </row></tbody></tgroup></informaltable> | |
| 579 | −&return-value-dvb; | |
| 580 | −</section> | |
| 581 | − | |
| 582 | −</section> | |
| @@ -1,1162 +0,0 @@ | ||
| 1 | −<title>DVB Demux Device</title> | |
| 2 | − | |
| 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. | |
| 6 | −</para> | |
| 7 | −<section id="dmx_types"> | |
| 8 | −<title>Demux Data Types</title> | |
| 9 | − | |
| 10 | −<section id="dmx-output-t"> | |
| 11 | −<title>Output for the demux</title> | |
| 12 | − | |
| 13 | −<table pgwide="1" frame="none" id="dmx-output"> | |
| 14 | − <title>enum dmx_output</title> | |
| 15 | − <tgroup cols="2"> | |
| 16 | − &cs-def; | |
| 17 | − <thead> | |
| 18 | − <row> | |
| 19 | − <entry>ID</entry> | |
| 20 | − <entry>Description</entry> | |
| 21 | − </row> | |
| 22 | − </thead> | |
| 23 | − <tbody valign="top"> | |
| 24 | − <row> | |
| 25 | − <entry align="char" id="DMX-OUT-DECODER">DMX_OUT_DECODER</entry> | |
| 26 | − <entry>Streaming directly to decoder.</entry> | |
| 27 | − </row><row> | |
| 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> | |
| 32 | − </row><row> | |
| 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> | |
| 39 | − </row><row> | |
| 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 | |
| 42 | − device.</entry> | |
| 43 | − </row> | |
| 44 | − </tbody> | |
| 45 | − </tgroup> | |
| 46 | −</table> | |
| 47 | − | |
| 48 | −</section> | |
| 49 | − | |
| 50 | −<section id="dmx-input-t"> | |
| 51 | −<title>dmx_input_t</title> | |
| 52 | −<programlisting> | |
| 53 | −typedef enum | |
| 54 | −{ | |
| 55 | − DMX_IN_FRONTEND, /⋆ Input from a front-end device. ⋆/ | |
| 56 | − DMX_IN_DVR /⋆ Input from the logical DVR device. ⋆/ | |
| 57 | −} dmx_input_t; | |
| 58 | −</programlisting> | |
| 59 | −</section> | |
| 60 | − | |
| 61 | −<section id="dmx-pes-type-t"> | |
| 62 | −<title>dmx_pes_type_t</title> | |
| 63 | −<programlisting> | |
| 64 | −typedef enum | |
| 65 | −{ | |
| 66 | − DMX_PES_AUDIO0, | |
| 67 | − DMX_PES_VIDEO0, | |
| 68 | − DMX_PES_TELETEXT0, | |
| 69 | − DMX_PES_SUBTITLE0, | |
| 70 | − DMX_PES_PCR0, | |
| 71 | − | |
| 72 | − DMX_PES_AUDIO1, | |
| 73 | − DMX_PES_VIDEO1, | |
| 74 | − DMX_PES_TELETEXT1, | |
| 75 | − DMX_PES_SUBTITLE1, | |
| 76 | − DMX_PES_PCR1, | |
| 77 | − | |
| 78 | − DMX_PES_AUDIO2, | |
| 79 | − DMX_PES_VIDEO2, | |
| 80 | − DMX_PES_TELETEXT2, | |
| 81 | − DMX_PES_SUBTITLE2, | |
| 82 | − DMX_PES_PCR2, | |
| 83 | − | |
| 84 | − DMX_PES_AUDIO3, | |
| 85 | − DMX_PES_VIDEO3, | |
| 86 | − DMX_PES_TELETEXT3, | |
| 87 | − DMX_PES_SUBTITLE3, | |
| 88 | − DMX_PES_PCR3, | |
| 89 | − | |
| 90 | − DMX_PES_OTHER | |
| 91 | −} dmx_pes_type_t; | |
| 92 | −</programlisting> | |
| 93 | −</section> | |
| 94 | − | |
| 95 | −<section id="dmx-filter"> | |
| 96 | −<title>struct dmx_filter</title> | |
| 97 | − <programlisting> | |
| 98 | − typedef struct dmx_filter | |
| 99 | −{ | |
| 100 | − __u8 filter[DMX_FILTER_SIZE]; | |
| 101 | − __u8 mask[DMX_FILTER_SIZE]; | |
| 102 | − __u8 mode[DMX_FILTER_SIZE]; | |
| 103 | −} dmx_filter_t; | |
| 104 | −</programlisting> | |
| 105 | −</section> | |
| 106 | − | |
| 107 | −<section id="dmx-sct-filter-params"> | |
| 108 | −<title>struct dmx_sct_filter_params</title> | |
| 109 | −<programlisting> | |
| 110 | −struct dmx_sct_filter_params | |
| 111 | −{ | |
| 112 | − __u16 pid; | |
| 113 | − dmx_filter_t filter; | |
| 114 | − __u32 timeout; | |
| 115 | − __u32 flags; | |
| 116 | −#define DMX_CHECK_CRC 1 | |
| 117 | −#define DMX_ONESHOT 2 | |
| 118 | −#define DMX_IMMEDIATE_START 4 | |
| 119 | −#define DMX_KERNEL_CLIENT 0x8000 | |
| 120 | −}; | |
| 121 | −</programlisting> | |
| 122 | −</section> | |
| 123 | − | |
| 124 | −<section id="dmx-pes-filter-params"> | |
| 125 | −<title>struct dmx_pes_filter_params</title> | |
| 126 | −<programlisting> | |
| 127 | −struct dmx_pes_filter_params | |
| 128 | −{ | |
| 129 | − __u16 pid; | |
| 130 | − dmx_input_t input; | |
| 131 | − dmx_output_t output; | |
| 132 | − dmx_pes_type_t pes_type; | |
| 133 | − __u32 flags; | |
| 134 | −}; | |
| 135 | −</programlisting> | |
| 136 | −</section> | |
| 137 | − | |
| 138 | −<section id="dmx-event"> | |
| 139 | −<title>struct dmx_event</title> | |
| 140 | − <programlisting> | |
| 141 | − struct dmx_event | |
| 142 | − { | |
| 143 | − dmx_event_t event; | |
| 144 | − time_t timeStamp; | |
| 145 | − union | |
| 146 | − { | |
| 147 | − dmx_scrambling_status_t scrambling; | |
| 148 | − } u; | |
| 149 | − }; | |
| 150 | −</programlisting> | |
| 151 | −</section> | |
| 152 | − | |
| 153 | −<section id="dmx-stc"> | |
| 154 | −<title>struct dmx_stc</title> | |
| 155 | −<programlisting> | |
| 156 | −struct dmx_stc { | |
| 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 ⋆/ | |
| 160 | −}; | |
| 161 | −</programlisting> | |
| 162 | −</section> | |
| 163 | − | |
| 164 | −<section id="dmx-caps"> | |
| 165 | −<title>struct dmx_caps</title> | |
| 166 | −<programlisting> | |
| 167 | − typedef struct dmx_caps { | |
| 168 | − __u32 caps; | |
| 169 | − int num_decoders; | |
| 170 | −} dmx_caps_t; | |
| 171 | −</programlisting> | |
| 172 | −</section> | |
| 173 | − | |
| 174 | −<section id="dmx-source-t"> | |
| 175 | −<title>enum dmx_source_t</title> | |
| 176 | −<programlisting> | |
| 177 | −typedef enum { | |
| 178 | − DMX_SOURCE_FRONT0 = 0, | |
| 179 | − DMX_SOURCE_FRONT1, | |
| 180 | − DMX_SOURCE_FRONT2, | |
| 181 | − DMX_SOURCE_FRONT3, | |
| 182 | − DMX_SOURCE_DVR0 = 16, | |
| 183 | − DMX_SOURCE_DVR1, | |
| 184 | − DMX_SOURCE_DVR2, | |
| 185 | − DMX_SOURCE_DVR3 | |
| 186 | −} dmx_source_t; | |
| 187 | −</programlisting> | |
| 188 | −</section> | |
| 189 | − | |
| 190 | −</section> | |
| 191 | −<section id="dmx_fcalls"> | |
| 192 | −<title>Demux Function Calls</title> | |
| 193 | − | |
| 194 | −<section id="dmx_fopen"> | |
| 195 | −<title>open()</title> | |
| 196 | −<para>DESCRIPTION | |
| 197 | −</para> | |
| 198 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 199 | − align="char"> | |
| 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> | |
| 214 | −</entry> | |
| 215 | − </row></tbody></tgroup></informaltable> | |
| 216 | −<para>SYNOPSIS | |
| 217 | −</para> | |
| 218 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 219 | − align="char"> | |
| 220 | −<para>int open(const char ⋆deviceName, int flags);</para> | |
| 221 | −</entry> | |
| 222 | − </row></tbody></tgroup></informaltable> | |
| 223 | −<para>PARAMETERS | |
| 224 | −</para> | |
| 225 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 226 | − align="char"> | |
| 227 | −<para>const char | |
| 228 | − *deviceName</para> | |
| 229 | −</entry><entry | |
| 230 | − align="char"> | |
| 231 | −<para>Name of demux device.</para> | |
| 232 | −</entry> | |
| 233 | − </row><row><entry | |
| 234 | − align="char"> | |
| 235 | −<para>int flags</para> | |
| 236 | −</entry><entry | |
| 237 | − align="char"> | |
| 238 | −<para>A bit-wise OR of the following flags:</para> | |
| 239 | −</entry> | |
| 240 | − </row><row><entry | |
| 241 | − align="char"> | |
| 242 | −</entry><entry | |
| 243 | − align="char"> | |
| 244 | −<para>O_RDWR read/write access</para> | |
| 245 | −</entry> | |
| 246 | − </row><row><entry | |
| 247 | − align="char"> | |
| 248 | −</entry><entry | |
| 249 | − align="char"> | |
| 250 | −<para>O_NONBLOCK open in non-blocking mode</para> | |
| 251 | −</entry> | |
| 252 | − </row><row><entry | |
| 253 | − align="char"> | |
| 254 | −</entry><entry | |
| 255 | − align="char"> | |
| 256 | −<para>(blocking mode is the default)</para> | |
| 257 | −</entry> | |
| 258 | − </row></tbody></tgroup></informaltable> | |
| 259 | −<para>RETURN VALUE</para> | |
| 260 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 261 | − align="char"> | |
| 262 | −<para>ENODEV</para> | |
| 263 | −</entry><entry | |
| 264 | − align="char"> | |
| 265 | −<para>Device driver not loaded/available.</para> | |
| 266 | −</entry> | |
| 267 | − </row><row><entry | |
| 268 | − align="char"> | |
| 269 | −<para>EINVAL</para> | |
| 270 | −</entry><entry | |
| 271 | − align="char"> | |
| 272 | −<para>Invalid argument.</para> | |
| 273 | −</entry> | |
| 274 | − </row><row><entry | |
| 275 | − align="char"> | |
| 276 | −<para>EMFILE</para> | |
| 277 | −</entry><entry | |
| 278 | − align="char"> | |
| 279 | −<para>“Too many open files”, i.e. no more filters available.</para> | |
| 280 | −</entry> | |
| 281 | − </row><row><entry | |
| 282 | − align="char"> | |
| 283 | −<para>ENOMEM</para> | |
| 284 | −</entry><entry | |
| 285 | − align="char"> | |
| 286 | −<para>The driver failed to allocate enough memory.</para> | |
| 287 | −</entry> | |
| 288 | − </row></tbody></tgroup></informaltable> | |
| 289 | −</section> | |
| 290 | − | |
| 291 | −<section id="dmx_fclose"> | |
| 292 | −<title>close()</title> | |
| 293 | −<para>DESCRIPTION | |
| 294 | −</para> | |
| 295 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 296 | − align="char"> | |
| 297 | −<para>This system call deactivates and deallocates a filter that was previously | |
| 298 | − allocated via the open() call.</para> | |
| 299 | −</entry> | |
| 300 | − </row></tbody></tgroup></informaltable> | |
| 301 | −<para>SYNOPSIS | |
| 302 | −</para> | |
| 303 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 304 | − align="char"> | |
| 305 | −<para>int close(int fd);</para> | |
| 306 | −</entry> | |
| 307 | − </row></tbody></tgroup></informaltable> | |
| 308 | −<para>PARAMETERS | |
| 309 | −</para> | |
| 310 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 311 | − align="char"> | |
| 312 | −<para>int fd</para> | |
| 313 | −</entry><entry | |
| 314 | − align="char"> | |
| 315 | −<para>File descriptor returned by a previous call to open().</para> | |
| 316 | −</entry> | |
| 317 | − </row></tbody></tgroup></informaltable> | |
| 318 | −<para>RETURN VALUE</para> | |
| 319 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 320 | − align="char"> | |
| 321 | −<para>EBADF</para> | |
| 322 | −</entry><entry | |
| 323 | − align="char"> | |
| 324 | −<para>fd is not a valid open file descriptor.</para> | |
| 325 | −</entry> | |
| 326 | − </row></tbody></tgroup></informaltable> | |
| 327 | −</section> | |
| 328 | − | |
| 329 | −<section id="dmx_fread"> | |
| 330 | −<title>read()</title> | |
| 331 | −<para>DESCRIPTION | |
| 332 | −</para> | |
| 333 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 334 | − align="char"> | |
| 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> | |
| 338 | −</entry> | |
| 339 | − </row><row><entry | |
| 340 | − align="char"> | |
| 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> | |
| 345 | −</entry> | |
| 346 | − </row><row><entry | |
| 347 | − align="char"> | |
| 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 | |
| 355 | − is specified.</para> | |
| 356 | −</entry> | |
| 357 | − </row><row><entry | |
| 358 | − align="char"> | |
| 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> | |
| 366 | −</entry> | |
| 367 | − </row></tbody></tgroup></informaltable> | |
| 368 | −<para>SYNOPSIS | |
| 369 | −</para> | |
| 370 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 371 | − align="char"> | |
| 372 | −<para>size_t read(int fd, void ⋆buf, size_t count);</para> | |
| 373 | −</entry> | |
| 374 | − </row></tbody></tgroup></informaltable> | |
| 375 | −<para>PARAMETERS | |
| 376 | −</para> | |
| 377 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 378 | − align="char"> | |
| 379 | −<para>int fd</para> | |
| 380 | −</entry><entry | |
| 381 | − align="char"> | |
| 382 | −<para>File descriptor returned by a previous call to open().</para> | |
| 383 | −</entry> | |
| 384 | − </row><row><entry | |
| 385 | − align="char"> | |
| 386 | −<para>void *buf</para> | |
| 387 | −</entry><entry | |
| 388 | − align="char"> | |
| 389 | −<para>Pointer to the buffer to be used for returned filtered data.</para> | |
| 390 | −</entry> | |
| 391 | − </row><row><entry | |
| 392 | − align="char"> | |
| 393 | −<para>size_t count</para> | |
| 394 | −</entry><entry | |
| 395 | − align="char"> | |
| 396 | −<para>Size of buf.</para> | |
| 397 | −</entry> | |
| 398 | − </row></tbody></tgroup></informaltable> | |
| 399 | −<para>RETURN VALUE</para> | |
| 400 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 401 | − align="char"> | |
| 402 | −<para>EWOULDBLOCK</para> | |
| 403 | −</entry><entry | |
| 404 | − align="char"> | |
| 405 | −<para>No data to return and O_NONBLOCK was specified.</para> | |
| 406 | −</entry> | |
| 407 | − </row><row><entry | |
| 408 | − align="char"> | |
| 409 | −<para>EBADF</para> | |
| 410 | −</entry><entry | |
| 411 | − align="char"> | |
| 412 | −<para>fd is not a valid open file descriptor.</para> | |
| 413 | −</entry> | |
| 414 | − </row><row><entry | |
| 415 | − align="char"> | |
| 416 | −<para>ECRC</para> | |
| 417 | −</entry><entry | |
| 418 | − align="char"> | |
| 419 | −<para>Last section had a CRC error - no data returned. The | |
| 420 | − buffer is flushed.</para> | |
| 421 | −</entry> | |
| 422 | − </row><row><entry | |
| 423 | − align="char"> | |
| 424 | −<para>EOVERFLOW</para> | |
| 425 | −</entry><entry | |
| 426 | − align="char"> | |
| 427 | −</entry> | |
| 428 | − </row><row><entry | |
| 429 | − align="char"> | |
| 430 | −</entry><entry | |
| 431 | − align="char"> | |
| 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 | |
| 434 | − flushed.</para> | |
| 435 | −</entry> | |
| 436 | − </row><row><entry | |
| 437 | − align="char"> | |
| 438 | −<para>ETIMEDOUT</para> | |
| 439 | −</entry><entry | |
| 440 | − align="char"> | |
| 441 | −<para>The section was not loaded within the stated timeout | |
| 442 | − period. See ioctl DMX_SET_FILTER for how to set a | |
| 443 | − timeout.</para> | |
| 444 | −</entry> | |
| 445 | − </row><row><entry | |
| 446 | − align="char"> | |
| 447 | −<para>EFAULT</para> | |
| 448 | −</entry><entry | |
| 449 | − align="char"> | |
| 450 | −<para>The driver failed to write to the callers buffer due to an | |
| 451 | − invalid *buf pointer.</para> | |
| 452 | −</entry> | |
| 453 | − </row></tbody></tgroup></informaltable> | |
| 454 | −</section> | |
| 455 | − | |
| 456 | −<section id="dmx_fwrite"> | |
| 457 | −<title>write()</title> | |
| 458 | −<para>DESCRIPTION | |
| 459 | −</para> | |
| 460 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 461 | − align="char"> | |
| 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> | |
| 468 | −</entry> | |
| 469 | − </row></tbody></tgroup></informaltable> | |
| 470 | −<para>SYNOPSIS | |
| 471 | −</para> | |
| 472 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 473 | − align="char"> | |
| 474 | −<para>ssize_t write(int fd, const void ⋆buf, size_t | |
| 475 | − count);</para> | |
| 476 | −</entry> | |
| 477 | − </row></tbody></tgroup></informaltable> | |
| 478 | −<para>PARAMETERS | |
| 479 | −</para> | |
| 480 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 481 | − align="char"> | |
| 482 | −<para>int fd</para> | |
| 483 | −</entry><entry | |
| 484 | − align="char"> | |
| 485 | −<para>File descriptor returned by a previous call to open().</para> | |
| 486 | −</entry> | |
| 487 | − </row><row><entry | |
| 488 | − align="char"> | |
| 489 | −<para>void *buf</para> | |
| 490 | −</entry><entry | |
| 491 | − align="char"> | |
| 492 | −<para>Pointer to the buffer containing the Transport Stream.</para> | |
| 493 | −</entry> | |
| 494 | − </row><row><entry | |
| 495 | − align="char"> | |
| 496 | −<para>size_t count</para> | |
| 497 | −</entry><entry | |
| 498 | − align="char"> | |
| 499 | −<para>Size of buf.</para> | |
| 500 | −</entry> | |
| 501 | − </row></tbody></tgroup></informaltable> | |
| 502 | −<para>RETURN VALUE</para> | |
| 503 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 504 | − align="char"> | |
| 505 | −<para>EWOULDBLOCK</para> | |
| 506 | −</entry><entry | |
| 507 | − align="char"> | |
| 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 | |
| 512 | − available).</para> | |
| 513 | −</entry> | |
| 514 | − </row><row><entry | |
| 515 | − align="char"> | |
| 516 | −<para>EBUSY</para> | |
| 517 | −</entry><entry | |
| 518 | − align="char"> | |
| 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> | |
| 524 | −</entry> | |
| 525 | − </row><row><entry | |
| 526 | − align="char"> | |
| 527 | −<para>EBADF</para> | |
| 528 | −</entry><entry | |
| 529 | − align="char"> | |
| 530 | −<para>fd is not a valid open file descriptor.</para> | |
| 531 | −</entry> | |
| 532 | − </row></tbody></tgroup></informaltable> | |
| 533 | −</section> | |
| 534 | − | |
| 535 | −<section id="DMX_START"> | |
| 536 | −<title>DMX_START</title> | |
| 537 | −<para>DESCRIPTION | |
| 538 | −</para> | |
| 539 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 540 | − align="char"> | |
| 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> | |
| 543 | −</entry> | |
| 544 | − </row></tbody></tgroup></informaltable> | |
| 545 | −<para>SYNOPSIS | |
| 546 | −</para> | |
| 547 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 548 | − align="char"> | |
| 549 | −<para>int ioctl( int fd, int request = DMX_START);</para> | |
| 550 | −</entry> | |
| 551 | − </row></tbody></tgroup></informaltable> | |
| 552 | −<para>PARAMETERS | |
| 553 | −</para> | |
| 554 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 555 | − align="char"> | |
| 556 | −<para>int fd</para> | |
| 557 | −</entry><entry | |
| 558 | − align="char"> | |
| 559 | −<para>File descriptor returned by a previous call to open().</para> | |
| 560 | −</entry> | |
| 561 | − </row><row><entry | |
| 562 | − align="char"> | |
| 563 | −<para>int request</para> | |
| 564 | −</entry><entry | |
| 565 | − align="char"> | |
| 566 | −<para>Equals DMX_START for this command.</para> | |
| 567 | −</entry> | |
| 568 | − </row></tbody></tgroup></informaltable> | |
| 569 | −&return-value-dvb; | |
| 570 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 571 | − align="char"> | |
| 572 | −<para>EINVAL</para> | |
| 573 | −</entry><entry | |
| 574 | − align="char"> | |
| 575 | −<para>Invalid argument, i.e. no filtering parameters provided via | |
| 576 | − the DMX_SET_FILTER or DMX_SET_PES_FILTER | |
| 577 | − functions.</para> | |
| 578 | −</entry> | |
| 579 | − </row><row><entry | |
| 580 | − align="char"> | |
| 581 | −<para>EBUSY</para> | |
| 582 | −</entry><entry | |
| 583 | − align="char"> | |
| 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> | |
| 588 | −</entry> | |
| 589 | − </row></tbody></tgroup></informaltable> | |
| 590 | −</section> | |
| 591 | − | |
| 592 | −<section id="DMX_STOP"> | |
| 593 | −<title>DMX_STOP</title> | |
| 594 | −<para>DESCRIPTION | |
| 595 | −</para> | |
| 596 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 597 | − align="char"> | |
| 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> | |
| 601 | −</entry> | |
| 602 | − </row></tbody></tgroup></informaltable> | |
| 603 | −<para>SYNOPSIS | |
| 604 | −</para> | |
| 605 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 606 | − align="char"> | |
| 607 | −<para>int ioctl( int fd, int request = DMX_STOP);</para> | |
| 608 | −</entry> | |
| 609 | − </row></tbody></tgroup></informaltable> | |
| 610 | −<para>PARAMETERS | |
| 611 | −</para> | |
| 612 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 613 | − align="char"> | |
| 614 | −<para>int fd</para> | |
| 615 | −</entry><entry | |
| 616 | − align="char"> | |
| 617 | −<para>File descriptor returned by a previous call to open().</para> | |
| 618 | −</entry> | |
| 619 | − </row><row><entry | |
| 620 | − align="char"> | |
| 621 | −<para>int request</para> | |
| 622 | −</entry><entry | |
| 623 | − align="char"> | |
| 624 | −<para>Equals DMX_STOP for this command.</para> | |
| 625 | −</entry> | |
| 626 | − </row></tbody></tgroup></informaltable> | |
| 627 | −&return-value-dvb; | |
| 628 | −</section> | |
| 629 | − | |
| 630 | −<section id="DMX_SET_FILTER"> | |
| 631 | −<title>DMX_SET_FILTER</title> | |
| 632 | −<para>DESCRIPTION | |
| 633 | −</para> | |
| 634 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 635 | − align="char"> | |
| 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> | |
| 645 | −</entry> | |
| 646 | − </row></tbody></tgroup></informaltable> | |
| 647 | −<para>SYNOPSIS | |
| 648 | −</para> | |
| 649 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 650 | − align="char"> | |
| 651 | −<para>int ioctl( int fd, int request = DMX_SET_FILTER, | |
| 652 | − struct dmx_sct_filter_params ⋆params);</para> | |
| 653 | −</entry> | |
| 654 | − </row></tbody></tgroup></informaltable> | |
| 655 | −<para>PARAMETERS | |
| 656 | −</para> | |
| 657 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 658 | − align="char"> | |
| 659 | −<para>int fd</para> | |
| 660 | −</entry><entry | |
| 661 | − align="char"> | |
| 662 | −<para>File descriptor returned by a previous call to open().</para> | |
| 663 | −</entry> | |
| 664 | − </row><row><entry | |
| 665 | − align="char"> | |
| 666 | −<para>int request</para> | |
| 667 | −</entry><entry | |
| 668 | − align="char"> | |
| 669 | −<para>Equals DMX_SET_FILTER for this command.</para> | |
| 670 | −</entry> | |
| 671 | − </row><row><entry | |
| 672 | − align="char"> | |
| 673 | −<para>struct | |
| 674 | − dmx_sct_filter_params | |
| 675 | − *params</para> | |
| 676 | −</entry><entry | |
| 677 | − align="char"> | |
| 678 | −<para>Pointer to structure containing filter parameters.</para> | |
| 679 | −</entry> | |
| 680 | − </row></tbody></tgroup></informaltable> | |
| 681 | −&return-value-dvb; | |
| 682 | −</section> | |
| 683 | − | |
| 684 | −<section id="DMX_SET_PES_FILTER"> | |
| 685 | −<title>DMX_SET_PES_FILTER</title> | |
| 686 | −<para>DESCRIPTION | |
| 687 | −</para> | |
| 688 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 689 | − align="char"> | |
| 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> | |
| 693 | −</entry> | |
| 694 | − </row><row><entry | |
| 695 | − align="char"> | |
| 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> | |
| 702 | −</entry> | |
| 703 | − </row></tbody></tgroup></informaltable> | |
| 704 | −<para>SYNOPSIS | |
| 705 | −</para> | |
| 706 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 707 | − align="char"> | |
| 708 | −<para>int ioctl( int fd, int request = DMX_SET_PES_FILTER, | |
| 709 | − struct dmx_pes_filter_params ⋆params);</para> | |
| 710 | −</entry> | |
| 711 | − </row></tbody></tgroup></informaltable> | |
| 712 | −<para>PARAMETERS | |
| 713 | −</para> | |
| 714 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 715 | − align="char"> | |
| 716 | −<para>int fd</para> | |
| 717 | −</entry><entry | |
| 718 | − align="char"> | |
| 719 | −<para>File descriptor returned by a previous call to open().</para> | |
| 720 | −</entry> | |
| 721 | − </row><row><entry | |
| 722 | − align="char"> | |
| 723 | −<para>int request</para> | |
| 724 | −</entry><entry | |
| 725 | − align="char"> | |
| 726 | −<para>Equals DMX_SET_PES_FILTER for this command.</para> | |
| 727 | −</entry> | |
| 728 | − </row><row><entry | |
| 729 | − align="char"> | |
| 730 | −<para>struct | |
| 731 | − dmx_pes_filter_params | |
| 732 | − *params</para> | |
| 733 | −</entry><entry | |
| 734 | − align="char"> | |
| 735 | −<para>Pointer to structure containing filter parameters.</para> | |
| 736 | −</entry> | |
| 737 | − </row></tbody></tgroup></informaltable> | |
| 738 | −&return-value-dvb; | |
| 739 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 740 | − align="char"> | |
| 741 | −<para>EBUSY</para> | |
| 742 | −</entry><entry | |
| 743 | − align="char"> | |
| 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> | |
| 748 | −</entry> | |
| 749 | − </row></tbody></tgroup></informaltable> | |
| 750 | −</section> | |
| 751 | − | |
| 752 | −<section id="DMX_SET_BUFFER_SIZE"> | |
| 753 | −<title>DMX_SET_BUFFER_SIZE</title> | |
| 754 | −<para>DESCRIPTION | |
| 755 | −</para> | |
| 756 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 757 | − align="char"> | |
| 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> | |
| 761 | −</entry> | |
| 762 | − </row></tbody></tgroup></informaltable> | |
| 763 | −<para>SYNOPSIS | |
| 764 | −</para> | |
| 765 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 766 | − align="char"> | |
| 767 | −<para>int ioctl( int fd, int request = | |
| 768 | − DMX_SET_BUFFER_SIZE, unsigned long size);</para> | |
| 769 | −</entry> | |
| 770 | − </row></tbody></tgroup></informaltable> | |
| 771 | −<para>PARAMETERS | |
| 772 | −</para> | |
| 773 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 774 | − align="char"> | |
| 775 | −<para>int fd</para> | |
| 776 | −</entry><entry | |
| 777 | − align="char"> | |
| 778 | −<para>File descriptor returned by a previous call to open().</para> | |
| 779 | −</entry> | |
| 780 | − </row><row><entry | |
| 781 | − align="char"> | |
| 782 | −<para>int request</para> | |
| 783 | −</entry><entry | |
| 784 | − align="char"> | |
| 785 | −<para>Equals DMX_SET_BUFFER_SIZE for this command.</para> | |
| 786 | −</entry> | |
| 787 | − </row><row><entry | |
| 788 | − align="char"> | |
| 789 | −<para>unsigned long size</para> | |
| 790 | −</entry><entry | |
| 791 | − align="char"> | |
| 792 | −<para>Size of circular buffer.</para> | |
| 793 | −</entry> | |
| 794 | − </row></tbody></tgroup></informaltable> | |
| 795 | −&return-value-dvb; | |
| 796 | −</section> | |
| 797 | − | |
| 798 | −<section id="DMX_GET_EVENT"> | |
| 799 | −<title>DMX_GET_EVENT</title> | |
| 800 | −<para>DESCRIPTION | |
| 801 | −</para> | |
| 802 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 803 | − align="char"> | |
| 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 | |
| 808 | − available.</para> | |
| 809 | −</entry> | |
| 810 | − </row><row><entry | |
| 811 | − align="char"> | |
| 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 | |
| 816 | − saved.</para> | |
| 817 | −</entry> | |
| 818 | − </row></tbody></tgroup></informaltable> | |
| 819 | −<para>SYNOPSIS | |
| 820 | −</para> | |
| 821 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 822 | − align="char"> | |
| 823 | −<para>int ioctl( int fd, int request = DMX_GET_EVENT, | |
| 824 | − struct dmx_event ⋆ev);</para> | |
| 825 | −</entry> | |
| 826 | − </row></tbody></tgroup></informaltable> | |
| 827 | −<para>PARAMETERS | |
| 828 | −</para> | |
| 829 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 830 | − align="char"> | |
| 831 | −<para>int fd</para> | |
| 832 | −</entry><entry | |
| 833 | − align="char"> | |
| 834 | −<para>File descriptor returned by a previous call to open().</para> | |
| 835 | −</entry> | |
| 836 | − </row><row><entry | |
| 837 | − align="char"> | |
| 838 | −<para>int request</para> | |
| 839 | −</entry><entry | |
| 840 | − align="char"> | |
| 841 | −<para>Equals DMX_GET_EVENT for this command.</para> | |
| 842 | −</entry> | |
| 843 | − </row><row><entry | |
| 844 | − align="char"> | |
| 845 | −<para>struct dmx_event *ev</para> | |
| 846 | −</entry><entry | |
| 847 | − align="char"> | |
| 848 | −<para>Pointer to the location where the event is to be stored.</para> | |
| 849 | −</entry> | |
| 850 | − </row></tbody></tgroup></informaltable> | |
| 851 | −&return-value-dvb; | |
| 852 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 853 | − align="char"> | |
| 854 | −<para>EWOULDBLOCK</para> | |
| 855 | −</entry><entry | |
| 856 | − align="char"> | |
| 857 | −<para>There is no event pending, and the device is in | |
| 858 | − non-blocking mode.</para> | |
| 859 | −</entry> | |
| 860 | − </row></tbody></tgroup></informaltable> | |
| 861 | −</section> | |
| 862 | − | |
| 863 | −<section id="DMX_GET_STC"> | |
| 864 | −<title>DMX_GET_STC</title> | |
| 865 | −<para>DESCRIPTION | |
| 866 | −</para> | |
| 867 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 868 | − align="char"> | |
| 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 / | |
| 874 | − stc->base | |
| 875 | − .</para> | |
| 876 | −</entry> | |
| 877 | − </row></tbody></tgroup></informaltable> | |
| 878 | −<para>SYNOPSIS | |
| 879 | −</para> | |
| 880 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 881 | − align="char"> | |
| 882 | −<para>int ioctl( int fd, int request = DMX_GET_STC, struct | |
| 883 | − dmx_stc ⋆stc);</para> | |
| 884 | −</entry> | |
| 885 | − </row></tbody></tgroup></informaltable> | |
| 886 | −<para>PARAMETERS | |
| 887 | −</para> | |
| 888 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 889 | − align="char"> | |
| 890 | −<para>int fd</para> | |
| 891 | −</entry><entry | |
| 892 | − align="char"> | |
| 893 | −<para>File descriptor returned by a previous call to open().</para> | |
| 894 | −</entry> | |
| 895 | − </row><row><entry | |
| 896 | − align="char"> | |
| 897 | −<para>int request</para> | |
| 898 | −</entry><entry | |
| 899 | − align="char"> | |
| 900 | −<para>Equals DMX_GET_STC for this command.</para> | |
| 901 | −</entry> | |
| 902 | − </row><row><entry | |
| 903 | − align="char"> | |
| 904 | −<para>struct dmx_stc *stc</para> | |
| 905 | −</entry><entry | |
| 906 | − align="char"> | |
| 907 | −<para>Pointer to the location where the stc is to be stored.</para> | |
| 908 | −</entry> | |
| 909 | − </row></tbody></tgroup></informaltable> | |
| 910 | −&return-value-dvb; | |
| 911 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 912 | − align="char"> | |
| 913 | −<para>EINVAL</para> | |
| 914 | −</entry><entry | |
| 915 | − align="char"> | |
| 916 | −<para>Invalid stc number.</para> | |
| 917 | −</entry> | |
| 918 | − </row></tbody></tgroup></informaltable> | |
| 919 | − </section> | |
| 920 | − | |
| 921 | −<section id="DMX_GET_PES_PIDS" | |
| 922 | −role="subsection"><title>DMX_GET_PES_PIDS</title> | |
| 923 | −<para>DESCRIPTION | |
| 924 | −</para> | |
| 925 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 926 | − align="char"> | |
| 927 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 928 | −</entry> | |
| 929 | − </row></tbody></tgroup></informaltable> | |
| 930 | −<para>SYNOPSIS | |
| 931 | −</para> | |
| 932 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 933 | − align="char"> | |
| 934 | −<para>int ioctl(fd, int request = DMX_GET_PES_PIDS, | |
| 935 | − __u16[5]);</para> | |
| 936 | −</entry> | |
| 937 | − </row></tbody></tgroup></informaltable> | |
| 938 | −<para>PARAMETERS | |
| 939 | −</para> | |
| 940 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 941 | − align="char"> | |
| 942 | −<para>int fd</para> | |
| 943 | −</entry><entry | |
| 944 | − align="char"> | |
| 945 | −<para>File descriptor returned by a previous call to open().</para> | |
| 946 | −</entry> | |
| 947 | − </row><row><entry | |
| 948 | − align="char"> | |
| 949 | −<para>int request</para> | |
| 950 | −</entry><entry | |
| 951 | − align="char"> | |
| 952 | −<para>Equals DMX_GET_PES_PIDS for this command.</para> | |
| 953 | −</entry> | |
| 954 | − </row><row><entry | |
| 955 | − align="char"> | |
| 956 | −<para>__u16[5] | |
| 957 | −</para> | |
| 958 | −</entry><entry | |
| 959 | − align="char"> | |
| 960 | −<para>Undocumented.</para> | |
| 961 | −</entry> | |
| 962 | − </row></tbody></tgroup></informaltable> | |
| 963 | −&return-value-dvb; | |
| 964 | −</section> | |
| 965 | − | |
| 966 | −<section id="DMX_GET_CAPS" | |
| 967 | −role="subsection"><title>DMX_GET_CAPS</title> | |
| 968 | −<para>DESCRIPTION | |
| 969 | −</para> | |
| 970 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 971 | − align="char"> | |
| 972 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 973 | −</entry> | |
| 974 | − </row></tbody></tgroup></informaltable> | |
| 975 | −<para>SYNOPSIS | |
| 976 | −</para> | |
| 977 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 978 | − align="char"> | |
| 979 | −<para>int ioctl(fd, int request = DMX_GET_CAPS, | |
| 980 | − dmx_caps_t *);</para> | |
| 981 | −</entry> | |
| 982 | − </row></tbody></tgroup></informaltable> | |
| 983 | −<para>PARAMETERS | |
| 984 | −</para> | |
| 985 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 986 | − align="char"> | |
| 987 | −<para>int fd</para> | |
| 988 | −</entry><entry | |
| 989 | − align="char"> | |
| 990 | −<para>File descriptor returned by a previous call to open().</para> | |
| 991 | −</entry> | |
| 992 | − </row><row><entry | |
| 993 | − align="char"> | |
| 994 | −<para>int request</para> | |
| 995 | −</entry><entry | |
| 996 | − align="char"> | |
| 997 | −<para>Equals DMX_GET_CAPS for this command.</para> | |
| 998 | −</entry> | |
| 999 | − </row><row><entry | |
| 1000 | − align="char"> | |
| 1001 | −<para>dmx_caps_t * | |
| 1002 | −</para> | |
| 1003 | −</entry><entry | |
| 1004 | − align="char"> | |
| 1005 | −<para>Undocumented.</para> | |
| 1006 | −</entry> | |
| 1007 | − </row></tbody></tgroup></informaltable> | |
| 1008 | −&return-value-dvb; | |
| 1009 | −</section> | |
| 1010 | − | |
| 1011 | −<section id="DMX_SET_SOURCE" | |
| 1012 | −role="subsection"><title>DMX_SET_SOURCE</title> | |
| 1013 | −<para>DESCRIPTION | |
| 1014 | −</para> | |
| 1015 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1016 | − align="char"> | |
| 1017 | −<para>This ioctl is undocumented. Documentation is welcome.</para> | |
| 1018 | −</entry> | |
| 1019 | − </row></tbody></tgroup></informaltable> | |
| 1020 | −<para>SYNOPSIS | |
| 1021 | −</para> | |
| 1022 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1023 | − align="char"> | |
| 1024 | −<para>int ioctl(fd, int request = DMX_SET_SOURCE, | |
| 1025 | − dmx_source_t *);</para> | |
| 1026 | −</entry> | |
| 1027 | − </row></tbody></tgroup></informaltable> | |
| 1028 | −<para>PARAMETERS | |
| 1029 | −</para> | |
| 1030 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1031 | − align="char"> | |
| 1032 | −<para>int fd</para> | |
| 1033 | −</entry><entry | |
| 1034 | − align="char"> | |
| 1035 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1036 | −</entry> | |
| 1037 | − </row><row><entry | |
| 1038 | − align="char"> | |
| 1039 | −<para>int request</para> | |
| 1040 | −</entry><entry | |
| 1041 | − align="char"> | |
| 1042 | −<para>Equals DMX_SET_SOURCE for this command.</para> | |
| 1043 | −</entry> | |
| 1044 | − </row><row><entry | |
| 1045 | − align="char"> | |
| 1046 | −<para>dmx_source_t * | |
| 1047 | −</para> | |
| 1048 | −</entry><entry | |
| 1049 | − align="char"> | |
| 1050 | −<para>Undocumented.</para> | |
| 1051 | −</entry> | |
| 1052 | − </row></tbody></tgroup></informaltable> | |
| 1053 | −&return-value-dvb; | |
| 1054 | −</section> | |
| 1055 | − | |
| 1056 | −<section id="DMX_ADD_PID" | |
| 1057 | −role="subsection"><title>DMX_ADD_PID</title> | |
| 1058 | −<para>DESCRIPTION | |
| 1059 | −</para> | |
| 1060 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1061 | − align="char"> | |
| 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> | |
| 1070 | −</entry> | |
| 1071 | − </row></tbody></tgroup></informaltable> | |
| 1072 | −<para>SYNOPSIS | |
| 1073 | −</para> | |
| 1074 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1075 | − align="char"> | |
| 1076 | −<para>int ioctl(fd, int request = DMX_ADD_PID, | |
| 1077 | − __u16 *);</para> | |
| 1078 | −</entry> | |
| 1079 | − </row></tbody></tgroup></informaltable> | |
| 1080 | −<para>PARAMETERS | |
| 1081 | −</para> | |
| 1082 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1083 | − align="char"> | |
| 1084 | −<para>int fd</para> | |
| 1085 | −</entry><entry | |
| 1086 | − align="char"> | |
| 1087 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1088 | −</entry> | |
| 1089 | − </row><row><entry | |
| 1090 | − align="char"> | |
| 1091 | −<para>int request</para> | |
| 1092 | −</entry><entry | |
| 1093 | − align="char"> | |
| 1094 | −<para>Equals DMX_ADD_PID for this command.</para> | |
| 1095 | −</entry> | |
| 1096 | − </row><row><entry | |
| 1097 | − align="char"> | |
| 1098 | −<para>__u16 * | |
| 1099 | −</para> | |
| 1100 | −</entry><entry | |
| 1101 | − align="char"> | |
| 1102 | −<para>PID number to be filtered.</para> | |
| 1103 | −</entry> | |
| 1104 | − </row></tbody></tgroup></informaltable> | |
| 1105 | −&return-value-dvb; | |
| 1106 | −</section> | |
| 1107 | − | |
| 1108 | −<section id="DMX_REMOVE_PID" | |
| 1109 | −role="subsection"><title>DMX_REMOVE_PID</title> | |
| 1110 | −<para>DESCRIPTION | |
| 1111 | −</para> | |
| 1112 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1113 | − align="char"> | |
| 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> | |
| 1123 | −</entry> | |
| 1124 | − </row></tbody></tgroup></informaltable> | |
| 1125 | −<para>SYNOPSIS | |
| 1126 | −</para> | |
| 1127 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1128 | − align="char"> | |
| 1129 | −<para>int ioctl(fd, int request = DMX_REMOVE_PID, | |
| 1130 | − __u16 *);</para> | |
| 1131 | −</entry> | |
| 1132 | − </row></tbody></tgroup></informaltable> | |
| 1133 | −<para>PARAMETERS | |
| 1134 | −</para> | |
| 1135 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1136 | − align="char"> | |
| 1137 | −<para>int fd</para> | |
| 1138 | −</entry><entry | |
| 1139 | − align="char"> | |
| 1140 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1141 | −</entry> | |
| 1142 | − </row><row><entry | |
| 1143 | − align="char"> | |
| 1144 | −<para>int request</para> | |
| 1145 | −</entry><entry | |
| 1146 | − align="char"> | |
| 1147 | −<para>Equals DMX_REMOVE_PID for this command.</para> | |
| 1148 | −</entry> | |
| 1149 | − </row><row><entry | |
| 1150 | − align="char"> | |
| 1151 | −<para>__u16 * | |
| 1152 | −</para> | |
| 1153 | −</entry><entry | |
| 1154 | − align="char"> | |
| 1155 | −<para>PID of the PES filter to be removed.</para> | |
| 1156 | −</entry> | |
| 1157 | − </row></tbody></tgroup></informaltable> | |
| 1158 | −&return-value-dvb; | |
| 1159 | −</section> | |
| 1160 | − | |
| 1161 | − | |
| 1162 | −</section> | |
| @@ -1,156 +0,0 @@ | ||
| 1 | −<partinfo> | |
| 2 | −<authorgroup> | |
| 3 | −<author> | |
| 4 | −<firstname>Ralph</firstname> | |
| 5 | −<surname>Metzler</surname> | |
| 6 | −<othername role="mi">J. K.</othername> | |
| 7 | −<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation> | |
| 8 | −</author> | |
| 9 | −<author> | |
| 10 | −<firstname>Marcus</firstname> | |
| 11 | −<surname>Metzler</surname> | |
| 12 | −<othername role="mi">O. C.</othername> | |
| 13 | −<affiliation><address><email>rjkm@metzlerbros.de</email></address></affiliation> | |
| 14 | −</author> | |
| 15 | −</authorgroup> | |
| 16 | −<authorgroup> | |
| 17 | −<author> | |
| 18 | −<firstname>Mauro</firstname> | |
| 19 | −<othername role="mi">Carvalho</othername> | |
| 20 | −<surname>Chehab</surname> | |
| 21 | −<affiliation><address><email>m.chehab@samsung.com</email></address></affiliation> | |
| 22 | −<contrib>Ported document to Docbook XML.</contrib> | |
| 23 | −</author> | |
| 24 | −</authorgroup> | |
| 25 | −<copyright> | |
| 26 | − <year>2002</year> | |
| 27 | − <year>2003</year> | |
| 28 | − <holder>Convergence GmbH</holder> | |
| 29 | −</copyright> | |
| 30 | −<copyright> | |
| 31 | − <year>2009-2015</year> | |
| 32 | − <holder>Mauro Carvalho Chehab</holder> | |
| 33 | −</copyright> | |
| 34 | − | |
| 35 | −<revhistory> | |
| 36 | −<!-- Put document revisions here, newest first. --> | |
| 37 | −<revision> | |
| 38 | − <revnumber>2.1.0</revnumber> | |
| 39 | − <date>2015-05-29</date> | |
| 40 | − <authorinitials>mcc</authorinitials> | |
| 41 | − <revremark> | |
| 42 | − DocBook improvements and cleanups, in order to document the | |
| 43 | − system calls on a more standard way and provide more description | |
| 44 | − about the current DVB API. | |
| 45 | − </revremark> | |
| 46 | −</revision> | |
| 47 | −<revision> | |
| 48 | − <revnumber>2.0.4</revnumber> | |
| 49 | − <date>2011-05-06</date> | |
| 50 | − <authorinitials>mcc</authorinitials> | |
| 51 | − <revremark> | |
| 52 | − Add more information about DVB APIv5, better describing the frontend GET/SET props ioctl's. | |
| 53 | − </revremark> | |
| 54 | −</revision> | |
| 55 | −<revision> | |
| 56 | − <revnumber>2.0.3</revnumber> | |
| 57 | − <date>2010-07-03</date> | |
| 58 | − <authorinitials>mcc</authorinitials> | |
| 59 | − <revremark> | |
| 60 | − Add some frontend capabilities flags, present on kernel, but missing at the specs. | |
| 61 | − </revremark> | |
| 62 | −</revision> | |
| 63 | −<revision> | |
| 64 | − <revnumber>2.0.2</revnumber> | |
| 65 | − <date>2009-10-25</date> | |
| 66 | − <authorinitials>mcc</authorinitials> | |
| 67 | − <revremark> | |
| 68 | − documents FE_SET_FRONTEND_TUNE_MODE and FE_DISHETWORK_SEND_LEGACY_CMD ioctls. | |
| 69 | − </revremark> | |
| 70 | −</revision> | |
| 71 | −<revision> | |
| 72 | −<revnumber>2.0.1</revnumber> | |
| 73 | −<date>2009-09-16</date> | |
| 74 | −<authorinitials>mcc</authorinitials> | |
| 75 | −<revremark> | |
| 76 | −Added ISDB-T test originally written by Patrick Boettcher | |
| 77 | −</revremark> | |
| 78 | −</revision> | |
| 79 | −<revision> | |
| 80 | −<revnumber>2.0.0</revnumber> | |
| 81 | −<date>2009-09-06</date> | |
| 82 | −<authorinitials>mcc</authorinitials> | |
| 83 | −<revremark>Conversion from LaTex to DocBook XML. The | |
| 84 | − contents is the same as the original LaTex version.</revremark> | |
| 85 | −</revision> | |
| 86 | −<revision> | |
| 87 | −<revnumber>1.0.0</revnumber> | |
| 88 | −<date>2003-07-24</date> | |
| 89 | −<authorinitials>rjkm</authorinitials> | |
| 90 | −<revremark>Initial revision on LaTEX.</revremark> | |
| 91 | −</revision> | |
| 92 | −</revhistory> | |
| 93 | −</partinfo> | |
| 94 | − | |
| 95 | − | |
| 96 | −<title>LINUX DVB API</title> | |
| 97 | −<subtitle>Version 5.10</subtitle> | |
| 98 | −<!-- ADD THE CHAPTERS HERE --> | |
| 99 | − <chapter id="dvb_introdution"> | |
| 100 | − &sub-intro; | |
| 101 | − </chapter> | |
| 102 | − <chapter id="dvb_frontend"> | |
| 103 | − &sub-frontend; | |
| 104 | − </chapter> | |
| 105 | − <chapter id="dvb_demux"> | |
| 106 | − &sub-demux; | |
| 107 | − </chapter> | |
| 108 | − <chapter id="dvb_ca"> | |
| 109 | − &sub-ca; | |
| 110 | − </chapter> | |
| 111 | − <chapter id="net"> | |
| 112 | − &sub-net; | |
| 113 | − </chapter> | |
| 114 | − <chapter id="legacy_dvb_apis"> | |
| 115 | − <title>DVB Deprecated APIs</title> | |
| 116 | − <para>The APIs described here are kept only for historical reasons. There's | |
| 117 | − just one driver for a very legacy hardware that uses this API. No | |
| 118 | − modern drivers should use it. Instead, audio and video should be using | |
| 119 | − the V4L2 and ALSA APIs, and the pipelines should be set using the | |
| 120 | − Media Controller API</para> | |
| 121 | − <section id="dvb_video"> | |
| 122 | − &sub-video; | |
| 123 | − </section> | |
| 124 | − <section id="dvb_audio"> | |
| 125 | − &sub-audio; | |
| 126 | − </section> | |
| 127 | − </chapter> | |
| 128 | − <chapter id="dvb_examples"> | |
| 129 | − &sub-examples; | |
| 130 | − </chapter> | |
| 131 | −<!-- END OF CHAPTERS --> | |
| 132 | − <appendix id="audio_h"> | |
| 133 | − <title>DVB Audio Header File</title> | |
| 134 | − &sub-audio-h; | |
| 135 | − </appendix> | |
| 136 | − <appendix id="ca_h"> | |
| 137 | − <title>DVB Conditional Access Header File</title> | |
| 138 | − &sub-ca-h; | |
| 139 | − </appendix> | |
| 140 | − <appendix id="dmx_h"> | |
| 141 | − <title>DVB Demux Header File</title> | |
| 142 | − &sub-dmx-h; | |
| 143 | − </appendix> | |
| 144 | − <appendix id="frontend_h"> | |
| 145 | − <title>DVB Frontend Header File</title> | |
| 146 | − &sub-frontend-h; | |
| 147 | − </appendix> | |
| 148 | − <appendix id="net_h"> | |
| 149 | − <title>DVB Network Header File</title> | |
| 150 | − &sub-net-h; | |
| 151 | − </appendix> | |
| 152 | − <appendix id="video_h"> | |
| 153 | − <title>DVB Video Header File</title> | |
| 154 | − &sub-video-h; | |
| 155 | − </appendix> | |
| 156 | − | |
| @@ -1,1680 +0,0 @@ | ||
| 1 | −<section id="frontend-properties"> | |
| 2 | −<title>DVB Frontend properties</title> | |
| 3 | −<para>Tuning into a Digital TV physical channel and starting decoding it | |
| 4 | − requires changing a set of parameters, in order to control the | |
| 5 | − tuner, the demodulator, the Linear Low-noise Amplifier (LNA) and to set the | |
| 6 | − antenna subsystem via Satellite Equipment Control (SEC), on satellite | |
| 7 | − systems. The actual parameters are specific to each particular digital | |
| 8 | − TV standards, and may change as the digital TV specs evolves.</para> | |
| 9 | −<para>In the past, the strategy used was to have a union with the parameters | |
| 10 | − needed to tune for DVB-S, DVB-C, DVB-T and ATSC delivery systems grouped | |
| 11 | − there. The problem is that, as the second generation standards appeared, | |
| 12 | − those structs were not big enough to contain the additional parameters. | |
| 13 | − Also, the union didn't have any space left to be expanded without breaking | |
| 14 | − userspace. So, the decision was to deprecate the legacy union/struct based | |
| 15 | − approach, in favor of a properties set approach.</para> | |
| 16 | − | |
| 17 | −<para>NOTE: on Linux DVB API version 3, setting a frontend were done via | |
| 18 | − <link linkend="dvb-frontend-parameters">struct <constant>dvb_frontend_parameters</constant></link>. | |
| 19 | − This got replaced on version 5 (also called "S2API", as this API were | |
| 20 | − added originally_enabled to provide support for DVB-S2), because the old | |
| 21 | − API has a very limited support to new standards and new hardware. This | |
| 22 | − section describes the new and recommended way to set the frontend, with | |
| 23 | − suppports all digital TV delivery systems.</para> | |
| 24 | − | |
| 25 | −<para>Example: with the properties based approach, in order to set the tuner | |
| 26 | − to a DVB-C channel at 651 kHz, modulated with 256-QAM, FEC 3/4 and symbol | |
| 27 | − rate of 5.217 Mbauds, those properties should be sent to | |
| 28 | − <link linkend="FE_GET_PROPERTY"><constant>FE_SET_PROPERTY</constant></link> ioctl:</para> | |
| 29 | − <itemizedlist> | |
| 30 | − <listitem><para>&DTV-DELIVERY-SYSTEM; = SYS_DVBC_ANNEX_A</para></listitem> | |
| 31 | − <listitem><para>&DTV-FREQUENCY; = 651000000</para></listitem> | |
| 32 | − <listitem><para>&DTV-MODULATION; = QAM_256</para></listitem> | |
| 33 | − <listitem><para>&DTV-INVERSION; = INVERSION_AUTO</para></listitem> | |
| 34 | − <listitem><para>&DTV-SYMBOL-RATE; = 5217000</para></listitem> | |
| 35 | − <listitem><para>&DTV-INNER-FEC; = FEC_3_4</para></listitem> | |
| 36 | − <listitem><para>&DTV-TUNE;</para></listitem> | |
| 37 | − </itemizedlist> | |
| 38 | − | |
| 39 | −<para>The code that would do the above is:</para> | |
| 40 | −<programlisting> | |
| 41 | −#include <stdio.h> | |
| 42 | −#include <fcntl.h> | |
| 43 | −#include <sys/ioctl.h> | |
| 44 | −#include <linux/dvb/frontend.h> | |
| 45 | − | |
| 46 | −static struct dtv_property props[] = { | |
| 47 | − { .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBC_ANNEX_A }, | |
| 48 | − { .cmd = DTV_FREQUENCY, .u.data = 651000000 }, | |
| 49 | − { .cmd = DTV_MODULATION, .u.data = QAM_256 }, | |
| 50 | − { .cmd = DTV_INVERSION, .u.data = INVERSION_AUTO }, | |
| 51 | − { .cmd = DTV_SYMBOL_RATE, .u.data = 5217000 }, | |
| 52 | − { .cmd = DTV_INNER_FEC, .u.data = FEC_3_4 }, | |
| 53 | − { .cmd = DTV_TUNE } | |
| 54 | −}; | |
| 55 | − | |
| 56 | −static struct dtv_properties dtv_prop = { | |
| 57 | − .num = 6, .props = props | |
| 58 | −}; | |
| 59 | − | |
| 60 | −int main(void) | |
| 61 | −{ | |
| 62 | − int fd = open("/dev/dvb/adapter0/frontend0", O_RDWR); | |
| 63 | − | |
| 64 | − if (!fd) { | |
| 65 | − perror ("open"); | |
| 66 | − return -1; | |
| 67 | − } | |
| 68 | − if (ioctl(fd, FE_SET_PROPERTY, &dtv_prop) == -1) { | |
| 69 | − perror("ioctl"); | |
| 70 | − return -1; | |
| 71 | − } | |
| 72 | − printf("Frontend set\n"); | |
| 73 | − return 0; | |
| 74 | −} | |
| 75 | −</programlisting> | |
| 76 | − | |
| 77 | −<para>NOTE: While it is possible to directly call the Kernel code like the | |
| 78 | − above example, it is strongly recommended to use | |
| 79 | − <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink>, | |
| 80 | − as it provides abstraction to work with the supported digital TV standards | |
| 81 | − and provides methods for usual operations like program scanning and to | |
| 82 | − read/write channel descriptor files.</para> | |
| 83 | − | |
| 84 | −<section id="dtv-stats"> | |
| 85 | −<title>struct <structname>dtv_stats</structname></title> | |
| 86 | −<programlisting> | |
| 87 | −struct dtv_stats { | |
| 88 | − __u8 scale; /* enum fecap_scale_params type */ | |
| 89 | − union { | |
| 90 | − __u64 uvalue; /* for counters and relative scales */ | |
| 91 | − __s64 svalue; /* for 1/1000 dB measures */ | |
| 92 | − }; | |
| 93 | −} __packed; | |
| 94 | −</programlisting> | |
| 95 | −</section> | |
| 96 | −<section id="dtv-fe-stats"> | |
| 97 | −<title>struct <structname>dtv_fe_stats</structname></title> | |
| 98 | −<programlisting> | |
| 99 | −#define MAX_DTV_STATS 4 | |
| 100 | − | |
| 101 | −struct dtv_fe_stats { | |
| 102 | − __u8 len; | |
| 103 | − &dtv-stats; stat[MAX_DTV_STATS]; | |
| 104 | −} __packed; | |
| 105 | −</programlisting> | |
| 106 | −</section> | |
| 107 | − | |
| 108 | −<section id="dtv-property"> | |
| 109 | −<title>struct <structname>dtv_property</structname></title> | |
| 110 | −<programlisting> | |
| 111 | −/* Reserved fields should be set to 0 */ | |
| 112 | − | |
| 113 | −struct dtv_property { | |
| 114 | − __u32 cmd; | |
| 115 | − __u32 reserved[3]; | |
| 116 | − union { | |
| 117 | − __u32 data; | |
| 118 | − &dtv-fe-stats; st; | |
| 119 | − struct { | |
| 120 | − __u8 data[32]; | |
| 121 | − __u32 len; | |
| 122 | − __u32 reserved1[3]; | |
| 123 | − void *reserved2; | |
| 124 | − } buffer; | |
| 125 | − } u; | |
| 126 | − int result; | |
| 127 | −} __attribute__ ((packed)); | |
| 128 | − | |
| 129 | −/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */ | |
| 130 | −#define DTV_IOCTL_MAX_MSGS 64 | |
| 131 | −</programlisting> | |
| 132 | −</section> | |
| 133 | −<section id="dtv-properties"> | |
| 134 | −<title>struct <structname>dtv_properties</structname></title> | |
| 135 | −<programlisting> | |
| 136 | −struct dtv_properties { | |
| 137 | − __u32 num; | |
| 138 | − &dtv-property; *props; | |
| 139 | −}; | |
| 140 | −</programlisting> | |
| 141 | −</section> | |
| 142 | − | |
| 143 | −<section> | |
| 144 | − <title>Property types</title> | |
| 145 | −<para> | |
| 146 | −On <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY and FE_SET_PROPERTY</link>, | |
| 147 | −the actual action is determined by the dtv_property cmd/data pairs. With one single ioctl, is possible to | |
| 148 | −get/set up to 64 properties. The actual meaning of each property is described on the next sections. | |
| 149 | −</para> | |
| 150 | − | |
| 151 | −<para>The available frontend property types are shown on the next section.</para> | |
| 152 | −</section> | |
| 153 | − | |
| 154 | −<section id="fe_property_parameters"> | |
| 155 | − <title>Digital TV property parameters</title> | |
| 156 | − <section id="DTV-UNDEFINED"> | |
| 157 | − <title><constant>DTV_UNDEFINED</constant></title> | |
| 158 | − <para>Used internally. A GET/SET operation for it won't change or return anything.</para> | |
| 159 | − </section> | |
| 160 | − <section id="DTV-TUNE"> | |
| 161 | − <title><constant>DTV_TUNE</constant></title> | |
| 162 | − <para>Interpret the cache of data, build either a traditional frontend tunerequest so we can pass validation in the <constant>FE_SET_FRONTEND</constant> ioctl.</para> | |
| 163 | − </section> | |
| 164 | − <section id="DTV-CLEAR"> | |
| 165 | − <title><constant>DTV_CLEAR</constant></title> | |
| 166 | − <para>Reset a cache of data specific to the frontend here. This does not effect hardware.</para> | |
| 167 | − </section> | |
| 168 | − <section id="DTV-FREQUENCY"> | |
| 169 | − <title><constant>DTV_FREQUENCY</constant></title> | |
| 170 | − | |
| 171 | − <para>Central frequency of the channel.</para> | |
| 172 | − | |
| 173 | − <para>Notes:</para> | |
| 174 | − <para>1)For satellite delivery systems, it is measured in kHz. | |
| 175 | − For the other ones, it is measured in Hz.</para> | |
| 176 | − <para>2)For ISDB-T, the channels are usually transmitted with an offset of 143kHz. | |
| 177 | − E.g. a valid frequency could be 474143 kHz. The stepping is bound to the bandwidth of | |
| 178 | − the channel which is 6MHz.</para> | |
| 179 | − | |
| 180 | − <para>3)As in ISDB-Tsb the channel consists of only one or three segments the | |
| 181 | − frequency step is 429kHz, 3*429 respectively. As for ISDB-T the | |
| 182 | − central frequency of the channel is expected.</para> | |
| 183 | − </section> | |
| 184 | − <section id="DTV-MODULATION"> | |
| 185 | − <title><constant>DTV_MODULATION</constant></title> | |
| 186 | −<para>Specifies the frontend modulation type for delivery systems that supports | |
| 187 | − more than one modulation type. The modulation can be one of the types | |
| 188 | − defined by &fe-modulation;.</para> | |
| 189 | − | |
| 190 | − | |
| 191 | −<section id="fe-modulation-t"> | |
| 192 | −<title>Modulation property</title> | |
| 193 | − | |
| 194 | −<para>Most of the digital TV standards currently offers more than one possible | |
| 195 | − modulation (sometimes called as "constellation" on some standards). This | |
| 196 | − enum contains the values used by the Kernel. Please note that not all | |
| 197 | − modulations are supported by a given standard.</para> | |
| 198 | − | |
| 199 | −<table pgwide="1" frame="none" id="fe-modulation"> | |
| 200 | − <title>enum fe_modulation</title> | |
| 201 | − <tgroup cols="2"> | |
| 202 | − &cs-def; | |
| 203 | − <thead> | |
| 204 | − <row> | |
| 205 | − <entry>ID</entry> | |
| 206 | − <entry>Description</entry> | |
| 207 | − </row> | |
| 208 | − </thead> | |
| 209 | − <tbody valign="top"> | |
| 210 | − <row> | |
| 211 | − <entry id="QPSK"><constant>QPSK</constant></entry> | |
| 212 | − <entry>QPSK modulation</entry> | |
| 213 | − </row><row> | |
| 214 | − <entry id="QAM-16"><constant>QAM_16</constant></entry> | |
| 215 | − <entry>16-QAM modulation</entry> | |
| 216 | − </row><row> | |
| 217 | − <entry id="QAM-32"><constant>QAM_32</constant></entry> | |
| 218 | − <entry>32-QAM modulation</entry> | |
| 219 | − </row><row> | |
| 220 | − <entry id="QAM-64"><constant>QAM_64</constant></entry> | |
| 221 | − <entry>64-QAM modulation</entry> | |
| 222 | − </row><row> | |
| 223 | − <entry id="QAM-128"><constant>QAM_128</constant></entry> | |
| 224 | − <entry>128-QAM modulation</entry> | |
| 225 | − </row><row> | |
| 226 | − <entry id="QAM-256"><constant>QAM_256</constant></entry> | |
| 227 | − <entry>256-QAM modulation</entry> | |
| 228 | − </row><row> | |
| 229 | − <entry id="QAM-AUTO"><constant>QAM_AUTO</constant></entry> | |
| 230 | − <entry>Autodetect QAM modulation</entry> | |
| 231 | − </row><row> | |
| 232 | − <entry id="VSB-8"><constant>VSB_8</constant></entry> | |
| 233 | − <entry>8-VSB modulation</entry> | |
| 234 | − </row><row> | |
| 235 | − <entry id="VSB-16"><constant>VSB_16</constant></entry> | |
| 236 | − <entry>16-VSB modulation</entry> | |
| 237 | − </row><row> | |
| 238 | − <entry id="PSK-8"><constant>PSK_8</constant></entry> | |
| 239 | − <entry>8-PSK modulation</entry> | |
| 240 | − </row><row> | |
| 241 | − <entry id="APSK-16"><constant>APSK_16</constant></entry> | |
| 242 | − <entry>16-APSK modulation</entry> | |
| 243 | − </row><row> | |
| 244 | − <entry id="APSK-32"><constant>APSK_32</constant></entry> | |
| 245 | − <entry>32-APSK modulation</entry> | |
| 246 | − </row><row> | |
| 247 | − <entry id="DQPSK"><constant>DQPSK</constant></entry> | |
| 248 | − <entry>DQPSK modulation</entry> | |
| 249 | − </row><row> | |
| 250 | − <entry id="QAM-4-NR"><constant>QAM_4_NR</constant></entry> | |
| 251 | − <entry>4-QAM-NR modulation</entry> | |
| 252 | − </row> | |
| 253 | − </tbody> | |
| 254 | − </tgroup> | |
| 255 | −</table> | |
| 256 | −</section> | |
| 257 | − | |
| 258 | − </section> | |
| 259 | − <section id="DTV-BANDWIDTH-HZ"> | |
| 260 | − <title><constant>DTV_BANDWIDTH_HZ</constant></title> | |
| 261 | − | |
| 262 | − <para>Bandwidth for the channel, in HZ.</para> | |
| 263 | − | |
| 264 | − <para>Possible values: | |
| 265 | − <constant>1712000</constant>, | |
| 266 | − <constant>5000000</constant>, | |
| 267 | − <constant>6000000</constant>, | |
| 268 | − <constant>7000000</constant>, | |
| 269 | − <constant>8000000</constant>, | |
| 270 | − <constant>10000000</constant>. | |
| 271 | − </para> | |
| 272 | − | |
| 273 | − <para>Notes:</para> | |
| 274 | − | |
| 275 | − <para>1) For ISDB-T it should be always 6000000Hz (6MHz)</para> | |
| 276 | − <para>2) For ISDB-Tsb it can vary depending on the number of connected segments</para> | |
| 277 | − <para>3) Bandwidth doesn't apply for DVB-C transmissions, as the bandwidth | |
| 278 | − for DVB-C depends on the symbol rate</para> | |
| 279 | − <para>4) Bandwidth in ISDB-T is fixed (6MHz) or can be easily derived from | |
| 280 | − other parameters (DTV_ISDBT_SB_SEGMENT_IDX, | |
| 281 | − DTV_ISDBT_SB_SEGMENT_COUNT).</para> | |
| 282 | − <para>5) DVB-T supports 6, 7 and 8MHz.</para> | |
| 283 | − <para>6) In addition, DVB-T2 supports 1.172, 5 and 10MHz.</para> | |
| 284 | − </section> | |
| 285 | − <section id="DTV-INVERSION"> | |
| 286 | − <title><constant>DTV_INVERSION</constant></title> | |
| 287 | − | |
| 288 | − <para>Specifies if the frontend should do spectral inversion or not.</para> | |
| 289 | − | |
| 290 | −<section id="fe-spectral-inversion-t"> | |
| 291 | −<title>enum fe_modulation: Frontend spectral inversion</title> | |
| 292 | − | |
| 293 | −<para>This parameter indicates if spectral inversion should be presumed or not. | |
| 294 | − In the automatic setting (<constant>INVERSION_AUTO</constant>) the hardware | |
| 295 | − will try to figure out the correct setting by itself. If the hardware | |
| 296 | − doesn't support, the DVB core will try to lock at the carrier first with | |
| 297 | − inversion off. If it fails, it will try to enable inversion. | |
| 298 | −</para> | |
| 299 | − | |
| 300 | −<table pgwide="1" frame="none" id="fe-spectral-inversion"> | |
| 301 | − <title>enum fe_modulation</title> | |
| 302 | − <tgroup cols="2"> | |
| 303 | − &cs-def; | |
| 304 | − <thead> | |
| 305 | − <row> | |
| 306 | − <entry>ID</entry> | |
| 307 | − <entry>Description</entry> | |
| 308 | − </row> | |
| 309 | − </thead> | |
| 310 | − <tbody valign="top"> | |
| 311 | − <row> | |
| 312 | − <entry id="INVERSION-OFF"><constant>INVERSION_OFF</constant></entry> | |
| 313 | − <entry>Don't do spectral band inversion.</entry> | |
| 314 | − </row><row> | |
| 315 | − <entry id="INVERSION-ON"><constant>INVERSION_ON</constant></entry> | |
| 316 | − <entry>Do spectral band inversion.</entry> | |
| 317 | − </row><row> | |
| 318 | − <entry id="INVERSION-AUTO"><constant>INVERSION_AUTO</constant></entry> | |
| 319 | − <entry>Autodetect spectral band inversion.</entry> | |
| 320 | − </row> | |
| 321 | − </tbody> | |
| 322 | − </tgroup> | |
| 323 | −</table> | |
| 324 | −</section> | |
| 325 | − | |
| 326 | − </section> | |
| 327 | − <section id="DTV-DISEQC-MASTER"> | |
| 328 | − <title><constant>DTV_DISEQC_MASTER</constant></title> | |
| 329 | − <para>Currently not implemented.</para> | |
| 330 | − </section> | |
| 331 | − <section id="DTV-SYMBOL-RATE"> | |
| 332 | − <title><constant>DTV_SYMBOL_RATE</constant></title> | |
| 333 | − <para>Digital TV symbol rate, in bauds (symbols/second). Used on cable standards.</para> | |
| 334 | − </section> | |
| 335 | − <section id="DTV-INNER-FEC"> | |
| 336 | − <title><constant>DTV_INNER_FEC</constant></title> | |
| 337 | − <para>Used cable/satellite transmissions. The acceptable values are: | |
| 338 | − </para> | |
| 339 | −<section id="fe-code-rate-t"> | |
| 340 | −<title>enum fe_code_rate: type of the Forward Error Correction.</title> | |
| 341 | − | |
| 342 | −<table pgwide="1" frame="none" id="fe-code-rate"> | |
| 343 | − <title>enum fe_code_rate</title> | |
| 344 | − <tgroup cols="2"> | |
| 345 | − &cs-def; | |
| 346 | − <thead> | |
| 347 | − <row> | |
| 348 | − <entry>ID</entry> | |
| 349 | − <entry>Description</entry> | |
| 350 | − </row> | |
| 351 | − </thead> | |
| 352 | − <tbody valign="top"> | |
| 353 | − <row> | |
| 354 | − <entry id="FEC-NONE"><constant>FEC_NONE</constant></entry> | |
| 355 | − <entry>No Forward Error Correction Code</entry> | |
| 356 | − </row><row> | |
| 357 | − <entry id="FEC-AUTO"><constant>FEC_AUTO</constant></entry> | |
| 358 | − <entry>Autodetect Error Correction Code</entry> | |
| 359 | − </row><row> | |
| 360 | − <entry id="FEC-1-2"><constant>FEC_1_2</constant></entry> | |
| 361 | − <entry>Forward Error Correction Code 1/2</entry> | |
| 362 | − </row><row> | |
| 363 | − <entry id="FEC-2-3"><constant>FEC_2_3</constant></entry> | |
| 364 | − <entry>Forward Error Correction Code 2/3</entry> | |
| 365 | − </row><row> | |
| 366 | − <entry id="FEC-3-4"><constant>FEC_3_4</constant></entry> | |
| 367 | − <entry>Forward Error Correction Code 3/4</entry> | |
| 368 | − </row><row> | |
| 369 | − <entry id="FEC-4-5"><constant>FEC_4_5</constant></entry> | |
| 370 | − <entry>Forward Error Correction Code 4/5</entry> | |
| 371 | − </row><row> | |
| 372 | − <entry id="FEC-5-6"><constant>FEC_5_6</constant></entry> | |
| 373 | − <entry>Forward Error Correction Code 5/6</entry> | |
| 374 | − </row><row> | |
| 375 | − <entry id="FEC-6-7"><constant>FEC_6_7</constant></entry> | |
| 376 | − <entry>Forward Error Correction Code 6/7</entry> | |
| 377 | − </row><row> | |
| 378 | − <entry id="FEC-7-8"><constant>FEC_7_8</constant></entry> | |
| 379 | − <entry>Forward Error Correction Code 7/8</entry> | |
| 380 | − </row><row> | |
| 381 | − <entry id="FEC-8-9"><constant>FEC_8_9</constant></entry> | |
| 382 | − <entry>Forward Error Correction Code 8/9</entry> | |
| 383 | − </row><row> | |
| 384 | − <entry id="FEC-9-10"><constant>FEC_9_10</constant></entry> | |
| 385 | − <entry>Forward Error Correction Code 9/10</entry> | |
| 386 | − </row><row> | |
| 387 | − <entry id="FEC-2-5"><constant>FEC_2_5</constant></entry> | |
| 388 | − <entry>Forward Error Correction Code 2/5</entry> | |
| 389 | − </row><row> | |
| 390 | − <entry id="FEC-3-5"><constant>FEC_3_5</constant></entry> | |
| 391 | − <entry>Forward Error Correction Code 3/5</entry> | |
| 392 | − </row> | |
| 393 | − </tbody> | |
| 394 | − </tgroup> | |
| 395 | −</table> | |
| 396 | −</section> | |
| 397 | − </section> | |
| 398 | − <section id="DTV-VOLTAGE"> | |
| 399 | − <title><constant>DTV_VOLTAGE</constant></title> | |
| 400 | − <para>The voltage is usually used with non-DiSEqC capable LNBs to switch | |
| 401 | − the polarzation (horizontal/vertical). When using DiSEqC epuipment this | |
| 402 | − voltage has to be switched consistently to the DiSEqC commands as | |
| 403 | − described in the DiSEqC spec.</para> | |
| 404 | − | |
| 405 | −<table pgwide="1" frame="none" id="fe-sec-voltage"> | |
| 406 | − <title id="fe-sec-voltage-t">enum fe_sec_voltage</title> | |
| 407 | − <tgroup cols="2"> | |
| 408 | − &cs-def; | |
| 409 | − <thead> | |
| 410 | − <row> | |
| 411 | − <entry>ID</entry> | |
| 412 | − <entry>Description</entry> | |
| 413 | − </row> | |
| 414 | − </thead> | |
| 415 | − <tbody valign="top"> | |
| 416 | − <row> | |
| 417 | − <entry align="char" id="SEC-VOLTAGE-13"><constant>SEC_VOLTAGE_13</constant></entry> | |
| 418 | − <entry align="char">Set DC voltage level to 13V</entry> | |
| 419 | − </row><row> | |
| 420 | − <entry align="char" id="SEC-VOLTAGE-18"><constant>SEC_VOLTAGE_18</constant></entry> | |
| 421 | − <entry align="char">Set DC voltage level to 18V</entry> | |
| 422 | − </row><row> | |
| 423 | − <entry align="char" id="SEC-VOLTAGE-OFF"><constant>SEC_VOLTAGE_OFF</constant></entry> | |
| 424 | − <entry align="char">Don't send any voltage to the antenna</entry> | |
| 425 | − </row> | |
| 426 | − </tbody> | |
| 427 | − </tgroup> | |
| 428 | −</table> | |
| 429 | − </section> | |
| 430 | − <section id="DTV-TONE"> | |
| 431 | − <title><constant>DTV_TONE</constant></title> | |
| 432 | − <para>Currently not used.</para> | |
| 433 | − </section> | |
| 434 | − <section id="DTV-PILOT"> | |
| 435 | − <title><constant>DTV_PILOT</constant></title> | |
| 436 | − <para>Sets DVB-S2 pilot</para> | |
| 437 | − <section id="fe-pilot-t"> | |
| 438 | − <title>fe_pilot type</title> | |
| 439 | −<table pgwide="1" frame="none" id="fe-pilot"> | |
| 440 | − <title>enum fe_pilot</title> | |
| 441 | − <tgroup cols="2"> | |
| 442 | − &cs-def; | |
| 443 | − <thead> | |
| 444 | − <row> | |
| 445 | − <entry>ID</entry> | |
| 446 | − <entry>Description</entry> | |
| 447 | − </row> | |
| 448 | − </thead> | |
| 449 | − <tbody valign="top"> | |
| 450 | − <row> | |
| 451 | − <entry align="char" id="PILOT-ON"><constant>PILOT_ON</constant></entry> | |
| 452 | − <entry align="char">Pilot tones enabled</entry> | |
| 453 | − </row><row> | |
| 454 | − <entry align="char" id="PILOT-OFF"><constant>PILOT_OFF</constant></entry> | |
| 455 | − <entry align="char">Pilot tones disabled</entry> | |
| 456 | − </row><row> | |
| 457 | − <entry align="char" id="PILOT-AUTO"><constant>PILOT_AUTO</constant></entry> | |
| 458 | − <entry align="char">Autodetect pilot tones</entry> | |
| 459 | − </row> | |
| 460 | − </tbody> | |
| 461 | − </tgroup> | |
| 462 | −</table> | |
| 463 | − </section> | |
| 464 | − </section> | |
| 465 | − <section id="DTV-ROLLOFF"> | |
| 466 | − <title><constant>DTV_ROLLOFF</constant></title> | |
| 467 | − <para>Sets DVB-S2 rolloff</para> | |
| 468 | − | |
| 469 | − <section id="fe-rolloff-t"> | |
| 470 | − <title>fe_rolloff type</title> | |
| 471 | −<table pgwide="1" frame="none" id="fe-rolloff"> | |
| 472 | − <title>enum fe_rolloff</title> | |
| 473 | − <tgroup cols="2"> | |
| 474 | − &cs-def; | |
| 475 | − <thead> | |
| 476 | − <row> | |
| 477 | − <entry>ID</entry> | |
| 478 | − <entry>Description</entry> | |
| 479 | − </row> | |
| 480 | − </thead> | |
| 481 | − <tbody valign="top"> | |
| 482 | − <row> | |
| 483 | − <entry align="char" id="ROLLOFF-35"><constant>ROLLOFF_35</constant></entry> | |
| 484 | − <entry align="char">Roloff factor: α=35%</entry> | |
| 485 | − </row><row> | |
| 486 | − <entry align="char" id="ROLLOFF-20"><constant>ROLLOFF_20</constant></entry> | |
| 487 | − <entry align="char">Roloff factor: α=20%</entry> | |
| 488 | − </row><row> | |
| 489 | − <entry align="char" id="ROLLOFF-25"><constant>ROLLOFF_25</constant></entry> | |
| 490 | − <entry align="char">Roloff factor: α=25%</entry> | |
| 491 | − </row><row> | |
| 492 | − <entry align="char" id="ROLLOFF-AUTO"><constant>ROLLOFF_AUTO</constant></entry> | |
| 493 | − <entry align="char">Auto-detect the roloff factor.</entry> | |
| 494 | − </row> | |
| 495 | − </tbody> | |
| 496 | − </tgroup> | |
| 497 | −</table> | |
| 498 | − </section> | |
| 499 | − </section> | |
| 500 | − <section id="DTV-DISEQC-SLAVE-REPLY"> | |
| 501 | − <title><constant>DTV_DISEQC_SLAVE_REPLY</constant></title> | |
| 502 | − <para>Currently not implemented.</para> | |
| 503 | − </section> | |
| 504 | − <section id="DTV-FE-CAPABILITY-COUNT"> | |
| 505 | − <title><constant>DTV_FE_CAPABILITY_COUNT</constant></title> | |
| 506 | − <para>Currently not implemented.</para> | |
| 507 | − </section> | |
| 508 | − <section id="DTV-FE-CAPABILITY"> | |
| 509 | − <title><constant>DTV_FE_CAPABILITY</constant></title> | |
| 510 | − <para>Currently not implemented.</para> | |
| 511 | − </section> | |
| 512 | − <section id="DTV-DELIVERY-SYSTEM"> | |
| 513 | − <title><constant>DTV_DELIVERY_SYSTEM</constant></title> | |
| 514 | − <para>Specifies the type of Delivery system</para> | |
| 515 | − <section id="fe-delivery-system-t"> | |
| 516 | − <title>fe_delivery_system type</title> | |
| 517 | − <para>Possible values: </para> | |
| 518 | − | |
| 519 | −<table pgwide="1" frame="none" id="fe-delivery-system"> | |
| 520 | − <title>enum fe_delivery_system</title> | |
| 521 | − <tgroup cols="2"> | |
| 522 | − &cs-def; | |
| 523 | − <thead> | |
| 524 | − <row> | |
| 525 | − <entry>ID</entry> | |
| 526 | − <entry>Description</entry> | |
| 527 | − </row> | |
| 528 | − </thead> | |
| 529 | − <tbody valign="top"> | |
| 530 | − <row> | |
| 531 | − <entry id="SYS-UNDEFINED"><constant>SYS_UNDEFINED</constant></entry> | |
| 532 | − <entry>Undefined standard. Generally, indicates an error</entry> | |
| 533 | − </row><row> | |
| 534 | − <entry id="SYS-DVBC-ANNEX-A"><constant>SYS_DVBC_ANNEX_A</constant></entry> | |
| 535 | − <entry>Cable TV: DVB-C following ITU-T J.83 Annex A spec</entry> | |
| 536 | − </row><row> | |
| 537 | − <entry id="SYS-DVBC-ANNEX-B"><constant>SYS_DVBC_ANNEX_B</constant></entry> | |
| 538 | − <entry>Cable TV: DVB-C following ITU-T J.83 Annex B spec (ClearQAM)</entry> | |
| 539 | − </row><row> | |
| 540 | − <entry id="SYS-DVBC-ANNEX-C"><constant>SYS_DVBC_ANNEX_C</constant></entry> | |
| 541 | − <entry>Cable TV: DVB-C following ITU-T J.83 Annex C spec</entry> | |
| 542 | − </row><row> | |
| 543 | − <entry id="SYS-ISDBC"><constant>SYS_ISDBC</constant></entry> | |
| 544 | − <entry>Cable TV: ISDB-C (no drivers yet)</entry> | |
| 545 | − </row><row> | |
| 546 | − <entry id="SYS-DVBT"><constant>SYS_DVBT</constant></entry> | |
| 547 | − <entry>Terrestral TV: DVB-T</entry> | |
| 548 | − </row><row> | |
| 549 | − <entry id="SYS-DVBT2"><constant>SYS_DVBT2</constant></entry> | |
| 550 | − <entry>Terrestral TV: DVB-T2</entry> | |
| 551 | − </row><row> | |
| 552 | − <entry id="SYS-ISDBT"><constant>SYS_ISDBT</constant></entry> | |
| 553 | − <entry>Terrestral TV: ISDB-T</entry> | |
| 554 | − </row><row> | |
| 555 | − <entry id="SYS-ATSC"><constant>SYS_ATSC</constant></entry> | |
| 556 | − <entry>Terrestral TV: ATSC</entry> | |
| 557 | − </row><row> | |
| 558 | − <entry id="SYS-ATSCMH"><constant>SYS_ATSCMH</constant></entry> | |
| 559 | − <entry>Terrestral TV (mobile): ATSC-M/H</entry> | |
| 560 | − </row><row> | |
| 561 | − <entry id="SYS-DTMB"><constant>SYS_DTMB</constant></entry> | |
| 562 | − <entry>Terrestrial TV: DTMB</entry> | |
| 563 | − </row><row> | |
| 564 | − <entry id="SYS-DVBS"><constant>SYS_DVBS</constant></entry> | |
| 565 | − <entry>Satellite TV: DVB-S</entry> | |
| 566 | − </row><row> | |
| 567 | − <entry id="SYS-DVBS2"><constant>SYS_DVBS2</constant></entry> | |
| 568 | − <entry>Satellite TV: DVB-S2</entry> | |
| 569 | − </row><row> | |
| 570 | − <entry id="SYS-TURBO"><constant>SYS_TURBO</constant></entry> | |
| 571 | − <entry>Satellite TV: DVB-S Turbo</entry> | |
| 572 | − </row><row> | |
| 573 | − <entry id="SYS-ISDBS"><constant>SYS_ISDBS</constant></entry> | |
| 574 | − <entry>Satellite TV: ISDB-S</entry> | |
| 575 | − </row><row> | |
| 576 | − <entry id="SYS-DAB"><constant>SYS_DAB</constant></entry> | |
| 577 | − <entry>Digital audio: DAB (not fully supported)</entry> | |
| 578 | − </row><row> | |
| 579 | − <entry id="SYS-DSS"><constant>SYS_DSS</constant></entry> | |
| 580 | − <entry>Satellite TV:"DSS (not fully supported)</entry> | |
| 581 | − </row><row> | |
| 582 | − <entry id="SYS-CMMB"><constant>SYS_CMMB</constant></entry> | |
| 583 | − <entry>Terrestral TV (mobile):CMMB (not fully supported)</entry> | |
| 584 | − </row><row> | |
| 585 | − <entry id="SYS-DVBH"><constant>SYS_DVBH</constant></entry> | |
| 586 | − <entry>Terrestral TV (mobile): DVB-H (standard deprecated)</entry> | |
| 587 | − </row> | |
| 588 | − </tbody> | |
| 589 | − </tgroup> | |
| 590 | −</table> | |
| 591 | − | |
| 592 | − | |
| 593 | −</section> | |
| 594 | − </section> | |
| 595 | − <section id="DTV-ISDBT-PARTIAL-RECEPTION"> | |
| 596 | − <title><constant>DTV_ISDBT_PARTIAL_RECEPTION</constant></title> | |
| 597 | − | |
| 598 | − <para>If <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '0' this bit-field represents whether | |
| 599 | − the channel is in partial reception mode or not.</para> | |
| 600 | − | |
| 601 | − <para>If '1' <constant>DTV_ISDBT_LAYERA_*</constant> values are assigned to the center segment and | |
| 602 | − <constant>DTV_ISDBT_LAYERA_SEGMENT_COUNT</constant> has to be '1'.</para> | |
| 603 | − | |
| 604 | − <para>If in addition <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1' | |
| 605 | − <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> represents whether this ISDB-Tsb channel | |
| 606 | − is consisting of one segment and layer or three segments and two layers.</para> | |
| 607 | − | |
| 608 | − <para>Possible values: 0, 1, -1 (AUTO)</para> | |
| 609 | − </section> | |
| 610 | − <section id="DTV-ISDBT-SOUND-BROADCASTING"> | |
| 611 | − <title><constant>DTV_ISDBT_SOUND_BROADCASTING</constant></title> | |
| 612 | − | |
| 613 | − <para>This field represents whether the other DTV_ISDBT_*-parameters are | |
| 614 | − referring to an ISDB-T and an ISDB-Tsb channel. (See also | |
| 615 | − <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant>).</para> | |
| 616 | − | |
| 617 | − <para>Possible values: 0, 1, -1 (AUTO)</para> | |
| 618 | − </section> | |
| 619 | − <section id="DTV-ISDBT-SB-SUBCHANNEL-ID"> | |
| 620 | − <title><constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant></title> | |
| 621 | − | |
| 622 | − <para>This field only applies if <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1'.</para> | |
| 623 | − | |
| 624 | − <para>(Note of the author: This might not be the correct description of the | |
| 625 | − <constant>SUBCHANNEL-ID</constant> in all details, but it is my understanding of the technical | |
| 626 | − background needed to program a device)</para> | |
| 627 | − | |
| 628 | − <para>An ISDB-Tsb channel (1 or 3 segments) can be broadcasted alone or in a | |
| 629 | − set of connected ISDB-Tsb channels. In this set of channels every | |
| 630 | − channel can be received independently. The number of connected | |
| 631 | − ISDB-Tsb segment can vary, e.g. depending on the frequency spectrum | |
| 632 | − bandwidth available.</para> | |
| 633 | − | |
| 634 | − <para>Example: Assume 8 ISDB-Tsb connected segments are broadcasted. The | |
| 635 | − broadcaster has several possibilities to put those channels in the | |
| 636 | − air: Assuming a normal 13-segment ISDB-T spectrum he can align the 8 | |
| 637 | − segments from position 1-8 to 5-13 or anything in between.</para> | |
| 638 | − | |
| 639 | − <para>The underlying layer of segments are subchannels: each segment is | |
| 640 | − consisting of several subchannels with a predefined IDs. A sub-channel | |
| 641 | − is used to help the demodulator to synchronize on the channel.</para> | |
| 642 | − | |
| 643 | − <para>An ISDB-T channel is always centered over all sub-channels. As for | |
| 644 | − the example above, in ISDB-Tsb it is no longer as simple as that.</para> | |
| 645 | − | |
| 646 | − <para><constant>The DTV_ISDBT_SB_SUBCHANNEL_ID</constant> parameter is used to give the | |
| 647 | − sub-channel ID of the segment to be demodulated.</para> | |
| 648 | − | |
| 649 | − <para>Possible values: 0 .. 41, -1 (AUTO)</para> | |
| 650 | − </section> | |
| 651 | − <section id="DTV-ISDBT-SB-SEGMENT-IDX"> | |
| 652 | − <title><constant>DTV_ISDBT_SB_SEGMENT_IDX</constant></title> | |
| 653 | − <para>This field only applies if <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1'.</para> | |
| 654 | − <para><constant>DTV_ISDBT_SB_SEGMENT_IDX</constant> gives the index of the segment to be | |
| 655 | − demodulated for an ISDB-Tsb channel where several of them are | |
| 656 | − transmitted in the connected manner.</para> | |
| 657 | − <para>Possible values: 0 .. <constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> - 1</para> | |
| 658 | − <para>Note: This value cannot be determined by an automatic channel search.</para> | |
| 659 | − </section> | |
| 660 | − <section id="DTV-ISDBT-SB-SEGMENT-COUNT"> | |
| 661 | − <title><constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant></title> | |
| 662 | − <para>This field only applies if <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> is '1'.</para> | |
| 663 | − <para><constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant> gives the total count of connected ISDB-Tsb | |
| 664 | − channels.</para> | |
| 665 | − <para>Possible values: 1 .. 13</para> | |
| 666 | − <para>Note: This value cannot be determined by an automatic channel search.</para> | |
| 667 | − </section> | |
| 668 | − <section id="isdb-hierq-layers"> | |
| 669 | − <title><constant>DTV-ISDBT-LAYER*</constant> parameters</title> | |
| 670 | − <para>ISDB-T channels can be coded hierarchically. As opposed to DVB-T in | |
| 671 | − ISDB-T hierarchical layers can be decoded simultaneously. For that | |
| 672 | − reason a ISDB-T demodulator has 3 Viterbi and 3 Reed-Solomon decoders.</para> | |
| 673 | − <para>ISDB-T has 3 hierarchical layers which each can use a part of the | |
| 674 | − available segments. The total number of segments over all layers has | |
| 675 | − to 13 in ISDB-T.</para> | |
| 676 | − <para>There are 3 parameter sets, for Layers A, B and C.</para> | |
| 677 | − <section id="DTV-ISDBT-LAYER-ENABLED"> | |
| 678 | − <title><constant>DTV_ISDBT_LAYER_ENABLED</constant></title> | |
| 679 | − <para>Hierarchical reception in ISDB-T is achieved by enabling or disabling | |
| 680 | − layers in the decoding process. Setting all bits of | |
| 681 | − <constant>DTV_ISDBT_LAYER_ENABLED</constant> to '1' forces all layers (if applicable) to be | |
| 682 | − demodulated. This is the default.</para> | |
| 683 | − <para>If the channel is in the partial reception mode | |
| 684 | − (<constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> = 1) the central segment can be decoded | |
| 685 | − independently of the other 12 segments. In that mode layer A has to | |
| 686 | − have a <constant>SEGMENT_COUNT</constant> of 1.</para> | |
| 687 | − <para>In ISDB-Tsb only layer A is used, it can be 1 or 3 in ISDB-Tsb | |
| 688 | − according to <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant>. <constant>SEGMENT_COUNT</constant> must be filled | |
| 689 | − accordingly.</para> | |
| 690 | − <para>Possible values: 0x1, 0x2, 0x4 (|-able)</para> | |
| 691 | − <para><constant>DTV_ISDBT_LAYER_ENABLED[0:0]</constant> - layer A</para> | |
| 692 | − <para><constant>DTV_ISDBT_LAYER_ENABLED[1:1]</constant> - layer B</para> | |
| 693 | − <para><constant>DTV_ISDBT_LAYER_ENABLED[2:2]</constant> - layer C</para> | |
| 694 | − <para><constant>DTV_ISDBT_LAYER_ENABLED[31:3]</constant> unused</para> | |
| 695 | − </section> | |
| 696 | − <section id="DTV-ISDBT-LAYER-FEC"> | |
| 697 | − <title><constant>DTV_ISDBT_LAYER*_FEC</constant></title> | |
| 698 | − <para>Possible values: <constant>FEC_AUTO</constant>, <constant>FEC_1_2</constant>, <constant>FEC_2_3</constant>, <constant>FEC_3_4</constant>, <constant>FEC_5_6</constant>, <constant>FEC_7_8</constant></para> | |
| 699 | − </section> | |
| 700 | − <section id="DTV-ISDBT-LAYER-MODULATION"> | |
| 701 | − <title><constant>DTV_ISDBT_LAYER*_MODULATION</constant></title> | |
| 702 | − <para>Possible values: <constant>QAM_AUTO</constant>, QP<constant>SK, QAM_16</constant>, <constant>QAM_64</constant>, <constant>DQPSK</constant></para> | |
| 703 | − <para>Note: If layer C is <constant>DQPSK</constant> layer B has to be <constant>DQPSK</constant>. If layer B is <constant>DQPSK</constant> | |
| 704 | − and <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant>=0 layer has to be <constant>DQPSK</constant>.</para> | |
| 705 | − </section> | |
| 706 | − <section id="DTV-ISDBT-LAYER-SEGMENT-COUNT"> | |
| 707 | − <title><constant>DTV_ISDBT_LAYER*_SEGMENT_COUNT</constant></title> | |
| 708 | − <para>Possible values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -1 (AUTO)</para> | |
| 709 | − <para>Note: Truth table for <constant>DTV_ISDBT_SOUND_BROADCASTING</constant> and | |
| 710 | − <constant>DTV_ISDBT_PARTIAL_RECEPTION</constant> and <constant>LAYER</constant>*_SEGMENT_COUNT</para> | |
| 711 | − <informaltable id="isdbt-layer_seg-cnt-table"> | |
| 712 | − <tgroup cols="6"> | |
| 713 | − <tbody> | |
| 714 | − <row> | |
| 715 | − <entry>PR</entry> | |
| 716 | − <entry>SB</entry> | |
| 717 | − <entry>Layer A width</entry> | |
| 718 | − <entry>Layer B width</entry> | |
| 719 | − <entry>Layer C width</entry> | |
| 720 | − <entry>total width</entry> | |
| 721 | − </row> | |
| 722 | − <row> | |
| 723 | − <entry>0</entry> | |
| 724 | − <entry>0</entry> | |
| 725 | − <entry>1 .. 13</entry> | |
| 726 | − <entry>1 .. 13</entry> | |
| 727 | − <entry>1 .. 13</entry> | |
| 728 | − <entry>13</entry> | |
| 729 | − </row> | |
| 730 | − <row> | |
| 731 | − <entry>1</entry> | |
| 732 | − <entry>0</entry> | |
| 733 | − <entry>1</entry> | |
| 734 | − <entry>1 .. 13</entry> | |
| 735 | − <entry>1 .. 13</entry> | |
| 736 | − <entry>13</entry> | |
| 737 | − </row> | |
| 738 | − <row> | |
| 739 | − <entry>0</entry> | |
| 740 | − <entry>1</entry> | |
| 741 | − <entry>1</entry> | |
| 742 | − <entry>0</entry> | |
| 743 | − <entry>0</entry> | |
| 744 | − <entry>1</entry> | |
| 745 | − </row> | |
| 746 | − <row> | |
| 747 | − <entry>1</entry> | |
| 748 | − <entry>1</entry> | |
| 749 | − <entry>1</entry> | |
| 750 | − <entry>2</entry> | |
| 751 | − <entry>0</entry> | |
| 752 | − <entry>13</entry> | |
| 753 | − </row> | |
| 754 | − </tbody> | |
| 755 | − </tgroup> | |
| 756 | − </informaltable> | |
| 757 | − </section> | |
| 758 | − <section id="DTV-ISDBT-LAYER-TIME-INTERLEAVING"> | |
| 759 | − <title><constant>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</constant></title> | |
| 760 | − <para>Valid values: 0, 1, 2, 4, -1 (AUTO)</para> | |
| 761 | − <para>when DTV_ISDBT_SOUND_BROADCASTING is active, value 8 is also valid.</para> | |
| 762 | − <para>Note: The real time interleaving length depends on the mode (fft-size). The values | |
| 763 | − here are referring to what can be found in the TMCC-structure, as shown in the table below.</para> | |
| 764 | − <informaltable id="isdbt-layer-interleaving-table"> | |
| 765 | − <tgroup cols="4" align="center"> | |
| 766 | − <tbody> | |
| 767 | − <row> | |
| 768 | − <entry>DTV_ISDBT_LAYER*_TIME_INTERLEAVING</entry> | |
| 769 | − <entry>Mode 1 (2K FFT)</entry> | |
| 770 | − <entry>Mode 2 (4K FFT)</entry> | |
| 771 | − <entry>Mode 3 (8K FFT)</entry> | |
| 772 | − </row> | |
| 773 | − <row> | |
| 774 | − <entry>0</entry> | |
| 775 | − <entry>0</entry> | |
| 776 | − <entry>0</entry> | |
| 777 | − <entry>0</entry> | |
| 778 | − </row> | |
| 779 | − <row> | |
| 780 | − <entry>1</entry> | |
| 781 | − <entry>4</entry> | |
| 782 | − <entry>2</entry> | |
| 783 | − <entry>1</entry> | |
| 784 | − </row> | |
| 785 | − <row> | |
| 786 | − <entry>2</entry> | |
| 787 | − <entry>8</entry> | |
| 788 | − <entry>4</entry> | |
| 789 | − <entry>2</entry> | |
| 790 | − </row> | |
| 791 | − <row> | |
| 792 | − <entry>4</entry> | |
| 793 | − <entry>16</entry> | |
| 794 | − <entry>8</entry> | |
| 795 | − <entry>4</entry> | |
| 796 | − </row> | |
| 797 | − </tbody> | |
| 798 | − </tgroup> | |
| 799 | − </informaltable> | |
| 800 | − </section> | |
| 801 | − <section id="DTV-ATSCMH-FIC-VER"> | |
| 802 | − <title><constant>DTV_ATSCMH_FIC_VER</constant></title> | |
| 803 | − <para>Version number of the FIC (Fast Information Channel) signaling data.</para> | |
| 804 | − <para>FIC is used for relaying information to allow rapid service acquisition by the receiver.</para> | |
| 805 | − <para>Possible values: 0, 1, 2, 3, ..., 30, 31</para> | |
| 806 | − </section> | |
| 807 | − <section id="DTV-ATSCMH-PARADE-ID"> | |
| 808 | − <title><constant>DTV_ATSCMH_PARADE_ID</constant></title> | |
| 809 | − <para>Parade identification number</para> | |
| 810 | − <para>A parade is a collection of up to eight MH groups, conveying one or two ensembles.</para> | |
| 811 | − <para>Possible values: 0, 1, 2, 3, ..., 126, 127</para> | |
| 812 | − </section> | |
| 813 | − <section id="DTV-ATSCMH-NOG"> | |
| 814 | − <title><constant>DTV_ATSCMH_NOG</constant></title> | |
| 815 | − <para>Number of MH groups per MH subframe for a designated parade.</para> | |
| 816 | − <para>Possible values: 1, 2, 3, 4, 5, 6, 7, 8</para> | |
| 817 | − </section> | |
| 818 | − <section id="DTV-ATSCMH-TNOG"> | |
| 819 | − <title><constant>DTV_ATSCMH_TNOG</constant></title> | |
| 820 | − <para>Total number of MH groups including all MH groups belonging to all MH parades in one MH subframe.</para> | |
| 821 | − <para>Possible values: 0, 1, 2, 3, ..., 30, 31</para> | |
| 822 | − </section> | |
| 823 | − <section id="DTV-ATSCMH-SGN"> | |
| 824 | − <title><constant>DTV_ATSCMH_SGN</constant></title> | |
| 825 | − <para>Start group number.</para> | |
| 826 | − <para>Possible values: 0, 1, 2, 3, ..., 14, 15</para> | |
| 827 | − </section> | |
| 828 | − <section id="DTV-ATSCMH-PRC"> | |
| 829 | − <title><constant>DTV_ATSCMH_PRC</constant></title> | |
| 830 | − <para>Parade repetition cycle.</para> | |
| 831 | − <para>Possible values: 1, 2, 3, 4, 5, 6, 7, 8</para> | |
| 832 | − </section> | |
| 833 | − <section id="DTV-ATSCMH-RS-FRAME-MODE"> | |
| 834 | − <title><constant>DTV_ATSCMH_RS_FRAME_MODE</constant></title> | |
| 835 | − <para>Reed Solomon (RS) frame mode.</para> | |
| 836 | − <para>Possible values are:</para> | |
| 837 | −<table pgwide="1" frame="none" id="atscmh-rs-frame-mode"> | |
| 838 | − <title>enum atscmh_rs_frame_mode</title> | |
| 839 | − <tgroup cols="2"> | |
| 840 | − &cs-def; | |
| 841 | − <thead> | |
| 842 | − <row> | |
| 843 | − <entry>ID</entry> | |
| 844 | − <entry>Description</entry> | |
| 845 | − </row> | |
| 846 | − </thead> | |
| 847 | − <tbody valign="top"> | |
| 848 | − <row> | |
| 849 | − <entry id="ATSCMH-RSFRAME-PRI-ONLY"><constant>ATSCMH_RSFRAME_PRI_ONLY</constant></entry> | |
| 850 | − <entry>Single Frame: There is only a primary RS Frame for all | |
| 851 | − Group Regions.</entry> | |
| 852 | − </row><row> | |
| 853 | − <entry id="ATSCMH-RSFRAME-PRI-SEC"><constant>ATSCMH_RSFRAME_PRI_SEC</constant></entry> | |
| 854 | − <entry>Dual Frame: There are two separate RS Frames: Primary RS | |
| 855 | − Frame for Group Region A and B and Secondary RS Frame for Group | |
| 856 | − Region C and D.</entry> | |
| 857 | − </row> | |
| 858 | − </tbody> | |
| 859 | − </tgroup> | |
| 860 | −</table> | |
| 861 | − </section> | |
| 862 | − <section id="DTV-ATSCMH-RS-FRAME-ENSEMBLE"> | |
| 863 | − <title><constant>DTV_ATSCMH_RS_FRAME_ENSEMBLE</constant></title> | |
| 864 | − <para>Reed Solomon(RS) frame ensemble.</para> | |
| 865 | − <para>Possible values are:</para> | |
| 866 | −<table pgwide="1" frame="none" id="atscmh-rs-frame-ensemble"> | |
| 867 | − <title>enum atscmh_rs_frame_ensemble</title> | |
| 868 | − <tgroup cols="2"> | |
| 869 | − &cs-def; | |
| 870 | − <thead> | |
| 871 | − <row> | |
| 872 | − <entry>ID</entry> | |
| 873 | − <entry>Description</entry> | |
| 874 | − </row> | |
| 875 | − </thead> | |
| 876 | − <tbody valign="top"> | |
| 877 | − <row> | |
| 878 | − <entry id="ATSCMH-RSFRAME-ENS-PRI"><constant>ATSCMH_RSFRAME_ENS_PRI</constant></entry> | |
| 879 | − <entry>Primary Ensemble.</entry> | |
| 880 | − </row><row> | |
| 881 | − <entry id="ATSCMH-RSFRAME-ENS-SEC"><constant>AATSCMH_RSFRAME_PRI_SEC</constant></entry> | |
| 882 | − <entry>Secondary Ensemble.</entry> | |
| 883 | − </row><row> | |
| 884 | − <entry id="ATSCMH-RSFRAME-RES"><constant>AATSCMH_RSFRAME_RES</constant></entry> | |
| 885 | − <entry>Reserved. Shouldn't be used.</entry> | |
| 886 | − </row> | |
| 887 | − </tbody> | |
| 888 | − </tgroup> | |
| 889 | −</table> | |
| 890 | − </section> | |
| 891 | − <section id="DTV-ATSCMH-RS-CODE-MODE-PRI"> | |
| 892 | − <title><constant>DTV_ATSCMH_RS_CODE_MODE_PRI</constant></title> | |
| 893 | − <para>Reed Solomon (RS) code mode (primary).</para> | |
| 894 | − <para>Possible values are:</para> | |
| 895 | −<table pgwide="1" frame="none" id="atscmh-rs-code-mode"> | |
| 896 | − <title>enum atscmh_rs_code_mode</title> | |
| 897 | − <tgroup cols="2"> | |
| 898 | − &cs-def; | |
| 899 | − <thead> | |
| 900 | − <row> | |
| 901 | − <entry>ID</entry> | |
| 902 | − <entry>Description</entry> | |
| 903 | − </row> | |
| 904 | − </thead> | |
| 905 | − <tbody valign="top"> | |
| 906 | − <row> | |
| 907 | − <entry id="ATSCMH-RSCODE-211-187"><constant>ATSCMH_RSCODE_211_187</constant></entry> | |
| 908 | − <entry>Reed Solomon code (211,187).</entry> | |
| 909 | − </row><row> | |
| 910 | − <entry id="ATSCMH-RSCODE-223-187"><constant>ATSCMH_RSCODE_223_187</constant></entry> | |
| 911 | − <entry>Reed Solomon code (223,187).</entry> | |
| 912 | − </row><row> | |
| 913 | − <entry id="ATSCMH-RSCODE-235-187"><constant>ATSCMH_RSCODE_235_187</constant></entry> | |
| 914 | − <entry>Reed Solomon code (235,187).</entry> | |
| 915 | − </row><row> | |
| 916 | − <entry id="ATSCMH-RSCODE-RES"><constant>ATSCMH_RSCODE_RES</constant></entry> | |
| 917 | − <entry>Reserved. Shouldn't be used.</entry> | |
| 918 | − </row> | |
| 919 | − </tbody> | |
| 920 | − </tgroup> | |
| 921 | −</table> | |
| 922 | − </section> | |
| 923 | − <section id="DTV-ATSCMH-RS-CODE-MODE-SEC"> | |
| 924 | − <title><constant>DTV_ATSCMH_RS_CODE_MODE_SEC</constant></title> | |
| 925 | − <para>Reed Solomon (RS) code mode (secondary).</para> | |
| 926 | − <para>Possible values are the same as documented on | |
| 927 | − &atscmh-rs-code-mode;:</para> | |
| 928 | − </section> | |
| 929 | − <section id="DTV-ATSCMH-SCCC-BLOCK-MODE"> | |
| 930 | − <title><constant>DTV_ATSCMH_SCCC_BLOCK_MODE</constant></title> | |
| 931 | − <para>Series Concatenated Convolutional Code Block Mode.</para> | |
| 932 | − <para>Possible values are:</para> | |
| 933 | −<table pgwide="1" frame="none" id="atscmh-sccc-block-mode"> | |
| 934 | − <title>enum atscmh_scc_block_mode</title> | |
| 935 | − <tgroup cols="2"> | |
| 936 | − &cs-def; | |
| 937 | − <thead> | |
| 938 | − <row> | |
| 939 | − <entry>ID</entry> | |
| 940 | − <entry>Description</entry> | |
| 941 | − </row> | |
| 942 | − </thead> | |
| 943 | − <tbody valign="top"> | |
| 944 | − <row> | |
| 945 | − <entry id="ATSCMH-SCCC-BLK-SEP"><constant>ATSCMH_SCCC_BLK_SEP</constant></entry> | |
| 946 | − <entry>Separate SCCC: the SCCC outer code mode shall be set independently | |
| 947 | − for each Group Region (A, B, C, D)</entry> | |
| 948 | − </row><row> | |
| 949 | − <entry id="ATSCMH-SCCC-BLK-COMB"><constant>ATSCMH_SCCC_BLK_COMB</constant></entry> | |
| 950 | − <entry>Combined SCCC: all four Regions shall have the same SCCC outer | |
| 951 | − code mode.</entry> | |
| 952 | − </row><row> | |
| 953 | − <entry id="ATSCMH-SCCC-BLK-RES"><constant>ATSCMH_SCCC_BLK_RES</constant></entry> | |
| 954 | − <entry>Reserved. Shouldn't be used.</entry> | |
| 955 | − </row> | |
| 956 | − </tbody> | |
| 957 | − </tgroup> | |
| 958 | −</table> | |
| 959 | − </section> | |
| 960 | − <section id="DTV-ATSCMH-SCCC-CODE-MODE-A"> | |
| 961 | − <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_A</constant></title> | |
| 962 | − <para>Series Concatenated Convolutional Code Rate.</para> | |
| 963 | − <para>Possible values are:</para> | |
| 964 | −<table pgwide="1" frame="none" id="atscmh-sccc-code-mode"> | |
| 965 | − <title>enum atscmh_sccc_code_mode</title> | |
| 966 | − <tgroup cols="2"> | |
| 967 | − &cs-def; | |
| 968 | − <thead> | |
| 969 | − <row> | |
| 970 | − <entry>ID</entry> | |
| 971 | − <entry>Description</entry> | |
| 972 | − </row> | |
| 973 | − </thead> | |
| 974 | − <tbody valign="top"> | |
| 975 | − <row> | |
| 976 | − <entry id="ATSCMH-SCCC-CODE-HLF"><constant>ATSCMH_SCCC_CODE_HLF</constant></entry> | |
| 977 | − <entry>The outer code rate of a SCCC Block is 1/2 rate.</entry> | |
| 978 | − </row><row> | |
| 979 | − <entry id="ATSCMH-SCCC-CODE-QTR"><constant>ATSCMH_SCCC_CODE_QTR</constant></entry> | |
| 980 | − <entry>The outer code rate of a SCCC Block is 1/4 rate.</entry> | |
| 981 | − </row><row> | |
| 982 | − <entry id="ATSCMH-SCCC-CODE-RES"><constant>ATSCMH_SCCC_CODE_RES</constant></entry> | |
| 983 | − <entry>to be documented.</entry> | |
| 984 | − </row> | |
| 985 | − </tbody> | |
| 986 | − </tgroup> | |
| 987 | −</table> | |
| 988 | − </section> | |
| 989 | − <section id="DTV-ATSCMH-SCCC-CODE-MODE-B"> | |
| 990 | − <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_B</constant></title> | |
| 991 | − <para>Series Concatenated Convolutional Code Rate.</para> | |
| 992 | − <para>Possible values are the same as documented on | |
| 993 | − &atscmh-sccc-code-mode;.</para> | |
| 994 | − </section> | |
| 995 | − <section id="DTV-ATSCMH-SCCC-CODE-MODE-C"> | |
| 996 | − <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_C</constant></title> | |
| 997 | − <para>Series Concatenated Convolutional Code Rate.</para> | |
| 998 | − <para>Possible values are the same as documented on | |
| 999 | − &atscmh-sccc-code-mode;.</para> | |
| 1000 | − </section> | |
| 1001 | − <section id="DTV-ATSCMH-SCCC-CODE-MODE-D"> | |
| 1002 | − <title><constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant></title> | |
| 1003 | − <para>Series Concatenated Convolutional Code Rate.</para> | |
| 1004 | − <para>Possible values are the same as documented on | |
| 1005 | − &atscmh-sccc-code-mode;.</para> | |
| 1006 | − </section> | |
| 1007 | − </section> | |
| 1008 | − <section id="DTV-API-VERSION"> | |
| 1009 | − <title><constant>DTV_API_VERSION</constant></title> | |
| 1010 | − <para>Returns the major/minor version of the DVB API</para> | |
| 1011 | − </section> | |
| 1012 | − <section id="DTV-CODE-RATE-HP"> | |
| 1013 | − <title><constant>DTV_CODE_RATE_HP</constant></title> | |
| 1014 | − <para>Used on terrestrial transmissions. The acceptable values are | |
| 1015 | − the ones described at &fe-transmit-mode-t;. | |
| 1016 | − </para> | |
| 1017 | − </section> | |
| 1018 | − <section id="DTV-CODE-RATE-LP"> | |
| 1019 | − <title><constant>DTV_CODE_RATE_LP</constant></title> | |
| 1020 | − <para>Used on terrestrial transmissions. The acceptable values are | |
| 1021 | − the ones described at &fe-transmit-mode-t;. | |
| 1022 | − </para> | |
| 1023 | − | |
| 1024 | − </section> | |
| 1025 | − | |
| 1026 | − <section id="DTV-GUARD-INTERVAL"> | |
| 1027 | − <title><constant>DTV_GUARD_INTERVAL</constant></title> | |
| 1028 | − | |
| 1029 | − <para>Possible values are:</para> | |
| 1030 | − | |
| 1031 | −<section id="fe-guard-interval-t"> | |
| 1032 | −<title>Modulation guard interval</title> | |
| 1033 | − | |
| 1034 | −<table pgwide="1" frame="none" id="fe-guard-interval"> | |
| 1035 | − <title>enum fe_guard_interval</title> | |
| 1036 | − <tgroup cols="2"> | |
| 1037 | − &cs-def; | |
| 1038 | − <thead> | |
| 1039 | − <row> | |
| 1040 | − <entry>ID</entry> | |
| 1041 | − <entry>Description</entry> | |
| 1042 | − </row> | |
| 1043 | − </thead> | |
| 1044 | − <tbody valign="top"> | |
| 1045 | − <row> | |
| 1046 | − <entry id="GUARD-INTERVAL-AUTO"><constant>GUARD_INTERVAL_AUTO</constant></entry> | |
| 1047 | − <entry>Autodetect the guard interval</entry> | |
| 1048 | − </row><row> | |
| 1049 | − <entry id="GUARD-INTERVAL-1-128"><constant>GUARD_INTERVAL_1_128</constant></entry> | |
| 1050 | − <entry>Guard interval 1/128</entry> | |
| 1051 | − </row><row> | |
| 1052 | − <entry id="GUARD-INTERVAL-1-32"><constant>GUARD_INTERVAL_1_32</constant></entry> | |
| 1053 | − <entry>Guard interval 1/32</entry> | |
| 1054 | − </row><row> | |
| 1055 | − <entry id="GUARD-INTERVAL-1-16"><constant>GUARD_INTERVAL_1_16</constant></entry> | |
| 1056 | − <entry>Guard interval 1/16</entry> | |
| 1057 | − </row><row> | |
| 1058 | − <entry id="GUARD-INTERVAL-1-8"><constant>GUARD_INTERVAL_1_8</constant></entry> | |
| 1059 | − <entry>Guard interval 1/8</entry> | |
| 1060 | − </row><row> | |
| 1061 | − <entry id="GUARD-INTERVAL-1-4"><constant>GUARD_INTERVAL_1_4</constant></entry> | |
| 1062 | − <entry>Guard interval 1/4</entry> | |
| 1063 | − </row><row> | |
| 1064 | − <entry id="GUARD-INTERVAL-19-128"><constant>GUARD_INTERVAL_19_128</constant></entry> | |
| 1065 | − <entry>Guard interval 19/128</entry> | |
| 1066 | − </row><row> | |
| 1067 | − <entry id="GUARD-INTERVAL-19-256"><constant>GUARD_INTERVAL_19_256</constant></entry> | |
| 1068 | − <entry>Guard interval 19/256</entry> | |
| 1069 | − </row><row> | |
| 1070 | − <entry id="GUARD-INTERVAL-PN420"><constant>GUARD_INTERVAL_PN420</constant></entry> | |
| 1071 | − <entry>PN length 420 (1/4)</entry> | |
| 1072 | − </row><row> | |
| 1073 | − <entry id="GUARD-INTERVAL-PN595"><constant>GUARD_INTERVAL_PN595</constant></entry> | |
| 1074 | − <entry>PN length 595 (1/6)</entry> | |
| 1075 | − </row><row> | |
| 1076 | − <entry id="GUARD-INTERVAL-PN945"><constant>GUARD_INTERVAL_PN945</constant></entry> | |
| 1077 | − <entry>PN length 945 (1/9)</entry> | |
| 1078 | − </row> | |
| 1079 | − </tbody> | |
| 1080 | − </tgroup> | |
| 1081 | −</table> | |
| 1082 | − | |
| 1083 | − <para>Notes:</para> | |
| 1084 | − <para>1) If <constant>DTV_GUARD_INTERVAL</constant> is set the <constant>GUARD_INTERVAL_AUTO</constant> the hardware will | |
| 1085 | − try to find the correct guard interval (if capable) and will use TMCC to fill | |
| 1086 | − in the missing parameters.</para> | |
| 1087 | − <para>2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present</para> | |
| 1088 | − <para>3) DTMB specifies PN420, PN595 and PN945.</para> | |
| 1089 | −</section> | |
| 1090 | − </section> | |
| 1091 | − <section id="DTV-TRANSMISSION-MODE"> | |
| 1092 | − <title><constant>DTV_TRANSMISSION_MODE</constant></title> | |
| 1093 | − | |
| 1094 | − <para>Specifies the number of carriers used by the standard. | |
| 1095 | − This is used only on OFTM-based standards, e. g. | |
| 1096 | − DVB-T/T2, ISDB-T, DTMB</para> | |
| 1097 | − | |
| 1098 | −<section id="fe-transmit-mode-t"> | |
| 1099 | −<title>enum fe_transmit_mode: Number of carriers per channel</title> | |
| 1100 | − | |
| 1101 | −<table pgwide="1" frame="none" id="fe-transmit-mode"> | |
| 1102 | − <title>enum fe_transmit_mode</title> | |
| 1103 | − <tgroup cols="2"> | |
| 1104 | − &cs-def; | |
| 1105 | − <thead> | |
| 1106 | − <row> | |
| 1107 | − <entry>ID</entry> | |
| 1108 | − <entry>Description</entry> | |
| 1109 | − </row> | |
| 1110 | − </thead> | |
| 1111 | − <tbody valign="top"> | |
| 1112 | − <row> | |
| 1113 | − <entry id="TRANSMISSION-MODE-AUTO"><constant>TRANSMISSION_MODE_AUTO</constant></entry> | |
| 1114 | − <entry>Autodetect transmission mode. The hardware will try to find | |
| 1115 | − the correct FFT-size (if capable) to fill in the missing | |
| 1116 | − parameters.</entry> | |
| 1117 | − </row><row> | |
| 1118 | − <entry id="TRANSMISSION-MODE-1K"><constant>TRANSMISSION_MODE_1K</constant></entry> | |
| 1119 | − <entry>Transmission mode 1K</entry> | |
| 1120 | − </row><row> | |
| 1121 | − <entry id="TRANSMISSION-MODE-2K"><constant>TRANSMISSION_MODE_2K</constant></entry> | |
| 1122 | − <entry>Transmission mode 2K</entry> | |
| 1123 | − </row><row> | |
| 1124 | − <entry id="TRANSMISSION-MODE-8K"><constant>TRANSMISSION_MODE_8K</constant></entry> | |
| 1125 | − <entry>Transmission mode 8K</entry> | |
| 1126 | − </row><row> | |
| 1127 | − <entry id="TRANSMISSION-MODE-4K"><constant>TRANSMISSION_MODE_4K</constant></entry> | |
| 1128 | − <entry>Transmission mode 4K</entry> | |
| 1129 | − </row><row> | |
| 1130 | − <entry id="TRANSMISSION-MODE-16K"><constant>TRANSMISSION_MODE_16K</constant></entry> | |
| 1131 | − <entry>Transmission mode 16K</entry> | |
| 1132 | − </row><row> | |
| 1133 | − <entry id="TRANSMISSION-MODE-32K"><constant>TRANSMISSION_MODE_32K</constant></entry> | |
| 1134 | − <entry>Transmission mode 32K</entry> | |
| 1135 | − </row><row> | |
| 1136 | − <entry id="TRANSMISSION-MODE-C1"><constant>TRANSMISSION_MODE_C1</constant></entry> | |
| 1137 | − <entry>Single Carrier (C=1) transmission mode (DTMB)</entry> | |
| 1138 | − </row><row> | |
| 1139 | − <entry id="TRANSMISSION-MODE-C3780"><constant>TRANSMISSION_MODE_C3780</constant></entry> | |
| 1140 | − <entry>Multi Carrier (C=3780) transmission mode (DTMB)</entry> | |
| 1141 | − </row> | |
| 1142 | − </tbody> | |
| 1143 | − </tgroup> | |
| 1144 | −</table> | |
| 1145 | − | |
| 1146 | − | |
| 1147 | − <para>Notes:</para> | |
| 1148 | − <para>1) ISDB-T supports three carrier/symbol-size: 8K, 4K, 2K. It is called | |
| 1149 | − 'mode' in the standard: Mode 1 is 2K, mode 2 is 4K, mode 3 is 8K</para> | |
| 1150 | − | |
| 1151 | − <para>2) If <constant>DTV_TRANSMISSION_MODE</constant> is set the <constant>TRANSMISSION_MODE_AUTO</constant> the | |
| 1152 | − hardware will try to find the correct FFT-size (if capable) and will | |
| 1153 | − use TMCC to fill in the missing parameters.</para> | |
| 1154 | − <para>3) DVB-T specifies 2K and 8K as valid sizes.</para> | |
| 1155 | − <para>4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K.</para> | |
| 1156 | − <para>5) DTMB specifies C1 and C3780.</para> | |
| 1157 | −</section> | |
| 1158 | − </section> | |
| 1159 | − <section id="DTV-HIERARCHY"> | |
| 1160 | − <title><constant>DTV_HIERARCHY</constant></title> | |
| 1161 | − <para>Frontend hierarchy</para> | |
| 1162 | − | |
| 1163 | − | |
| 1164 | −<section id="fe-hierarchy-t"> | |
| 1165 | −<title>Frontend hierarchy</title> | |
| 1166 | − | |
| 1167 | −<table pgwide="1" frame="none" id="fe-hierarchy"> | |
| 1168 | − <title>enum fe_hierarchy</title> | |
| 1169 | − <tgroup cols="2"> | |
| 1170 | − &cs-def; | |
| 1171 | − <thead> | |
| 1172 | − <row> | |
| 1173 | − <entry>ID</entry> | |
| 1174 | − <entry>Description</entry> | |
| 1175 | − </row> | |
| 1176 | − </thead> | |
| 1177 | − <tbody valign="top"> | |
| 1178 | − <row> | |
| 1179 | − <entry id="HIERARCHY-NONE"><constant>HIERARCHY_NONE</constant></entry> | |
| 1180 | − <entry>No hierarchy</entry> | |
| 1181 | − </row><row> | |
| 1182 | − <entry id="HIERARCHY-AUTO"><constant>HIERARCHY_AUTO</constant></entry> | |
| 1183 | − <entry>Autodetect hierarchy (if supported)</entry> | |
| 1184 | − </row><row> | |
| 1185 | − <entry id="HIERARCHY-1"><constant>HIERARCHY_1</constant></entry> | |
| 1186 | − <entry>Hierarchy 1</entry> | |
| 1187 | − </row><row> | |
| 1188 | − <entry id="HIERARCHY-2"><constant>HIERARCHY_2</constant></entry> | |
| 1189 | − <entry>Hierarchy 2</entry> | |
| 1190 | − </row><row> | |
| 1191 | − <entry id="HIERARCHY-4"><constant>HIERARCHY_4</constant></entry> | |
| 1192 | − <entry>Hierarchy 4</entry> | |
| 1193 | − </row> | |
| 1194 | − </tbody> | |
| 1195 | − </tgroup> | |
| 1196 | −</table> | |
| 1197 | −</section> | |
| 1198 | − | |
| 1199 | − </section> | |
| 1200 | − <section id="DTV-STREAM-ID"> | |
| 1201 | − <title><constant>DTV_STREAM_ID</constant></title> | |
| 1202 | − <para>DVB-S2, DVB-T2 and ISDB-S support the transmission of several | |
| 1203 | − streams on a single transport stream. | |
| 1204 | − This property enables the DVB driver to handle substream filtering, | |
| 1205 | − when supported by the hardware. | |
| 1206 | − By default, substream filtering is disabled. | |
| 1207 | − </para><para> | |
| 1208 | − For DVB-S2 and DVB-T2, the valid substream id range is from 0 to 255. | |
| 1209 | − </para><para> | |
| 1210 | − For ISDB, the valid substream id range is from 1 to 65535. | |
| 1211 | − </para><para> | |
| 1212 | − To disable it, you should use the special macro NO_STREAM_ID_FILTER. | |
| 1213 | − </para><para> | |
| 1214 | − Note: any value outside the id range also disables filtering. | |
| 1215 | − </para> | |
| 1216 | − </section> | |
| 1217 | − <section id="DTV-DVBT2-PLP-ID-LEGACY"> | |
| 1218 | − <title><constant>DTV_DVBT2_PLP_ID_LEGACY</constant></title> | |
| 1219 | − <para>Obsolete, replaced with DTV_STREAM_ID.</para> | |
| 1220 | − </section> | |
| 1221 | − <section id="DTV-ENUM-DELSYS"> | |
| 1222 | − <title><constant>DTV_ENUM_DELSYS</constant></title> | |
| 1223 | − <para>A Multi standard frontend needs to advertise the delivery systems provided. | |
| 1224 | − Applications need to enumerate the provided delivery systems, before using | |
| 1225 | − any other operation with the frontend. Prior to it's introduction, | |
| 1226 | − FE_GET_INFO was used to determine a frontend type. A frontend which | |
| 1227 | − provides more than a single delivery system, FE_GET_INFO doesn't help much. | |
| 1228 | − Applications which intends to use a multistandard frontend must enumerate | |
| 1229 | − the delivery systems associated with it, rather than trying to use | |
| 1230 | − FE_GET_INFO. In the case of a legacy frontend, the result is just the same | |
| 1231 | − as with FE_GET_INFO, but in a more structured format </para> | |
| 1232 | − </section> | |
| 1233 | − <section id="DTV-INTERLEAVING"> | |
| 1234 | − <title><constant>DTV_INTERLEAVING</constant></title> | |
| 1235 | − | |
| 1236 | −<para>Time interleaving to be used. Currently, used only on DTMB.</para> | |
| 1237 | − | |
| 1238 | −<table pgwide="1" frame="none" id="fe-interleaving"> | |
| 1239 | − <title>enum fe_interleaving</title> | |
| 1240 | − <tgroup cols="2"> | |
| 1241 | − &cs-def; | |
| 1242 | − <thead> | |
| 1243 | − <row> | |
| 1244 | − <entry>ID</entry> | |
| 1245 | − <entry>Description</entry> | |
| 1246 | − </row> | |
| 1247 | − </thead> | |
| 1248 | − <tbody valign="top"> | |
| 1249 | − <row> | |
| 1250 | − <entry id="INTERLEAVING-NONE"><constant>INTERLEAVING_NONE</constant></entry> | |
| 1251 | − <entry>No interleaving.</entry> | |
| 1252 | − </row><row> | |
| 1253 | − <entry id="INTERLEAVING-AUTO"><constant>INTERLEAVING_AUTO</constant></entry> | |
| 1254 | − <entry>Auto-detect interleaving.</entry> | |
| 1255 | − </row><row> | |
| 1256 | − <entry id="INTERLEAVING-240"><constant>INTERLEAVING_240</constant></entry> | |
| 1257 | − <entry>Interleaving of 240 symbols.</entry> | |
| 1258 | − </row><row> | |
| 1259 | − <entry id="INTERLEAVING-720"><constant>INTERLEAVING_720</constant></entry> | |
| 1260 | − <entry>Interleaving of 720 symbols.</entry> | |
| 1261 | − </row> | |
| 1262 | − </tbody> | |
| 1263 | − </tgroup> | |
| 1264 | −</table> | |
| 1265 | − | |
| 1266 | − </section> | |
| 1267 | − <section id="DTV-LNA"> | |
| 1268 | − <title><constant>DTV_LNA</constant></title> | |
| 1269 | − <para>Low-noise amplifier.</para> | |
| 1270 | − <para>Hardware might offer controllable LNA which can be set manually | |
| 1271 | − using that parameter. Usually LNA could be found only from | |
| 1272 | − terrestrial devices if at all.</para> | |
| 1273 | − <para>Possible values: 0, 1, LNA_AUTO</para> | |
| 1274 | − <para>0, LNA off</para> | |
| 1275 | − <para>1, LNA on</para> | |
| 1276 | − <para>use the special macro LNA_AUTO to set LNA auto</para> | |
| 1277 | − </section> | |
| 1278 | −</section> | |
| 1279 | − | |
| 1280 | − <section id="frontend-stat-properties"> | |
| 1281 | − <title>Frontend statistics indicators</title> | |
| 1282 | − <para>The values are returned via <constant>dtv_property.stat</constant>. | |
| 1283 | − If the property is supported, <constant>dtv_property.stat.len</constant> is bigger than zero.</para> | |
| 1284 | − <para>For most delivery systems, <constant>dtv_property.stat.len</constant> | |
| 1285 | − will be 1 if the stats is supported, and the properties will | |
| 1286 | − return a single value for each parameter.</para> | |
| 1287 | − <para>It should be noted, however, that new OFDM delivery systems | |
| 1288 | − like ISDB can use different modulation types for each group of | |
| 1289 | − carriers. On such standards, up to 3 groups of statistics can be | |
| 1290 | − provided, and <constant>dtv_property.stat.len</constant> is updated | |
| 1291 | − to reflect the "global" metrics, plus one metric per each carrier | |
| 1292 | − group (called "layer" on ISDB).</para> | |
| 1293 | − <para>So, in order to be consistent with other delivery systems, the first | |
| 1294 | − value at <link linkend="dtv-stats"><constant>dtv_property.stat.dtv_stats</constant></link> | |
| 1295 | − array refers to the global metric. The other elements of the array | |
| 1296 | − represent each layer, starting from layer A(index 1), | |
| 1297 | − layer B (index 2) and so on.</para> | |
| 1298 | − <para>The number of filled elements are stored at <constant>dtv_property.stat.len</constant>.</para> | |
| 1299 | − <para>Each element of the <constant>dtv_property.stat.dtv_stats</constant> array consists on two elements:</para> | |
| 1300 | − <itemizedlist mark='opencircle'> | |
| 1301 | − <listitem><para><constant>svalue</constant> or <constant>uvalue</constant>, where | |
| 1302 | − <constant>svalue</constant> is for signed values of the measure (dB measures) | |
| 1303 | − and <constant>uvalue</constant> is for unsigned values (counters, relative scale)</para></listitem> | |
| 1304 | − <listitem><para><constant>scale</constant> - Scale for the value. It can be:</para> | |
| 1305 | − <itemizedlist mark='bullet' id="fecap-scale-params"> | |
| 1306 | − <listitem id="FE-SCALE-NOT-AVAILABLE"><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - The parameter is supported by the frontend, but it was not possible to collect it (could be a transitory or permanent condition)</para></listitem> | |
| 1307 | − <listitem id="FE-SCALE-DECIBEL"><para><constant>FE_SCALE_DECIBEL</constant> - parameter is a signed value, measured in 1/1000 dB</para></listitem> | |
| 1308 | − <listitem id="FE-SCALE-RELATIVE"><para><constant>FE_SCALE_RELATIVE</constant> - parameter is a unsigned value, where 0 means 0% and 65535 means 100%.</para></listitem> | |
| 1309 | − <listitem id="FE-SCALE-COUNTER"><para><constant>FE_SCALE_COUNTER</constant> - parameter is a unsigned value that counts the occurrence of an event, like bit error, block error, or lapsed time.</para></listitem> | |
| 1310 | − </itemizedlist> | |
| 1311 | − </listitem> | |
| 1312 | − </itemizedlist> | |
| 1313 | − <section id="DTV-STAT-SIGNAL-STRENGTH"> | |
| 1314 | − <title><constant>DTV_STAT_SIGNAL_STRENGTH</constant></title> | |
| 1315 | − <para>Indicates the signal strength level at the analog part of the tuner or of the demod.</para> | |
| 1316 | − <para>Possible scales for this metric are:</para> | |
| 1317 | − <itemizedlist mark='bullet'> | |
| 1318 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1319 | − <listitem><para><constant>FE_SCALE_DECIBEL</constant> - signal strength is in 0.001 dBm units, power measured in miliwatts. This value is generally negative.</para></listitem> | |
| 1320 | − <listitem><para><constant>FE_SCALE_RELATIVE</constant> - The frontend provides a 0% to 100% measurement for power (actually, 0 to 65535).</para></listitem> | |
| 1321 | − </itemizedlist> | |
| 1322 | − </section> | |
| 1323 | − <section id="DTV-STAT-CNR"> | |
| 1324 | − <title><constant>DTV_STAT_CNR</constant></title> | |
| 1325 | − <para>Indicates the Signal to Noise ratio for the main carrier.</para> | |
| 1326 | − <para>Possible scales for this metric are:</para> | |
| 1327 | − <itemizedlist mark='bullet'> | |
| 1328 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1329 | − <listitem><para><constant>FE_SCALE_DECIBEL</constant> - Signal/Noise ratio is in 0.001 dB units.</para></listitem> | |
| 1330 | − <listitem><para><constant>FE_SCALE_RELATIVE</constant> - The frontend provides a 0% to 100% measurement for Signal/Noise (actually, 0 to 65535).</para></listitem> | |
| 1331 | − </itemizedlist> | |
| 1332 | − </section> | |
| 1333 | − <section id="DTV-STAT-PRE-ERROR-BIT-COUNT"> | |
| 1334 | − <title><constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant></title> | |
| 1335 | − <para>Measures the number of bit errors before the forward error correction (FEC) on the inner coding block (before Viterbi, LDPC or other inner code).</para> | |
| 1336 | − <para>This measure is taken during the same interval as <constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant>.</para> | |
| 1337 | − <para>In order to get the BER (Bit Error Rate) measurement, it should be divided by | |
| 1338 | − <link linkend="DTV-STAT-PRE-TOTAL-BIT-COUNT"><constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant></link>.</para> | |
| 1339 | − <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. | |
| 1340 | − The frontend may reset it when a channel/transponder is tuned.</para> | |
| 1341 | − <para>Possible scales for this metric are:</para> | |
| 1342 | − <itemizedlist mark='bullet'> | |
| 1343 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1344 | − <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of error bits counted before the inner coding.</para></listitem> | |
| 1345 | − </itemizedlist> | |
| 1346 | − </section> | |
| 1347 | − <section id="DTV-STAT-PRE-TOTAL-BIT-COUNT"> | |
| 1348 | − <title><constant>DTV_STAT_PRE_TOTAL_BIT_COUNT</constant></title> | |
| 1349 | − <para>Measures the amount of bits received before the inner code block, during the same period as | |
| 1350 | − <link linkend="DTV-STAT-PRE-ERROR-BIT-COUNT"><constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant></link> measurement was taken.</para> | |
| 1351 | − <para>It should be noted that this measurement can be smaller than the total amount of bits on the transport stream, | |
| 1352 | − as the frontend may need to manually restart the measurement, losing some data between each measurement interval.</para> | |
| 1353 | − <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. | |
| 1354 | − The frontend may reset it when a channel/transponder is tuned.</para> | |
| 1355 | − <para>Possible scales for this metric are:</para> | |
| 1356 | − <itemizedlist mark='bullet'> | |
| 1357 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1358 | − <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of bits counted while measuring | |
| 1359 | − <link linkend="DTV-STAT-PRE-ERROR-BIT-COUNT"><constant>DTV_STAT_PRE_ERROR_BIT_COUNT</constant></link>.</para></listitem> | |
| 1360 | − </itemizedlist> | |
| 1361 | − </section> | |
| 1362 | − <section id="DTV-STAT-POST-ERROR-BIT-COUNT"> | |
| 1363 | − <title><constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant></title> | |
| 1364 | − <para>Measures the number of bit errors after the forward error correction (FEC) done by inner code block (after Viterbi, LDPC or other inner code).</para> | |
| 1365 | − <para>This measure is taken during the same interval as <constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant>.</para> | |
| 1366 | − <para>In order to get the BER (Bit Error Rate) measurement, it should be divided by | |
| 1367 | − <link linkend="DTV-STAT-POST-TOTAL-BIT-COUNT"><constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant></link>.</para> | |
| 1368 | − <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. | |
| 1369 | − The frontend may reset it when a channel/transponder is tuned.</para> | |
| 1370 | − <para>Possible scales for this metric are:</para> | |
| 1371 | − <itemizedlist mark='bullet'> | |
| 1372 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1373 | − <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of error bits counted after the inner coding.</para></listitem> | |
| 1374 | − </itemizedlist> | |
| 1375 | − </section> | |
| 1376 | − <section id="DTV-STAT-POST-TOTAL-BIT-COUNT"> | |
| 1377 | − <title><constant>DTV_STAT_POST_TOTAL_BIT_COUNT</constant></title> | |
| 1378 | − <para>Measures the amount of bits received after the inner coding, during the same period as | |
| 1379 | − <link linkend="DTV-STAT-POST-ERROR-BIT-COUNT"><constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant></link> measurement was taken.</para> | |
| 1380 | − <para>It should be noted that this measurement can be smaller than the total amount of bits on the transport stream, | |
| 1381 | − as the frontend may need to manually restart the measurement, losing some data between each measurement interval.</para> | |
| 1382 | − <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. | |
| 1383 | − The frontend may reset it when a channel/transponder is tuned.</para> | |
| 1384 | − <para>Possible scales for this metric are:</para> | |
| 1385 | − <itemizedlist mark='bullet'> | |
| 1386 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1387 | − <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of bits counted while measuring | |
| 1388 | − <link linkend="DTV-STAT-POST-ERROR-BIT-COUNT"><constant>DTV_STAT_POST_ERROR_BIT_COUNT</constant></link>.</para></listitem> | |
| 1389 | − </itemizedlist> | |
| 1390 | − </section> | |
| 1391 | − <section id="DTV-STAT-ERROR-BLOCK-COUNT"> | |
| 1392 | − <title><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></title> | |
| 1393 | − <para>Measures the number of block errors after the outer forward error correction coding (after Reed-Solomon or other outer code).</para> | |
| 1394 | − <para>This measurement is monotonically increased, as the frontend gets more bit count measurements. | |
| 1395 | − The frontend may reset it when a channel/transponder is tuned.</para> | |
| 1396 | − <para>Possible scales for this metric are:</para> | |
| 1397 | − <itemizedlist mark='bullet'> | |
| 1398 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1399 | − <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of error blocks counted after the outer coding.</para></listitem> | |
| 1400 | − </itemizedlist> | |
| 1401 | − </section> | |
| 1402 | − <section id="DTV-STAT-TOTAL-BLOCK-COUNT"> | |
| 1403 | − <title><constant>DTV-STAT_TOTAL_BLOCK_COUNT</constant></title> | |
| 1404 | − <para>Measures the total number of blocks received during the same period as | |
| 1405 | − <link linkend="DTV-STAT-ERROR-BLOCK-COUNT"><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></link> measurement was taken.</para> | |
| 1406 | − <para>It can be used to calculate the PER indicator, by dividing | |
| 1407 | − <link linkend="DTV-STAT-ERROR-BLOCK-COUNT"><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></link> | |
| 1408 | − by <link linkend="DTV-STAT-TOTAL-BLOCK-COUNT"><constant>DTV-STAT-TOTAL-BLOCK-COUNT</constant></link>.</para> | |
| 1409 | − <para>Possible scales for this metric are:</para> | |
| 1410 | − <itemizedlist mark='bullet'> | |
| 1411 | − <listitem><para><constant>FE_SCALE_NOT_AVAILABLE</constant> - it failed to measure it, or the measurement was not complete yet.</para></listitem> | |
| 1412 | − <listitem><para><constant>FE_SCALE_COUNTER</constant> - Number of blocks counted while measuring | |
| 1413 | − <link linkend="DTV-STAT-ERROR-BLOCK-COUNT"><constant>DTV_STAT_ERROR_BLOCK_COUNT</constant></link>.</para></listitem> | |
| 1414 | − </itemizedlist> | |
| 1415 | − </section> | |
| 1416 | − </section> | |
| 1417 | − | |
| 1418 | − <section id="frontend-property-terrestrial-systems"> | |
| 1419 | − <title>Properties used on terrestrial delivery systems</title> | |
| 1420 | − <section id="dvbt-params"> | |
| 1421 | − <title>DVB-T delivery system</title> | |
| 1422 | − <para>The following parameters are valid for DVB-T:</para> | |
| 1423 | − <itemizedlist mark='opencircle'> | |
| 1424 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1425 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1426 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1427 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1428 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1429 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1430 | − <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> | |
| 1431 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1432 | − <listitem><para><link linkend="DTV-CODE-RATE-HP"><constant>DTV_CODE_RATE_HP</constant></link></para></listitem> | |
| 1433 | − <listitem><para><link linkend="DTV-CODE-RATE-LP"><constant>DTV_CODE_RATE_LP</constant></link></para></listitem> | |
| 1434 | − <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> | |
| 1435 | − <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> | |
| 1436 | − <listitem><para><link linkend="DTV-HIERARCHY"><constant>DTV_HIERARCHY</constant></link></para></listitem> | |
| 1437 | − <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> | |
| 1438 | − </itemizedlist> | |
| 1439 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1440 | − </section> | |
| 1441 | − <section id="dvbt2-params"> | |
| 1442 | − <title>DVB-T2 delivery system</title> | |
| 1443 | − <para>DVB-T2 support is currently in the early stages | |
| 1444 | − of development, so expect that this section maygrow and become | |
| 1445 | − more detailed with time.</para> | |
| 1446 | − <para>The following parameters are valid for DVB-T2:</para> | |
| 1447 | − <itemizedlist mark='opencircle'> | |
| 1448 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1449 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1450 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1451 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1452 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1453 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1454 | − <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> | |
| 1455 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1456 | − <listitem><para><link linkend="DTV-CODE-RATE-HP"><constant>DTV_CODE_RATE_HP</constant></link></para></listitem> | |
| 1457 | − <listitem><para><link linkend="DTV-CODE-RATE-LP"><constant>DTV_CODE_RATE_LP</constant></link></para></listitem> | |
| 1458 | − <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> | |
| 1459 | − <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> | |
| 1460 | − <listitem><para><link linkend="DTV-HIERARCHY"><constant>DTV_HIERARCHY</constant></link></para></listitem> | |
| 1461 | − <listitem><para><link linkend="DTV-STREAM-ID"><constant>DTV_STREAM_ID</constant></link></para></listitem> | |
| 1462 | − <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> | |
| 1463 | − </itemizedlist> | |
| 1464 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1465 | − </section> | |
| 1466 | − <section id="isdbt"> | |
| 1467 | − <title>ISDB-T delivery system</title> | |
| 1468 | − <para>This ISDB-T/ISDB-Tsb API extension should reflect all information | |
| 1469 | − needed to tune any ISDB-T/ISDB-Tsb hardware. Of course it is possible | |
| 1470 | − that some very sophisticated devices won't need certain parameters to | |
| 1471 | − tune.</para> | |
| 1472 | − <para>The information given here should help application writers to know how | |
| 1473 | − to handle ISDB-T and ISDB-Tsb hardware using the Linux DVB-API.</para> | |
| 1474 | − <para>The details given here about ISDB-T and ISDB-Tsb are just enough to | |
| 1475 | − basically show the dependencies between the needed parameter values, | |
| 1476 | − but surely some information is left out. For more detailed information | |
| 1477 | − see the following documents:</para> | |
| 1478 | − <para>ARIB STD-B31 - "Transmission System for Digital Terrestrial | |
| 1479 | − Television Broadcasting" and</para> | |
| 1480 | − <para>ARIB TR-B14 - "Operational Guidelines for Digital Terrestrial | |
| 1481 | − Television Broadcasting".</para> | |
| 1482 | − <para>In order to understand the ISDB specific parameters, | |
| 1483 | − one has to have some knowledge the channel structure in | |
| 1484 | − ISDB-T and ISDB-Tsb. I.e. it has to be known to | |
| 1485 | − the reader that an ISDB-T channel consists of 13 segments, | |
| 1486 | − that it can have up to 3 layer sharing those segments, | |
| 1487 | − and things like that.</para> | |
| 1488 | − <para>The following parameters are valid for ISDB-T:</para> | |
| 1489 | − <itemizedlist mark='opencircle'> | |
| 1490 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1491 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1492 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1493 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1494 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1495 | − <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> | |
| 1496 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1497 | − <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> | |
| 1498 | − <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> | |
| 1499 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-ENABLED"><constant>DTV_ISDBT_LAYER_ENABLED</constant></link></para></listitem> | |
| 1500 | − <listitem><para><link linkend="DTV-ISDBT-PARTIAL-RECEPTION"><constant>DTV_ISDBT_PARTIAL_RECEPTION</constant></link></para></listitem> | |
| 1501 | − <listitem><para><link linkend="DTV-ISDBT-SOUND-BROADCASTING"><constant>DTV_ISDBT_SOUND_BROADCASTING</constant></link></para></listitem> | |
| 1502 | − <listitem><para><link linkend="DTV-ISDBT-SB-SUBCHANNEL-ID"><constant>DTV_ISDBT_SB_SUBCHANNEL_ID</constant></link></para></listitem> | |
| 1503 | − <listitem><para><link linkend="DTV-ISDBT-SB-SEGMENT-IDX"><constant>DTV_ISDBT_SB_SEGMENT_IDX</constant></link></para></listitem> | |
| 1504 | − <listitem><para><link linkend="DTV-ISDBT-SB-SEGMENT-COUNT"><constant>DTV_ISDBT_SB_SEGMENT_COUNT</constant></link></para></listitem> | |
| 1505 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-FEC"><constant>DTV_ISDBT_LAYERA_FEC</constant></link></para></listitem> | |
| 1506 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-MODULATION"><constant>DTV_ISDBT_LAYERA_MODULATION</constant></link></para></listitem> | |
| 1507 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT"><constant>DTV_ISDBT_LAYERA_SEGMENT_COUNT</constant></link></para></listitem> | |
| 1508 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING"><constant>DTV_ISDBT_LAYERA_TIME_INTERLEAVING</constant></link></para></listitem> | |
| 1509 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-FEC"><constant>DTV_ISDBT_LAYERB_FEC</constant></link></para></listitem> | |
| 1510 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-MODULATION"><constant>DTV_ISDBT_LAYERB_MODULATION</constant></link></para></listitem> | |
| 1511 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT"><constant>DTV_ISDBT_LAYERB_SEGMENT_COUNT</constant></link></para></listitem> | |
| 1512 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING"><constant>DTV_ISDBT_LAYERB_TIME_INTERLEAVING</constant></link></para></listitem> | |
| 1513 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-FEC"><constant>DTV_ISDBT_LAYERC_FEC</constant></link></para></listitem> | |
| 1514 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-MODULATION"><constant>DTV_ISDBT_LAYERC_MODULATION</constant></link></para></listitem> | |
| 1515 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-SEGMENT-COUNT"><constant>DTV_ISDBT_LAYERC_SEGMENT_COUNT</constant></link></para></listitem> | |
| 1516 | − <listitem><para><link linkend="DTV-ISDBT-LAYER-TIME-INTERLEAVING"><constant>DTV_ISDBT_LAYERC_TIME_INTERLEAVING</constant></link></para></listitem> | |
| 1517 | − </itemizedlist> | |
| 1518 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1519 | − </section> | |
| 1520 | − <section id="atsc-params"> | |
| 1521 | − <title>ATSC delivery system</title> | |
| 1522 | − <para>The following parameters are valid for ATSC:</para> | |
| 1523 | − <itemizedlist mark='opencircle'> | |
| 1524 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1525 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1526 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1527 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1528 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1529 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1530 | − <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> | |
| 1531 | − </itemizedlist> | |
| 1532 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1533 | − </section> | |
| 1534 | − <section id="atscmh-params"> | |
| 1535 | − <title>ATSC-MH delivery system</title> | |
| 1536 | − <para>The following parameters are valid for ATSC-MH:</para> | |
| 1537 | − <itemizedlist mark='opencircle'> | |
| 1538 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1539 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1540 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1541 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1542 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1543 | − <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> | |
| 1544 | − <listitem><para><link linkend="DTV-ATSCMH-FIC-VER"><constant>DTV_ATSCMH_FIC_VER</constant></link></para></listitem> | |
| 1545 | − <listitem><para><link linkend="DTV-ATSCMH-PARADE-ID"><constant>DTV_ATSCMH_PARADE_ID</constant></link></para></listitem> | |
| 1546 | − <listitem><para><link linkend="DTV-ATSCMH-NOG"><constant>DTV_ATSCMH_NOG</constant></link></para></listitem> | |
| 1547 | − <listitem><para><link linkend="DTV-ATSCMH-TNOG"><constant>DTV_ATSCMH_TNOG</constant></link></para></listitem> | |
| 1548 | − <listitem><para><link linkend="DTV-ATSCMH-SGN"><constant>DTV_ATSCMH_SGN</constant></link></para></listitem> | |
| 1549 | − <listitem><para><link linkend="DTV-ATSCMH-PRC"><constant>DTV_ATSCMH_PRC</constant></link></para></listitem> | |
| 1550 | − <listitem><para><link linkend="DTV-ATSCMH-RS-FRAME-MODE"><constant>DTV_ATSCMH_RS_FRAME_MODE</constant></link></para></listitem> | |
| 1551 | − <listitem><para><link linkend="DTV-ATSCMH-RS-FRAME-ENSEMBLE"><constant>DTV_ATSCMH_RS_FRAME_ENSEMBLE</constant></link></para></listitem> | |
| 1552 | − <listitem><para><link linkend="DTV-ATSCMH-RS-CODE-MODE-PRI"><constant>DTV_ATSCMH_RS_CODE_MODE_PRI</constant></link></para></listitem> | |
| 1553 | − <listitem><para><link linkend="DTV-ATSCMH-RS-CODE-MODE-SEC"><constant>DTV_ATSCMH_RS_CODE_MODE_SEC</constant></link></para></listitem> | |
| 1554 | − <listitem><para><link linkend="DTV-ATSCMH-SCCC-BLOCK-MODE"><constant>DTV_ATSCMH_SCCC_BLOCK_MODE</constant></link></para></listitem> | |
| 1555 | − <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-A"><constant>DTV_ATSCMH_SCCC_CODE_MODE_A</constant></link></para></listitem> | |
| 1556 | − <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-B"><constant>DTV_ATSCMH_SCCC_CODE_MODE_B</constant></link></para></listitem> | |
| 1557 | − <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-C"><constant>DTV_ATSCMH_SCCC_CODE_MODE_C</constant></link></para></listitem> | |
| 1558 | − <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-D"><constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant></link></para></listitem> | |
| 1559 | − </itemizedlist> | |
| 1560 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1561 | − </section> | |
| 1562 | − <section id="dtmb-params"> | |
| 1563 | − <title>DTMB delivery system</title> | |
| 1564 | − <para>The following parameters are valid for DTMB:</para> | |
| 1565 | − <itemizedlist mark='opencircle'> | |
| 1566 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1567 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1568 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1569 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1570 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1571 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1572 | − <listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem> | |
| 1573 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1574 | − <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> | |
| 1575 | − <listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem> | |
| 1576 | − <listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem> | |
| 1577 | − <listitem><para><link linkend="DTV-INTERLEAVING"><constant>DTV_INTERLEAVING</constant></link></para></listitem> | |
| 1578 | − <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> | |
| 1579 | − </itemizedlist> | |
| 1580 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1581 | − </section> | |
| 1582 | − </section> | |
| 1583 | − <section id="frontend-property-cable-systems"> | |
| 1584 | − <title>Properties used on cable delivery systems</title> | |
| 1585 | − <section id="dvbc-params"> | |
| 1586 | − <title>DVB-C delivery system</title> | |
| 1587 | − <para>The DVB-C Annex-A is the widely used cable standard. Transmission uses QAM modulation.</para> | |
| 1588 | − <para>The DVB-C Annex-C is optimized for 6MHz, and is used in Japan. It supports a subset of the Annex A modulation types, and a roll-off of 0.13, instead of 0.15</para> | |
| 1589 | − <para>The following parameters are valid for DVB-C Annex A/C:</para> | |
| 1590 | − <itemizedlist mark='opencircle'> | |
| 1591 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1592 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1593 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1594 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1595 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1596 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1597 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1598 | − <listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem> | |
| 1599 | − <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> | |
| 1600 | − <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> | |
| 1601 | − </itemizedlist> | |
| 1602 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1603 | − </section> | |
| 1604 | − <section id="dvbc-annex-b-params"> | |
| 1605 | − <title>DVB-C Annex B delivery system</title> | |
| 1606 | − <para>The DVB-C Annex-B is only used on a few Countries like the United States.</para> | |
| 1607 | − <para>The following parameters are valid for DVB-C Annex B:</para> | |
| 1608 | − <itemizedlist mark='opencircle'> | |
| 1609 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1610 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1611 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1612 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1613 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1614 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1615 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1616 | − <listitem><para><link linkend="DTV-LNA"><constant>DTV_LNA</constant></link></para></listitem> | |
| 1617 | − </itemizedlist> | |
| 1618 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1619 | − </section> | |
| 1620 | − </section> | |
| 1621 | − <section id="frontend-property-satellite-systems"> | |
| 1622 | − <title>Properties used on satellite delivery systems</title> | |
| 1623 | − <section id="dvbs-params"> | |
| 1624 | − <title>DVB-S delivery system</title> | |
| 1625 | − <para>The following parameters are valid for DVB-S:</para> | |
| 1626 | − <itemizedlist mark='opencircle'> | |
| 1627 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1628 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1629 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1630 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1631 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1632 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1633 | − <listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem> | |
| 1634 | − <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> | |
| 1635 | − <listitem><para><link linkend="DTV-VOLTAGE"><constant>DTV_VOLTAGE</constant></link></para></listitem> | |
| 1636 | − <listitem><para><link linkend="DTV-TONE"><constant>DTV_TONE</constant></link></para></listitem> | |
| 1637 | − </itemizedlist> | |
| 1638 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1639 | − <para>Future implementations might add those two missing parameters:</para> | |
| 1640 | − <itemizedlist mark='opencircle'> | |
| 1641 | − <listitem><para><link linkend="DTV-DISEQC-MASTER"><constant>DTV_DISEQC_MASTER</constant></link></para></listitem> | |
| 1642 | − <listitem><para><link linkend="DTV-DISEQC-SLAVE-REPLY"><constant>DTV_DISEQC_SLAVE_REPLY</constant></link></para></listitem> | |
| 1643 | − </itemizedlist> | |
| 1644 | − </section> | |
| 1645 | − <section id="dvbs2-params"> | |
| 1646 | − <title>DVB-S2 delivery system</title> | |
| 1647 | − <para>In addition to all parameters valid for DVB-S, DVB-S2 supports the following parameters:</para> | |
| 1648 | − <itemizedlist mark='opencircle'> | |
| 1649 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1650 | − <listitem><para><link linkend="DTV-PILOT"><constant>DTV_PILOT</constant></link></para></listitem> | |
| 1651 | − <listitem><para><link linkend="DTV-ROLLOFF"><constant>DTV_ROLLOFF</constant></link></para></listitem> | |
| 1652 | − <listitem><para><link linkend="DTV-STREAM-ID"><constant>DTV_STREAM_ID</constant></link></para></listitem> | |
| 1653 | − </itemizedlist> | |
| 1654 | − <para>In addition, the <link linkend="frontend-stat-properties">DTV QoS statistics</link> are also valid.</para> | |
| 1655 | − </section> | |
| 1656 | − <section id="turbo-params"> | |
| 1657 | − <title>Turbo code delivery system</title> | |
| 1658 | − <para>In addition to all parameters valid for DVB-S, turbo code supports the following parameters:</para> | |
| 1659 | − <itemizedlist mark='opencircle'> | |
| 1660 | − <listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem> | |
| 1661 | − </itemizedlist> | |
| 1662 | − </section> | |
| 1663 | − <section id="isdbs-params"> | |
| 1664 | − <title>ISDB-S delivery system</title> | |
| 1665 | − <para>The following parameters are valid for ISDB-S:</para> | |
| 1666 | − <itemizedlist mark='opencircle'> | |
| 1667 | − <listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem> | |
| 1668 | − <listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem> | |
| 1669 | − <listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem> | |
| 1670 | − <listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem> | |
| 1671 | − <listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem> | |
| 1672 | − <listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem> | |
| 1673 | − <listitem><para><link linkend="DTV-SYMBOL-RATE"><constant>DTV_SYMBOL_RATE</constant></link></para></listitem> | |
| 1674 | − <listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem> | |
| 1675 | − <listitem><para><link linkend="DTV-VOLTAGE"><constant>DTV_VOLTAGE</constant></link></para></listitem> | |
| 1676 | − <listitem><para><link linkend="DTV-STREAM-ID"><constant>DTV_STREAM_ID</constant></link></para></listitem> | |
| 1677 | − </itemizedlist> | |
| 1678 | − </section> | |
| 1679 | − </section> | |
| 1680 | −</section> | |
Binary file not shown.
| @@ -1,367 +0,0 @@ | ||
| 1 | −<title>Examples</title> | |
| 2 | −<para>In this section we would like to present some examples for using the DVB API. | |
| 3 | −</para> | |
| 4 | −<para>NOTE: This section is out of date, and the code below won't even | |
| 5 | − compile. Please refer to the | |
| 6 | − <ulink url="https://linuxtv.org/docs/libdvbv5/index.html">libdvbv5</ulink> | |
| 7 | − for updated/recommended examples. | |
| 8 | −</para> | |
| 9 | − | |
| 10 | −<section id="tuning"> | |
| 11 | −<title>Tuning</title> | |
| 12 | −<para>We will start with a generic tuning subroutine that uses the frontend and SEC, as well as | |
| 13 | −the demux devices. The example is given for QPSK tuners, but can easily be adjusted for | |
| 14 | −QAM. | |
| 15 | −</para> | |
| 16 | −<programlisting> | |
| 17 | − #include <sys/ioctl.h> | |
| 18 | − #include <stdio.h> | |
| 19 | − #include <stdint.h> | |
| 20 | − #include <sys/types.h> | |
| 21 | − #include <sys/stat.h> | |
| 22 | − #include <fcntl.h> | |
| 23 | − #include <time.h> | |
| 24 | − #include <unistd.h> | |
| 25 | − | |
| 26 | − #include <linux/dvb/dmx.h> | |
| 27 | − #include <linux/dvb/frontend.h> | |
| 28 | − #include <linux/dvb/sec.h> | |
| 29 | − #include <sys/poll.h> | |
| 30 | − | |
| 31 | − #define DMX "/dev/dvb/adapter0/demux1" | |
| 32 | − #define FRONT "/dev/dvb/adapter0/frontend1" | |
| 33 | − #define SEC "/dev/dvb/adapter0/sec1" | |
| 34 | − | |
| 35 | − /⋆ routine for checking if we have a signal and other status information⋆/ | |
| 36 | − int FEReadStatus(int fd, fe_status_t ⋆stat) | |
| 37 | − { | |
| 38 | − int ans; | |
| 39 | − | |
| 40 | − if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){ | |
| 41 | − perror("FE READ STATUS: "); | |
| 42 | − return -1; | |
| 43 | − } | |
| 44 | − | |
| 45 | − if (⋆stat & FE_HAS_POWER) | |
| 46 | − printf("FE HAS POWER\n"); | |
| 47 | − | |
| 48 | − if (⋆stat & FE_HAS_SIGNAL) | |
| 49 | − printf("FE HAS SIGNAL\n"); | |
| 50 | − | |
| 51 | − if (⋆stat & FE_SPECTRUM_INV) | |
| 52 | − printf("SPEKTRUM INV\n"); | |
| 53 | − | |
| 54 | − return 0; | |
| 55 | − } | |
| 56 | − | |
| 57 | − | |
| 58 | − /⋆ tune qpsk ⋆/ | |
| 59 | − /⋆ freq: frequency of transponder ⋆/ | |
| 60 | − /⋆ vpid, apid, tpid: PIDs of video, audio and teletext TS packets ⋆/ | |
| 61 | − /⋆ diseqc: DiSEqC address of the used LNB ⋆/ | |
| 62 | − /⋆ pol: Polarisation ⋆/ | |
| 63 | − /⋆ srate: Symbol Rate ⋆/ | |
| 64 | − /⋆ fec. FEC ⋆/ | |
| 65 | − /⋆ lnb_lof1: local frequency of lower LNB band ⋆/ | |
| 66 | − /⋆ lnb_lof2: local frequency of upper LNB band ⋆/ | |
| 67 | − /⋆ lnb_slof: switch frequency of LNB ⋆/ | |
| 68 | − | |
| 69 | − int set_qpsk_channel(int freq, int vpid, int apid, int tpid, | |
| 70 | − int diseqc, int pol, int srate, int fec, int lnb_lof1, | |
| 71 | − int lnb_lof2, int lnb_slof) | |
| 72 | − { | |
| 73 | − struct secCommand scmd; | |
| 74 | − struct secCmdSequence scmds; | |
| 75 | − struct dmx_pes_filter_params pesFilterParams; | |
| 76 | − FrontendParameters frp; | |
| 77 | − struct pollfd pfd[1]; | |
| 78 | − FrontendEvent event; | |
| 79 | − int demux1, demux2, demux3, front; | |
| 80 | − | |
| 81 | − frequency = (uint32_t) freq; | |
| 82 | − symbolrate = (uint32_t) srate; | |
| 83 | − | |
| 84 | − if((front = open(FRONT,O_RDWR)) < 0){ | |
| 85 | − perror("FRONTEND DEVICE: "); | |
| 86 | − return -1; | |
| 87 | − } | |
| 88 | − | |
| 89 | − if((sec = open(SEC,O_RDWR)) < 0){ | |
| 90 | − perror("SEC DEVICE: "); | |
| 91 | − return -1; | |
| 92 | − } | |
| 93 | − | |
| 94 | − if (demux1 < 0){ | |
| 95 | − if ((demux1=open(DMX, O_RDWR|O_NONBLOCK)) | |
| 96 | − < 0){ | |
| 97 | − perror("DEMUX DEVICE: "); | |
| 98 | − return -1; | |
| 99 | − } | |
| 100 | − } | |
| 101 | − | |
| 102 | − if (demux2 < 0){ | |
| 103 | − if ((demux2=open(DMX, O_RDWR|O_NONBLOCK)) | |
| 104 | − < 0){ | |
| 105 | − perror("DEMUX DEVICE: "); | |
| 106 | − return -1; | |
| 107 | − } | |
| 108 | − } | |
| 109 | − | |
| 110 | − if (demux3 < 0){ | |
| 111 | − if ((demux3=open(DMX, O_RDWR|O_NONBLOCK)) | |
| 112 | − < 0){ | |
| 113 | − perror("DEMUX DEVICE: "); | |
| 114 | − return -1; | |
| 115 | − } | |
| 116 | − } | |
| 117 | − | |
| 118 | − if (freq < lnb_slof) { | |
| 119 | − frp.Frequency = (freq - lnb_lof1); | |
| 120 | − scmds.continuousTone = SEC_TONE_OFF; | |
| 121 | − } else { | |
| 122 | − frp.Frequency = (freq - lnb_lof2); | |
| 123 | − scmds.continuousTone = SEC_TONE_ON; | |
| 124 | − } | |
| 125 | − frp.Inversion = INVERSION_AUTO; | |
| 126 | − if (pol) scmds.voltage = SEC_VOLTAGE_18; | |
| 127 | − else scmds.voltage = SEC_VOLTAGE_13; | |
| 128 | − | |
| 129 | − scmd.type=0; | |
| 130 | − scmd.u.diseqc.addr=0x10; | |
| 131 | − scmd.u.diseqc.cmd=0x38; | |
| 132 | − scmd.u.diseqc.numParams=1; | |
| 133 | − scmd.u.diseqc.params[0] = 0xF0 | ((diseqc ⋆ 4) & 0x0F) | | |
| 134 | − (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) | | |
| 135 | − (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0); | |
| 136 | − | |
| 137 | − scmds.miniCommand=SEC_MINI_NONE; | |
| 138 | − scmds.numCommands=1; | |
| 139 | − scmds.commands=&scmd; | |
| 140 | − if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){ | |
| 141 | − perror("SEC SEND: "); | |
| 142 | − return -1; | |
| 143 | − } | |
| 144 | − | |
| 145 | − if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){ | |
| 146 | − perror("SEC SEND: "); | |
| 147 | − return -1; | |
| 148 | − } | |
| 149 | − | |
| 150 | − frp.u.qpsk.SymbolRate = srate; | |
| 151 | − frp.u.qpsk.FEC_inner = fec; | |
| 152 | − | |
| 153 | − if (ioctl(front, FE_SET_FRONTEND, &frp) < 0){ | |
| 154 | − perror("QPSK TUNE: "); | |
| 155 | − return -1; | |
| 156 | − } | |
| 157 | − | |
| 158 | − pfd[0].fd = front; | |
| 159 | − pfd[0].events = POLLIN; | |
| 160 | − | |
| 161 | − if (poll(pfd,1,3000)){ | |
| 162 | − if (pfd[0].revents & POLLIN){ | |
| 163 | − printf("Getting QPSK event\n"); | |
| 164 | − if ( ioctl(front, FE_GET_EVENT, &event) | |
| 165 | − | |
| 166 | − == -EOVERFLOW){ | |
| 167 | − perror("qpsk get event"); | |
| 168 | − return -1; | |
| 169 | − } | |
| 170 | − printf("Received "); | |
| 171 | − switch(event.type){ | |
| 172 | − case FE_UNEXPECTED_EV: | |
| 173 | − printf("unexpected event\n"); | |
| 174 | − return -1; | |
| 175 | − case FE_FAILURE_EV: | |
| 176 | − printf("failure event\n"); | |
| 177 | − return -1; | |
| 178 | − | |
| 179 | − case FE_COMPLETION_EV: | |
| 180 | − printf("completion event\n"); | |
| 181 | − } | |
| 182 | − } | |
| 183 | − } | |
| 184 | − | |
| 185 | − | |
| 186 | − pesFilterParams.pid = vpid; | |
| 187 | − pesFilterParams.input = DMX_IN_FRONTEND; | |
| 188 | − pesFilterParams.output = DMX_OUT_DECODER; | |
| 189 | − pesFilterParams.pes_type = DMX_PES_VIDEO; | |
| 190 | − pesFilterParams.flags = DMX_IMMEDIATE_START; | |
| 191 | − if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ | |
| 192 | − perror("set_vpid"); | |
| 193 | − return -1; | |
| 194 | − } | |
| 195 | − | |
| 196 | − pesFilterParams.pid = apid; | |
| 197 | − pesFilterParams.input = DMX_IN_FRONTEND; | |
| 198 | − pesFilterParams.output = DMX_OUT_DECODER; | |
| 199 | − pesFilterParams.pes_type = DMX_PES_AUDIO; | |
| 200 | − pesFilterParams.flags = DMX_IMMEDIATE_START; | |
| 201 | − if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ | |
| 202 | − perror("set_apid"); | |
| 203 | − return -1; | |
| 204 | − } | |
| 205 | − | |
| 206 | − pesFilterParams.pid = tpid; | |
| 207 | − pesFilterParams.input = DMX_IN_FRONTEND; | |
| 208 | − pesFilterParams.output = DMX_OUT_DECODER; | |
| 209 | − pesFilterParams.pes_type = DMX_PES_TELETEXT; | |
| 210 | − pesFilterParams.flags = DMX_IMMEDIATE_START; | |
| 211 | − if (ioctl(demux3, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ | |
| 212 | − perror("set_tpid"); | |
| 213 | − return -1; | |
| 214 | − } | |
| 215 | − | |
| 216 | − return has_signal(fds); | |
| 217 | − } | |
| 218 | − | |
| 219 | −</programlisting> | |
| 220 | −<para>The program assumes that you are using a universal LNB and a standard DiSEqC | |
| 221 | −switch with up to 4 addresses. Of course, you could build in some more checking if | |
| 222 | −tuning was successful and maybe try to repeat the tuning process. Depending on the | |
| 223 | −external hardware, i.e. LNB and DiSEqC switch, and weather conditions this may be | |
| 224 | −necessary. | |
| 225 | −</para> | |
| 226 | −</section> | |
| 227 | − | |
| 228 | −<section id="the_dvr_device"> | |
| 229 | −<title>The DVR device</title> | |
| 230 | −<para>The following program code shows how to use the DVR device for recording. | |
| 231 | −</para> | |
| 232 | −<programlisting> | |
| 233 | − #include <sys/ioctl.h> | |
| 234 | − #include <stdio.h> | |
| 235 | − #include <stdint.h> | |
| 236 | − #include <sys/types.h> | |
| 237 | − #include <sys/stat.h> | |
| 238 | − #include <fcntl.h> | |
| 239 | − #include <time.h> | |
| 240 | − #include <unistd.h> | |
| 241 | − | |
| 242 | − #include <linux/dvb/dmx.h> | |
| 243 | − #include <linux/dvb/video.h> | |
| 244 | − #include <sys/poll.h> | |
| 245 | − #define DVR "/dev/dvb/adapter0/dvr1" | |
| 246 | − #define AUDIO "/dev/dvb/adapter0/audio1" | |
| 247 | − #define VIDEO "/dev/dvb/adapter0/video1" | |
| 248 | − | |
| 249 | − #define BUFFY (188⋆20) | |
| 250 | − #define MAX_LENGTH (1024⋆1024⋆5) /⋆ record 5MB ⋆/ | |
| 251 | − | |
| 252 | − | |
| 253 | − /⋆ switch the demuxes to recording, assuming the transponder is tuned ⋆/ | |
| 254 | − | |
| 255 | − /⋆ demux1, demux2: file descriptor of video and audio filters ⋆/ | |
| 256 | − /⋆ vpid, apid: PIDs of video and audio channels ⋆/ | |
| 257 | − | |
| 258 | − int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid) | |
| 259 | − { | |
| 260 | − struct dmx_pes_filter_params pesFilterParams; | |
| 261 | − | |
| 262 | − if (demux1 < 0){ | |
| 263 | − if ((demux1=open(DMX, O_RDWR|O_NONBLOCK)) | |
| 264 | − < 0){ | |
| 265 | − perror("DEMUX DEVICE: "); | |
| 266 | − return -1; | |
| 267 | − } | |
| 268 | − } | |
| 269 | − | |
| 270 | − if (demux2 < 0){ | |
| 271 | − if ((demux2=open(DMX, O_RDWR|O_NONBLOCK)) | |
| 272 | − < 0){ | |
| 273 | − perror("DEMUX DEVICE: "); | |
| 274 | − return -1; | |
| 275 | − } | |
| 276 | − } | |
| 277 | − | |
| 278 | − pesFilterParams.pid = vpid; | |
| 279 | − pesFilterParams.input = DMX_IN_FRONTEND; | |
| 280 | − pesFilterParams.output = DMX_OUT_TS_TAP; | |
| 281 | − pesFilterParams.pes_type = DMX_PES_VIDEO; | |
| 282 | − pesFilterParams.flags = DMX_IMMEDIATE_START; | |
| 283 | − if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ | |
| 284 | − perror("DEMUX DEVICE"); | |
| 285 | − return -1; | |
| 286 | − } | |
| 287 | − pesFilterParams.pid = apid; | |
| 288 | − pesFilterParams.input = DMX_IN_FRONTEND; | |
| 289 | − pesFilterParams.output = DMX_OUT_TS_TAP; | |
| 290 | − pesFilterParams.pes_type = DMX_PES_AUDIO; | |
| 291 | − pesFilterParams.flags = DMX_IMMEDIATE_START; | |
| 292 | − if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){ | |
| 293 | − perror("DEMUX DEVICE"); | |
| 294 | − return -1; | |
| 295 | − } | |
| 296 | − return 0; | |
| 297 | − } | |
| 298 | − | |
| 299 | − /⋆ start recording MAX_LENGTH , assuming the transponder is tuned ⋆/ | |
| 300 | − | |
| 301 | − /⋆ demux1, demux2: file descriptor of video and audio filters ⋆/ | |
| 302 | − /⋆ vpid, apid: PIDs of video and audio channels ⋆/ | |
| 303 | − int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid) | |
| 304 | − { | |
| 305 | − int i; | |
| 306 | − int len; | |
| 307 | − int written; | |
| 308 | − uint8_t buf[BUFFY]; | |
| 309 | − uint64_t length; | |
| 310 | − struct pollfd pfd[1]; | |
| 311 | − int dvr, dvr_out; | |
| 312 | − | |
| 313 | − /⋆ open dvr device ⋆/ | |
| 314 | − if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) < 0){ | |
| 315 | − perror("DVR DEVICE"); | |
| 316 | − return -1; | |
| 317 | − } | |
| 318 | − | |
| 319 | − /⋆ switch video and audio demuxes to dvr ⋆/ | |
| 320 | − printf ("Switching dvr on\n"); | |
| 321 | − i = switch_to_record(demux1, demux2, vpid, apid); | |
| 322 | − printf("finished: "); | |
| 323 | − | |
| 324 | − printf("Recording %2.0f MB of test file in TS format\n", | |
| 325 | − MAX_LENGTH/(1024.0⋆1024.0)); | |
| 326 | − length = 0; | |
| 327 | − | |
| 328 | − /⋆ open output file ⋆/ | |
| 329 | − if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT | |
| 330 | − |O_TRUNC, S_IRUSR|S_IWUSR | |
| 331 | − |S_IRGRP|S_IWGRP|S_IROTH| | |
| 332 | − S_IWOTH)) < 0){ | |
| 333 | − perror("Can't open file for dvr test"); | |
| 334 | − return -1; | |
| 335 | − } | |
| 336 | − | |
| 337 | − pfd[0].fd = dvr; | |
| 338 | − pfd[0].events = POLLIN; | |
| 339 | − | |
| 340 | − /⋆ poll for dvr data and write to file ⋆/ | |
| 341 | − while (length < MAX_LENGTH ) { | |
| 342 | − if (poll(pfd,1,1)){ | |
| 343 | − if (pfd[0].revents & POLLIN){ | |
| 344 | − len = read(dvr, buf, BUFFY); | |
| 345 | − if (len < 0){ | |
| 346 | − perror("recording"); | |
| 347 | − return -1; | |
| 348 | − } | |
| 349 | − if (len > 0){ | |
| 350 | − written = 0; | |
| 351 | − while (written < len) | |
| 352 | − written += | |
| 353 | − write (dvr_out, | |
| 354 | − buf, len); | |
| 355 | − length += len; | |
| 356 | − printf("written %2.0f MB\r", | |
| 357 | − length/1024./1024.); | |
| 358 | − } | |
| 359 | − } | |
| 360 | − } | |
| 361 | − } | |
| 362 | − return 0; | |
| 363 | − } | |
| 364 | − | |
| 365 | −</programlisting> | |
| 366 | − | |
| 367 | −</section> | |
| @@ -1,78 +0,0 @@ | ||
| 1 | −<refentry id="FE_DISEQC_RECV_SLAVE_REPLY"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_DISEQC_RECV_SLAVE_REPLY</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_DISEQC_RECV_SLAVE_REPLY</refname> | |
| 9 | − <refpurpose>Receives reply from a DiSEqC 2.0 command</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>struct dvb_diseqc_slave_reply *<parameter>argp</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fe_fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − <varlistentry> | |
| 33 | − <term><parameter>request</parameter></term> | |
| 34 | − <listitem> | |
| 35 | − <para>FE_DISEQC_RECV_SLAVE_REPLY</para> | |
| 36 | − </listitem> | |
| 37 | − </varlistentry> | |
| 38 | − <varlistentry> | |
| 39 | − <term><parameter>argp</parameter></term> | |
| 40 | − <listitem> | |
| 41 | − <para>pointer to &dvb-diseqc-slave-reply;</para> | |
| 42 | − </listitem> | |
| 43 | − </varlistentry> | |
| 44 | − </variablelist> | |
| 45 | − </refsect1> | |
| 46 | − | |
| 47 | − <refsect1> | |
| 48 | − <title>Description</title> | |
| 49 | − | |
| 50 | − <para>Receives reply from a DiSEqC 2.0 command.</para> | |
| 51 | −&return-value-dvb; | |
| 52 | − | |
| 53 | −<table pgwide="1" frame="none" id="dvb-diseqc-slave-reply"> | |
| 54 | − <title>struct <structname>dvb_diseqc_slave_reply</structname></title> | |
| 55 | − <tgroup cols="3"> | |
| 56 | − &cs-str; | |
| 57 | − <tbody valign="top"> | |
| 58 | − <row> | |
| 59 | − <entry>uint8_t</entry> | |
| 60 | − <entry>msg[4]</entry> | |
| 61 | − <entry>DiSEqC message (framing, data[3])</entry> | |
| 62 | − </row><row> | |
| 63 | − <entry>uint8_t</entry> | |
| 64 | − <entry>msg_len</entry> | |
| 65 | − <entry>Length of the DiSEqC message. Valid values are 0 to 4, | |
| 66 | − where 0 means no msg</entry> | |
| 67 | − </row><row> | |
| 68 | − <entry>int</entry> | |
| 69 | − <entry>timeout</entry> | |
| 70 | − <entry>Return from ioctl after timeout ms with errorcode when no | |
| 71 | − message was received</entry> | |
| 72 | − </row> | |
| 73 | − </tbody> | |
| 74 | − </tgroup> | |
| 75 | −</table> | |
| 76 | − | |
| 77 | −</refsect1> | |
| 78 | −</refentry> | |
| @@ -1,51 +0,0 @@ | ||
| 1 | −<refentry id="FE_DISEQC_RESET_OVERLOAD"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_DISEQC_RESET_OVERLOAD</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_DISEQC_RESET_OVERLOAD</refname> | |
| 9 | − <refpurpose>Restores the power to the antenna subsystem, if it was powered | |
| 10 | − off due to power overload.</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>NULL</paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>fd</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>&fe_fd;</para> | |
| 31 | − </listitem> | |
| 32 | − </varlistentry> | |
| 33 | − <varlistentry> | |
| 34 | − <term><parameter>request</parameter></term> | |
| 35 | − <listitem> | |
| 36 | − <para>FE_DISEQC_RESET_OVERLOAD</para> | |
| 37 | − </listitem> | |
| 38 | − </varlistentry> | |
| 39 | − </variablelist> | |
| 40 | − </refsect1> | |
| 41 | − | |
| 42 | − <refsect1> | |
| 43 | − <title>Description</title> | |
| 44 | − | |
| 45 | − <para>If the bus has been automatically powered off due to power overload, this ioctl | |
| 46 | − call restores the power to the bus. The call requires read/write access to the | |
| 47 | − device. This call has no effect if the device is manually powered off. Not all | |
| 48 | − DVB adapters support this ioctl.</para> | |
| 49 | −&return-value-dvb; | |
| 50 | −</refsect1> | |
| 51 | −</refentry> | |
| @@ -1,89 +0,0 @@ | ||
| 1 | −<refentry id="FE_DISEQC_SEND_BURST"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_DISEQC_SEND_BURST</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_DISEQC_SEND_BURST</refname> | |
| 9 | − <refpurpose>Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection.</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>enum fe_sec_mini_cmd *<parameter>tone</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fe_fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − <varlistentry> | |
| 33 | − <term><parameter>request</parameter></term> | |
| 34 | − <listitem> | |
| 35 | − <para>FE_DISEQC_SEND_BURST</para> | |
| 36 | − </listitem> | |
| 37 | − </varlistentry> | |
| 38 | − <varlistentry> | |
| 39 | − <term><parameter>tone</parameter></term> | |
| 40 | − <listitem> | |
| 41 | − <para>pointer to &fe-sec-mini-cmd;</para> | |
| 42 | − </listitem> | |
| 43 | − </varlistentry> | |
| 44 | − </variablelist> | |
| 45 | − </refsect1> | |
| 46 | − | |
| 47 | − <refsect1> | |
| 48 | − <title>Description</title> | |
| 49 | − | |
| 50 | −<para>This ioctl is used to set the generation of a 22kHz tone burst for mini | |
| 51 | − DiSEqC satellite | |
| 52 | − selection for 2x1 switches. | |
| 53 | − This call requires read/write permissions.</para> | |
| 54 | −<para>It provides support for what's specified at | |
| 55 | − <ulink url="http://www.eutelsat.com/files/contributed/satellites/pdf/Diseqc/associated%20docs/simple_tone_burst_detec.pdf">Digital Satellite Equipment Control | |
| 56 | − (DiSEqC) - Simple "ToneBurst" Detection Circuit specification.</ulink> | |
| 57 | − </para> | |
| 58 | −&return-value-dvb; | |
| 59 | −</refsect1> | |
| 60 | − | |
| 61 | −<refsect1 id="fe-sec-mini-cmd-t"> | |
| 62 | −<title>enum fe_sec_mini_cmd</title> | |
| 63 | − | |
| 64 | −<table pgwide="1" frame="none" id="fe-sec-mini-cmd"> | |
| 65 | − <title>enum fe_sec_mini_cmd</title> | |
| 66 | − <tgroup cols="2"> | |
| 67 | − &cs-def; | |
| 68 | − <thead> | |
| 69 | − <row> | |
| 70 | − <entry>ID</entry> | |
| 71 | − <entry>Description</entry> | |
| 72 | − </row> | |
| 73 | − </thead> | |
| 74 | − <tbody valign="top"> | |
| 75 | − <row> | |
| 76 | − <entry align="char" id="SEC-MINI-A"><constant>SEC_MINI_A</constant></entry> | |
| 77 | − <entry align="char">Sends a mini-DiSEqC 22kHz '0' Tone Burst to | |
| 78 | − select satellite-A</entry> | |
| 79 | − </row><row> | |
| 80 | − <entry align="char" id="SEC-MINI-B"><constant>SEC_MINI_B</constant></entry> | |
| 81 | − <entry align="char">Sends a mini-DiSEqC 22kHz '1' Data Burst to | |
| 82 | − select satellite-B</entry> | |
| 83 | − </row> | |
| 84 | − </tbody> | |
| 85 | − </tgroup> | |
| 86 | −</table> | |
| 87 | −</refsect1> | |
| 88 | − | |
| 89 | −</refentry> | |
| @@ -1,72 +0,0 @@ | ||
| 1 | −<refentry id="FE_DISEQC_SEND_MASTER_CMD"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_DISEQC_SEND_MASTER_CMD</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_DISEQC_SEND_MASTER_CMD</refname> | |
| 9 | − <refpurpose>Sends a DiSEqC command</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>struct dvb_diseqc_master_cmd *<parameter>argp</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fe_fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − <varlistentry> | |
| 33 | − <term><parameter>request</parameter></term> | |
| 34 | − <listitem> | |
| 35 | − <para>FE_DISEQC_SEND_MASTER_CMD</para> | |
| 36 | − </listitem> | |
| 37 | − </varlistentry> | |
| 38 | − <varlistentry> | |
| 39 | − <term><parameter>argp</parameter></term> | |
| 40 | − <listitem> | |
| 41 | − <para>pointer to &dvb-diseqc-master-cmd;</para> | |
| 42 | − </listitem> | |
| 43 | − </varlistentry> | |
| 44 | − </variablelist> | |
| 45 | − </refsect1> | |
| 46 | − | |
| 47 | − <refsect1> | |
| 48 | − <title>Description</title> | |
| 49 | − | |
| 50 | − <para>Sends a DiSEqC command to the antenna subsystem.</para> | |
| 51 | −&return-value-dvb; | |
| 52 | − | |
| 53 | −<table pgwide="1" frame="none" id="dvb-diseqc-master-cmd"> | |
| 54 | − <title>struct <structname>dvb_diseqc_master_cmd</structname></title> | |
| 55 | − <tgroup cols="3"> | |
| 56 | − &cs-str; | |
| 57 | − <tbody valign="top"> | |
| 58 | − <row> | |
| 59 | − <entry>uint8_t</entry> | |
| 60 | − <entry>msg[6]</entry> | |
| 61 | − <entry>DiSEqC message (framing, address, command, data[3])</entry> | |
| 62 | − </row><row> | |
| 63 | − <entry>uint8_t</entry> | |
| 64 | − <entry>msg_len</entry> | |
| 65 | − <entry>Length of the DiSEqC message. Valid values are 3 to 6</entry> | |
| 66 | − </row> | |
| 67 | − </tbody> | |
| 68 | − </tgroup> | |
| 69 | −</table> | |
| 70 | − | |
| 71 | −</refsect1> | |
| 72 | −</refentry> | |
| @@ -1,61 +0,0 @@ | ||
| 1 | −<refentry id="FE_ENABLE_HIGH_LNB_VOLTAGE"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_ENABLE_HIGH_LNB_VOLTAGE</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_ENABLE_HIGH_LNB_VOLTAGE</refname> | |
| 9 | − <refpurpose>Select output DC level between normal LNBf voltages or higher | |
| 10 | − LNBf voltages.</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>unsigned int <parameter>high</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>fd</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>&fe_fd;</para> | |
| 31 | − </listitem> | |
| 32 | − </varlistentry> | |
| 33 | − <varlistentry> | |
| 34 | − <term><parameter>request</parameter></term> | |
| 35 | − <listitem> | |
| 36 | − <para>FE_ENABLE_HIGH_LNB_VOLTAGE</para> | |
| 37 | − </listitem> | |
| 38 | − </varlistentry> | |
| 39 | − <varlistentry> | |
| 40 | − <term><parameter>high</parameter></term> | |
| 41 | − <listitem> | |
| 42 | − <para>Valid flags:</para> | |
| 43 | − <itemizedlist> | |
| 44 | − <listitem><para>0 - normal 13V and 18V.</para></listitem> | |
| 45 | − <listitem><para>>0 - enables slightly higher voltages instead of | |
| 46 | − 13/18V, in order to compensate for long antenna cables.</para></listitem> | |
| 47 | − </itemizedlist> | |
| 48 | − </listitem> | |
| 49 | − </varlistentry> | |
| 50 | − </variablelist> | |
| 51 | − </refsect1> | |
| 52 | − | |
| 53 | − <refsect1> | |
| 54 | − <title>Description</title> | |
| 55 | − | |
| 56 | − <para>Select output DC level between normal LNBf voltages or higher | |
| 57 | − LNBf voltages between 0 (normal) or a value grater than 0 for higher | |
| 58 | − voltages.</para> | |
| 59 | −&return-value-dvb; | |
| 60 | −</refsect1> | |
| 61 | −</refentry> | |
| @@ -1,266 +0,0 @@ | ||
| 1 | −<refentry id="FE_GET_INFO"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_GET_INFO</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_GET_INFO</refname> | |
| 9 | − <refpurpose>Query DVB frontend capabilities and returns information about | |
| 10 | − the front-end. This call only requires read-only access to the device</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>struct dvb_frontend_info *<parameter>argp</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>fd</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>&fe_fd;</para> | |
| 31 | − </listitem> | |
| 32 | − </varlistentry> | |
| 33 | − <varlistentry> | |
| 34 | − <term><parameter>request</parameter></term> | |
| 35 | − <listitem> | |
| 36 | − <para>FE_GET_INFO</para> | |
| 37 | − </listitem> | |
| 38 | − </varlistentry> | |
| 39 | − <varlistentry> | |
| 40 | − <term><parameter>argp</parameter></term> | |
| 41 | − <listitem> | |
| 42 | − <para>pointer to struct &dvb-frontend-info;</para> | |
| 43 | − </listitem> | |
| 44 | − </varlistentry> | |
| 45 | − </variablelist> | |
| 46 | − </refsect1> | |
| 47 | − | |
| 48 | − <refsect1> | |
| 49 | − <title>Description</title> | |
| 50 | − | |
| 51 | − <para>All DVB frontend devices support the | |
| 52 | −<constant>FE_GET_INFO</constant> ioctl. It is used to identify | |
| 53 | −kernel devices compatible with this specification and to obtain | |
| 54 | −information about driver and hardware capabilities. The ioctl takes a | |
| 55 | −pointer to dvb_frontend_info which is filled by the driver. When the | |
| 56 | −driver is not compatible with this specification the ioctl returns an error. | |
| 57 | −</para> | |
| 58 | −&return-value-dvb; | |
| 59 | − | |
| 60 | − <table pgwide="1" frame="none" id="dvb-frontend-info"> | |
| 61 | − <title>struct <structname>dvb_frontend_info</structname></title> | |
| 62 | − <tgroup cols="3"> | |
| 63 | − &cs-str; | |
| 64 | − <tbody valign="top"> | |
| 65 | − <row> | |
| 66 | − <entry>char</entry> | |
| 67 | − <entry>name[128]</entry> | |
| 68 | − <entry>Name of the frontend</entry> | |
| 69 | − </row><row> | |
| 70 | − <entry>fe_type_t</entry> | |
| 71 | − <entry>type</entry> | |
| 72 | − <entry><emphasis role="bold">DEPRECATED</emphasis>. DVBv3 type. Should not be used on modern programs, as a | |
| 73 | − frontend may have more than one type. So, the DVBv5 API should | |
| 74 | − be used instead to enumerate and select the frontend type.</entry> | |
| 75 | − </row><row> | |
| 76 | − <entry>uint32_t</entry> | |
| 77 | − <entry>frequency_min</entry> | |
| 78 | − <entry>Minimal frequency supported by the frontend</entry> | |
| 79 | − </row><row> | |
| 80 | − <entry>uint32_t</entry> | |
| 81 | − <entry>frequency_max</entry> | |
| 82 | − <entry>Maximal frequency supported by the frontend</entry> | |
| 83 | − </row><row> | |
| 84 | − <entry>uint32_t</entry> | |
| 85 | − <entry>frequency_stepsize</entry> | |
| 86 | − <entry>Frequency step - all frequencies are multiple of this value</entry> | |
| 87 | − </row><row> | |
| 88 | − <entry>uint32_t</entry> | |
| 89 | − <entry>frequency_tolerance</entry> | |
| 90 | − <entry>Tolerance of the frequency</entry> | |
| 91 | − </row><row> | |
| 92 | − <entry>uint32_t</entry> | |
| 93 | − <entry>symbol_rate_min</entry> | |
| 94 | − <entry>Minimal symbol rate (for Cable/Satellite systems), in bauds</entry> | |
| 95 | − </row><row> | |
| 96 | − <entry>uint32_t</entry> | |
| 97 | − <entry>symbol_rate_max</entry> | |
| 98 | − <entry>Maximal symbol rate (for Cable/Satellite systems), in bauds</entry> | |
| 99 | − </row><row> | |
| 100 | − <entry>uint32_t</entry> | |
| 101 | − <entry>symbol_rate_tolerance</entry> | |
| 102 | − <entry>Maximal symbol rate tolerance, in ppm</entry> | |
| 103 | − </row><row> | |
| 104 | − <entry>uint32_t</entry> | |
| 105 | − <entry>notifier_delay</entry> | |
| 106 | − <entry><emphasis role="bold">DEPRECATED</emphasis>. Not used by any driver.</entry> | |
| 107 | − </row><row> | |
| 108 | − <entry>&fe-caps;</entry> | |
| 109 | − <entry>caps</entry> | |
| 110 | − <entry>Capabilities supported by the frontend</entry> | |
| 111 | − </row> | |
| 112 | − </tbody> | |
| 113 | − </tgroup> | |
| 114 | − </table> | |
| 115 | − | |
| 116 | − <para>NOTE: The frequencies are specified in Hz for Terrestrial and Cable | |
| 117 | − systems. They're specified in kHz for Satellite systems</para> | |
| 118 | − </refsect1> | |
| 119 | − | |
| 120 | −<refsect1 id="fe-caps-t"> | |
| 121 | −<title>frontend capabilities</title> | |
| 122 | − | |
| 123 | −<para>Capabilities describe what a frontend can do. Some capabilities are | |
| 124 | − supported only on some specific frontend types.</para> | |
| 125 | − | |
| 126 | −<table pgwide="1" frame="none" id="fe-caps"> | |
| 127 | − <title>enum fe_caps</title> | |
| 128 | − <tgroup cols="2"> | |
| 129 | − &cs-def; | |
| 130 | − <thead> | |
| 131 | − <row> | |
| 132 | − <entry>ID</entry> | |
| 133 | − <entry>Description</entry> | |
| 134 | − </row> | |
| 135 | − </thead> | |
| 136 | − <tbody valign="top"> | |
| 137 | − <row> | |
| 138 | − <entry id="FE-IS-STUPID"><constant>FE_IS_STUPID</constant></entry> | |
| 139 | − <entry>There's something wrong at the frontend, and it can't | |
| 140 | − report its capabilities</entry> | |
| 141 | − </row> | |
| 142 | − <row> | |
| 143 | − <entry id="FE-CAN-INVERSION-AUTO"><constant>FE_CAN_INVERSION_AUTO</constant></entry> | |
| 144 | − <entry>The frontend is capable of auto-detecting inversion</entry> | |
| 145 | − </row> | |
| 146 | − <row> | |
| 147 | − <entry id="FE-CAN-FEC-1-2"><constant>FE_CAN_FEC_1_2</constant></entry> | |
| 148 | − <entry>The frontend supports FEC 1/2</entry> | |
| 149 | − </row> | |
| 150 | − <row> | |
| 151 | − <entry id="FE-CAN-FEC-2-3"><constant>FE_CAN_FEC_2_3</constant></entry> | |
| 152 | − <entry>The frontend supports FEC 2/3</entry> | |
| 153 | − </row> | |
| 154 | − <row> | |
| 155 | − <entry id="FE-CAN-FEC-3-4"><constant>FE_CAN_FEC_3_4</constant></entry> | |
| 156 | − <entry>The frontend supports FEC 3/4</entry> | |
| 157 | − </row> | |
| 158 | − <row> | |
| 159 | − <entry id="FE-CAN-FEC-4-5"><constant>FE_CAN_FEC_4_5</constant></entry> | |
| 160 | − <entry>The frontend supports FEC 4/5</entry> | |
| 161 | − </row> | |
| 162 | − <row> | |
| 163 | − <entry id="FE-CAN-FEC-5-6"><constant>FE_CAN_FEC_5_6</constant></entry> | |
| 164 | − <entry>The frontend supports FEC 5/6</entry> | |
| 165 | − </row> | |
| 166 | − <row> | |
| 167 | − <entry id="FE-CAN-FEC-6-7"><constant>FE_CAN_FEC_6_7</constant></entry> | |
| 168 | − <entry>The frontend supports FEC 6/7</entry> | |
| 169 | − </row> | |
| 170 | − <row> | |
| 171 | − <entry id="FE-CAN-FEC-7-8"><constant>FE_CAN_FEC_7_8</constant></entry> | |
| 172 | − <entry>The frontend supports FEC 7/8</entry> | |
| 173 | − </row> | |
| 174 | − <row> | |
| 175 | − <entry id="FE-CAN-FEC-8-9"><constant>FE_CAN_FEC_8_9</constant></entry> | |
| 176 | − <entry>The frontend supports FEC 8/9</entry> | |
| 177 | − </row> | |
| 178 | − <row> | |
| 179 | − <entry id="FE-CAN-FEC-AUTO"><constant>FE_CAN_FEC_AUTO</constant></entry> | |
| 180 | − <entry>The frontend can autodetect FEC.</entry> | |
| 181 | − </row> | |
| 182 | − <row> | |
| 183 | − <entry id="FE-CAN-QPSK"><constant>FE_CAN_QPSK</constant></entry> | |
| 184 | − <entry>The frontend supports QPSK modulation</entry> | |
| 185 | − </row> | |
| 186 | − <row> | |
| 187 | − <entry id="FE-CAN-QAM-16"><constant>FE_CAN_QAM_16</constant></entry> | |
| 188 | − <entry>The frontend supports 16-QAM modulation</entry> | |
| 189 | − </row> | |
| 190 | − <row> | |
| 191 | − <entry id="FE-CAN-QAM-32"><constant>FE_CAN_QAM_32</constant></entry> | |
| 192 | − <entry>The frontend supports 32-QAM modulation</entry> | |
| 193 | − </row> | |
| 194 | − <row> | |
| 195 | − <entry id="FE-CAN-QAM-64"><constant>FE_CAN_QAM_64</constant></entry> | |
| 196 | − <entry>The frontend supports 64-QAM modulation</entry> | |
| 197 | − </row> | |
| 198 | − <row> | |
| 199 | − <entry id="FE-CAN-QAM-128"><constant>FE_CAN_QAM_128</constant></entry> | |
| 200 | − <entry>The frontend supports 128-QAM modulation</entry> | |
| 201 | − </row> | |
| 202 | − <row> | |
| 203 | − <entry id="FE-CAN-QAM-256"><constant>FE_CAN_QAM_256</constant></entry> | |
| 204 | − <entry>The frontend supports 256-QAM modulation</entry> | |
| 205 | − </row> | |
| 206 | − <row> | |
| 207 | − <entry id="FE-CAN-QAM-AUTO"><constant>FE_CAN_QAM_AUTO</constant></entry> | |
| 208 | − <entry>The frontend can autodetect modulation</entry> | |
| 209 | − </row> | |
| 210 | − <row> | |
| 211 | − <entry id="FE-CAN-TRANSMISSION-MODE-AUTO"><constant>FE_CAN_TRANSMISSION_MODE_AUTO</constant></entry> | |
| 212 | − <entry>The frontend can autodetect the transmission mode</entry> | |
| 213 | − </row> | |
| 214 | − <row> | |
| 215 | − <entry id="FE-CAN-BANDWIDTH-AUTO"><constant>FE_CAN_BANDWIDTH_AUTO</constant></entry> | |
| 216 | − <entry>The frontend can autodetect the bandwidth</entry> | |
| 217 | − </row> | |
| 218 | − <row> | |
| 219 | − <entry id="FE-CAN-GUARD-INTERVAL-AUTO"><constant>FE_CAN_GUARD_INTERVAL_AUTO</constant></entry> | |
| 220 | − <entry>The frontend can autodetect the guard interval</entry> | |
| 221 | − </row> | |
| 222 | − <row> | |
| 223 | − <entry id="FE-CAN-HIERARCHY-AUTO"><constant>FE_CAN_HIERARCHY_AUTO</constant></entry> | |
| 224 | − <entry>The frontend can autodetect hierarch</entry> | |
| 225 | − </row> | |
| 226 | − <row> | |
| 227 | − <entry id="FE-CAN-8VSB"><constant>FE_CAN_8VSB</constant></entry> | |
| 228 | − <entry>The frontend supports 8-VSB modulation</entry> | |
| 229 | − </row> | |
| 230 | − <row> | |
| 231 | − <entry id="FE-CAN-16VSB"><constant>FE_CAN_16VSB</constant></entry> | |
| 232 | − <entry>The frontend supports 16-VSB modulation</entry> | |
| 233 | − </row> | |
| 234 | − <row> | |
| 235 | − <entry id="FE-HAS-EXTENDED-CAPS"><constant>FE_HAS_EXTENDED_CAPS</constant></entry> | |
| 236 | − <entry>Currently, unused</entry> | |
| 237 | − </row> | |
| 238 | − <row> | |
| 239 | − <entry id="FE-CAN-MULTISTREAM"><constant>FE_CAN_MULTISTREAM</constant></entry> | |
| 240 | − <entry>The frontend supports multistream filtering</entry> | |
| 241 | − </row> | |
| 242 | − <row> | |
| 243 | − <entry id="FE-CAN-TURBO-FEC"><constant>FE_CAN_TURBO_FEC</constant></entry> | |
| 244 | − <entry>The frontend supports turbo FEC modulation</entry> | |
| 245 | − </row> | |
| 246 | − <row> | |
| 247 | − <entry id="FE-CAN-2G-MODULATION"><constant>FE_CAN_2G_MODULATION</constant></entry> | |
| 248 | − <entry>The frontend supports "2nd generation modulation" (DVB-S2/T2)></entry> | |
| 249 | − </row> | |
| 250 | − <row> | |
| 251 | − <entry id="FE-NEEDS-BENDING"><constant>FE_NEEDS_BENDING</constant></entry> | |
| 252 | − <entry>Not supported anymore, don't use it</entry> | |
| 253 | − </row> | |
| 254 | − <row> | |
| 255 | − <entry id="FE-CAN-RECOVER"><constant>FE_CAN_RECOVER</constant></entry> | |
| 256 | − <entry>The frontend can recover from a cable unplug automatically</entry> | |
| 257 | − </row> | |
| 258 | − <row> | |
| 259 | − <entry id="FE-CAN-MUTE-TS"><constant>FE_CAN_MUTE_TS</constant></entry> | |
| 260 | − <entry>The frontend can stop spurious TS data output</entry> | |
| 261 | − </row> | |
| 262 | − </tbody> | |
| 263 | − </tgroup> | |
| 264 | −</table> | |
| 265 | −</refsect1> | |
| 266 | −</refentry> | |
| @@ -1,81 +0,0 @@ | ||
| 1 | −<refentry id="FE_GET_PROPERTY"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_SET_PROPERTY, FE_GET_PROPERTY</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_SET_PROPERTY</refname> | |
| 9 | − <refname>FE_GET_PROPERTY</refname> | |
| 10 | − <refpurpose>FE_SET_PROPERTY sets one or more frontend properties. | |
| 11 | − FE_GET_PROPERTY returns one or more frontend properties.</refpurpose> | |
| 12 | − </refnamediv> | |
| 13 | − | |
| 14 | − <refsynopsisdiv> | |
| 15 | − <funcsynopsis> | |
| 16 | − <funcprototype> | |
| 17 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 18 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 19 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 20 | − <paramdef>struct dtv_properties *<parameter>argp</parameter></paramdef> | |
| 21 | − </funcprototype> | |
| 22 | − </funcsynopsis> | |
| 23 | − </refsynopsisdiv> | |
| 24 | − | |
| 25 | − <refsect1> | |
| 26 | − <title>Arguments</title> | |
| 27 | − <variablelist> | |
| 28 | − <varlistentry> | |
| 29 | − <term><parameter>fd</parameter></term> | |
| 30 | − <listitem> | |
| 31 | − <para>&fe_fd;</para> | |
| 32 | − </listitem> | |
| 33 | − </varlistentry> | |
| 34 | − <varlistentry> | |
| 35 | − <term><parameter>request</parameter></term> | |
| 36 | − <listitem> | |
| 37 | − <para>FE_SET_PROPERTY, FE_GET_PROPERTY</para> | |
| 38 | − </listitem> | |
| 39 | − </varlistentry> | |
| 40 | − <varlistentry> | |
| 41 | − <term><parameter>argp</parameter></term> | |
| 42 | − <listitem> | |
| 43 | − <para>pointer to &dtv-properties;</para> | |
| 44 | − </listitem> | |
| 45 | − </varlistentry> | |
| 46 | − </variablelist> | |
| 47 | − </refsect1> | |
| 48 | − | |
| 49 | − <refsect1> | |
| 50 | − <title>Description</title> | |
| 51 | − | |
| 52 | − <para>All DVB frontend devices support the | |
| 53 | −<constant>FE_SET_PROPERTY</constant> and <constant>FE_GET_PROPERTY</constant> | |
| 54 | −ioctls. The supported properties and statistics depends on the delivery system | |
| 55 | −and on the device:</para> | |
| 56 | −<itemizedlist> | |
| 57 | −<listitem> | |
| 58 | − <para><constant>FE_SET_PROPERTY:</constant></para> | |
| 59 | −<itemizedlist> | |
| 60 | −<listitem><para>This ioctl is used to set one or more | |
| 61 | − frontend properties.</para></listitem> | |
| 62 | −<listitem><para>This is the basic command to request the frontend to tune into some | |
| 63 | − frequency and to start decoding the digital TV signal.</para></listitem> | |
| 64 | −<listitem><para>This call requires read/write access to the device.</para></listitem> | |
| 65 | −<listitem><para>At return, the values are updated to reflect the | |
| 66 | − actual parameters used.</para></listitem> | |
| 67 | −</itemizedlist> | |
| 68 | −</listitem> | |
| 69 | −<listitem> | |
| 70 | − <para><constant>FE_GET_PROPERTY:</constant></para> | |
| 71 | −<itemizedlist> | |
| 72 | −<listitem><para>This ioctl is used to get properties and | |
| 73 | −statistics from the frontend.</para></listitem> | |
| 74 | −<listitem><para>No properties are changed, and statistics aren't reset.</para></listitem> | |
| 75 | −<listitem><para>This call only requires read-only access to the device.</para></listitem> | |
| 76 | −</itemizedlist> | |
| 77 | −</listitem> | |
| 78 | −</itemizedlist> | |
| 79 | −&return-value-dvb; | |
| 80 | −</refsect1> | |
| 81 | −</refentry> | |
| @@ -1,107 +0,0 @@ | ||
| 1 | −<refentry id="FE_READ_STATUS"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_READ_STATUS</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_READ_STATUS</refname> | |
| 9 | − <refpurpose>Returns status information about the front-end. This call only | |
| 10 | − requires read-only access to the device</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>unsigned int *<parameter>status</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>fd</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>&fe_fd;</para> | |
| 31 | − </listitem> | |
| 32 | − </varlistentry> | |
| 33 | − <varlistentry> | |
| 34 | − <term><parameter>request</parameter></term> | |
| 35 | − <listitem> | |
| 36 | − <para>FE_READ_STATUS</para> | |
| 37 | − </listitem> | |
| 38 | − </varlistentry> | |
| 39 | − <varlistentry> | |
| 40 | − <term><parameter>status</parameter></term> | |
| 41 | − <listitem> | |
| 42 | − <para>pointer to a bitmask integer filled with the values defined by | |
| 43 | − &fe-status;.</para> | |
| 44 | − </listitem> | |
| 45 | − </varlistentry> | |
| 46 | − </variablelist> | |
| 47 | − </refsect1> | |
| 48 | − | |
| 49 | − <refsect1> | |
| 50 | − <title>Description</title> | |
| 51 | − | |
| 52 | − <para>All DVB frontend devices support the | |
| 53 | −<constant>FE_READ_STATUS</constant> ioctl. It is used to check about the | |
| 54 | −locking status of the frontend after being tuned. The ioctl takes a | |
| 55 | −pointer to an integer where the status will be written. | |
| 56 | −</para> | |
| 57 | −<para>NOTE: the size of status is actually sizeof(enum fe_status), with varies | |
| 58 | − according with the architecture. This needs to be fixed in the future.</para> | |
| 59 | −&return-value-dvb; | |
| 60 | −</refsect1> | |
| 61 | − | |
| 62 | −<refsect1 id="fe-status-t"> | |
| 63 | −<title>int fe_status</title> | |
| 64 | − | |
| 65 | −<para>The fe_status parameter is used to indicate the current state | |
| 66 | − and/or state changes of the frontend hardware. It is produced using | |
| 67 | − the &fe-status; values on a bitmask</para> | |
| 68 | − | |
| 69 | −<table pgwide="1" frame="none" id="fe-status"> | |
| 70 | − <title>enum fe_status</title> | |
| 71 | − <tgroup cols="2"> | |
| 72 | − &cs-def; | |
| 73 | − <thead> | |
| 74 | − <row> | |
| 75 | − <entry>ID</entry> | |
| 76 | − <entry>Description</entry> | |
| 77 | − </row> | |
| 78 | − </thead> | |
| 79 | − <tbody valign="top"> | |
| 80 | − <row> | |
| 81 | − <entry align="char" id="FE-HAS-SIGNAL"><constant>FE_HAS_SIGNAL</constant></entry> | |
| 82 | − <entry align="char">The frontend has found something above the noise level</entry> | |
| 83 | − </row><row> | |
| 84 | − <entry align="char" id="FE-HAS-CARRIER"><constant>FE_HAS_CARRIER</constant></entry> | |
| 85 | − <entry align="char">The frontend has found a DVB signal</entry> | |
| 86 | − </row><row> | |
| 87 | − <entry align="char" id="FE-HAS-VITERBI"><constant>FE_HAS_VITERBI</constant></entry> | |
| 88 | − <entry align="char">The frontend FEC inner coding (Viterbi, LDPC or other inner code) is stable</entry> | |
| 89 | − </row><row> | |
| 90 | − <entry align="char" id="FE-HAS-SYNC"><constant>FE_HAS_SYNC</constant></entry> | |
| 91 | − <entry align="char">Synchronization bytes was found</entry> | |
| 92 | − </row><row> | |
| 93 | − <entry align="char" id="FE-HAS-LOCK"><constant>FE_HAS_LOCK</constant></entry> | |
| 94 | − <entry align="char">The DVB were locked and everything is working</entry> | |
| 95 | − </row><row> | |
| 96 | − <entry align="char" id="FE-TIMEDOUT"><constant>FE_TIMEDOUT</constant></entry> | |
| 97 | − <entry align="char">no lock within the last about 2 seconds</entry> | |
| 98 | − </row><row> | |
| 99 | − <entry align="char" id="FE-REINIT"><constant>FE_REINIT</constant></entry> | |
| 100 | − <entry align="char">The frontend was reinitialized, application is | |
| 101 | − recommended to reset DiSEqC, tone and parameters</entry> | |
| 102 | − </row> | |
| 103 | − </tbody> | |
| 104 | − </tgroup> | |
| 105 | −</table> | |
| 106 | −</refsect1> | |
| 107 | −</refentry> | |
| @@ -1,64 +0,0 @@ | ||
| 1 | −<refentry id="FE_SET_FRONTEND_TUNE_MODE"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_SET_FRONTEND_TUNE_MODE</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_SET_FRONTEND_TUNE_MODE</refname> | |
| 9 | − <refpurpose>Allow setting tuner mode flags to the frontend.</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>unsigned int <parameter>flags</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fe_fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − <varlistentry> | |
| 33 | − <term><parameter>request</parameter></term> | |
| 34 | − <listitem> | |
| 35 | − <para>FE_SET_FRONTEND_TUNE_MODE</para> | |
| 36 | − </listitem> | |
| 37 | − </varlistentry> | |
| 38 | − <varlistentry> | |
| 39 | − <term><parameter>flags</parameter></term> | |
| 40 | − <listitem> | |
| 41 | − <para>Valid flags:</para> | |
| 42 | − <itemizedlist> | |
| 43 | − <listitem><para>0 - normal tune mode</para></listitem> | |
| 44 | − <listitem><para>FE_TUNE_MODE_ONESHOT - When set, this flag will | |
| 45 | − disable any zigzagging or other "normal" tuning behaviour. | |
| 46 | − Additionally, there will be no automatic monitoring of the | |
| 47 | − lock status, and hence no frontend events will be | |
| 48 | − generated. If a frontend device is closed, this flag will | |
| 49 | − be automatically turned off when the device is reopened | |
| 50 | − read-write.</para></listitem> | |
| 51 | − </itemizedlist> | |
| 52 | − </listitem> | |
| 53 | − </varlistentry> | |
| 54 | − </variablelist> | |
| 55 | − </refsect1> | |
| 56 | − | |
| 57 | − <refsect1> | |
| 58 | − <title>Description</title> | |
| 59 | − | |
| 60 | − <para>Allow setting tuner mode flags to the frontend, between 0 (normal) | |
| 61 | − or FE_TUNE_MODE_ONESHOT mode</para> | |
| 62 | −&return-value-dvb; | |
| 63 | −</refsect1> | |
| 64 | −</refentry> | |
| @@ -1,91 +0,0 @@ | ||
| 1 | −<refentry id="FE_SET_TONE"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_SET_TONE</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_SET_TONE</refname> | |
| 9 | − <refpurpose>Sets/resets the generation of the continuous 22kHz tone.</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>enum fe_sec_tone_mode *<parameter>tone</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fe_fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − <varlistentry> | |
| 33 | − <term><parameter>request</parameter></term> | |
| 34 | − <listitem> | |
| 35 | − <para>FE_SET_TONE</para> | |
| 36 | − </listitem> | |
| 37 | − </varlistentry> | |
| 38 | − <varlistentry> | |
| 39 | − <term><parameter>tone</parameter></term> | |
| 40 | − <listitem> | |
| 41 | − <para>pointer to &fe-sec-tone-mode;</para> | |
| 42 | − </listitem> | |
| 43 | − </varlistentry> | |
| 44 | − </variablelist> | |
| 45 | − </refsect1> | |
| 46 | − | |
| 47 | − <refsect1> | |
| 48 | − <title>Description</title> | |
| 49 | − | |
| 50 | −<para>This ioctl is used to set the generation of the continuous 22kHz tone. | |
| 51 | − This call requires read/write permissions.</para> | |
| 52 | −<para>Usually, satellite antenna subsystems require that the digital TV | |
| 53 | − device to send a 22kHz tone in order to select between high/low band on | |
| 54 | − some dual-band LNBf. It is also used to send signals to DiSEqC equipment, | |
| 55 | − but this is done using the DiSEqC ioctls.</para> | |
| 56 | −<para>NOTE: if more than one device is connected to the same antenna, | |
| 57 | − setting a tone may interfere on other devices, as they may lose | |
| 58 | − the capability of selecting the band. So, it is recommended that | |
| 59 | − applications would change to SEC_TONE_OFF when the device is not used.</para> | |
| 60 | − | |
| 61 | −&return-value-dvb; | |
| 62 | −</refsect1> | |
| 63 | − | |
| 64 | −<refsect1 id="fe-sec-tone-mode-t"> | |
| 65 | −<title>enum fe_sec_tone_mode</title> | |
| 66 | − | |
| 67 | −<table pgwide="1" frame="none" id="fe-sec-tone-mode"> | |
| 68 | − <title>enum fe_sec_tone_mode</title> | |
| 69 | − <tgroup cols="2"> | |
| 70 | − &cs-def; | |
| 71 | − <thead> | |
| 72 | − <row> | |
| 73 | − <entry>ID</entry> | |
| 74 | − <entry>Description</entry> | |
| 75 | − </row> | |
| 76 | − </thead> | |
| 77 | − <tbody valign="top"> | |
| 78 | − <row> | |
| 79 | − <entry align="char" id="SEC-TONE-ON"><constant>SEC_TONE_ON</constant></entry> | |
| 80 | − <entry align="char">Sends a 22kHz tone burst to the antenna</entry> | |
| 81 | − </row><row> | |
| 82 | − <entry align="char" id="SEC-TONE-OFF"><constant>SEC_TONE_OFF</constant></entry> | |
| 83 | − <entry align="char">Don't send a 22kHz tone to the antenna | |
| 84 | − (except if the FE_DISEQC_* ioctls are called)</entry> | |
| 85 | − </row> | |
| 86 | − </tbody> | |
| 87 | − </tgroup> | |
| 88 | −</table> | |
| 89 | −</refsect1> | |
| 90 | − | |
| 91 | −</refentry> | |
| @@ -1,69 +0,0 @@ | ||
| 1 | −<refentry id="FE_SET_VOLTAGE"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl FE_SET_VOLTAGE</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>FE_SET_VOLTAGE</refname> | |
| 9 | − <refpurpose>Allow setting the DC level sent to the antenna subsystem.</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>enum fe_sec_voltage *<parameter>voltage</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fe_fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − <varlistentry> | |
| 33 | − <term><parameter>request</parameter></term> | |
| 34 | − <listitem> | |
| 35 | − <para>FE_SET_VOLTAGE</para> | |
| 36 | − </listitem> | |
| 37 | − </varlistentry> | |
| 38 | − <varlistentry> | |
| 39 | − <term><parameter>voltage</parameter></term> | |
| 40 | − <listitem> | |
| 41 | − <para>pointer to &fe-sec-voltage;</para> | |
| 42 | − <para>Valid values are described at &fe-sec-voltage;.</para> | |
| 43 | − </listitem> | |
| 44 | − </varlistentry> | |
| 45 | − </variablelist> | |
| 46 | − </refsect1> | |
| 47 | − | |
| 48 | − <refsect1> | |
| 49 | − <title>Description</title> | |
| 50 | − | |
| 51 | −<para>This ioctl allows to set the DC voltage level sent through the antenna | |
| 52 | − cable to 13V, 18V or off.</para> | |
| 53 | −<para>Usually, a satellite antenna subsystems require that the digital TV | |
| 54 | − device to send a DC voltage to feed power to the LNBf. Depending on the | |
| 55 | − LNBf type, the polarization or the intermediate frequency (IF) of the LNBf | |
| 56 | − can controlled by the voltage level. Other devices (for example, the ones | |
| 57 | − that implement DISEqC and multipoint LNBf's don't need to control the | |
| 58 | − voltage level, provided that either 13V or 18V is sent to power up the | |
| 59 | − LNBf.</para> | |
| 60 | −<para>NOTE: if more than one device is connected to the same antenna, | |
| 61 | − setting a voltage level may interfere on other devices, as they may lose | |
| 62 | − the capability of setting polarization or IF. So, on those | |
| 63 | − cases, setting the voltage to SEC_VOLTAGE_OFF while the device is not is | |
| 64 | − used is recommended.</para> | |
| 65 | − | |
| 66 | −&return-value-dvb; | |
| 67 | −</refsect1> | |
| 68 | − | |
| 69 | −</refentry> | |
| @@ -1,269 +0,0 @@ | ||
| 1 | −<title>DVB Frontend API</title> | |
| 2 | − | |
| 3 | −<para>The DVB frontend API was designed to support three types of delivery systems:</para> | |
| 4 | −<itemizedlist> | |
| 5 | − <listitem><para>Terrestrial systems: DVB-T, DVB-T2, ATSC, ATSC M/H, ISDB-T, DVB-H, DTMB, CMMB</para></listitem> | |
| 6 | − <listitem><para>Cable systems: DVB-C Annex A/C, ClearQAM (DVB-C Annex B), ISDB-C</para></listitem> | |
| 7 | − <listitem><para>Satellite systems: DVB-S, DVB-S2, DVB Turbo, ISDB-S, DSS</para></listitem> | |
| 8 | −</itemizedlist> | |
| 9 | −<para>The DVB frontend controls several sub-devices including:</para> | |
| 10 | −<itemizedlist> | |
| 11 | − <listitem><para>Tuner</para></listitem> | |
| 12 | − <listitem><para>Digital TV demodulator</para></listitem> | |
| 13 | − <listitem><para>Low noise amplifier (LNA)</para></listitem> | |
| 14 | − <listitem><para>Satellite Equipment Control (SEC) hardware (only for Satellite).</para></listitem> | |
| 15 | −</itemizedlist> | |
| 16 | −<para>The frontend can be accessed through | |
| 17 | − <constant>/dev/dvb/adapter?/frontend?</constant>. Data types and | |
| 18 | − ioctl definitions can be accessed by including | |
| 19 | − <constant>linux/dvb/frontend.h</constant> in your application. | |
| 20 | −</para> | |
| 21 | − | |
| 22 | −<para>NOTE: Transmission via the internet (DVB-IP) | |
| 23 | − is not yet handled by this API but a future extension is possible.</para> | |
| 24 | −<para>On Satellite systems, the API support for the Satellite Equipment Control | |
| 25 | − (SEC) allows to power control and to send/receive signals to control the | |
| 26 | − antenna subsystem, selecting the polarization and choosing the Intermediate | |
| 27 | − Frequency IF) of the Low Noise Block Converter Feed Horn (LNBf). It | |
| 28 | − supports the DiSEqC and V-SEC protocols. The DiSEqC (digital SEC) | |
| 29 | −specification is available at | |
| 30 | −<ulink url="http://www.eutelsat.com/satellites/4_5_5.html">Eutelsat</ulink>.</para> | |
| 31 | − | |
| 32 | −<section id="query-dvb-frontend-info"> | |
| 33 | −<title>Querying frontend information</title> | |
| 34 | − | |
| 35 | −<para>Usually, the first thing to do when the frontend is opened is to | |
| 36 | − check the frontend capabilities. This is done using <link linkend="FE_GET_INFO">FE_GET_INFO</link>. This ioctl will enumerate | |
| 37 | − the DVB API version and other characteristics about the frontend, and | |
| 38 | − can be opened either in read only or read/write mode.</para> | |
| 39 | −</section> | |
| 40 | − | |
| 41 | −<section id="dvb-fe-read-status"> | |
| 42 | −<title>Querying frontend status and statistics</title> | |
| 43 | − | |
| 44 | −<para>Once <link linkend="FE_GET_PROPERTY"><constant>FE_SET_PROPERTY</constant></link> | |
| 45 | − is called, the frontend will run a kernel thread that will periodically | |
| 46 | − check for the tuner lock status and provide statistics about the quality | |
| 47 | − of the signal.</para> | |
| 48 | −<para>The information about the frontend tuner locking status can be queried | |
| 49 | − using <link linkend="FE_READ_STATUS">FE_READ_STATUS</link>.</para> | |
| 50 | −<para>Signal statistics are provided via <link linkend="FE_GET_PROPERTY"><constant>FE_GET_PROPERTY</constant></link>. | |
| 51 | − Please note that several statistics require the demodulator to be fully | |
| 52 | − locked (e. g. with FE_HAS_LOCK bit set). See | |
| 53 | − <link linkend="frontend-stat-properties">Frontend statistics indicators</link> | |
| 54 | − for more details.</para> | |
| 55 | −</section> | |
| 56 | − | |
| 57 | −&sub-dvbproperty; | |
| 58 | − | |
| 59 | −<section id="frontend_fcalls"> | |
| 60 | −<title>Frontend Function Calls</title> | |
| 61 | − | |
| 62 | −<refentry id="frontend_f_open"> | |
| 63 | − <refmeta> | |
| 64 | − <refentrytitle>DVB frontend open()</refentrytitle> | |
| 65 | − &manvol; | |
| 66 | − </refmeta> | |
| 67 | − | |
| 68 | − <refnamediv> | |
| 69 | − <refname>fe-open</refname> | |
| 70 | − <refpurpose>Open a frontend device</refpurpose> | |
| 71 | − </refnamediv> | |
| 72 | − | |
| 73 | − <refsynopsisdiv> | |
| 74 | − <funcsynopsis> | |
| 75 | − <funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo> | |
| 76 | − <funcprototype> | |
| 77 | − <funcdef>int <function>open</function></funcdef> | |
| 78 | − <paramdef>const char *<parameter>device_name</parameter></paramdef> | |
| 79 | − <paramdef>int <parameter>flags</parameter></paramdef> | |
| 80 | − </funcprototype> | |
| 81 | − </funcsynopsis> | |
| 82 | − </refsynopsisdiv> | |
| 83 | − | |
| 84 | − <refsect1> | |
| 85 | − <title>Arguments</title> | |
| 86 | − | |
| 87 | − <variablelist> | |
| 88 | − <varlistentry> | |
| 89 | − <term><parameter>device_name</parameter></term> | |
| 90 | − <listitem> | |
| 91 | − <para>Device to be opened.</para> | |
| 92 | − </listitem> | |
| 93 | − </varlistentry> | |
| 94 | − <varlistentry> | |
| 95 | − <term><parameter>flags</parameter></term> | |
| 96 | − <listitem> | |
| 97 | − <para>Open flags. Access can either be | |
| 98 | − <constant>O_RDWR</constant> or <constant>O_RDONLY</constant>.</para> | |
| 99 | − <para>Multiple opens are allowed with <constant>O_RDONLY</constant>. In this mode, only query and read ioctls are allowed.</para> | |
| 100 | − <para>Only one open is allowed in <constant>O_RDWR</constant>. In this mode, all ioctls are allowed.</para> | |
| 101 | − <para>When the <constant>O_NONBLOCK</constant> flag is given, the system calls may return &EAGAIN; when no data is available or when the device driver is temporarily busy.</para> | |
| 102 | − <para>Other flags have no effect.</para> | |
| 103 | − </listitem> | |
| 104 | − </varlistentry> | |
| 105 | − </variablelist> | |
| 106 | − </refsect1> | |
| 107 | − <refsect1> | |
| 108 | − <title>Description</title> | |
| 109 | − <para>This system call opens a named frontend device (<constant>/dev/dvb/adapter?/frontend?</constant>) | |
| 110 | − for subsequent use. Usually the first thing to do after a successful open is to | |
| 111 | − find out the frontend type with <link linkend="FE_GET_INFO">FE_GET_INFO</link>.</para> | |
| 112 | −<para>The device can be opened in read-only mode, which only allows monitoring of | |
| 113 | − device status and statistics, or read/write mode, which allows any kind of use | |
| 114 | − (e.g. performing tuning operations.) | |
| 115 | −</para> | |
| 116 | −<para>In a system with multiple front-ends, it is usually the case that multiple devices | |
| 117 | − cannot be open in read/write mode simultaneously. As long as a front-end | |
| 118 | − device is opened in read/write mode, other open() calls in read/write mode will | |
| 119 | − either fail or block, depending on whether non-blocking or blocking mode was | |
| 120 | − specified. A front-end device opened in blocking mode can later be put into | |
| 121 | − non-blocking mode (and vice versa) using the F_SETFL command of the fcntl | |
| 122 | − system call. This is a standard system call, documented in the Linux manual | |
| 123 | − page for fcntl. When an open() call has succeeded, the device will be ready | |
| 124 | − for use in the specified mode. This implies that the corresponding hardware is | |
| 125 | − powered up, and that other front-ends may have been powered down to make | |
| 126 | − that possible.</para> | |
| 127 | − </refsect1> | |
| 128 | − | |
| 129 | − <refsect1> | |
| 130 | − <title>Return Value</title> | |
| 131 | − | |
| 132 | − <para>On success <function>open</function> returns the new file | |
| 133 | −descriptor. On error -1 is returned, and the <varname>errno</varname> | |
| 134 | −variable is set appropriately. Possible error codes are:</para> | |
| 135 | − | |
| 136 | − <variablelist> | |
| 137 | − <varlistentry> | |
| 138 | − <term><errorcode>EACCES</errorcode></term> | |
| 139 | − <listitem> | |
| 140 | − <para>The caller has no permission to access the | |
| 141 | −device.</para> | |
| 142 | − </listitem> | |
| 143 | − </varlistentry> | |
| 144 | − <varlistentry> | |
| 145 | − <term><errorcode>EBUSY</errorcode></term> | |
| 146 | − <listitem> | |
| 147 | − <para>The the device driver is already in use.</para> | |
| 148 | − </listitem> | |
| 149 | − </varlistentry> | |
| 150 | − <varlistentry> | |
| 151 | − <term><errorcode>ENXIO</errorcode></term> | |
| 152 | − <listitem> | |
| 153 | − <para>No device corresponding to this device special file | |
| 154 | −exists.</para> | |
| 155 | − </listitem> | |
| 156 | − </varlistentry> | |
| 157 | − <varlistentry> | |
| 158 | − <term><errorcode>ENOMEM</errorcode></term> | |
| 159 | − <listitem> | |
| 160 | − <para>Not enough kernel memory was available to complete the | |
| 161 | −request.</para> | |
| 162 | − </listitem> | |
| 163 | − </varlistentry> | |
| 164 | − <varlistentry> | |
| 165 | − <term><errorcode>EMFILE</errorcode></term> | |
| 166 | − <listitem> | |
| 167 | − <para>The process already has the maximum number of | |
| 168 | −files open.</para> | |
| 169 | − </listitem> | |
| 170 | − </varlistentry> | |
| 171 | − <varlistentry> | |
| 172 | − <term><errorcode>ENFILE</errorcode></term> | |
| 173 | − <listitem> | |
| 174 | − <para>The limit on the total number of files open on the | |
| 175 | −system has been reached.</para> | |
| 176 | − </listitem> | |
| 177 | − </varlistentry> | |
| 178 | − <varlistentry> | |
| 179 | − <term><errorcode>ENODEV</errorcode></term> | |
| 180 | − <listitem> | |
| 181 | − <para>The device got removed.</para> | |
| 182 | − </listitem> | |
| 183 | − </varlistentry> | |
| 184 | − </variablelist> | |
| 185 | − </refsect1> | |
| 186 | −</refentry> | |
| 187 | − | |
| 188 | −<refentry id="frontend_f_close"> | |
| 189 | − <refmeta> | |
| 190 | − <refentrytitle>DVB frontend close()</refentrytitle> | |
| 191 | − &manvol; | |
| 192 | − </refmeta> | |
| 193 | − | |
| 194 | − <refnamediv> | |
| 195 | − <refname>fe-close</refname> | |
| 196 | − <refpurpose>Close a frontend device</refpurpose> | |
| 197 | − </refnamediv> | |
| 198 | − | |
| 199 | − <refsynopsisdiv> | |
| 200 | − <funcsynopsis> | |
| 201 | − <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo> | |
| 202 | − <funcprototype> | |
| 203 | − <funcdef>int <function>close</function></funcdef> | |
| 204 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 205 | − </funcprototype> | |
| 206 | − </funcsynopsis> | |
| 207 | − </refsynopsisdiv> | |
| 208 | − | |
| 209 | − <refsect1> | |
| 210 | − <title>Arguments</title> | |
| 211 | − | |
| 212 | − <variablelist> | |
| 213 | − <varlistentry> | |
| 214 | − <term><parameter>fd</parameter></term> | |
| 215 | − <listitem> | |
| 216 | − <para>&fd;</para> | |
| 217 | − </listitem> | |
| 218 | − </varlistentry> | |
| 219 | − </variablelist> | |
| 220 | − </refsect1> | |
| 221 | − | |
| 222 | − <refsect1> | |
| 223 | − <title>Description</title> | |
| 224 | −<para>This system call closes a previously opened front-end device. After closing | |
| 225 | − a front-end device, its corresponding hardware might be powered down | |
| 226 | − automatically.</para> | |
| 227 | −</refsect1> | |
| 228 | − <refsect1> | |
| 229 | − <title>Return Value</title> | |
| 230 | − | |
| 231 | − <para>The function returns <returnvalue>0</returnvalue> on | |
| 232 | −success, <returnvalue>-1</returnvalue> on failure and the | |
| 233 | −<varname>errno</varname> is set appropriately. Possible error | |
| 234 | −codes:</para> | |
| 235 | − | |
| 236 | − <variablelist> | |
| 237 | − <varlistentry> | |
| 238 | − <term><errorcode>EBADF</errorcode></term> | |
| 239 | − <listitem> | |
| 240 | − <para><parameter>fd</parameter> is not a valid open file | |
| 241 | −descriptor.</para> | |
| 242 | − </listitem> | |
| 243 | − </varlistentry> | |
| 244 | − </variablelist> | |
| 245 | − </refsect1> | |
| 246 | −</refentry> | |
| 247 | − | |
| 248 | −&sub-fe-get-info; | |
| 249 | −&sub-fe-read-status; | |
| 250 | −&sub-fe-get-property; | |
| 251 | −&sub-fe-diseqc-reset-overload; | |
| 252 | −&sub-fe-diseqc-send-master-cmd; | |
| 253 | −&sub-fe-diseqc-recv-slave-reply; | |
| 254 | −&sub-fe-diseqc-send-burst; | |
| 255 | −&sub-fe-set-tone; | |
| 256 | −&sub-fe-set-voltage; | |
| 257 | −&sub-fe-enable-high-lnb-voltage; | |
| 258 | −&sub-fe-set-frontend-tune-mode; | |
| 259 | − | |
| 260 | −</section> | |
| 261 | − | |
| 262 | −<section id="frontend_legacy_dvbv3_api"> | |
| 263 | −<title>DVB Frontend legacy API (a. k. a. DVBv3)</title> | |
| 264 | −<para>The usage of this API is deprecated, as it doesn't support all digital | |
| 265 | − TV standards, doesn't provide good statistics measurements and provides | |
| 266 | − incomplete information. This is kept only to support legacy applications.</para> | |
| 267 | − | |
| 268 | −&sub-frontend_legacy_api; | |
| 269 | −</section> | |
| @@ -1,654 +0,0 @@ | ||
| 1 | −<section id="frontend_legacy_types"> | |
| 2 | −<title>Frontend Legacy Data Types</title> | |
| 3 | − | |
| 4 | −<section id="fe-type-t"> | |
| 5 | −<title>Frontend type</title> | |
| 6 | − | |
| 7 | −<para>For historical reasons, frontend types are named by the type of modulation | |
| 8 | − used in transmission. The fontend types are given by fe_type_t type, defined as:</para> | |
| 9 | − | |
| 10 | −<table pgwide="1" frame="none" id="fe-type"> | |
| 11 | −<title>Frontend types</title> | |
| 12 | −<tgroup cols="3"> | |
| 13 | − &cs-def; | |
| 14 | − <thead> | |
| 15 | − <row> | |
| 16 | − <entry>fe_type</entry> | |
| 17 | − <entry>Description</entry> | |
| 18 | − <entry><link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> equivalent type</entry> | |
| 19 | − </row> | |
| 20 | − </thead> | |
| 21 | − <tbody valign="top"> | |
| 22 | − <row> | |
| 23 | − <entry id="FE-QPSK"><constant>FE_QPSK</constant></entry> | |
| 24 | − <entry>For DVB-S standard</entry> | |
| 25 | − <entry><constant>SYS_DVBS</constant></entry> | |
| 26 | − </row> | |
| 27 | − <row> | |
| 28 | − <entry id="FE-QAM"><constant>FE_QAM</constant></entry> | |
| 29 | − <entry>For DVB-C annex A standard</entry> | |
| 30 | − <entry><constant>SYS_DVBC_ANNEX_A</constant></entry> | |
| 31 | − </row> | |
| 32 | − <row> | |
| 33 | − <entry id="FE-OFDM"><constant>FE_OFDM</constant></entry> | |
| 34 | − <entry>For DVB-T standard</entry> | |
| 35 | − <entry><constant>SYS_DVBT</constant></entry> | |
| 36 | − </row> | |
| 37 | − <row> | |
| 38 | − <entry id="FE-ATSC"><constant>FE_ATSC</constant></entry> | |
| 39 | − <entry>For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used in US.</entry> | |
| 40 | − <entry><constant>SYS_ATSC</constant> (terrestrial) or <constant>SYS_DVBC_ANNEX_B</constant> (cable)</entry> | |
| 41 | − </row> | |
| 42 | −</tbody></tgroup></table> | |
| 43 | − | |
| 44 | −<para>Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described at the above, as they're | |
| 45 | −supported via the new <link linkend="FE_GET_PROPERTY">FE_GET_PROPERTY/FE_GET_SET_PROPERTY</link> ioctl's, using the <link linkend="DTV-DELIVERY-SYSTEM">DTV_DELIVERY_SYSTEM</link> parameter. | |
| 46 | −</para> | |
| 47 | − | |
| 48 | −<para>In the old days, &dvb-frontend-info; used to contain | |
| 49 | − <constant>fe_type_t</constant> field to indicate the delivery systems, | |
| 50 | − filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this is | |
| 51 | − still filled to keep backward compatibility, the usage of this | |
| 52 | − field is deprecated, as it can report just one delivery system, but some | |
| 53 | − devices support multiple delivery systems. Please use | |
| 54 | − <link linkend="DTV-ENUM-DELSYS">DTV_ENUM_DELSYS</link> instead. | |
| 55 | −</para> | |
| 56 | −<para>On devices that support multiple delivery systems, | |
| 57 | − &dvb-frontend-info;::<constant>fe_type_t</constant> is filled with the | |
| 58 | − currently standard, as selected by the last call to | |
| 59 | − <link linkend="FE_GET_PROPERTY">FE_SET_PROPERTY</link> | |
| 60 | − using the &DTV-DELIVERY-SYSTEM; property.</para> | |
| 61 | −</section> | |
| 62 | − | |
| 63 | −<section id="fe-bandwidth-t"> | |
| 64 | −<title>Frontend bandwidth</title> | |
| 65 | − | |
| 66 | −<table pgwide="1" frame="none" id="fe-bandwidth"> | |
| 67 | − <title>enum fe_bandwidth</title> | |
| 68 | − <tgroup cols="2"> | |
| 69 | − &cs-def; | |
| 70 | − <thead> | |
| 71 | − <row> | |
| 72 | − <entry>ID</entry> | |
| 73 | − <entry>Description</entry> | |
| 74 | − </row> | |
| 75 | − </thead> | |
| 76 | − <tbody valign="top"> | |
| 77 | − <row> | |
| 78 | − <entry id="BANDWIDTH-AUTO"><constant>BANDWIDTH_AUTO</constant></entry> | |
| 79 | − <entry>Autodetect bandwidth (if supported)</entry> | |
| 80 | − </row><row> | |
| 81 | − <entry id="BANDWIDTH-1-712-MHZ"><constant>BANDWIDTH_1_712_MHZ</constant></entry> | |
| 82 | − <entry>1.712 MHz</entry> | |
| 83 | − </row><row> | |
| 84 | − <entry id="BANDWIDTH-5-MHZ"><constant>BANDWIDTH_5_MHZ</constant></entry> | |
| 85 | − <entry>5 MHz</entry> | |
| 86 | − </row><row> | |
| 87 | − <entry id="BANDWIDTH-6-MHZ"><constant>BANDWIDTH_6_MHZ</constant></entry> | |
| 88 | − <entry>6 MHz</entry> | |
| 89 | − </row><row> | |
| 90 | − <entry id="BANDWIDTH-7-MHZ"><constant>BANDWIDTH_7_MHZ</constant></entry> | |
| 91 | − <entry>7 MHz</entry> | |
| 92 | − </row><row> | |
| 93 | − <entry id="BANDWIDTH-8-MHZ"><constant>BANDWIDTH_8_MHZ</constant></entry> | |
| 94 | − <entry>8 MHz</entry> | |
| 95 | − </row><row> | |
| 96 | − <entry id="BANDWIDTH-10-MHZ"><constant>BANDWIDTH_10_MHZ</constant></entry> | |
| 97 | − <entry>10 MHz</entry> | |
| 98 | − </row> | |
| 99 | − </tbody> | |
| 100 | − </tgroup> | |
| 101 | −</table> | |
| 102 | − | |
| 103 | −</section> | |
| 104 | − | |
| 105 | −<section id="dvb-frontend-parameters"> | |
| 106 | −<title>frontend parameters</title> | |
| 107 | −<para>The kind of parameters passed to the frontend device for tuning depend on | |
| 108 | −the kind of hardware you are using.</para> | |
| 109 | −<para>The struct <constant>dvb_frontend_parameters</constant> uses an | |
| 110 | −union with specific per-system parameters. However, as newer delivery systems | |
| 111 | −required more data, the structure size weren't enough to fit, and just | |
| 112 | −extending its size would break the existing applications. So, those parameters | |
| 113 | −were replaced by the usage of <link linkend="FE_GET_PROPERTY"> | |
| 114 | −<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> ioctl's. The | |
| 115 | −new API is flexible enough to add new parameters to existing delivery systems, | |
| 116 | −and to add newer delivery systems.</para> | |
| 117 | −<para>So, newer applications should use <link linkend="FE_GET_PROPERTY"> | |
| 118 | −<constant>FE_GET_PROPERTY/FE_SET_PROPERTY</constant></link> instead, in | |
| 119 | −order to be able to support the newer System Delivery like DVB-S2, DVB-T2, | |
| 120 | −DVB-C2, ISDB, etc.</para> | |
| 121 | −<para>All kinds of parameters are combined as an union in the FrontendParameters structure: | |
| 122 | −<programlisting> | |
| 123 | −struct dvb_frontend_parameters { | |
| 124 | − uint32_t frequency; /⋆ (absolute) frequency in Hz for QAM/OFDM ⋆/ | |
| 125 | − /⋆ intermediate frequency in kHz for QPSK ⋆/ | |
| 126 | − &fe-spectral-inversion-t; inversion; | |
| 127 | − union { | |
| 128 | − struct dvb_qpsk_parameters qpsk; | |
| 129 | − struct dvb_qam_parameters qam; | |
| 130 | − struct dvb_ofdm_parameters ofdm; | |
| 131 | − struct dvb_vsb_parameters vsb; | |
| 132 | − } u; | |
| 133 | −}; | |
| 134 | −</programlisting></para> | |
| 135 | −<para>In the case of QPSK frontends the <constant>frequency</constant> field specifies the intermediate | |
| 136 | −frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of | |
| 137 | −the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and | |
| 138 | −OFDM frontends the <constant>frequency</constant> specifies the absolute frequency and is given in Hz. | |
| 139 | −</para> | |
| 140 | − | |
| 141 | −<section id="dvb-qpsk-parameters"> | |
| 142 | −<title>QPSK parameters</title> | |
| 143 | −<para>For satellite QPSK frontends you have to use the <constant>dvb_qpsk_parameters</constant> structure:</para> | |
| 144 | −<programlisting> | |
| 145 | − struct dvb_qpsk_parameters { | |
| 146 | − uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ | |
| 147 | − &fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/ | |
| 148 | − }; | |
| 149 | −</programlisting> | |
| 150 | −</section> | |
| 151 | − | |
| 152 | −<section id="dvb-qam-parameters"> | |
| 153 | −<title>QAM parameters</title> | |
| 154 | −<para>for cable QAM frontend you use the <constant>dvb_qam_parameters</constant> structure:</para> | |
| 155 | −<programlisting> | |
| 156 | − struct dvb_qam_parameters { | |
| 157 | − uint32_t symbol_rate; /⋆ symbol rate in Symbols per second ⋆/ | |
| 158 | − &fe-code-rate-t; fec_inner; /⋆ forward error correction (see above) ⋆/ | |
| 159 | − &fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/ | |
| 160 | − }; | |
| 161 | −</programlisting> | |
| 162 | −</section> | |
| 163 | − | |
| 164 | −<section id="dvb-vsb-parameters"> | |
| 165 | −<title>VSB parameters</title> | |
| 166 | −<para>ATSC frontends are supported by the <constant>dvb_vsb_parameters</constant> structure:</para> | |
| 167 | −<programlisting> | |
| 168 | −struct dvb_vsb_parameters { | |
| 169 | − &fe-modulation-t; modulation; /⋆ modulation type (see above) ⋆/ | |
| 170 | −}; | |
| 171 | −</programlisting> | |
| 172 | −</section> | |
| 173 | − | |
| 174 | −<section id="dvb-ofdm-parameters"> | |
| 175 | −<title>OFDM parameters</title> | |
| 176 | −<para>DVB-T frontends are supported by the <constant>dvb_ofdm_parameters</constant> structure:</para> | |
| 177 | −<programlisting> | |
| 178 | − struct dvb_ofdm_parameters { | |
| 179 | − &fe-bandwidth-t; bandwidth; | |
| 180 | − &fe-code-rate-t; code_rate_HP; /⋆ high priority stream code rate ⋆/ | |
| 181 | − &fe-code-rate-t; code_rate_LP; /⋆ low priority stream code rate ⋆/ | |
| 182 | − &fe-modulation-t; constellation; /⋆ modulation type (see above) ⋆/ | |
| 183 | − &fe-transmit-mode-t; transmission_mode; | |
| 184 | − &fe-guard-interval-t; guard_interval; | |
| 185 | − &fe-hierarchy-t; hierarchy_information; | |
| 186 | − }; | |
| 187 | −</programlisting> | |
| 188 | −</section> | |
| 189 | −</section> | |
| 190 | − | |
| 191 | −<section id="dvb-frontend-event"> | |
| 192 | −<title>frontend events</title> | |
| 193 | − <programlisting> | |
| 194 | − struct dvb_frontend_event { | |
| 195 | − fe_status_t status; | |
| 196 | − struct dvb_frontend_parameters parameters; | |
| 197 | − }; | |
| 198 | −</programlisting> | |
| 199 | − </section> | |
| 200 | −</section> | |
| 201 | − | |
| 202 | −<section id="frontend_legacy_fcalls"> | |
| 203 | −<title>Frontend Legacy Function Calls</title> | |
| 204 | − | |
| 205 | −<para>Those functions are defined at DVB version 3. The support is kept in | |
| 206 | − the kernel due to compatibility issues only. Their usage is strongly | |
| 207 | − not recommended</para> | |
| 208 | − | |
| 209 | −<section id="FE_READ_BER"> | |
| 210 | −<title>FE_READ_BER</title> | |
| 211 | −<para>DESCRIPTION | |
| 212 | −</para> | |
| 213 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 214 | − align="char"> | |
| 215 | −<para>This ioctl call returns the bit error rate for the signal currently | |
| 216 | − received/demodulated by the front-end. For this command, read-only access to | |
| 217 | − the device is sufficient.</para> | |
| 218 | −</entry> | |
| 219 | − </row></tbody></tgroup></informaltable> | |
| 220 | −<para>SYNOPSIS | |
| 221 | −</para> | |
| 222 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 223 | − align="char"> | |
| 224 | −<para>int ioctl(int fd, int request = <link linkend="FE_READ_BER">FE_READ_BER</link>, | |
| 225 | − uint32_t ⋆ber);</para> | |
| 226 | −</entry> | |
| 227 | − </row></tbody></tgroup></informaltable> | |
| 228 | −<para>PARAMETERS | |
| 229 | −</para> | |
| 230 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 231 | − align="char"> | |
| 232 | −<para>int fd</para> | |
| 233 | −</entry><entry | |
| 234 | − align="char"> | |
| 235 | −<para>File descriptor returned by a previous call to open().</para> | |
| 236 | −</entry> | |
| 237 | − </row><row><entry | |
| 238 | − align="char"> | |
| 239 | −<para>int request</para> | |
| 240 | −</entry><entry | |
| 241 | − align="char"> | |
| 242 | −<para>Equals <link linkend="FE_READ_BER">FE_READ_BER</link> for this command.</para> | |
| 243 | −</entry> | |
| 244 | − </row><row><entry | |
| 245 | − align="char"> | |
| 246 | −<para>uint32_t *ber</para> | |
| 247 | −</entry><entry | |
| 248 | − align="char"> | |
| 249 | −<para>The bit error rate is stored into *ber.</para> | |
| 250 | −</entry> | |
| 251 | − </row></tbody></tgroup></informaltable> | |
| 252 | − | |
| 253 | −&return-value-dvb; | |
| 254 | −</section> | |
| 255 | − | |
| 256 | −<section id="FE_READ_SNR"> | |
| 257 | −<title>FE_READ_SNR</title> | |
| 258 | − | |
| 259 | −<para>DESCRIPTION | |
| 260 | −</para> | |
| 261 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 262 | − align="char"> | |
| 263 | −<para>This ioctl call returns the signal-to-noise ratio for the signal currently received | |
| 264 | − by the front-end. For this command, read-only access to the device is sufficient.</para> | |
| 265 | −</entry> | |
| 266 | − </row></tbody></tgroup></informaltable> | |
| 267 | −<para>SYNOPSIS | |
| 268 | −</para> | |
| 269 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 270 | − align="char"> | |
| 271 | −<para>int ioctl(int fd, int request = <link linkend="FE_READ_SNR">FE_READ_SNR</link>, uint16_t | |
| 272 | − ⋆snr);</para> | |
| 273 | −</entry> | |
| 274 | − </row></tbody></tgroup></informaltable> | |
| 275 | −<para>PARAMETERS | |
| 276 | −</para> | |
| 277 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 278 | − align="char"> | |
| 279 | −<para>int fd</para> | |
| 280 | −</entry><entry | |
| 281 | − align="char"> | |
| 282 | −<para>File descriptor returned by a previous call to open().</para> | |
| 283 | −</entry> | |
| 284 | − </row><row><entry | |
| 285 | − align="char"> | |
| 286 | −<para>int request</para> | |
| 287 | −</entry><entry | |
| 288 | − align="char"> | |
| 289 | −<para>Equals <link linkend="FE_READ_SNR">FE_READ_SNR</link> for this command.</para> | |
| 290 | −</entry> | |
| 291 | − </row><row><entry | |
| 292 | − align="char"> | |
| 293 | −<para>uint16_t *snr</para> | |
| 294 | −</entry><entry | |
| 295 | − align="char"> | |
| 296 | −<para>The signal-to-noise ratio is stored into *snr.</para> | |
| 297 | −</entry> | |
| 298 | − </row></tbody></tgroup></informaltable> | |
| 299 | − | |
| 300 | −&return-value-dvb; | |
| 301 | −</section> | |
| 302 | − | |
| 303 | −<section id="FE_READ_SIGNAL_STRENGTH"> | |
| 304 | −<title>FE_READ_SIGNAL_STRENGTH</title> | |
| 305 | −<para>DESCRIPTION | |
| 306 | −</para> | |
| 307 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 308 | − align="char"> | |
| 309 | −<para>This ioctl call returns the signal strength value for the signal currently received | |
| 310 | − by the front-end. For this command, read-only access to the device is sufficient.</para> | |
| 311 | −</entry> | |
| 312 | − </row></tbody></tgroup></informaltable> | |
| 313 | −<para>SYNOPSIS | |
| 314 | −</para> | |
| 315 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 316 | − align="char"> | |
| 317 | −<para>int ioctl( int fd, int request = | |
| 318 | − <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link>, uint16_t ⋆strength);</para> | |
| 319 | −</entry> | |
| 320 | − </row></tbody></tgroup></informaltable> | |
| 321 | − | |
| 322 | −<para>PARAMETERS | |
| 323 | −</para> | |
| 324 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 325 | − align="char"> | |
| 326 | −<para>int fd</para> | |
| 327 | −</entry><entry | |
| 328 | − align="char"> | |
| 329 | −<para>File descriptor returned by a previous call to open().</para> | |
| 330 | −</entry> | |
| 331 | − </row><row><entry | |
| 332 | − align="char"> | |
| 333 | −<para>int request</para> | |
| 334 | −</entry><entry | |
| 335 | − align="char"> | |
| 336 | −<para>Equals <link linkend="FE_READ_SIGNAL_STRENGTH">FE_READ_SIGNAL_STRENGTH</link> for this | |
| 337 | − command.</para> | |
| 338 | −</entry> | |
| 339 | − </row><row><entry | |
| 340 | − align="char"> | |
| 341 | −<para>uint16_t *strength</para> | |
| 342 | −</entry><entry | |
| 343 | − align="char"> | |
| 344 | −<para>The signal strength value is stored into *strength.</para> | |
| 345 | −</entry> | |
| 346 | − </row></tbody></tgroup></informaltable> | |
| 347 | − | |
| 348 | −&return-value-dvb; | |
| 349 | −</section> | |
| 350 | − | |
| 351 | −<section id="FE_READ_UNCORRECTED_BLOCKS"> | |
| 352 | −<title>FE_READ_UNCORRECTED_BLOCKS</title> | |
| 353 | −<para>DESCRIPTION | |
| 354 | −</para> | |
| 355 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 356 | − align="char"> | |
| 357 | −<para>This ioctl call returns the number of uncorrected blocks detected by the device | |
| 358 | − driver during its lifetime. For meaningful measurements, the increment in block | |
| 359 | − count during a specific time interval should be calculated. For this command, | |
| 360 | − read-only access to the device is sufficient.</para> | |
| 361 | −</entry> | |
| 362 | − </row><row><entry | |
| 363 | − align="char"> | |
| 364 | −<para>Note that the counter will wrap to zero after its maximum count has been | |
| 365 | − reached.</para> | |
| 366 | −</entry> | |
| 367 | − </row></tbody></tgroup></informaltable> | |
| 368 | −<para>SYNOPSIS | |
| 369 | −</para> | |
| 370 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 371 | − align="char"> | |
| 372 | −<para>int ioctl( int fd, int request = | |
| 373 | − <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link>, uint32_t ⋆ublocks);</para> | |
| 374 | −</entry> | |
| 375 | − </row></tbody></tgroup></informaltable> | |
| 376 | −<para>PARAMETERS | |
| 377 | −</para> | |
| 378 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 379 | − align="char"> | |
| 380 | −<para>int fd</para> | |
| 381 | −</entry><entry | |
| 382 | − align="char"> | |
| 383 | −<para>File descriptor returned by a previous call to open().</para> | |
| 384 | −</entry> | |
| 385 | − </row><row><entry | |
| 386 | − align="char"> | |
| 387 | −<para>int request</para> | |
| 388 | −</entry><entry | |
| 389 | − align="char"> | |
| 390 | −<para>Equals <link linkend="FE_READ_UNCORRECTED_BLOCKS">FE_READ_UNCORRECTED_BLOCKS</link> for this | |
| 391 | − command.</para> | |
| 392 | −</entry> | |
| 393 | − </row><row><entry | |
| 394 | − align="char"> | |
| 395 | −<para>uint32_t *ublocks</para> | |
| 396 | −</entry><entry | |
| 397 | − align="char"> | |
| 398 | −<para>The total number of uncorrected blocks seen by the driver | |
| 399 | − so far.</para> | |
| 400 | −</entry> | |
| 401 | − </row></tbody></tgroup></informaltable> | |
| 402 | − | |
| 403 | −&return-value-dvb; | |
| 404 | −</section> | |
| 405 | − | |
| 406 | −<section id="FE_SET_FRONTEND"> | |
| 407 | −<title>FE_SET_FRONTEND</title> | |
| 408 | −<para>DESCRIPTION | |
| 409 | −</para> | |
| 410 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 411 | − align="char"> | |
| 412 | −<para>This ioctl call starts a tuning operation using specified parameters. The result | |
| 413 | − of this call will be successful if the parameters were valid and the tuning could | |
| 414 | − be initiated. The result of the tuning operation in itself, however, will arrive | |
| 415 | − asynchronously as an event (see documentation for <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> and | |
| 416 | − FrontendEvent.) If a new <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> operation is initiated before | |
| 417 | − the previous one was completed, the previous operation will be aborted in favor | |
| 418 | − of the new one. This command requires read/write access to the device.</para> | |
| 419 | −</entry> | |
| 420 | − </row></tbody></tgroup></informaltable> | |
| 421 | − | |
| 422 | −<para>SYNOPSIS | |
| 423 | −</para> | |
| 424 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 425 | − align="char"> | |
| 426 | −<para>int ioctl(int fd, int request = <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link>, | |
| 427 | − struct dvb_frontend_parameters ⋆p);</para> | |
| 428 | −</entry> | |
| 429 | − </row></tbody></tgroup></informaltable> | |
| 430 | −<para>PARAMETERS | |
| 431 | −</para> | |
| 432 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 433 | − align="char"> | |
| 434 | −<para>int fd</para> | |
| 435 | −</entry><entry | |
| 436 | − align="char"> | |
| 437 | −<para>File descriptor returned by a previous call to open().</para> | |
| 438 | −</entry> | |
| 439 | − </row><row><entry | |
| 440 | − align="char"> | |
| 441 | −<para>int request</para> | |
| 442 | −</entry><entry | |
| 443 | − align="char"> | |
| 444 | −<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para> | |
| 445 | −</entry> | |
| 446 | − </row><row><entry | |
| 447 | − align="char"> | |
| 448 | −<para>struct | |
| 449 | − dvb_frontend_parameters | |
| 450 | − *p</para> | |
| 451 | −</entry><entry | |
| 452 | − align="char"> | |
| 453 | −<para>Points to parameters for tuning operation.</para> | |
| 454 | −</entry> | |
| 455 | − </row></tbody></tgroup></informaltable> | |
| 456 | − | |
| 457 | −&return-value-dvb; | |
| 458 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 459 | − align="char"> | |
| 460 | −<para>EINVAL</para> | |
| 461 | −</entry><entry | |
| 462 | − align="char"> | |
| 463 | −<para>Maximum supported symbol rate reached.</para> | |
| 464 | −</entry> | |
| 465 | −</row></tbody></tgroup></informaltable> | |
| 466 | −</section> | |
| 467 | − | |
| 468 | −<section id="FE_GET_FRONTEND"> | |
| 469 | −<title>FE_GET_FRONTEND</title> | |
| 470 | −<para>DESCRIPTION | |
| 471 | −</para> | |
| 472 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 473 | − align="char"> | |
| 474 | −<para>This ioctl call queries the currently effective frontend parameters. For this | |
| 475 | − command, read-only access to the device is sufficient.</para> | |
| 476 | −</entry> | |
| 477 | − </row></tbody></tgroup></informaltable> | |
| 478 | − | |
| 479 | −<para>SYNOPSIS | |
| 480 | −</para> | |
| 481 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 482 | − align="char"> | |
| 483 | −<para>int ioctl(int fd, int request = <link linkend="FE_GET_FRONTEND">FE_GET_FRONTEND</link>, | |
| 484 | − struct dvb_frontend_parameters ⋆p);</para> | |
| 485 | −</entry> | |
| 486 | − </row></tbody></tgroup></informaltable> | |
| 487 | − | |
| 488 | −<para>PARAMETERS | |
| 489 | −</para> | |
| 490 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 491 | − align="char"> | |
| 492 | −<para>int fd</para> | |
| 493 | −</entry><entry | |
| 494 | − align="char"> | |
| 495 | −<para>File descriptor returned by a previous call to open().</para> | |
| 496 | −</entry> | |
| 497 | − </row><row><entry | |
| 498 | − align="char"> | |
| 499 | −<para>int request</para> | |
| 500 | −</entry><entry | |
| 501 | − align="char"> | |
| 502 | −<para>Equals <link linkend="FE_SET_FRONTEND">FE_SET_FRONTEND</link> for this command.</para> | |
| 503 | −</entry> | |
| 504 | − </row><row><entry | |
| 505 | − align="char"> | |
| 506 | −<para>struct | |
| 507 | − dvb_frontend_parameters | |
| 508 | − *p</para> | |
| 509 | −</entry><entry | |
| 510 | − align="char"> | |
| 511 | −<para>Points to parameters for tuning operation.</para> | |
| 512 | −</entry> | |
| 513 | − </row></tbody></tgroup></informaltable> | |
| 514 | − | |
| 515 | −&return-value-dvb; | |
| 516 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 517 | − align="char"> | |
| 518 | −<para>EINVAL</para> | |
| 519 | −</entry><entry | |
| 520 | − align="char"> | |
| 521 | −<para>Maximum supported symbol rate reached.</para> | |
| 522 | −</entry> | |
| 523 | − </row></tbody></tgroup></informaltable> | |
| 524 | − | |
| 525 | −</section> | |
| 526 | − | |
| 527 | −<section id="FE_GET_EVENT"> | |
| 528 | −<title>FE_GET_EVENT</title> | |
| 529 | −<para>DESCRIPTION | |
| 530 | −</para> | |
| 531 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 532 | − align="char"> | |
| 533 | −<para>This ioctl call returns a frontend event if available. If an event is not | |
| 534 | − available, the behavior depends on whether the device is in blocking or | |
| 535 | − non-blocking mode. In the latter case, the call fails immediately with errno | |
| 536 | − set to EWOULDBLOCK. In the former case, the call blocks until an event | |
| 537 | − becomes available.</para> | |
| 538 | −</entry> | |
| 539 | − </row><row><entry | |
| 540 | − align="char"> | |
| 541 | −<para>The standard Linux poll() and/or select() system calls can be used with the | |
| 542 | − device file descriptor to watch for new events. For select(), the file descriptor | |
| 543 | − should be included in the exceptfds argument, and for poll(), POLLPRI should | |
| 544 | − be specified as the wake-up condition. Since the event queue allocated is | |
| 545 | − rather small (room for 8 events), the queue must be serviced regularly to avoid | |
| 546 | − overflow. If an overflow happens, the oldest event is discarded from the queue, | |
| 547 | − and an error (EOVERFLOW) occurs the next time the queue is read. After | |
| 548 | − reporting the error condition in this fashion, subsequent | |
| 549 | − <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> | |
| 550 | − calls will return events from the queue as usual.</para> | |
| 551 | −</entry> | |
| 552 | − </row><row><entry | |
| 553 | − align="char"> | |
| 554 | −<para>For the sake of implementation simplicity, this command requires read/write | |
| 555 | − access to the device.</para> | |
| 556 | −</entry> | |
| 557 | − </row></tbody></tgroup></informaltable> | |
| 558 | − | |
| 559 | −<para>SYNOPSIS | |
| 560 | −</para> | |
| 561 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 562 | − align="char"> | |
| 563 | −<para>int ioctl(int fd, int request = QPSK_GET_EVENT, | |
| 564 | − struct dvb_frontend_event ⋆ev);</para> | |
| 565 | −</entry> | |
| 566 | − </row></tbody></tgroup></informaltable> | |
| 567 | − | |
| 568 | −<para>PARAMETERS | |
| 569 | −</para> | |
| 570 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 571 | − align="char"> | |
| 572 | −<para>int fd</para> | |
| 573 | −</entry><entry | |
| 574 | − align="char"> | |
| 575 | −<para>File descriptor returned by a previous call to open().</para> | |
| 576 | −</entry> | |
| 577 | − </row><row><entry | |
| 578 | − align="char"> | |
| 579 | −<para>int request</para> | |
| 580 | −</entry><entry | |
| 581 | − align="char"> | |
| 582 | −<para>Equals <link linkend="FE_GET_EVENT">FE_GET_EVENT</link> for this command.</para> | |
| 583 | −</entry> | |
| 584 | − </row><row><entry | |
| 585 | − align="char"> | |
| 586 | −<para>struct | |
| 587 | − dvb_frontend_event | |
| 588 | − *ev</para> | |
| 589 | −</entry><entry | |
| 590 | − align="char"> | |
| 591 | −<para>Points to the location where the event,</para> | |
| 592 | −</entry> | |
| 593 | − </row><row><entry | |
| 594 | − align="char"> | |
| 595 | −</entry><entry | |
| 596 | − align="char"> | |
| 597 | −<para>if any, is to be stored.</para> | |
| 598 | −</entry> | |
| 599 | − </row></tbody></tgroup></informaltable> | |
| 600 | − | |
| 601 | −&return-value-dvb; | |
| 602 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 603 | − align="char"> | |
| 604 | −<para>EWOULDBLOCK</para> | |
| 605 | −</entry><entry | |
| 606 | − align="char"> | |
| 607 | −<para>There is no event pending, and the device is in | |
| 608 | − non-blocking mode.</para> | |
| 609 | −</entry> | |
| 610 | − </row><row><entry | |
| 611 | − align="char"> | |
| 612 | −<para>EOVERFLOW</para> | |
| 613 | −</entry><entry | |
| 614 | − align="char"> | |
| 615 | −<para>Overflow in event queue - one or more events were lost.</para> | |
| 616 | −</entry> | |
| 617 | −</row></tbody></tgroup></informaltable> | |
| 618 | −</section> | |
| 619 | − | |
| 620 | −<section id="FE_DISHNETWORK_SEND_LEGACY_CMD"> | |
| 621 | − <title>FE_DISHNETWORK_SEND_LEGACY_CMD</title> | |
| 622 | −<para>DESCRIPTION</para> | |
| 623 | −<informaltable><tgroup cols="1"><tbody><row> | |
| 624 | −<entry align="char"> | |
| 625 | −<para>WARNING: This is a very obscure legacy command, used only at stv0299 driver. Should not be used on newer drivers.</para> | |
| 626 | −<para>It provides a non-standard method for selecting Diseqc voltage on the frontend, for Dish Network legacy switches.</para> | |
| 627 | −<para>As support for this ioctl were added in 2004, this means that such dishes were already legacy in 2004.</para> | |
| 628 | −</entry> | |
| 629 | −</row></tbody></tgroup></informaltable> | |
| 630 | − | |
| 631 | −<para>SYNOPSIS</para> | |
| 632 | −<informaltable><tgroup cols="1"><tbody><row> | |
| 633 | −<entry align="char"> | |
| 634 | −<para>int ioctl(int fd, int request = | |
| 635 | − <link linkend="FE_DISHNETWORK_SEND_LEGACY_CMD">FE_DISHNETWORK_SEND_LEGACY_CMD</link>, unsigned long cmd);</para> | |
| 636 | −</entry> | |
| 637 | −</row></tbody></tgroup></informaltable> | |
| 638 | − | |
| 639 | −<para>PARAMETERS</para> | |
| 640 | −<informaltable><tgroup cols="2"><tbody><row> | |
| 641 | −<entry align="char"> | |
| 642 | − <para>unsigned long cmd</para> | |
| 643 | −</entry> | |
| 644 | −<entry align="char"> | |
| 645 | −<para> | |
| 646 | −sends the specified raw cmd to the dish via DISEqC. | |
| 647 | −</para> | |
| 648 | −</entry> | |
| 649 | − </row></tbody></tgroup></informaltable> | |
| 650 | − | |
| 651 | −&return-value-dvb; | |
| 652 | −</section> | |
| 653 | − | |
| 654 | −</section> | |
| @@ -1,211 +0,0 @@ | ||
| 1 | −<title>Introduction</title> | |
| 2 | − | |
| 3 | −<section id="requisites"> | |
| 4 | −<title>What you need to know</title> | |
| 5 | − | |
| 6 | −<para>The reader of this document is required to have some knowledge in | |
| 7 | −the area of digital video broadcasting (DVB) and should be familiar with | |
| 8 | −part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e | |
| 9 | −you should know what a program/transport stream (PS/TS) is and what is | |
| 10 | −meant by a packetized elementary stream (PES) or an I-frame.</para> | |
| 11 | − | |
| 12 | −<para>Various DVB standards documents are available from | |
| 13 | −<ulink url="http://www.dvb.org" /> and/or | |
| 14 | −<ulink url="http://www.etsi.org" />.</para> | |
| 15 | − | |
| 16 | −<para>It is also necessary to know how to access unix/linux devices and | |
| 17 | −how to use ioctl calls. This also includes the knowledge of C or C++. | |
| 18 | −</para> | |
| 19 | −</section> | |
| 20 | − | |
| 21 | −<section id="history"> | |
| 22 | −<title>History</title> | |
| 23 | − | |
| 24 | −<para>The first API for DVB cards we used at Convergence in late 1999 | |
| 25 | −was an extension of the Video4Linux API which was primarily developed | |
| 26 | −for frame grabber cards. As such it was not really well suited to be | |
| 27 | −used for DVB cards and their new features like recording MPEG streams | |
| 28 | −and filtering several section and PES data streams at the same time. | |
| 29 | −</para> | |
| 30 | − | |
| 31 | −<para>In early 2000, we were approached by Nokia with a proposal for a | |
| 32 | −new standard Linux DVB API. As a commitment to the development of | |
| 33 | −terminals based on open standards, Nokia and Convergence made it | |
| 34 | −available to all Linux developers and published it on | |
| 35 | −<ulink url="https://linuxtv.org" /> in September 2000. | |
| 36 | −Convergence is the maintainer of the Linux DVB API. Together with the | |
| 37 | −LinuxTV community (i.e. you, the reader of this document), the Linux DVB | |
| 38 | −API will be constantly reviewed and improved. With the Linux driver for | |
| 39 | −the Siemens/Hauppauge DVB PCI card Convergence provides a first | |
| 40 | −implementation of the Linux DVB API.</para> | |
| 41 | −</section> | |
| 42 | − | |
| 43 | −<section id="overview"> | |
| 44 | −<title>Overview</title> | |
| 45 | − | |
| 46 | −<figure id="stb_components"> | |
| 47 | −<title>Components of a DVB card/STB</title> | |
| 48 | −<mediaobject> | |
| 49 | −<imageobject> | |
| 50 | −<imagedata fileref="dvbstb.pdf" format="PS" /> | |
| 51 | −</imageobject> | |
| 52 | −<imageobject> | |
| 53 | −<imagedata fileref="dvbstb.png" format="PNG" /> | |
| 54 | −</imageobject> | |
| 55 | −</mediaobject> | |
| 56 | −</figure> | |
| 57 | − | |
| 58 | −<para>A DVB PCI card or DVB set-top-box (STB) usually consists of the | |
| 59 | −following main hardware components: </para> | |
| 60 | − | |
| 61 | −<itemizedlist> | |
| 62 | − <listitem> | |
| 63 | − | |
| 64 | −<para>Frontend consisting of tuner and DVB demodulator</para> | |
| 65 | − | |
| 66 | −<para>Here the raw signal reaches the DVB hardware from a satellite dish | |
| 67 | −or antenna or directly from cable. The frontend down-converts and | |
| 68 | −demodulates this signal into an MPEG transport stream (TS). In case of a | |
| 69 | −satellite frontend, this includes a facility for satellite equipment | |
| 70 | −control (SEC), which allows control of LNB polarization, multi feed | |
| 71 | −switches or dish rotors.</para> | |
| 72 | − | |
| 73 | −</listitem> | |
| 74 | − <listitem> | |
| 75 | − | |
| 76 | −<para>Conditional Access (CA) hardware like CI adapters and smartcard slots | |
| 77 | −</para> | |
| 78 | − | |
| 79 | −<para>The complete TS is passed through the CA hardware. Programs to | |
| 80 | −which the user has access (controlled by the smart card) are decoded in | |
| 81 | −real time and re-inserted into the TS.</para> | |
| 82 | − | |
| 83 | −</listitem> | |
| 84 | − <listitem> | |
| 85 | − <para>Demultiplexer which filters the incoming DVB stream</para> | |
| 86 | − | |
| 87 | −<para>The demultiplexer splits the TS into its components like audio and | |
| 88 | −video streams. Besides usually several of such audio and video streams | |
| 89 | −it also contains data streams with information about the programs | |
| 90 | −offered in this or other streams of the same provider.</para> | |
| 91 | − | |
| 92 | −</listitem> | |
| 93 | −<listitem> | |
| 94 | − | |
| 95 | −<para>MPEG2 audio and video decoder</para> | |
| 96 | − | |
| 97 | −<para>The main targets of the demultiplexer are the MPEG2 audio and | |
| 98 | −video decoders. After decoding they pass on the uncompressed audio and | |
| 99 | −video to the computer screen or (through a PAL/NTSC encoder) to a TV | |
| 100 | −set.</para> | |
| 101 | − | |
| 102 | − | |
| 103 | −</listitem> | |
| 104 | −</itemizedlist> | |
| 105 | − | |
| 106 | −<para><xref linkend="stb_components" /> shows a crude schematic of the control and data flow | |
| 107 | −between those components.</para> | |
| 108 | − | |
| 109 | −<para>On a DVB PCI card not all of these have to be present since some | |
| 110 | −functionality can be provided by the main CPU of the PC (e.g. MPEG | |
| 111 | −picture and sound decoding) or is not needed (e.g. for data-only uses | |
| 112 | −like “internet over satellite”). Also not every card or STB | |
| 113 | −provides conditional access hardware.</para> | |
| 114 | − | |
| 115 | −</section> | |
| 116 | − | |
| 117 | −<section id="dvb_devices"> | |
| 118 | −<title>Linux DVB Devices</title> | |
| 119 | − | |
| 120 | −<para>The Linux DVB API lets you control these hardware components | |
| 121 | −through currently six Unix-style character devices for video, audio, | |
| 122 | −frontend, demux, CA and IP-over-DVB networking. The video and audio | |
| 123 | −devices control the MPEG2 decoder hardware, the frontend device the | |
| 124 | −tuner and the DVB demodulator. The demux device gives you control over | |
| 125 | −the PES and section filters of the hardware. If the hardware does not | |
| 126 | −support filtering these filters can be implemented in software. Finally, | |
| 127 | −the CA device controls all the conditional access capabilities of the | |
| 128 | −hardware. It can depend on the individual security requirements of the | |
| 129 | −platform, if and how many of the CA functions are made available to the | |
| 130 | −application through this device.</para> | |
| 131 | − | |
| 132 | −<para>All devices can be found in the <constant>/dev</constant> | |
| 133 | −tree under <constant>/dev/dvb</constant>. The individual devices | |
| 134 | −are called:</para> | |
| 135 | − | |
| 136 | −<itemizedlist> | |
| 137 | −<listitem> | |
| 138 | − | |
| 139 | −<para><constant>/dev/dvb/adapterN/audioM</constant>,</para> | |
| 140 | −</listitem> | |
| 141 | −<listitem> | |
| 142 | −<para><constant>/dev/dvb/adapterN/videoM</constant>,</para> | |
| 143 | −</listitem> | |
| 144 | −<listitem> | |
| 145 | −<para><constant>/dev/dvb/adapterN/frontendM</constant>,</para> | |
| 146 | −</listitem> | |
| 147 | − <listitem> | |
| 148 | − | |
| 149 | −<para><constant>/dev/dvb/adapterN/netM</constant>,</para> | |
| 150 | −</listitem> | |
| 151 | − <listitem> | |
| 152 | − | |
| 153 | −<para><constant>/dev/dvb/adapterN/demuxM</constant>,</para> | |
| 154 | −</listitem> | |
| 155 | − <listitem> | |
| 156 | − | |
| 157 | −<para><constant>/dev/dvb/adapterN/dvrM</constant>,</para> | |
| 158 | −</listitem> | |
| 159 | − <listitem> | |
| 160 | − | |
| 161 | −<para><constant>/dev/dvb/adapterN/caM</constant>,</para></listitem></itemizedlist> | |
| 162 | − | |
| 163 | −<para>where N enumerates the DVB PCI cards in a system starting | |
| 164 | −from 0, and M enumerates the devices of each type within each | |
| 165 | −adapter, starting from 0, too. We will omit the “ | |
| 166 | −<constant>/dev/dvb/adapterN/</constant>” in the further discussion | |
| 167 | −of these devices.</para> | |
| 168 | − | |
| 169 | −<para>More details about the data structures and function calls of all | |
| 170 | −the devices are described in the following chapters.</para> | |
| 171 | − | |
| 172 | −</section> | |
| 173 | − | |
| 174 | −<section id="include_files"> | |
| 175 | −<title>API include files</title> | |
| 176 | − | |
| 177 | −<para>For each of the DVB devices a corresponding include file exists. | |
| 178 | −The DVB API include files should be included in application sources with | |
| 179 | −a partial path like:</para> | |
| 180 | − | |
| 181 | −<programlisting> | |
| 182 | − #include <linux/dvb/audio.h> | |
| 183 | −</programlisting> | |
| 184 | −<programlisting> | |
| 185 | − #include <linux/dvb/ca.h> | |
| 186 | −</programlisting> | |
| 187 | −<programlisting> | |
| 188 | − #include <linux/dvb/dmx.h> | |
| 189 | −</programlisting> | |
| 190 | −<programlisting> | |
| 191 | − #include <linux/dvb/frontend.h> | |
| 192 | −</programlisting> | |
| 193 | −<programlisting> | |
| 194 | − #include <linux/dvb/net.h> | |
| 195 | −</programlisting> | |
| 196 | −<programlisting> | |
| 197 | − #include <linux/dvb/osd.h> | |
| 198 | −</programlisting> | |
| 199 | −<programlisting> | |
| 200 | − #include <linux/dvb/video.h> | |
| 201 | −</programlisting> | |
| 202 | − | |
| 203 | −<para>To enable applications to support different API version, an | |
| 204 | −additional include file | |
| 205 | −<constant>linux/dvb/version.h</constant> exists, which defines the | |
| 206 | −constant <constant>DVB_API_VERSION</constant>. This document | |
| 207 | −describes <constant>DVB_API_VERSION 5.10</constant>. | |
| 208 | −</para> | |
| 209 | − | |
| 210 | −</section> | |
| 211 | − | |
| @@ -1,238 +0,0 @@ | ||
| 1 | −<title>DVB Network API</title> | |
| 2 | −<para>The DVB net device controls the mapping of data packages that are | |
| 3 | − part of a transport stream to be mapped into a virtual network interface, | |
| 4 | − visible through the standard Linux network protocol stack.</para> | |
| 5 | −<para>Currently, two encapsulations are supported:</para> | |
| 6 | −<itemizedlist> | |
| 7 | − <listitem><para><ulink url="http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation"> | |
| 8 | − Multi Protocol Encapsulation (MPE)</ulink></para></listitem> | |
| 9 | − <listitem><para><ulink url="http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation"> | |
| 10 | − Ultra Lightweight Encapsulation (ULE)</ulink></para></listitem> | |
| 11 | −</itemizedlist> | |
| 12 | − | |
| 13 | −<para>In order to create the Linux virtual network interfaces, an application | |
| 14 | − needs to tell to the Kernel what are the PIDs and the encapsulation types | |
| 15 | − that are present on the transport stream. This is done through | |
| 16 | − <constant>/dev/dvb/adapter?/net?</constant> device node. | |
| 17 | − The data will be available via virtual <constant>dvb?_?</constant> | |
| 18 | − network interfaces, and will be controlled/routed via the standard | |
| 19 | − ip tools (like ip, route, netstat, ifconfig, etc).</para> | |
| 20 | −<para> Data types and and ioctl definitions are defined via | |
| 21 | − <constant>linux/dvb/net.h</constant> header.</para> | |
| 22 | − | |
| 23 | −<section id="net_fcalls"> | |
| 24 | −<title>DVB net Function Calls</title> | |
| 25 | − | |
| 26 | − | |
| 27 | −<refentry id="NET_ADD_IF"> | |
| 28 | − <refmeta> | |
| 29 | − <refentrytitle>ioctl NET_ADD_IF</refentrytitle> | |
| 30 | − &manvol; | |
| 31 | − </refmeta> | |
| 32 | − | |
| 33 | − <refnamediv> | |
| 34 | − <refname>NET_ADD_IF</refname> | |
| 35 | − <refpurpose>Creates a new network interface for a given Packet ID.</refpurpose> | |
| 36 | − </refnamediv> | |
| 37 | − | |
| 38 | − <refsynopsisdiv> | |
| 39 | − <funcsynopsis> | |
| 40 | − <funcprototype> | |
| 41 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 42 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 43 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 44 | − <paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef> | |
| 45 | − </funcprototype> | |
| 46 | − </funcsynopsis> | |
| 47 | − </refsynopsisdiv> | |
| 48 | − | |
| 49 | − <refsect1> | |
| 50 | − <title>Arguments</title> | |
| 51 | − <variablelist> | |
| 52 | − <varlistentry> | |
| 53 | − <term><parameter>fd</parameter></term> | |
| 54 | − <listitem> | |
| 55 | − <para>&fe_fd;</para> | |
| 56 | − </listitem> | |
| 57 | − </varlistentry> | |
| 58 | − <varlistentry> | |
| 59 | − <term><parameter>request</parameter></term> | |
| 60 | − <listitem> | |
| 61 | − <para>FE_SET_TONE</para> | |
| 62 | − </listitem> | |
| 63 | − </varlistentry> | |
| 64 | − <varlistentry> | |
| 65 | − <term><parameter>net_if</parameter></term> | |
| 66 | − <listitem> | |
| 67 | − <para>pointer to &dvb-net-if;</para> | |
| 68 | − </listitem> | |
| 69 | − </varlistentry> | |
| 70 | − </variablelist> | |
| 71 | − </refsect1> | |
| 72 | − | |
| 73 | − <refsect1> | |
| 74 | − <title>Description</title> | |
| 75 | − | |
| 76 | −<para>The NET_ADD_IF ioctl system call selects the Packet ID (PID) that | |
| 77 | − contains a TCP/IP traffic, the type of encapsulation to be used (MPE or ULE) | |
| 78 | − and the interface number for the new interface to be created. When the | |
| 79 | − system call successfully returns, a new virtual network interface is created.</para> | |
| 80 | −<para>The &dvb-net-if;::ifnum field will be filled with the number of the | |
| 81 | − created interface.</para> | |
| 82 | − | |
| 83 | −&return-value-dvb; | |
| 84 | −</refsect1> | |
| 85 | − | |
| 86 | −<refsect1 id="dvb-net-if-t"> | |
| 87 | −<title>struct <structname>dvb_net_if</structname> description</title> | |
| 88 | − | |
| 89 | −<table pgwide="1" frame="none" id="dvb-net-if"> | |
| 90 | − <title>struct <structname>dvb_net_if</structname></title> | |
| 91 | − <tgroup cols="2"> | |
| 92 | − &cs-def; | |
| 93 | − <thead> | |
| 94 | − <row> | |
| 95 | − <entry>ID</entry> | |
| 96 | − <entry>Description</entry> | |
| 97 | − </row> | |
| 98 | − </thead> | |
| 99 | − <tbody valign="top"> | |
| 100 | − <row> | |
| 101 | − <entry align="char">pid</entry> | |
| 102 | − <entry align="char">Packet ID (PID) of the MPEG-TS that contains | |
| 103 | − data</entry> | |
| 104 | − </row><row> | |
| 105 | − <entry align="char">ifnum</entry> | |
| 106 | − <entry align="char">number of the DVB interface.</entry> | |
| 107 | − </row><row> | |
| 108 | − <entry align="char">feedtype</entry> | |
| 109 | − <entry align="char">Encapsulation type of the feed. It can be: | |
| 110 | − <constant>DVB_NET_FEEDTYPE_MPE</constant> for MPE encoding | |
| 111 | − or | |
| 112 | − <constant>DVB_NET_FEEDTYPE_ULE</constant> for ULE encoding. | |
| 113 | − </entry> | |
| 114 | − </row> | |
| 115 | − </tbody> | |
| 116 | − </tgroup> | |
| 117 | −</table> | |
| 118 | −</refsect1> | |
| 119 | −</refentry> | |
| 120 | − | |
| 121 | −<refentry id="NET_REMOVE_IF"> | |
| 122 | − <refmeta> | |
| 123 | − <refentrytitle>ioctl NET_REMOVE_IF</refentrytitle> | |
| 124 | − &manvol; | |
| 125 | − </refmeta> | |
| 126 | − | |
| 127 | − <refnamediv> | |
| 128 | − <refname>NET_REMOVE_IF</refname> | |
| 129 | − <refpurpose>Removes a network interface.</refpurpose> | |
| 130 | − </refnamediv> | |
| 131 | − | |
| 132 | − <refsynopsisdiv> | |
| 133 | − <funcsynopsis> | |
| 134 | − <funcprototype> | |
| 135 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 136 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 137 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 138 | − <paramdef>int <parameter>ifnum</parameter></paramdef> | |
| 139 | − </funcprototype> | |
| 140 | − </funcsynopsis> | |
| 141 | − </refsynopsisdiv> | |
| 142 | − | |
| 143 | − <refsect1> | |
| 144 | − <title>Arguments</title> | |
| 145 | − <variablelist> | |
| 146 | − <varlistentry> | |
| 147 | − <term><parameter>fd</parameter></term> | |
| 148 | − <listitem> | |
| 149 | − <para>&fe_fd;</para> | |
| 150 | − </listitem> | |
| 151 | − </varlistentry> | |
| 152 | − <varlistentry> | |
| 153 | − <term><parameter>request</parameter></term> | |
| 154 | − <listitem> | |
| 155 | − <para>FE_SET_TONE</para> | |
| 156 | − </listitem> | |
| 157 | − </varlistentry> | |
| 158 | − <varlistentry> | |
| 159 | − <term><parameter>net_if</parameter></term> | |
| 160 | − <listitem> | |
| 161 | − <para>number of the interface to be removed</para> | |
| 162 | − </listitem> | |
| 163 | − </varlistentry> | |
| 164 | − </variablelist> | |
| 165 | − </refsect1> | |
| 166 | − | |
| 167 | − <refsect1> | |
| 168 | − <title>Description</title> | |
| 169 | − | |
| 170 | −<para>The NET_REMOVE_IF ioctl deletes an interface previously created | |
| 171 | − via &NET-ADD-IF;.</para> | |
| 172 | − | |
| 173 | −&return-value-dvb; | |
| 174 | −</refsect1> | |
| 175 | −</refentry> | |
| 176 | − | |
| 177 | − | |
| 178 | −<refentry id="NET_GET_IF"> | |
| 179 | − <refmeta> | |
| 180 | − <refentrytitle>ioctl NET_GET_IF</refentrytitle> | |
| 181 | − &manvol; | |
| 182 | − </refmeta> | |
| 183 | − | |
| 184 | − <refnamediv> | |
| 185 | − <refname>NET_GET_IF</refname> | |
| 186 | − <refpurpose>Read the configuration data of an interface created via | |
| 187 | − &NET-ADD-IF;.</refpurpose> | |
| 188 | − </refnamediv> | |
| 189 | − | |
| 190 | − <refsynopsisdiv> | |
| 191 | − <funcsynopsis> | |
| 192 | − <funcprototype> | |
| 193 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 194 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 195 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 196 | − <paramdef>struct dvb_net_if *<parameter>net_if</parameter></paramdef> | |
| 197 | − </funcprototype> | |
| 198 | − </funcsynopsis> | |
| 199 | − </refsynopsisdiv> | |
| 200 | − | |
| 201 | − <refsect1> | |
| 202 | − <title>Arguments</title> | |
| 203 | − <variablelist> | |
| 204 | − <varlistentry> | |
| 205 | − <term><parameter>fd</parameter></term> | |
| 206 | − <listitem> | |
| 207 | − <para>&fe_fd;</para> | |
| 208 | − </listitem> | |
| 209 | − </varlistentry> | |
| 210 | − <varlistentry> | |
| 211 | − <term><parameter>request</parameter></term> | |
| 212 | − <listitem> | |
| 213 | − <para>FE_SET_TONE</para> | |
| 214 | − </listitem> | |
| 215 | − </varlistentry> | |
| 216 | − <varlistentry> | |
| 217 | − <term><parameter>net_if</parameter></term> | |
| 218 | − <listitem> | |
| 219 | − <para>pointer to &dvb-net-if;</para> | |
| 220 | − </listitem> | |
| 221 | − </varlistentry> | |
| 222 | − </variablelist> | |
| 223 | − </refsect1> | |
| 224 | − | |
| 225 | − <refsect1> | |
| 226 | − <title>Description</title> | |
| 227 | − | |
| 228 | −<para>The NET_GET_IF ioctl uses the interface number given by the | |
| 229 | − &dvb-net-if;::ifnum field and fills the content of &dvb-net-if; with | |
| 230 | − the packet ID and encapsulation type used on such interface. If the | |
| 231 | − interface was not created yet with &NET-ADD-IF;, it will return -1 and | |
| 232 | − fill the <constant>errno</constant> with <constant>EINVAL</constant> | |
| 233 | − error code.</para> | |
| 234 | − | |
| 235 | −&return-value-dvb; | |
| 236 | −</refsect1> | |
| 237 | −</refentry> | |
| 238 | −</section> | |
| @@ -1,1968 +0,0 @@ | ||
| 1 | −<title>DVB Video Device</title> | |
| 2 | −<para>The DVB video device controls the MPEG2 video decoder of the DVB hardware. It | |
| 3 | −can be accessed through <emphasis role="bold">/dev/dvb/adapter0/video0</emphasis>. Data types and and | |
| 4 | −ioctl definitions can be accessed by including <emphasis role="bold">linux/dvb/video.h</emphasis> in your | |
| 5 | −application. | |
| 6 | −</para> | |
| 7 | −<para>Note that the DVB video device only controls decoding of the MPEG video stream, not | |
| 8 | −its presentation on the TV or computer screen. On PCs this is typically handled by an | |
| 9 | −associated video4linux device, e.g. <emphasis role="bold">/dev/video</emphasis>, which allows scaling and defining output | |
| 10 | −windows. | |
| 11 | −</para> | |
| 12 | −<para>Some DVB cards don’t have their own MPEG decoder, which results in the omission of | |
| 13 | −the audio and video device as well as the video4linux device. | |
| 14 | −</para> | |
| 15 | −<para>The ioctls that deal with SPUs (sub picture units) and navigation packets are only | |
| 16 | −supported on some MPEG decoders made for DVD playback. | |
| 17 | −</para> | |
| 18 | −<para> | |
| 19 | −These ioctls were also used by V4L2 to control MPEG decoders implemented in V4L2. The use | |
| 20 | −of these ioctls for that purpose has been made obsolete and proper V4L2 ioctls or controls | |
| 21 | −have been created to replace that functionality.</para> | |
| 22 | −<section id="video_types"> | |
| 23 | −<title>Video Data Types</title> | |
| 24 | − | |
| 25 | −<section id="video-format-t"> | |
| 26 | −<title>video_format_t</title> | |
| 27 | −<para>The <constant>video_format_t</constant> data type defined by | |
| 28 | −</para> | |
| 29 | −<programlisting> | |
| 30 | −typedef enum { | |
| 31 | − VIDEO_FORMAT_4_3, /⋆ Select 4:3 format ⋆/ | |
| 32 | − VIDEO_FORMAT_16_9, /⋆ Select 16:9 format. ⋆/ | |
| 33 | − VIDEO_FORMAT_221_1 /⋆ 2.21:1 ⋆/ | |
| 34 | −} video_format_t; | |
| 35 | −</programlisting> | |
| 36 | −<para>is used in the VIDEO_SET_FORMAT function (??) to tell the driver which aspect ratio | |
| 37 | −the output hardware (e.g. TV) has. It is also used in the data structures video_status | |
| 38 | −(??) returned by VIDEO_GET_STATUS (??) and video_event (??) returned by | |
| 39 | −VIDEO_GET_EVENT (??) which report about the display format of the current video | |
| 40 | −stream. | |
| 41 | −</para> | |
| 42 | −</section> | |
| 43 | − | |
| 44 | −<section id="video-displayformat-t"> | |
| 45 | −<title>video_displayformat_t</title> | |
| 46 | −<para>In case the display format of the video stream and of the display hardware differ the | |
| 47 | −application has to specify how to handle the cropping of the picture. This can be done using | |
| 48 | −the VIDEO_SET_DISPLAY_FORMAT call (??) which accepts | |
| 49 | −</para> | |
| 50 | −<programlisting> | |
| 51 | −typedef enum { | |
| 52 | − VIDEO_PAN_SCAN, /⋆ use pan and scan format ⋆/ | |
| 53 | − VIDEO_LETTER_BOX, /⋆ use letterbox format ⋆/ | |
| 54 | − VIDEO_CENTER_CUT_OUT /⋆ use center cut out format ⋆/ | |
| 55 | −} video_displayformat_t; | |
| 56 | −</programlisting> | |
| 57 | −<para>as argument. | |
| 58 | −</para> | |
| 59 | −</section> | |
| 60 | − | |
| 61 | −<section id="video-stream-source-t"> | |
| 62 | −<title>video_stream_source_t</title> | |
| 63 | −<para>The video stream source is set through the VIDEO_SELECT_SOURCE call and can take | |
| 64 | −the following values, depending on whether we are replaying from an internal (demuxer) or | |
| 65 | −external (user write) source. | |
| 66 | −</para> | |
| 67 | −<programlisting> | |
| 68 | −typedef enum { | |
| 69 | − VIDEO_SOURCE_DEMUX, /⋆ Select the demux as the main source ⋆/ | |
| 70 | − VIDEO_SOURCE_MEMORY /⋆ If this source is selected, the stream | |
| 71 | − comes from the user through the write | |
| 72 | − system call ⋆/ | |
| 73 | −} video_stream_source_t; | |
| 74 | −</programlisting> | |
| 75 | −<para>VIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the | |
| 76 | −DVR device) as the source of the video stream. If VIDEO_SOURCE_MEMORY | |
| 77 | −is selected the stream comes from the application through the <emphasis role="bold">write()</emphasis> system | |
| 78 | −call. | |
| 79 | −</para> | |
| 80 | −</section> | |
| 81 | − | |
| 82 | −<section id="video-play-state-t"> | |
| 83 | −<title>video_play_state_t</title> | |
| 84 | −<para>The following values can be returned by the VIDEO_GET_STATUS call representing the | |
| 85 | −state of video playback. | |
| 86 | −</para> | |
| 87 | −<programlisting> | |
| 88 | −typedef enum { | |
| 89 | − VIDEO_STOPPED, /⋆ Video is stopped ⋆/ | |
| 90 | − VIDEO_PLAYING, /⋆ Video is currently playing ⋆/ | |
| 91 | − VIDEO_FREEZED /⋆ Video is freezed ⋆/ | |
| 92 | −} video_play_state_t; | |
| 93 | −</programlisting> | |
| 94 | −</section> | |
| 95 | − | |
| 96 | −<section id="video-command"> | |
| 97 | −<title>struct video_command</title> | |
| 98 | −<para>The structure must be zeroed before use by the application | |
| 99 | −This ensures it can be extended safely in the future.</para> | |
| 100 | −<programlisting> | |
| 101 | −struct video_command { | |
| 102 | − __u32 cmd; | |
| 103 | − __u32 flags; | |
| 104 | − union { | |
| 105 | − struct { | |
| 106 | − __u64 pts; | |
| 107 | − } stop; | |
| 108 | − | |
| 109 | − struct { | |
| 110 | − /⋆ 0 or 1000 specifies normal speed, | |
| 111 | − 1 specifies forward single stepping, | |
| 112 | − -1 specifies backward single stepping, | |
| 113 | − >>1: playback at speed/1000 of the normal speed, | |
| 114 | − <-1: reverse playback at (-speed/1000) of the normal speed. ⋆/ | |
| 115 | − __s32 speed; | |
| 116 | − __u32 format; | |
| 117 | − } play; | |
| 118 | − | |
| 119 | − struct { | |
| 120 | − __u32 data[16]; | |
| 121 | − } raw; | |
| 122 | − }; | |
| 123 | −}; | |
| 124 | −</programlisting> | |
| 125 | −</section> | |
| 126 | − | |
| 127 | −<section id="video-size-t"> | |
| 128 | −<title>video_size_t</title> | |
| 129 | −<programlisting> | |
| 130 | −typedef struct { | |
| 131 | − int w; | |
| 132 | − int h; | |
| 133 | − video_format_t aspect_ratio; | |
| 134 | −} video_size_t; | |
| 135 | −</programlisting> | |
| 136 | −</section> | |
| 137 | − | |
| 138 | − | |
| 139 | −<section id="video-event"> | |
| 140 | −<title>struct video_event</title> | |
| 141 | −<para>The following is the structure of a video event as it is returned by the VIDEO_GET_EVENT | |
| 142 | −call. | |
| 143 | −</para> | |
| 144 | −<programlisting> | |
| 145 | −struct video_event { | |
| 146 | − __s32 type; | |
| 147 | −#define VIDEO_EVENT_SIZE_CHANGED 1 | |
| 148 | −#define VIDEO_EVENT_FRAME_RATE_CHANGED 2 | |
| 149 | −#define VIDEO_EVENT_DECODER_STOPPED 3 | |
| 150 | −#define VIDEO_EVENT_VSYNC 4 | |
| 151 | − __kernel_time_t timestamp; | |
| 152 | − union { | |
| 153 | − video_size_t size; | |
| 154 | − unsigned int frame_rate; /⋆ in frames per 1000sec ⋆/ | |
| 155 | − unsigned char vsync_field; /⋆ unknown/odd/even/progressive ⋆/ | |
| 156 | − } u; | |
| 157 | −}; | |
| 158 | −</programlisting> | |
| 159 | −</section> | |
| 160 | − | |
| 161 | −<section id="video-status"> | |
| 162 | −<title>struct video_status</title> | |
| 163 | −<para>The VIDEO_GET_STATUS call returns the following structure informing about various | |
| 164 | −states of the playback operation. | |
| 165 | −</para> | |
| 166 | −<programlisting> | |
| 167 | −struct video_status { | |
| 168 | − int video_blank; /⋆ blank video on freeze? ⋆/ | |
| 169 | − video_play_state_t play_state; /⋆ current state of playback ⋆/ | |
| 170 | − video_stream_source_t stream_source; /⋆ current source (demux/memory) ⋆/ | |
| 171 | − video_format_t video_format; /⋆ current aspect ratio of stream ⋆/ | |
| 172 | − video_displayformat_t display_format;/⋆ selected cropping mode ⋆/ | |
| 173 | −}; | |
| 174 | −</programlisting> | |
| 175 | −<para>If video_blank is set video will be blanked out if the channel is changed or if playback is | |
| 176 | −stopped. Otherwise, the last picture will be displayed. play_state indicates if the video is | |
| 177 | −currently frozen, stopped, or being played back. The stream_source corresponds to the seleted | |
| 178 | −source for the video stream. It can come either from the demultiplexer or from memory. | |
| 179 | −The video_format indicates the aspect ratio (one of 4:3 or 16:9) of the currently | |
| 180 | −played video stream. Finally, display_format corresponds to the selected cropping | |
| 181 | −mode in case the source video format is not the same as the format of the output | |
| 182 | −device. | |
| 183 | −</para> | |
| 184 | −</section> | |
| 185 | − | |
| 186 | −<section id="video-still-picture"> | |
| 187 | −<title>struct video_still_picture</title> | |
| 188 | −<para>An I-frame displayed via the VIDEO_STILLPICTURE call is passed on within the | |
| 189 | −following structure. | |
| 190 | −</para> | |
| 191 | −<programlisting> | |
| 192 | −/⋆ pointer to and size of a single iframe in memory ⋆/ | |
| 193 | −struct video_still_picture { | |
| 194 | − char ⋆iFrame; /⋆ pointer to a single iframe in memory ⋆/ | |
| 195 | − int32_t size; | |
| 196 | −}; | |
| 197 | −</programlisting> | |
| 198 | −</section> | |
| 199 | − | |
| 200 | −<section id="video_caps"> | |
| 201 | −<title>video capabilities</title> | |
| 202 | −<para>A call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the following | |
| 203 | −bits set according to the hardwares capabilities. | |
| 204 | −</para> | |
| 205 | −<programlisting> | |
| 206 | − /⋆ bit definitions for capabilities: ⋆/ | |
| 207 | − /⋆ can the hardware decode MPEG1 and/or MPEG2? ⋆/ | |
| 208 | − #define VIDEO_CAP_MPEG1 1 | |
| 209 | − #define VIDEO_CAP_MPEG2 2 | |
| 210 | − /⋆ can you send a system and/or program stream to video device? | |
| 211 | − (you still have to open the video and the audio device but only | |
| 212 | − send the stream to the video device) ⋆/ | |
| 213 | − #define VIDEO_CAP_SYS 4 | |
| 214 | − #define VIDEO_CAP_PROG 8 | |
| 215 | − /⋆ can the driver also handle SPU, NAVI and CSS encoded data? | |
| 216 | − (CSS API is not present yet) ⋆/ | |
| 217 | − #define VIDEO_CAP_SPU 16 | |
| 218 | − #define VIDEO_CAP_NAVI 32 | |
| 219 | − #define VIDEO_CAP_CSS 64 | |
| 220 | −</programlisting> | |
| 221 | −</section> | |
| 222 | − | |
| 223 | −<section id="video-system"> | |
| 224 | −<title>video_system_t</title> | |
| 225 | −<para>A call to VIDEO_SET_SYSTEM sets the desired video system for TV output. The | |
| 226 | −following system types can be set: | |
| 227 | −</para> | |
| 228 | −<programlisting> | |
| 229 | −typedef enum { | |
| 230 | − VIDEO_SYSTEM_PAL, | |
| 231 | − VIDEO_SYSTEM_NTSC, | |
| 232 | − VIDEO_SYSTEM_PALN, | |
| 233 | − VIDEO_SYSTEM_PALNc, | |
| 234 | − VIDEO_SYSTEM_PALM, | |
| 235 | − VIDEO_SYSTEM_NTSC60, | |
| 236 | − VIDEO_SYSTEM_PAL60, | |
| 237 | − VIDEO_SYSTEM_PALM60 | |
| 238 | −} video_system_t; | |
| 239 | −</programlisting> | |
| 240 | −</section> | |
| 241 | − | |
| 242 | −<section id="video-highlight"> | |
| 243 | −<title>struct video_highlight</title> | |
| 244 | −<para>Calling the ioctl VIDEO_SET_HIGHLIGHTS posts the SPU highlight information. The | |
| 245 | −call expects the following format for that information: | |
| 246 | −</para> | |
| 247 | −<programlisting> | |
| 248 | − typedef | |
| 249 | − struct video_highlight { | |
| 250 | − boolean active; /⋆ 1=show highlight, 0=hide highlight ⋆/ | |
| 251 | − uint8_t contrast1; /⋆ 7- 4 Pattern pixel contrast ⋆/ | |
| 252 | − /⋆ 3- 0 Background pixel contrast ⋆/ | |
| 253 | − uint8_t contrast2; /⋆ 7- 4 Emphasis pixel-2 contrast ⋆/ | |
| 254 | − /⋆ 3- 0 Emphasis pixel-1 contrast ⋆/ | |
| 255 | − uint8_t color1; /⋆ 7- 4 Pattern pixel color ⋆/ | |
| 256 | − /⋆ 3- 0 Background pixel color ⋆/ | |
| 257 | − uint8_t color2; /⋆ 7- 4 Emphasis pixel-2 color ⋆/ | |
| 258 | − /⋆ 3- 0 Emphasis pixel-1 color ⋆/ | |
| 259 | − uint32_t ypos; /⋆ 23-22 auto action mode ⋆/ | |
| 260 | − /⋆ 21-12 start y ⋆/ | |
| 261 | − /⋆ 9- 0 end y ⋆/ | |
| 262 | − uint32_t xpos; /⋆ 23-22 button color number ⋆/ | |
| 263 | − /⋆ 21-12 start x ⋆/ | |
| 264 | − /⋆ 9- 0 end x ⋆/ | |
| 265 | − } video_highlight_t; | |
| 266 | −</programlisting> | |
| 267 | − | |
| 268 | −</section> | |
| 269 | −<section id="video-spu"> | |
| 270 | −<title>struct video_spu</title> | |
| 271 | −<para>Calling VIDEO_SET_SPU deactivates or activates SPU decoding, according to the | |
| 272 | −following format: | |
| 273 | −</para> | |
| 274 | −<programlisting> | |
| 275 | − typedef | |
| 276 | − struct video_spu { | |
| 277 | − boolean active; | |
| 278 | − int stream_id; | |
| 279 | − } video_spu_t; | |
| 280 | −</programlisting> | |
| 281 | − | |
| 282 | −</section> | |
| 283 | −<section id="video-spu-palette"> | |
| 284 | −<title>struct video_spu_palette</title> | |
| 285 | −<para>The following structure is used to set the SPU palette by calling VIDEO_SPU_PALETTE: | |
| 286 | −</para> | |
| 287 | −<programlisting> | |
| 288 | − typedef | |
| 289 | − struct video_spu_palette { | |
| 290 | − int length; | |
| 291 | − uint8_t ⋆palette; | |
| 292 | − } video_spu_palette_t; | |
| 293 | −</programlisting> | |
| 294 | − | |
| 295 | −</section> | |
| 296 | −<section id="video-navi-pack"> | |
| 297 | −<title>struct video_navi_pack</title> | |
| 298 | −<para>In order to get the navigational data the following structure has to be passed to the ioctl | |
| 299 | −VIDEO_GET_NAVI: | |
| 300 | −</para> | |
| 301 | −<programlisting> | |
| 302 | − typedef | |
| 303 | − struct video_navi_pack { | |
| 304 | − int length; /⋆ 0 ... 1024 ⋆/ | |
| 305 | − uint8_t data[1024]; | |
| 306 | − } video_navi_pack_t; | |
| 307 | −</programlisting> | |
| 308 | −</section> | |
| 309 | − | |
| 310 | − | |
| 311 | −<section id="video-attributes-t"> | |
| 312 | −<title>video_attributes_t</title> | |
| 313 | −<para>The following attributes can be set by a call to VIDEO_SET_ATTRIBUTES: | |
| 314 | −</para> | |
| 315 | −<programlisting> | |
| 316 | − typedef uint16_t video_attributes_t; | |
| 317 | − /⋆ bits: descr. ⋆/ | |
| 318 | − /⋆ 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) ⋆/ | |
| 319 | − /⋆ 13-12 TV system (0=525/60, 1=625/50) ⋆/ | |
| 320 | − /⋆ 11-10 Aspect ratio (0=4:3, 3=16:9) ⋆/ | |
| 321 | − /⋆ 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca ⋆/ | |
| 322 | − /⋆ 7 line 21-1 data present in GOP (1=yes, 0=no) ⋆/ | |
| 323 | − /⋆ 6 line 21-2 data present in GOP (1=yes, 0=no) ⋆/ | |
| 324 | − /⋆ 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 ⋆/ | |
| 325 | − /⋆ 2 source letterboxed (1=yes, 0=no) ⋆/ | |
| 326 | − /⋆ 0 film/camera mode (0=camera, 1=film (625/50 only)) ⋆/ | |
| 327 | −</programlisting> | |
| 328 | −</section></section> | |
| 329 | − | |
| 330 | − | |
| 331 | −<section id="video_function_calls"> | |
| 332 | −<title>Video Function Calls</title> | |
| 333 | − | |
| 334 | − | |
| 335 | −<section id="video_fopen"> | |
| 336 | −<title>open()</title> | |
| 337 | −<para>DESCRIPTION | |
| 338 | −</para> | |
| 339 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 340 | − align="char"> | |
| 341 | −<para>This system call opens a named video device (e.g. /dev/dvb/adapter0/video0) | |
| 342 | − for subsequent use.</para> | |
| 343 | −<para>When an open() call has succeeded, the device will be ready for use. | |
| 344 | − The significance of blocking or non-blocking mode is described in the | |
| 345 | − documentation for functions where there is a difference. It does not affect the | |
| 346 | − semantics of the open() call itself. A device opened in blocking mode can later | |
| 347 | − be put into non-blocking mode (and vice versa) using the F_SETFL command | |
| 348 | − of the fcntl system call. This is a standard system call, documented in the Linux | |
| 349 | − manual page for fcntl. Only one user can open the Video Device in O_RDWR | |
| 350 | − mode. All other attempts to open the device in this mode will fail, and an | |
| 351 | − error-code will be returned. If the Video Device is opened in O_RDONLY | |
| 352 | − mode, the only ioctl call that can be used is VIDEO_GET_STATUS. All other | |
| 353 | − call will return an error code.</para> | |
| 354 | −</entry> | |
| 355 | − </row></tbody></tgroup></informaltable> | |
| 356 | − | |
| 357 | −<para>SYNOPSIS | |
| 358 | −</para> | |
| 359 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 360 | − align="char"> | |
| 361 | −<para>int open(const char ⋆deviceName, int flags);</para> | |
| 362 | −</entry> | |
| 363 | − </row></tbody></tgroup></informaltable> | |
| 364 | −<para>PARAMETERS | |
| 365 | −</para> | |
| 366 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 367 | − align="char"> | |
| 368 | −<para>const char | |
| 369 | − *deviceName</para> | |
| 370 | −</entry><entry | |
| 371 | − align="char"> | |
| 372 | −<para>Name of specific video device.</para> | |
| 373 | −</entry> | |
| 374 | − </row><row><entry | |
| 375 | − align="char"> | |
| 376 | −<para>int flags</para> | |
| 377 | −</entry><entry | |
| 378 | − align="char"> | |
| 379 | −<para>A bit-wise OR of the following flags:</para> | |
| 380 | −</entry> | |
| 381 | − </row><row><entry | |
| 382 | − align="char"> | |
| 383 | −</entry><entry | |
| 384 | − align="char"> | |
| 385 | −<para>O_RDONLY read-only access</para> | |
| 386 | −</entry> | |
| 387 | − </row><row><entry | |
| 388 | − align="char"> | |
| 389 | −</entry><entry | |
| 390 | − align="char"> | |
| 391 | −<para>O_RDWR read/write access</para> | |
| 392 | −</entry> | |
| 393 | − </row><row><entry | |
| 394 | − align="char"> | |
| 395 | −</entry><entry | |
| 396 | − align="char"> | |
| 397 | −<para>O_NONBLOCK open in non-blocking mode</para> | |
| 398 | −</entry> | |
| 399 | − </row><row><entry | |
| 400 | − align="char"> | |
| 401 | −</entry><entry | |
| 402 | − align="char"> | |
| 403 | −<para>(blocking mode is the default)</para> | |
| 404 | −</entry> | |
| 405 | − </row></tbody></tgroup></informaltable> | |
| 406 | −<para>RETURN VALUE</para> | |
| 407 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 408 | − align="char"> | |
| 409 | −<para>ENODEV</para> | |
| 410 | −</entry><entry | |
| 411 | − align="char"> | |
| 412 | −<para>Device driver not loaded/available.</para> | |
| 413 | −</entry> | |
| 414 | − </row><row><entry | |
| 415 | − align="char"> | |
| 416 | −<para>EINTERNAL</para> | |
| 417 | −</entry><entry | |
| 418 | − align="char"> | |
| 419 | −<para>Internal error.</para> | |
| 420 | −</entry> | |
| 421 | − </row><row><entry | |
| 422 | − align="char"> | |
| 423 | −<para>EBUSY</para> | |
| 424 | −</entry><entry | |
| 425 | − align="char"> | |
| 426 | −<para>Device or resource busy.</para> | |
| 427 | −</entry> | |
| 428 | − </row><row><entry | |
| 429 | − align="char"> | |
| 430 | −<para>EINVAL</para> | |
| 431 | −</entry><entry | |
| 432 | − align="char"> | |
| 433 | −<para>Invalid argument.</para> | |
| 434 | −</entry> | |
| 435 | − </row></tbody></tgroup></informaltable> | |
| 436 | − | |
| 437 | −</section> | |
| 438 | −<section id="video_fclose"> | |
| 439 | −<title>close()</title> | |
| 440 | −<para>DESCRIPTION | |
| 441 | −</para> | |
| 442 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 443 | − align="char"> | |
| 444 | −<para>This system call closes a previously opened video device.</para> | |
| 445 | −</entry> | |
| 446 | − </row></tbody></tgroup></informaltable> | |
| 447 | −<para>SYNOPSIS | |
| 448 | −</para> | |
| 449 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 450 | − align="char"> | |
| 451 | −<para>int close(int fd);</para> | |
| 452 | −</entry> | |
| 453 | − </row></tbody></tgroup></informaltable> | |
| 454 | −<para>PARAMETERS | |
| 455 | −</para> | |
| 456 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 457 | − align="char"> | |
| 458 | −<para>int fd</para> | |
| 459 | −</entry><entry | |
| 460 | − align="char"> | |
| 461 | −<para>File descriptor returned by a previous call to open().</para> | |
| 462 | −</entry> | |
| 463 | − </row></tbody></tgroup></informaltable> | |
| 464 | −<para>RETURN VALUE</para> | |
| 465 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 466 | − align="char"> | |
| 467 | −<para>EBADF</para> | |
| 468 | −</entry><entry | |
| 469 | − align="char"> | |
| 470 | −<para>fd is not a valid open file descriptor.</para> | |
| 471 | −</entry> | |
| 472 | − </row></tbody></tgroup></informaltable> | |
| 473 | − | |
| 474 | −</section> | |
| 475 | −<section id="video_fwrite"> | |
| 476 | −<title>write()</title> | |
| 477 | −<para>DESCRIPTION | |
| 478 | −</para> | |
| 479 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 480 | − align="char"> | |
| 481 | −<para>This system call can only be used if VIDEO_SOURCE_MEMORY is selected | |
| 482 | − in the ioctl call VIDEO_SELECT_SOURCE. The data provided shall be in | |
| 483 | − PES format, unless the capability allows other formats. If O_NONBLOCK is | |
| 484 | − not specified the function will block until buffer space is available. The amount | |
| 485 | − of data to be transferred is implied by count.</para> | |
| 486 | −</entry> | |
| 487 | − </row></tbody></tgroup></informaltable> | |
| 488 | −<para>SYNOPSIS | |
| 489 | −</para> | |
| 490 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 491 | − align="char"> | |
| 492 | −<para>size_t write(int fd, const void ⋆buf, size_t count);</para> | |
| 493 | −</entry> | |
| 494 | − </row></tbody></tgroup></informaltable> | |
| 495 | −<para>PARAMETERS | |
| 496 | −</para> | |
| 497 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 498 | − align="char"> | |
| 499 | −<para>int fd</para> | |
| 500 | −</entry><entry | |
| 501 | − align="char"> | |
| 502 | −<para>File descriptor returned by a previous call to open().</para> | |
| 503 | −</entry> | |
| 504 | − </row><row><entry | |
| 505 | − align="char"> | |
| 506 | −<para>void *buf</para> | |
| 507 | −</entry><entry | |
| 508 | − align="char"> | |
| 509 | −<para>Pointer to the buffer containing the PES data.</para> | |
| 510 | −</entry> | |
| 511 | − </row><row><entry | |
| 512 | − align="char"> | |
| 513 | −<para>size_t count</para> | |
| 514 | −</entry><entry | |
| 515 | − align="char"> | |
| 516 | −<para>Size of buf.</para> | |
| 517 | −</entry> | |
| 518 | − </row></tbody></tgroup></informaltable> | |
| 519 | −<para>RETURN VALUE</para> | |
| 520 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 521 | − align="char"> | |
| 522 | −<para>EPERM</para> | |
| 523 | −</entry><entry | |
| 524 | − align="char"> | |
| 525 | −<para>Mode VIDEO_SOURCE_MEMORY not selected.</para> | |
| 526 | −</entry> | |
| 527 | − </row><row><entry | |
| 528 | − align="char"> | |
| 529 | −<para>ENOMEM</para> | |
| 530 | −</entry><entry | |
| 531 | − align="char"> | |
| 532 | −<para>Attempted to write more data than the internal buffer can | |
| 533 | − hold.</para> | |
| 534 | −</entry> | |
| 535 | − </row><row><entry | |
| 536 | − align="char"> | |
| 537 | −<para>EBADF</para> | |
| 538 | −</entry><entry | |
| 539 | − align="char"> | |
| 540 | −<para>fd is not a valid open file descriptor.</para> | |
| 541 | −</entry> | |
| 542 | − </row></tbody></tgroup></informaltable> | |
| 543 | − | |
| 544 | −</section><section id="VIDEO_STOP" | |
| 545 | −role="subsection"><title>VIDEO_STOP</title> | |
| 546 | −<para>DESCRIPTION | |
| 547 | −</para> | |
| 548 | −<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 | |
| 549 | −&VIDIOC-DECODER-CMD; instead.</para> | |
| 550 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 551 | − align="char"> | |
| 552 | −<para>This ioctl call asks the Video Device to stop playing the current stream. | |
| 553 | − Depending on the input parameter, the screen can be blanked out or displaying | |
| 554 | − the last decoded frame.</para> | |
| 555 | −</entry> | |
| 556 | − </row></tbody></tgroup></informaltable> | |
| 557 | −<para>SYNOPSIS | |
| 558 | −</para> | |
| 559 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 560 | − align="char"> | |
| 561 | −<para>int ioctl(fd, int request = VIDEO_STOP, boolean | |
| 562 | − mode);</para> | |
| 563 | −</entry> | |
| 564 | − </row></tbody></tgroup></informaltable> | |
| 565 | −<para>PARAMETERS | |
| 566 | −</para> | |
| 567 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 568 | − align="char"> | |
| 569 | −<para>int fd</para> | |
| 570 | −</entry><entry | |
| 571 | − align="char"> | |
| 572 | −<para>File descriptor returned by a previous call to open().</para> | |
| 573 | −</entry> | |
| 574 | − </row><row><entry | |
| 575 | − align="char"> | |
| 576 | −<para>int request</para> | |
| 577 | −</entry><entry | |
| 578 | − align="char"> | |
| 579 | −<para>Equals VIDEO_STOP for this command.</para> | |
| 580 | −</entry> | |
| 581 | − </row><row><entry | |
| 582 | − align="char"> | |
| 583 | −<para>Boolean mode</para> | |
| 584 | −</entry><entry | |
| 585 | − align="char"> | |
| 586 | −<para>Indicates how the screen shall be handled.</para> | |
| 587 | −</entry> | |
| 588 | − </row><row><entry | |
| 589 | − align="char"> | |
| 590 | −</entry><entry | |
| 591 | − align="char"> | |
| 592 | −<para>TRUE: Blank screen when stop.</para> | |
| 593 | −</entry> | |
| 594 | − </row><row><entry | |
| 595 | − align="char"> | |
| 596 | −</entry><entry | |
| 597 | − align="char"> | |
| 598 | −<para>FALSE: Show last decoded frame.</para> | |
| 599 | −</entry> | |
| 600 | − </row></tbody></tgroup></informaltable> | |
| 601 | −&return-value-dvb; | |
| 602 | − | |
| 603 | −</section><section id="VIDEO_PLAY" | |
| 604 | −role="subsection"><title>VIDEO_PLAY</title> | |
| 605 | −<para>DESCRIPTION | |
| 606 | −</para> | |
| 607 | −<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 | |
| 608 | −&VIDIOC-DECODER-CMD; instead.</para> | |
| 609 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 610 | − align="char"> | |
| 611 | −<para>This ioctl call asks the Video Device to start playing a video stream from the | |
| 612 | − selected source.</para> | |
| 613 | −</entry> | |
| 614 | − </row></tbody></tgroup></informaltable> | |
| 615 | −<para>SYNOPSIS | |
| 616 | −</para> | |
| 617 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 618 | − align="char"> | |
| 619 | −<para>int ioctl(fd, int request = VIDEO_PLAY);</para> | |
| 620 | −</entry> | |
| 621 | − </row></tbody></tgroup></informaltable> | |
| 622 | −<para>PARAMETERS | |
| 623 | −</para> | |
| 624 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 625 | − align="char"> | |
| 626 | −<para>int fd</para> | |
| 627 | −</entry><entry | |
| 628 | − align="char"> | |
| 629 | −<para>File descriptor returned by a previous call to open().</para> | |
| 630 | −</entry> | |
| 631 | − </row><row><entry | |
| 632 | − align="char"> | |
| 633 | −<para>int request</para> | |
| 634 | −</entry><entry | |
| 635 | − align="char"> | |
| 636 | −<para>Equals VIDEO_PLAY for this command.</para> | |
| 637 | −</entry> | |
| 638 | − </row></tbody></tgroup></informaltable> | |
| 639 | −&return-value-dvb; | |
| 640 | − | |
| 641 | −</section><section id="VIDEO_FREEZE" | |
| 642 | −role="subsection"><title>VIDEO_FREEZE</title> | |
| 643 | −<para>DESCRIPTION | |
| 644 | −</para> | |
| 645 | −<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 | |
| 646 | −&VIDIOC-DECODER-CMD; instead.</para> | |
| 647 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 648 | − align="char"> | |
| 649 | −<para>This ioctl call suspends the live video stream being played. Decoding | |
| 650 | − and playing are frozen. It is then possible to restart the decoding | |
| 651 | − and playing process of the video stream using the VIDEO_CONTINUE | |
| 652 | − command. If VIDEO_SOURCE_MEMORY is selected in the ioctl call | |
| 653 | − VIDEO_SELECT_SOURCE, the DVB subsystem will not decode any more | |
| 654 | − data until the ioctl call VIDEO_CONTINUE or VIDEO_PLAY is performed.</para> | |
| 655 | −</entry> | |
| 656 | − </row></tbody></tgroup></informaltable> | |
| 657 | −<para>SYNOPSIS | |
| 658 | −</para> | |
| 659 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 660 | − align="char"> | |
| 661 | −<para>int ioctl(fd, int request = VIDEO_FREEZE);</para> | |
| 662 | −</entry> | |
| 663 | − </row></tbody></tgroup></informaltable> | |
| 664 | −<para>PARAMETERS | |
| 665 | −</para> | |
| 666 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 667 | − align="char"> | |
| 668 | −<para>int fd</para> | |
| 669 | −</entry><entry | |
| 670 | − align="char"> | |
| 671 | −<para>File descriptor returned by a previous call to open().</para> | |
| 672 | −</entry> | |
| 673 | − </row><row><entry | |
| 674 | − align="char"> | |
| 675 | −<para>int request</para> | |
| 676 | −</entry><entry | |
| 677 | − align="char"> | |
| 678 | −<para>Equals VIDEO_FREEZE for this command.</para> | |
| 679 | −</entry> | |
| 680 | − </row></tbody></tgroup></informaltable> | |
| 681 | −&return-value-dvb; | |
| 682 | − | |
| 683 | −</section><section id="VIDEO_CONTINUE" | |
| 684 | −role="subsection"><title>VIDEO_CONTINUE</title> | |
| 685 | −<para>DESCRIPTION | |
| 686 | −</para> | |
| 687 | −<para>This ioctl is for DVB devices only. To control a V4L2 decoder use the V4L2 | |
| 688 | −&VIDIOC-DECODER-CMD; instead.</para> | |
| 689 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 690 | − align="char"> | |
| 691 | −<para>This ioctl call restarts decoding and playing processes of the video stream | |
| 692 | − which was played before a call to VIDEO_FREEZE was made.</para> | |
| 693 | −</entry> | |
| 694 | − </row></tbody></tgroup></informaltable> | |
| 695 | −<para>SYNOPSIS | |
| 696 | −</para> | |
| 697 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 698 | − align="char"> | |
| 699 | −<para>int ioctl(fd, int request = VIDEO_CONTINUE);</para> | |
| 700 | −</entry> | |
| 701 | − </row></tbody></tgroup></informaltable> | |
| 702 | −<para>PARAMETERS | |
| 703 | −</para> | |
| 704 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 705 | − align="char"> | |
| 706 | −<para>int fd</para> | |
| 707 | −</entry><entry | |
| 708 | − align="char"> | |
| 709 | −<para>File descriptor returned by a previous call to open().</para> | |
| 710 | −</entry> | |
| 711 | − </row><row><entry | |
| 712 | − align="char"> | |
| 713 | −<para>int request</para> | |
| 714 | −</entry><entry | |
| 715 | − align="char"> | |
| 716 | −<para>Equals VIDEO_CONTINUE for this command.</para> | |
| 717 | −</entry> | |
| 718 | − </row></tbody></tgroup></informaltable> | |
| 719 | −&return-value-dvb; | |
| 720 | − | |
| 721 | −</section><section id="VIDEO_SELECT_SOURCE" | |
| 722 | −role="subsection"><title>VIDEO_SELECT_SOURCE</title> | |
| 723 | −<para>DESCRIPTION | |
| 724 | −</para> | |
| 725 | −<para>This ioctl is for DVB devices only. This ioctl was also supported by the | |
| 726 | −V4L2 ivtv driver, but that has been replaced by the ivtv-specific | |
| 727 | −<constant>IVTV_IOC_PASSTHROUGH_MODE</constant> ioctl.</para> | |
| 728 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 729 | − align="char"> | |
| 730 | −<para>This ioctl call informs the video device which source shall be used for the input | |
| 731 | − data. The possible sources are demux or memory. If memory is selected, the | |
| 732 | − data is fed to the video device through the write command.</para> | |
| 733 | −</entry> | |
| 734 | − </row></tbody></tgroup></informaltable> | |
| 735 | −<para>SYNOPSIS | |
| 736 | −</para> | |
| 737 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 738 | − align="char"> | |
| 739 | −<para>int ioctl(fd, int request = VIDEO_SELECT_SOURCE, | |
| 740 | − video_stream_source_t source);</para> | |
| 741 | −</entry> | |
| 742 | − </row></tbody></tgroup></informaltable> | |
| 743 | −<para>PARAMETERS | |
| 744 | −</para> | |
| 745 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 746 | − align="char"> | |
| 747 | −<para>int fd</para> | |
| 748 | −</entry><entry | |
| 749 | − align="char"> | |
| 750 | −<para>File descriptor returned by a previous call to open().</para> | |
| 751 | −</entry> | |
| 752 | − </row><row><entry | |
| 753 | − align="char"> | |
| 754 | −<para>int request</para> | |
| 755 | −</entry><entry | |
| 756 | − align="char"> | |
| 757 | −<para>Equals VIDEO_SELECT_SOURCE for this command.</para> | |
| 758 | −</entry> | |
| 759 | − </row><row><entry | |
| 760 | − align="char"> | |
| 761 | −<para>video_stream_source_t | |
| 762 | − source</para> | |
| 763 | −</entry><entry | |
| 764 | − align="char"> | |
| 765 | −<para>Indicates which source shall be used for the Video stream.</para> | |
| 766 | −</entry> | |
| 767 | − </row></tbody></tgroup></informaltable> | |
| 768 | −&return-value-dvb; | |
| 769 | − | |
| 770 | −</section><section id="VIDEO_SET_BLANK" | |
| 771 | −role="subsection"><title>VIDEO_SET_BLANK</title> | |
| 772 | −<para>DESCRIPTION | |
| 773 | −</para> | |
| 774 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 775 | − align="char"> | |
| 776 | −<para>This ioctl call asks the Video Device to blank out the picture.</para> | |
| 777 | −</entry> | |
| 778 | − </row></tbody></tgroup></informaltable> | |
| 779 | −<para>SYNOPSIS | |
| 780 | −</para> | |
| 781 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 782 | − align="char"> | |
| 783 | −<para>int ioctl(fd, int request = VIDEO_SET_BLANK, boolean | |
| 784 | − mode);</para> | |
| 785 | −</entry> | |
| 786 | − </row></tbody></tgroup></informaltable> | |
| 787 | −<para>PARAMETERS | |
| 788 | −</para> | |
| 789 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 790 | − align="char"> | |
| 791 | −<para>int fd</para> | |
| 792 | −</entry><entry | |
| 793 | − align="char"> | |
| 794 | −<para>File descriptor returned by a previous call to open().</para> | |
| 795 | −</entry> | |
| 796 | − </row><row><entry | |
| 797 | − align="char"> | |
| 798 | −<para>int request</para> | |
| 799 | −</entry><entry | |
| 800 | − align="char"> | |
| 801 | −<para>Equals VIDEO_SET_BLANK for this command.</para> | |
| 802 | −</entry> | |
| 803 | − </row><row><entry | |
| 804 | − align="char"> | |
| 805 | −<para>boolean mode</para> | |
| 806 | −</entry><entry | |
| 807 | − align="char"> | |
| 808 | −<para>TRUE: Blank screen when stop.</para> | |
| 809 | −</entry> | |
| 810 | − </row><row><entry | |
| 811 | − align="char"> | |
| 812 | −</entry><entry | |
| 813 | − align="char"> | |
| 814 | −<para>FALSE: Show last decoded frame.</para> | |
| 815 | −</entry> | |
| 816 | − </row></tbody></tgroup></informaltable> | |
| 817 | −&return-value-dvb; | |
| 818 | − | |
| 819 | −</section><section id="VIDEO_GET_STATUS" | |
| 820 | −role="subsection"><title>VIDEO_GET_STATUS</title> | |
| 821 | −<para>DESCRIPTION | |
| 822 | −</para> | |
| 823 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 824 | − align="char"> | |
| 825 | −<para>This ioctl call asks the Video Device to return the current status of the device.</para> | |
| 826 | −</entry> | |
| 827 | − </row></tbody></tgroup></informaltable> | |
| 828 | −<para>SYNOPSIS | |
| 829 | −</para> | |
| 830 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 831 | − align="char"> | |
| 832 | −<para> int ioctl(fd, int request = VIDEO_GET_STATUS, struct | |
| 833 | − video_status ⋆status);</para> | |
| 834 | −</entry> | |
| 835 | − </row></tbody></tgroup></informaltable> | |
| 836 | −<para>PARAMETERS | |
| 837 | −</para> | |
| 838 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 839 | − align="char"> | |
| 840 | −<para>int fd</para> | |
| 841 | −</entry><entry | |
| 842 | − align="char"> | |
| 843 | −<para>File descriptor returned by a previous call to open().</para> | |
| 844 | −</entry> | |
| 845 | − </row><row><entry | |
| 846 | − align="char"> | |
| 847 | −<para>int request</para> | |
| 848 | −</entry><entry | |
| 849 | − align="char"> | |
| 850 | −<para>Equals VIDEO_GET_STATUS for this command.</para> | |
| 851 | −</entry> | |
| 852 | − </row><row><entry | |
| 853 | − align="char"> | |
| 854 | −<para>struct video_status | |
| 855 | − *status</para> | |
| 856 | −</entry><entry | |
| 857 | − align="char"> | |
| 858 | −<para>Returns the current status of the Video Device.</para> | |
| 859 | −</entry> | |
| 860 | − </row></tbody></tgroup></informaltable> | |
| 861 | −&return-value-dvb; | |
| 862 | − | |
| 863 | −</section><section id="VIDEO_GET_FRAME_COUNT" | |
| 864 | −role="subsection"><title>VIDEO_GET_FRAME_COUNT</title> | |
| 865 | −<para>DESCRIPTION | |
| 866 | −</para> | |
| 867 | −<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this | |
| 868 | −ioctl has been replaced by the <constant>V4L2_CID_MPEG_VIDEO_DEC_FRAME</constant> control.</para> | |
| 869 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 870 | − align="char"> | |
| 871 | −<para>This ioctl call asks the Video Device to return the number of displayed frames | |
| 872 | −since the decoder was started.</para> | |
| 873 | −</entry> | |
| 874 | − </row></tbody></tgroup></informaltable> | |
| 875 | −<para>SYNOPSIS | |
| 876 | −</para> | |
| 877 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 878 | − align="char"> | |
| 879 | −<para>int ioctl(int fd, int request = | |
| 880 | − VIDEO_GET_FRAME_COUNT, __u64 *pts);</para> | |
| 881 | −</entry> | |
| 882 | − </row></tbody></tgroup></informaltable> | |
| 883 | −<para>PARAMETERS | |
| 884 | −</para> | |
| 885 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 886 | − align="char"> | |
| 887 | −<para>int fd</para> | |
| 888 | −</entry><entry | |
| 889 | − align="char"> | |
| 890 | −<para>File descriptor returned by a previous call to open().</para> | |
| 891 | −</entry> | |
| 892 | − </row><row><entry | |
| 893 | − align="char"> | |
| 894 | −<para>int request</para> | |
| 895 | −</entry><entry | |
| 896 | − align="char"> | |
| 897 | −<para>Equals VIDEO_GET_FRAME_COUNT for this | |
| 898 | − command.</para> | |
| 899 | −</entry> | |
| 900 | − </row><row><entry | |
| 901 | − align="char"> | |
| 902 | −<para>__u64 *pts | |
| 903 | −</para> | |
| 904 | −</entry><entry | |
| 905 | − align="char"> | |
| 906 | −<para>Returns the number of frames displayed since the decoder was started. | |
| 907 | −</para> | |
| 908 | −</entry> | |
| 909 | − </row></tbody></tgroup></informaltable> | |
| 910 | −&return-value-dvb; | |
| 911 | − | |
| 912 | −</section><section id="VIDEO_GET_PTS" | |
| 913 | −role="subsection"><title>VIDEO_GET_PTS</title> | |
| 914 | −<para>DESCRIPTION | |
| 915 | −</para> | |
| 916 | −<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this | |
| 917 | −ioctl has been replaced by the <constant>V4L2_CID_MPEG_VIDEO_DEC_PTS</constant> control.</para> | |
| 918 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 919 | − align="char"> | |
| 920 | −<para>This ioctl call asks the Video Device to return the current PTS timestamp.</para> | |
| 921 | −</entry> | |
| 922 | − </row></tbody></tgroup></informaltable> | |
| 923 | −<para>SYNOPSIS | |
| 924 | −</para> | |
| 925 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 926 | − align="char"> | |
| 927 | −<para>int ioctl(int fd, int request = | |
| 928 | − VIDEO_GET_PTS, __u64 *pts);</para> | |
| 929 | −</entry> | |
| 930 | − </row></tbody></tgroup></informaltable> | |
| 931 | −<para>PARAMETERS | |
| 932 | −</para> | |
| 933 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 934 | − align="char"> | |
| 935 | −<para>int fd</para> | |
| 936 | −</entry><entry | |
| 937 | − align="char"> | |
| 938 | −<para>File descriptor returned by a previous call to open().</para> | |
| 939 | −</entry> | |
| 940 | − </row><row><entry | |
| 941 | − align="char"> | |
| 942 | −<para>int request</para> | |
| 943 | −</entry><entry | |
| 944 | − align="char"> | |
| 945 | −<para>Equals VIDEO_GET_PTS for this | |
| 946 | − command.</para> | |
| 947 | −</entry> | |
| 948 | − </row><row><entry | |
| 949 | − align="char"> | |
| 950 | −<para>__u64 *pts | |
| 951 | −</para> | |
| 952 | −</entry><entry | |
| 953 | − align="char"> | |
| 954 | −<para>Returns the 33-bit timestamp as defined in ITU T-REC-H.222.0 / ISO/IEC 13818-1. | |
| 955 | −</para> | |
| 956 | −<para> | |
| 957 | −The PTS should belong to the currently played | |
| 958 | −frame if possible, but may also be a value close to it | |
| 959 | −like the PTS of the last decoded frame or the last PTS | |
| 960 | −extracted by the PES parser.</para> | |
| 961 | −</entry> | |
| 962 | − </row></tbody></tgroup></informaltable> | |
| 963 | −&return-value-dvb; | |
| 964 | − | |
| 965 | −</section><section id="VIDEO_GET_FRAME_RATE" | |
| 966 | −role="subsection"><title>VIDEO_GET_FRAME_RATE</title> | |
| 967 | −<para>DESCRIPTION | |
| 968 | −</para> | |
| 969 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 970 | − align="char"> | |
| 971 | −<para>This ioctl call asks the Video Device to return the current framerate.</para> | |
| 972 | −</entry> | |
| 973 | − </row></tbody></tgroup></informaltable> | |
| 974 | −<para>SYNOPSIS | |
| 975 | −</para> | |
| 976 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 977 | − align="char"> | |
| 978 | −<para>int ioctl(int fd, int request = | |
| 979 | − VIDEO_GET_FRAME_RATE, unsigned int *rate);</para> | |
| 980 | −</entry> | |
| 981 | − </row></tbody></tgroup></informaltable> | |
| 982 | −<para>PARAMETERS | |
| 983 | −</para> | |
| 984 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 985 | − align="char"> | |
| 986 | −<para>int fd</para> | |
| 987 | −</entry><entry | |
| 988 | − align="char"> | |
| 989 | −<para>File descriptor returned by a previous call to open().</para> | |
| 990 | −</entry> | |
| 991 | − </row><row><entry | |
| 992 | − align="char"> | |
| 993 | −<para>int request</para> | |
| 994 | −</entry><entry | |
| 995 | − align="char"> | |
| 996 | −<para>Equals VIDEO_GET_FRAME_RATE for this | |
| 997 | − command.</para> | |
| 998 | −</entry> | |
| 999 | − </row><row><entry | |
| 1000 | − align="char"> | |
| 1001 | −<para>unsigned int *rate | |
| 1002 | −</para> | |
| 1003 | −</entry><entry | |
| 1004 | − align="char"> | |
| 1005 | −<para>Returns the framerate in number of frames per 1000 seconds. | |
| 1006 | −</para> | |
| 1007 | −</entry> | |
| 1008 | − </row></tbody></tgroup></informaltable> | |
| 1009 | −&return-value-dvb; | |
| 1010 | − | |
| 1011 | −</section><section id="VIDEO_GET_EVENT" | |
| 1012 | −role="subsection"><title>VIDEO_GET_EVENT</title> | |
| 1013 | −<para>DESCRIPTION | |
| 1014 | −</para> | |
| 1015 | −<para>This ioctl is for DVB devices only. To get events from a V4L2 decoder use the V4L2 | |
| 1016 | −&VIDIOC-DQEVENT; ioctl instead.</para> | |
| 1017 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1018 | − align="char"> | |
| 1019 | −<para>This ioctl call returns an event of type video_event if available. If an event is | |
| 1020 | − not available, the behavior depends on whether the device is in blocking or | |
| 1021 | − non-blocking mode. In the latter case, the call fails immediately with errno | |
| 1022 | − set to EWOULDBLOCK. In the former case, the call blocks until an event | |
| 1023 | − becomes available. The standard Linux poll() and/or select() system calls can | |
| 1024 | − be used with the device file descriptor to watch for new events. For select(), | |
| 1025 | − the file descriptor should be included in the exceptfds argument, and for | |
| 1026 | − poll(), POLLPRI should be specified as the wake-up condition. Read-only | |
| 1027 | − permissions are sufficient for this ioctl call.</para> | |
| 1028 | −</entry> | |
| 1029 | − </row></tbody></tgroup></informaltable> | |
| 1030 | −<para>SYNOPSIS | |
| 1031 | −</para> | |
| 1032 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1033 | − align="char"> | |
| 1034 | −<para> int ioctl(fd, int request = VIDEO_GET_EVENT, struct | |
| 1035 | − video_event ⋆ev);</para> | |
| 1036 | −</entry> | |
| 1037 | − </row></tbody></tgroup></informaltable> | |
| 1038 | −<para>PARAMETERS | |
| 1039 | −</para> | |
| 1040 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1041 | − align="char"> | |
| 1042 | −<para>int fd</para> | |
| 1043 | −</entry><entry | |
| 1044 | − align="char"> | |
| 1045 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1046 | −</entry> | |
| 1047 | − </row><row><entry | |
| 1048 | − align="char"> | |
| 1049 | −<para>int request</para> | |
| 1050 | −</entry><entry | |
| 1051 | − align="char"> | |
| 1052 | −<para>Equals VIDEO_GET_EVENT for this command.</para> | |
| 1053 | −</entry> | |
| 1054 | − </row><row><entry | |
| 1055 | − align="char"> | |
| 1056 | −<para>struct video_event | |
| 1057 | − *ev</para> | |
| 1058 | −</entry><entry | |
| 1059 | − align="char"> | |
| 1060 | −<para>Points to the location where the event, if any, is to be | |
| 1061 | − stored.</para> | |
| 1062 | −</entry> | |
| 1063 | − </row></tbody></tgroup></informaltable> | |
| 1064 | −&return-value-dvb; | |
| 1065 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1066 | − align="char"> | |
| 1067 | −<para>EWOULDBLOCK</para> | |
| 1068 | −</entry><entry | |
| 1069 | − align="char"> | |
| 1070 | −<para>There is no event pending, and the device is in | |
| 1071 | − non-blocking mode.</para> | |
| 1072 | −</entry> | |
| 1073 | − </row><row><entry | |
| 1074 | − align="char"> | |
| 1075 | −<para>EOVERFLOW</para> | |
| 1076 | −</entry><entry | |
| 1077 | − align="char"> | |
| 1078 | −<para>Overflow in event queue - one or more events were lost.</para> | |
| 1079 | −</entry> | |
| 1080 | − </row></tbody></tgroup></informaltable> | |
| 1081 | − | |
| 1082 | −</section><section id="VIDEO_COMMAND" | |
| 1083 | −role="subsection"><title>VIDEO_COMMAND</title> | |
| 1084 | −<para>DESCRIPTION | |
| 1085 | −</para> | |
| 1086 | −<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this | |
| 1087 | −ioctl has been replaced by the &VIDIOC-DECODER-CMD; ioctl.</para> | |
| 1088 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1089 | − align="char"> | |
| 1090 | −<para>This ioctl commands the decoder. The <constant>video_command</constant> struct | |
| 1091 | −is a subset of the <constant>v4l2_decoder_cmd</constant> struct, so refer to the | |
| 1092 | −&VIDIOC-DECODER-CMD; documentation for more information.</para> | |
| 1093 | −</entry> | |
| 1094 | − </row></tbody></tgroup></informaltable> | |
| 1095 | −<para>SYNOPSIS | |
| 1096 | −</para> | |
| 1097 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1098 | − align="char"> | |
| 1099 | −<para>int ioctl(int fd, int request = | |
| 1100 | − VIDEO_COMMAND, struct video_command *cmd);</para> | |
| 1101 | −</entry> | |
| 1102 | − </row></tbody></tgroup></informaltable> | |
| 1103 | −<para>PARAMETERS | |
| 1104 | −</para> | |
| 1105 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1106 | − align="char"> | |
| 1107 | −<para>int fd</para> | |
| 1108 | −</entry><entry | |
| 1109 | − align="char"> | |
| 1110 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1111 | −</entry> | |
| 1112 | − </row><row><entry | |
| 1113 | − align="char"> | |
| 1114 | −<para>int request</para> | |
| 1115 | −</entry><entry | |
| 1116 | − align="char"> | |
| 1117 | −<para>Equals VIDEO_COMMAND for this | |
| 1118 | − command.</para> | |
| 1119 | −</entry> | |
| 1120 | − </row><row><entry | |
| 1121 | − align="char"> | |
| 1122 | −<para>struct video_command *cmd | |
| 1123 | −</para> | |
| 1124 | −</entry><entry | |
| 1125 | − align="char"> | |
| 1126 | −<para>Commands the decoder. | |
| 1127 | −</para> | |
| 1128 | −</entry> | |
| 1129 | − </row></tbody></tgroup></informaltable> | |
| 1130 | −&return-value-dvb; | |
| 1131 | − | |
| 1132 | −</section><section id="VIDEO_TRY_COMMAND" | |
| 1133 | −role="subsection"><title>VIDEO_TRY_COMMAND</title> | |
| 1134 | −<para>DESCRIPTION | |
| 1135 | −</para> | |
| 1136 | −<para>This ioctl is obsolete. Do not use in new drivers. For V4L2 decoders this | |
| 1137 | −ioctl has been replaced by the &VIDIOC-TRY-DECODER-CMD; ioctl.</para> | |
| 1138 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1139 | − align="char"> | |
| 1140 | −<para>This ioctl tries a decoder command. The <constant>video_command</constant> struct | |
| 1141 | −is a subset of the <constant>v4l2_decoder_cmd</constant> struct, so refer to the | |
| 1142 | −&VIDIOC-TRY-DECODER-CMD; documentation for more information.</para> | |
| 1143 | −</entry> | |
| 1144 | − </row></tbody></tgroup></informaltable> | |
| 1145 | −<para>SYNOPSIS | |
| 1146 | −</para> | |
| 1147 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1148 | − align="char"> | |
| 1149 | −<para>int ioctl(int fd, int request = | |
| 1150 | − VIDEO_TRY_COMMAND, struct video_command *cmd);</para> | |
| 1151 | −</entry> | |
| 1152 | − </row></tbody></tgroup></informaltable> | |
| 1153 | −<para>PARAMETERS | |
| 1154 | −</para> | |
| 1155 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1156 | − align="char"> | |
| 1157 | −<para>int fd</para> | |
| 1158 | −</entry><entry | |
| 1159 | − align="char"> | |
| 1160 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1161 | −</entry> | |
| 1162 | − </row><row><entry | |
| 1163 | − align="char"> | |
| 1164 | −<para>int request</para> | |
| 1165 | −</entry><entry | |
| 1166 | − align="char"> | |
| 1167 | −<para>Equals VIDEO_TRY_COMMAND for this | |
| 1168 | − command.</para> | |
| 1169 | −</entry> | |
| 1170 | − </row><row><entry | |
| 1171 | − align="char"> | |
| 1172 | −<para>struct video_command *cmd | |
| 1173 | −</para> | |
| 1174 | −</entry><entry | |
| 1175 | − align="char"> | |
| 1176 | −<para>Try a decoder command. | |
| 1177 | −</para> | |
| 1178 | −</entry> | |
| 1179 | − </row></tbody></tgroup></informaltable> | |
| 1180 | −&return-value-dvb; | |
| 1181 | − | |
| 1182 | −</section><section id="VIDEO_GET_SIZE" | |
| 1183 | −role="subsection"><title>VIDEO_GET_SIZE</title> | |
| 1184 | −<para>DESCRIPTION | |
| 1185 | −</para> | |
| 1186 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1187 | − align="char"> | |
| 1188 | −<para>This ioctl returns the size and aspect ratio.</para> | |
| 1189 | −</entry> | |
| 1190 | − </row></tbody></tgroup></informaltable> | |
| 1191 | −<para>SYNOPSIS | |
| 1192 | −</para> | |
| 1193 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1194 | − align="char"> | |
| 1195 | −<para>int ioctl(int fd, int request = | |
| 1196 | − VIDEO_GET_SIZE, video_size_t *size);</para> | |
| 1197 | −</entry> | |
| 1198 | − </row></tbody></tgroup></informaltable> | |
| 1199 | −<para>PARAMETERS | |
| 1200 | −</para> | |
| 1201 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1202 | − align="char"> | |
| 1203 | −<para>int fd</para> | |
| 1204 | −</entry><entry | |
| 1205 | − align="char"> | |
| 1206 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1207 | −</entry> | |
| 1208 | − </row><row><entry | |
| 1209 | − align="char"> | |
| 1210 | −<para>int request</para> | |
| 1211 | −</entry><entry | |
| 1212 | − align="char"> | |
| 1213 | −<para>Equals VIDEO_GET_SIZE for this | |
| 1214 | − command.</para> | |
| 1215 | −</entry> | |
| 1216 | − </row><row><entry | |
| 1217 | − align="char"> | |
| 1218 | −<para>video_size_t *size | |
| 1219 | −</para> | |
| 1220 | −</entry><entry | |
| 1221 | − align="char"> | |
| 1222 | −<para>Returns the size and aspect ratio. | |
| 1223 | −</para> | |
| 1224 | −</entry> | |
| 1225 | − </row></tbody></tgroup></informaltable> | |
| 1226 | −&return-value-dvb; | |
| 1227 | − | |
| 1228 | −</section><section id="VIDEO_SET_DISPLAY_FORMAT" | |
| 1229 | −role="subsection"><title>VIDEO_SET_DISPLAY_FORMAT</title> | |
| 1230 | −<para>DESCRIPTION | |
| 1231 | −</para> | |
| 1232 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1233 | − align="char"> | |
| 1234 | −<para>This ioctl call asks the Video Device to select the video format to be applied | |
| 1235 | − by the MPEG chip on the video.</para> | |
| 1236 | −</entry> | |
| 1237 | − </row></tbody></tgroup></informaltable> | |
| 1238 | −<para>SYNOPSIS | |
| 1239 | −</para> | |
| 1240 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1241 | − align="char"> | |
| 1242 | −<para> int ioctl(fd, int request = | |
| 1243 | − VIDEO_SET_DISPLAY_FORMAT, video_display_format_t | |
| 1244 | − format);</para> | |
| 1245 | −</entry> | |
| 1246 | − </row></tbody></tgroup></informaltable> | |
| 1247 | −<para>PARAMETERS | |
| 1248 | −</para> | |
| 1249 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1250 | − align="char"> | |
| 1251 | −<para>int fd</para> | |
| 1252 | −</entry><entry | |
| 1253 | − align="char"> | |
| 1254 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1255 | −</entry> | |
| 1256 | − </row><row><entry | |
| 1257 | − align="char"> | |
| 1258 | −<para>int request</para> | |
| 1259 | −</entry><entry | |
| 1260 | − align="char"> | |
| 1261 | −<para>Equals VIDEO_SET_DISPLAY_FORMAT for this | |
| 1262 | − command.</para> | |
| 1263 | −</entry> | |
| 1264 | − </row><row><entry | |
| 1265 | − align="char"> | |
| 1266 | −<para>video_display_format_t | |
| 1267 | − format</para> | |
| 1268 | −</entry><entry | |
| 1269 | − align="char"> | |
| 1270 | −<para>Selects the video format to be used.</para> | |
| 1271 | −</entry> | |
| 1272 | − </row></tbody></tgroup></informaltable> | |
| 1273 | −&return-value-dvb; | |
| 1274 | − | |
| 1275 | −</section><section id="VIDEO_STILLPICTURE" | |
| 1276 | −role="subsection"><title>VIDEO_STILLPICTURE</title> | |
| 1277 | −<para>DESCRIPTION | |
| 1278 | −</para> | |
| 1279 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1280 | − align="char"> | |
| 1281 | −<para>This ioctl call asks the Video Device to display a still picture (I-frame). The | |
| 1282 | − input data shall contain an I-frame. If the pointer is NULL, then the current | |
| 1283 | − displayed still picture is blanked.</para> | |
| 1284 | −</entry> | |
| 1285 | − </row></tbody></tgroup></informaltable> | |
| 1286 | −<para>SYNOPSIS | |
| 1287 | −</para> | |
| 1288 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1289 | − align="char"> | |
| 1290 | −<para>int ioctl(fd, int request = VIDEO_STILLPICTURE, | |
| 1291 | − struct video_still_picture ⋆sp);</para> | |
| 1292 | −</entry> | |
| 1293 | − </row></tbody></tgroup></informaltable> | |
| 1294 | −<para>PARAMETERS | |
| 1295 | −</para> | |
| 1296 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1297 | − align="char"> | |
| 1298 | −<para>int fd</para> | |
| 1299 | −</entry><entry | |
| 1300 | − align="char"> | |
| 1301 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1302 | −</entry> | |
| 1303 | − </row><row><entry | |
| 1304 | − align="char"> | |
| 1305 | −<para>int request</para> | |
| 1306 | −</entry><entry | |
| 1307 | − align="char"> | |
| 1308 | −<para>Equals VIDEO_STILLPICTURE for this command.</para> | |
| 1309 | −</entry> | |
| 1310 | − </row><row><entry | |
| 1311 | − align="char"> | |
| 1312 | −<para>struct | |
| 1313 | − video_still_picture | |
| 1314 | − *sp</para> | |
| 1315 | −</entry><entry | |
| 1316 | − align="char"> | |
| 1317 | −<para>Pointer to a location where an I-frame and size is stored.</para> | |
| 1318 | −</entry> | |
| 1319 | − </row></tbody></tgroup></informaltable> | |
| 1320 | −&return-value-dvb; | |
| 1321 | − | |
| 1322 | −</section><section id="VIDEO_FAST_FORWARD" | |
| 1323 | −role="subsection"><title>VIDEO_FAST_FORWARD</title> | |
| 1324 | −<para>DESCRIPTION | |
| 1325 | −</para> | |
| 1326 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1327 | − align="char"> | |
| 1328 | −<para>This ioctl call asks the Video Device to skip decoding of N number of I-frames. | |
| 1329 | − This call can only be used if VIDEO_SOURCE_MEMORY is selected.</para> | |
| 1330 | −</entry> | |
| 1331 | − </row></tbody></tgroup></informaltable> | |
| 1332 | −<para>SYNOPSIS | |
| 1333 | −</para> | |
| 1334 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1335 | − align="char"> | |
| 1336 | −<para>int ioctl(fd, int request = VIDEO_FAST_FORWARD, int | |
| 1337 | − nFrames);</para> | |
| 1338 | −</entry> | |
| 1339 | − </row></tbody></tgroup></informaltable> | |
| 1340 | −<para>PARAMETERS | |
| 1341 | −</para> | |
| 1342 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1343 | − align="char"> | |
| 1344 | −<para>int fd</para> | |
| 1345 | −</entry><entry | |
| 1346 | − align="char"> | |
| 1347 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1348 | −</entry> | |
| 1349 | − </row><row><entry | |
| 1350 | − align="char"> | |
| 1351 | −<para>int request</para> | |
| 1352 | −</entry><entry | |
| 1353 | − align="char"> | |
| 1354 | −<para>Equals VIDEO_FAST_FORWARD for this command.</para> | |
| 1355 | −</entry> | |
| 1356 | − </row><row><entry | |
| 1357 | − align="char"> | |
| 1358 | −<para>int nFrames</para> | |
| 1359 | −</entry><entry | |
| 1360 | − align="char"> | |
| 1361 | −<para>The number of frames to skip.</para> | |
| 1362 | −</entry> | |
| 1363 | − </row></tbody></tgroup></informaltable> | |
| 1364 | −&return-value-dvb; | |
| 1365 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1366 | − align="char"> | |
| 1367 | −<para>EPERM</para> | |
| 1368 | −</entry><entry | |
| 1369 | − align="char"> | |
| 1370 | −<para>Mode VIDEO_SOURCE_MEMORY not selected.</para> | |
| 1371 | −</entry> | |
| 1372 | − </row></tbody></tgroup></informaltable> | |
| 1373 | − | |
| 1374 | −</section><section id="VIDEO_SLOWMOTION" | |
| 1375 | −role="subsection"><title>VIDEO_SLOWMOTION</title> | |
| 1376 | −<para>DESCRIPTION | |
| 1377 | −</para> | |
| 1378 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1379 | − align="char"> | |
| 1380 | −<para>This ioctl call asks the video device to repeat decoding frames N number of | |
| 1381 | − times. This call can only be used if VIDEO_SOURCE_MEMORY is selected.</para> | |
| 1382 | −</entry> | |
| 1383 | − </row></tbody></tgroup></informaltable> | |
| 1384 | −<para>SYNOPSIS | |
| 1385 | −</para> | |
| 1386 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1387 | − align="char"> | |
| 1388 | −<para>int ioctl(fd, int request = VIDEO_SLOWMOTION, int | |
| 1389 | − nFrames);</para> | |
| 1390 | −</entry> | |
| 1391 | − </row></tbody></tgroup></informaltable> | |
| 1392 | −<para>PARAMETERS | |
| 1393 | −</para> | |
| 1394 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1395 | − align="char"> | |
| 1396 | −<para>int fd</para> | |
| 1397 | −</entry><entry | |
| 1398 | − align="char"> | |
| 1399 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1400 | −</entry> | |
| 1401 | − </row><row><entry | |
| 1402 | − align="char"> | |
| 1403 | −<para>int request</para> | |
| 1404 | −</entry><entry | |
| 1405 | − align="char"> | |
| 1406 | −<para>Equals VIDEO_SLOWMOTION for this command.</para> | |
| 1407 | −</entry> | |
| 1408 | − </row><row><entry | |
| 1409 | − align="char"> | |
| 1410 | −<para>int nFrames</para> | |
| 1411 | −</entry><entry | |
| 1412 | − align="char"> | |
| 1413 | −<para>The number of times to repeat each frame.</para> | |
| 1414 | −</entry> | |
| 1415 | − </row></tbody></tgroup></informaltable> | |
| 1416 | −&return-value-dvb; | |
| 1417 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1418 | − align="char"> | |
| 1419 | −<para>EPERM</para> | |
| 1420 | −</entry><entry | |
| 1421 | − align="char"> | |
| 1422 | −<para>Mode VIDEO_SOURCE_MEMORY not selected.</para> | |
| 1423 | −</entry> | |
| 1424 | − </row></tbody></tgroup></informaltable> | |
| 1425 | − | |
| 1426 | −</section><section id="VIDEO_GET_CAPABILITIES" | |
| 1427 | −role="subsection"><title>VIDEO_GET_CAPABILITIES</title> | |
| 1428 | −<para>DESCRIPTION | |
| 1429 | −</para> | |
| 1430 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1431 | − align="char"> | |
| 1432 | −<para>This ioctl call asks the video device about its decoding capabilities. On success | |
| 1433 | − it returns and integer which has bits set according to the defines in section ??.</para> | |
| 1434 | −</entry> | |
| 1435 | − </row></tbody></tgroup></informaltable> | |
| 1436 | −<para>SYNOPSIS | |
| 1437 | −</para> | |
| 1438 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1439 | − align="char"> | |
| 1440 | −<para>int ioctl(fd, int request = VIDEO_GET_CAPABILITIES, | |
| 1441 | − unsigned int ⋆cap);</para> | |
| 1442 | −</entry> | |
| 1443 | − </row></tbody></tgroup></informaltable> | |
| 1444 | −<para>PARAMETERS | |
| 1445 | −</para> | |
| 1446 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1447 | − align="char"> | |
| 1448 | −<para>int fd</para> | |
| 1449 | −</entry><entry | |
| 1450 | − align="char"> | |
| 1451 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1452 | −</entry> | |
| 1453 | − </row><row><entry | |
| 1454 | − align="char"> | |
| 1455 | −<para>int request</para> | |
| 1456 | −</entry><entry | |
| 1457 | − align="char"> | |
| 1458 | −<para>Equals VIDEO_GET_CAPABILITIES for this | |
| 1459 | − command.</para> | |
| 1460 | −</entry> | |
| 1461 | − </row><row><entry | |
| 1462 | − align="char"> | |
| 1463 | −<para>unsigned int *cap</para> | |
| 1464 | −</entry><entry | |
| 1465 | − align="char"> | |
| 1466 | −<para>Pointer to a location where to store the capability | |
| 1467 | − information.</para> | |
| 1468 | −</entry> | |
| 1469 | − </row></tbody></tgroup></informaltable> | |
| 1470 | −&return-value-dvb; | |
| 1471 | − | |
| 1472 | −</section><section id="VIDEO_SET_ID" | |
| 1473 | −role="subsection"><title>VIDEO_SET_ID</title> | |
| 1474 | −<para>DESCRIPTION | |
| 1475 | −</para> | |
| 1476 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1477 | − align="char"> | |
| 1478 | −<para>This ioctl selects which sub-stream is to be decoded if a program or system | |
| 1479 | − stream is sent to the video device.</para> | |
| 1480 | −</entry> | |
| 1481 | − </row></tbody></tgroup></informaltable> | |
| 1482 | −<para>SYNOPSIS | |
| 1483 | −</para> | |
| 1484 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1485 | − align="char"> | |
| 1486 | −<para>int ioctl(int fd, int request = VIDEO_SET_ID, int | |
| 1487 | − id);</para> | |
| 1488 | −</entry> | |
| 1489 | − </row></tbody></tgroup></informaltable> | |
| 1490 | −<para>PARAMETERS | |
| 1491 | −</para> | |
| 1492 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1493 | − align="char"> | |
| 1494 | −<para>int fd</para> | |
| 1495 | −</entry><entry | |
| 1496 | − align="char"> | |
| 1497 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1498 | −</entry> | |
| 1499 | − </row><row><entry | |
| 1500 | − align="char"> | |
| 1501 | −<para>int request</para> | |
| 1502 | −</entry><entry | |
| 1503 | − align="char"> | |
| 1504 | −<para>Equals VIDEO_SET_ID for this command.</para> | |
| 1505 | −</entry> | |
| 1506 | − </row><row><entry | |
| 1507 | − align="char"> | |
| 1508 | −<para>int id</para> | |
| 1509 | −</entry><entry | |
| 1510 | − align="char"> | |
| 1511 | −<para>video sub-stream id</para> | |
| 1512 | −</entry> | |
| 1513 | − </row></tbody></tgroup></informaltable> | |
| 1514 | −&return-value-dvb; | |
| 1515 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1516 | − align="char"> | |
| 1517 | −<para>EINVAL</para> | |
| 1518 | −</entry><entry | |
| 1519 | − align="char"> | |
| 1520 | −<para>Invalid sub-stream id.</para> | |
| 1521 | −</entry> | |
| 1522 | − </row></tbody></tgroup></informaltable> | |
| 1523 | − | |
| 1524 | −</section><section id="VIDEO_CLEAR_BUFFER" | |
| 1525 | −role="subsection"><title>VIDEO_CLEAR_BUFFER</title> | |
| 1526 | −<para>DESCRIPTION | |
| 1527 | −</para> | |
| 1528 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1529 | − align="char"> | |
| 1530 | −<para>This ioctl call clears all video buffers in the driver and in the decoder hardware.</para> | |
| 1531 | −</entry> | |
| 1532 | − </row></tbody></tgroup></informaltable> | |
| 1533 | −<para>SYNOPSIS | |
| 1534 | −</para> | |
| 1535 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1536 | − align="char"> | |
| 1537 | −<para>int ioctl(fd, int request = VIDEO_CLEAR_BUFFER);</para> | |
| 1538 | −</entry> | |
| 1539 | − </row></tbody></tgroup></informaltable> | |
| 1540 | −<para>PARAMETERS | |
| 1541 | −</para> | |
| 1542 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1543 | − align="char"> | |
| 1544 | −<para>int fd</para> | |
| 1545 | −</entry><entry | |
| 1546 | − align="char"> | |
| 1547 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1548 | −</entry> | |
| 1549 | − </row><row><entry | |
| 1550 | − align="char"> | |
| 1551 | −<para>int request</para> | |
| 1552 | −</entry><entry | |
| 1553 | − align="char"> | |
| 1554 | −<para>Equals VIDEO_CLEAR_BUFFER for this command.</para> | |
| 1555 | −</entry> | |
| 1556 | − </row></tbody></tgroup></informaltable> | |
| 1557 | −&return-value-dvb; | |
| 1558 | − | |
| 1559 | −</section><section id="VIDEO_SET_STREAMTYPE" | |
| 1560 | −role="subsection"><title>VIDEO_SET_STREAMTYPE</title> | |
| 1561 | −<para>DESCRIPTION | |
| 1562 | −</para> | |
| 1563 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1564 | − align="char"> | |
| 1565 | −<para>This ioctl tells the driver which kind of stream to expect being written to it. If | |
| 1566 | − this call is not used the default of video PES is used. Some drivers might not | |
| 1567 | − support this call and always expect PES.</para> | |
| 1568 | −</entry> | |
| 1569 | − </row></tbody></tgroup></informaltable> | |
| 1570 | −<para>SYNOPSIS | |
| 1571 | −</para> | |
| 1572 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1573 | − align="char"> | |
| 1574 | −<para>int ioctl(fd, int request = VIDEO_SET_STREAMTYPE, | |
| 1575 | − int type);</para> | |
| 1576 | −</entry> | |
| 1577 | − </row></tbody></tgroup></informaltable> | |
| 1578 | −<para>PARAMETERS | |
| 1579 | −</para> | |
| 1580 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1581 | − align="char"> | |
| 1582 | −<para>int fd</para> | |
| 1583 | −</entry><entry | |
| 1584 | − align="char"> | |
| 1585 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1586 | −</entry> | |
| 1587 | − </row><row><entry | |
| 1588 | − align="char"> | |
| 1589 | −<para>int request</para> | |
| 1590 | −</entry><entry | |
| 1591 | − align="char"> | |
| 1592 | −<para>Equals VIDEO_SET_STREAMTYPE for this command.</para> | |
| 1593 | −</entry> | |
| 1594 | − </row><row><entry | |
| 1595 | − align="char"> | |
| 1596 | −<para>int type</para> | |
| 1597 | −</entry><entry | |
| 1598 | − align="char"> | |
| 1599 | −<para>stream type</para> | |
| 1600 | −</entry> | |
| 1601 | − </row></tbody></tgroup></informaltable> | |
| 1602 | −&return-value-dvb; | |
| 1603 | − | |
| 1604 | −</section><section id="VIDEO_SET_FORMAT" | |
| 1605 | −role="subsection"><title>VIDEO_SET_FORMAT</title> | |
| 1606 | −<para>DESCRIPTION | |
| 1607 | −</para> | |
| 1608 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1609 | − align="char"> | |
| 1610 | −<para>This ioctl sets the screen format (aspect ratio) of the connected output device | |
| 1611 | − (TV) so that the output of the decoder can be adjusted accordingly.</para> | |
| 1612 | −</entry> | |
| 1613 | − </row></tbody></tgroup></informaltable> | |
| 1614 | −<para>SYNOPSIS | |
| 1615 | −</para> | |
| 1616 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1617 | − align="char"> | |
| 1618 | −<para> int ioctl(fd, int request = VIDEO_SET_FORMAT, | |
| 1619 | − video_format_t format);</para> | |
| 1620 | −</entry> | |
| 1621 | − </row></tbody></tgroup></informaltable> | |
| 1622 | −<para>PARAMETERS | |
| 1623 | −</para> | |
| 1624 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1625 | − align="char"> | |
| 1626 | −<para>int fd</para> | |
| 1627 | −</entry><entry | |
| 1628 | − align="char"> | |
| 1629 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1630 | −</entry> | |
| 1631 | − </row><row><entry | |
| 1632 | − align="char"> | |
| 1633 | −<para>int request</para> | |
| 1634 | −</entry><entry | |
| 1635 | − align="char"> | |
| 1636 | −<para>Equals VIDEO_SET_FORMAT for this command.</para> | |
| 1637 | −</entry> | |
| 1638 | − </row><row><entry | |
| 1639 | − align="char"> | |
| 1640 | −<para>video_format_t | |
| 1641 | − format</para> | |
| 1642 | −</entry><entry | |
| 1643 | − align="char"> | |
| 1644 | −<para>video format of TV as defined in section ??.</para> | |
| 1645 | −</entry> | |
| 1646 | − </row></tbody></tgroup></informaltable> | |
| 1647 | −&return-value-dvb; | |
| 1648 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1649 | − align="char"> | |
| 1650 | −<para>EINVAL</para> | |
| 1651 | −</entry><entry | |
| 1652 | − align="char"> | |
| 1653 | −<para>format is not a valid video format.</para> | |
| 1654 | −</entry> | |
| 1655 | − </row></tbody></tgroup></informaltable> | |
| 1656 | − | |
| 1657 | −</section><section id="VIDEO_SET_SYSTEM" | |
| 1658 | −role="subsection"><title>VIDEO_SET_SYSTEM</title> | |
| 1659 | −<para>DESCRIPTION | |
| 1660 | −</para> | |
| 1661 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1662 | − align="char"> | |
| 1663 | −<para>This ioctl sets the television output format. The format (see section ??) may | |
| 1664 | − vary from the color format of the displayed MPEG stream. If the hardware is | |
| 1665 | − not able to display the requested format the call will return an error.</para> | |
| 1666 | −</entry> | |
| 1667 | − </row></tbody></tgroup></informaltable> | |
| 1668 | −<para>SYNOPSIS | |
| 1669 | −</para> | |
| 1670 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1671 | − align="char"> | |
| 1672 | −<para> int ioctl(fd, int request = VIDEO_SET_SYSTEM , | |
| 1673 | − video_system_t system);</para> | |
| 1674 | −</entry> | |
| 1675 | − </row></tbody></tgroup></informaltable> | |
| 1676 | −<para>PARAMETERS | |
| 1677 | −</para> | |
| 1678 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1679 | − align="char"> | |
| 1680 | −<para>int fd</para> | |
| 1681 | −</entry><entry | |
| 1682 | − align="char"> | |
| 1683 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1684 | −</entry> | |
| 1685 | − </row><row><entry | |
| 1686 | − align="char"> | |
| 1687 | −<para>int request</para> | |
| 1688 | −</entry><entry | |
| 1689 | − align="char"> | |
| 1690 | −<para>Equals VIDEO_SET_FORMAT for this command.</para> | |
| 1691 | −</entry> | |
| 1692 | − </row><row><entry | |
| 1693 | − align="char"> | |
| 1694 | −<para>video_system_t | |
| 1695 | − system</para> | |
| 1696 | −</entry><entry | |
| 1697 | − align="char"> | |
| 1698 | −<para>video system of TV output.</para> | |
| 1699 | −</entry> | |
| 1700 | − </row></tbody></tgroup></informaltable> | |
| 1701 | −&return-value-dvb; | |
| 1702 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1703 | − align="char"> | |
| 1704 | −<para>EINVAL</para> | |
| 1705 | −</entry><entry | |
| 1706 | − align="char"> | |
| 1707 | −<para>system is not a valid or supported video system.</para> | |
| 1708 | −</entry> | |
| 1709 | − </row></tbody></tgroup></informaltable> | |
| 1710 | − | |
| 1711 | −</section><section id="VIDEO_SET_HIGHLIGHT" | |
| 1712 | −role="subsection"><title>VIDEO_SET_HIGHLIGHT</title> | |
| 1713 | −<para>DESCRIPTION | |
| 1714 | −</para> | |
| 1715 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1716 | − align="char"> | |
| 1717 | −<para>This ioctl sets the SPU highlight information for the menu access of a DVD.</para> | |
| 1718 | −</entry> | |
| 1719 | − </row></tbody></tgroup></informaltable> | |
| 1720 | −<para>SYNOPSIS | |
| 1721 | −</para> | |
| 1722 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1723 | − align="char"> | |
| 1724 | −<para> int ioctl(fd, int request = VIDEO_SET_HIGHLIGHT | |
| 1725 | − ,video_highlight_t ⋆vhilite)</para> | |
| 1726 | −</entry> | |
| 1727 | − </row></tbody></tgroup></informaltable> | |
| 1728 | −<para>PARAMETERS | |
| 1729 | −</para> | |
| 1730 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1731 | − align="char"> | |
| 1732 | −<para>int fd</para> | |
| 1733 | −</entry><entry | |
| 1734 | − align="char"> | |
| 1735 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1736 | −</entry> | |
| 1737 | − </row><row><entry | |
| 1738 | − align="char"> | |
| 1739 | −<para>int request</para> | |
| 1740 | −</entry><entry | |
| 1741 | − align="char"> | |
| 1742 | −<para>Equals VIDEO_SET_HIGHLIGHT for this command.</para> | |
| 1743 | −</entry> | |
| 1744 | − </row><row><entry | |
| 1745 | − align="char"> | |
| 1746 | −<para>video_highlight_t | |
| 1747 | − *vhilite</para> | |
| 1748 | −</entry><entry | |
| 1749 | − align="char"> | |
| 1750 | −<para>SPU Highlight information according to section ??.</para> | |
| 1751 | −</entry> | |
| 1752 | − </row></tbody></tgroup></informaltable> | |
| 1753 | −&return-value-dvb; | |
| 1754 | − | |
| 1755 | −</section><section id="VIDEO_SET_SPU" | |
| 1756 | −role="subsection"><title>VIDEO_SET_SPU</title> | |
| 1757 | −<para>DESCRIPTION | |
| 1758 | −</para> | |
| 1759 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1760 | − align="char"> | |
| 1761 | −<para>This ioctl activates or deactivates SPU decoding in a DVD input stream. It can | |
| 1762 | − only be used, if the driver is able to handle a DVD stream.</para> | |
| 1763 | −</entry> | |
| 1764 | − </row></tbody></tgroup></informaltable> | |
| 1765 | −<para>SYNOPSIS | |
| 1766 | −</para> | |
| 1767 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1768 | − align="char"> | |
| 1769 | −<para> int ioctl(fd, int request = VIDEO_SET_SPU , | |
| 1770 | − video_spu_t ⋆spu)</para> | |
| 1771 | −</entry> | |
| 1772 | − </row></tbody></tgroup></informaltable> | |
| 1773 | −<para>PARAMETERS | |
| 1774 | −</para> | |
| 1775 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1776 | − align="char"> | |
| 1777 | −<para>int fd</para> | |
| 1778 | −</entry><entry | |
| 1779 | − align="char"> | |
| 1780 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1781 | −</entry> | |
| 1782 | − </row><row><entry | |
| 1783 | − align="char"> | |
| 1784 | −<para>int request</para> | |
| 1785 | −</entry><entry | |
| 1786 | − align="char"> | |
| 1787 | −<para>Equals VIDEO_SET_SPU for this command.</para> | |
| 1788 | −</entry> | |
| 1789 | − </row><row><entry | |
| 1790 | − align="char"> | |
| 1791 | −<para>video_spu_t *spu</para> | |
| 1792 | −</entry><entry | |
| 1793 | − align="char"> | |
| 1794 | −<para>SPU decoding (de)activation and subid setting according | |
| 1795 | − to section ??.</para> | |
| 1796 | −</entry> | |
| 1797 | − </row></tbody></tgroup></informaltable> | |
| 1798 | −&return-value-dvb; | |
| 1799 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1800 | − align="char"> | |
| 1801 | −<para>EINVAL</para> | |
| 1802 | −</entry><entry | |
| 1803 | − align="char"> | |
| 1804 | −<para>input is not a valid spu setting or driver cannot handle | |
| 1805 | − SPU.</para> | |
| 1806 | −</entry> | |
| 1807 | − </row></tbody></tgroup></informaltable> | |
| 1808 | − | |
| 1809 | −</section><section id="VIDEO_SET_SPU_PALETTE" | |
| 1810 | −role="subsection"><title>VIDEO_SET_SPU_PALETTE</title> | |
| 1811 | −<para>DESCRIPTION | |
| 1812 | −</para> | |
| 1813 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1814 | − align="char"> | |
| 1815 | −<para>This ioctl sets the SPU color palette.</para> | |
| 1816 | −</entry> | |
| 1817 | − </row></tbody></tgroup></informaltable> | |
| 1818 | −<para>SYNOPSIS | |
| 1819 | −</para> | |
| 1820 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1821 | − align="char"> | |
| 1822 | −<para> int ioctl(fd, int request = VIDEO_SET_SPU_PALETTE | |
| 1823 | − ,video_spu_palette_t ⋆palette )</para> | |
| 1824 | −</entry> | |
| 1825 | − </row></tbody></tgroup></informaltable> | |
| 1826 | −<para>PARAMETERS | |
| 1827 | −</para> | |
| 1828 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1829 | − align="char"> | |
| 1830 | −<para>int fd</para> | |
| 1831 | −</entry><entry | |
| 1832 | − align="char"> | |
| 1833 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1834 | −</entry> | |
| 1835 | − </row><row><entry | |
| 1836 | − align="char"> | |
| 1837 | −<para>int request</para> | |
| 1838 | −</entry><entry | |
| 1839 | − align="char"> | |
| 1840 | −<para>Equals VIDEO_SET_SPU_PALETTE for this command.</para> | |
| 1841 | −</entry> | |
| 1842 | − </row><row><entry | |
| 1843 | − align="char"> | |
| 1844 | −<para>video_spu_palette_t | |
| 1845 | − *palette</para> | |
| 1846 | −</entry><entry | |
| 1847 | − align="char"> | |
| 1848 | −<para>SPU palette according to section ??.</para> | |
| 1849 | −</entry> | |
| 1850 | − </row></tbody></tgroup></informaltable> | |
| 1851 | −&return-value-dvb; | |
| 1852 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1853 | − align="char"> | |
| 1854 | −<para>EINVAL</para> | |
| 1855 | −</entry><entry | |
| 1856 | − align="char"> | |
| 1857 | −<para>input is not a valid palette or driver doesn’t handle SPU.</para> | |
| 1858 | −</entry> | |
| 1859 | − </row></tbody></tgroup></informaltable> | |
| 1860 | − | |
| 1861 | −</section><section id="VIDEO_GET_NAVI" | |
| 1862 | −role="subsection"><title>VIDEO_GET_NAVI</title> | |
| 1863 | −<para>DESCRIPTION | |
| 1864 | −</para> | |
| 1865 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1866 | − align="char"> | |
| 1867 | −<para>This ioctl returns navigational information from the DVD stream. This is | |
| 1868 | − especially needed if an encoded stream has to be decoded by the hardware.</para> | |
| 1869 | −</entry> | |
| 1870 | − </row></tbody></tgroup></informaltable> | |
| 1871 | −<para>SYNOPSIS | |
| 1872 | −</para> | |
| 1873 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1874 | − align="char"> | |
| 1875 | −<para> int ioctl(fd, int request = VIDEO_GET_NAVI , | |
| 1876 | − video_navi_pack_t ⋆navipack)</para> | |
| 1877 | −</entry> | |
| 1878 | − </row></tbody></tgroup></informaltable> | |
| 1879 | −<para>PARAMETERS | |
| 1880 | −</para> | |
| 1881 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1882 | − align="char"> | |
| 1883 | −<para>int fd</para> | |
| 1884 | −</entry><entry | |
| 1885 | − align="char"> | |
| 1886 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1887 | −</entry> | |
| 1888 | − </row><row><entry | |
| 1889 | − align="char"> | |
| 1890 | −<para>int request</para> | |
| 1891 | −</entry><entry | |
| 1892 | − align="char"> | |
| 1893 | −<para>Equals VIDEO_GET_NAVI for this command.</para> | |
| 1894 | −</entry> | |
| 1895 | − </row><row><entry | |
| 1896 | − align="char"> | |
| 1897 | −<para>video_navi_pack_t | |
| 1898 | − *navipack</para> | |
| 1899 | −</entry><entry | |
| 1900 | − align="char"> | |
| 1901 | −<para>PCI or DSI pack (private stream 2) according to section | |
| 1902 | − ??.</para> | |
| 1903 | −</entry> | |
| 1904 | − </row></tbody></tgroup></informaltable> | |
| 1905 | −&return-value-dvb; | |
| 1906 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1907 | − align="char"> | |
| 1908 | −<para>EFAULT</para> | |
| 1909 | −</entry><entry | |
| 1910 | − align="char"> | |
| 1911 | −<para>driver is not able to return navigational information</para> | |
| 1912 | −</entry> | |
| 1913 | − </row></tbody></tgroup></informaltable> | |
| 1914 | − | |
| 1915 | −</section><section id="VIDEO_SET_ATTRIBUTES" | |
| 1916 | −role="subsection"><title>VIDEO_SET_ATTRIBUTES</title> | |
| 1917 | −<para>DESCRIPTION | |
| 1918 | −</para> | |
| 1919 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1920 | − align="char"> | |
| 1921 | −<para>This ioctl is intended for DVD playback and allows you to set certain | |
| 1922 | − information about the stream. Some hardware may not need this information, | |
| 1923 | − but the call also tells the hardware to prepare for DVD playback.</para> | |
| 1924 | −</entry> | |
| 1925 | − </row></tbody></tgroup></informaltable> | |
| 1926 | −<para>SYNOPSIS | |
| 1927 | −</para> | |
| 1928 | −<informaltable><tgroup cols="1"><tbody><row><entry | |
| 1929 | − align="char"> | |
| 1930 | −<para> int ioctl(fd, int request = VIDEO_SET_ATTRIBUTE | |
| 1931 | − ,video_attributes_t vattr)</para> | |
| 1932 | −</entry> | |
| 1933 | − </row></tbody></tgroup></informaltable> | |
| 1934 | −<para>PARAMETERS | |
| 1935 | −</para> | |
| 1936 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1937 | − align="char"> | |
| 1938 | −<para>int fd</para> | |
| 1939 | −</entry><entry | |
| 1940 | − align="char"> | |
| 1941 | −<para>File descriptor returned by a previous call to open().</para> | |
| 1942 | −</entry> | |
| 1943 | − </row><row><entry | |
| 1944 | − align="char"> | |
| 1945 | −<para>int request</para> | |
| 1946 | −</entry><entry | |
| 1947 | − align="char"> | |
| 1948 | −<para>Equals VIDEO_SET_ATTRIBUTE for this command.</para> | |
| 1949 | −</entry> | |
| 1950 | − </row><row><entry | |
| 1951 | − align="char"> | |
| 1952 | −<para>video_attributes_t | |
| 1953 | − vattr</para> | |
| 1954 | −</entry><entry | |
| 1955 | − align="char"> | |
| 1956 | −<para>video attributes according to section ??.</para> | |
| 1957 | −</entry> | |
| 1958 | − </row></tbody></tgroup></informaltable> | |
| 1959 | −&return-value-dvb; | |
| 1960 | −<informaltable><tgroup cols="2"><tbody><row><entry | |
| 1961 | − align="char"> | |
| 1962 | −<para>EINVAL</para> | |
| 1963 | −</entry><entry | |
| 1964 | − align="char"> | |
| 1965 | −<para>input is not a valid attribute setting.</para> | |
| 1966 | −</entry> | |
| 1967 | − </row></tbody></tgroup></informaltable> | |
| 1968 | − </section></section> | |
| @@ -1,398 +0,0 @@ | ||
| 1 | −iVBORw0KGgoAAAANSUhEUgAAAzMAAAGaCAYAAAA7Jx25AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBI | |
| 2 | −WXMAAA3XAAANiQFmEOuiAAAgAElEQVR42uzdd1RU18I28GdgKFZUBE0saFA0KoqFFkEhKhbAQmxJ | |
| 3 | −bIkNNEpMEUwsMZarJMZrw4KxRExQczUqil0jRBA1GAjGQqLYC4TemdnfH76cj3HodYDntxaLmTll | |
| 4 | −zuw57Zmz9z4yIYQAkYZzcnJCSkoKGjZsyMIgIiIiquPS09PRoEEDyBhmqCaQyWRo06YN3nvvPRYG | |
| 5 | −ERERUR137Ngx/Pnnn5CzKKgmMDAwwKpVqxhmiIiIiAj29vZ4//33ocWiICIiIiKimohhhoiIiIiI | |
| 6 | −GGaIiIiIiIgYZoiIiIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIiGGGiIiIiIgYZoiIiIiIiBhm | |
| 7 | −iIiIiIiIGGaIiIiIiIgYZoiIiIiIiGGGiIiIiIiIYYaIiIiIiIhhhoiIiIiIGGaIiIiIiIgYZoiI | |
| 8 | −iIiIiBhmiIiIiIiIYYaIiIiIiIhhhoiIiIiIqFLIWQRElSMsLAy2trZo1KgR5HJualTxEhIS8P33 | |
| 9 | −3+PDDz+sM5+5bdu2ePDgAZo2bcoVgCplm3J0dMS5c+fqzGf++uuvsWTJEm5TVClSU1ORk5ODBw8e | |
| 10 | −oHXr1gwzRDVJbm4uAGDRokUwMDBggVCFmzlzJrKysurUZ3727BksLCzg4eHBFYAq3IIFC5CQkFCn | |
| 11 | −PnNGRgYAYNWqVVwBqMJFRUVh48aNUCqVlfYeDDNElWzGjBkMM1QpNm7cWOc+c8uWLTFjxgzMmDGD | |
| 12 | −KwBVuLt37yIkJKTOfW5nZ2duU1SpYaYysc0MERERERHVSAwzRERERETEMENERERERMQwQ0RERERE | |
| 13 | −xDBDREREREQMM0RERERERAwzREREREREDDNERERERMQwQ0RERERExDBDRERERETEMENERERERMQw | |
| 14 | −Q0REREREDDNEREREREQMM0RERERERAwzRERERETEMENERERERMQwQ0RERERExDBDREREREQMM0RE | |
| 15 | −RERERAwzREREREREDDNEREREREQMM0RERERExDBDRERERETEMENERERERMQwQ0REREREDDNERERE | |
| 16 | −REQMM0RERERERAwzRERERETEMENERERERMQwQ0REREREVGnkLAKimunBgwdISkoq8/SGhoZ47bXX | |
| 17 | −WJCV6NmzZwgMDMS5c+ewd+9eFgiVSVZWFkJCQnD16lU8evQICoUChoaG6NChA2xsbNCxY0fIZDI8 | |
| 18 | −efIEp06dwuTJk0s876CgIJiYmKBLly4saKq2Y5Wuri6aNm0KQ0NDaGnxd3ZimCGqE/78808EBgbi | |
| 19 | −p59+QkJCgsowLS0tyGQy6blSqYQQQmWcjz/+GGvXrmVBVoKtW7di+/btuHbtGoQQMDQ0ZKFQqf37 | |
| 20 | −77/w8fHBtm3bkJCQgCZNmsDS0hLGxsZ48OABtm/fjidPnsDU1BR2dnYICwtDz549SxxmlEol5s6d | |
| 21 | −CxsbG+zZs4cFTpV2rDpx4gQOHDiAJ0+eqAzT09ODUqlETk4OAEBfXx/dunWDvb093Nzc0LdvX5Vj | |
| 22 | −GVFBGH+JaqihQ4di06ZNOHr0qMrrly5dgkKhQG5urvSnVCqRlZWF27dvY8mSJQCA7OxsFmIlmTFj | |
| 23 | −Bs6ePctfu6nMTp48iTfffBOrV6+Gnp4e9uzZg+fPn+PUqVPw9/fHkSNH8PDhQxw9ehRCCOzevRu3 | |
| 24 | −bt1CWlpaqd4jJiYG+/btw+PHj1noVGnHqnXr1uHcuXMqr+/fvx8ZGRnIzs5GSkoKIiIi8M0330BH | |
| 25 | −Rwdr166Fvb09evXqhdOnT7MQiWGGqDazsrJSeV5Y1TFdXV107NgRX331FSZPniz9ElbTnDp1SuOX | |
| 26 | −USaToXHjxujevTtXUCq1H3/8EcOGDcPz58/RtWtXREREYMKECdDR0VE9gGtpwcXFBdeuXYONjQ0A | |
| 27 | −ID09vcTvs2HDBgBATk4OfH19WfBUqTp16gS5/P9XCDI3N5euujRs2BAWFhb46KOP8Ntvv+HIkSNo | |
| 28 | −3rw5rl+/DicnJ3z66adQKpUsRGKYIaqNdHR0Sl3HeNy4cTXyysyBAwdq1EkX635TaV29ehVTpkyB | |
| 29 | −UqlEw4YNcfToUbRs2bLIaZo0aYIjR47AyMioxFdm7ty5g6CgIGhrawMAtmzZgoyMDH4BVGlkMhl0 | |
| 30 | −dXVLNJ6rqyvCwsLQqlUrAMB3332Hjz/+mIVIDDNEtfkgURqOjo5YunRpjfqMd+7cwfTp0/llU62l | |
| 31 | −VCoxY8YM6arp/Pnz0b59+xJNa2RkBC8vrxJfmfH19YWVlRUmTJgAAIiPj2cnFaRRxypTU1McOnRI | |
| 32 | −CtwbNmzA4cOHWYjEMENUl+Xm5iIhIQH6+vowMTEpcJz8HQUIIdQ6DijoBKy0CppnUfN59uwZnJ2d | |
| 33 | −S9V7mxCiVMtW2mWqiPckyu/EiROIiIgAAGhra8Pd3b1U00+aNAlZWVnFjpeamoqdO3di9uzZmD17 | |
| 34 | −tvT6f//732K3d6KqZGlpiRkzZkjPvby8it3HlmY/XNh+v6jtoCTHRU1RlmNSac8BGGaIqEpduXIF | |
| 35 | −CxYsUHs9MTERfn5+sLa2xrVr15CSkoJJkyZBX18fbdq0QWRkpMrOLTAwEMOHD4epqSnat2+Pxo0b | |
| 36 | −o3///vDz8yu0LU5ubi7Onz8PDw8PmJubS+87d+5cGBoaQi6Xw8LCQq2x5+XLl2Fra4s7d+4AAEJD | |
| 37 | −Q+Hi4gIXFxfMnz9fZdzs7Gz4+vrC2toa+vr60NHRQdeuXeHj41PgSV5Zl+lVx44dw8CBA/Haa6+h | |
| 38 | −Q4cO6NmzJw4cOFBn17OgoCC1XouoeD/++KP02NbWFkZGRqWa3sjICDt37ix2PH9/f8jlcowdOxaW | |
| 39 | −lpawtrYGAERHR+Ps2bP8IjRQaGgooqKi6mTYnDNnjvT41q1buHTpkto4pdn3CyFw7do1eHt7o127 | |
| 40 | −dkhMTIQQAv7+/rCwsIBcLkfTpk3x8ccfS9Wxc3NzsXnzZvTu3Ru6urqoX78+3n33XbWeRPfv34/x | |
| 41 | −48dLx6jFixdLw5KSkjB37lwMHz5cGp6/hkRsbCzmz58vDcv7++KLL5Cbm4vDhw9j7Nix0utz587F | |
| 42 | −s2fPylUWZTkH0NTURqTxDAwMxN69e2vUMgcHBwsAIjExsdLfS1tbWwAQAMTdu3cLHW/hwoVi5syZ | |
| 43 | −0vMrV66IESNGCF1dXWn63377TfTv31/o6+tLry1YsEAIIUR6eroYPXq00NPTE7t37xY5OTlCCCFu | |
| 44 | −374t+vbtKwCIHj16iNjYWJX3PXXqlHBycpLm16JFCxEdHS06duwoHB0dhYuLi6hfv74AIHR0dMQf | |
| 45 | −f/whTfvXX3+J06dPC2NjYwFA2NraitOnT4vTp0+L8PBwabynT5+KPn36iOnTp4vIyEjx6NEjcejQ | |
| 46 | −IdGiRQsBQPTt21ekpaVVyDLlUSgUYvbs2UIul4stW7aI7OxsIYQQ0dHRwsLCQjRq1EgAEIaGhpXy | |
| 47 | −vZubmwtfX1+NW/fzyrRdu3Zi5syZIiAgQDx58qRC5t22bVuN/MwVoVWrVlLZeXp6Vsp7KJVK0bVr | |
| 48 | −V+Hl5SW95u/vL72vs7NznT7WeHt7Czs7O41brmnTpgkAwsDAQIwYMUKsX79eREZGCqVSWSGfuaq+ | |
| 49 | −9wYNGkjr2l9//VXi6dq3by9Nt3jxYpVhpdn3X7p0SYwePVrI5XKV5Rg8eLCwsrIS7u7u4u2335aG | |
| 50 | −ff755+LJkyfirbfeEo6OjmLWrFli1KhRQktLSwAQrq6uast67949af6DBw9WGx4dHS0ds18td6VS | |
| 51 | −KZYtWya9f+/evVWGr1y5Uujq6oqAgIACv/vSHgdLew5QFpGRkQKA2nlBRQgMDBQGBgaCYYYYZmpZ | |
| 52 | −mDl48KAIDQ2V/i5duiTOnj0rvv76a6Grq6sSZtLS0kR2drZ0oAQgnJycxKFDh0RqaqqYOHGiaNKk | |
| 53 | −iTh9+rRQKpVi7NixAkCBJ5MpKSmic+fOAoDo1KmTSElJURtn6NChAoDQ19cXlpaWIiIiQhr2xx9/ | |
| 54 | −SJ9jypQpatOamJgIAGLEiBFqw7Kzs0WfPn3EqFGj1Hbw+/fvlz6bt7d3hS7TokWLBACxZs0atWGP | |
| 55 | −Hz+WDtx1Lcw0a9ZMKnMdHR3pwF4R4aa2hpnk5GSpzApbpyrC2bNnhUwmU/nRIzMzU/qxAIC4efMm | |
| 56 | −w4yG8fDwkE6gtbS0hJ6eXoWFm5oQZkaOHClNN3r06HLv+xcsWCANs7GxUflhTKlUSu/XoEEDYWlp | |
| 57 | −KS5cuKAy/erVq6XpY2Ji1JbX1NS00DCT/3hWULkrlUoxZMgQ6bvOK6f09HTRsWNH8d133xU4z7KU | |
| 58 | −RWnOARhmiBhmqizMFPeXP8zk+eGHH6ThX331VYHvcezYMQFANG3aVGRlZRU4zpEjR6T5fPHFF2rD | |
| 59 | −P/roI2n4s2fP1Ib369dPCkOlCTNbt24VAMS5c+fUhmVmZkq/MDVt2lS6mlTeZbpx44bQ1tYWhoaG | |
| 60 | −hZbH8OHD62SYMTIyKnT9K2+4qa1h5p9//lEpp61bt1bK+4waNarAX5PzgjkAMWvWLIYZDQwz+a8m | |
| 61 | −5P8rb7ipCWFmxowZ0nSOjo7l3vdv375dml9YWJjatPv27ZOGb9q0SW34zZs3peG7du1SG96pU6ci | |
| 62 | −w0xe2Cms3O/fvy9d2XdychJKpVJMmzZNODg4CIVCUeA05TkOluQcQJPDjJw1UYlql5s3b6o07hdC | |
| 63 | −IC0tDZcuXcKHH35Y4DT5718xZMiQAsfJ6xLZysqq0O41hw0bBmNjYzx//hxbt27F0qVLVe4rkNcr | |
| 64 | −DQAYGxurTZ/XDWd8fHypPrOfnx8AIDw8HNHR0WrDmzVrhsePHyMhIQE3btxQuf9LWZdp3bp1UCgU | |
| 65 | −GDhwYKHl0ahRI66Qr8jfpurevXvYsWMHvv/+e+Tm5qJdu3YYPHgwHB0d0b9//2K7JK7NFApFhc8z | |
| 66 | −NjYWhw8fxvHjx9WGzZw5EytXroRCocCuXbuwfPlyNG3alCtsDZB3U+S8dhlHjx7FiRMnkJWVBQMD | |
| 67 | −Azg4OGDAgAFwcHBAt27dSt37pSbIv8z5j1dl3ffn3+83aNCg0P1+3jxe1aJFC+nxw4cPK/zztmnT | |
| 68 | −Bt988w3c3d1x6tQpTJo0CYcPH0ZUVFShXf6X5zhYknMATcYwQ1TL6OnpQV9fX+W1evXqYfjw4Viw | |
| 69 | −YIHUkL4w+Xfy+Q+WFy5cAAA0b968yGn79++PAwcOID4+HtHR0ejRo0eJlz1vJy1K0cg1OTkZ165d | |
| 70 | −g7a2dqGNzseMGaP2HuVZJiGE1EVo586dq/Uk5v79+7h27ZpGrYO5ubllDjfff/89tm/fDoVCIYWb | |
| 71 | −3r17w9XVtVaHm1eDQ1xcXIW/x5YtW/DGG29g0KBBBZ68ubm54cCBA0hPT8f27dvx+eef18l9aFpa | |
| 72 | −msZtUy9evChzuDly5AiCgoKQnZ2Nxo0bw9HREf369YO9vT369OlTI76Tf//9V3r8+uuvV/q+v6Dj | |
| 73 | −oMrJc74f6Srr/kzTp0/Hvn37cP78efj7+2Pjxo2F9kJakWVR3GdnmCGqQ4QG9jrz9ttv4+7du6We | |
| 74 | −Lj4+XroZX3Enqp06dZIeP3z4sFRhpizu3r0rdT+5Zs2aKtkRv3jxAk+fPgVQvVdfsrOzsWrVKqxa | |
| 75 | −tarWbDf516979+5h69atUkifOnVqpVyx0ARNmjSRrmoCQExMTIXOPyMjA35+flAoFCq/yL66nefZ | |
| 76 | −sGED5s2bp3LSVlfcuHGjxpzkl/RYlNcrV3JyMg4fPiz9GOPo6CiFA01269Yt6XHv3r2rbd9flbS0 | |
| 77 | −tODn5wdzc3NkZGTg1KlTmDVrVoFX1mp7WTDMEFWDFy9eYPny5Rq3XD179sTGjRtLPV3+E8i8k/jC | |
| 78 | −GBoaSo+rYoeaF7KEELh//36JbzJYHvl/Nc/MzKy271NPTw/ffvttodUHq4uZmVmZryzo6ekhKysL | |
| 79 | −enp6sLS0hJOTE/r37w8bGxvo6uoiMDCw1u437OzscPDgQQAvu+KtSAEBAUhNTYWPj0+Rv8quWLEC | |
| 80 | −T58+xYMHD3Do0CGVX3Prip49exZYFa86ffbZZ/jhhx9KddUzj46ODpRKJZRKJTp06IChQ4fCwcEB | |
| 81 | −ffv2hbGxMRYsWIDExESNPp5GRUVJz11cXKpt31/V0tLSpOPvkSNHsG/fPowfP14jjoMMM0S12Llz | |
| 82 | −5zBgwABMnTq11nym5s2bQ0dHBzk5OYiOjoYQotB61/lv0PXGG29U+rLVr19fehwSElIlO3E9PT3p | |
| 83 | −8d9//11t34tMJkP9+vU1rm1Daerk6+vrIzMzUyW8ODo6Ftk2q7YaO3asFGbu3LmDqKgo6f5H5SGE | |
| 84 | −wIYNGzBmzBjMnTu3yHHj4+Px1VdfAXh5E826GGby7jOiSfLvc4qjq6sLhUIBpVKJjh07YsiQIXBw | |
| 85 | −cIC9vX2R1YQ11c6dO6WaDi4uLmjXrl217furUlZWFiZMmIClS5di48aNePToEebMmYMBAwao3YOq | |
| 86 | −tpdFcXjTTKIKolQqsXz5cgwYMAAAMHz48Fp1cM+7sV5cXBxu3LhR6Lh59XVbtWqFjh07VvqymZqa | |
| 87 | −SifPfn5+RVbvS01NxcyZM8v9nq1bt5YaTF64cIF3TS+FvPZcenp6sLOzwxdffIHg4GAkJycjODgY | |
| 88 | −ixYtgp2dXZ0LMgDg5uamchLy3XffVch8L168iIiICEyfPr3YcWfOnCmt25cuXUJ4eDhXWg2nq6sL | |
| 89 | −bW1tyGQymJmZwd3dHQcOHMCLFy9w69YtrFu3DqNGjaqRQebx48dSNVpdXV2sXr26Wvf9FaUkx4yF | |
| 90 | −CxeicePGmD9/PjZv3iwdfz09PTXiOMgwQ1TLvHjxAoMGDcKSJUsAvLxjcUE9oFTWTjH/1ZDKOrH+ | |
| 91 | −4IMPpMcBAQGFjpd38uPu7l7qXnOKWva8eeXV/c7TqFEjKWgFBwdjz549BU6fm5uLKVOmwMnJqdzL | |
| 92 | −pKenh/79+wN4WVc5KCioyGnrWtjJq/Lwanixt7dneCmCjo4ONm3aJD3ftWsXTp8+XeLpExMT4erq | |
| 93 | −qnZX8NWrV8PMzAz29vbFzqNly5YYPXq09Hzt2rXcwWsApVIpVTcqaXjJX+W3Jp3E50lISMDIkSOR | |
| 94 | −kJAAANi0aRO6dOlSZfv+8sirYp2enl5gGaSkpBQ5/a+//oqNGzfCz88PWlpacHV1xbvvvgsA+Omn | |
| 95 | −n3D06NEqPQ4yzBDVcufPn0fXrl1x8eJFKJVKaGlp4bPPPquy909PT1c5QJSlZ5X8YaiwOtmTJk2C | |
| 96 | −paUlAGDz5s0F1rG+ffs2goODYWZmhnnz5qkNL67xdl7PVgUd8PKqfdy+fVsanp2djcePH6v8UjVt | |
| 97 | −2jSsX79e6s0HeFllx8XFBdnZ2XBzc6uQZcr/+Tw8PNS650xMTERISAiAl41uU1NT68w2kXcAfzW8 | |
| 98 | −XLx4keGlGEOHDsWaNWuk525ubiVqJxQaGgpLS0v069dPpdvYK1euICgoCGPGjCnxjwvvvfee9PjA | |
| 99 | −gQPVWpWS/v8JsBCixoWXV/e1+dsYFhZshBA4deoU+vTpgytXrkBXVxfbtm3DtGnT1MYt674//zGv | |
| 100 | −LMfE4n5AzLvCevnyZdy+fVulDFasWCHtIwu6DUFycjImT56MBQsW4M0335ReX7dunfQdu7u7qx2D | |
| 101 | −y3McLMk5AMMMUS2kVCrx9ddfY+DAgYiPj0dubi7kcjnGjx+Ptm3bVtlynDx5UuV5YVcJipK/u+bf | |
| 102 | −f/+9wHHkcjkOHTqETp06IT4+HhMmTFD5BT4hIQETJ05EmzZtEBgYWGDf/flPivJ6bcp/QPjzzz8B | |
| 103 | −vOxONDk5WWW4ra2tNI/58+fj4MGDeOedd/Dvv/9i3LhxGDdunBQ+PD090bx5c/To0QOmpqYwMzND | |
| 104 | −UlIS/P391U7oyrpMw4YNg4eHBwDg/v376NWrF1asWIHAwEBs27YNjo6OMDAwkA4O3bt3r3WX9gtz | |
| 105 | −7do1ZGVlMbyU0SeffIJ9+/ahWbNmSE1NhaurK9zc3HDy5EmVX3pTU1MRFBSEd955By4uLli2bJlK | |
| 106 | −d8qZmZmYNWuWtP2WVF6bhLyTr3nz5hV78keVa968eYiLi6tR4eVV58+fV1mP9u3bh5iYGPz999/4 | |
| 107 | −/fffcfjwYSxatAg9evTA4MGDce/ePbi5ueH69euFVpEs674/f2+BBQWK2NhY6XFB1aofPHggPX78 | |
| 108 | −+LHa8LyaDNnZ2bCzs4OXlxe8vb1hbm4OIQQcHBwAAGFhYXj//fdx7Ngx6bxi2rRpUCqV8PLyUpmn | |
| 109 | −kZGRVPvj8ePHmDJlikrwKM9xsCTnAJqe9ok0noGBgdi7d6/GLM+TJ0+Eg4OD2h2ZZTKZiIyMFEII | |
| 110 | −ERwcLACIxMTESlkGPz8/MWjQoALvCm1nZyc+/fTTYudx5swZ4erqKrS0tKRp9fT0xKRJk8T27dsL | |
| 111 | −nCYpKUnMmzdPNGrUSLz++utixowZ4sMPPxQmJibC3d1dxMXFqU0TGhoqxo8fr7KMXbp0EV9++aUQ | |
| 112 | −QoiTJ08KJycnleE9e/YU27Ztk+YRGxsrWrduLQ1//fXXxfnz56XhOTk5YsmSJdJdk/P+DAwMxMKF | |
| 113 | −C0VGRkaFL5NCoRDffPONaNq0qcp4JiYm4ty5c+L9998XhoaGwsPDQwQHBxd65+ayMjc3F76+vnVq | |
| 114 | −X9C2bds685nj4uLEkiVLRNu2bVX2MYaGhqJZs2YCgGjTpo1YtGiR2na3f/9+0blzZ2k6uVwuRo0a | |
| 115 | −JY4fP17o+/31119i8uTJol27dmr7lN69e4tffvml1pe5t7e3sLOzq1PblLe3d6F3oq+oY5WTk5PQ | |
| 116 | −1dVVW6/y/zVu3Fh06dJFjB07VmzatEk8fPiwRPMvzb7/119/FbNmzRJ6enoq+2tvb28RGxsr/v77 | |
| 117 | −bzFv3jzRvHlzabiurq7w8PAQFy5cEBkZGeLzzz8X7du3V9m23N3dRWBgoPQ+SqVSLF26VOX43KxZ | |
| 118 | −M+n44ezsLNq3by+8vb1FaGioyM3NFcHBweLtt98WAISRkZHw8fFR+Zznzp0TDg4OKp/R1tZWZZsu | |
| 119 | −7XGwLOcApRUZGSkAiNjY2ApftwIDA4WBgYGQCbZcpRqgSZMm8PX1Van+UJ2/Lo0ZMwYpKSkq7Tfk | |
| 120 | −cjkcHR1x6tQpAC97FLG3t0diYqL0C31tkpWVhT/++ANxcXFo2rQpevToodKjSmVIS0tDWFiY1PNV | |
| 121 | −QT38ZGRk4Pr160hISICRkRG6d+9eqp6AyloW169fR1xcHIyNjdGzZ0/I5XLExMTAxMRE5e7KFal7 | |
| 122 | −9+7w8PCQrhDVBSYmJvD29q5Tn1kIgdu3b+PPP/9EXFwclEoljI2N0bVrV3Tq1KlG3tFdUy1YsAAh | |
| 123 | −ISEIDg6uU585Kiqqxnd7Xh37/uK8ePEC169fR7169dCnTx+pDeE///yDdu3alfomzjWxLKKiotC9 | |
| 124 | −e3fExsZWeK2VY8eO4f3332fXzEQlpVAosGzZMixbtky6HPzq8C+++KLOlIeenh6srKyq9D0bNGgg | |
| 125 | −9RZXmHr16klV0qqyLPIaX+bXoUMHbjhUbjKZDJ06dVK5IS0RVf++vzhGRkYYNGiQ2uuVfdsCTSyL | |
| 126 | −ysQwQ1QCT58+xZgxYxAWFlZg3XEtLS1YWFhI9WCJiIiIqPKxAwCiYpw5cwbdunVDeHh4kb18LFy4 | |
| 127 | −kIVFRERExDBDVP0UCgUWL14MJycnJCQkqN3fJI9MJoOJiQlGjBjBQiMiIiKqQqxmRlSAR48eYfz4 | |
| 128 | −8QgLC5P69y+MtrY2vvjii0pryEdEREREDDNEJXLq1CkMHjwYurq6Jbp5lIGBASZNmsSCIyIiIqpi | |
| 129 | −/CmZKB8hBPbv3w8AhVYry09XVxdeXl68ISARERERwwxR9ZLJZNi+fTvWr18PLS2tYquO6ejoYMaM | |
| 130 | −GSw4IiIiIoYZIs0wZ84cnDlzBo0aNSr0hoe6urr46KOPauUNMYmIiIgYZohqMEdHR4SGhkJbW7vA | |
| 131 | −O2wrlUp4enqyoIiIiIgYZog0z6pVq9CsWTO4uLhAW1tbel1XVxeTJ0/Ga6+9xkIiIiIiYpgh0izr | |
| 132 | −1q1DQEAA/ve//+Hw4cNYvnw5tLS0IJPJkJ2dDS8vLxYSEREREcMMkWa5cOECPvvsM/j6+sLGxgYy | |
| 133 | −mQze3t4IDAyEEAI2Njbo2LEjC4qIiIioGvE+M0SvuH//PsaOHYtp06Zh6tSpKsOGDh2KW7duISsr | |
| 134 | −iwVFRERExDBDpDnS09Ph5uYGMzMzrFu3rsBxzMzMWFBEREREDDNEmsXDwwNPnz7F1atXeSNMIiIi | |
| 135 | −IoYZopohr8H/r7/+ipYtW7JAiIiIiBhmiDRfXoP/LVu2wMbGhgVCREREVAOwNzOq84pq8E9ERERE | |
| 136 | −DDNEGqkkDf6JiIiISDOxmhnVaWzwT0RERFQLwsz333+P77//Hg0aNGCpUIVTKBTIycnB//73Pxgb | |
| 137 | −G2vEMrHBPxEREVEtCTMxMTEIDQ2Fl5cXS4UqXFRUFM6fP4/MzEyNWB42+CciIiKqRWEGAJydnbFq | |
| 138 | −1SqWClVKmDl+/LhGLAsb/BMRERHVDuwAgOoUNvgnIiIiqj3YAQDVKWzwT0RERMQwQ1TjsME/ERER | |
| 139 | −EcMMUY3DBv9EREREtQ/bzFCtxwb/RERERAwzRDUOG/wTERER1V6sZka1Ghv8ExERETHMENU4bPBP | |
| 140 | −RERExDBDVOOwwT8RERFR7cc2M1TrsME/EREREcMMUY3DBv9EREREdQermVGtwgb/RERERAwzRDWO | |
| 141 | −pjb4X716NQwMDPgFUYWLioqqc5/54cOHWL16NZKTk7kCUKXsr83Nzevc5z527BhWr17NFaAYycnJ | |
| 142 | −uH//Ptq1a4eGDRuyQDTkOMUwQ7WCJjb4b9iwIUxMTHDixAloabFGJ1W8Nm3awMjIqE59ZkdHR9y/ | |
| 143 | −fx8HDhzgCkAVrl27dujZs2ed+sytWrVCmzZtuE29QqlUIi0tTeUvJycHMpkM+vr66NKlCwupBLKz | |
| 144 | −s2FqalqptWUYZqjG09QG/xYWFrh37x6/IKIKdObMGRYCUQX66KOP8NFHH9XpMlAoFIiOjkZ4eDgu | |
| 145 | −X76My5cv48aNGxBCoHPnznBycoKVlRVsbGwQFRWFhQsX4urVq1x5NATDDNVobPBPREREpfHo0SMp | |
| 146 | −tFy+fBnXrhOJlUQAACAASURBVF1DamoqWrZsCWtra4wfPx42Njbo06cPGjdurDLtjRs3WIAMM0QV | |
| 147 | −hw3+iYiIqDCpqam4evUqwsPDERYWhvDwcDx69Aj169dH7969YWVlhdmzZ8Pa2hpt27ZlgTHMEFUd | |
| 148 | −TW3wT0RERFWvuOpi1tbWWLhwIWxsbNCtWzfI5TwNZpghqiaa2OCfiIiIqk55qosRwwxRtdHUBv9E | |
| 149 | −RERUOVhdjBhmqFZgg38iIqLajdXFiGGGai02+CciIqpdWF2MGGaoTjhx4gT27dvHBv9EREQ1FKuL | |
| 150 | −EcMM1Um5ubn48ccfsXXrVjb4JyIiqgFYXYwYZojwssF/eno63n77bTb4JyIi0lCsLkYMM0SvyGvw | |
| 151 | −r6WlhUmTJrFAiIiINACrixHDDFEJeHh44NmzZ2jQoAEvPxMREVUDVhcjhhmiMli3bh0CAgLw66+/ | |
| 152 | −YsiQISwQIiKiKlCS6mLW1tawtLRkdTFimCEqyIULF/DZZ59hy5YtbPBPRERUSVhdjBhmiCrY/fv3 | |
| 153 | −MXbsWEybNo0N/omIiCoIq4sRw0wVCAoKgomJCbp06cJvpw7Ka/BvZmaGdevWsUCIiIjKiNXFiGGm | |
| 154 | −iimVSsydOxc2NjbYs2cPv506KK/B/5UrV6Crq8sCISIiKgFWFyOGGQ1w8uRJxMTEIDY2FqtXr8br | |
| 155 | −r7/Ob6gOyd/gv2XLliwQIiKiAigUCty4cUPlqgurixHDjAbYsGEDACAnJwe+vr5Yvnx5lb7/qVOn | |
| 156 | −4OTkxLWiGrDBPxERUcFYXYyoBoSZO3fuICgoCNra2lAoFNiyZQu+/PJL1KtXr0re/8CBA9i7dy/D | |
| 157 | −TDVgg38iIqKXWF2MqIaGGV9fX1hZWeHNN9/E7t27ER8fj71792LatGlVEqSmT58OBwcHrhFVjA3+ | |
| 158 | −iYiormJ1Mc329OlThISEYPTo0UWOFxMTg3/++Yc/iNflMJOamoqdO3di/fr1UpgBgP/+97+YOnUq | |
| 159 | −ZDJZieclhFAbX6lUQktLq8Dxnz17BmdnZyQlJZVqmYUQEEIUOt/yLFNFTfvqfACUqiyrAhv8ExFR | |
| 160 | −XcHqYjXLzZs3MW7cOMTFxaFp06aFjrdnzx4cPXqUYaaaaGnCQvj7+0Mul2Ps2LGwtLSEtbU1ACA6 | |
| 161 | −Ohpnz54tdvrc3FycP38eHh4eMDc3BwAkJiZi7ty5MDQ0hFwuh4WFBU6fPq0y3eXLl2Fra4s7d+4A | |
| 162 | −AEJDQ+Hi4gIXFxfMnz9f7X2ys7Ph6+sLa2tr6OvrQ0dHB127doWPjw+ysrIqZJnKO21+V69excSJ | |
| 163 | −E2Fvb4/Bgwejbdu26N27N3bs2CGFm+qU1+D/wIEDbPBPRES1SmpqKi5cuAAfHx+4ubmhdevWaN26 | |
| 164 | −NSZOnIjQ0FD06dMHO3bsQGxsLJ48eYJffvkFX3zxBQYMGMAgoyFsbGygq6uLkJCQIse7cOECHB0d | |
| 165 | −WWDVRfwfb29v4ezsLKqaUqkUXbt2FV5eXtJr/v7+AoAAUOwynTp1Sjg5OUnjt2jRQkRHR4uOHTsK | |
| 166 | −R0dH4eLiIurXry8ACB0dHfHHH39I0/7111/i9OnTwtjYWAAQtra24vTp0+L06dMiPDxc5X2ePn0q | |
| 167 | −+vTpI6ZPny4iIyPFo0ePxKFDh0SLFi0EANG3b1+RlpZW7mUqz7T5bdq0SchkMuHp6SkUCoUQQoi0 | |
| 168 | −tDRhZ2cnAIgVK1ZU6fccGRkpAIjY2FghhBDnz58XcrlcbN++vUTTGxgYiL179woiIiJNk5ubKyIj | |
| 169 | −I4Wfn5+YNm2aMDc3F9ra2kJLS0t06dJFfPDBB2Lz5s0iIiJC5OTksMBqkH79+olPPvlEer53717R | |
| 170 | −tm1b6Xl6errQ09MTR44cYWFVscDAQGFgYCCqPcycPXtWyGQycffuXem1zMxMKWAAEDdv3ix2PkOH | |
| 171 | −DhUAhL6+vrC0tBQRERHSsD/++ENoa2sLAGLKlClq05qYmAgAYsSIEQXOOzs7W/Tp00eMGjVKKJVK | |
| 172 | −lWH79++XltPb27vClqk80z548EAafurUKZVhAQEBAoBo1KiRyMrKqpYwExsbK4yMjIS7u3uJp2eY | |
| 173 | −ISIiTfHw4UPxv//9T8yfP1/0799fNGzYUAAQLVu2FCNGjBArVqwQZ86cEUlJSSysGm7x4sWiZ8+e | |
| 174 | −hYaZ8+fPC21tbZGQkMDCqqYwU+3VzDZu3AgXFxe0a9dOek1PTw8zZ86Unq9fv77Y+ZiamgIAMjMz | |
| 175 | −ERgYCAsLC2lY9+7d0bdvX6kqWWnt3LkTV69exZw5c9TanAwfPhz6+voAgK1btyI3N7dClqk8096+ | |
| 176 | −fRsKhQIAEBcXpzLM2NgYAJCSkoK7d+9W+fedkZHBBv9ERMTqYlQjODo64o8//kBCQkKBw8+fP4/u | |
| 177 | −3bujSZMmLKxqUq0dAMTGxuLw4cM4fvy42rCZM2di5cqVUCgU2LVrF5YvX15k4yttbW21E/b8WrVq | |
| 178 | −BQCIj48v9XL6+fkBAMLDwxEdHa02vFmzZnj8+DESEhJw48YNdO/evdzLVJ5p+/Xrh08//RRZWVkY | |
| 179 | −OXKkyrD8Yay0nR5UhC+//JIN/omISCOxdzF6lY2NDXR0dBASEgJXV1e14WwvU8fDzJYtW/DGG29g | |
| 180 | −0KBBBZ6su7m54cCBA0hPT8f27dvx+eefl/m98nr/EqVs+J6cnIxr165BW1sbT548KXCcMWPGqL1P | |
| 181 | −ZS5TcdPK5XJ8++23Kq+lp6cjICAAO3bskF5TKpVV/p0fOXIEFy9eZIN/IiKqduxdjIqjr68Pa2tr | |
| 182 | −XLhwQS3MZGRk4PLly/jss89YUHUxzGRkZMDPzw8KhUK6kvGq/FcdNmzYgHnz5lX5ryB3796FEAJK | |
| 183 | −pRJr1qxRuWJSE9y7dw/r16/HrVu3MHXqVCxZsqRauw5csWIFbGxsuOUREVGV4s0oqawcHBxw9OhR | |
| 184 | −tdcvX76M3Nxc2Nvbs5DqYpgJCAhAamoqfHx8iryasWLFCjx9+hQPHjzAoUOHVK6CVIW0tDQAL6+A | |
| 185 | −3L9/H+3bt68RX2xaWhoWLFgAf39/+Pr6Ys2aNZDJZLhw4UK1Ltft27dx//59HiiIiKjSsLoYVSRH | |
| 186 | −R0csX74ciYmJKq+zvUwdDjNCCGzYsAFjxozB3Llzixw3Pj4eX331FYCXN9Gs6jBTv3596XFISEiN | |
| 187 | −CDNJSUlwdHREREQEgoKCMGTIEI1Ztl69esHExASTJk2Cn58f280QEVG5sboYVaa8djPBwcEqr7O9 | |
| 188 | −jGaolt7MLl68iIiICEyfPr3YcWfOnAkdHR0AwKVLlxAeHl6ly2pqaio1mvfz8yuyfUtqaqpKL2zV | |
| 189 | −ZeXKlYiIiICJiYlGBRkAcHZ2BgD88MMPePPNN3HixAluhUREVGLsXYyqWv52M3ny2ss4ODiwgOpi | |
| 190 | −mFm9ejXMzMxKVMewZcuWGD16tPR87dq1ZXrPokJIXljJzs5WG9aoUSNYW1sDAIKDg7Fnz54C55Gb | |
| 191 | −m4spU6aUqj1KWRr+l2TavN7h9PT01Ibl5ORU+0oXFRUF4GV7JGdnZ4wcORL//PMPt0YiIlKhUCgQ | |
| 192 | −FRWF7du3Y/r06VKVngEDBmD37t1o0qQJFi5ciIiICCQlJeHixYv49ttvMWbMGFZnpgrl4OCA8+fP | |
| 193 | −S8/DwsLYXqauhpkrV64gKCgIY8aMUbtnS2Hee+896fGBAwfw999/F7jDK0reSXxBISCvy+fbt29L | |
| 194 | −w7Ozs/H48WMAgKenpzTutGnTsH79emRlZUmv3blzBy4uLsjOzoabm1uFLFN5ps3rpezOnTv4888/ | |
| 195 | −pdczMzOxe/dulV8VyhuqyqJbt2745JNPYGBgAF1dXcTExKBbt2746quvpGUiIiLNdP36ddy5c6dS | |
| 196 | −5v3o0SMcPHgQXl5ecHBwQJMmTdC9e3csWrQIL168wPjx43Hy5EkkJCQgOjoaO3bsgLu7OywsLNju | |
| 197 | −hSpV3v1m0tPTAbysYtajRw+2l6lrYSYzMxOzZs0CgFLtdPLfUFOhUGDevHlq3QrnDzjPnz9XGSaE | |
| 198 | −kE7qk5KSkJycrDLc1tZWmsf8+fNx8OBBvPPOO/j3338BAOPGjcO4ceOkEOHp6YnmzZujR48eMDU1 | |
| 199 | −hZmZGZKSkuDv768S0MqzTOWZNu/qkBACgwYNwsKFCzF79mz06NEDXbt2lcZbtWoVlixZgh9++KHK | |
| 200 | −V7wlS5ZAX18fPXr0wN27dzFr1ixs3rwZXbp0waFDh7hlEhFpmN9//x0jR45Er169EBAQUO75sboY | |
| 201 | −1SR57WZu3rwphRlWMdMQ4v94e3sLZ2dnUVn2798vOnfuLAAIAEIul4tRo0aJ48ePFzrNX3/9JSZP | |
| 202 | −nizatWsnTZf317t3b/HLL7+I0NBQMX78eJVhXbp0EV9++aUQQoiTJ08KJycnleE9e/YU27Ztk94n | |
| 203 | −NjZWtG7dWhr++uuvi/Pnz6ssS05OjliyZIlo1KiRyrwMDAzEwoULRUZGhjRueZapIj5PUlKScHBw | |
| 204 | −UBnH2dlZxMTECIVCIczNzaXXR40aJdLT00Vli4yMFABEbGys9NquXbuEvr6+mDx5sqhfv744dOiQ | |
| 205 | −mDt3rpDL5WLIkCHi1q1b0rgGBgZi7969goiIqtaVK1eEq6urkMlkwsnJSYSEhJR6Hrm5uSIyMlL4 | |
| 206 | −+fmJadOmCXNzc6GtrS20tLREly5dxAcffCA2b94sIiIiRE5ODgudNFK/fv3EsGHDRJs2bYSenp44 | |
| 207 | −cuQIC6UaBQYGCgMDAyET/1fHaMGCBYiKikJgYGCdDHVpaWkICwuDnp4eLC0tC2xvArysmnX9+nUk | |
| 208 | −JCTAyMgI3bt3L3Tcag6piIyMxJMnT/Dmm2/CxMREGpaSkoLQ0FA0b94cPXv2LHF1v/KIiopC9+7d | |
| 209 | −ERsbK9VjFkLA3t4eTZo0QYcOHeDn54fDhw+jRYsWmDNnDkJDQ/HJJ5/gyy+/ROvWreHr66tS5ZCI | |
| 210 | −iCpPeHg4vv76axw7dgxDhgzB4sWLpZoMxSmudzErKyv2LkY1zpIlS+Dv74/U1FTEx8cjLi6O1cyq | |
| 211 | −0bFjx/D++++DFUz/T4MGDTBgwIBix6tXr16Jd+bVSSaToUePHujRo4fasEaNGlXrjTPzL+PGjRvR | |
| 212 | −p08f/PLLLwCAESNG4PDhwzh//jwCAgLw6aefwt/fXyM6LiAiqgvCwsLw9ddfIygoCMOGDUNYWJjU | |
| 213 | −EU5BeDNKqivy7jfToEEDtpfRIAwzVK0sLCwwY8YMzJs3D5GRkSqB5t1334Wrqyu+/vprfPPNN1i+ | |
| 214 | −fLlaux8iIqoYv/32G77++mucPn0azs7OCA8Ph6Wlpco4vBkl1WXW1taQy+VISUlhexmGGaL/b9my | |
| 215 | −Zfj555/x7bffSl1v5wWagQMHwsfHB1u2bIFcLoeFhQXmzJmDxYsX8xcRIqIKEBwcjKVLl+LcuXNw | |
| 216 | −dXXFlStX0Lt3bwBFVxezsrLizSipTqlXrx7Mzc1x7do1hhmGGaL/z9DQECtXroSnpycmT55cYKDR | |
| 217 | −0tKCt7c39PX1MW/ePAQEBGD9+vUq9yAiIqKS+/XXX7F06VJcuHABI0eOREhICLKzs3H27FmsWLGC | |
| 218 | −1cWICtC8eXMA4P1lGGaIVH344YfYunUrPv30Uxw4cEAt0ORxc3PD0KFDsXLlSrXuuYmIqHjnz5/H | |
| 219 | −0qVLERwcjF69emHUqFG4c+cO+vXrx+piRMXw9vbGixcvWDuEYYZIlZaWFjZs2IC+ffvi1KlTcHJy | |
| 220 | −Ugk0+Xtcq1evHpYtW8ZCIyIqhb1792LChAkAAG1tbSiVSsTGxsLIyAgjR47E2rVrWV2MqBjW1tYY | |
| 221 | −PHgwC4JhhkidjY0NPvzwQ3h6eiIyMhI6OjpSoFm/fr10o9Ca4s8//8TEiRPRrFkzaGlp8QumCvf8 | |
| 222 | −+XMsX74crq6udeYzv/POO3j48CFPuEshOTkZMTEx0o2ggZcN+QHgxYsXCAoKQlBQEJYtWwaZTCZd | |
| 223 | −hcn7r6Ojo/JcLpdDJpNBW1sbLVq0gKGhYa0pq3///RdvvfUWNmzYUGfWj++//x7r16+HsbExN5YS | |
| 224 | −ysrKwqBBg1gQJZCdnY309HQcO3as0tYxhhnSKCtXroSZmRnWrVuHzz77DDKZDGvXrsWWLVuwZs0a | |
| 225 | −vP322xg4cGCN+CyJiYm4fv063N3dYWBgwC+XKtzq1avx8OHDOvWZDx48iMaNG8PDw4MrQCk4OjpK | |
| 226 | −ISYnJ0f6r1QqkZ2drfZfCIGsrCzpf94JHABkZmZK/9u3b4+OHTvWqm0qOzu7Tq0bMTExiIyMhJeX | |
| 227 | −FzcUqnBRUVG4ePGitN9gmKFaz8jICEuXLsWXX36Jd999F61atYJMJoO+vj5sbW1VOgWoKVatWsUw | |
| 228 | −Q5Xi+PHjde4zt23bFt7e3gwzVClkMhlCQkLq3Od2dnbGqlWruAJQpYSZyj5Wse4LaZzZs2ejQ4cO | |
| 229 | −mD9/vsrrEyZMwPTp0zFixAicOXOGBUVERERUxzHMkMbR1tbG+vXrERAQgODgYOn1vCpnDDRERERE | |
| 230 | −BLCaGWkoe3t7zJw5E8+ePVN5PS/QAKiRVc6IiIiIiGGG6gBfX98CX2egISIiIiKGGaqxGGiIiIiI | |
| 231 | −iGGGGGiIiIiIiGGGiIGGiIiIiBhmiBhoiIiIiIhhhhhoiIiIiIhhhoiBhoiIiIgYZogYaIiIiIiI | |
| 232 | −YYaIgYaIiIiIYYaIgYaIiIiIGGaIGGiIiIiIiGGGiIGGiIiIiBhmiIGGiIiIiBhmiBhoiIiIiIhh | |
| 233 | −hoiBhoiIiIgYZogYaIiIiIgYZogYaIiIiIiIYYaIgYaIiIiIGGaIGGiIiIiIGGaIGGiIiIiIiGGG | |
| 234 | −iIGGiIiIiBhmiBhoiIiIiIhhhoiBhoiIiIhhhoiBhoiIiIiqNcxcuHABZ86cYalQhYuKimKgISIi | |
| 235 | −IqLKCzNpaWkYNGgQS4XqPAYaIiIiohoUZv7zn//gP//5D0uEiIGGiIiIqGaFGSJioCmMEALh4eE4 | |
| 236 | −ceIEnj17BmNjY1haWuLtt99GvXr1kJiYiJ9//hnTpk2Tpnnw4AGSkpLK/J6GhoZ47bXXih0vKysL | |
| 237 | −ISEhuHr1Kh49egSFQgFDQ0N06NABNjY26NixI2QyGZ48eYJTp05h8uTJXLGpWgUFBcHExARdunTR | |
| 238 | −mGV69uwZAgMDce7cOezdu1dl2L179+Dh4QEDAwNs3boVBgYG/BKpytbLFy9eFDq8adOmaNWqVYHH | |
| 239 | −rOjo6AKnad++PRo0aFBh63ZR2w4xzBAx0GiAFy9eYNKkSThx4gSaN28OW1tb3L9/H76+vsjKyoKL | |
| 240 | −iwsePnwIuVyuEmb+/PNPBAYG4qeffkJCQoLKPLW0tCCTyaTnSqUSQgiVcT7++GOp3Avy77//wsfH | |
| 241 | −B9u2bUNCQgKaNGkCS0tLGBsb48GDB9i+fTuePHkCU1NT2NnZISwsDD179mSYoWqlVCoxd+5c2NjY | |
| 242 | −YM+ePdW+PFu3bsX27dtx7do1CCFgaGioNs6aNWtw4sQJAICtrS08PT35RVKV+Oeff+Dn54ddu3ap | |
| 243 | −HCM6deqE8ePHo1+/foWGmaCgIPz22284fPgwAMDAwACzZs3CRx99JIWZ8qzbJdl2qIoIohrAwMBA | |
| 244 | −7N27t1qXQalUCk9PT1G/fn1x+vTpYscPDg4WAERiYmKNLfeMjAxhYWEhAIjJkyeLjIwMaVh2drbY | |
| 245 | −vHmzqFevngAgOnfuXOA8QkJCBADpLyQkpMDxsrKyxO3bt8WSJUsEADFr1qxCl+vEiRPC2NhYABAt | |
| 246 | −W7YUe/bsEdnZ2SrjKBQKcfToUfHGG29I7+3q6lqrtgtzc3Ph6+tbp/YFbdu2rdGf+fjx4wKA0NHR | |
| 247 | −EY8ePar25VEqlSIpKUl07dpVABCGhoZq42zbtk0AEDKZTJw9e7ZWr1/e3t7Czs6uTm1T3t7ewtnZ | |
| 248 | −WaOX0cfHR+U48tNPP5V42i5duggA4sSJExW6bpdk2yEhIiMjBQARGxtb4fMODAwUBgYGQotxjqh0 | |
| 249 | −V2imT5+OESNG1Ime/7Zt24br16+jSZMm2Lx5M/T19aVhOjo6cHd3x5kzZ1CvXj08evSowHlYWVmp | |
| 250 | −PC/oVzQA0NXVRceOHfHVV19h8uTJyMnJKXC8H3/8EcOGDcPz58/RtWtXREREYMKECdDR0VG7+uPi | |
| 251 | −4oJr167BxsYGAJCens4VmarVhg0bAAA5OTnw9fXViP1a48aN0b1790LHmT59Oi5fvoyoqCi8/fbb | |
| 252 | −/BKpys2bNw9vvvmm9DwkJKSkP9gjLi4OdnZ2GDx4cIWu2yXZdqhqMMwQMdAU6siRIwAAU1NT1KtX | |
| 253 | −r8Bx3nrrLXzzzTdISUlBSkqK2nAdHR1oaZVuVzNu3DhkZ2ervX716lVMmTIFSqUSDRs2xNGjR9Gy | |
| 254 | −Zcsi59WkSRMcOXIERkZGSEtL40pM1ebOnTsICgqCtrY2AGDLli3IyMjQjJOBYrZRKysrdO3alV8i | |
| 255 | −VQu5XI7FixdLz/39/Uu0Pw8PD8fz58/x0UcfVdq6XdrjGzHMEDHQVKHHjx9LJ2FFXdWYPn06WrRo | |
| 256 | −IY1fUJmVhqOjI5YuXarymlKpxIwZM6QrNvPnz0f79u1LND8jIyN4eXnxygxVK19fX1hZWWHChAkA | |
| 257 | −gPj4eDYYJiqh0aNHw8TEBACQlJSEHTt2FDvN999/j+bNm2PkyJEsQIYZIqqLgaZJkyYAgOTkZCxY | |
| 258 | −sKDQ8XR1dTFp0iT8+++/5X7PFy9eQF9fXzpo5Tlx4gQiIiIAANra2nB3dy/VfCdNmoSsrCyuvFQt | |
| 259 | −UlNTsXPnTsyePRuzZ8+WXv/vf/+r1vlFVRBCQKlUlmm6kirL/IkKI5fL8fHHH0vP165dC4VCUej4 | |
| 260 | −KSkp+PHHHzF58mTo6elV2Lpd1m2nPNNyW2KYIWKgKaP8N9Fdv349Pv744wKrfwGAj48PbG1ty/V+ | |
| 261 | −SqWy0J7ifvzxR+mxra0tjIyMSjVvIyMj7Ny5kysuVQt/f3/I5XKMHTsWlpaWsLa2BgBER0fj7Nmz | |
| 262 | −RU67f/9+jB8/Hi4uLnBxcVGpbpOUlIS5c+di+PDh0vBXr2rmd+zYMQwcOBCvvfYaOnTogJ49e+LA | |
| 263 | −gQNFvn9KSgp++OEHDB48GOvWrSvyRC0wMBDDhw+Hqakp2rdvj8aNG6N///7w8/MrtB0cUUlNnTpV | |
| 264 | −6j757t27Uk9lhR0z0tLSMH369HKv22XddgAgOzsbvr6+sLa2hr6+PnR0dNC1a1f4+PgU+gMbt6XS | |
| 265 | −p0Qi9mZWCb2c1YbezOLi4sRrr72m0ouMhYWFCA8PL9V8tLW1penv3r1b6HghISHCxMSkwGGtWrWS | |
| 266 | −5uHp6cmNgr2Z1RhKpVJ07dpVeHl5Sa/5+/tL63NJepK6d++ekMvlAoAYPHiw2vDo6GhpOytofgqF | |
| 267 | −QsyePVvI5XKxZcsWqfe/6OhoYWFhIRo1aqTWI1N0dLQYO3as0NfXl5b1m2++KXD50tPTxejRo4We | |
| 268 | −np7YvXu3yMnJEUIIcfv2bdG3b18BQPTo0aNSejRib2a1vzez/D7//HNpfezbt2+h21zPnj1Fv379 | |
| 269 | −ChxemnW7LNtOnqdPn4o+ffqI6dOni8jISPHo0SNx6NAh0aJFC2n509LSauW2VJW9mTHMEMNMJQWa | |
| 270 | −2hBmhBDi999/F82bN1cJNADExIkTxcOHD0sdZg4ePChCQ0NV/n799VexZcsW0a5duwLDTHJyssp7 | |
| 271 | −r1mzhhsFw0yNcfbsWSGTyVSCfGZmptS9OABx8+bNYudjampaaJgRQggTE5NCw8yiRYsK3XYeP34s | |
| 272 | −GjRooHZClpqaKjIzM8Xu3buLPOFTKpVi7NixAkCB301KSoro3LmzACA6deokUlJSGGYYZsrswYMH | |
| 273 | −UrAHIMLCwtTGuXLligAg/P39C5xHSdftsm47Qry8fUGfPn3EqFGjhFKpVBm2f/9+6X29vb1r5bZU | |
| 274 | −lWGG1cyIWOWsSD179sS1a9fUuq3cs2cPOnfujG3btpWqHr2bmxtsbW1V/vr37w93d3fcu3evwGni | |
| 275 | −4uJUnjds2JArHdUYGzduhIuLC9q1aye9pqenh5kzZ6pU4yyOXC4v0/C//voLK1euhKGhYYG9Or32 | |
| 276 | −2msYMGCA2usNGjSAnp4e7O3ti3zfoKAg7N+/H02bNsXUqVPVhjds2BA+Pj4AgFu3buE///kPVwoq | |
| 277 | −s9atW2PcuHHS8++++05tnK1bt6Jp06Z45513CpxHSdftsm47ALBz505cvXoVc+bMUesEZ/jw4dKt | |
| 278 | −DrZu3Yrc3FxuS+XAMENUSYHm6tWrteaztW3bFmfOnMG+ffvwxhtvSK+npqZi5syZRd4X5lU3b95E | |
| 279 | −RkaG9Jeeno6kpCRcvXoVffv2LdE8imr0SaRJYmNjcfjwYZVG/3lmzpwpddO8a9cuJCQkVMoyrFu3 | |
| 280 | −DgqFAgMHDoSurm6B4zRq1KjQ6V+9h9Or8u6XY2VlVej8hw0bBmNjY7WTN6Ky+OSTT6THP//8M2Jj | |
| 281 | −Y6XnycnJ+OmnnzBx4kSVe6OVZd0uz7bj5+cH4GX30Bs3blT58/PzQ7NmzQAACQkJuHHjBrclhhki | |
| 282 | −zQs0RfX+VVM/29ixY3Hjxg0sXbpU5VfgPXv2YPLkySW6QqOnpwd9fX3pr169emjcuDF69+6NzZs3 | |
| 283 | −FzhN06ZNVZ6/eqWGSFNt2bIFb7zxhkpnGnlatWoFNzc3AC9v6Lp9+/YKf38hhNRIunPnzhU+f6VS | |
| 284 | −iQsXLgAAmjdvXuh42tra6N+/P4CXXVJHR0dz5aAy69WrFxwcHKR1MP+VzZI0/K/sbSc5ORnXrl2D | |
| 285 | −trY2njx5gpiYGLW/MWPGwNPTE56entDS0uK2VA5ybhJElRNoHj9+XKKeTmoaPT09LF68GEOGDMGI | |
| 286 | −ESPw9OlTAMBPP/2EUaNGYcyYMWWed7du3dCqVSu115s0aQJjY2M8f/4cABATE8MVjTReRkYG/Pz8 | |
| 287 | −oFAoCr1LeHx8vPR4w4YNmDdvXrHVyUrjxYsX0jZa1NWXsoqPj5duXljcL8SdOnWSHj98+BA9evTg | |
| 288 | −SkJl9umnn0on/35+fliyZAkaNWqErVu3wtbWFt26dau2befu3btSN8xr1qyRrsAW937clhhmiDQq | |
| 289 | −0MyZM6dGh5nU1FQ0aNCg0BteWllZITg4GLa2ttKVEl9f33KFGZlMht9++63AYXZ2djh48CAAIDQ0 | |
| 290 | −lCsZDE9QJwAAGAdJREFUabyAgACkpqbCx8enyLuEr1ixAk+fPsWDBw9w6NChcm1Dr8p/FTMzM7PC | |
| 291 | −P2P+Kp95J36FMTQ0lB6X5OSOqCjDhg1Dp06dcOvWLaSkpGD79u2wt7fH9evXK6Qb/vJsO3mhRAiB | |
| 292 | −+/fvl+gGz9yWGGaINDLQ1GTu7u6YNWsW3nrrrULH6dChA3x8fPDhhx8CAP74448KXYaHDx/CyMgI | |
| 293 | −enp6GDt2rBRm7ty5g6ioKJibm3NFI40khMCGDRswZswYzJ07t8hx4+Pj8dVXXwF4eRPNigwz+W8W | |
| 294 | −+Pfff1f452zevDl0dHSQk5OD6OhoCCEK3fflv/Ff/rZ3RGWhpaWFTz75ROpIY926dYiMjETjxo0r | |
| 295 | −ZBsqz7ZTv3596XFISEiJwgy3pXKsC9wciKiwoLJ8+fJix8t/o8yS3GW5pJKSkmBpaSldbndzc1M5 | |
| 296 | −IBTUgw2Rprh48SIiIiJKVG9/5syZUkPkS5cuITw8vMwB6lWtW7eW5n3hwoVS9TxYEnK5XLoBaFxc | |
| 297 | −nNSQuSBPnjwB8LKtUMeOHbmSULlNnDhRal9y//597N69GxMmTECDBg3KPe/ybDumpqZSEPHz8yty | |
| 298 | −2ryOdLgtMcwQUSWEmaCgoCLvsAy8bBeQx8bGpsQnWcVZtGgROnfuLB2UdHR0sGnTJmn4rl27cPr0 | |
| 299 | −6RLPLzExEa6urnj27Bm/XKp0q1evhpmZWbFdvwJAy5YtMXr0aOn52rVrCxwvrzpJenp6gdtYSkqK | |
| 300 | −2ut6enpSY+G7d+8iKCioyG20oG21uO33gw8+kB4HBAQUOl5eSHN3d6/xV65JM9SrVw+zZs1Sea00 | |
| 301 | −Df+LWrfLs+00atRICibBwcHYs2dPgdPm5uZiypQpcHJy4rbEMENElRFm8nauRf1ClL9dUP7uMvNk | |
| 302 | −ZmaqXBIv7sQor3rOhg0b1HqAGjp0KNasWSM9d3NzQ2BgYLGfJTQ0FJaWlujXrx9atGjBL5cq1ZUr | |
| 303 | −VxAUFIQxY8aU+ETjvffeU9mmCqrWkndl8vLly7h9+7b0ukKhwIoVK6SQk79TAQCYN2+e9NjDwwMP | |
| 304 | −Hz5UC/ohISEAXvbClJqaqjI8f7frBTVMnjRpEiwtLQEAmzdvRmJioto4t2/fRnBwMMzMzFSWh6i8 | |
| 305 | −Zs2aJdUK6NOnDywsLEo8bXHrdnm2HU9PT+nxtGnTsH79emRlZUmv3blzBy4uLsjOzpZ6NeS2xDBD | |
| 306 | −RJUQZhISEmBnZ4effvpJpYGiUqnEjh07pBt4LV++vMBfoV8NGzt27EBYWBhiYmJw79493L17Fzdv | |
| 307 | −3sTFixexadMm2NvbS20MBg4cqDa/Tz75BPv27UOzZs2QmpoKV1dXuLm54eTJkyq/WKempiIoKAjv | |
| 308 | −vPMOXFxcsGzZMnz++ef8YqlSZWZmSr8Ul6ZXsvw31FQoFJg3b57KjwB5PywAQHZ2Nuzs7ODl5QVv | |
| 309 | −b2+Ym5tDCCF1VRsWFob3338fx44dA/CyobSHhweAl1VxevXqhRUrViAwMBDbtm2Do6MjDAwMpBO6 | |
| 310 | −7t27q9zQM/+PGbdu3VJbdrlcjkOHDqFTp06Ij4/HhAkTpAbQefuQiRMnok2bNggMDKyQKkBEeVq0 | |
| 311 | −aIGJEycCAGbMmFGqaYtbt8uz7YwbN066uWdOTg48PT3RvHlz9OjRA6ampjAzM0NSUhL8/f2lHz24 | |
| 312 | −LZWRIKoBDAwMxN69e2vUMgcHBwsAIjExsUaWuVKpFAYGBmLJkiXCy8tLmJmZiRYtWoghQ4YIV1dX | |
| 313 | −0bZtWwFAmJqaip9//lltej8/PzFgwAChra0tAJT6z8DAQOTm5ha6fHFxcWLJkiXScgAQMplMGBoa | |
| 314 | −imbNmgkAok2bNmLRokUiLi6uVm4X5ubmwtfXt07tC9q2bauxn3n//v2ic+fO0vool8vFqFGjxPHj | |
| 315 | −xwud5q+//hKTJ08W7dq1U9sGevfuLX755ReVbXLp0qVCLpdL4zRr1kxs27ZNCCGEs7OzaN++vfD2 | |
| 316 | −9hahoaEq249CoRDffPONaNq0qcp7mJiYiHPnzon33/9/7d1/dNV1/cDxF9vdxgZzTn4VET/q2DIC | |
| 317 | −A9EgEaxOBxI9kOmRUA6dOqEQET+UMDrQOXKC6mQHS4qAlHM8mgdPHTMMzBN4GHFU1CUJyVkonFJ+ | |
| 318 | −jDMYsrGN7dMfftnXxa8pG9y7PR5/7W73fnbv+3Mv7LnPfX12e9KtW7dk2rRpyebNm5OGhoZk06ZN | |
| 319 | −yYwZM5Lu3bs3e41NnDgxeeyxx055LEeOHElmz56dFBYWJr17906mTp2afOMb30j69euX3HXXXRnx | |
| 320 | −Opw/f34ycuTIDvWamj9/fjJu3LiMfgw7duxICgsLk6qqqhZd//08tz/Ia+ek+vr6ZNGiRUlhYeEp | |
| 321 | −/7/94Ac/SGpqak57/9rDa+mkV199NYmIZM+ePa2+7T/96U9JUVFR0ilp7WlAaAOXXnppLF++vNlb | |
| 322 | −MdJdaWlpXHfddXH48OGm39xkmqeffjpuuOGGk7/4iF27dkVZWVkcOnQo8vPzY9CgQTF06NCznnb2 | |
| 323 | −AvxCJnbt2hX/+Mc/oqKiIhobG6Nnz54xcODAKCkpadfvJx48eHBMmzat6TeHHUG/fv1i/vz5Heox | |
| 324 | −/6+DBw9GWVlZ5Ofnx7Bhw5r+yvnu3bujf//+Z3091tbWRllZWVRUVETPnj1jyJAhkUqlory8PPr1 | |
| 325 | −63fOv4jeErW1tfH3v/89Kioqori4OK688spmZ3dKZ/fee2+UlpbG5s2bO8zz6d57743t27e36C27 | |
| 326 | −6ezll1+OoUOHttn2z+e1U1NTE2VlZVFZWRk9evSIwYMHt+iEOZn8Wjpp+/btMXjw4NizZ0/07du3 | |
| 327 | −Vbe9bt26uP32252aGTizkyET8e6ppktKSpr9sa50kK73C9pKjx49Tpkni2jZKVrz8vKaBpPf6+Tb | |
| 328 | −SltDXl5eXHPNNXYUF1Rbhsz5vnby8/ObnfnTa6l1mZkBAADEDAAAgJgBAAAQMwAAgJgBAAAQMwAA | |
| 329 | −AGIGAAAQMwAAAGIGAABAzAAAAIgZAABAzAAAAIgZAAAAMQMAAIgZAAAAMQMAACBmAAAAMQMAACBm | |
| 330 | −AAAAxAwAAICYAQAAxAwAAICYAQAAEDMAAICYAQAAEDMAAABiBgAAEDMAAABiBgAAQMwAAACIGQAA | |
| 331 | −QMwAAACIGQAAADEDAACIGQAAgDSTsgTQttauXRtFRUUWgla3ffv2DveYKyoqYu3atdG9e/cO85gb | |
| 332 | −Ghri+PHj0aVLF096/163iXXr1sXatWs9AVqguro68vPzo1OnThYjTf6fEjPQVi+u1Lsvr9mzZ0dO | |
| 333 | −To4FoU3k5eV1qMdbVFQUGzdujLKysg7zmOvq6qK6ujry8vKic+fOfohqQ5WVlTF69OgO9Zjz8/Mj | |
| 334 | −IuLOO+/0BDiH2traqKmpiYKCgsjNzbUgLXDkyJGIiMjKars3g4kZaCPDhw+PJEksBLSit956q8M9 | |
| 335 | −5rq6uli1alUsXbo0qqqqYubMmTFr1qwoLi72hOC8LVy4MBYuXGghzmL9+vUxd+7c2Lt3b9x3330x | |
| 336 | −Z86cpgjk4jMzAwBpLDc3N6ZPnx7l5eXxox/9KB566KEYMGBALFq0KCorKy0QtJHy8vIYP358jBs3 | |
| 337 | −LoYPHx67du2KBQsWCBkxAwCIGkhPhw8fjrvvvjsGDhwYVVVVsW3btli9enV8+MMftjhiBgAQNZB+ | |
| 338 | −Tpw4EcuXL4/LL7881q5dG2vWrImNGzfGkCFDLI6YAQBEDaSn9evXx5VXXhnf+973YtasWfHPf/4z | |
| 339 | −Jk6caGHEDAAgaiA9mYsRMwCAqIGMYi5GzAAAogYyirkYMQMAiBrIOOZixAwAIGogo5iLETMAQDuN | |
| 340 | −moULF4oa2iVzMWIGAGjnUfPwww+LGtoVczFiBgAQNZBxzMWIGQBA1IgaMkp5eXlMmDDBXIyYAQBE | |
| 341 | −jaghM7x3LubIkSPmYsQMACBqRA3pzVwMYgYAEDVkHHMxiBkAQNSQUczFIGYAAFFDRjEXg5gBAFo9 | |
| 342 | −apYsWSJqaDPmYhAzAECbRc20adNEDW3CXAwt1SlJksQykPZP1E6dYvDgwTFp0iSLAZCGGhoa4sUX | |
| 343 | −X4yNGzdGbW1tXHvttTFy5EjzDLwvhw4dinXr1sXOnTvjqquuijFjxkRhYaGF4RTr1q2LzZs3ixky | |
| 344 | −wzXXXBNVVVXRtWtXiwGQxpIkiYqKiti3b180NDREz549o1evXpGdnW1xOGsMv/3223HgwIHo2rVr | |
| 345 | −9OnTJwoKCiwMZ1RdXR1du3YVMwBA66urq4vVq1fHkiVLoqqqKmbOnBmzZ8+O4uJii0OTEydOxG9+ | |
| 346 | −85tYtGhRFBQUxI9//GNvJ+N9ETMAgKjhglu/fn3MnTs39u7dG/Pnz485c+Z4WyJiBgAQNaSv8vLy | |
| 347 | −uPvuu+Opp56Kr3/967F48WKnWeYDczYzAKDNOfsZ/l4MbcGRGQDggnOkpuMwF4OYAQBEDRnHXAxi | |
| 348 | −BgAQNWQUczFcKGZmAICLzkxN+2AuhgvNkRkAIO04UpNZzMUgZgAARE3GMReDmAEAEDUZxVwM6cDM | |
| 349 | −DACQ9szUpA9zMaQTR2YAgIzjSM2FZy4GMQMAIGoyjrkYxAwAgKjJKOZiSHdmZgCAjGempnWZiyFT | |
| 350 | −ODIDALQ7jtR8MP87F7N06dL42te+ZmEQMwAAoiZ9mYtBzAAAiJqMYi6GTGZmBgBo98zUnMpcDO2B | |
| 351 | −IzMAQIfTHo/UvPnmm/Hmm2/G9ddff9brmYtBzAAAdPCoOXbsWDz77LMxfvz4i/44du3aFSUlJU2P | |
| 352 | −KScn57TXMxdDe+NtZgBAh3U+bz/75S9/GRMmTIilS5de1Mewc+fOuPbaayM7OzuysrLigQceOOU6 | |
| 353 | −5eXlMWHChBg3blwMHz48du3aFQsWLBAyZDxHZgAA/k9Lj9QcO3YsPvrRj0ZlZWVkZ2fHlClTYsWK | |
| 354 | −FZFKpS7o/S0rK4svfOELcfTo0Thx4kRERHTp0iXeeOON6NGjRxw+fDgWL14cv/jFL+Jzn/tc3H// | |
| 355 | −/TFkyBA7GjEDANBRo+anP/1pLFiwIOrr6yMiIicnJ0aOHBl/+MMfoqio6ILcx5deeik+//nPR3V1 | |
| 356 | −dTQ0NDR9Pjc3NyZNmhRXX321uRjEDACAqPn/qLnzzjtj0KBBp7wNLTc3NwYMGBDPPPNM9O3bt03v | |
| 357 | −15YtW2LMmDFx/PjxZiHzXgUFBfH973/fXAxiBgBA1LwbNQcPHoz6+vrTRkROTk5ccsklsWHDhrjq | |
| 358 | −qqva5L5s2rQpvvzlL0ddXV00Njae9jpZWVkxZMiQ2LZtm52HmAEAIKKysjL69OkT1dXVZ7xOdnZ2 | |
| 359 | −pFKpePzxx1v9TGcbNmyI8ePHR319/RlD5r1B87vf/S5uvfVWO452y9nMAABaaNWqVU1zMmfS0NAQ | |
| 360 | −dXV1cfPNN8eyZcta7Xs/9dRTceONN571iMx7JUkS3/3ud+P48eN2HGIGAKAjO3bsWCxZsuScMXMy | |
| 361 | −JBobG2POnDnx7W9/+4xzLS31xBNPxM033xwnTpyIlr6pJkmSePvtty/6qaNBzAAAXGTLli2Lo0eP | |
| 362 | −vq/bNDY2xsqVK+Omm26Kd9555wN930ceeSRuu+229xVEeXl50alTp4iIeO2118JUAe2VmRkAgHOo | |
| 363 | −qamJgoKCiHj3rGV1dXXv6/a5ubnxiU98IjZs2BC9e/du8e1Wr14dU6dObdF8TCqVirq6uhgwYEBM | |
| 364 | −mDAhxo4dG6NGjYrOnTvbgYgZAICObN++fbF169bYunVrPPfcc1FWVhZ1dXWRl5fXooH8nJycKC4u | |
| 365 | −jmeffTYGDRp0zu/34IMPxne+850zHlXJy8uLurq6yM3NjS9+8Ytx0003xdixY6N///52FmIGAIAz | |
| 366 | −q6+vj5dffjmef/75+Nvf/habNm2K/fv3RyqViuzs7KitrT3lNllZWZGXlxe///3vY+zYsWfc9s9+ | |
| 367 | −9rOYN29es0By9AXEDABAm/nPf/4TL7zwQmzZsiU2bdoUr776atTX10fnzp2jtra22VGWX/3qV3HX | |
| 368 | −XXedso377rsvFi5cGBHvnua5sbHR0RcQMwAAF1ZdXV288sorsXXr1ti8eXOUlpbGgQMHmr7+pS99 | |
| 369 | −KdavXx9ZWe+ek2natGnx61//OiIi+vfvH1/5ylccfQExAwBcKPv27Ys//vGPFuIMDh8+HP/617/i | |
| 370 | −6aefjoaGhujbt2/ccccdsX79+vj3v/8dH/rQh2L06NHRrVs3i3UWI0eOjE996lMWQsyIGQCg9ZSW | |
| 371 | −lsZ1110XvXr1ii5duliQczj5N2mysrKaTqfM2e3evTuWL18e06ZNsxgdXMoSAABt4fXXX4+ioiIL | |
| 372 | −QasbPHiwRSAi/NFMAABAzAAAAIgZAAAAMQMAAIgZAAAAMQMAACBmAAAAMQMAACBmAAAAxAwAAICY | |
| 373 | −AQAAxAwAAICYAQAAEDMAAICYAQAAEDMAAABiBgAAEDMAAABiBgAAQMwAAACIGQAAQMwAAACIGQAA | |
| 374 | −ADEDAACIGQAAADEDAAAgZgAAADEDAAAgZgAAAMQMAACAmAEAANqBlCUAADh/VVVVsXfv3vP7wSyV | |
| 375 | −ik9+8pOxf//+OHjw4BmvV1xcHB/5yEdO+XySJPHaa6+d9jYDBgyILl262FGIGQAAmvvLX/4St9xy | |
| 376 | −y3lto2fPnrF///7YvXt3rFy5Mh5++OFIkqTp6yUlJTFx4sQYNWrUGWPmz3/+c2zZsiWefPLJiIgo | |
| 377 | −KiqK6dOnx4wZM8QMYgYAgFPV1NRERETv3r1jwYIF8dnPfjYuu+yySKVSUVpaGpMmTYqIiI997GPx | |
| 378 | −3HPPRZIkcfz48XjrrbfiySefjGXLljVtY8SIETFixIi44oorYt68eU3f44c//GFMnDjxjPchKysr | |
| 379 | −7rnnnrjnnnti4MCBsWPHjnj88cdjzJgxdhBiBgCA06uuro6cnJz461//GiUlJc2+1qNHj6aPc3Jy | |
| 380 | −ok+fPk2XL7/88hg9enRceumlsXjx4ma3mz17djz00EOxc+fOiIgoLS09a8yclCRJVFRUxMiRI4UM | |
| 381 | −7ZoTAAAAtIKampoYP378KSHTUjNmzIjGxsZoaGho+lwqlYqFCxc2XX7kkUfi2LFj59zWCy+8EAcO | |
| 382 | −HIgZM2bYMYgZAADOHTPjxo37wLe/7LLLYtiwYXH8+PFmn7/llluiX79+ERFx5MiR+O1vf3vOba1e | |
| 383 | −vTq6d+8eEyZMsGMQMwAAnN28efNiypQp57WNLVu2REFBQbPPpVKpmDVrVtPln//8582O3vyvo0eP | |
| 384 | −xqOPPhpTpkyJvLw8OwYxAwDAOX6oysqKTp06ndc2srOzT7uNb37zm1FUVBQREW+88UbTmcpO59FH | |
| 385 | −H41jx47Ft771LTsFMQMAwMVVWFgYU6dObbp8//33n/Z6SZLEihUrYtSoUR94dgfEDAAArWrmzJmR | |
| 386 | −Sr17ItotW7bE888/f8p1XnrppXjllVeahQ+IGQAALqo+ffrEbbfd1nT5dEdnVqxYEcXFxfHVr37V | |
| 387 | −giFmAABIH3PmzGn6+Iknnog9e/Y0Xa6qqorHHnssJk+eHJ07d7ZYiBkAANLH0KFD4/rrr4+IiMbG | |
| 388 | −xnjggQeavmbwHzEDAEBamzt3btPHK1eujKqqqqbB/xEjRsSnP/1pi4SYAQAg/dxwww1NZyo7evRo | |
| 389 | −rFq1KrZt2xZlZWUG/xEzAACk8Q9vWVnNZmeWLVsWDz74YFxyySVx6623WiDEDAAA6Wvy5MnRvXv3 | |
| 390 | −iIjYu3dvrFmzJu64447o0qWLxUHMAADQehobG1t1e/n5+TF9+vRmnzP4j5gBAKDVvfPOO00f19TU | |
| 391 | −tMo2p0+fHnl5eRERMWzYsPjMZz5joREzAAC0rmeeeabp471798aOHTvOe5u9evWKyZMnR0QY/EfM | |
| 392 | −AADQeg4dOhRTpkyJIUOGxIoVK5p97eqrr44bb7wxfvKTn5zX95gzZ04UFhbGxIkTLTgdUsoSAAC0 | |
| 393 | −vm7dusWaNWva9HtcccUVsWnTpigsLLTgdEiOzAAAZLChQ4daBMQMAACAmAEAABAzAAAAYgYAABAz | |
| 394 | −AAAAYgYAAEDMAAAAYgYAAEDMAAAAiBkAAEDMAAAAiBkAAAAxAwAAIGYAAAAxAwAAIGYAAADEDAAA | |
| 395 | −IGYAAADEDAAAgJgBAADEjCUAAADEDAAAgJgBAAAQMwAAgJgBAAAQMwAAAGIGAAAQMwAAAGIGAABA | |
| 396 | −zAAAAIgZAABAzAAAAIgZAAAAMQMAAIgZAACA9JCyBABAW+jVq1cUFBRYCFpdZWWlRSAiIjolSZJY | |
| 397 | −BgCgtVRUVMTGjRstBG1q6NCh8fGPf9xCiBkxAwAAZB4zMwAAQEZKvb79xaYLJYOutiIAAEBGcGQG | |
| 398 | −AADISP8FpxZnWS0U37cAAAAASUVORK5CYII= | |
| @@ -1,447 +0,0 @@ | ||
| 1 | −R0lGODlhcwKfAucAAAAAAElJDK+vr0gSElYMDC8kDV5bEBcHOwYGSEQODmEaGgoKOBkTVC0tVyAg | |
| 2 | −aDcJC6Ojoys8DAAYGqSkxV9fFFtdEJmZmUA4EF0wMAAAcAoTHTZHJ0gYGAcMTwcSO29ISFUHB2AV | |
| 3 | −FXd3YAcHMRUVQiIAGg4HT3t7eywOJ3d3dwcHSEEgABMuDnd3OGpkSQAAYlZGBzEEBGJlDCstCxwc | |
| 4 | −WQcHSzkRGWBtYC0AACA3ABAKNhAQTTMwDA0VQD4AAEYVFVVVVSQMJQULOB8fQScnYBgYRD5VPmZm | |
| 5 | −DEZRB2ZiDAoKSgAAVAwQOH5+lBwcS+7u7hoaST4+X3d3WACPADMzMyBRIDgAAGBgc0JCEHEAAEwN | |
| 6 | −DRkwDAoKOR8kPZR7eyA1IABpABgNQBA9EABVAAsLRww/DAwMPgBNAENDCgc9B8zMzAUFQQBDAD4M | |
| 7 | −DAwOKgAAcQA5AEtLFYqKAA0NTC8HBxEREQgfCAArAAApACIqMkkGBhoqKnwAAAsGQ6qqqkoKCg4O | |
| 8 | −MlkcHAoZJCcrW6SkpFQAAAAAOBAOSwAVGh0ROgMPHWZmB00QEGUAAFQaGjEyC2w4OLe3n4qKioiI | |
| 9 | −iBAVMC4uXhkZUGIAAHJYWHd3AAAAPhAQUQUGL0BAIGggIBgAGkIVFV9fEAwcJR8KJA8MU9EAAAcH | |
| 10 | −VRoaYWhoaDcAALu7AGZmZnAAAGRkZGQVFVhqWD4KCgwOUzMzDAAAmgklBzEHBzExClhYWBMTPAYJ | |
| 11 | −Qy8fCFpaB///////ACISRExUDUQrDAwMVhISSEYYGHd3IDhcOERERElJAAkPNTsHF1hYckgGBj05 | |
| 12 | −CFYAADg4OCAVO0hCDDAwMLu7ilpaDR8qCDg+EBxGHN3d3REGNjo9CDQ8DBwYRGZmHFMAABQ+FBE+ | |
| 13 | −ESIiIhs+BxU0FWVeBw04DYqKsxAsEB8hQAwuDAc2BwwqDAoqCgcIL1dMDQAA0Q0iDQwiDAckBxAQ | |
| 14 | −EDwAAAAAU0JCDAkJPru7u5oAADg4bAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAALwALAAAAABzAp8C | |
| 15 | −AAj+AHkJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX | |
| 16 | −MGPKnEmzps2bOHPq3Mkz5z0AQIMCSNHyZ0WjE5GqNAZAqcGmT+8VZMoL6k6rEp0KfEJl489VBcEB | |
| 17 | −GGjBwk8LBJsyFQqU15MUdQDUWfVk4JNVccER5ZXCT8+/gAN/xFp0LEWtDxEfRKo44s8n1/YeJCyQ | |
| 18 | −8GO+1xhSbvwxRWaklBEiXoVW4886BNW0FQjkyem6laUKdLqKSuZrQIxtpbLqc51JbsHBFkw8pYUT | |
| 19 | −w4uHDK2SM0PnCqHPNiz9uWGFoS1fb7h5u0nQshf+ar2G2isAKn4FpqByHQivn8YkY3WK9RoANXx1 | |
| 20 | −kwUncBVw5QCSdAsA8jiDXIAeEQYXAMbgp0YKKQAFYVxEPbjgXm/FBURmD1pQxz1qsDfUdAVlCMCG | |
| 21 | −vFg4lhpMgbOKYX6IBY5fHX642FBx0cULbnKlUFdQkgS1IxA91mWMBWJRYQF7dZQ2HVBIsdhjbG4R | |
| 22 | −WUeE4f3UFlQN6hUiUK1puV1Q93Sp24LglNYlAGmmKGJrvBxJ4YWxiUkmLzGymZ6ULnqXAlgC5Tmj | |
| 23 | −QRE2qd+NkwDKCziTwAjcT6rhV1WW28013D11UfHfVrItieCnHw0YVIEHgnoRVutllgJ/X+F54hP+ | |
| 24 | −fjT1FWR68WXbXV3dU4cxmBoDnGpSaZUqru/NJRUVrV3DXrHBAnCNrrwmN9Cs17jIC2+QUUEUY4Zh | |
| 25 | −qyxR52X2IlFwFWSUUU/8tmObXBrzxBNEhveeYVCd5wd5RD1Ra3eVzajGPeCoSq8x4qJ2ZXDghvlq | |
| 26 | −rFJBBR6z82aGbLbe+TqbjT9lNtCq4npHUMblqQEOUr3Nmx+VJJIVl7aSToqQan/ZydbMNNds8804 | |
| 27 | −56zzzjzXbGpFWA0q0IdKWSWrswIhyUuTAtn3L9IE2ddsQUzveF/GKUJtwVirSAZECliLpnUdqmns | |
| 28 | −ockml500agCkx625YxnlqUCT6NaU2lbL+zD+AKXNpTHK09Lr5MaCk+h3WrIZ3fDULnc90Nd4b12Q | |
| 29 | −VY6zJtmiTnoc+LV+QYiUfuiyS6lB96wHAKDMAa5TZBC27vrrsMcu++y012777bjDHg3N4Dgj7c8P | |
| 30 | −YTXzPUUnTvx1Rgl/PFlUgBMv2gMp/zaJawUFtuabT6fUudTFjfxYVk2/uVERCmX38tHrTe/iTa8C | |
| 31 | −Th1A4MevyykCsStV9Bt1jfvwy288lQ5bX5zYcr3spU8g1ZMQ4gbCH7HxIlGLetp7/sOYOjxhPthz | |
| 32 | −FX40VRDPqA54IISIqAhkoN+F0CFBkxf0FBe2s1XNaVG6D5W08sKrGcY+ZuPa5aB3I7OBI3L+qHkb | |
| 33 | −EPPXPbiZzAKHSh8Om6YdAKowQ/TLnlUOhrbwbQeKinNiFaVSuYEskReSI4iNeNFFg1StKgnRH9lY | |
| 34 | −NZYUSEopX8NgWpIDlVURJFawSd0J92iQW5DKhHzkTnhS9UALFq9Op6MVuW5VG7RF6oFt46GtrkEs | |
| 35 | −pRgjWcvSVbCIhrwdUqtW3tLWvOqClFCCSzbiIxG61PUtlxnDXfBqosusAgQ42TGSHwPAj2TDSqbs | |
| 36 | −kkS1rMst/zdLxjkMYza6JMWmshdNQqx0fAkYGanjyW6J0iiHUkq65DiQV2aGWMFB0T1EmbVAmjMh | |
| 37 | −lDwnRRS0MvwcclI/WZCOTAQnpSwoPgD+mIRW6EnK6zyBKYZKmozQYk/vqIiKPEKoWNRAHtQkdC9W | |
| 38 | −TNn4DPMlKkIllldyYy61mKK1UAE/AI3aQq2CJDbBhW2oXJFH/YeyekmlodeSYUnb5BaAIrEgk3CP | |
| 39 | −QNlUmgi55UVNMoxPNwpJd95HMk5p1Ojsghe5lGwrTa1V0nSqzqpadSXVmckOr7rHdAEyNbDRVU+A | |
| 40 | −MDiumvWsHclqTO6xKbSeMAVlPcgqWgMvReWkWm7Nq14tota9+vUjb2FILF/FE7P89bCITaxiF8vY | |
| 41 | −xjr2sZCNrGQnS9nKWvaymM2sZjfL2c569rOgDa1oR1uSfxHvtKhNrWpXy9rWuva1sI3+7WkBaVrZ | |
| 42 | −2va2uM0tbNOo29769re7FQ1wh0vc3/K2uMhNbnAN4hrlOve5p21ZQvIxi+pa97rYza52t8vd7nr3 | |
| 43 | −u+CtbgZUOBBP4OO86E2vetfL3va6973wja98z1uIhHBDFfjNr373y9/++ve/AA6wgAeMX24kxBpg | |
| 44 | −SLCCF8zgBjv4wRCOsIQnTOEEWyMhSwivhjfM4Q6DlwaiYcV8R0ziEptYvp5gSD7cweIWu/jFMI6x | |
| 45 | −jGdM4xrb+MYsngV5BeKJUvj4x0AOspCHTOQiG/nISE6yjy+REGL04slQjrKUp0zlKlv5yljOspaf | |
| 46 | −TIyEVGEKYA6zmMdM5jKb+cxoTrP+mtcM5iok5AU4jrOc50znGztANPhQsp73zOc+JznFC1lxnQdN | |
| 47 | −6ELTWMcI6bGfF83oRhuZyQhx8pYnTelKWzrLXUbIl9nM6U57+tNqdjNC4GzoUpt60HdeTJ4dzepW | |
| 48 | −LxrQChH0qWdN60PvmBeKdrWud/3oJl/618AONpYzfZBNg/rYyE72mUV9EFLX+tnQdkeqSbdqXlv7 | |
| 49 | −2qWAdULOYYZue/vb4A63uMdN7nKb+9zo7jYXIIAQDhDg3fCOt7znTe962/ve+M63vt9di4TI4ggA | |
| 50 | −D7jAB07wghv84AhPuMIXDnBZJOQd6Ii4xCdO8Ypb/OIYz7jGN87xiL8jIexIt8j+R07ykqPbDQiB | |
| 51 | −wB/2zfKWu/zl+uaAiqNNc1oj+iC5xrbOWw3pg0ha2EAP+qWJbRBjK/voSP80sw3i7Jo7ndDTNle1 | |
| 52 | −d051RmsbIbJ+utbnfHOD5LzqYN9zzw3yc6Gb/exWJnpBjJ70trvdzEsvSNO3TncbR/1jUw+73pF8 | |
| 53 | −9YNkve6Al3HXC/L1vRt+yGMvSNnRznjGq50gbH+75N8ed4LMPfCYb/Hdp5X3w3v+x303yN8zn/nB | |
| 54 | −E6Twn/d84gmy+Ma7PuiPH0jkJ0/7o1d+IJcnfeA3P5vOp/7woS/IEOZA/OIb//jIT77yl8/85jv/ | |
| 55 | −+cUnBEJ+oIXqW//62M++9rf+z/3ue//74K8+LBKChWmY//zoT7/618/+9rv//fCPv/mxkBBzkOP+ | |
| 56 | −+M+//vfP//77//8AGIACeH/mkBD2AH0ImIAKuIDPxwQIQQjhF4ESOIEUGH4/MHO6p3umV16/14Gr | |
| 57 | −NxCt93oi+GuxJxCzV3soCGq3JxC5l4F0x3vv4XsdqHfBRxCj54J0t4E8NoOp94ECEYIjGISTVoK8 | |
| 58 | −cIIpeIRstoK80II4+HQweA8yyINVV4MDcYNN+HQ6iGtSqHq+JoReWGlEaIRIOIbL9mZXuHt4toXA | |
| 59 | −h4FnmIO3hnpquHM+yAtA+IV2OGVhSIZ6mIRm2IYvmIZxSIMMAQUvUIiGeIj+iJiIiriIjNiIjviI | |
| 60 | −kFiIS8BuB5EA83CJmJiJmriJnNiJnviJoBiKoniJOJAQ2ZAJqJiKqriKrNiKrviKsBiLsjiLqJgN | |
| 61 | −CREPbJCLuriLvNiLvviLwBiMwjiMxJiL8ZAQhhCJyriMzNiMkDgCKZcKoziN1FiN1iiKCcCGfoiF | |
| 62 | −bxiIejeHdXiH4tgLebiH5liGo7aNW/eEUeiNvEaFAmGF6lhrWQiH7shr4DiO+oiHXnaO/khmSsiE | |
| 63 | −8zhr7HiPU6iNAwlt9WiQVJeP+/iQ5NiP/ziRUxCQCVlzBcmQOgePvEAEHvaRIBmS3pUBAoAQrsAH | |
| 64 | −KJmSKrmSLNmSLvmSMBn+kzI5kyjZDAkRCgSWkzq5kzw5YKGQEGJQYUI5lERZlBQmBhgmkkq5lCC5 | |
| 65 | −CQghAI1Ak1I5lVRZlTPpCgzRAG+wlVzZlV75lWAZlmI5lmRZlma5lfRQkgehACfWlm75lvBVXwgR | |
| 66 | −B3JQl3Z5l3iZl3q5l3zZl375l4BZl3GQEOJwBoZ5mIiZmIq5mIzZmI75mJAZmYYpDgmhCWd5mZiZ | |
| 67 | −mZppliTwlCIGl6AZmm2pAAh5kTbXjRqJbQ4JkfpYjhTpjxZpmtCWkalpbRwpj7JZaAtZm9a2mqwp | |
| 68 | −jq75muYYm7lJa7TJm7p2m8VJj6iJnLrmm79ph8EpnHpInMtpasfpnKz+xpFOUAPe+Z3gGZ7iOZ7k | |
| 69 | −WZ7meZ7omZ7eqQKUaBADAALwGZ/yOZ/0WZ/2eZ/4mZ/6uZ/wGQMJgQa7EKACOqAEWqAGeqAImqAK | |
| 70 | −uqAMGqBokBDrkA4SOqEUWqEWeqEYmqEauqEc2qESug4JsQbqOaIkWqImmp4LkHJ6wJ8s2qIu+qL7 | |
| 71 | −OQCleZ2EtpvayXNdGJ13OJ3UOYbWSaOFlp03anUzCqR0ZqND2mjQqaNCyKM9eoQ/aqR1JqRJ2mfK | |
| 72 | −KaW62ZxVumhLyqQj6KRPioJRiqVyRqVbqmdXSqZ1hqRnymdd6qWvB6ZhSntjqqZ2BohtaqUM0Z0n | |
| 73 | −2qd++qfmyZ4I8Z7+MFqohnqo+OmfCAGgDdqojvqokLqgD4oQEeqhlnqpmJqpHAqiCCGigPqpoNqn | |
| 74 | −KXoQELCiiHqqqFqoMhpodrqmWpqnevamcNp4cjqnklenrUpjZgqrRpamuYpjbMqrSCars4p2tWqr | |
| 75 | −boervxpjuyqsQ+ary1pjweqsRUasxWp2x4qsSaes0epizUqtQMaRWrmZ5Fqu5jqWaYkQbCma7Nqu | |
| 76 | −cZkQdBmY8jqv9FqvfzmYCFGYkrmv/Nqv/gqZlIkQlnmuBFuw5NqZByEAn+muDNuw+ECaC+GRTDmx | |
| 77 | −FDuSamkQJ2mVGruxHAuTNokQONmTIjuyJAtgP4kQQWmUKruyLBv+YUiJEBlWsTI7s9XllAkblR2b | |
| 78 | −szqrsVjJqt1qY9MKrkJmrdcKexKprWLahz+rq3gqtEUGrUsLY0HrtD9GtEUrbNmKtMrGrUv7rU4L | |
| 79 | −tVHrYlNLtaVgtVcLbFmrtcjGtT/rtULLkVHgAHI7t3Rbt3Z7t3ibt3q7t3zbt3JLA7eGAZ4wuIRb | |
| 80 | −uIZ7uIibuIq7uIzbuI47uKCQEJ1ADJRbuZZ7uZibuZq7uZzbuZ77uZTbCQnxBVVQuqZ7uqibuqq7 | |
| 81 | −uqzbuq77urBbul+QELjgt7Z7u7ibu317DqIRCI/7u8AbvMLruBhAWsZ7vMibvMq7vMzbvM77vNAb | |
| 82 | −vdI7vdRbvdb+e73Ym73au73c273e+73gG77iO77kW77me77om77qy1VnBEblsRXNlEGawRa6ARr0 | |
| 83 | −K0nzEhRCcxDlwxZScRdxYSnRIxRwsr4GfMAPkQJUxQtAYFdDhRhqQCSEhRCh8TBGdMHumx5ptB3k | |
| 84 | −gSK4UQcaYxXKssAIXMImPBCqARsXpMF+EBcSxUB0wRVJNDnkZcFEdcPRJB7bcUkFUUuAEysnHMRB | |
| 85 | −TFMt7EVpUkRTEVYZVMEChMEGZDV/cyN2IUOpoUtRBMRCnMUHrMD9IRm+kkqE0kCTUcNNjMMvHEVS | |
| 86 | −fMYcNcJa3Mbqm8JLIylcDMZ2ARe3VhVskTIzsy0eoxV6BD3+ilEv5vNVblzI3qskMXIx/aTGhUQw | |
| 87 | −2EHGH4S/TvFFDrQVVIzCVvzHhrzJ3ptTldO/ZIIYq3LHB3TBTEw622FH0bHDJOzDaMzJsAy+9vFD | |
| 88 | −qHzGFyRdCXHKryzJ1+EhGlzJTQM/t2E/IUzKsXzM19s8aSwzvDIzuQzJeJzHzJy/QLG/G1wiTXU4 | |
| 89 | −kYzM3NzN3vzN4BzO4jzOZpUCr3TOr4TLH4FE6PxKcUXO8BzP8jzP9FzP9nzP+JzP+rzP/NzP/vzP | |
| 90 | −AP1YuTPQBF3QBn3QUexXrHPQDN3QDk3QCb1XpfPQFF3RFg0hjtUzGr3RHN3RPGPMZiUzHj3SJF3S | |
| 91 | −NwPSXAX+yia90ixN0hm9VXr1Eyh9VTKdWDWNWEOF0/K7VyOCWDd9WD/9V0HtVzl9WEWtWD0N1Joc | |
| 92 | −0kvNVUO9V0dN1DutV0ntBZhw1Vid1Vq91Vzd1V791WAd1mKN1YEz01b10zfwCmq91mzd1m791nAd | |
| 93 | −13I913Rd12p9A2WdWDl9DWPd137914A91l5AOC/NgWRLZD331DGNFWKotlub1zrNeYdNZLAW1YiV | |
| 94 | −1PZItond1DTN2I5Np5Bt1MjTjlRb2VOdV5g92YgX2kLt2Z99q6wt1ZKt2kFm2oW9g7QNZJtt1lX1 | |
| 95 | −04392ioY21A92rkdroTdWEnNCKm63Mytn8sg3IsdHur+oKnUXd3WvaHqAN15ldOE0Nze/d3yyQjH | |
| 96 | −zVipXdxLpt1u5dvATXnojVY5DYXm7WO2jdySkdlUu9s27drrva3tfVbvTdpfO96LVd7mjd8+rd/7 | |
| 97 | −bXv9Xc7EHd/zTd71Hd9lu+BOjeAJnmzMptjb3eDm/eADLhmECt4inqqKOi+8rU4/XanXveIsrqmc | |
| 98 | −auJ6fR2lOuI0fqqryhen7VYEXtwGrtTh8dsXvmYZztlW9d8S7uFIHeHx3eOt/eNBruDaE+Oz3eEC | |
| 99 | −nuSGXeAU3tlO/uQYnuVFzuHFjeSJldTr6rBmLppyCeMHHh76+q9u/uZw3pgBq+aiPRAKe+Z4DpoQ | |
| 100 | −i+P+t80LjpAFgB7ogj7ohF7ohn7oiJ7oir7ogO4DXt7bWOENLTvplL6y3vDo6pTTAtANjN7pnv7p | |
| 101 | −oL7ojlDlY67kWB7lay57XN7lqF7nvXfkpH7Zps7jmH5O6r3qxzbkJ35ORu7gsX5YO57bTO5Xt47r | |
| 102 | −Slfr5tTrVK4eOY5WST0MbRDt0j7t1F7t1n7t2J7t2r7t3B7tdIDsgfTT8FAG5F7u5n7u6J7u6r7u | |
| 103 | −7N7u7v7u5A4P4M5HOQ0BD9Dt+J7v+r7v3D4Mv/5XwU7bwy7RFm7sfNjqf6XsYf7vfhXwqj3w0a3q | |
| 104 | −Bu9pui7lr+7rzN7n9u20EJ9XxT7xB0/nCQ/muS3+5rJ+5bSO8MRe8CCPZhUf2Re/7HxO3wNBfRV4 | |
| 105 | −8zif8903fipP8OFhfwMY9EI/9EQfgAXY83rF3Tq/9Eyf8xeY8TSP26cu8iu/5S0v5PO+Rwpf8gzP | |
| 106 | −07Mu7Fl/Qh9/9S4f9iG09bRt8sD+9QJv9iA09mQPd24PPGiv2moP8Gz/8HP/M3Af9wC596ZS95N9 | |
| 107 | −9w0vGe4Gc4if+Ip/b/2G9B6PFRDXcZI/+ZRf+Rv3cY7vVvW+covf+Z6P+DIH9RCO8mCf+WjV934v | |
| 108 | −Zi/v6jEI66L/4aTf9qZ/Vqif+m0G+KAi+IdN+F4f+3o/+0xt9bb/98Cf0iSf9l1P1ZIRAnne/G3+ | |
| 109 | −meYant5Y8Q1jUP3Wf/3Yn/3av/3c3/3e//3gX/3fgPufoukL6/zoL18hkPyoLRl/HurwH//yj+iO | |
| 110 | −XvxaPhCSXun6v/8Sdun2/+UAwUuggG5ZDB5EmFDhQoYNHT6EGNGgI4G8UgComFHjRo4dPX4EGVLk | |
| 111 | −yIwAUlT0VErlSpYtXb6EGVPmTJo1VV6qeA/APZI9ff4E2lMnT4FVphxFmlTpUqZNnT6FGlXq0So5 | |
| 112 | −dwbFmlUryYs58dkEG1bs2JqeKnbdmlbt2oomUZKFG1fuTJwCh7LFm3fk3aJT/f4FHFhqVbtX9R5G | |
| 113 | −nBEtr3tf5z6GDNeswMWJLSd2KzBlZM6d6Vr+JXpZtFq+vIwKRp1a9VPCjA2Php11cWPPtW2vnGwR | |
| 114 | −Y2zeWzPzwuBJ+HDixY0fR55c+XLmzYWDAt1butDXX6pcx55d+3bu3b1/Bx9e/PUv0aefBzk7kHP2 | |
| 115 | −7d2/b47h7G709UH+tp/fdWj99kv3r+8/AM+rbEAC6TMwP/wS7E1ABmNz8MHRIpTwsgIrHO1CDGNb | |
| 116 | −cEPLKPRQLxBDxGtEEtfS8MS8UlTxMABWuSdGGWeksUYbb8QxRx135DHHSV5rUUQAJumxSCOPRDLJ | |
| 117 | −GH/kL0i8LlIySimnNHIVBJ1EDAAtt+SySy+/BDNMMccks0wzm8SSNDPXZLNNN9/0Es00t7r+CE47 | |
| 118 | −78TTzTkTo7JPP/+U8Yk92XoCUEMPRVLQQdW6BlFHH8VxUUknpbRSSy/FNFNNN+W0U08/BTVUUUcl | |
| 119 | −tVRTT0U1VVVXZbVVV1+FNVZZZ6W1VltvxTVXXXfltdfD6rAgIwvqyOiJk1zDyktjkOVFWWYz0mlL | |
| 120 | −cPz4qEsqQrtmlToAACcFQaPt8pYvj7WACi2pCFYgbjWyUk5f34V31xSAyAiIVRTbTaeN1ABCSyAU | |
| 121 | −5QjIwtRFU1+NDOZlWGo7MuwJbQW9po5VruFFDSqo0EjgZvlbhYqF/aDi3mYBUCOjbd2NN2WVY1UD | |
| 122 | −AEWfAGBhXvzYdmCNwFnliSeoWJbhgnf+0xhhqxQDx6PXYObJGHoreqLbktB8zQJwAOblCWCbpeLY | |
| 123 | −mc1FeWWvv0YVnHRprugasfO9khdjFBU6458J3qjtZ3m5BgCKAw7Nap1J1mgSjNuCOjQqJtkoBYyH | |
| 124 | −LFqgVZgEu3HHUZ1Xca2NIRLtj1JIHO+4gX774Cs1hrvqVaiVW2iNXwsao53AKZmXOuru+nHZZ6+0 | |
| 125 | −ZUHraD1yg+UWyNg6UPbSZi9PKv1zd50t/umNUH97pxROAnlj2qen/lJ0/Uj8njq+tXyjSeow5m6f | |
| 126 | −Nw8d2rSFrlt8tyv6UQ2YW2f/7/IBr2hw7w+/R42iF5e+ev//T9Mk7HWsOnEpRmnDXOz++me++dmM | |
| 127 | −gWfJ3PL4cxWlFctp9FufQIZFNasF6yqse90CAThCEmKobqwj39yqxreQpK6BKnyWwowWmu8JJGIT | |
| 128 | −q9jFMqi8inTsYyGDm+H+BroSFtGI9qFCBIfmGi4ZA1xbmmEKv8TELS3ridOqFpeoAL9sbatbVBNh | |
| 129 | −A8t1LsLBrWVlJOIR1bhGNrbRjW+EYxzlOMdQpcAYd8SjMeCHGAvkEY/pomMgBTlIQhbSkIdEZCIV | |
| 130 | −uUhGNtKRj4RkJCU5SUpW0pKXxGR98rRJTnZyS1pD1RM9OUpSnmlVoixlKlXJJVgBwBjPg2UsZTlL | |
| 131 | −WtbSlrfEZS51mcsOlUonq9hlMIX+OUxiFvN57Trli4y5TGY2M5jGSJuqelmqaY7KRKC65qey6SkW | |
| 132 | −naqao/pmqLbZqXFyqpyb6qapwhmqdWozjaI6p6bimal0UlNryshHPvW5T37205//BGhABTpQguoT | |
| 133 | −fu30VGlc0AKGNtShD4VoRCU6UYpW1KIXZagLzJOq0lSioB8FaUhFStAozKeVWsuHO1S6Upa21KUv | |
| 134 | −hWlMZTpTmtZUpbMIDULJ+Rpi9MKnPwVqUIU6VKIW1ahHRWpSfUqMjYbyNS+waVSlOlWq1tQBJn3V | |
| 135 | −b1JaVa521asyxWlbQHmq0vRUqWdFa1rVilSmFkaB7gwNVL86V7py9aqUiWaqtFr+V772laZhVddY | |
| 136 | −TVXWtRbWsIc9alv3k8y4+tWxj13pXXVz0opsFbKXrStgmyVYX/IUsZ8FrWEVO09MlUaumEWtVyVb | |
| 137 | −T1L9BgovgG1sZTtb2tbWtrfFbW51u1vYLgECYmVsRWxxDOIW17jHRW5ylbtc5jbXuc8lri2aStbX | |
| 138 | −GIK318VudrW72xFg1VV7TW14q6pZnZrTs6FFb3oTO93BPlW875XqavOKKvDC175gzSlnSUVY9fbX | |
| 139 | −v0tlb2cbe18Cv1S+lBWIZQu8YHeQV7/WPO9/JRza0b5TnO5lMIMPnFWtEWEWHwZxiEU8YhKX2MQn | |
| 140 | −RnGKVfzhDAgAuKoqTShUMWP+GtfYxjfGcY51vGMe99jHMw5FgPf7miWs2MhHRnKSVbwJ77bqNw14 | |
| 141 | −Q5SlPGUqV9nKV8ZylrW8ZS5HmR4uDmxwBRIHOZTZzGdGc5rVvGY2t9nNb4ZzmeMgZAiHRhNdxnOe | |
| 142 | −9bxnLpOgyayqb4YJ7GAx88KsE0b0YSv81oRiWNAE3vB3UfroAhMaxhFOdKbTuuhCn5bS8I20kyf9 | |
| 143 | −aftamqOY1nSq2UpneDqa1OINNaC15oQa1NrWt8Z1rnW9a1732te/BnatVfDbMF86NGjYRbKVvWxm | |
| 144 | −N9vZz4Z2tKU9bWonGw2svnBo1hBsbnfb298G9gL+vKpAvzq1pnZqaA6tanb+F5XTxq6Ip82N2liT | |
| 145 | −e9TzPnd+C73udvcbqO8+9YDxTe9xS/PeA78suqmrbn83/N/YxqarEf7Yehu8shPHrMLby3CHOxzg | |
| 146 | −6Y43xi9bcb3OGtwnR3nKfT3sFwe8IsiudsxlPnOaT/vabi30tlW+c56fXNx4RTAvFCzyvmpcwBXh | |
| 147 | −d8fZ/fGFh5zojiU5fQ/+9MzqG94CSbrSU830jTud6nyNujen/vWvGn3IHNd6u7l+dIHIm+yqLXjJ | |
| 148 | −KwJlPtfd7nfP8pdbDvIxx9nvfwd84OE8Z5xfnRd3xnviFV93PwOdwxXxsJIlP3nKn7jFe2+6QGT8 | |
| 149 | −Y8533vOf73GQC+9ygRT+ufKnR73kmex4SV/87XQ1e52RnvZ+r/3sXn893Fkvatfn3quxbzXaab91 | |
| 150 | −iMMV976vatjVOXbkSxX42Z798FVte9m3vfldVb49KzKEYHTf+98Hf/jFP37yl9/850d/95VA7M0W | |
| 151 | −WhZHgH/85T9/+tff/vfHf/71v3/4y6L4jQ6NEUi/ASTAAjRA9HODuJO63ru+qXq+iBM+6Us06gu+ | |
| 152 | −42tAm8q+1mK+C5ypBzQ+rJNA4hs9vuMFt+PAmcpAcNrAE4QpDwTA6AvBCfy/nRI4FqSpFBSVcrPB | |
| 153 | −mHJBGoTBGJwwCoQ+69vBG1RAsdu+OVDCJWTCJnTCJ4TCKJTCKaTCKlz+QkLAvK4TCCyYhi70wi8E | |
| 154 | −wzAUwzEkwzI0wzNEwy7Eghk0r9CwByuEwziUwzmsQiY4wuVjwCJsQasjPUMDQhkcwcwrQT1EwTvU | |
| 155 | −vgQjRPzKQrbzwz8MQjbcFNNKxJjCQXZawUTswTb8QUfsLyGEQAucRJWqRFDRwVBsMD4kwazjRAqD | |
| 156 | −RHmSOFN0h1H8lN9oAmWwxVvExVzUxV3kxV70xV8ExmC8RfEpr0h8DRGQgmRUxmVkxmZ0xmeExmiU | |
| 157 | −xmmkxmQUgVbMlNIQxm3kxm70RmG8AkPUQFkrNBI0x1NhLRUkR8M7Ry1MlXTMwQdTR3YUxHYsFXhk | |
| 158 | −J3Dwo33kx370x3/+BMiAFMiB5MdidEWeIciEVMiFZEiC5JpkQsiGlMiJpEiBBIf5OpWK1MiN5Mg/ | |
| 159 | −WhU16MiQFMmF3KNTAcmRRMmU7MdMYsmWdMmXhMmYlMmZpMmatMmbxMmc1Mmd5Mme9MmfBMqgFMqh | |
| 160 | −JMrzuJqKGJZiORbeGQnkAZousaLz4RIsAomWWZr5QSWTQCXisZaFcaUHEoh+OShncZaiNEv0iJyK | |
| 161 | −sBd8caCK4Bd/ASMeeiAX8hykrAOZ6Yg6ARgieg3eEZoU2J6RKaNngZkOARILO8vEFA3b6Z2YqQia | |
| 162 | −6Z6MwBmd4ZkoqsswgqG/VKKNAJajxMzy8UvjaRZjCMxnmQRwOE3+CZJLxWTN3hAbgSAbGzqbthSI | |
| 163 | −taHN1RSezgFLurEbj/ADl1mFq+TL0AjNjKGYnaCCpUGYrKmbkjxMRmvN6ESRpQGmiqCc3cFIzLHM | |
| 164 | −udTNJcIgjgjOmXGZFwLNaPpLNMofxzSY5uSFrNmhz5TO+MwLxsQdyqAX7OwI3wGeLhGeLuHKFPpO | |
| 165 | −zlyYOkDP8SmMLuEJUTrKqwDMQtkNvxGIGlrN4ZHPCsWL68mewMRP7wEf9VHNy6TL3UyfjvhNLSLP | |
| 166 | −BSrOHkocwwgZgzEXLsHL57TQGc0LAapO3UBQuUmgFuqcEPVOi9jMHhIZ8TzO4yFO80QQgzGMlumK | |
| 167 | −ERUIIApQxKT+0SkdiRMqSWZpm/cRCbr0UQeSIY6wGrwkUPjsSyTlzvnACMPJCAmdHyml0jf9iCTi | |
| 168 | −COxsIlTaziWaIlGKSmnBS41IyozomJFhpe9EpajMiLqhFiAxF15AzUN1zDYNHjiV1Eml1Eq11Ev1 | |
| 169 | −HzvaxyvNiz7aR0DC1FAV1VEl1VI11VNF1VRV1VVl1VZ1VQNxpliV1Vl9Hme4BVrF1VzdJVRwBlTQ | |
| 170 | −1V8FVlniVV8N1mLV1WE11mSl1VtwBmV11llVl1WS1mml1mq11mvF1mzV1m3l1m711m8Nk2KTJmdY | |
| 171 | −FUkAAEko13NNV3RVFWfASFFBC4PUFAAgV1UxV3ZNlXtd11X+cVdWiVd5zMF6zVd1tVeCHVh8RZV+ | |
| 172 | −XZV/dUtIcdg+2UuBVYOHpdgoqQh9tYuK1dgjuViD3diP7ZGOxVeQJdkcqQiFrZqSVVkagR+GTbDU | |
| 173 | −g9mYTbEMyCmB9QR8wNmc1dmd5dme9dmfBdqgFdqhxdlCENmK4AbQU9qlZVoe44ajFQhrAIOppdqq | |
| 174 | −tdqrxdqs1dqt5dqu9dqptQao5QXTk9myNdtZoIGTpY97YAWiddu3hdu4HdrccFmhg8WWIi+bvY29 | |
| 175 | −7Yy64AWMbcRV7ESxPY3VMNzDFYzWAFwTDEXJQlna4NvInQu6BZpLJMS8fQvJ1Vyy8FvAVUXBRSzF | |
| 176 | −AtzCRdz+0jVdp1Bcg2XcSXTctXWMzYVdm6BccR06WMRczYjd3KWJzjXYzwVd0SLc0xXe4UWK1MXX | |
| 177 | −1U3E1vUK3WVemJjd9hOIczCD6aXe6rXe68Xe7NXe7eXe7vXe6eUC9qPXiuAAAjDf80Xf9FXf9WXf | |
| 178 | −9nXf94Xf+DXfWhDb9+O/+8Xf/NVf/fM/gQDcd0CHABbgASbgAjbgA0bgBFbgBWbgAH4HsWWH75Xg | |
| 179 | −CabgCvbeBBQIlIWAP5DfDvbgDwbh+OUArCrFULxdXtiM5lXhmxBb3/3dtRJdgyVd4qVhwzVeUGxc | |
| 180 | −tV3eFV7h5y3hSTzhFOZh5uVdfHXhF9604K3hJV6NGyb+wrsVRR22i9cdYt31YcvVwyCu4uYt4k1E | |
| 181 | −YkVTYiYW48Bw4kGE4ijOYNfdYua94jy03ZrN3DWO3S4GwS8GrRjG1xke4z2GijJGXkJU3imW49xt | |
| 182 | −Y4EYAjpE5ERWZCrEQnUR2B/QgkiW5Emm5Eq25EvG5EzW5E3m5EiGBbHlwjQU5VEm5VI+wzX0X4M1 | |
| 183 | −B3Jg5VZ25VeG5ViW5Vmm5Vq25VtmZXMQ2zdc5F72ZUS2wzSuCELo5GI25mNG5k7+ARLG4iLU4kGG | |
| 184 | −XToOXDsG41TOYz7G5qjw4zNGY154XCqG5sgtZLvl5mcOZ8mV5iOm5lWz5orQ42yGZ6oQ2z/Ww0Bm | |
| 185 | −DHD+PufbGOfaNUVzzue9Ted1Dt0wjueCnoJt5mZ7htx/3tt95uZTbAu9ZWiAbmGBrua/lWGD1miE | |
| 186 | −PmOFxueJ5oxx5r4DJOmSNunyW7+IrohhaIOWdumXhumYlumZpumatumbxumWpoP63d+e9umfzr/+ | |
| 187 | −xWh8hYcyMOqjRuqkVuqlZuqmduqnhuqoNmp4EFsBPOmrxmqSxmBvpg8IeICcBuuwFuuxxulhYGY3 | |
| 188 | −7mc4xl2Qto2AtujCwmN31miD5mgo9mi2tg2HLme1RmG8rg23fmu1iuu+mOt4ruu7vWu/7gy9PmN/ | |
| 189 | −VuzHAOzARqvBNo3CNux5fujEfmzIGOfIO9vPTr3+y3PkinAFPjDt00bt1Fbt1Wbt1nbt14bt2Dbt | |
| 190 | −ZhDbzWva28Zt0BO9oa4IMfja3wbu4BZurxUDsSVb0EbuyVs9rq4IAWgE2Ybu6Jbu6Y5tVzhrgaC7 | |
| 191 | −xdPu7c47MGsWgVUAuRXv8SbvoDXadu47wVPv9WbvNiM83hYIcTiD+abv+rbv+8bv/Nbv/ebv/vbv | |
| 192 | −+RYHsUU87ibwAn+DxmPugWjb8mbwBhdvBbhucm5svhbizZaLyJZspaLsd7ZsJj5sWNRsC5cLxoZi | |
| 193 | −xxZxzq3oDJ9sgu7wMf5wUwzxEycLEr9bE5fxsMBwFV8v9K7sFufjF89hYRbkG5eMCKe1nkPyJF/+ | |
| 194 | −OfEV2AEAgSeH8iiX8imn8iq38ivH8izX8iePAbGFuZoD8zAXc2i7OfjmhXVIhzRX8zVn8zZ38zeH | |
| 195 | −8ziX8zmn8zRfB7HVOSXX8z2vgZ9LcF6AAD3Y8kEn9EI3dC0fgAjnZxOmcCKHixzXcXdjcR9fYiBn | |
| 196 | −XSm+Z0efcUV/aBvX9M/gcXWO9F7YcErfY0tPXkxf6E+XXU7fa5Vea1a3CUgfdaEqdVMXY1QHZFX/ | |
| 197 | −aFl3XlefcFjva1+vCVqv9YfjcQ7H9dPV9XrmdWIviwgvAj6ndiVv5O+uCEY49G3n9m7H8mUQ23oY | |
| 198 | −83En9zCvB7FVhzpX93Vn93anc3XA82qX953+83OUJQRvx/d873ZGAPYSb3RoB3UzF/VIv/Vlr+Fm | |
| 199 | −L8IYB3iXoPE3FvYKX/iWMPZjB7BkN/hKx+yEfvaI/3XH+2FM/HeOd4mJp/iCv/jhRfgdVHiRL4Vx | |
| 200 | −zm4Dh3nF07vRFojwdvCbx3nzFlsya++e93n1fm/Ale//JvqiN/qj7+8A5/EBj/mmtzsER1kBWPCc | |
| 201 | −p/qqxwcI9/gOS+6tlzzRxnaBKG3qFvuxJ3vXpm0et+3cVvu117HdBlzfHu64l/u539ri5vHj5vq8 | |
| 202 | −T7HljvrnLvu/B3yxt+6sR2tGf3iWH/kUp3iiMvmTZ/aM7+iNR3zc6PcaD/nJLwWSP/bGd/z+0k15 | |
| 203 | −G1x5kW/4tD58zGfhUF98Sbf4zhfez2fB0Of4ca6E7aL92rf93FoCvg6ES+D93vf93wf+4Bf+4Sf+ | |
| 204 | −4jf+4+d9KwDlTGD+5nf+54f+6Jf+6af+6rf+62d+VDZzFmCD7vf+7wf/8Bf/8Sf/8jf/80f/7mcB | |
| 205 | −sbWu23f/96d9XFD1QkD++rf/+8f/4w+ECNcrgUUVwAUIXgIHEixo8CDChAoXMmx4UBIASQ4nUqxo | |
| 206 | −8aJAiBIxcuzo0aEzAB9HkiyZQiQvAClKsmxpEYAzlzJnItRI8+ZNmzh3ttTJ8+fHkECHejwpUCXR | |
| 207 | −pBdhKm3q0KfTqA8jSq1qEKrVqkKzcjX+mnLVvbBix5Ita/Ys2rRq17JVCyBa27hy59KtG7YVgFZ2 | |
| 208 | −9/LtGxevXr+CBwsGTPgw4rnRACRu7BjtKpQAJlOubPky5syaN3Pu7Pkz6NCiR5Mubfo06tSqV7Nu | |
| 209 | −7fo17NiyZ78W+Pg27rCSIOTufViAJAG+h/sFLpw48rrGkzOXC0FS8+hxuVKvbv069uzat3Pv7v07 | |
| 210 | −+PDix5Mvb/48+vTq17Nv7/49/Pjy59Ovb/8+/vz69/Pv7/8/gAEKOCCBBRp4IIIJKrgggw06+CCE | |
| 211 | −EUo4IYUVWnghhhlq2N0TFvBizEIgJmSMMSlQoUaIaohI0IofbvgijDGilwKIIF5DhTH+JxbUokE1 | |
| 212 | −NsTjQC0CKSORRRqp1CQe+rHSkj5a4Acv1/BYIonXuPjhNeCkoOU1JuqYQgoe8rJll7xYQAUVHoLo | |
| 213 | −B47gCDTkkXHKOadH1wDByyrXPOFji0vueA8v96xyJZ+8qHHnjR+iGKSLVDzBCzh78uLoE3XQeSmm | |
| 214 | −mVrkIxBW+mgoECvtyKiIhVpQolFTYqnllvd8Cqemscp66SSrqEliHacGusqjPQIq6KSGFqrGSh1e | |
| 215 | −SeqVkzT6RKWzOvssndcA0OubLq6CY4kFgUnio9eC6aKIXkJZarUgnknFSmvieOex0Lr7Lrzxyjsv | |
| 216 | −vQx1CSaYVta7L7/9+vsvwAELPDD+wQUbfDDCCSu8MMMNO/wwxBFLPHF1VOhrgbK8GNuuQiSSqOaH | |
| 217 | −HqfLIonoHlRHyYt6uZKKxqBM5ctK4kjFuIMKtAqsCIUpkJ0DiZkzySSOzMvLxqhYUNHUBukyiSiu | |
| 218 | −/GbJYlL0hJs3L2os0AQVjWKNIrfrsckGvazjmGiudCrT28ZcdtjG2Ixn1tqK2bNAPzvkcbZde/x1 | |
| 219 | −yaIS1PLLvLCZI5Qh57jo1FXjuWjhcQu0tYhFgzxQ0ifnKOrgNJuJK5VMG822qG4PhHNFFtedsZnV | |
| 220 | −/ugxyHh/CvXlBqGNMpMzFz424hdNknGnAtGoepQz5w58uaMyerPUx0u6s5l+Czn+0D1APPoEEK4q | |
| 221 | −Do7jAx0qUJK2odSil8kTTyiLxgN70IrMWzB0sBYBsSgVA/3e4o2H9ziqqsfjKf6Vy4u5vv6Opb50 | |
| 222 | −XS97AtkeL7o3JnINBAho4p+q8gc8WyFERNGbXvWuRLeKvE8g8TPU9whyD+Hd73gSvNL5jBe/C2os | |
| 223 | −g8RL3/8IOBDsVWR3AundAoFXP7KVr3wnXBEF0Wcb6bUQUCLa4EUSRTWBNAl4T4oSkCJoPB2yq4dP | |
| 224 | −YN+xnnczfUUJZ6uAkh9IV5FITcpK1GPgzTxYQhP2UH9wWtHzVvTBigAwjEycH0GeKKU1Fq+Nx0Ki | |
| 225 | −6q74tQDC0YdfFJwYKUJG0xH+C43EEojiAgiuKf6xisbL00CuMagjWnIidbSZGMGHIkAOkmNa5Jjq | |
| 226 | −QIRJnr3tlHE8ZBgNGDyNVa2RToTSHik5ST+uiJSqW2UXNdhJi1jMT5JC40D8tKO9gYt1pRwf0XBl | |
| 227 | −xDa6cplqGBRYZDkmCzzhgyk4GioltcymXaloppSkG30YtYssMQVQOiYqBec3ygmtXM48JSpfVodp | |
| 228 | −prOf5bomnlxlkTB184biBBIp8cY1w+WNlxUcn97AMTyHtBNKk/ADMpM5z8fVM3IeW6g/tZYjcOQy | |
| 229 | −pIUkFUCzScxrKFN6GZVnj5ipt4YS8qHnxJ1HdrcKFPUOmYfaKETPqb+ECqT+oNXUHzA1CaL4xU+b | |
| 230 | −h8JYoIbWoiumQGlBfSbw3lhTbRrkfR/sKcd+KkQfUrKXwxSRUampVmQxNZ4LeaqyUsDPqa6CV3zc | |
| 231 | −ZU15NsxfclGTbqWIV1tIPhGuAqil/CE6r3SopLZyrcVrqzZ16rS5/i1UY0WWQ/VqU8b+1SJ2+qDH | |
| 232 | −cnUsQVlVkq974eggyKgB5jVQRKSeQFNQ2M4mhAq9m91pO3jZVPoRhW+bImu5WhAL1BV2uWoRaW2K | |
| 233 | −2dYGUa2sRa3vYugi2WJxIra1Eo1cxr49cVGXp31mc8332gwKN4/FBZzRWgRA5Q42rym0YvXGCyjo | |
| 234 | −brNuI6MubQ/yWd/hin3+yd0tXukb3h6yELb5BexGPUqia9XTuwxNF+vAZljJ+c5smWWi7VwkLU/p | |
| 235 | −bo6qK5oAzOngaDYNbyup3G6fdmCG1KFwpBIZg7PlYBOTOL19s9zHKhw2+oKuWhtecUEm4eFyeuwE | |
| 236 | −2CPRXWc60+zGTrmZa9xIWtxDEx9Zxpml8NZQjLSPCi7Dre2xhgHAYfclmKMLxhZQI4g3hqKtyZd9 | |
| 237 | −MjQpJuc5y+he+OouR/AFpvmqZ3344t9F/AwmQGfFzvn6iKFTgOfz6FmuIxE0865zj0aPJNGLNk+j | |
| 238 | −+dyRTNO5057+NKhDLepRk7rUpj41qlOt6lWzutWufjWsY91q0frMUgP+EWSgULIUy4DoHpLhda4N | |
| 239 | −4mvKgMPFB/F1rpPHmGFbZiWX6bVlNJcSTWvN1rdeRR0AUIeqHuUy3aYMDvkIhN9KK3d+YwxGmE2Z | |
| 240 | −YKfE29MuiLqLrRBkpwS5IsEMiDDz7cnIm91dBcDwXDUZ3ap7Mr+qTL8REm1AneQy1JZ1VFJgyXET | |
| 241 | −xCv0ruzASzsQdMNbMg+/OPR0bQEpIwTZvq4DtTh+FE2rPOQVR/m7DeKHybi4m71Tg21XfhCOPwHb | |
| 242 | −pX1kMq2dwEh6JebXzjYPha1rlxudIC3398iN3fFuow7kLX+6zn0Hc5DfejLzVAMAlHXFrS+d6WYi | |
| 243 | −+c7n23OYew/i1gH+e6+eAAAX+yHbbS8IOHjVTVhhnd59L7u/xxTJqfvayldn+cfLjm6s82LcFPdd | |
| 244 | −JMFuJca33MoDmQS10b7je9g966Mznc9LDni/P7zpgd9SQvzusl5ZHfFpd/rBDzIJcMyeRfNMU+DN | |
| 245 | −LviEqFzufOa6260CDjHVPZPDRwnwjcF6wG888Z7X/d15JmbR5xrsizo87JVekOljXe5+GPlAqIA6 | |
| 246 | −2zyK8pq2wOBRWVyNAbyotNf10x39fBGO3uOvpz9Bfnxsj+c88Ng3yNWhCPBNiqK1H/vljhpYyQCC | |
| 247 | −nP4BIJ9VCrUMYPBFHLvM1ptgHvIxn/ykX/Npn+nlXu4xXrAh2+/+NN3/4Z/8ZAzWgZ/3zV8HOiAK | |
| 248 | −ZtJvMZGtnYn8yBX8lZ73XBoIkt79QZ8Ikh7YQUnrZR8M+o7NAF+5EWD0TZ0HvuAR9pyxSeAENgXc | |
| 249 | −EY3K3Am9SeDY6WC7VcbdXcZKAB/XBaFIIBvVeMgJfiFljKFl0BrWWVbjsYsIPtvzcd1FnQyUAEHG | |
| 250 | −jJC/ieDIjV/HVUbsseFkiMjTlaEO+mAKoFwRbhywGSJSgKCQcY+tSWDBZeD26aAdQl8VSkWa+EHV | |
| 251 | −cN6jbCHzTQLK8KAL+qATxmCUTN/+sRspruHfEcQqVM3TyZ1lPIr4DRegmF8eDd5ejQmvTF+lFOIH | |
| 252 | −3gM4gIMX9qD+/R2h7jWgE3IcFYDF0q0hFFrA9AEfFVgGLhmgbXjIAi6dNBphAoEjFX5iUkzCuIlK | |
| 253 | −wxEi8LUKQ9RiMtZfxXFg211cqNCi8zHd06Ff13kI6nUdlABjkMwT9SCEGuTKB2Wis1Eb5wliLE5j | |
| 254 | −6SXi0g3kRHIc2BWdCVak63FdA1bjm8yTZY3jPfKe6zWhOkaFtEiUB3Kd3E3UD/pjP8Zg1KXeGepa | |
| 255 | −pfDjE7Lb01keENyJzVnJjXyQQa6d0lgAoUEK7T3h0/UiQ5DhM25iK94k9Rldw5njB3Zk7pkIQaCi | |
| 256 | −90zCo6CiAjLfxVnlD4KlJ65kU1ABB5piZRhDJqKkB+pbwUH+G7FJHeEt3STQorcx4NxJIgSAo5lM | |
| 257 | −i8Zgm7bZlSQuXmWEm0ElxEks2sV5m8NdJQpixi9aRq7l5bxN5aRcI8tVZstpyWa2YVNmUmAGSjcC | |
| 258 | −AMGJYWkCQMLtXGUkXTqypW3eJm7mpm7uZp65DjnhRJvhzVJSSHA6E060jOsYFnsUZ47xpnM+J3RG | |
| 259 | −p3ROJ3VWp3VeJ3Zmp3Zu54D4pnd+J3iGp3iOJ3mWp3nKpH8gp3muJ3u2p3uyJ3r2B3O+J33Wp32S | |
| 260 | −p4LA5n3uJ3/yZzc24374Grb0J4EWqHn+Z4GchIEuKIOCJzhooIBM4oD4GoDqB4UWyIUSCEcKyIYW | |
| 261 | −iIQKSIb+TqgI9keIciiE9keHEsiHBkiJsuiI8keLAkiK/seMRqjfeAEm5KiO7iiP9qiP/iiQBqmQ | |
| 262 | −DimR6mjIVWh+hOgNvAKTNqmTPimURqmUTimVVqmVXimT3sCRJqiuXUORfimYhqmYFqkXyM+JAoiE | |
| 263 | −ekIprCmbtqmbvimcxqmczimd1qmdruklbCmBhGgVTIGf/imgBqqgDiqhFqqhHiqiJqqfVoGeDkjR | |
| 264 | −3QM+3KmkTiqlVqqdeoKZ5qffqKmldqqnfuqc5qn3ICl+8KminiqqpqqqJiqjjiqXQk+kgqqszmqn | |
| 265 | −YqrvnOl/pCmt7iqv1qmo5hqp3oepriqxFquxGmqrAuv+q9pGrPaqsz5rKdjqmOCqf+gqtF7rrv5q | |
| 266 | −jP7HsB6rt37rqibrtvrHozYrtp6rp0prjQaIhNpAMrwrvMarvM4rvdarvd4rvuarvr7rAzQqiKrc | |
| 267 | −FoSDwA4swRaswR4swiaswi4swzaswG6BvwZI0RHCvlasxV4sxu6rDWRqgkioA7gDyIasyI4syZas | |
| 268 | −yZ4syqasyq4syL5AxAJIiBJDL8wszdaszd4szuaszu4sz/asz84sMbwsjeraPcwCyx4t0iat0q6s | |
| 269 | −A3Asgnjs0kat1E5tyrqsq+6pysnsz24t13at1/Zs0F6toxKt0VKt2Z5t1DbtrWrqQHws2r4t3Fat | |
| 270 | −0Pr+R8x+rd3eLd7ybNgqq4aSbdz+LeCGrNpOK9sKhNsGLuKirdXyrYjymdbmLeRG7tfu7biiqN8m | |
| 271 | −LuZS7eCuK5r6DQqUAOiGruiOLumWrumeLuqmruquLuh+wtySqMrRAhvMLu3Wru3eLu7mru7uLu/2 | |
| 272 | −ru/OLi28Ln8UHQSwrvEeL/ImL+uigNMeiLWiK/RWqra+aICqXJ+CK/Zm76GKK/XqR7lGL/hOqrpS | |
| 273 | −a388b/ier5xOb7DaR7dqr/u+L/eub318L/rWL5yOb+HyAqfaL//iqfBWL59d7/sOcPbG77IGirn2 | |
| 274 | −b/3ib8d6rvI+MARHcOq6rtj+K59RQw5ksAZvMAf+d7AHfzAIh7AIjzAJZzA1/K/36lrxSjALtzAE | |
| 275 | −M+/aNnDbZi4NR+3iVi6MZq3k7jAPgy0K58ejlm0NDzHLbi758gfUErESy20Fu6jj9jAURzHNUm73 | |
| 276 | −AvHlLjEWk6wR5+/hZrEXu8MNV3Gp6rAUl/EOU7H80kcQfzEbb7EMGy4bf3EYp/F81K0Z33HeovEB | |
| 277 | −F20ce7EbP63fhIEJDDIhF7IhHzIiJ7IiLzIjN7IjD3If/PAY81nAOqwlXzImZzLDQmwTy6iuEcIj | |
| 278 | −h7IojzIpP3IYNK+BmK8Co6/6Yqj1EjAsg6sB9y2srjL/MjAgD8T+2vL5tjLWBnAsB7OxzvLY1jL+ | |
| 279 | −L6MvLjvvph4zK0uysL6yMEdzqhKziRozM4NvMqfyMl8z+Ppy4w6EAEuzOG+vM9sH/XIz9Gazh/rN | |
| 280 | −NpCCO78zPMezPM8zPdezPd8zPuezO7NDOddHiD6CDAS0QA80QRe0QR80Qie0Qi80Qwf0I/SzGqsw | |
| 281 | −GegzRVe0RV90Pm8DKq/zDPcxFs+xKz8xHo/05EL0fKyxRy/xHytzR6c0EYP0Lw/E45I0TfusHtOy | |
| 282 | −bQixS9fwSmtzS+80DcP0NwvETNe0UefsTRdzTgP1EPc0RwvEKcyCVE81VVe1VV81Vme1Vm81V3e1 | |
| 283 | −VC+BSctHiFKAKpS1WZ81Wqe1Wq81W7e1W7/+NVyXNQWEdXwUnQBkgFfntV7vNV939SlstIr6jSNk | |
| 284 | −AWEXtmEfNmIntmIvNmM3tmM/NmH7AF3DR4iKwxlcNmZntmZvNmd3tmd/NmiHtmhftjhM9nvYdTdA | |
| 285 | −tmqvNmu39mM7AmAPiCqj87V6swWD8zjnNrKatnucM21jqzoHti7/NrrathPjtm4nd6BSs8QSbQIT | |
| 286 | −t7MGt2xvM3RDq3HDLDQrt3Yztydbc3VHd2zb6ECgQBCUt3mfN3qnt3qvN3u3t3u/N3yXNwUz7m0L | |
| 287 | −xAxEAH7nt37vN3/3t3//N4AHuIAPOH7PAG+3B/GOQnwvOIM3uIPDNwwT7hvzQhczdeIKdX3+80JR | |
| 288 | −HzWHT/GBswdKWzjmOrVww7GIYy6GHzdRdziL12xSV/NSn3jikvh0/7SM/22KY7dItziLv3hzQ49O | |
| 289 | −33jc0rh4m7iQ4/iHr4cd83iH+3h3x/iRD3l4s6vfPEMYXDmWZ7mWbzmXd7mXfzmYh7mYX7kOJLl6 | |
| 290 | −hGg1/IKarzmbt7mbvzmcx7mczzmd17maV4OZp8fEjjmf97mf//mYP8OUd+5wf/ezXje3Zrd2Jzd3 | |
| 291 | −D613G/quSneR6y+kOyui062iL3puNzq5Onel96qkU3mhfzqtXjrsArOmM3qez4inkzqthjqhC8Qu | |
| 292 | −u/qnmnoOo3qqb/qqM1qr0zqownqusjP+Rg87sRf7PfNzJyc6nwF0Qze7sz87tC/0Qyd7pw8EBEy0 | |
| 293 | −sWe7tg+7RsdwLht5lL9tjiu7TDN5j+86pl1xuKMtkYs6uK+72Y47pu+4uRu1kzs6lMO72bZ7rFO4 | |
| 294 | −visuupfHktd7Td97tef7v0stvwf7QER1Xz88xEe8VoM1tZ/6QFRAXGe8xm88x8N1BQQ8edg1Xks8 | |
| 295 | −yZf8w/+1t7O0QAy2a7e8y788Y0t2xd/6QFj2aN88zue8zod2ac/8fqA2zAe90Ls8bKe8T8u6r8uq | |
| 296 | −rQMwcuf6OHO65T560lcqsFcrdU+9pS69hWa60wsz1A9vr2M91Q86wyO92Gc9yI9H+3b+vdenvXj4 | |
| 297 | −9tlLatWXr9/4wgHcPd7nvd7vPd/3vd//PeAHvuDfPTa4fXiEaDYggeIvPuM3vuM/PuRHvuRPPuVX | |
| 298 | −vuJng+GDB/EOPud3vud//uD7AtlbvY0n/NLKu8WvOMHbe+Z/R4ibftqOPt2XPuwjLerTvOqvPk0b | |
| 299 | −fNQjfO0j7cKT/rv//tHePtPnvu6PNO+DPZAT/9IG/+wPv/OrrPFvPb0n/x0v/8+r+/Qzrewjsd8k | |
| 300 | −AuiPP/mXP+AXvs9b/0Bog+W3v/u/P/xXvja0vndMrPnfP/6XfyJ8/37Mdtz7KkDwEngPwD2BBxEm | |
| 301 | −VLiQYUOHDyFGfEjQoMAqUzBm1Lj+kWNHjx9BhhQ5EmOVgxQlplS5kmVLgSkAnMRXimZNmzdx5tS5 | |
| 302 | −k2dPnz9pejoI02VRo0ddAkhx0BNQp0+hRv156WRBpFexYkVpkWRXr1/BjjQ50GpWs2dVEh04U2pb | |
| 303 | −t295Cn0ZE21duxCVMoW7l69bqmQr3hVsdyuvi2ERJ1YMciyvwoMhZ1XrmG1fy5fjDqUbmfPZvAId | |
| 304 | −ZRE9mnRp06dRp1a9mnVr0T6qBu48u2VhcWdw59a9m3dv37+BBxc+HLe42LSRs5wsoJtr58+hR2/t | |
| 305 | −SHNy6y0/8zo1i3t379/Bhxc/nnx58+e5Lzl+nX3DwhVUxZc/n359+/fx59e/n3/+/Arr2wsQoeUy | |
| 306 | −QM/AAxFM8LxTqhPQQYWyc8CdCSms0MILMcxQww057NDDCV8A8MH2CiOmlxNRTFHFFVls0cUXYYxR | |
| 307 | −xhOJEXHE6ya7Z5YPeezRxx89dKDBGx+MEMgjkUySwxABI5LEsngxccYpqazSyhhrbNJJHDfTUckv | |
| 308 | −wURSyLm2dNDIMNFMc0kby+ysxCvhjFNOGLN0DMo2Z8txRzX57HPCMXmZDE/rsjvkhUMRTVTRRRlt | |
| 309 | −1NFHIY1U0kMNYXPQwQrLJpNNOe3U009BDVXUUUkt1dRNs7H00rsmg2CJSWGNVdZZJT1kyFVpy64p | |
| 310 | −zHjtlaa/7JQNV8EKO2yxY5H+Dauxx4ZltcvKfI2WL7kC3axZznSVVtu9gGX2WrSKTVbccUVa9s5v | |
| 311 | −0coR2m3ZfYpaQdEVLNt26XWq23PjzSpccvnttyRV8z1K3XoJ9uldawOua96CGcbpXmETRmpffylO | |
| 312 | −1lyIIzZq4IY5rungjO3K7pkwSC7Z5JNRTlnllVlu2eWXSdYBYJBXKqyaX3DOWeedee7Z55+BDlro | |
| 313 | −oXGuZmaaU5qMEJiZbtrpp2F+5lakrzrTz6vDZDJYqo96c86vwYazTm+5TqvLPbFOO0lA4S27KKvV | |
| 314 | −jttHrcl2OyKvw85b7xfHxtfuiPSUW/Ae2Ub4b5bgHlzxDOn2+3CH8N5b8sn++8b48YYCX1xzDAu/ | |
| 315 | −PKmlBJJw89EpbNxyzxWKfPLVw64cdcDPJl32zl9XKbsmlMld9915793334EPXvjhidf96NoLE0GK | |
| 316 | −5Zlv3vnnoY9e+umpr9765UU4/vXJrine++/BD7/4Jqau/aHszF+o7vS3Zl99x9lv230y53cI/frb | |
| 317 | −x19L/fPXX/75/6e/+9VvfekroPkOWLsAxs9w/OMFAMBhDAlOkIIVtOAFMZhBDW6Qgx3UIBXgZ0AA | |
| 318 | −UMGDJTThCVGYQgmC8HTpg4kKYRhDGZoQHA3k3wxxmEMdTlANDuSFGnYYRCGisIcOtMAQkZjEDPqQ | |
| 319 | −iU104hOhGEUpTpGKVbT+4hWxmEUtbpGLXfTiF8EYRjGOkYxlNOMZ0ZhGNa6RjW104xvhGEc5zpGO | |
| 320 | −dbTjHfGYRz3ukY999OMfARlIQQ6SkIU05CERyQsgrAIh1wBAEV9ykBBCDgCVtKSdBGJJTWZSWASx | |
| 321 | −JDj8QMlMGgMhBHmgJitJSlRWMpOaBCVZGAKERybkHsaoJBCK6ElNGkSXEAwlQ2Cyynv08pUKUQMj | |
| 322 | −z9fChFhlkispyBOM8YRETvMufqgDQiYBjgFt5lxPWEUdRgjJ1BnOlA/E2LnKyQsL1OGX72vlJKqC | |
| 323 | −kDv5DUopqIM004mQJ1QSdAJRAwDg+QR74rOB6VxnOxmSz3TCRJoJMYb+OIF5jZRYJQUSzYpVLIBM | |
| 324 | −am7ULOw8CBX6eQ9wSlJYq6CCRL/Z0HGu1JwLQae1UqDNhNIFAMa4JyxJKs9zysYq+TxINrOJEGP0 | |
| 325 | −kxdUsAAmWfoSmbrHWvk8lxqWelFlJsUgT6iDRTma1aOsApn7LOITwDEJbgorBYFxnE+RSs9OWsuR | |
| 326 | −WKUlTe9BBSDglJM6dSlPe4jWolZ0lrzwKkLUIFG95rOtooynJN0aKNAZwwI1NCoI63BUq6gBsqCj | |
| 327 | −LD/rapUnyDKypFRDCuz5GW9WchXSHG0dYFKRVcBTq611iTUFYgEqDKWsY2VqYg9bSrje9a3LtFw5 | |
| 328 | −C/LPUDqVpzsdCjL+0erIHoKUrr1Nal2ZqlvaKsQYrB0hSvNiz5ailhfXqINBqvtDZhrEKsYAwhOe | |
| 329 | −AELH1IGRfpilMUq7WUbG9BqjrcgkSOla/a7Eo0BgbVyR2tKFrJO179tlWlGZ35f6dqZ1HShx5Zng | |
| 330 | −VmoSdGidxGx5MYlrBvitqGyugBtcFVQe1a4P/GU5TWkV9uK2u+M1Z2ExSZCGFsSRDf0nLyIrEEdW | |
| 331 | −RK/79fFCUlBaAEjUqry0LS3BAY4WohW4xpXuQWDM0rJQYRUQzimEAmOBIXNYICDUZCiVW8qjDpat | |
| 332 | −W45ubr254SuXBcUxsco1VgGOOuBSnVQAhyzJm+d0OjLABeklK6H+xGYb/pjQ/owshv+cF3TWocBn | |
| 333 | −frJanavUM5fln4Kap5Pr6tMoU1kgQ0UIEJZC5gFF1Z255XJZBA3LOwm0Dv8soouDa2ZTppPGhgMH | |
| 334 | −iXc8EDUXmtcISXKj6XouKgA7xI/GNF0POunABLPE0GVwTn2aAgwLRMNkmYQ0NSzYgm4m2Yalqzfn | |
| 335 | −KlTr8pguKTYIdwMFDldnGAChdLF50ateWoM3vqsgJX3t+5L89prf1cItrT0szGIfdpXM9DAxESpl | |
| 336 | −2aj3yhM+8J3AEWpUxrTRjjyxl+lsp4lrvJLF9DbHb6nSlyAz1Zi0ih8w3sPQDhWgLoYmBFcRk3n7 | |
| 337 | −VZYAOO9clJL+giL6t98997lDrkHqutyjoSJFilVF/nOl/7zKg4k4zTVaFNAuneorOaIFSSwYIFqQ | |
| 338 | −qFy7egWz3pJrdB0tQCRt0lsS9aqvne1td/vb4R53uc+d7nW3+93xnne9F1KJffd72PG3db8PXogQ | |
| 339 | −rZ/gCZ94HEIRgop3PAwHOD+CkPDxlS8hC304ectvnoM1ZDzZ6xd59yXwdaRHnek9t8DQg35+omcf | |
| 340 | −6i8H+8fJ/nCqbz3r3ed6EU619M3sPe9RZ/vc91MSrzD+8ZGffOUvn/nNd/7zoR/942NV9wiEEiaw | |
| 341 | −n33tb5/73ff+98EffvGPX/vaOz2UpJ9+9a+f/dK/QfkcmJ3+YlSM/scCg1lxv3u9dKxj1KL93wqD | |
| 342 | −DepvABGjMYSPfeSPABXQK+5PkvLP+gJjV/ivYfzP984vMARwATUwJAxw0PAnATcwBDuiATPpAZEH | |
| 343 | −SiRwAgumAoHPcwJQBGFQIzrw8w5i/mIwBknwgUzw9/ZPBVfQ/FwQSjLwBkVwBp8oO7qgB5RwCZmw | |
| 344 | −CZ3wCaEwCqVwCqmwCpeQEBww86DkAtqhC73wC8EwDMVwDMmwDM3wDNGwCy8ACGMPSpDBCuEwDuVw | |
| 345 | −DquQEuCPf7IjH2SHdGYB/7QwMKSEdQTxa1zHgQrjBfZwdGjHifIwETenD7PQEKEkEAexEq+kEPnn | |
| 346 | −EB1Rcxb+sYkacRMVBxJL8A8PghIt8RRnBBP1RxNBcXA6kYk+sRXlRhR1kBQFwhRRMRddRBXxhxVl | |
| 347 | −MW5e0YeyIw9EoRiN8RiRMRmVcRmZsRmd8RmhsRgFAQIiMROhpACAIRu1cRu5sRu98RvBMRzFcRzJ | |
| 348 | −MRsLgA1nD0o0IBrZsR3d8R2hUQPuUID6yQaJMARzsPpOMAJ9kGFY0BZ5YQjvUQONkBHrcSDx0Q8l | |
| 349 | −kR/7kWD+cSEPQiARkgAL0hMPciIXMB938AJ7sCHb5SGtEQMxcgErEhb7aQOIIyVVciVZcjjgQACq | |
| 350 | −cRWhBBSkoyZt8iZXAxTQ8XAK4w5a8ieBMiiDwzjoxyD+D6ISFCQplXIpyyMDYHIUIVIgKKA/qLIq | |
| 351 | −rfIq+YMCdhIAoWQJmPIrwVIpGWAeP7Cf9PAX44YW9ZEHb1EX3ZJvttJufBEtsSYY488s6VJt1HIj | |
| 352 | −gxAQ3/IvV4QXCQhKEDEv65IsV+8gztIw/WQvARIXAdMtBVPyCJMxr8Yu8bCfuqADOLMzPfMzQTM0 | |
| 353 | −RXM0SbM0TfM0OTMXqBEqQ/IgeGAcYDM2ZXM2abM2bfM2cTM3dXM3YZMH4tJtCoMTUHM4ibM4jfM0 | |
| 354 | −3QAxb68GR1IBNRIgU9AjtwUkZVIkm3MAS1IYL/I66e85o5IXolM6pYU6e1EIubP+svMumfM8K8Y7 | |
| 355 | −W1P+IMJTPH2FPAfTOtnTX9IzM9fzPvvFPauzI+UzWuiTMu2TP8klP+nxIIbgOBm0QR3UNLGQNf9T | |
| 356 | −IKCBNy30QjE0Q3cTGn6zbAojFx40REW0QZlAOYdPMS2zMRXyPaMkMl10MkevMlOUTzAzQQViMWcU | |
| 357 | −TRzzOyHTRVERRl9PRnMUTWq0LFF0SHV0RSe0RX30L4FU/wSiMJEUTIo0MW90SsNkR1m0R5u0Ep8U | |
| 358 | −Ag9CSrF0bUwUAftpDyQgTdV0Tdm0Td30TeE0TuV0Tuk0TRFhNWvxO3VhBfi0T/30TwE1UAV1UAm1 | |
| 359 | −UA31UPlUFzqUawpDEer0USE1UiWVTuWxKC1yPw3+dFz8szwZMkDHc1Gp5gUz9UDLNH1AcFTFZVPr | |
| 360 | −E0A9lVcGNEYLFFWPBUGNVCDsUVbtT0k5lVVb9TJeNUhjFVcTg1atlBfQdFKRNVmVNU7vNCZ3VSD2 | |
| 361 | −FFGldVqptVoNVVH3Z0kddVm5tVuRtVKrhQavdEyVREuXlEu7VBC/dB/DlFyVpEqXc1zd9UjM9VmZ | |
| 362 | −NF1zcV3ZkhfEdF59BF5PVF791UfqdVXbEl/zFVSRZi4HlkcA1kyPtGF7pGAJtBQRNmGz1V77VWI7 | |
| 363 | −5GFNtZ8WdERFdmQh1FkNlhcqVENVdmVZFjc5NGNPFkRJdmZpljNL1FJNElOFNTFUtWLhs1cFVGH+ | |
| 364 | −aUZUd1YxiDVeeeFWizYsehZWeRVop0VoQYZol1ZZStV8TrVqwaJpgfVpoRYufhVKA1JrC/Bqaydr | |
| 365 | −ybYruFZs4/NrwVZqM4Zq05YkjjZgeeEcYiFv9XZv+bZv/fZvATdwBXdwCTdvyQBP15IjBYIHkqBx | |
| 366 | −HfdxITdyJXdyKbdyLfdyMbdxfRNmfZYX2KFwQTd0RXd0CTc5cVY7I5ZjPYRinfZgL9YS9VVx+VV1 | |
| 367 | −HdZsXycWaZdDWLdrXfd1BzF2+7Jdc7djbRd1cHd4M2R3xRZdfTdvgLcNA2NjkddCPBZr+wkpwzJ7 | |
| 368 | −tbcpnzJPWXQqsTJ8xXd880MrObd1ecErt3f+fdmXO8bydNVTIFBSKOm3fn/yJU22c2kSJ/m3f2tS | |
| 369 | −J8+Xd3nBJ+23gA14KIvXc9B2bkVibcH0Z93WV+E2YuSWgTkwgS9ngS34IxyYXSE4gvsibB94bDdY | |
| 370 | −LDD4cTS4hDmig/e1bUFYKkTYg0lYhRnjhA9nGOExh3V4h51xGvMXfbGxHIV4iIm4iMfxHANYbNeR | |
| 371 | −h5m4iXMYXA/wY1N3ei9EeUeYeZsXbJ43HaOXijWkes8WL70YQ6xYhrE4i+dki3lSSMe4QsD4dsW4 | |
| 372 | −jSukjPf1jNE4TtSYK7tYjt3Yhv/meOWYjmXXju/4Eic4YRhWjt/YeDWTDh35kSGZCiPUe5f+lAvT | |
| 373 | −8JIxOZM1+QzXMIlH+A0jOZRF2ZHtEH7101ZpOCRYWHZd+IWhIob3VSJTeSPqFmJReZY9YpWD94Nd | |
| 374 | −+S1gWXZlGZf/xZRtNGmFeQR19WRbuZeB4pd3eYaPOSNqWYpvOZozQpeh12uZuZkPOWAq+Jin2XoP | |
| 375 | −Am9Jt5zN+ZwD93B/WIAZN3Pd+Z3hOZ4vd3P7x14/F53xOZ/L2XTD9QjjmI/dQZCfmZALuUryWC7Z | |
| 376 | −mI8XWYH/mY8FOpt7t6Cdt5vzJZHbeKEzuKEDOZk7l6AlOhUpOl4seowxGoX7aRDaN6W11ynXWWwN | |
| 377 | −gHxhOqbF1wBCGl0KQ31VOqeXcgf82G7+smN+DziohfoM8FdC7XV//TeplVo1ALieT5aAhzqq7Zco | |
| 378 | −+9koq9mapwCbuVibt9lgavpbvlmYwzmMdTaatXqNO7Wro8KZIRqarXms4bisj/ms9Zir1Xon2Hqr | |
| 379 | −BSKYxbqn3QYJPSCwBXuwCbuwDfuwETuxFXuxGVuwEZcv25oZYGCyKbuyLfuyMTuzNXuzObuzPXuy | |
| 380 | −meGrr6UwhKCxTfu0UTu1GRsQ/LpsALmNH1qv7/WjW0e0m2Wkvbikb1ijYZuj0dejaZtObHtYcJuK | |
| 381 | −dfuPeXuMYxutLTa4a9uTZVh6Sbq1uea1ldu3BRi4nbtFDho4E1qRqZtqskMZ8qG8zfv+vNE7vdV7 | |
| 382 | −vdm7vd37veHbvCEpcZ/ZBVrgvvE7v/V7v/m7v/37vwE8wAX8vl1guHGlMCohvhV8wRm8weE7CsIb | |
| 383 | −aeiboQFySS0cf6JYnFH3Oy/8ZP3HA4v1lFm0wzv3wxkvgjgvxTFowtOR8lT8xVfIAoPQxWFcxT3v | |
| 384 | −iWo8xyUI8A5Px3Pc8OYH8Xw8xfeuyI38yJE8yZV8yZm8yZ38yaE8yqV8yqm8yq38yrE8y7V8y7m8 | |
| 385 | −y738y8E8zMV8zMm8zM38zNEcInLsINZJnyoMxO1HwoBLzsnJlRIuIVgNANhrxlYJyr4JglIA7UTM | |
| 386 | −koDgGhKNxdP8y1Mg3ARikbbpw37+qOZujiHwpcmeC9k8iiFMSqKuAQgUDGO8axUkirKmLamugYSa | |
| 387 | −LdFVHbAAoKH2qZ2sqdxsLb5QndIhxtIjzdRiqiGgJMz8xrz0KawGzr1SfdWN/dYEArZ07NZknbqK | |
| 388 | −btAqfbdyvbmiLCH2/CSkCV/+CptK/cmSfd9AzNiNfdEFYhX6qbrazCF23dYV7tJPzXLWaYR0ruFM | |
| 389 | −DdLpauxETsbFHcz/SZpa7SXmKt0XgtVOp88RjMK47N0hR9oAgOTo3N3JYsSKfd8T3aj8QKZEiqDs | |
| 390 | −XcOMgcXoHaei/bmqvSHcq4e0va9+Sui+7ZsmnuLRfBIWCXSCaZfQKqamKuTDHdL+82ndXSrf82wh | |
| 391 | −gL3T7uHpSq259N3lu9yR1I2lfGrbk6ndpz3Aug3oO96vTMrZGmnF2O2mih7cWh7pzdzOSu3PjCHR | |
| 392 | −eP3WaarPyR7kPG7g/1zrTwmVKgLOwKmmkN3ACN3nwX7v9UcNiI3vAT/wBf+OUuCCgPwsvo6CeLwo | |
| 393 | −MGjwHf/xIT/yJX/yKb/yLf/yMT/zNZ8zQKvzPf/zQT/0RX/0Sb/0Tf/0Ub+ifGjsUr/1Xf/1YR/2 | |
| 394 | −Pf71Yr/2bf/2YZ/xCm73eb/3ff/3gT/4hV/utXD4jf/4kT/5g78FL2fmlf/5oT/6f19cR9xeSdx9 | |
| 395 | −Mrz54dxur1+Au9+Ftn97wp/+mqvfw60fw8c/9dKfrAViAsrh/eE//uV//um//u3//vE///Uf/g18 | |
| 396 | −VQojEgBCmsCBBAsaPIgwocKFDBsKjMQr4j0A9yJavIgxo8aNHDt6/AjSYwoAFp+UO4kypcqVLFu6 | |
| 397 | −fAkzpkyUEyyODIkzp86dPDUCSGHRwayhRIsaPYo0qdKlTJs6HbrE4sSKPatavRpyqkVuqrp6/Qo2 | |
| 398 | −rNixZMuaPYu2KzepFLG6ffv2psQMT+vavYvXqQObJOH6/Vv1Z1B3hAsbPow4seLFjBs7fkz4BVuq | |
| 399 | −gCtbzqg1IrFenDt7/gw6tOjRpEubPs2Z2OTLrFnL5XVvFuTZtGvbfrw34uv+1rwtC47o4Lbw4cQb | |
| 400 | −S5bYtrdyt5l5bUYNPbr06aZVI6e8PDvP17GLe/8+PDev3drL8/zNKzj49eyNrzYPH2Tz59Tr278/ | |
| 401 | −2jrs5PH7b+QuW3sCDkiYeOT5h2BG6O1gSoMOPghhhBJOSGGFFl6IYYMIvJdgh83Vs0uIIo5IYokm | |
| 402 | −nohiiiquyGKI9XDYIYKvEZJhjTbeiGOGO/AVY48WoacegUKCd9x+2PkI33z4Lcmkffo1hyR8AA5J | |
| 403 | −pXcG9hVlgkBWyaVwRUKZpXZKNklmmaU9yV+Y2k3ZZZuzXakmglu6Sad718VZ3phm7slnL2geiSdv | |
| 404 | −bNZJKGJwBgrfnIUuGhn+jIi2pmefkjL556PKDcpooYdamh16wuQIaqiiWsiJo5xW1pwsi6zKaquu | |
| 405 | −vgprrLLOSmuttq4qi6mn/vUaBAiMCmywoQrD467KKZopoV+maexfkU4KbX2VNlsZpsnSuSm1lyF7 | |
| 406 | −rZvLAqotVs9GSy5004YLl7Xddpktun9xuy6X37oL17jl3kvaufRepW68VLa7r1vonZJXwQYfzFRU | |
| 407 | −dwZ8VXNxyAFxxBJPTHHFFl+MccYabwxxHLoynNNrAtCFcMkmF3xKsSALDFRElrwBc8wyz0xzzTbf | |
| 408 | −jHPOOu8MsyYfrywffxSkRXTRRh+NFgU/Ay0SlgLQw3PUUk9N9c6WqMz+dGAtp+evt0tnvZG9+I79 | |
| 409 | −mb5gg9Rv1wQCfDZO8KpN4LxtZ8UffWTfXfbXc6vcHdxVsr23R2/73Z7cgXckNt5jm314RmkTvh7g | |
| 410 | −jfu0dRFmXI555ppvznnnnn8OeuiiX86O3oE390gAqq/Oeuuuvw577LLPTnvtqj9i+t69cjF6777/ | |
| 411 | −DrzoRWA9eUeDQ05k7nMnrvi9jBevG5Z9Iz+g5ND/uHWQ1BeufNvMN0/u89A/vj1x1l/Py/HlD2c4 | |
| 412 | −+gs7B37z4hdP/vq3nX+9+vbb1r7738c/qflNrn77ow3+oIceEsxhgQxsoAMfCMEISnCCFKygBRdo | |
| 413 | −j+6drTlYmIYHPwj+whCKcIQkLKEJT4jCFHoQCxoE24wuCMMYynCGFyQB8dx3Ef0VcDb9Q9//ANgn | |
| 414 | −ATaOgDvEzQ1xGBEdFtExPbzeD4G4JyEejohLZMwBi6fEKi6midB7IhTLJMXAUVGLibni5LJIRsRw | |
| 415 | −sXhe/GKTwqg76QUojbUxY+PQA4Vg6HGPfOyjH/8IyEAKcpCELKQeR9DCrKXqCIxspCMfCclISnKS | |
| 416 | −lKykJS/JyFy9D4e9UoIhPwnKUIqykFA4IhLRSMfCrHFybXTjkuA4tzGmskCmxCEqZ7nKxrXSlfeB | |
| 417 | −ZdtkOUs7Hu6Wqczl4XbJS2klkmnATKUwAzewk0lzmk1RmJGQ+L7+h3Fsm9zspjc15rFNuk9kJKOm | |
| 418 | −Oc85i5RFD5sK2trLqgbPeMoTZz4Tpw+FhrR86nOfZlGaPa8nMqjNc6AEhefV1snOHGZvlrQx5unq | |
| 419 | −lszwLRNozaTjM/dGTDo6dG/IjKh0fHm2iqbxonPLaBo3ujyIejSAE12ZSMlI0rahJxEmqKlNb4rT | |
| 420 | −nOp0pzztqU9/CtSaluqfXeQPC8KB1KQqdalMbapTnwrVqEp1qkhlQUtB1qs+BHWrXO2qV4GaiFq6 | |
| 421 | −Dz2eKIVZz4rWtKp1rWxtq1vfCte4mvUSV2VYc6owhbzqda987atf/wrYwAp2sITNaxXqGjDu4EOu | |
| 422 | −jG2sYx8bV0/+iBV9ZIWsZS+L2bfSlahs5A9eCwva0Ip2tIM9LGcHKL3FZna1rLWsZBGa0CRurayt | |
| 423 | −ra1tNYvYfd2VtLztrW8Fa9prYlOxty2ucc/62vFgKbaVPa5za7tZ4SJxt7+trnV5G1wwoY+4z+1u | |
| 424 | −ZpN7IGyihxEgKK95z4ve9Kp3vextr3vfC9/yLiO39GqOOtKB3/zqd7/87a9//wvgAAt4wPhVB33d | |
| 425 | −NaP4KnjBDG5wfBkx2fzN1rsUtmx0tetEz153wxwu7YHRxd0Ki1iu4F1uQps74hS79cLMuidlPtvh | |
| 426 | −GMt4CtltMUBTq+Ics7XEscWeRWir4yDP9cPhou6Mj3zdGoP+a3w4FrKQedzj9E3YyUFm8ZI7+2Ik | |
| 427 | −a7m6SmZniKmsYij3GD0JmIeZz4zmNKt5zWxus5vfDOc4mxkHRNZWc+yAhzzrec987rOf/wzoQAt6 | |
| 428 | −0ITOsx3qTK1epULOjG60ox8d5wREGIFTBrOKrcxOI29506Lt8nCbbOkUi5m5lQ61iDGNTU1zetUe | |
| 429 | −Pu0QQW3qCo/6xKWOtXdRPV0Ns3rXwEV0s75s6+7Omp1khrSxj43sN9PZ1cfkTzzYAO1oS3va1K62 | |
| 430 | −ta+N7Wxre9vQjoevjaXoZIt73MeWNGxJ/eNgVxjXOFQ1r9+tV08jEdjqPu6wxVvrehuX3f7TNbz/ | |
| 431 | −bdhv74r+3vq+7b1Pme+C25bfLrYIjAEOb3lzEtYKN/iksZjwirOW4RnOMsT/LfFxUlzjrT24LbdG | |
| 432 | −XgerfOUsb+98mf1QyqAjDTSvuc1vjvOc63znPO+5z39Oc3QI/FQJbrnRj75yCJ+b1ukm+W05XlSP | |
| 433 | −f/zdId/uyJ3+3YufMeNYt/DQOeXuqXO66jeWimq7zlqTj5XraHcs1LHscLFT/euWInjbH6t2yrL9 | |
| 434 | −7nJ9Oyv9LfdVk53JZud71pdO7K1xgACMb7zjHw/5yEt+8pSvvOUvz/ha0P1RzXkHOj4P+tCLfvSk | |
| 435 | −L73pT4/61Kv+8+/YPKJ69QfMy372tK/95Tmg9Tvu3fD+uIU5RwEf+E0Pnn5X5z2Jcz/M3RufrX7X | |
| 436 | −JfCDr+Xho7bwy8c78qGp/OqntfnNljr0tyz9V1Nf+4zNu4QtogB8qH/97G+/+98P//jLf/70r7/6 | |
| 437 | −C+H6QDXHG2Dov///D4ABKIADSIAFaIAHiID95w35hyciwwr2B4ERKIETWH8KcH0YtTWOkAUbyIEd | |
| 438 | −6IEfCIIhKIIjSIIlaIIb6AMMGCfNIQ5n4IIvCIMxKIMzSIM1aIM3iIM56ILioIJqIjLdcIJBKIRD | |
| 439 | −SIQm6AgXWFLZR35D5nsp5X3fh2ThN0XFt4RrZX6U1nRVCFfcF3NxB4Xg14NhYndamFZXiHFZSIZt | |
| 440 | −xYX+v/eEXyhjUihGVJiGZmWGW2cRw9AGeaiHe8iHfeiHfwiIgSiIg0iIeUgHYZglzQEPZcCIjeiI | |
| 441 | −jwiJkSiJk0iJlWiJl8iI8ICIUdIrD1CInwiKoSiKhDgMSChTSriEa+iEXuiGRwaHcTR+c2iFpng2 | |
| 442 | −KCaLaqWK3vN8rchhrxhLcjiHdah7aHiLaJWLG7SLvJhkm4gkYyiLwph8xFiMTChd7ZaMyshlzOgj | |
| 443 | −zhiMtAg26PEBkCCO40iO5WiO54iO6aiO68iO7SiOGKCNPdIcRlAM9WiP94iP+aiP+8iP/eiP/wiQ | |
| 444 | −9WgE8Rgjr6EG7oiQCamQC+mOH+CNWYMe1nhlfzeTkc5XkVOYUOGFcJlmY1HHkRcZhxlpYon3kSWZ | |
| 445 | −ah1JfCIZZeljDCngki8JkzEpkzNJkzVpkzeJkzlpk6uAkn+3CjoJlEEplENJlC7JkyAZR0WplEvJ | |
| 446 | −lEFpDCMpXgAglVNJlVVplVeJlVmplVvJlV3ZlUiZUl4plmNJlmVpllUJlr90lmvJlm1plisJl3Ep | |
| 447 | −l3O5NwEBADs= | |
| @@ -1,445 +0,0 @@ | ||
| 1 | −R0lGODlhdQKaAucAAAAAAElJDK+vr1YMDBUVZC8kDQAAVkYQEBcHOwYGSCEJHSAgaKOjoys8DDMz | |
| 2 | −CgAYGp+fn19fFJmZmQoKO10wMA0VIAAAcDsICCsMDAcMT1MMD2ZmAAcSO29ISFUHByIAGoiIAA4H | |
| 3 | −T0pKDJaFhXd3d0EgABoaVGYyAC4AKXd3ODs7BwAAN1MAKQAAYlZGB2JlDBwcWWBtYCA3ABAQTQAA | |
| 4 | −ZQ0VQD4AAFVVVUhjSCQMJQAAfBMHMkQgIEtLSzAyDD5VPmZmDEZRB2FhEWZiDFo2ETkdCwAAVEUt | |
| 5 | −Gu7u7js7Ozc3N3d3WACPADU1NTMzMyBRIDgAAEJCEHEAAEwNDZeXAABpAEQFBSMjIxgNQDooCBA9 | |
| 6 | −EEhIbwBVAAw/DAwMPgBNAENDCgc9B8zMzABDAD4MDAwOKjwKCkQWKUscHAAAcUtLFRMTEwohCoqK | |
| 7 | −AA0NTBEREQgfCBUqIgApADIAAA4ULzg+DEEfH3wAAAcHSaqqqlkcHDgMDKSkpFQAABUVRjEwCGZm | |
| 8 | −B00QEDAwXSUMJGUAAJaWlhQUUnx8jVQaGgcGLggSGy8GBmw4OGNAL4qKioiIiGIAAEsHB3JYWHd3 | |
| 9 | −AAAAPlctLYQyAGggIBgAGkIVFQwcJRgYSA8MU9EAAAcHVQAALRoaYbu7AEY1H2ZmZlxdEHAAAD82 | |
| 10 | −DlhqWExGHgwOUzMzDAAAmgA5KTEHB2ZmPlpaB///////ACISRExUDTJPJUQrDAwMVhISSEhISHd3 | |
| 11 | −IC4xCjhcOA4ORERERBkVXElJAG5gYFhYcnt1ZkgGBlYAAAUFMTg4ODo3BTJrAFESEmZmMF5jBwoG | |
| 12 | −Q1paDUkKChxGHN3d3RwYRGZmHCgoKFMAACYmJi4YLhQ+FCIiIhU0FT0AKR4eHmVeBw04DRAsEAwu | |
| 13 | −DAc2BwoqCgAAPFdMDQAA0WAqKgwiDEgZGRkQRAckBxsTPDEwDBAQEDwAAEJGDAAAU0FBQEJCDLu7 | |
| 14 | −u2IYGJoAABgYRjg4bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAALAALAAAAAB1ApoC | |
| 15 | −AAj+AGEJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX | |
| 16 | −MGOelAegpk0AJFrSrLhTpYQ3AHoeDFpQqMCfQQHIXEh0olGBYkZtpGkTW56B0EYBfTMKCUEJEqja | |
| 17 | −7DpQDIAbBJsOJHF1qdu3cOOqVKtTKcWnEOnmlQALWk6Eep8C4Ou3YWC7JUlAg9VUL0K8vcRMRUwC | |
| 18 | −gFdoXBdD6+WE4A0kQqE5kSqwsuWBepFg8yq3tevXsPPKg4n3YW2HjnHPZrp7oODehoHDui2ysfDH | |
| 19 | −iKFi42iU6A20A5G84SsQrdE8iKdPR3181KPY4MP+NySBC4L4lHRJAI0MSwwJ0++B5nSvHqdAJPVv | |
| 20 | −LHb/U54YJzX99RR+QOnX3ntKidELANiMYlce2DB4FX9vHMdYTfIQeNZ+8dlHkFg9QSihQEQpyKCD | |
| 21 | −H9q0E4X+AfhGTir6ZhMskWGTU33Y8EWffFC5OB+CONX3V1BixVgfe7DgWFlB7621nmRMAjBdLwk1 | |
| 22 | −Bw0SAEBZ1mKw5PHddQ9aNgp0jB0nQWfnpanmDTVNU56aI6lFghOLkbAcTVJh9xl28uCJBDQ2Jkkn | |
| 23 | −EqN0Js8bvWTYy3dmzfbUnFcWOhxXsznxmWhKHeooANAcmihrBhEFKaGGAtAVoH9xN1ymFa66GFH+ | |
| 24 | −lv4JYEFE7eRphi/21ephJDqRR6fY1MlqnlnCkitmfZra5VlI8Fnms89CmuRy6jkKVEGLlkbntEwG | |
| 25 | −CwuKyK2VE3HfLhaapQKNuSxrjpkF50Sg9SnvvPTWa++9+Oar77789lsvPDcBsE0Tqb67kVpWDVSh | |
| 26 | −UMbRxKUEy23XV5YOFwRNrckZS93FYlRs1sNKjZLqDSRUnBBREnNsMsS0bvrtyDD6x+lRGWPsqkCZ | |
| 27 | −pSVcT4MZtCRN7M6Ws0AM70bU0UbPljDO8uQ4kAQ177a0scA5TWKVAQ8mVJECUbnqTZ/h3NYb30Hb | |
| 28 | −ssEQFZn12my37fbbcMct99xxo62RWlknq2r+mVsrhbfeRzmBDZsu68xdT33TGHDJGYc629+JG77T | |
| 29 | −gjfFHLmqtiKWFTZv3CAZr9CKcQOiC66q6uadd4yYcc+ynrdav5EYMHAIYx2dVljunGnZtWF3E5q5 | |
| 30 | −5Wb3QfH6a/zxyCev/LwAB3xFEoUMnxHCuu9N5Myw/KSxQCrbZRaUNhOUMsV2XQzyy0U1fvb4qj/8 | |
| 31 | −xtk7iey4+TTDn2njBJpNtF1N5Wp60QQhEABb97ikwQIbwrFa9qImEAQmRGKMsZ2MaESmdCmFBFCq | |
| 32 | −zShIs6xXWUh40gthStgEAHZYSksitIictvWIN4BmdUnzE6oEFalSQaVYjwDAVR41KEkJpRf+l5qV | |
| 33 | −piYFuOEUjESzGZUPTfWnQEmOVdYqIAVlxcDMKewvdtKf6aBFtr4s6IWq8p+dBog0xrRFVCx0YbWG | |
| 34 | −EyFslU1aLfRKyaa1GHDNMUW3QwtmDOSXa3ltiwF8Q1tw9p12qS+FiCxJoTyXyOkBpz5OkAwZk1Uf | |
| 35 | −smgobEI5UmUeMaD8eEUoSFjQlI4SIadlsnEAEsMlP4kToJDliaRkEHWIEkopSeCPSPwfYvIAoLNI | |
| 36 | −JpUEwcz7mgIxBqmnQjDsUi89N8lniRIWwIQklKSJyyRxUJokygmhbMm/I6otbH3RijFp5J4JFkR7 | |
| 37 | −BJFU3rJXwUa6UySgemddxHPEhZBLnij+AVRDVEm097XmBtTBp0AHOrx7ukUeZXOIQQk6klFYqCBj | |
| 38 | −QgISbsBBuOiToRjNaHgWCieOarQjhVnIRGsCzriE5aMoTalKV8rSlrr0pTCNqUxnStOa2vSmOM2p | |
| 39 | −TnfK05769KdADapQh0rUohr1qEhNqlKXipARSOKpUI2qVKdK1apa9apYzapWocolgxwiGGANq1jH | |
| 40 | −StaymvWsaE2rWtca1oTE4BRwjatc50rXutr1rnjNq173CtcYJEQYSwisYAdL2MIa9rCITaxiF8vY | |
| 41 | −wAojIVuNrGQnS9mtAgMh0GCrZjfL2c6y9RAOYUQnRkva0pr2tKhNrWpXy9rWuna09Hj+6ALIQdva | |
| 42 | −2va2uM2tbnfL29769re0bUFCnsCE4hr3uMhNrnKXy9zmOve50C3uExKSi1hY97rYza52t8vd7nr3 | |
| 43 | −u+ANr3VzkRBIvPa86E2vel17icesArjwja985/vbBYR2vfjNr35ZG1uEzJa+AA6wgHkrXIQQN7oI | |
| 44 | −TrCCF/zc6SKkuuKNsIQnTGHwkhch5t2vhjeM3/YeRB7vHbCIRwxg+zZEtBxOsYr5K1sSu/jFvi3w | |
| 45 | −QQ7M4Brb+MbMdfBBIFzhHvv4x9298EEyvOIiG7kTHjYIiGHM5CbX1sQMQfGRp8zh/h7kv07OMoll | |
| 46 | −bBAa4/jLYF6wjg3CYyCb+cwUFrL+QYhM5TbnN8lFCbGW5yxgKC/EDlPIs573zOc++/nPgA60oAdN | |
| 47 | −aD3zASF+cIOiF83oRjv60ZCOtKQnTelKK9oLCfFGNzbN6U57+tOgDrWoR03qUpt6095ISBSawepW | |
| 48 | −u/rVsI61rGdN61rb+tasjkJCzFDoXvv618Am9B4QwgdLG/vYyE62pf1wXzc7e71WNgiW6Uxt+XK5 | |
| 49 | −IF4Os7a3vdwxF6TMaA63uLmr5oKw+dnobi2cPyTnaru7vs1Ot7xXG+2CTPvd+NbttQmSbW77m9ve | |
| 50 | −Jgi4x03wcZebIOeet8JJu27ftDvfELetnRUi5YVbvBP1Jsi9Ix7xfQ+k3/8O+Zf+Az6QgRf85GY+ | |
| 51 | −+EASfnF5N5xoD+c4xCeekIq3fN4ZH8jGZY5vjwsE5CIPOoNJLhCTo/zoFVa5QFh+82e/fDgx5/m7 | |
| 52 | −aY4QHgzg6ljPuta3zvWue/3rYA+72K/uDAYgpB5eSLva1872trv97XCPu9znTve0JyIh5uiC3vfO | |
| 53 | −9777/e+AD7zgB0/4wuvdHAlRBRAWz/jGO/7xkI+85CdP+cpbfvGqSEgrxs75znv+82LHAEIYMIG6 | |
| 54 | −m/70qE893esR76bLO+cC2bnUq+1zWABd6LiPLtFhYXSk+168SocF013f5qcvefYzbz3xnw17WMge | |
| 55 | −+XOu/e1zT/0cU/f32E9zeZf+73L3Qj/fVD+Izbnf5uY///tOln7116/762f//eEN/vDJX2TjRx39 | |
| 56 | −WQ6/QcpBj/77//8AGIACOIAEWIAGeIAI2H+lIAAIYQJp8IAQGIESOIEUWIEWeIEYmIEa+ICUkBDZ | |
| 57 | −8AUgGIIiOIIkWIImeIIomIIquIIgmA0JoQZtEIMyOIM0WIM2eIM4mIM6uIM8GINqkBB9kIBCOIRE | |
| 58 | −WIQImAwIIQDvsIFM2IRO+IQaaAIOUQlSUIVWeIVYmIVauIVc2IVe+IVgWIXUwIAHAQqrcIZomIZq | |
| 59 | −uIZs2IZu+IZwGIdyeIZGkBDXUAV4mId6uId82Id++IeAGIiCOIh4eA0JEQH+oZCIiriIjNiIjviI | |
| 60 | −kBiJkjiJlJiIEZAQNhCGmriJnNiJYJgJSWgBcziKpFiKpiiHoKB89Ddl5od/7qZ+7BeL1vdg8FeL | |
| 61 | −3iV/q+hs9ueK1aZ/BTF+uVhkrciLdAaLsniMx7V7vWeL8IeLwUhlu0iMc+aLBAGMz5hiwyiNWWaM | |
| 62 | −yIiMysiM4IhdzniNRhaN2uhk1DgQaBAJ7NiO7viO8BiP8jiP9FiP9niP7DgMZncQt+AJ/viPABmQ | |
| 63 | −AjmQBFmQBnmQCJmQ/lgMCREO4PCQEBmREjmRFFmRFnmRGJmRGvmQ4ZAQYPAKIBmSIjmSJFmSJnmS | |
| 64 | −KJmSKrmSIAkGCWEF+Bj+kzI5kzR5j8N2EAyQAAq5kzzZkz6ZkLegiuRYZS12juk3XN2YlN8YjuE4 | |
| 65 | −jkOpYuZolDCWjgJhjU+pX9kolS/GjUkZi0vJlMzolFe5YVGplSRGlbBglWMJbUVpli7GlV25fl8J | |
| 66 | −lrUolmupX2XplgOGlmp5l+iVlXo5YHAZl9Q3l3T5fnbpl+uVl4FZYg6RCTUZmZI5mfZ4aAcxAz+Z | |
| 67 | −mZq5mQeZAAnxDWEQmqI5mqRZmqZ5mqiZmqq5mqwZmt+QECIACLI5m7RZm7Z5m7iZm7q5m7zZm7Ip | |
| 68 | −AglxAZQ5nMQpmTdpEHzAmcq5nJs5A0KpmOkFmI0JYINJmLhnmIeJfYn+CZ3oxZjTKV98yZ1Y2Zbf | |
| 69 | −SZ1IaZ3sh53Z6XvbKZ7s5X3lGWDh6Z5s6V/xGWDViZ4ip57reXTtSZ+r5Z336VvzCaB/SZ4DCl/5 | |
| 70 | −qZ//xp/9eXL/aaCoJaAJultoeQ6QkKEauqEc2qEe+qEgGqIiOqIkmqF9sI8GwQvisKIs2qIu+qIw | |
| 71 | −GqMyOqM0WqM2uqKfkBDpMAY82qM++qNAGqRCOqREWqRGeqQ8mg4JoQKT0KRO+qRQGqVSOqVUWqVW | |
| 72 | −eqVY2qQqkBBQUKJe+qVgGqYk2gqjtwI3eqZomqZqaqO88JwSmlrSWaG9taAMCnDu96C/F6FvWloU | |
| 73 | −Kqe4VaB7ymL26af+wEWndaptDoqnBrd9gapu8EmoBOqmjUpacQqpuGWohwpmiaqo4aanjdqnlkoO | |
| 74 | −FyqmpFqqpiqiJ4oQKrqmrNqqrjqjOYoQcCAHtFqrtnqruJqrurqrvNqrvvqrtAoHCfEHv1Csxnqs | |
| 75 | −yJqsyrqszNqszvqs0Fqsf8Clp1qt1lqqZIqTZvqq3NqtrNqmJzapgnploTqn55mpQbepnHpmnhqo | |
| 76 | −oGqpgCqup1Wp5Rpc54quIaeu6wpk7bqn7wqp8SqvpUWv9Yqp+Gpj+rqvPtavb/qvhBqwAgtbCFqv | |
| 77 | −tmWwBzt0d6qwBMewEuqwfoqWHXAJIjuyJFuyJnuyKJuyKruyLNv+siOLQgRhDwswszRbszZ7szib | |
| 78 | −szq7szzbsz47szCQELTwBERbtEZ7tEibtEq7tEzbtE77tERLCwmhDLlQtVZ7tVibtVq7tVzbtV77 | |
| 79 | −tWBbtcqQEHrgsmZ7tmibti1LAQghBj/7tnAbt3L7s/bAVHZ7t3ibt3q7t3zbt377t4AbuII7uIRb | |
| 80 | −uIZ7uIibuIq7uIzbuI77uJAbuZI7uZRbuZb7UhCUPf50HwJySIYRMFTCM6ALSDJSFYPkM2szG4Sy | |
| 81 | −Fa90ITZRUpcbu7KLESRQQRRFEEtCulBBQrB7NumTS78bvJp7uh+WHHukGaPDJU0hGu00u877vPt0 | |
| 82 | −GrCAJYOUB9f+orsH1BVI4ATVZDjB6xh4YRRZpBBGAUQF8RzAuyzQu77sqxBWY71YkSN2ARmsQRzg | |
| 83 | −yz/HEb7Giz3hch/FQhBm4RVqgR3tW8AGnCTQIT9dw0nz67ncAhj5i79K1jixI0HYS0Dcgy4HvMHP | |
| 84 | −G8DGMk3W0cAIIUAnEzD7IzuVg70V3L8XfDQ30QvxxMEybLlOIAEQ0k+sdMIG0UK90FVDEcHpa054 | |
| 85 | −hBX8W7zR8b9lcRogNMNMLLmPQFFYlDd4MUYMcb9BrMNDXBrLQb7JYb6eAR1L3MRi3LgXgw0wu0UD | |
| 86 | −gsQKYcVapMKI8RPEO8HB1DnI+wbK+1BjnMeMKzhG/DU2kSj+WXMyQOy6N+HHNRG6NzE1Fnwf4jQ0 | |
| 87 | −bazHkBzJkjzJlFzJlnzJNEUCvbDJnIwkInFLnbzJAYXJpFzKpnzKqJzKqrzKrNzKrvzKsBzLsjzL | |
| 88 | −tFzLtnzLGhHKurzLvNzLvvzLwBzMwuzLo8xSCjLMyJzMyrzMy3zGKnXMzBzN0jzNyXxTDELN2JzN | |
| 89 | −2uwhLkUT3KvN4BzOyAwgePxR3izO6JzOvNxGNsXNLuXOLEUT5axR8gxT9fxSuVtT8MxS+6xS99zN | |
| 90 | −YZxR/9xS+UxT/axSB41SAx3PAY1RC71SBT1T3CwMjFDRFn3RGJ3RGr3RHN3RHv3RIG3RXZXQ5qwW | |
| 91 | −OLALKJ3+0iq90izd0i790jAd0zI90yiNAzIyzwKtFiG90zzd0z4d0h2wFg7cUtzcl5MabSRNz2ox | |
| 92 | −fRd7Yzr20P6sFvMnrkkW0TJV1BGLWkhdT1HdG0zd1DX21A3NUP881ZNa1UPNz6li1I261fa81GDt | |
| 93 | −b2KN0w4t1Vl9WmhtzWt916bl1i/1z18d1wo212/dG2b9qUKt1+pYnIzd2Paoj6jB1Sn1z2zQmpZ9 | |
| 94 | −2Zid2azJBjdd2AMBk44d2qLNjsdp1TGF1XxNqb2R1Dnt1YK9bYT913ad2qOV1+2817SNcast2QoN | |
| 95 | −168dZrEN0Iad20iW2Lc9EGwdqH4t3B/328Dd2bI93Ln+bdv6nCpU6InYnd3a3YVjGNmeLRAfyILi | |
| 96 | −Pd7kXd4q6IL7Q9dkrRaZuN3u/d7YDYqlkdYrxc38Z4T4nd/6XYAL6N3RPRBaQIgCPuAEXuCDqAXQ | |
| 97 | −zdwCEYT73eAOjt9ION+KXZXEvdwtBdjOrakJfuGzTdvUbdC4TdsWztCuneE4FtwcLt0ebtzVjdwV | |
| 98 | −vtvfbXsmfuIbTuIrR9wfLtGpgqHX2uM+jqooytp13RuzCqxGfuRInuS+KqzpHeNd+uNQHuUZmq1J | |
| 99 | −Qt8IHeKpPeIrheEzjrA1vuUdnto5ftVYztda3tXN3eVh/eVovnQ4zuIg7uK5feaT7dtqLmZsXucq | |
| 100 | −Lub+cK7jci7iMP7fP3fnGNvkgi58by7hxy0QeBZsjv7okC5olskYvF3SvaFpp5bpmr7pnF5qqWbo | |
| 101 | −Cg4LvBbppF7qjl7aVp5SqA3o/h3qgU3oyIXiNu7m093nZP7nWR7org7rg53nvb3nfD3mp13md03n | |
| 102 | −v57mvN5+oJ7iN17rit7iFD7nus7sg57syr4q6k1QZZ3oVT7hsMADZBDu4j7u5F7u5n7u6J7u6r7u | |
| 103 | −7B7uZhDkla7UvZF3hlfv9n7v+E54iLfssw4Li9DuAB/wAj/w7C56zx7n0c7q2RTjr27tsg7mwH7X | |
| 104 | −wg5Tq57rrU7tMm7t0PXwbY7ozt7ti56WL37x/d7+8MnO8Xre7Ct+8H4uENcN3zAf89xNhpQe4+Ft | |
| 105 | −3jif8zp/guiN7THe3jIf9EIvBfIN8tAOC/f94Eq/9PxN80K+3r1xhwY+9VRf9YBoiPwO8QPB4Ezf | |
| 106 | −9V5PDxFu9Agv8tJO8lpf7RrvXCh/7LS+8mLf8mSv8DV/6CbP62tv6SrP5yx/6wlv8QtP92nfYL6O | |
| 107 | −922v92/P998Oeoq/+IwPdmVn9h1vDt8w+ZRf+ZZ/+Zif+Zq/+Zzf+Z4/+fvu84e+eY1f+qav+AZ/ | |
| 108 | −+MOO62Y+7SUf+Go/+PKe98Fu66vf960P+SmP9rCvXHc/+4Vf+3t/+3Hv93O/673fbbLf2rQv8bb+ | |
| 109 | −T/HEntXGTvgZn/zJ9fvMH/zOP/zQPxCS8NPgH/7i/9Fa8vTarhY/QNPqv/7s3/4z/QPLP+QDQQHj | |
| 110 | −X//2L/7P/1LmT1D7L1BQvfsAAUvgQIIFDR5EmFDhQoYNEcoDIM/hRIoVLV4USAIARo4dPXYEQOLj | |
| 111 | −SJIlQ5ZEmbIiRIkqXb48yBLmzJkyad5MqRHnTpgnef4EKRLo0JURiR51aBPp0odGmT4tqBPqVIQA | |
| 112 | −epHAmlXrVq5dvX4FG1bs2LA+qT6FOIrsWrZt3b7FOsrpWaZp4d7Fm3dtr410/QIAHFjwYMKFDR9G | |
| 113 | −nFjxYsZC/SKFyFjyZMqVLQ9u+fho5MudPX/+pqxZ9GjSpU2fRp1a9WrWrV2/hh1b9mzatW3fxp1b | |
| 114 | −927evX3/Bh5c+HDixY0fR55c+XLmzZ0/hx5d+nTq1a1fx55d+3buFN9IICjhDUEkQiFyJNwL1nlY | |
| 115 | −6df3JcgZALY8Cgc7yQxt1Jv5JJC8J+yGwoSSwAnAnABPoPkKkiuz7h6EMEKKSLiBoBtGIUgq9ggS | |
| 116 | −Q0AAbvivKgcFYm+ugTY8ET7x6hNRICT2+w+aN0aBBhYxnHCiIBMVdHAUJ1jMwwkM2wNADIL4G1FC | |
| 117 | −JZdUUgwAQkQCABZhyYM/EuEbCJtRkEDCCfVaLKjEJFG8MkNsEporSol6qXAgJLBxrL0k55L+AJsQ | |
| 118 | −XfyuPSccC3JHJv8EVDtsEqxyIGgG7YtMWHoJUdGB/BTTIEVRhAaAGg9K8w0uiyzokRwfnTMzJx4x | |
| 119 | −iIQcAXjkTIFGecTPQF+FFToKV3Wsl0fYc3QgElTFdMy+IMWyTIJcldPFUeqbFEs/5wJWTmyMhOWN | |
| 120 | −SpOMtVprj3PyvzegnRXXYN0k4Q1qFRxMWMJESlbHcd1LF1SDmPVVTqyoPHXca+/FtzcE81BVHk3f | |
| 121 | −E7bTN3q5FMz4fo03TCwrLVjdgVoVI0poH/6Ux3dFJbXTesU4k9Vi8wU55N0euVAojTBTdFd73VXY | |
| 122 | −4pZfzojXi4dds00X4aR5ZoHEuxMWJPL+NOpZaT8WuWijY6v0WUkTDVbihpolOsWlB1oRzcweGQ8W | |
| 123 | −GWm0EUeHv171R4GCHNIoUz8l9mi11x7NCZmlBjCwXuQDzOqpiSyXbvXko88+wZyYWD/+4Ow5apep | |
| 124 | −NhCAUd11MuO02YY8csknp7xyyy/HPPNYSeilc897mRgmCT73PEHNT0c9ddVXZ71111+HPXbZZ6e9 | |
| 125 | −dttvxz133XeHXB7ffwc+eOGHJ754449HPnnlC08OCeWfhz566acXnnnkoKE+e+23n7460L4HP/zA | |
| 126 | −ViaObvHPR38x8oc7OX333y/M+1G4p7/++ltdXziIbrW/f/+hx59zNPI/AhaweHLxXpz+lKOU5TBw | |
| 127 | −gY8jjlSaI0HpmKWBEByOA5OjQeRQcDkehI4FH5i/4HDwOCY0DgiTo0LnmEUQC4BhDGU4QxrW0IY3 | |
| 128 | −xGEOdbhDGNYgRSQEjlJQkQsiFtGIR0RiEpW4RCY20YlPJCIqfihA+MgDBjzEYha1uMUdCkJX33qO | |
| 129 | −WRZADjKW0YxnRGMa1bhGNrbRjW8kYwum2Byl5CIWd8RjHvW4Rz720Y9/BGQgBXnHXMyRORKUxyrg | |
| 130 | −uEhGNtKRb1zAFxM4kDE+0pKXxCQb5XglIP6mjoMEZShFOUpBFpKTVDyRIjO5SlZaMpIZAWMLHVPJ | |
| 131 | −VtbSlpo05AUzY0dS9tKXv/yjKd/+00nfIFKVt0RmMsnxSliwsDlmMUEapDlNalbTmtfEZja1uU1u | |
| 132 | −dlOalMjlCAeihjaU05znRGc61blOdrbTne+EZznVEM4VwkcA7/BmPvW5T3520wSSpI5ZQLEKghbU | |
| 133 | −oAdFaEIVulCGNtShDyWoEeiJHKVEIBQXxWhGNbpRjnbUox8FaUhFetEITPQ4EhSABSC6Upa21KUP | |
| 134 | −BQVApyNGZdbUlpscpnM+CUye9rSXwkRhcYxpU6KukpnOZA5Ni7rUR+I0qOWbCy99OlWqBtOkKazi | |
| 135 | −MZm6VUjKtIKz5GpY3ehUDOovqlVFa1rxCNSyBmeoYoVrGo8ay2c65haewGte9br+V7721a9/BWxg | |
| 136 | −BTtYvBbjqsVRChhesVjGNtaxj4VsZCU7WcpW1rKLBcNhIwgfBiSAsJ8FbWhFO9hbeDU6So1rauOo | |
| 137 | −2QyeVa2vnSpbidmbt6o2tXOdpEBoaVu4knW2vNkpbIX7S9mikkRa5W1YcRtQsCa3t6w16y6HO92f | |
| 138 | −QtetWXUuXJc70+Zml6u+1alrqTveQRZ3gtj1Lle3+9WBzGC074VvfAObAOsGcS4iAER+9btf/vbX | |
| 139 | −v/8FcIAFPGAC51cE9f2NBPkgXwY3OL4zMG0Iu5vepYKXjuIlb4b9aN5DopfCS13vaSf8YZtamDnB | |
| 140 | −1XCK9cjhD3qYxDYNsYQp+eL+oppYlwORqop1HAsWK6e2NFZmjMM4YiDf0sbiFEiOd5ziHtczlUWu | |
| 141 | −qZBlORBeiMPKV8ZylrW8ZS532ctfBnOYrfwJBPtGKSqYRJrVvGY2t9nNb4ZznOU8ZzqnWQVlpi1n | |
| 142 | −VyBmPvfZz38OMy8iPOQZQzmZR94ghpes4SZ30MWGrqWU61poSN8Uz8BV9KLJ2+iTPrrSRh30lHX7 | |
| 143 | −aUuf8sLS1TSTL72bH5M6k5JOqmOqDGha19rWXiazqU88lz/8wte/BnawhT1sYhfb2MdGdrJ9/YdV | |
| 144 | −60aCDNjzraU9bVoLGpa5hcVuXY1JRFM006meLqex+uRtg/razKV0uS/Z7RP+fhvcwhW3UD2t7kbC | |
| 145 | −ejmopXdTm50bFL873PvGTavzzUh7KwffA2cku43Tb3/DG+C3ETjCu3pu7rbXwRfHuGDpq+sbCyQe | |
| 146 | −lwV5yEU+csvG4+G2UXDGVb5yvUKY4uwdtcQbqXDEurvhaY33Zskt80UWPDkH53kbaQ5VVN98uDln | |
| 147 | −37yDrkafIwfoS1fj0FtbdKPDFunCiTjU0dj04zxd62eUenRxXPWjn7w2Wf96GbluHLNswhZvh3vc | |
| 148 | −5T53utfd7nfHe971/nbDchzJsFAFEAQ/eMIX3vCHR3ziFb94xjde8KowO22ejYe9V97yl8e83jcR | |
| 149 | −6knHPO1Rj/xsGE72ql7+/bo7//zWOR/rdKfejGEvoc1J31PTAwftn197cbyeetjbl+qzL33oZXP7 | |
| 150 | −tOeeOGJ8afKVv/yGStTvic6MNEY6fepX3/oilYbwY4NIlTLf+99PvvGHYxYxGND89tM+bJRyfvZz | |
| 151 | −L/2vkaDz2j9/6U0MqfdWIPTD+9vdPDXpz7k/g8s/b+M/3fA/sTsvAKQr1ju1/XPABDSumYKfCZzA | |
| 152 | −AuQ3CsRA97HAgMvADhSf6tCLEBTBEcyKhlEOaCDBFFRBtzDBDVrBF4TBr+CdGaTBGrTBG8TBHNTB | |
| 153 | −HeTBHvTBHwTCIBTCISTCIjTCI0TCJFTCJeSOPKGarHER81jAhWCXXxn+jL35Fr6ZkoRwEpuJGvMJ | |
| 154 | −CfNBl/tgEas4GAvhFHK5QryRGyZ0Q9OYlYG4kAxhGoPoEMAAEbt5Gag5w515gy08iJO5E2KZC0dB | |
| 155 | −kXD5D8DIGIBxEcDIPxNpqzeUxKfIlkackiqpw4LQEi7xEj3sQz6Em5hZiO9wQsNhGUaEGYuxin9B | |
| 156 | −xVRJFZ05nEmURc0YlLGBwkORgEwkCEYJGFiEG1DsRYZJiDx4klGwGULMDEMMFkuREydokw3Zk0oJ | |
| 157 | −naiJxFm0xp+IQ7UYCFvxFoXYFU/8xYTpw1M0CGOkkieJxZzpxVBsJseRBydBlr6QRljYE7AxxWvE | |
| 158 | −R6SoxG3JiArpxoP+KA9xQZNyYcRzQUV2vEeB+EOFdEeDMR+JoBsnNBtNYQ9PEQissUeDzMeNHIp9 | |
| 159 | −6Zd/+UeBIRj7SBhgPEhhPAhi/Jt0PEVlJIhRUBWnEBL2SJzA2EJI3ECO1EmOIBltbCbC8J1vURmG | |
| 160 | −gBqTPMS3eckhOccaQUaE7MVIsZGQ2AiUpEelpMac3MmspIikmUZGJBOnIcqSFMdQrBqAXMiBeANS | |
| 161 | −acp1fEqE+aKNMBWCwEhyrEattEuOcJuYYBrBmBvCAEdz8Uu9iZv5AMTwgMKwYcO6ackqJIhKqQ8T | |
| 162 | −MRBYwIZF1BopoUu/vMvM1MzN5MzO9Ewe5BzSAZ2bGB3RNJ3PRM3+1FTN1WTN1nTN14TN2JTN2aTN | |
| 163 | −2jwd0cTN3NTN3eTN3vTN3/zNNZgG4CTO4jTO4yROJVgDJUDO5nTO5wRO5WRO6KTO6qRO6bTO7NTO | |
| 164 | −4pyGNdjO7wRP3hwWbAjP8jRPAGAH81TP7awGAKiG9YTP6mzP94zP+mzO+bTP/DROdrAK/fTP38QG | |
| 165 | −ZRlApzMG53AEAHAEA0VQBU3Q5jCGKdS5RxnQrivQ5jjQBmWOC2VQ53hQBRyWCWW7Cs3QBbVQEh1R | |
| 166 | −DF2ODo3A9nCMEZCEF4XRGJXRGaXRGrXRG8XRHNVRGC0YABDRQwiGIBXSISXSIjXSI0XSJFXSJWVS | |
| 167 | −IR0IDRWIGDj+hSml0iq10ivF0izV0i3l0i710imNgSc1UWFYgjI10zNF0zRV0zVl0zZ10zeF0zIV | |
| 168 | −BjHF0B210zvF0zzdUWAYCBXVmiYF1EAV1EFt0kPwKrNghE5Q1EVl1EZ11EeF1EiV1Eml1EpVVHrI | |
| 169 | −DB9tPddbLYGAUlh4AiYQ1VEl1VI11VNF1VRV1VVl1VYV1Seg07EDPpyLVYGABEvF1VzV1V2t1Evo | |
| 170 | −U6VLvfVCVF4l1mI11knF1EcRUW3jVHLAqU8NVVeV1mml1mplVVj1VBNVsln1KWH61Fs91nAVV2L1 | |
| 171 | −VYHw00Rq1jMSVsdI1HF113dF1kxd1nR9vVoFVWvF13zV11X+xVZY+NRt5Vae8lYTBVd4NdiD7YRy | |
| 172 | −hYVzRa5mXdeBaFeEldhxTVYFmVd67VR/NdFo3deO9Vhr7dd/Ddjgy1YMLdiJRdliVViGxVgyeliB | |
| 173 | −sIMpkNmZpdmatdmbxdmc1dmd5dmenVk+UNaB8AM3INqiNdqjRdqkVdqlZdqmddqnJVovsFdv6Iaq | |
| 174 | −tdqrxdqs1dqt5dqu9dqvBduq9QZ7jYJmMNuzRdu0Vdu1Zdu2ddu3hdu4NdsosFcz8Nm7xdu81due | |
| 175 | −3YNfHQg+gNrAFdzBJVyo9YNDZdeUVVxirdj2uFiMfdaN/djJpdxrtVeAHVlfGliTXdzOzdWVBVbc | |
| 176 | −Q1yI9dz+0qXUxtVUz6PXyMVQjq3c14XdkNXWzI0tez1Z08VdRgVd1EvXl4WFiM3d4O0E1H3c1bVX | |
| 177 | −14Xd5P1Y2cVQzKXdUdrcgbhd4TXd3T2ull2m0RUI4KVe0yXeTeVU1h0I5FXe8s1X5pXV5wWm6LXV | |
| 178 | −7g1e612PhuVU3+WBAbDf+8Xf/NXf/eXf/vXf/wXgALZfZ2CAoBWIevCCBFbgBWbgBnbgB4bgCJbg | |
| 179 | −CabgBE4EezWHLtDgDebgDvbgDwbhEBbhESbhEtZgc7DXwHO8FWbhFnZhxoO8kh2IVhDgGrbhG8bh | |
| 180 | −AMYAvxUIBpiACgbiIBbiIabgetDe33Xf3P1e1U1X8RX+CPI13yieVvRNMvUVWNtNYtyFX3RtWd/l | |
| 181 | −3ixW3CXONux14nuV4jOmViqGBee14vLCYjD23C2WX9fzYjj2XDFm1vA9XjTmY1dVYzZu40BiX1iY | |
| 182 | −XjuWWDnGXt8tB3pg5EZ25EeG5EiW5Emm5Eq25Etm5FIQAAOGhWjqp08G5VDWJnCSYYHIhi9A5VRW | |
| 183 | −5VVm5VZ25VeG5ViW5VlG5WywV3KKp1zW5V3m5Xeap1KGhT7A5GEm5mI25ktOBh6GhXsS5WZ2ZlD+ | |
| 184 | −p5czi0qQgmq25mvG5mzW5m3m5m725m8G52qmhk222IEYKPBD53RuPnu9hipw53eG53iW53mm53q2 | |
| 185 | −53v+xud8dudrsFeLur5/BuiA/qiSAmYbCOeDRuiEVmhwzgRlTil1huiILqiYkubENeQwllfwdb0y | |
| 186 | −huI+9uhR/eNA1tw3vmiUReQuPuIvLmmDxWMy3uOPhulSDWmRJqVBLuSVfteTxtg6xmmJbemW5eiY | |
| 187 | −FupXvVyarmmS7mmD1Wl6pV8ycOqnhuqoluqppuqqtuqrxuqsdmozKOByFgi3y7ywFuuxvru+01gM | |
| 188 | −NYdvUOu1Zuu2duu3huu4luu5puu6VmsUBuZ1CIC95uu+9uu/BuzAFuzBJuzCNuy9Xgd7XQStZuzG | |
| 189 | −duzHzuodNlfOojyytuzLDuvNq2jSTeqD/WnIfen+oYbpmTbqULLpzj7Ype7dlEZtls5oJm7WoBbt | |
| 190 | −0S7q0jZtpG5tcVVth2Xt3HbXzzZeYO7o2Y5i0rbtUsJt3zbW3Z7f3lbucAXuJg5t4uZj4z5uQDrt | |
| 191 | −5w5X5qbjI86ESADv8Bbv8Sbv8jbv80bv9Fbv9Q5voPVqWHAvlpPvi9u4sx6IbwiD/Nbv/ebv/vbv | |
| 192 | −/wbwABfwASfw/P4Ge8WvAlPwBWfwBh+wAwPmC2DvCafwCrfw9e7byf7b+ebwBnO5n/xQztZuY43u | |
| 193 | −2J5u6j5j677uDUvuEddV7g5W53ZxXi1xPRZuFO9jFV9xPsruGedVGBfdzd5eH2fc1x5joD5xHDf+ | |
| 194 | −Xx3f8RVrcSKnVCAvPhmHckut8Y1OciVXXiZv8rV68iqPVCn/Ot89B0gw8zNH8zRX8zVn8zZ38zeH | |
| 195 | −8zg38z7oaselMmrD8zwHs1yzb4FIhzEA9EAX9EEn9EI39ENH9ERX9EUH9HSwVzSrs0iX9Emn9Dm7 | |
| 196 | −M2CGAjnX9E3n9E6P81ZQZmjT81En9SuzNhCXUBEH80q9ct7Lci2P3dru8j7q8VWPcmXm4p2mcluP | |
| 197 | −1Fb/PNmG9SWX9Vnfo1rn9TDH9TmOcSFH4mOPV07OYyy/8WAXdmAG5CY3dmd3VDHXOkU+5m8H93Cv | |
| 198 | −ZE3mZALQgXNH93RX93Vn93Z393eH93iX93P+NwB71QIuwPd81/d95/d+9/d/B/iAF/iBx3ctsFch | |
| 199 | −oIKEV/iFZ/iGd/iHh/iIl/iJp/iEFwJ7FWZx1/iN//Zk1nCBEAAamPeRJ/mSN3l5J4AjpuaFZvmW | |
| 200 | −d/luHmdOPmeJpnnwc74+h4V21ued5/me93l85mdg9meBJvqivz6CxnmDfvmlZ3qWb+iPX+buq/mp | |
| 201 | −Xz6KRnUFsWhth1RfTztgp/bk5fJZz3atX1RuhzqeJntH5fqv8/qvf92w7/KxT3uzXzq0T3tGXXut | |
| 202 | −a3u3p1y4x/Yv13q6Dzrf7YBLMPzDR/zEV/zFZ/zGd/zHh/zIP/yJSV1YsAcuwvzM1/wcggH+e6WF | |
| 203 | −JwD90Bf90Sf90jf900f91Ff91Qd9WrBXZYCi2Jf92af9J1IGe9UDydf93ef93o98ClBmMdj84Sd+ | |
| 204 | −zbeHI04qEV2OT11+E21+FFUOP+2wEG8h5VcO5r9+589+6E8O6W8x6n8m608O7B9/7S9/7kcO7/cx | |
| 205 | −ZbmKGHT/F+yP95f/EewBAOiB+cd/vaj/+8///n+L/QcIEgIHEixo8CDChAoXMmyoEBsAhxInUqxo | |
| 206 | −cWAvALA2wgLg8SPIkCJHkixp8iTKlCpXsmzp8iXMmDJn0qxp8ybOnDp38uzpUyfHoEKHEi1q9CjS | |
| 207 | −pEqXMm3q9CnUqFKnUq1q9SrWrFq3cu3+6vUr2LBix5Ita/Ys2rRq17Jt6/Yt3Lhy59Kta/cu3rx6 | |
| 208 | −9/Lt6/cv4MCCBxMubPgw4sSKFzNu7Pgx5MiSJ1OubPky5syaN3Pu7Pkz6NCiR5Mubfo06tSqV7Nu | |
| 209 | −7fo17NiyyyKRAKsXUtxGe/Ui4URMbjG6gw6/Pfs48uSbSeDGDc1Jr99Ciw9trpQ6x+LYlXPv7t3v | |
| 210 | −I9t5SMAab11CHljQqPfmDc34bWjYSMyH5lu6QNuw6NuHJcGJE7bhlgd02Gy03XcJKrigWtDcAMso | |
| 211 | −0CBhXXHjTScPLPKMAh+FsIjx4HO3AZedcU4gAQs2E8JiIhJvMPgijDGWZd0N71nn4Q3+5E1Hom4d | |
| 212 | −StAbCRqxF9989MlzI4IyKrkkk009MoqAvL3xY4ajnFgdhhqu6GGHYpBXG3w8wvdIiUi02CSaaapZ | |
| 213 | −FDQAXHmgcaNA15tQAvF2opwCGafbfen1CCdu/zlB3oDQPRjmmokquiijjTr6aFn2EfQepJVaeimm | |
| 214 | −mWq6KaedevopqKGKOiqppZp6KqqpqspWHhtu5ARH+iU51Bu83Vgrb8AVh2svb2bXC67A3aejrQFC | |
| 215 | −5QSlEpAJC5izTmergLfZSihxvA1KFK7S7QcgecIByxtzuIoHnRN+ugqhs0ORoJ+DscJ53bTw8Spc | |
| 216 | −tdHpGJS3uG407IHWjtgUEgZuNMr+iOkhitS8Pca7q62+clTrtfty65+UQH7bi2383nbuKOnWye6h | |
| 217 | −/r2blK0Y71kyosXey1G+vJVHrsHF/stUqxzBulHMTPEqL7SI8urwRhDrSGB06f34LXMXCzvxxhx1 | |
| 218 | −TJXAYrgqj0aI3qffjiQerN1GWhI13LobSUDtq1A9smyN+9640XPRzTwyoFmPDGV1G6kYtn/3ct31 | |
| 219 | −DSciccORAqPoMb6Hhtd11cXdACDWWmu999yNE8cR3mPD1+5TN4x4sxiJByUPuW+nDPfoVX5d9n76 | |
| 220 | −WQ432KoTKjg2hLNsuH7Mwb24sXLHPbnjdJ+eYd/MAn55yE1F7WrncIPudt2P667+m9dZwypP8H9j | |
| 221 | −yDrlrt8Gu+xFjZJe2H//6TTqz5MOOYLDcT3czU6FGDDOtheHnnrYDTmk45jzjgTZI0MeIUeg0bHv | |
| 222 | −ledpTknRit4jvpF5aSOCc9y7IBcm/cltfWwrHlMsVzN0wY0EwKEg9rbGu4NFMISlG10vCNiq7jnw | |
| 223 | −RMjykO3C1EAUNU9MI5wgBrUGQLZtSDcgXAoB8WbA4nhQPTncG/789zvc7FA950Lf5FKYnhVSpWYm | |
| 224 | −2g+9SKgiWvEmWrDY2QnTB8HmWEtyTEGWhVS0tqBY6FkuO1kXT0hCXL0BQ1B0HHt6ITUIHekp60LC | |
| 225 | −zTw4vqD8sGS6Cpqt5ChG7Nn+ChuiUwr8SJCeR+RhkGxcGSLppLA43lEoEMOGjUbYyT3tcRR9dMof | |
| 226 | −b9Y3S16wOomEoyZvuMj78caRULHiiSjJyvhx0WS6mVcYsRUdUCZxlM0p5SmnAsoHyYNsxeEfCYBW | |
| 227 | −uiSGaZEorMrZCAaLtK0RR5g8nwjzd0S7wcqYTqOUE3EDq3I+5UPKypAzg4KEUViphiUcYwBzqEQb | |
| 228 | −TkVzsPobh4SioW9O03yke9eHgonHKG6JnU5xJ5lIYEe4zbOeutuTQY1YFN00UYAkfMoyhRfQz42C | |
| 229 | −oEjM6HZ086GOPlGUDF3nR51CT9scrVaI0txueEdN6J1LbpXrn1QcdDNbTan+OBqSpgh36jQzqi91 | |
| 230 | −YtPbCKnnN8DhhgQljSlSnJC2mq5tQui8qCX/Z8aR/RSrGaQnl76Vxafm1Hmy7FpPtQbQspqwrFW9 | |
| 231 | −KgtflbakvaF/Xt3ojpQ6sLHCR6rCmyhVZprWWq01b229Jz5N1zzrVW94ddXeXYEalc75apO9eAQY | |
| 232 | −DQrMnf0MsJRjWl6JkqPATktO4LInLAkFLZUJM47bipgJX1Y047QplE95RPvexSv6vPKGPMtVyZJm | |
| 233 | −r8fellhWeYPBIjit2L3WoMn9oq3EUNpe6lFiuJWjxpwDAN86BbhZ45UEqGs/1iYyubQ1rW7LddB2 | |
| 234 | −ukmn0FLvN/eGXuy6bLv+nsxufKMLXtSqZ7xmXRWCE5ymsQ2EsE5pJkHsIqmBfDUqExZIhQnD4PxY | |
| 235 | −ZcN4o8uFSZDhp4R4xIIpyPWogmK7QHggVmmxnhQs4xnTuMY2vjGOc6zjHfO4xz7+MZCDLOQhE7nI | |
| 236 | −Rj4yp6YUFAm4iCP8Q5xURIIbqm1Eyhmq2udAgg0BD4XKVGscAORBNZGQx8pj/oh8O5JiTzbZyaN4 | |
| 237 | −AwD6eqWRVBkkafvdRm7Q0zbN7F5hjsqZP3LlOoekymu+8ke2fBQqd8SoGhkJbujcES0bjNFDuQEA | |
| 238 | −3nYkj+AU0SDJEqWNEiSRiDnUSMYLCYqn56AECcpC+RCnkarmLlftzwL+xTJHLM1kLmf5ym94k60N | |
| 239 | −HZRg5xrXJPj1rIeSB49EF5BpE4NWhT0UW88T2a9eWR7aDItHPLDV0nYznLVFFEsX+9vDPrSuoWsU | |
| 240 | −RntkWYPmCLGJDe8UH/tE5HayR1bWOTLxD9n3drV/1L1oXFs6SLI+tVs4azcARDfbVfs3NqwEyCTJ | |
| 241 | −+90V/ze56bNujVCNTuaO96HfPe9kC0XPq97XAzv3noqT/DbffMShBb6ie8kDziMPipze82akYrzW | |
| 242 | −IW+5yPfzwFtXGVhXIjfIiZL0f28bG9wmzsqMxfSMD53Wvb45wuuCDf1kO4BbfziuD3T0sJ/b6kAP | |
| 243 | −OsALbGIvZzrTH1/+88XDbuCKI4HhTLaZu7t2IpYTO72whZCr6j6igD0Cy/KWKNaJrni+oxvXvS0K | |
| 244 | −u0F3KKTD/efxBg7TB8Xnhc9MDO+ZuuMNvPGrV9nEWXdLqgemN5iD/SgaL0rczZ322bN80FSOYdIT | |
| 245 | −n3YSLKvid6+7wWrPeNLzUNlN/g/lJGr4nyNu7WSPvNIbL5TaR75z6aF82adN76mRffMRYzraac/8 | |
| 246 | −tBecoKd/i8LfMKLUMxr8/R6/SFxN5vDfm/oc10jAbJN7Qn+EPIGOs35U3Gpt06EIX0joBrHdGyVh | |
| 247 | −S3rcwLKAjsjVHpPl3a19msUdoOzVH/NBX71hH7xh4KSBhI78m3n+bVuTgd//tV72QR7BiYSDnR9b | |
| 248 | −BEgeCEzN2ZsKCgVo9YLpnR30KR7xPd643V/X/Nr+8SCujYLAyFvdhYQLUaAEYMjwxcrQ6dN+WImB | |
| 249 | −tQio6V6GYAM2jB/9+Vz0+aDasaC0OYEp4VoRYp0EGNi/OUFIpMfm5ZptgB4hiR4ZlpvdvBkM0sUj | |
| 250 | −6JmOjNqn/ZuRJEXsGaHZodzoWVqOFGEhyt+h+d3CZcwDAd/ZtZzH2Q0VahfyeVr/AV3NUWAQml0U | |
| 251 | −4iEi3qGtdY63vV0Yjty9AeGKuMolbpP/kV3Qvd7okWL47WFbtIktKd69CZ5SFGIjkuKuJSKWtQgj | |
| 252 | −hhy59WB2rMz+DTyIs73Hc9xMFFabr0iAg3EhKFqavDkBKIbi4lme9ImNzIkivXnEClbi0oWdbwQF | |
| 253 | −aCHOI+TSG3weLaYbr4mhpc0TFeriWjhB1b3b//VCChqFMMZfQHKiohmjOzKiQYZeeogEA7hdrNRX | |
| 254 | −tcWZRY0EFNpZhQVPUQRJhnFjoZHaHV4dRoagoAVaQprimrlhOpYksc0HJ0aE09VhpbkhAHRaCs5i | |
| 255 | −ot0jPoYER/IjUAalUA4lURYlYCiXIYXF0ZSMyXTHUpbMC16FtzCl+SHGU/aMUWalVm4lV3alV34l | |
| 256 | −WIalWI4lWZalWZ4lWqalcvwEW/qEF2JGCralXNLEW14GIM7+JV7ORGoAAJBchF/+JWA2xCjUnmZQ | |
| 257 | −TUkFJmImJmIOZl1aRpAoJmRGZkVkxF5WZWZQTWNWBmaKxmaGRiqCxmeWRkRwJmFeZmnC5WnaJS1y | |
| 258 | −RmiSxmiGRmeCRmx+xmx6Rmt2xm2KxmvCQgcwgm/+JnAGp3AOJ3EWp3EeJ3Imp29SQLFlJmXE5g/s | |
| 259 | −gnROJ3VWp3VeJ3Zmp3ZuJ3d2p3T+QHOKRiqKgXKWp3meJ3oqZwdQzmqGxm5eQifEp3zOJ33Wp33e | |
| 260 | −J37mp37uJ3/GJySEJ2wG2xMwAYEWqIEeKIImqIIuKIM2qIM+KIE+AYCCJpbJAz30J4ZmqIZuKH9e | |
| 261 | −AntWJkf+wCeHjiiJlmh+/ifiOOdkxOaAQqiLviiMxqiDSmiKimeFXqiJ5qiOjqiH7kt7gsZ77qiQ | |
| 262 | −Dul+ouiVqahksKiMLimTNmmD0uiR2miu4SiRVqmVdkKP7sePfkaQXqmXCqmR1mZnKKmTlqmZLimU | |
| 263 | −iilr3uiXtmmOZmluuue9WMMg1Kmd3ime5qme7imf9qmf/img1qkCTChtBpsPvACiJqqiLiqjNqqj | |
| 264 | −PiqkRqqkTiqi+gCh2iaWMYACBCqndqqnfiqgWsOHosZuLgA5nCqqpqqqriqrtqqrviqsxqqsnmoL | |
| 265 | −XOqYBlsuxIKu7iqv9qqv/iqwBquwDiuxFquu5oKtrmn+rq3CrDarsz4rtMrqAozqaZRqtF4rtmYr | |
| 266 | −rNZqjQZoiuWqsYaruI4ruRIrsnYrhS6rtq4ru2LrtPooiG6EqbYrvdbrtibrZsQmuJYrv/arvwbr | |
| 267 | −uUapZ1Yos9qrwR7sqb6rlsYrLPjCKjwsxEasxE4sxVasxV4sxmasxj6sEeBrYQYbKYSCyI4syZas | |
| 268 | −yZ4syqasyq4sy7asyJKCx2ZGKgqABWyszd4szuasxvoCtZrGbiKCFASt0A4t0Rat0R4t0iat0i4t | |
| 269 | −0watDcQsaqZYNnwB1Vat1V4t1mat1m4t13at134t1WYD1KomRwgANTQt2qat2q4t0yJCz4rmvYio | |
| 270 | −m87+7YaGaWpaBpmeqd7uLYOm6d1WRipaKN0ObobC6ZZ6RpcSruKe6NjirYDyLeRGboH6LZJGRuBS | |
| 271 | −6eJmLn0aLsPKreZ+bifYbeVCRt5KrumaKeVKaddgLuhmLueS6r3IAgLMLu3Wru3eLu7mru7uLu/2 | |
| 272 | −ru/O7gQ0rmYGWx0EgfEeL/Imr/IuL/M2r/M+L/RGr/HWgfBSRioywO9mr/ZuL/f+riy8rWvey7wi | |
| 273 | −LPm2K7cKrGzi6r+uL/v2a8Cq6XIQbPnO77oqbJwCqfjSr/5e6/nC78d+a/sGsACba/VORuAW7P4m | |
| 274 | −8Kza7+F2hrUqMATfK7oWKgAPsAVf8LEWsGQccAT+d3CrMjDDjq8HjzA59O/fPqf6YrAKB/D7nrAB | |
| 275 | −yy8JkzAIwy5HyG733jAO5/DuBu8Ee0ZsFq/0BrEQDzERQy/19jBuZqoOLzET5/D3wisNb4Tntu7i | |
| 276 | −ii5ppliLnq4WN2nqDuyUUvHnvm61xi0Ya64VeytHZPEWrzGMdnG6rm4Zuy74jkbixvHgnnH6YjEb | |
| 277 | −7/GLuvFnXK4dK64Y++y9AC3bHjIiJ3LSPi0Sc0ZsTi3YRrIkTzIle63YNnL8lu3ZKjInd/Ihuy0U | |
| 278 | −jzFHOKzOlrIpn/LFdiwm/y9HhKzLvjIsx7IssyzMrrLMYhnNorIu77Ip82woEzJHiHAMR7AJj+7+ | |
| 279 | −Y+jrCifz+rawMTsGBw+zB8+wKMsrNHtwMV8xR+yrMm/zuDKz6mYIAlezAkszMFOzOEPwNaPxRmgz | |
| 280 | −N7czAdsyZjzzOScwOcMtR0QDJ+SzPu8zP/ezP/8zQAe0QA80QedzImhwZMTmoVIqQze0Qz+0pFoq | |
| 281 | −PJPtRjAALxQ0Rme0Rm80QUfDHOsmGQfyHSM06T4uH5/0k5L0YwCySNPtINuzFLc03eIxBacxSt+0 | |
| 282 | −gvoxpn6xTLvpS4dviPa0m9K0D5s0Th91hKq0M7OpUH/pT9NxSDf1lRL1reoxUiO1TicxT0u1lT41 | |
| 283 | −SHOEOmCBWI81WZe1WZ81Wqe1Wq81W7e1WO/+gFI3xg/PAl3XtV3fNV7ntV7vNV/3tV//NV0fMfr+ | |
| 284 | −MZbxgVsfNmIntmK7tTp8tJwG8zwrcDrncTa7s2W/82DvdNeEc2TPbz0DtTl3Nv1Odk2v82WfNrB6 | |
| 285 | −sxdvtmjr72dDNWS39vySdlFXMGrfdgZPtGPCsGyT72t/dWj39sHSdlVXNm7jtmq/MTgLt287Nv5y | |
| 286 | −hDXkgHRPN3VXt3VfN3Znt3ZvN3d3t3RjQlwzRmzqQgOUt3mfN3qnt3qvN3u3t3u/N3yXty6E92Jc | |
| 287 | −r3ffN37nt357t6j+MkzDwhRzNZjSt2KU7lWjdFYrKxwLeJV69WPHNIMTKVU7slEfOIITeGL+sHSE | |
| 288 | −C6mDPzeEb/iOTni+VriF83GCZ/KCg7iOdjiXFrInvziMLy0jZ3ZxbwQkVzKO57iOb+0l07iCw4LZ | |
| 289 | −xriQD7nQgvLCRjEsgAIvLzmTZ6wq+/iIp1gEzDKVV7mVr2wEYDhizGzNNrmXf/nDgoJzt3hsM7fB | |
| 290 | −EjeF2/Zxn3ZyE7a6mrnB/vaDw4Iwwzm7onmUG/eas7mWH4Y823m7yrmH0zmg1yues7Jp7zmf6zbg | |
| 291 | −8nah1++YI+694DNHV7qlX3pAHzSjo3CKLTREfzqoh/qjSjSUa8b1XjSmp7qqV7pH+zdoA7iKh3if | |
| 292 | −G4aBlzgbn7ipM3WsmyiLS3pQ77qJijj+osOCGtv6rc96YWg4sPNopDtwVC87hwq7aVq1se8xrt/y | |
| 293 | −VkP7hva6s/+6ttctshNGrVf76V57POv6txdus3PGbqJDCLw7vMe7vM87vde7vd87vue7vr87M4T7 | |
| 294 | −YMSmOyyDwA88wRe8wR88wie8wi88wze8wLuDv59YYe87xVe8xV/8vqPDum/GAz/6uh76tOu5ortz | |
| 295 | −m2v2cns8pLs6bAc3yvNvxAcGMo+8ZZe8VrN2y2eroJM5y9/8s4J81Iq8zG8zzf+4PHA2zztrzvv6 | |
| 296 | −zh/9rPr8ZcR80HPz0KP4yTP9syZ9t2/EIHwA13e913892Ie92I892Ze92Z8914P3pq/+aLDJgNu/ | |
| 297 | −PdzHvdzPPd3Xvd3fPd7nPdy//FFmKtr/PeAHvuCj/SBsvGbUcbr3p7T//EYUO7mXO9//hbInfoca | |
| 298 | −fmYgPuXr5+I/PYk/vumaO0VnCOtmfn5yO7s/O+kz7tonaed7fuSC/m5ne+rjp+lz/L2cAQvkvu7v | |
| 299 | −Pu/3vu//PvAHv/APP/HnPgpEvl8APDIsP/M3v/M/P/RHv/RPP/VXv/UvP8SvvuXisjYUv/d/P/iH | |
| 300 | −P/GfgeVjxm4qOZin/5I/uf+G/EZM+ZXHv/xTeZZrP2Rwufrnvy6LucoDN6FbPUCQEziQYEGBLWAl | |
| 301 | −lAdAXkKHDyFGlDiRYkWLFzFaXNj+MGGuWB9BhhQ5kmRJkydRplT5MZfDjRlhxpQ5k2ZCEgBcrjK4 | |
| 302 | −k2dPnz+BBhU6cIHDmzWRJlWaFAAJhwuGRpU6lSpPhAoZLtW6devLjivBhhU7VmVLrBy5plUL86hC | |
| 303 | −nVXhxpVrsKhNnGvx5s3Y9Olcv3+nXoXlVW/hvIQ9klW8mPFJs4OzGpastu3gt4AxZ95ZF1blyZ/X | |
| 304 | −8k2ILkRp06dRp1a9mnVr169hl2bmMjJo2zUJu1u2m3dv37+BBxc+nHhx47vd0UZ7mznbu7D4xJY+ | |
| 305 | −nXr12OiMPm++faZoWJc6hRc/nnx58+fRp1e/nn14SMq5x69I+AkT+/fx59e/n3/+f///AQzQvifg | |
| 306 | −k89AiCqTh572GGzQwQfZuyS7AymkyDvwIMxQww3Te++sCimkT8ARSSzRxAAJ/BBEAxNckMMXYcxQ | |
| 307 | −QrtWrBGWC2PMUcf1PIRsORuZE/HEIYks0r8UfQSSuxZ3bNJJ8WbsTDsl5cPxyStz7JEwKm0T0sgv | |
| 308 | −wTwRyS25/IxJLNHkMErPytzOO3Wsi1POOV1LpMA2PyNMl+P47NPPP43T5U48JauMAWboTFRROdWZ | |
| 309 | −kFA3nUoIKs0opVQwMh89rLbEGuvUU7IewzTTtRK8rNJT/eKMzVEn825SVGGN69LaWMULsU9xzTWl | |
| 310 | −UGmtlbLn5DE11mGjUnVKXwv+c5XYZaOa9Udku9pU12mpBYnXZ6FdqlRmuQXK2Gwlc3WVcckt19xz | |
| 311 | −0U1X3XXZbdfdcY0YFNylCJMmlHvxzVffffnt199/AQ5Y4HulkXfepBK04N2FGW7YYXe/PTgv78SQ | |
| 312 | −x+KLMc5Y44057tjjj0EO+WKDJaaJMJFRTlnllVEmuWSZKkOC5ZlprhlkMRx9OS3vdDa5155jEhVo | |
| 313 | −jIQe2qJVjcYI6aRl4pnpi4p+OqKopX6I6qppxPqipbWuyOmuIboaa7GrJltqrsGWMm2YAGjb7bfh | |
| 314 | −jlvuuemu2+678c4b27UXytvvvwEPXHC49077psERT1zxwNfOiITHIY9c8sn+Ka/c8ssxz1zzzaFp | |
| 315 | −PCJoNg9d9NFJL33yzj232vTVWW+99NRhj1322Wmv3fbbcc9d9915793334EPXvjhiS/e+OORT175 | |
| 316 | −5Zlv3vnnoY9e+umpr97667HvXQwAUE9olBseygP1hZCK26ms+n7bKfIhgvuG7iVCHwAJHmLocMLT | |
| 317 | −d7uh/AHoBecbsbU98D0ECaN4AwCwEakbwa0XCXEf/ML2QP61TYFGgeDUjkUR8rEvWrB4X/ZAmDQn | |
| 318 | −POIhb6BfQrbHEQ46JA9OaNsokGChZ8lPIit0IEcK+IYYTkR+OnRIbVZoQ6w4BAk3aCAAJXK4HcIC | |
| 319 | −CU4YRefk8QYSIjEikcn+4RIj6BBoOOGIN5zIFi8COpiQT4xc2WAXQ5jGkj3CCSwEwBJ7ERkbQkOK | |
| 320 | −sNgiGts3w/1lUIi06kUF8wiZP/4QLUHko3bY9zNYmNCERkGjBLDhxSouZ5A11E4etKPIzgCSXhns | |
| 321 | −ZEKw8T81jhJc0OCeTQbYmUfIcUpi6KIQCTlJyFhSlg6BpAwhs73/ARGRh7RaJKkYvjd+zyEjJCBH | |
| 322 | −FEmrW9KShWjUJDYaIobHUZAEB1zfXaqJwP9lExv02+BdHoENBOahgf4TZzcTkodz5gGFccTGKO4y | |
| 323 | −Ck6Skp6jMiYssMFOWIghkqysCAmAGT89zhKDtRwiD/fYmSPy0mq+TEj+AZH5LGJicoeaTOZyYElQ | |
| 324 | −O5IAi4pEwikXMgpYYPIGSMCkxXCSQlg8ooHywEbnjvLNlb50pW27US86Z8DBvGGPnXNCSbcITjzW | |
| 325 | −k6iEYuM+31DMhvhTIjkUZRXfttA9Ek6jsaQNLsmHBHQylDZww8rbQinJEuqzjsFsH9wiRauMTvCE | |
| 326 | −Ym3oQanIEPJt7xFYnJBM0ZkQF97ohOSTp0NuQILtoU4Cd8loURELpI+CTqSdGSBTEfSGJ3ptoLDs | |
| 327 | −43KWKVCCRvGjhewlM5l4g8b2CpNvayMs7mlBs1o1IZnN4kN1ytq3ajQycr0LOQHgBHaK4QZv6EUc | |
| 328 | −Z0m+2sCTiuSLo/r+OMi+wyaWuSC6QTj1edy3VTUhN3DCUxEqS8sey4/z9CIHA8tVuM7WJlKFyCga | |
| 329 | −O9JTAlSYMbzoQypZ0KvKdr4crC1KIYJJMbwhUjIlX15hAVx//vUhpiSsYT3ZXAUfCJJJraUN8+DD | |
| 330 | −i/yMhvKtHw4NaNcLaxQJB/QseUFMAvMS8Q36TEgdtfpBeTghrdiyYoYnwsECpnK1P8SZfSNKvnBC | |
| 331 | −kXt1hEYcZYYT8gG0c6vEiT+juD+eBhioe13pUBccZfl8NL0bhoz67uc2XAZygi1F6wLd9kGsameV | |
| 332 | −H+6q+qoaxc7FTQIOdsgoTptDBCpQbg58m5gteeeO7k23tM0xTgr+2DZ0QnLOb+CpkLEpThYfWYV3 | |
| 333 | −IXRekRBHEx5xFFOU8qUxbbRHeJcrYuhem5fyhgtmmtSlRlYTDUNkO7JYKRKosqlhjaffznrWkxEx | |
| 334 | −rX+L3ZfhutZJecSouYKEbPJXwzArdqyRnWxlL5vZzXb2s6EdbWlPm9rVtva1sZ1tbfOa29329rfB | |
| 335 | −HW5xj5vcbYWdK8mdbnWvm93s1nXj0N1uec+b3urWHQLrnW997/trjVsIF/cdcIGn24WFA9u/B55w | |
| 336 | −hXdbnPfmdNr6zTdNps1sT6s409AGu4ivbeMHn7jHDd61iyct46nrONhOrrWRG23lQ2s50EruOe+M | |
| 337 | −QBI1t/nNcZ7+c53vnOc99/nPgW7z7qV8bLWJwSmQnnSlL53pTXf606EedalPHekxcBnFaxN0rW+d | |
| 338 | −610POjBydjvvMCJNZc8QPdBC9LLVpj5hcvvb/zOmj4u8NpAw+90btKYEx27sePf7etD+w4fTHS1t | |
| 339 | −h/vhEc8EuYdc5XX/++PPo3eHO4TskLe8eALvwME3vvCJ9/zbFz87wtj98peXfO76XnrLZ/5Gmy96 | |
| 340 | −5z8feyOFXnajV73lT48774jCBb33/e+BH3zhD5/4xTf+8ZHvez4IXvS1oQMHoB996U+f+tW3/vWx | |
| 341 | −n33tbx/6dLg6yB0ChuSPn/zlNz/yTRF223knBdVyf65CkXb+168dLa/q1v0LwpmX94wwk3j//zvl | |
| 342 | −MWKucdgPAA1QMeKP+WqvNuwP/xxQ/+aO8xzC/w6wAsFCAPdO4xSo/SywA1EiATWv+erPAUlQICCQ | |
| 343 | −8V5vAj1wBUsCAycvITiQBWXwI0Cw9USwL0rwAb+P8FRwBmfQBVFPgUShFoiwCI3wCJEwCZVwCZmw | |
| 344 | −CZ3wCYuQARQwdgijAjThCrEwC7VwC7mwC73wC8EwDMXwCitgByUwIbIACtVwDdmwDZ+wANSvdlLv | |
| 345 | −9v6O9dROarxE9vSwRGiPCh2PDv8u98ROgSoPEPHODucPD9luDxmRRPoQdmzPEPFOENePECXxEOXv | |
| 346 | −BhPC8Br+sRP74xFTJxIvsewoUQ4VqBKkIBVVcRVZsRVd8RVhMRZlcRZpMRWpQQCmEBJrIxu+oBd9 | |
| 347 | −8ReBMRiFcRiJsRiN8RiRsRezwQxTMCFsoBahMRqlcRppMRPikHa8QxkGZhu5sRu9UWBAABdDcAHR | |
| 348 | −whAe5hzRMR3ZxRCYkf4cYgO+MR7lcR4BJgKucXYK0AdlsAbv0OIYMAd1UEX8EC0oUB9XEAh1bwMN | |
| 349 | −kgX5MRH9cQQB8v5OUBNhoSAX0gIRchAdIgYvsgIbkiIbMCKJZSLJsQc7sgIzshIdAhWGoCVd8iVh | |
| 350 | −MiZlciZpsiZt8iZxsiVfQQrHcSAdogxSISiFciiJsij+jfIokTIplXIpmTIoy6AdFREtjiEnqbIq | |
| 351 | −rfIqcXId7lF25nAU0QQRKZITPXEs8QMUPUcUvRJLShEbLTEtvzITS3ITyXIuyxIqH9IhSM8tr2Qt | |
| 352 | −8bEt9fJJwDIuYUEs6dITzdLf/vAvnYQvudIvFXNHAtMn5bIw5/IwJQ4t8vIxdYQx+U4Ix+EzQTM0 | |
| 353 | −RXM0SbM0TfM0UTM1VRM0l68ndREt6KAGZHM2abM2bfM2cTM3dXM3ebM3ZdP7BPI1w281ibM4jfM4 | |
| 354 | −VTP9siYhN/IkLfAjBTMkRTJWSFIyK9I5UXIrO7M5sdMAodM6pXM6UaU6hTMhLLI73S8lTZE70fP9 | |
| 355 | −vrP+PGEhPMWzUsgzFGvjPNtzWtSTLdkzP6nlPe0TIudzWOrzLO/TP9NTOzXQIY6gBBz0QSE0QiV0 | |
| 356 | −Qim0Qi30QjE0Qx+UJ21QMBXhAUA0REV0REm0RE30RFE0RVV0RUFUEeySaQijCDR0Rmm0Rm00Q+Fw | |
| 357 | −OTUyIQpRM3MkMuGTMCmTES0T6zDTR3eEMxeUR5FUR4A0QB1CSIdUD4sU/BIiM5tUTRTU5BwzSzfk | |
| 358 | −SQ0U9qa0E6uUB6/US2FESbnUIRrBEtz0TeE0TuV0Tum0Tu30TvE0T930BMSxQ60zDlghUAV1UAm1 | |
| 359 | −UA31UBE1URV1URk1UOPgRZOGME5ATym1Ui31UvP+lAi2VOYUSBvp8VNBNR7DMRehNCHMUR1RNVXP | |
| 360 | −kR2Ds1RhAR5DNVZltR43lQAVEkH/Ey7Bc0BHElJZ7kBxVT9rleNuNVjhT1fhUz55FTMKFDEJ0lh1 | |
| 361 | −ZT/7sj+htVMANExxcFnH01ddDlir1VOktTFXkhvItVzN9VzRNV3VdV3ZtV3d9V3JdRw4tB9htDbK | |
| 362 | −IAPwNV/1dV/5tV/99V8BNmAFdmDx9SlbFVsT4hjgdWEZtmEd9l3/YFghrkvRFELA1FmjdEwNk1uB | |
| 363 | −Bi0rFkLUlFMp72O/FFldVUo11vPK9AxhAUtJNu8kFuUo9mXb42IvM2NTlkg5lv8Sk2ZhVkdVkkn+ | |
| 364 | −fdZBbNZIcTZnqXRndcZjh3Y9QtZWx/VhpXZqqZZd5ZVUERYW7pVgubZrvfZrBdZgk0QwFbZqzfZs | |
| 365 | −pTZigXY9YfBbP+VaMVZStBVWmvVmzdNtwTVmuyYf8ZYx4NZu43Nut/Vg4/Y6+5YxwnU72/ZwF+Nv | |
| 366 | −jVZuBZc+lfZl+o9xFyNxlxQWPHVWObdzQ2FUXdNVT1VVSbd014VVx9Y6YdVzWTdU7XFt+TMh2hRT | |
| 367 | −abd2bddO+RRrCxdQG7V3ffd3gXdRH5VwAXdSb/d4kZd2NRV2p1Vom7ZmTTZrURZp4W5lm7Fln5dB | |
| 368 | −npZYRzZ72aNorXQwqTdpifdxsdd7nVZvtab+K9H3PMDXTMV3fGPPet3xTNs3PbZ3Yh1iCN2wf/33 | |
| 369 | −f5twXh2yXtHCCsfwgBE4gRU4DMuwfMM3DQE4giW4f3NUbYKQWi0XLBw3fJU1cuOibs0XPzO4LNQX | |
| 370 | −a/h2hDU4egu3gz24KkA4fEUYhR2jhKvmhGU4JTYYflm4hafiheE3hm+YJDB3TRc3iHFYhQF3h3m4 | |
| 371 | −WCa3ZCrXiHeFhqVm95Cziq34ilOzNf0UPmPTN734i8E4jHkTOFMXPsEAi9E4ja1YOS2YOZ33fs3j | |
| 372 | −fVl2euUXTOg3KvESjtEjf2W2e/W4POT4eum4jmeviSWGaf+4E/h4b2f2jwO5fuOXkBHvju/+0n4T | |
| 373 | −eTwWeX0bWY8fGY8nU5IPj5IJOI8vGZOl+Gm8gyWxcpVZuZVrcid1F3CBsilpuZZt+ZaXUmz3b2lr | |
| 374 | −Yypd+ZeBeZW1knnFtYih2CRymGWVeImFwodZFoiPmSVOmWlsOJpFIpmvd5mZ2VsM+WCe2JqFeJqT | |
| 375 | −pprBmQaR2Hy1eZt9wpmvF5qjeYhFNiE2t3XpWR5Bd4tF13T1eZ/JBXV3mXJrY3XreaC78XXbeEdh | |
| 376 | −ARWpcaEZuqFj8RZj2Xx5MRkpuqIt+qKPcRkdGH6f0aE9+qMX2hqJWXFhoUdLuZMrOZJBGfS6eV4Q | |
| 377 | −+Y8z2YQ3GY5RepQ/eaXdTpQjtWdLOab+a3im77emd1pMcTpMdPpXj7SUoUScjWb3JvipofoJBZgi | |
| 378 | −DXiBrfqqsdoLG7iMXRWCo/qrwboWKngAudeYyxkksBmS01mdeYKdIdmdjxmeodaszzoW0tqTA5et | |
| 379 | −5cKt8RquoViuyxoWOLKu7fqcOViv97qlweWbCTsWAFt/6fqs7zql1xqxCYKvU9qvjfix+zghliAF | |
| 380 | −QDu0RXu0Sbu0Tfu0UTu1VXu1Q1uU6HWoHcIeZHu2abu2bfu2cTu3dXu3ebu3aVuxs4UwlIG1ibu4 | |
| 381 | −jfu4V9sVmHpoXnucBxi2BRM+YYesIbuYrVO6XXW6M5CIrRu7s9a7G4e6Ue6PXKe8zdv+vJu7W+Xp | |
| 382 | −vNm7vUUHnlBw7dbbvem7vicHuFBvcfR7v/mbgpqvvwE8wAEnvhVRwA38wOdG2xR8wRm8wR38wSE8 | |
| 383 | −wiV8wim8wi38wjE8wzV8wzm8wz38w0E8xEV8xEm8xE38xFE8xVV8xVm8xV38xWE8sRrJltyMifpr | |
| 384 | −uy2EgQgqbrwMg9wmnypC2A5IsioqbrTIgObs2MAsqvgHz2L8yZmDBGhMtB6iLYSIt9qmpLZstn5G | |
| 385 | −iDiozUwsIuCsc6DBiNxKiySrc8TACU6LsuZr1aAMyuW8MLZnhz7KxCIMwSLinZCgieK8xhLpWbxc | |
| 386 | −O9gruxLClHBGkXqBxrTK0gy9qjD+ac4l/TPyKsK0qJv0HCJ6YYcOq8vvwtMtzI5OSSKI3CXc61k+ | |
| 387 | −CruOys3Hi5wm/dULQ8q9R4F64RGUa+8KXbNeC9Rfi75oPLcEy9cH3SLEC3SUHNaRHSnqfJG2CXxu | |
| 388 | −fSKEvHCMfMe/bNitLMZIwIVGS8etfcvZKtnBnSucQALUSSF86Nkj4hF8C9jOfMcF/VhWyMAwQr9q | |
| 389 | −LNUhIpyI3cyYKLbCvd+R4hFEK1KyrG3wC0GgacLevd27vTMCqor2rMaYzCF6waUGT7yoy98xPiNM | |
| 390 | −Kaxey4bsHeHli9fJC8wp4rc6p4BOS5HoaLJWScK8/TlmLONlPiacoOHri4EmaMv+56vO+MfLfjzM | |
| 391 | −I0LO0tzOqMqOkLx/AOzRm/zYZ77pdUcMHN3ppX7qqR7Cbw3X3k0tJIDbzE0puq3qwT7sxX7syb7s | |
| 392 | −zf7s0T7t1X7t2f7B7fvt4R5y2B1sQCfu7Z6+517k7n7v2fveEPzv/57A/RHwCV/ABR/jCj/x+/sF | |
| 393 | −rzu7Hd9zxBvxGR+8AZfyDQfHsSbyNZkiLT98tZt2NF+mHaJibKb0TZ9mgBtaTub0Wb/1Qyb1kSVm | |
| 394 | −XH/2aR9jRCn0f9ohLoEeeL/3ff/3gT/4hX/4ib/4jf/4eb8PYN9XCOMZquD5oT/6pX/6qb/6rf/6 | |
| 395 | −sT/7tf/5n2H5ayVBSgH5xX/+/Mm//I/fp6dYgTBEqTtBSyJQkIuapTdaa86E/dEfldWf/d3D+1kl | |
| 396 | −D+O/kAECFix5AOQJPIgwocKFDBs6fAgx4kMSAA7Ko9cpo8aNHDt6/AgypMiRJDNeOkhRosqVLFu6 | |
| 397 | −bAiAxMFLJWvavImTJCSLBV/6/AlUJUGDAp8wOYo0qdKlTJs6fQo1qtSjT3gSDYo1a9CUAi/m/Ao2 | |
| 398 | −rMiTArlqPYv2Z8yDBzy4fQs3rty5dOvavYs3r9tFVtP6/ctw6MFw4AobPow4seLFjBs7fgy5cLi+ | |
| 399 | −gCsDNstgmN7NnDt7znsAZUXLpEmvFUhTrOrVX3d27Vk6NlbBRafavo07t9T+qq+vyv7t0qxX1sSL | |
| 400 | −jxUNPDnW07BSG38OvZPrgbCVW4dIG5ZR3dy7e3/Km7rv6+QVCscYPT1xsrDMln/vkLlz9fTBTs8O | |
| 401 | −H3727d/7+9cdHn75lXdefQZ+xZ57Ay4Ii3wHPmjTfdUxeN1+/12IYVQBTkihcgVCCOJxZY3W4YDM | |
| 402 | −BfJZiiqueNcwlJWoXHbfhEFjjTbeiGOOOu7IY48+/kjjNy/CCJxZfLCIZJIrBoIckfA5GGKUHkk4 | |
| 403 | −npOlWZhhllpSNaSVpX0oZZgmNenldVCKGSaVZcqG5ZZu/rdhlWv+BSaaUSZI4pzAnWlniGrqaVmb | |
| 404 | −bw7aXZyAWlZnnxDieej+njIJNA89kk5KaaWWXopppppuymmnkvbRZaNnZZfNF6aeimqqqq7Kaquu | |
| 405 | −vgprrKZmE6qoWZklQCme7sprr752Og+ZtlrG3Dx3HItsssouy2yzzj4LbbTSHktMrcMClZ0WVWzL | |
| 406 | −bbfefgtuuOKOS2655m6rhbXX+oQrIdO+C2+88kob7IjrEvtoc4pG+ee9s1XHH6EC42aov1gluq+B | |
| 407 | −jBrsF58JG9gvwz4JOnDFGqorsUQIP6zewhlr5TDH6kX8MUsUW4wyUwWX3NLGIkPnMctAMXdAOzbf | |
| 408 | −jHPOOu/Mc88+/wx00DbPgbHMgVUHhxxKL810004/DXXUUk9NddVKw1H+tNHmkcgAFEJ/DXbYYgcd | |
| 409 | −mr1aq5XvfC+nR/LZDp2cctxc9ua2xiQOt3bHwta9Ush5G9c23wrBLXfKKwvOkMt/sxYz4hH5vThr | |
| 410 | −gTtOd22FX87E4ZQjpHjkYjW+OUxpew7d5JQTjvnAmofe3t3okV4c6KwrdKKStt+Ol4uVz747YZH9 | |
| 411 | −Dnzwwj822e68G4l78srDxaTZvDMEOez2Zc036qkTunronUuPk+zPCxQ99ziZ7rj117+Z/ebbi1+T | |
| 412 | −99+Hz35N5CNu/vlbpk/5+vGP5P7z8O8/kvkJrn72yxL+HKc/AIKkf7xjzjkGAMEISnCCFKygBS+I | |
| 413 | −wQxqcIMQbAX16pb+HXN0YYQkLKEJT4jCFKpwhSxsoQtHaI4Pug0zzuCgDW+Iwxxu8Bx7+95B/qdA | |
| 414 | −kAiwegArIMoOiLgEBrEjDJwdEJfYkSGCsIhGrBgSBadEKGqkiax7ohY1IkW3EbCKcJLh2bL4RS6G | |
| 415 | −rli/aqMb37gpUBlvdqSSlR3viMc8xopWc2QdrnQFx0AKso31ap0PF8IcREhhkYxspCMfCclISnKS | |
| 416 | −lKykJRdpAzNqLTvXOJcnPwnKUJrrGpo0Gq6occlUqnKVrLQkInp4SC9+UTqllNkYydifK/INjVpU | |
| 417 | −4+Zk+cUwnu2WuPSOLuvGSyj6knLA1KIwN0nFYqKvlixL5hKX6Tj+B2pgm9zspje/Cc5winOc5Cyn | |
| 418 | −ObfpwT6GLju6aIA73wnPeMpznvSspz3vic98ulMX1CwZDc8J0IAKdKDm5KHzDvnDfC2AHAxtqEMf | |
| 419 | −CtGISnSiFK2oRS/K0Bb082PZyUUsPgrSkIp0pCQtqUlPitKUqvSjudhoxoSzCozKdKY0relFFwBL | |
| 420 | −HzJnoTbtqU9/SlGNqnNzHV2pUY+K1KSqtKVDzd/dYgrUqEq1pzg9KEIbpNCpanWrFhWqeHxYVKWK | |
| 421 | −daxkPSlTv/o9mHJ1rWxtaFUNedWEHoSnba3rVL0qINaFtax87atSz5pX7T3VroSN6lsVhFDm+MEN | |
| 422 | −jG2sYx8L2cj+SnaylK2sZS/LWC+4VGLZiUIzPgva0Ip2tKQtrWlPi9rUqvazUdgsw4yE2djKdra0 | |
| 423 | −xawfcvq+rBZ2tzbFK4f0Wh2P+nW4xEUpYH8rWItAlbfMxehh83TVnTZ3ul11rcH2Wtzsave4clLf | |
| 424 | −YKkL3og+N65yFQhdw4tecvi2u6cLrnbfm13u+lCt6U3veMmL1bnWN73rBat74Qvgvso3rd/dL3jv | |
| 425 | −S17m8EIcDG6wgx8M4QhLeMIUrrCFL8zgT1jXX9lRwSQ+DOIQi3jEJC6xiU+M4hSr+MMq2PC9MLMC | |
| 426 | −DMt4xjSu8YV5gVv/6dbA1O3v97Ab4CAndcDPoy+Pp4vguEr+98jT9fHzgCzkKC/VxesyMpN5m+To | |
| 427 | −7vjKu3Uy76As5TCXlMjHKzCXC5vlxOaLADpos5vfDOc4y3nOdK6zne+M5zYbgMrXyo4QqADoQAt6 | |
| 428 | −0IQutKEPjehEK3rRgBYCn4eFKxrkedKUrrSl8UyAHDcwX6BYhac/DepQi3rUpC61qU+N6lR72giP | |
| 429 | −tlV2IhCKWMt61rSuta1vjetc63rXvI51BFotKlxZQNXELraxj51qUGjaiVs+s129TMf/innaYwZ2 | |
| 430 | −o6zs7LqmOZbNzjZboQ3cqwiX2uQOKZlnh21vr3XbOu22urcK7nVKu9zlPrcfzfxurrI7twe5hSf+ | |
| 431 | −DfCAC3z+4AQvuMEPjvCEK/zfxbD2obIDhldIfOIUr7jFL47xjGt84xzvuMTB4HBAYSYBCy+5yU+O | |
| 432 | −coXfYtlddHe+pRpvos6b3tS2d3K7styXb3XfOtavzrka8/aKm+b0trl3lftzfbN8jS5Pek+DXr6Z | |
| 433 | −Ez3MRncq0p0+VZ5v2udYjyrU6Sf1qUe56gjEd9epuvRf5svfKW+7299+8IY3NepXcQAg7o73vOt9 | |
| 434 | −73zvu9//DvjAC/7uDgi5nkYO98Qr3u0rt6qauX52n359gGEXe5DJnkSzR56mWmc25Ddf08kTceiW | |
| 435 | −FzPmsah50Ds37cxsuuorKvopkr70Uj79LlP/+op2vuX+B+k0sn8P/OCbmtVzB/tV1NCG5Ct/+cxv | |
| 436 | −vvOfD/3oS3/61E++Ggw/J2ELf/vcB76yHc/tg7D50uQvv/nrvOfiU/4qQui1+98P//jz2tHqv/1B | |
| 437 | −BCDp8+t//+TPNPjb/Xm5d1GxJ0aVR3vvZXvIhHsCKFG7x3QByIBBhX1rAmYHiIATWCbpFoET5YBq | |
| 438 | −B4EbGFEEOEwGaIHFlYAztIAg6Fasl035Ug9eAIMxKIMzSIM1aIM3iIM5qIM7CIOJgIFekh3rEABD | |
| 439 | −SIRFaIRHiIRJqIRLyIRN6IRDuA4/aCWYMQE8aIVXiIVZuIP1wIKIs2QqKIH1J3sHMW4lCGAneEYp | |
| 440 | −CIb+Hdh6HwiGDSWC0DR7ZghfaKg1GviGK/h//GZeeThRcWg0FUiHw2WHpqSGKsiGLeiGeQiItkSC | |
| 441 | −g8hXhSgzeOiHieiF+bIF9qCJm8iJneiJnwiKoSiKo0iKpaiJgiCFTpIdrpACreiKrwiLsSiLs0iL | |
| 442 | −tWiLt4iLregKqUgkZiEGpgiMwSiMw2iKW9CFgsMcX4ZcMsdedDdf0IVu0Bh+P7aMQudfzZh5h4RY | |
| 443 | −0/hk1eiM1IiNqKeN0qhTvUAC54iO6aiO68iO7eiO7wiP8SiP7zgK3gh2ozCP+aiP+8iP/XiO9RiO | |
| 444 | −t+ePA0mQBamPvUCO7wMAC8mQDemQDwmRESmRE0kokRVpkRYZkFN0kRvJkR3pkR/pkBmJgiBJkiVp | |
| 445 | −kh6JXympkivJkm4TEAA7 | |
| @@ -1,37 +0,0 @@ | ||
| 1 | −R0lGODlhFgFnAMZnAAAAAAYCAgAASAwFBQAAdEgAACQODkgASCoQEEgAdHQAADATEjUVFHQASDsX | |
| 2 | −F3QAdE0eHVMhIABISABInEhIAIM0Mok2NI84Nk9PT5o9O5xIAHRInFlZWaxEQbhJRgB0v75LSLhQ | |
| 3 | −TbRTUcBRTrBXVatcWsJWVKdfXW9vb6VhX0h0v8RcWZhpaJJubpBwb8ZiX8ZiYI5zc4t1dYd4eMhn | |
| 4 | −Zb90AIN8fH9/f8pracpta8ttasxzcM51dM52dM53dc94dkic39F+fNOEgpmZmdWJh9ePjdiTkt+c | |
| 5 | −SNuamd2gnt6lo3S//5y/nOCqqeKwr+S1tOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0fHX | |
| 6 | −1//fnPPd3fTe3vXj4vfo6Pnu7r////v09N////35+f//v///3/////////////////////////// | |
| 7 | −/////////////////////////////////////////////////////////////////////////yH+ | |
| 8 | −FE5WMTJNVCBtZW1vcnkgbGF5b3V0ACwAAAAAFgFnAAAH/oBngoOEhYaHiImKi4yNjo+QkZKTlJWW | |
| 9 | −l5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGmkM3ysvMzc7P | |
| 10 | −0NHS0CjT1tfY19XZ3N3Y297h4sxDlQDj6OLn6ezZ6+3w0u/x9M0A5r/3vvq9/Lz+kQDqEpiLIC6D | |
| 11 | −txAyUliLIS2HsyDKkniIIiyLrzC60tiKoyCPq0CqEpmKJCqQJk+lNLWyVEtSKPPJ3Ddz0stRN0Xl | |
| 12 | −DLUTVEyaQPvVlNTzU1FPRzsl5fRTaNB/QwNGHTi1IL6nu5Zu0qqpKVSsVME+4pqJLCazl9Ba8oqp | |
| 13 | −jAIA/gTCIOXkVsAVo52OAABgV6kmMxr2Cgbil9LLGh/OIJ6r6QgBLAfuMm48YYzPT1siF7a5qUyD | |
| 14 | −u1HibtaUWfLoS55NT+a0+DSklqXPxK5EJkuhm7NdV8pMYW9i3YJsT8q99Wqm2MQn/cihZRBuzasv | |
| 15 | −RenrdgnwM8uFQzpSOfrrTcihW5KyogiYM89VF9cUWq7i3+sRTVlB5Lyj6ngNd/58pn0mMUmY4ER6 | |
| 16 | −+R2nGWCEMbUIGQE2QUYj3Fnm3VibIPgeJ178kEFz4Imn4F8aEJbcWY18EcQLViziVoITOvLSFgXA | |
| 17 | −5R4iVvxg44045oijByAU0QMIQAYppJAwPHhIFILx/qUeieDFCIB1igjBg45U4nhBlVSaAEIQYiTi | |
| 18 | −2IzXLbTKF1mUaeaZaJr5RAc5aKeIFStw0RErVehARZp4mrlAnmlCscILU8yp3y5iILECBI7AKaeg | |
| 19 | −q3DxQ5cuMgLgCg5uZBwuTpiAhBgQKZqRK45CKqYiftZ30aW1WEFDEF58xIinn4L6aCMIabHDDhye | |
| 20 | −OqgtYgSRonOLwBqrrKImglAQUjyEalg0xjlRLKEuotayFIoliLC6whKtsVVFai222Wo7KyLT7kpU | |
| 21 | −VeCGK26xhJTLmblZGZKuuutW1C2tUc1Lb7233TuqU9c6m9At2wJrLb68JEEGP/rG4u4iBaPnr7S8 | |
| 22 | −/ohhgsRnNOxwLgU/LJVh9YR8Qwsl3HCOCyHIIDI986yMjgwkzKBMyy63g1LN8JzAgskoq4wzOzT/ | |
| 23 | −3E0MIIiQggM2CG0ztbW88MUZDAgc7y5aFlHBCDsk4ebA8NryxQsZd7DoV7oIQcQKBpyhRRM/jOCE | |
| 24 | −VV3X8kQRcKYtCBnsNsQLFHSLPQjecL+bi9lxApCFEjuM0ASzuXwNtdSMf5yLlkQEAcIOSmzN9S5O | |
| 25 | −A6Dxs3HPogUIOSBhRQATy1LEE/d8vq+3t5BhhH0YA6zLFELo47qlocNChhC/unowLRYzDLnevbvy | |
| 26 | −e/DC265LEqgPsntITCsPvCEef4fV9CVVz8ry/vYOjzwh3KvkvSrgh+985AGPDbrgvl9PbuoRNev+ | |
| 27 | −6wjHzzz29L8v7/G8g18r0sct8SkrEeXTyfkigaS9sIgRBCwge/bSlzBNAjAV/BACAXgIGAmmOxo8 | |
| 28 | −lybK8AC5TGdJh4igBAuhOUaUYQOWqQEIMVGb2jVGAh6iRA0N9iYOFmJE8RFhJ/CzIPn9qxDZoYR/ | |
| 29 | −NLEcBNClAUzIISWWw6FO+XAQQOzKAocjxUKoUBEImY+pIAEY+GhCCh0wT2OAkEVJkMc8EtGYB/cC | |
| 30 | −pRBKjjVmTKER85fCBhlpEQ2c4SYGEKC3XWILCQhDGyUBIBNE4BG7O0IGtZg8SkRIEV+k2CJM/oSi | |
| 31 | −R0gShWs5Q4aYY4kaiKiLlvDCBUjZCNcRMYh3zMSXFuEDHGAJS1e65Y20xKVGvPJNurTSjUbQox8N | |
| 32 | −6ZhAosEf3ZIkADxQXsHU0QWI6SNkIrNIKlJAHSkpwEvIUEKK6AKfxrmncZbJT4BSxBZUIIgTlsic | |
| 33 | −ZyrnE1bQJkws8gxkgieaIEDPFkaiBlCapR21dxwn7UWQTErEpCqlCMBQEJRrKdQKnkAaVFKiUB2g | |
| 34 | −aEEPCk5YEpRshygV7VwRAU3lbRaZQsIA+qc+kBLCVriKhaos0CpcqIpVNpxaNwNXCGTJoldWyJ5C | |
| 35 | −fcVDl35Up0blKVJjyT6lNvUgW/TfUp+6jzkhJhWqBqxfJQ+4Pqd6FXZXrepUv8rHsWK1q2e1qlnF | |
| 36 | −SlVbsKWt4wurW6O6saxKFa5gZCn+5mrXiijNZn8FWmDTEbTBuqMSHDDsODCgWHEwtrHeeCxkucGB | |
| 37 | −Y1j2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM3tLQIBADs= | |
| @@ -1,121 +0,0 @@ | ||
| 1 | −R0lGODlhoAHkAOe1AAAAAAAASAAAdEgAAEgASEgAdBgYGHQAABoaGnQASHQAdC0eHigoKEIlJEYm | |
| 2 | −JS4uLlssKzY2NgBISFIyMQBInEBAQEhBQUhIAFBBQVhCQkhISF5DQ2NDQmdDQ3NEQ05OToNGRHhJ | |
| 3 | −SJxIAItHRY9HRXRInJdIRlpaWppLSaJJRqpJR7BIRa5KR2NfX7JKR2BgYGxdXWleXmZfX31ZWXJc | |
| 4 | −XHpaWQB0v29dXLZKSHhbWolXVpVUU5JVU55SUJhUUqdQTrpLSK9OTKRRT6FSULRNS7hMSrVNSr5L | |
| 5 | −SL9MSr1OS7xQTsBRTrtTUL5WU7lYVsJWVEh0v7deW4pqab5dW8RcWbdgXrZjYcZgXnd3d8ZiX8Zi | |
| 6 | −YL9lY7RoZshnZb90ALJubLFwb8prabBzccpta79wbsttaqx6ecxzcKt8e4aGhr93dc10cs51dM52 | |
| 7 | −dImJib97ec53dc94dqiEhKeHhkic39F+fKeKiaWPj9OEgqSSkb6PjtWJh5qamqGamqCcnNePjZ+f | |
| 8 | −n9iTkr6amtiUktmVk9+cSL6enduamb+jo92gnr+pqd6lo7Ozs7+wsHS//7W1tZy/nOCqqbm5ub+4 | |
| 9 | −uOKwr+S1tL+/v9+/dOa7uv+/dOjBwOrGxuzKye3KyuzMy5zf/7/fnO/S0d/fnPHX1+Dg4P/fnPPd | |
| 10 | −3fTe3vXj4vfo6L//v+/v7/nu7r///9//v/v09N//39////35+f//v///3/////////////////// | |
| 11 | −//////////////////////////////////////////////////////////////////////////// | |
| 12 | −//////////////////////////////////////////////////////////////////////////// | |
| 13 | −//////////////////////////////////////////////////////////////////////////// | |
| 14 | −/////////////////////////////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBH | |
| 15 | −SU1QACwAAAAAoAHkAAAI/gBrCRxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJ | |
| 16 | −sqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtapV | |
| 17 | −h6QkWdrKtavXr2DDih0rlpFWsmjTqkVrdq3bt27bwp1L16vcunjn3s3LNy2jVRU/MKhAuLDhw4gT | |
| 18 | −K17MeDGCwY0jS54c+THly5gvW87MufPhzZ5DcwYturRkBGkqvgAEdPVP169Z+4Q9W3ZP2hJx89St | |
| 19 | −k3dv27uBB4+tWvhO3ziRJzeeU/lN5zWhK5ROk7pM69eZL2+t/Xl3hthj/oZ/OZ789+jn0ROnWN5l | |
| 20 | −e5bv4aefGX9l/ZTx7+Ofn537+tr/5cZffwAGeNyA4iFoXnH+FejgcAb+xmCEzSm44IMQ3mbhQPqh | |
| 21 | −1KFJH4K4oXwNajghhhJSuJ2K3p1oIoopvgjjihOFWJKNI+GY44j28dgji+D5qJKOIRFZpJAeIpkk | |
| 22 | −kAvZOMsBAAjQykdOHhDAJ1QqSVAhAABwpUcf0iJCl2TS0ZGNmZDpSJYcpekllmfyaKMXNtRCZ0av | |
| 23 | −jEJQiIUIAAoBcMbJUSEUxHJkQa+wglEpgGKUJ4da1vLkmn1OiZEsoUC6USkDrJmJlIKyF+ksCWD5 | |
| 24 | −qaUWydJFHagIhCOj/oFyFCKpsYIp3CZPRCKLRXdeumqrs5Zay6kaxTGGniESS2uoNUYKay3PZhQJ | |
| 25 | −FYnI8mqjtm5KwAVd1pltQangkYUnFEUrLbUtRGqnAKocsOZGmlDxRwyRZvLlpMwKqC2W5mLEyh5U | |
| 26 | −zKAutNjme5G9WOJr8ECerJqKRIQautG/RsjRkRcAFNrRK4kUYQZHGHt5wbsb5edso/1mFEoQVrS6 | |
| 27 | −L5saEWunt7J+N221DyncUQ5OsJrRk2Z6AWpHN1RxbEc6a2TyRsvKjJAncUQt9dRUT/3DEUgcofXW | |
| 28 | −XHc9CEMpK30ylmKaaRAebFSt9to/VLG21F0cQYUmDkXMENRvs13F/hFLXNH131wvgpCy7t6dt9pt | |
| 29 | −L3HEH20ADrgWuyrktNguXlT2zAulEsrmnHfueec6KNEFuQt5QoUpYBdc80aXh11LJ2Vw8vnss+dg | |
| 30 | −B+2cH3IEHg8zBHRDmuNOew5mPDE6RggTXOtBwQvveQ5oUDFGpnefvtCTNJcsp7qcRomqRq8Q4nFD | |
| 31 | −pqMuOZlvLmxR9wCQbJApcbzSbEKoGEt9Q5V+9IoPSlCyEZddch/4dsCESjikfAl5UrdgNj+eUOIJ | |
| 32 | −h5BBehB4oZTAT34R8c0rDvEEA8bkgTvog09AKELyWa8lS9NJw3wGHQpW0ILxy6BxHngIDL5khagw | |
| 33 | −EkdwSB0XkkhU/jpBxRhIVwvn+NA9A4PIBSGiG0z4LCZCJJ0OwVcHKU7whEis3IEScsQstmSJDpmi | |
| 34 | −+ipUOix6sYEz6uIZWQLGIDFJPVw04xplWCKCqHGOK2njdJJ4KBbd8UdAjNAfUchHiegRIWJcnYoG | |
| 35 | −OaTt1bEWjPwhTA5pkERq75ECieR+tBgjSMqRPoWcCCX3FMpvoUiTmwykg1AJSJmM0lWlHCONMvnJ | |
| 36 | −BHHyJtWCDStb6coYHsSSlPsJD/xgx1raUpU6ecUTisiaXfKylzYk5Rtn8ooi2MaZS0JmTjaBB2Zi | |
| 37 | −s5E3McUaeifNGd1kE0OQzTdPEp8TYKEv8ByLGvRgCQ1IoQmK/oinPr+igXfuE56IOMIU3iCISWyl | |
| 38 | −n/9M6EH9qdB9qiEE7zQEPhsKTw3woSIagIxpNqoYFmCgAg5YQQY4StLEGECjJTUNDo5AAhMAIQUg | |
| 39 | −aABKU1rSk9L0pixYAAM44IKR3pSjBkiNNm+SiixA0gh3mCZL8AAw1I0iEj9Igv9ktJOivmAOxoQj | |
| 40 | −GnNSiT+YjgaykUU0W4QTTHj1hC/ww1jJ2JOu1oAJ5quFWNm6VZww9XQvsMMizrCESGwRJ0X1JOqA | |
| 41 | −mRHCXoSpSK1FKPbaV7rqaydPOMIe6nCEKCzifp20SRYeVj7DXsSzFYlsD6xwhDNc9q91tckojjCG | |
| 42 | −Q3giXUpl/skfPPjVWCpyJ6sdww7mELkMPRYnsgiEomAZ25Vwk2GJNedMgqso0N6yIc51iCzwQERm | |
| 43 | −FlclyiTIW+OKWuBSl7jKbZJtKTLd6lo3vDDBmauwyl3H2qS8mkJvQqK7EPgWhL6/1dA6s3kT+4KX | |
| 44 | −qnSsiX/LCeAt7ldE3jUvfgOc2pcMmMC+hdCBSbJghDz4vAV+SIUJcuH4ZpiuExbJhgvS4RFD15Ey | |
| 45 | −6bCHI9zdEIPExAJRMYzF+9yUqHjF3Y2wi00ZkxvPeI81PsmNcZzZHAvWJiYe8o/ni+KYlekhQyay | |
| 46 | −QBIlETd9CXzIGpiYrkyRR1WSOc5kX8YkdkmMPInLChxa/n2/C2SEYPZ6VgrUmZcX5Db/TAFTSh5D | |
| 47 | −oizlWuBKVzkrgaG8oLGMqKoONxhYISSgOokc2mV93qXrgmmRPv0pUHfqlUL4rBz7McTS2AI1nYeq | |
| 48 | −YT4mzcJsPnFCwjWuKqtZWkYQQ2/NnABINHoiN+utclg56cJqKVpNe7VB+Izhg2yCCnsYrkL61ev8 | |
| 49 | −MpgjzZZrqlWtkBWSkyFiyp5GYsAFKmxCI4WgQ7Qd8i9v//cgqBSzAH2tkWg9q9fELvZBZJGIXM3a | |
| 50 | −IMy+dZ2Z/BFNo9q8bmRIrhfipkLXLBS/ukgpCtCKcT8E4axqYVYRUgguU1rh2Hq3vqUNcH4zJBV1 | |
| 51 | −aDVC/vI96gaHMYl2UwgcwnA4xLmt5XGI29zwZ/GnwVxqbYsa1hwHOMEZxAtmmjTebj41vhGB53/z | |
| 52 | −uUNOjZEPuRtlG1850eOQ85tHtg5rVR5BHH7yfUMkfws5hfOGd7uxh0J3vGsI0w3SPLPbLhQPPB5F | |
| 53 | −FIg+s4HL7J+Lew1MXbjbYhxOwf4eQcSO98293eyYoEIWvn0QkpfZ5BQhNJl5jJD6TW8hpYCCQPRc | |
| 54 | −sj4Q4glTzQjXGRI+0MubV+8C++P/LpDL+fuz6eEYFQA9ctWNPuCQl4iYxyzLWmywgw0RU5dqnpHQ | |
| 55 | −1RDaG48IDTEYIvYZfPUUcdPw+TUA70HfIIlPdkKk/v8m7hM/9zRm0fJh0jAh5AEnOISwkYs8kFGc | |
| 56 | −4Qx6Oib4tVoQJ0LaJVFcchS/fN0XFqQOdANKXkcgHzZL6+de7Nd1/UdImISACUhW81cd43VxLOaA | |
| 57 | −FgiBznaAGFiBBqiBSNZkBfiBDdiBDyiCpHaBJihfBBiC9PdsHLiBHtiCMSiBAyh/LwiDKJiCNxh+ | |
| 58 | −KmiDO0iDCyhJGViCMkiEQNiDMJFCSOh/MyiAQfhMTDSBFGiER/iDVdiECOFOFPVPCLWF8dSFXlhR | |
| 59 | −DBWGeQGGZFiGY3iGdGFRGDVTP7VRNvWGJBWHcghUbliHnkGHeFgaeriHeShUEeiELFiEJJiDVxiF | |
| 60 | −/iOIg4YoiIPIiC6IhT4IiUkohey2hOoniUxIhStohZuIiE8ITp+YSpbIgCdYiIpoijrIiZFYaomY | |
| 61 | −ipiIR5q4igo4ikKoipPYioRIbbQIhbF4i6HIX0O4iJ3Yi5kojLKoi404jMboi7sIioGojKcYjbko | |
| 62 | −jYfIir/ITpTYdNloEUvmccn4S9vIjeFYitToiK9Iis94jK5IjLC4jMWIjLb4juUIjfOojjxoEXM2 | |
| 63 | −ENJnd9r4M3Gmj9M3hRORj5unJtc3kP9YkOlTiQfzZJICJcImjhmxjwJBkAwZjF/nJ9gyC3g2LN+X | |
| 64 | −jhSnkYAnaHbyfDUYkpdWkYWjerCHEaImEJzi/ikRCZIHwZF59iWZpm0SeRE26ZGf8JICOYusVxBr | |
| 65 | −R5O1tzyTc5IJAWzCkpRKeZSbByrL0o9M4y6BF5Rz13e3d4+PWC63tpXeOJQDkW1YGRHmIjTtsm5P | |
| 66 | −2XjYkjxF2ZUVASsaV3Jw6ZVwApZhWZdmeWuvBxFedm7rUzAFN3k7uSiqgzEmWZhTpmwQcZbDNzJd | |
| 67 | −Fn+nxyt1MpcVgSl9Fnk0g5eIBIKBWSspNxGPBphxeWsVR5fWaJiAdwBBM5N19Wf3ljrL85b1lXB8 | |
| 68 | −ojGWWRHGkmX/Y3CcCY5riW+qw5IUkWtOd2u0mZpDSThqmVqs1nFLeWtOCRE3A1sZAXZXaRHx/jIv | |
| 69 | −WsKSv8l/5NiYBSN5GlFuAtNuGad5PnmRn7l5X/Kdl5hJDuMQKYM9/rIHFZMR5Nl6IhA0OjkRHDM+ | |
| 70 | −GLGfAwGf8SmU0Yc+V7J7iSkRK9MyDUkmVyJ8C0mVFuF9WAJA7XOQAzFw26egn0B3/0kRPPNE5VJ9 | |
| 71 | −ZFIo3eOaE1E0RxOXKNolFHAJIMqenqgSQzd1V5M1SMc1X4OOJoE2U0c1Vfc2MheAG5GjN9c2fOM3 | |
| 72 | −Pbo1SocRStpyibM4jfOkRwA5vIigJ9F2hRc6cldtE0dh2Qg7slN4nXN4uIN215YRXup2xROmKPGm | |
| 73 | −zgM90vNmTzOmfWSUKxE+AlpG7eWMJ/FK/lxJEJaHp33KP6G3E69AQB5UPYGKjcGJEjQkQZDKjChB | |
| 74 | −qHk5ZRz0qC9BQiP0BCF0QHoqYp5pE+kncZEqqJnqS8opEONHfr/SjXY0q/OxY8FJq7Wwf6RZTKvK | |
| 75 | −qq2adXlpfzLBq7rqe1XUqwWBq7k6jqXIrC35Ra6Ke/Eoj0eGqXq5jtdKjyWhqQdaj+oIrc3agOIa | |
| 76 | −rS7hrcoKrtjqq+b4qkZWruZ6rtPamdcoqehWqvbKp7UIr/Eqr8KamdpKgvwannZGVQOrmC+hqcf6 | |
| 77 | −rTB4sPq6sATmsJPqEYQKsem6gRKLkdSqE7mkTvhai5M0rwA7jTYxTOyqrgxLTcvkGhk7/rEfMUoW | |
| 78 | −O5k4UU3X9LHA+hBaqIZ0IQhkUE9YIFH5pLNwYYZCKxaKsAWNwE9pWLRrQbRMqxaCgAL+BLRPmxZs | |
| 79 | −SBEZ5YehQQIeUAEGMAE9pbV5eIdiqxgbcAQqMAIdYAGE0Ydlexlu+7aTQQIQMBg85VNyKxlB5bIl | |
| 80 | −sVm1sF3NOBKR9Qd4sARnkAg54KwaWxNZAAOA0LLjWlVG5QnJ9Y0qcVdOBVVSFbhdmgVXZbNAmq0x | |
| 81 | −0VW1FWP/yq0uYVYUlFanW4034VZwNRBzhYqFahOYm1eM5Vfs2LlHFrMWi1hJtVh8pbsoO7IxEVmT | |
| 82 | −VVmnVa0o4bedpbiiKxOiRVqmhaiu/guPqsVarmWdlqsSs0VLYFWvI5FbuxWbtFuw7yVcxtuuM3Fc | |
| 83 | −mVS5zGtj6uu7p7pc00a/ybRMAwG43asS9oW/BMsSDwbAOaFeRcRe/YsS/kXAiyvA03axJIsekBvA | |
| 84 | −DlxdDBy9NvbAEHy9LTLBDVzB9wW9N/rBCqzBG8y+K+LBI2y/AHfBK+xgJnzCqHuEKsylMFFiIuyu | |
| 85 | −OgzCm+qOL1TDG3vDMezCO+y/Mby+M+yIQIy+MAydMlu8MjwSnJbDNoyAS0yvKXbETxywQYyQFrdl | |
| 86 | −qElsyEFlS5eQYtagD/EoHWKRtQBAH5kQfxmfrJSPFOqQ/ZqgXWI2FLlnWvzE1nsQ/ntsZahZxF0c | |
| 87 | −EUApEIuWfBxXxbD5aSIJk4oMEYeWaC75yIiMxnuWcAeqSYdcoJFcxRDRkwgjym8cY338xJ52PR05 | |
| 88 | −yiRJoAj7wnY5EKRiayUXb0/8nA3xdINMnbFmvrq3kcJiER76xOnGlyNKwmXsPrQpxt9xbNqndn0X | |
| 89 | −lYJHwcApegUTbpNmy1sMSfO5bBkXo80pEdxmbkPJKNwCAMfMEOXGeEZUqiljoFGcy7aXfPEGHfRm | |
| 90 | −b7I5liKQzrAMynt5lwznOtq8zQIxzMK5PKfpaxB3f78MJ24ZzROx0Kqaz1uCyRjsEK/Xl7J7yusL | |
| 91 | −ciKXEL0ymGVZuxMRLUCndQYh/nVDWqSHc6RQSZQQbUc6+nI7h6VHEKWQ7NBDo2lTenNGZ9M3jXmq | |
| 92 | −k5z9PBGh2caYrNJL+nIwd3XCetRtXMqETNIN/ZDoAwD8KBCEh6ahoKbOw6YvTRBFSae483Zx58QU | |
| 93 | −/SyXIxBk7Tx692vDadEXvRAsSZwFsdV459XCk3iLF5LTTNTYO9UP8c6fLNiH6s1w4gWpx6JM5Hmm | |
| 94 | −15610DqFjRCl5z/HKWes6XcV4cqubKMGIXu093O+qZ6c98qCzRAY6sm77M+/56kGgaHOR5gVYXyt | |
| 95 | −S3A1yj7hzBCxqh+pbdembZYxmjGiENxy7c+1kH2MWRAMCgtjUqF3fNooHKsu/lF+53cT6YfE9piL | |
| 96 | −7gd/SVzNM0KsMJF/VFwQvJqyHBywAHjeTLy7IMveW3q+KFzI8N3d2R3fXBzBPezDoXuO7a3f/R3Y | |
| 97 | −/v3eUCzg963e+T3f9W3fBq7gDI7FnJuvCfzfA36zxo3f9L2uAU7gC+7dEa7hG47hGS6KyJzgJF7i | |
| 98 | −1mrhJm7eH37iK96OCA7iAP7iLN7gKe7iBX7gEy7i8evhNA7j8p3jwLjjFC7jNr4QOVu1buG0SD4W | |
| 99 | −Sr7kYtHkTq60Ua4WUD7lXHG1E5G1eZsZcbvljNHlXr4YYB7miDHmZH4YZn7mbQuII+7jKF7jEn7j | |
| 100 | −F67iPT7jc77f7j3kPy7n/nAe5y1e5H8ez24e6H5e53Y+6DjO54hu6Hge4kFe1EAO4UKu4/zN4xw+ | |
| 101 | −6Y+e55Su6Zle4YSu54p+6Ive5zFL0Ize6JEu6e5d6kTs6KrO6a/u6adu6X0O6m8u6nR+54U+67b+ | |
| 102 | −6Zsu67pO66M+7MQO6Il+68bO679O5Ki+58je7KGe7MHe6w5+E3F8rF62ZHGM3dglmab+Etk+3s5+ | |
| 103 | −7A2xx5EtAlK9aZrcIRR5xrINZbY6kXbsxqstu5rM7R+ax3Wcx6K57koSyAaZKvGOPA4pyCO93hFB | |
| 104 | −ynCSyPWOEMaJJAoPzwVNBSbLk6v8JVAdEcOsHwq/dZN9EA9vZhcfoivJ/tgOMS0Vj48jH5PDYvLA | |
| 105 | −Dp4agS+z/PEJYZ7qMikSLxCs0ANMwHj+6AhTaRHrLOhw5j4aDRE2zxGTkp0XsfM9X5WOoCzB/Nwv | |
| 106 | −n8/YTPMK8aAM/ZnqpjR2cO9cvy0LZBESzT0FA89a/zJoGdPc+PUm+pkPndvQfekXcScL13D61tNU | |
| 107 | −WtNYitM/p20JbRB6/zY516RA7fcCcSdxzzBDKjU/bdOI//cVLduDnzdX0zeHrxCahpjvnkkr7TaG | |
| 108 | −D/kI0SshEwCQaaFtrhB2c9Ku09bCA6Zo/RBQvXauXzt2cNYXYTcyo2m1Tztv3ZtkRvtcvTmwf50a | |
| 109 | −8ztCM81szdW2g/uV/maSgD3u1V5pUgkldeco4vMx1xmR0b8QMvAFj039lqLW/VkRlf3tjvw9GQ+g | |
| 110 | −2Q9uQ8OcGvH94V8Rdj2dqY/vo5+YBlqpSkKgio3IACGgVS2CBQ0eRFiQUhEwrxI+hOiFQqyCtETQ | |
| 111 | −qVWKwCeIHWtRenLIYa0XgDyeJCiRYsFZBzCi9AjykAyTMDuqLJgpAEeNHG1CXNjw50OcB1vaGAqx | |
| 112 | −ZNKCS5kaLDUAwFQAEwn2fErQU5c6qEjWzJpRKlUKosZaDbu1zg2wWaNSrRrrLQBHTNV6bdr26dyp | |
| 113 | −EwsJDFvr7tfAYuH6pVo3sFq2hflWdXVgKtLCBJ0yvVxZs0FUYzzl/t0cmrNnwqIrd/58MLPpwKhB | |
| 114 | −sw7tejVszbNt2qZdGHfurLt5P/X9e2hw4T+JF0d5/KFy5B6ZN1+uF3rS59NVS7d+G3v2k9UNeude | |
| 115 | −Orz28cO3l08Inrt66+zZtz+P/rp8mO+h278fn75l/R3xN/+vuAAF7I++AYU7kDf3CjSQQfQSVNDB | |
| 116 | −8iDMjULYFtyvOwnHs/DCDcPrkLUQRcMwQ/8+XA/FFE1USsXsRgytRBbTc3E6GGOsMb8Zo9sRIRl7 | |
| 117 | −fA1I/oT8LkcAjTySyCGBQxK5G2trkkAlxSPyycp+FNJK3aJEkMsIp6QSSCzF9LLCMs2cUsst03RR | |
| 118 | −zcDc7O1M2uBksRJMOjFz8QQsLOGzTz//BDRQQQcldFAN9iw0UUUXTfRQRh+F9FFHI6W00j8ntTRT | |
| 119 | −SjHVtFNFNeAjKzciqKBUU09FNVVVV2W1VVYfINVVWWelVVZYa8U1V1xv1bVXX1Hl9Vdhew12WGNn | |
| 120 | −feARMJdltllnn4U2WmmnpbZaa6/FNlttt+W2W2+/BTdcccclt1xzz0U3XXXXZbddd9+FN15556W3 | |
| 121 | −XnvvxTdfffflt19//+03IAA7 | |
| @@ -1,213 +0,0 @@ | ||
| 1 | −iVBORw0KGgoAAAANSUhEUgAAAlgAAAEcCAMAAAAsmToJAAAAAXNSR0IArs4c6QAAAwBQTFRFAAEA | |
| 2 | −EAEBAwUBCgMBCAUKAgkMHQIDCwYXFQYDBgkVDwgFCAsHChASJwkDFA4NEg4TDhANHgwHDg8aExAG | |
| 3 | −DBEjBBUZERMQCBNRDxU0ExcZFRgVFRcgCRkzHBcUDRdCNRELIxYTAx4mLBUMEBwcEhsiDxwhExsu | |
| 4 | −Dh8XJRkQByAtDCMUHx4bACk0DSsiGScsFCRcJSUiGSZCDiwqGCg1LyQbIycpVhsPDy0wNyQVECxA | |
| 5 | −PSIfCS84ADJCEStWRiIULSwpADdHCDkgEy1/BjorEjhADDhXCzZvITNPUysQDzs8MjIvCj04BT1O | |
| 6 | −PDEoQjEhMDU3LzY9KTdFTTMYNzk2GD6PAEpfEUVjBExFCEpPB1ArK0FjKEVZYTscdDYXG0d5SkA5 | |
| 7 | −FEiJQUNAOURPAFhCA1RpP0ZJVEMvYUAyBFtRWkYnDlR+QEleAF1jkTojHlV1AGB4PlN5YU87cUws | |
| 8 | −SVRXAGaBWVJKUlRRRVZlAG1PWFNSBGt5AmqVAG+NAHNpK17BWl9ifFs9KWmnSGZ0YGFfp1IuCnWj | |
| 9 | −AHuKbWBXoVNAdGBPDniWAHujTWmLk14rAH+ch19XX2aRX2t8AIeLiWgvAIeeAIaqa21rOnehdW1m | |
| 10 | −AImspWJYj2tLW3C0AIyvWXaNAo6xb3Z5dXZzent4WIKiQojAen+CkX1pcoSWcYDOoH9fp4E+Y4ur | |
| 11 | −hoWCXIvGb4mut3xpqYNYnYdUO5rDyXxdjY6LYJqk0IRGb5azXZnMjJGUgJWqpJB8l5aUyJN4kKK1 | |
| 12 | −rZ6IYqzge6Xho6GdnaWpgqy6yZ9zvaR0hqzMk6rN5Jxxw6mF26lbq7C2pLTGwrCbs7Owvb+8zcGc | |
| 13 | −8rp42L2xsMbY3L+jtMfsz8W2nM/yx8jH0MfA7MWU78h/3crIyNTo4NLD6dK1z9bc1dbT3NXOv9vr | |
| 14 | −/OKSwur8++Gw4uTh0ef78uPU+OPL3Ojz++bGyfH36evo/+3b6vT88vPw/feu1/v+//bb//nK/PnW | |
| 15 | −5f/+//ro+fv49/7///37//71//3//v/8sZeTnQAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAFY4AABWO | |
| 16 | −AUTUBDsAAAAHdElNRQfaCRQPAiJBEFMLAAAgAElEQVR42u2dD3wU5bX300nWws50shA4lyTGikRE | |
| 17 | −Qy0aUChKvJZqTQGBFNurVo0FWq2VqhAq0hc0t1rAxtLLpu61cUl6gWtNe3vb7Z9IKm+Xqn2tkFih | |
| 18 | −GmwFA9Xwpw1s/UOyCc97zvPM7L/sbjabXTLZPL/PhzA7O7M7s893zjnPmec5k8WkpNKgLPkTSEmw | |
| 19 | −pCRYVlSjp5n/3+3xGGsONHt2vx1t04PNTbtP8aUujxAuHvN6XjHe721pbmqLsp/H021+crP5wce8 | |
| 20 | −Ta8Evi+wKMHKHKkwjf/vA+D/77SrAKDeeTRiO3/vcnzDoTzXgy/+CEKMbVdw5dh9tMGubAfuuMjf | |
| 21 | −E7HnfgAf/X9yJn6Aupqv206fNfYdXHr/Aloc944EK7PBWg9QurVxlQ3s70Vs+FmAdQ0LAP6By1cA | |
| 22 | −KCT2AsBqXKme7mEfajBr25MaTIjkSjPA0mHsVnz/G8jgzyBna4MGH/UzdgHYt9ZrMNovwcpksN4E | |
| 23 | −eJpeHbLB5PDtelT4L/wP4Fr+95NirQa34d85cB1jX3eAsGVhiPRuR644WPjOafxgHXw9uD8axL/k | |
| 24 | −3+gj3P4vLgJ0SrAyGaxzoFCsfpObJh8aJVMtzUSMA3JZTw/Ab8RKYcD+Rvu2ehsJJIBu9llFwdW3 | |
| 25 | −0l8N1B0CrDlgpz1K4OfIkRqgT4cOjNkkWBkLFiM4ejT4nXjVrcH/wb9G4BUUwOcZ+xCgtkh74Ci9 | |
| 26 | −9Iu1Jig/BjhDhmzCGUTzccaKNx9lAqwSUAVY17Kvw7U7S2wLn6fXRXCzn90P2dIVZhxYIlxSiCE0 | |
| 27 | −W+8F1l+GYDU0hG99P9/gVxiEKxiGvYPMoCMjT2a8fxyRQkQw9HpJg3EBGAmsr4PDz8Eaxz4F+UBf | |
| 28 | −+DjtMZ0WJ/9ZBu8ZDlZwfX7fjTG0x9ibPTF93D52UEdELgD9LXYw19zteA7onMwLAHuI74SB9QGG | |
| 29 | −b372DKAvLQF4xN/7FPlR/17gjD3H/BKszHWFYRbr6siEA7sL4Jbga4zG2Yd2sCuqaoC1H63YS3wJ | |
| 30 | −nSW3RyFgsQ0coQLsNn4KdD/3gtcauG0HOCItVgYH78EYq4fHWOFaDLA6tMNHe3St0m0L3+Ixln+/ | |
| 31 | −BqP3ib0xGue2LRQstmu+vXjz13mMZYRbubhoFw7yXyRYmdwrHMN7hR/fgVGSdrovVzvEUpuXYPhn | |
| 32 | −wG9+wJcOaTDZ3GcOpU/fiACLmb3CP5o0ncemCcamQY4EK+PzWD3zYayNYvcwYUj0UiCldTf+9yXQ | |
| 33 | −2RNlKl+6Aw2YLRCtU/D+uBZgxQDr9iIkrauIeo067OOu8Cfs38Fxgi9+XoKVyWCx+wBKG5t1tDfU | |
| 34 | −9ME81hlybtki3U59w9XNuOVL/r+IJbu/58yXwOgGdPd0aXAuwXU384eAdT7YtzXqPPO+HuybPRdA | |
| 35 | −9hnW5YDR2zz41ntnJFiZDBbbbnfQvUI7OBaF5bF+ZdwehALCj+4n2n9qLDkK/8zxMdSNjlA/3UP4 | |
| 36 | −vRFqsf4+xhG4V8h3G0sB+/4ptJjzB5luyDDV1otUVXd9vbGmpXFr09td96mXha5kT9Yb4psfbKxv | |
| 37 | −EgMdDjZuE2MTzPfru/9eX/8HsabWeMcY3eBtaHrL+LiDjVt3B75v224/k2CNFL3+D/kbSLCkJFhS | |
| 38 | −EiwpKQmWlARLSoIlJSXBkpJgSUmwpKQkWFISLCkJlpSUBEtKgiUlwZKSkmBJSbCkJFhSUhIsKQmW | |
| 39 | −leRP28f50/H5EizLSlHEDC9jCuGxJ6crtoU7TkVjxJxkuGu+XVvNp9t0bS9SFu4Ra1+/PTt/c+R+ | |
| 40 | −uFLbfMJYtNvMbRk7nq34JFiZrPB5hYdsoKqqA9Sjfbm61ZhkOAdwG1D3IVd2WhJFGp4CB+6Xw8Iq | |
| 41 | −kD6j0QbZR3D3F/he8CPjHT1s3r0EK8PB6rHBLARmby7kRm538i4QYP2Jag4dmwkOKkU69gjbqcEb | |
| 42 | −rOddgD1sL8DDofu8D/C4/9gCyPHTrNVZp3oXixpZjCCVYI0gsHy8Tihjf1Rt+Le7pSWw2U4bjBZg | |
| 43 | −faUEkRJ1QETZte8ShefDT3CxtukV1tXSQm6yBXf+d7Nc0T9o2/d4SUjCyf8iTJZgjTCwng2+FVKG | |
| 44 | −janqMn9o3UgDLOKmy1g83NrKQ6zzwc493+/YFFFKpoAqIuk03/5dmoCP1g/00xKsjAerpIWLYzMK | |
| 45 | −oDTw9ACfqgY2w7A8rCDpHEETzZb+kPgCeIpqAz7HOD0PI2yXMfYpUcS2gGosLwf7bq8G1zNuwn7D | |
| 46 | −JFgZD1ZAFBWdTxVBcjZHezJFKFhPAfyQwLqDu0LOGCysmi8qHS0G+Dg6wR4qJHKCVy4ajWtn0lec | |
| 47 | −SzvfDzczCVbmg1VQxWVgs2E6oaY/HgcsP3FVKvB6pGUDCLCu53aMB+eE0E9E3y9ntxet4Gh6a/QD | |
| 48 | −q3Qi62UYyyRYIyzdwPt/O2/Xg+X4+oJF1bNhEV/k1YgWCVdIXvGfIupCS6Xz9/8+xQGQOwddoXh8 | |
| 49 | −ABqv/8JNf9/a2goQ0jWQYGU2WH7W0cbJ6dL6lLYNsVi3AnzNWHfwyXV7WDCOZyI4p7ptRvW/XdVb | |
| 50 | −T8/B4P1TZtnRccFCWqoEa6RYrCvUfHPt5JhgfTeQ5uxobz1DVd7HElH0rIq/cb5wAx3yCLTDbf4z | |
| 51 | −It1gxPElMAE7mCQqFS/BGilgIRiXdeDyTkoWsO7W1ihgvYkheCuJPz7nBDumUTbrV5D3NvOdT2VI | |
| 52 | −j2O8hRudxz/8YT97EXL9fnSFz/nZq4FnpbA+z7yQYGVyjLXcAXb+MIFFEXmsIFi5gU6kv0tFs6OK | |
| 53 | −eGsBf1iF9g9yhLnMz0vh+u/npd3VN/j7/EEBpWcCYMngPaOlqCWhSatd84tUteDGHZF5LAKLv+xR | |
| 54 | −TeGLQ/N1dcZm8faGEjV/4VF0hCoHaaaqnOIrtYXivuP2MlBnBOvEq6oESyq+QobC9ER7vydyq5Eq | |
| 55 | −CZaUBEtKgiUlwZJKnyqmlXRLsKRSrhJlBI5KlmClX+USLKl0qFKCJZUO1UqwpNKhZkVtl2BJpVzt | |
| 56 | −qtIswZJKvRSlUoIllQ6wFAmWVOqlKkq3BEsq5apWyzokWFIpV4eiVEiwpNISZHVLsKRSrlpFaZBg | |
| 57 | −SaVeoCidEiyplKthZGYcJFhpV4FSPgIHZUmw0q8KtFkdEiypVKsbwVIafBIsqVSrhNCq7ZBgSaU8 | |
| 58 | −gie2ytq6JVhSqVWVSlZLbeiUYEmlVp4ChexWebsESyq16qzgZmtahwRLKg1mSylvlGBJpVotQLGW | |
| 59 | −T4IllXKrpYyAjKkEaygEmU+WBGtINE3J9AmHEqwhIwskWFKpV4mi1EuwpFIvJbMHAEqwhkrNme0M | |
| 60 | −+4Dl6+w4++rs7EnT+Q3R6SRysxm7hu3D5HQGC1Z3x7Kc8RNnX2XIds1VadXU8ebS7Ik2W+pHlfja | |
| 61 | −Z+RMnBg4CVt6z+YqW+CHmzrRNr6x39PpUJQBPQjF10anY37HNek+nYkXm42Dp6N5O5MHy9eQs8Lt | |
| 62 | −CqpufOirNGjtNaGv3POyWlOJVWeVbW3YCUysS+/pTHWGnc5VOYf7OcKCgSSzOm8cXxN6Au7x6T0b | |
| 63 | −15IVoSy4LtYOJwlWs80Z/slnGSxaYUuZ1equ7XP0Zxcs1NJ+TqdNUaoSPZ2qyKM/u2DxCz/flwRY | |
| 64 | −3fkrIz/57IPlqrumKjVcdUReJUMBlqtuam3co0y4sENn39M562DRV3oHDFZ7Tl+IhgAsl6smPxWD | |
| 65 | −LFuiQXT2wXK5NtrinU5VGbQlcjreiX0/eQjAQhtcNUCwWi+OwtCQgOVy2gbPlWdetK8bCrBc7nh3 | |
| 66 | −broVpTyB09m6xGURsFxrywcE1oGov/nQgOVyOgadIVrisgxYSFb3IH1h41KXZcBybawcAFi+0VEJ | |
| 67 | −GiKwXM6iwXHVNs9lIbCQrNiHWpFA9r09+q80RGC5VtYmDlZBdICGCizX2nWDSjPE+sWHCCyXszrm | |
| 68 | −sbYqiqe/89FclgLLNa8lUbDqV7qsBZZr9mACeJvbYmC55nbEuWFY0s/pFNVYDCy3LUGwfBe7rAaW | |
| 69 | −syR5rg6sdFkNLFdsZ+io6KesQ3uM5h06sFw1tYmB9aDTcmC5ViQ9Rao7x2U9sNYeiHW40/ob76e7 | |
| 70 | −LAeW62JfQmDFMlhDCZZzWrJgHV5pQbBim6zGfu7qdC+1IFg1iUwyyvKstCBYrquSBSvfZUWwlsS6 | |
| 71 | −xtv7id5vrLEgWHUTEwGr3G1FsNY2JTmgYbwlwaqrjToEprMdu4UFFQWxx89oLguC5Zp3IAGwprqs | |
| 72 | −CFZNeXJgdaywJFiurOiDkwOKZdGWWBKstZ4EwFpiSbBcSSZJm93WBCvaLcP2ELBi5bnWWhIs94PD | |
| 73 | −F6z85MCqqrMmWBdGM0mOAFexplU0bLQmWAn4k6yl1gRrYnJgLbMoWHN90buEhmL1DGstCtalIw6s | |
| 74 | −iuEEFus3xFpnUbAulGBZGqwyg6uY4zkkWBKsZMDqNMDySLAkWKkEixcHiTdxVYIlwUoKrGYBVrcE | |
| 75 | −S4KVUrBE+B77xqgES4KVHFj00ArFK8GSYKUYLF/cEEuCJcFKEiwevndLsCRYqQbLqyhx5r1IsCRY | |
| 76 | −SYKF4XurBEuClXqwKuONTZZgSbCSBYvFe/yqBEuClTRYtRIsCVY6wGISLAmWBEuCJcGSYEmwMhGs | |
| 77 | −JRIslFM3phzrOsQ54keHCViz9VFiI11fGe901kiLlW6wwOBJh/zYW10EwwUs0A2wIA5Yn4AVEixL | |
| 78 | −gAUZBRa+KcE662A5UeZ7xrITN3I6hydYEafD/yewnBKsswqW8xOA0jfRms/RItxM9oo0HMF6lB95 | |
| 79 | −qVO4c+PM5vKVKyRYaQeLWyYOVo0uIIK7Xa5vGosPDTew6GwEWF8Vp6MjTuKK4WRJsM4SWKYQrEkA | |
| 80 | −ZKwuIYwESxcu2TS8YqyAVrrcAJNx3RaACUZc9f1S8oEyxjrbYNUA3GEE658nyAqXOodd8B4C1hf0 | |
| 81 | −vG/Tyq/i/25yiStl8D40MVbIi0K60Emzhm+vcK7xoo5e3CA84b0SrKEBy2m8GId/vxgIroY3WFt4 | |
| 82 | −wPXo5fxs7pVgnX2wTFdYQ66Qa+MlwxgsdIWbTFco3l5TALl11gJr49xJ+Zfem+nphgIRvF9EXUWA | |
| 83 | −q3HxWwZYzmEIVmjwjl1BKrl1OYyzFliXGB3Xh1IOVs0NULppoGD54oK1ZlL+TcmBZYby+sO8a8g1 | |
| 84 | −ziUyWYmCNQlqBgpWd1ywHr08/xpnUnksI91AOQZ3gVii1RTI5z2UIFg3wNI0gvUFgM9sqrkHD6wu | |
| 85 | −xWBR5kindhwQWNOUKl9MsP7VyB0klXkX6Z6QBOksc22CYH0ZBg4WKNXdMcH6ajBlO/AEKcdpFh3f | |
| 86 | −lot0I8Ry8UB+ZWJg3aOnE6y6POCPqXlUh9tSDNZFUOz8NBS6BwoWKoytIFiI6t14oNclBlYqFAoW | |
| 87 | −IZgEWKgwtoJgoXn5TE0BfDIxsFKhULC+gDSmEyxdXLimq9ENr1in67xTXhxYC6V1Bueom/iuOl5y | |
| 88 | −t8UC69FR8DDyqn87CbDC2AqC9W90OP8Gk4YELPScyYIVxlYQrG9SBP5lXXcOAVho9wrTChZ6F714 | |
| 89 | −ZRhXSNbdBJzQVdyaBVzHp43VpS6xSaQDDYK1ln6xLaH2ZUBgBdkKgnURXEgxd27dkIB1t2sQYAXZ | |
| 90 | −CoJ1Azm37+uwaUjA+ow7ra6Qmp74mOcMmq8vQK4bF9H5110CY92uFaDjXl+dh32PFWi9hdm6jbbW | |
| 91 | −H6qJ6QrX8r1CDeLEhgQU0hIGW0GwdAKrJhTmszuCNBys2fUJnI4adjrEVhCsKwks/BU3DokrdKUZ | |
| 92 | −LIxkddMerRFm+fuj4A4836uIIKIDadJu4ZcVgja5Tti5c4m90jgxlgnW7CAFSjKq6gMWWAOsS5M6 | |
| 93 | −neogWJcSWO7MBQvbiiei5xFBhm5Caua6XIaxKuC92eJNLmMtIiiM2uwEwJo1OLCmtVvVYiUFVmXn | |
| 94 | −yLFYwiNehE5vBeUHuOaGgeW6h/dt9W8PEKw+MVZ3vwqNsYgq68RYfcCa60vgdCCcKtbHFQ5RjJV2 | |
| 95 | −sJaCkWnCBfeaYA8lHCye7dRhXogrnFwXoCxGr1AfVK/QoCpar7DYZRGwBhS8V3b27RXqQ9Yr7B+s | |
| 96 | −jsGB9X262y9uDlxWh/ZlFrbUo6VLnSFg1WFHG/faMgrj9jV83GUgeI8Hlisv+TxWkKrwPBbEymPp | |
| 97 | −ISOv+tOWgn43ASMZmTKwKjti5rH08/rJY9WJzO7Fse8uzU00uz0QsMpaB515N8YifttMUgHkhoIV | |
| 98 | −SEKQC7oE9JB0Q1ywRJbiNtfAwZrW3h098/7pWJl33XTi/YPljH/bmSs/pWBVdsTIvFOO0ribHBus | |
| 99 | −uov4uYWl6Psm5VMPVr3SOLgYy8CmeFPwRbEz3BWKtYWbAglS/SZX/2Ald69wWjhVCd4r1EOzpmkD | |
| 100 | −S9cHDJajsiPuvUK4qr97hV8QRIVb6tSApccDq7Vv+biBBu/OkPkewQkf5n9ha8OWnVHmtwx6dEN3 | |
| 101 | −UqMbQsCqyZ90zyTRFf3ipPzZnGy0clvmTip9iC+izSO79uiVBcaYjnxw3TPpwltMdC9cEgusCAd0 | |
| 102 | −dkY3mPcIL9dzuSOnkxK3mddcWZA/9aEgWFvmFly4xEDm0UmznP3dhA7/7gv7lo9THN0jfTxWKFim | |
| 103 | −uzScfDF/W7y42ozGzFvSfMyMGZ/R3gVmZGAZsG7g8z8CSUdxeDRmRozug3NNsIzzXcvBmgR5mwYJ | |
| 104 | −VjkFh+0SrFCw9E/y4VaFaylDV8xpKtxIMR+a2Ro+k/DLGDg715iDSOGmGgzfruW4Xc9XWwesOqLl | |
| 105 | −QmO83Fd1KN1Y8zli7Vu6fq9z4yQaJcPBwrdmbdp4ER9IQxHZeXWDBKuWdzuaRzpYgU4hgkPjBWqM | |
| 106 | −7u73aaSMDvS83G9yjJwGTNfxZbrhLpb58CyA8wSb1gHLmEEIGh6p8xJ+fM4r521y1XzxXpcxNpnA | |
| 107 | −cn6Cj17EUP9eAuu8/mOs/sBqNe58jHSwzE5hjRhz5TSGXrnoRxYjsraEgeUU/bxP0p9NZorB2MlS | |
| 108 | −YGEwdZHRwXZHDrZaczkYYLmN+YRz4bw6BOvewYNlPiGvRLpC0xWGdf4IKmMudBhYhgpNyAywnBYE | |
| 109 | −ixz4F3XI+3ZY3Qa6HUJpCAOsQCpvVF3MAcoDA8t8Ql7gaQgSrOgWKxwspyFzPoVVLdaauWvNVPZa | |
| 110 | −d8g0588BxlhiXrRpscwzShFYtYG7Bi0SrABYGGNNDomx+oJ1XUjeMwSsqy0GlrsAxvKFbyFYGGNN | |
| 111 | −EIHUBMMrfisQY10iDt1IfaYCrNbgXc5aCZYJFvX7Jm+iXmGhKxKsux+l0fPXO7d8EfKvDgPrX83O | |
| 112 | −oqXSDYUr+QCUUS7R9auhwArByuWnhwwFe4Wue4KT7gcNFgu5f14uwTLBMge7FrrCweKBvlGhxZyo | |
| 113 | −E7RSYvVtVoqxPgGBCTmBPNb15tLkAozTRR7LeCt3U8rAKguC1T5SwQreJKwxK0TiVT5J55lpfJvW | |
| 114 | −GbUjt1yuz+aZd9BmG+8Gt3GtmaSXbnLpVgret+B55M9+SBzKlhsgV9xOoCNd6/qEPoGqSNaJt/RL | |
| 115 | −HxKZ95SAVRvuCeVM6NRpZBe3NYMsn5xiL8FKJVgs1A9KsCRYKQMLg6xpXkWpl2BJsFIKVi09H09R | |
| 116 | −CiRYEqyUgtVBw2YqFaVj2IJVKcFyWfXJFM2K4hmuYHWoEizLguUz0qPDEawyRYJlWbBoGkL38ASr | |
| 117 | −Q1HaJFiWBavBvAs97MAqD/ZoJVjWA6tNUaqHJVgdNONLgmXdx8opijoswaJR+yDBsi5YZsJhmIHV | |
| 118 | −wW8bSLCsC5bHmFMxzMCqCBv+KsGyHljtxpSK4QWWMFhh04wkWNYCywyyhhdYFUbZDAmWdcEygqxh | |
| 119 | −BVZnn0lGEizLgYVBlne4gWUYLEWVYFkXrHaRyRpOYHUGRlVLsKwLFgZZZRYGa3x0722oNdZJLbMo | |
| 120 | −WLMzC6wZ/VQtI7CWWBOs/HgGyxyw31cPuq0J1vjkwGq0KFjl8Q66mo9PzppnTbCmxzNYsW/qtFnU | |
| 121 | −YuUkN26xc601waqPd9Beng/Kml1nRbBqlvWtsuapClTYj3lTp3OpNcGakRxY7BpLgrXCy/qN3rNi | |
| 122 | −O4+hBGtljKExtXjQVY7Y0Xu3zZpgtSQJlm5JsK7qZPGj9woEy7vUimCNj8GN6BF2x45YKtxWBGui | |
| 123 | −L0mwqjZaECx3fvyDBsoHZbHxddYDa2NF9ENuDYx8jTkOcK4FwaorYMlqqgXBWtEc/5gr6erPYo0r | |
| 124 | −rAfW1JhGVunv2tfc1gNrbmfSYE2rsRxYbls/x1xL3cIsxmLxM3RgbVwW02CV9NuRutJyYLnLWfKa | |
| 125 | −aDmwlnr7OeRmuqmDYLXMsxpYWuwIq/9rv95pNbBs3YMAq3ajxcByl/V3yHj9NxBYrHqltcC6qj2G | |
| 126 | −7y5XKhJoCsVtLbDmtrPBSK+xFFju/i8Tnm/I4jOqaqwE1opt0Y+3Je6g5JC5bTluK4G1opENTjZL | |
| 127 | −gTW1td8D7qZ8AweL5TutA9bKZTGvg3gTv0J7hqPd1gFrRfUguWL+8RYC65rdifgMDIUFWKxko1XA | |
| 128 | −WrouNleJtlFnVG84JGDNa2CDls9mFbDcF7+SyAFTIivLzMQtsQRYdeO9MQNCpXIATbHWEmC5x7ey | |
| 129 | −FMinbbQEWHVKYuFiuaIEwGItORYAa60tRpqqakBcoZr6HvzZB2tFTgdLjWonuoccLPe8GxPs3lYq | |
| 130 | −SndW8LJYN945pGDVrc2KYa7aoCDOUJkY7vDGqe4hBcu9IquNpUydkyJGC5xtsNxLshLu3aIZ6MwK | |
| 131 | −Pfgm29SN7qDG/9ydVm28JuTFivHj26JfEB0l2B1UBu5TOmpzZteEfMPE9J6Ne6or5MXS8eMPs5Sq | |
| 132 | −Y5ntGudZPJ0lK4LLdUtslw4gaVKtKB1ZEUd/eOvCS01pl6ZZ+ebC3GVN7TFSn94CGidTltxd3I7D | |
| 133 | −62688mydTsjnL/O2d7LUq+PAA5eetdaZdKG5dOMDLe0DyvHSPZ0sZmV5y8IrpkoNC9VbGqz2anSB | |
| 134 | −NLSvoE021fBSg6K0WROs1uoCY6xoWUOHbCgJVirUVlUgLBWG7M2SquEoC8ZYLWXGuPYSpT4t8a/U | |
| 135 | −WVCUXuHQqkpV+FOrobHdJ5tnWIPVaSGwqvjseaVaQjXchS3pswxYbdwH1sugKgNUEXqvcIjlAap7 | |
| 136 | −JW1VRqjEOmB5MFwvl1hliGiqujXAokExHtkgmQNWpTXA6lQKlGbZHpmijsCYdwsEe9WyPTJGLYrS | |
| 137 | −aAmwOhKcJSE1PNRIjz2xAlhV5YpXNkfmqIrK21oALF/ch5hIDTuBqN1ghS6hjLAySD5RxmjoD6Q2 | |
| 138 | −8LhXqUyQl2J3K4BVEO/hOFLDTtV8YvHQg9WtqOWyNTJIojje0IPV2W8xNanhpLYy/pSmoQfLfFyU | |
| 139 | −VMZ4whargFUrmyPTPKEFwGqjMl1SGdQnrLYGWL7WVpltyByVG7NAs+RPIZVa/yNuo0iwpFKpShG6 | |
| 140 | −JwCWP4FPC27TM9AD6Ym+m182UUp0tn9HNFhGTftIsDyqkQZXVPEknu3zdVWbsbnvIR+7vUjVFu4j | |
| 141 | −Jj7MUkm054YiNX/ZUbFnma6WrO6740Gb+IpD+MkzdoiVG0rU/DtPibWAn3B6xCNRFmwIUbniNfy9 | |
| 142 | −HTOWnYqGz1Pmxo9NdzhmPE1LO8t0rWQ1geXfH/JDB/puqiGyLxum68Ze2BB2beGJnqSP2jRYfcEC | |
| 143 | −83yA+mpd04FmOQAUHo3Y8KAOqmID/Q90zhqQVNY7Exy4tUYb36/hnhpcH/ndvVOAPyH1VTtk4/tf | |
| 144 | −o1XT+WcVcupwUaPFkR4Emw3hAA7WBgf+MPjL5L7Ul6tDYGy8gFoL4BvM/4wDf13gv/5+vuj4Qdg+ | |
| 145 | −KhhCDhabezF2K7afTbRfMmpWppkDVfoBaw7kPO9jPXtzYHLEht+FcSeYbw5chsu7wNbWimIvQu4R | |
| 146 | −5ltM53PcBt/zs72a43fh++2fAhysro/Aom6210bv/xhmdLL9NvWHjH0JinFRgx9KsMLAegbgEew8 | |
| 147 | −Hz4f7H3syU4wwPp/GjzP2FOQd5RdADf72c+0vLcYmwn3+tkL2qi3Qvdp5VoOE/zsTQ2ew720vD/j | |
| 148 | −Vnl7mG8B3JZkBz+kMFB8sF7TdHGBYFP/lEKzqsDQ9NunP0BZC8jhkF0mVl4BtPLvNvt77ECFfhoN | |
| 149 | −cRasY69WVf2ZsWMPVG1lbL4KYzlYf9X0dxgxtYx15ehv0Lm+3clYNizjX75MghUG1vlGY6O9vxr/ | |
| 150 | −q68KFs6cDo5csfH2+dl+P+tVoY3RP8b//tNGdCFev2QfPFBFrbihqlLEXm/qo470sGa+F277CrsL | |
| 151 | −rsPVv9Wy30s21RAYABUfrP+A85iJzE18ZUSS/H9hHP49Bx7Y+WATIyyqxb7/bYTk7+fA91jvR8je | |
| 152 | −fRZGY3ygaM+3cbBahUNshQlo3EazXdVbT9DrL0EpWjObtFjhYP0JHCeE2/sOjMKlSgiOCFFK9wVf | |
| 153 | −4m/+Tw3eRouFru9Nsli/EJgsh2sZ+wrkveV/hlsoxmF7OriXDfagg/olo0U0XkmoUVEcLDZYjuoq | |
| 154 | −VLWDwPo4PBIgaAKdQ8SQvJOj4BbGPrBxb134FvsYt1hdWfC4scHPwP4Gt3dPvyhsXpvfQOqvoNP5 | |
| 155 | −vgpj0XgVLnAAOOgsj+fAwqrpUCxjLHBU8YYAAus7kG108Dg2vC6xqbfDOUN6sk+xF2z6sgd53PSE | |
| 156 | −2HUVNWDXGDj3Q53bPGGZToXu9Q4bA1TGvZeM18DVGlYhry9YATWQBdpqrBc+L0IY2tuPoMO0QfHu | |
| 157 | −XWSW/gPGYn/uZQ0M/l6wwSLGY8J8HS41D4CDhTHYN/hFo7EDALk7WpaDg8h7ir46SoQ68sAKCFur | |
| 158 | −IkiOg8CKzB6FgLUe4EcijgcYi+A8KN6rogb0v4DRP2QbUdocvqHQUxpZL7sgKimwOsLnhvYFS21t | |
| 159 | −QbUqkWCN7vNRJ6eA/izFbIep8uwhjNNP5kBh1e06YGBF9vUZJI5fEyfRpuW+EwYWGjO0TWXAwdJ/ | |
| 160 | −YnrB+0Hb0XKfpv9UgmU0BJbt7hUAAAvPSURBVAfr9gTB6mH3YVfQTxfs2N0tMyHnRBhYgrdfi23f | |
| 161 | −tI06Yu613gGz/ATW7mTBosA9dJRK/BjrioAr/HEg2gro2BSw/zokjZAFm9mhMQ5wzLoCAys8WrwK | |
| 162 | −ik+ZfUhhukLAIuwge7M2Dl2h6udeMZcds+m/YRTbTZZghcZYQVf4N97TiwFWD4ZScIuf+of2oxyj | |
| 163 | −O4KukDfgnzQ0WGKn++BfTK7uEnsZrrCLwq2BclUWMayuv+D9XAqH9jGMnh6J5KoIcvaF5dyA0qgH | |
| 164 | −WtrYKP13wrpeb/wax5AhnvEKBYsda209cQBmoVfkYB1AsA6I9w6AJsEKBetvGFmh/3qeneERVEyL | |
| 165 | −tRx0Ho+vMs2UzQze74LPi3hdJKy4J/ylsTty9XjIqn/mDDh471SVaeGPkowP1n4bueHP2m/ZzoPw | |
| 166 | −sPhqCow10J9TcgsPmvTfdXqf9NNSDv7FaP0b5hUxEwp1yPf7Q8HyNnq4Kfsa682B33CjeC6F9PQ9 | |
| 167 | −f8SQXoIVmm6YQhmdX6jFe3X4AYsJ1nrIEx2+JwR+y9FMYdeKTNwF8HsRwY4FnduDDwJ9P1z5U9OI | |
| 168 | −kVn7Hy17gLeC2qgGY/cAwMIj1Vef6L0PIz5+U6eq2hsSIy6sRlVRj1HfwY4tQPd1yIbo49LX0Bzl | |
| 169 | −QC69X+2hcEr/DfYMbw6zWN+F/CNsly33HT++n7+H4U/2DdaVQ51LXFwowQoD600NFu5hL4MOY6nR | |
| 170 | −G6qrooCFG43lv3n7u7nwtVNsu07x1AIoPYHNRR7wXR1uRotAeR/yliLqfTPX2KsNwy7HDnZwSqBT | |
| 171 | −n3DCXVGmRVSC7wcsdp8GqupA+5m/2R+ax3rfZnRZcPNetK+qCqOPUOxNS6V+sj+GqsgRLqLrwnCG | |
| 172 | −Aiw/kqerDpVHaYtpEQr93EbS92knJFjht3RetuMPw2/E3HkkIr8QeLnA/M3bKIClrSkWOa7TIv+h | |
| 173 | −MZo/RVc/XeL/CdmnTUcYuLuznpobxp0a0KFWRnvQUVbfJJcBliJuQr/+WJGiPdAyBfLeCM1jeRVT | |
| 174 | −9GpXmZK/mTqxPTunKzOa6Jo6x3y/qmuMMprWzFFs7xn5DhFi3We33WkEorumK8U7uP099mQRLp4a | |
| 175 | −6VyxacGGEMmhY9vLsm0Ln7/LQb6wPHzKXIV4+RHzN8de+sFVevaM53lO9dgG3XYnub/1ikJ5nKcU | |
| 176 | −Bd3ig+ZHBPYib7R3fnb+5u6B3IRudSjRxgAnPGxm552Jf5c/ua3kWJlE9PpMS111vHJslEc8yIF+ | |
| 177 | −UoNQgwLoBqOVYpRgSSWtRipIDC1R35NgSSWn7lpR5zpG5VgJllQyaq0UPbOYTw+RYEkNWG314sE0 | |
| 178 | −1XHm7UmwpAYkX3MlUkUpBk/c8ukSLKmE1d5YaT7ur7q/h0hKsKT6V2erp7qiIJATr27t/0m+Eiyp | |
| 179 | −aGrxNjd7GmurqyrLSxziOX9Clc2JPUdZgiUVTaBECFeU17Yk/nBuCZZUNBWEMFVQUe1paRvgY0kl | |
| 180 | −WFJRXSEfFt3W3pHsY24lWFJpkQRLSoIlJcGSkmBJSUmwpCRYUhIsKak0g9Vab0zwqq3nQ057vQ1b | |
| 181 | −m96OuuvL9XySoZ+1NG7b7RcTO7z1TebErdcbt/WtAHAwuPJg49am4LQA39Z62RgRqq8X2UmP0SYH | |
| 182 | −Guu3RS+q8O5WsQW2RQNuwtuCWiV2U9TWG2o3WlDs5e/11jeeSAdYEfMKt9tpTqFaGuW7juXwSYb+ | |
| 183 | −Y9NVAIe2B49rfx5ubeNzvHuX22i/8FqiYmXhW+Yi2AKVMReb8+6lAnKAGEgnSs3sn0KzCtXRf4iy | |
| 184 | −5QLRav69OpWDKj7Rw96fSa0yms95vs/GV4btEVIq0r+3iO91BFvwNWpB5fG0g/WyBouamh+zw8V9 | |
| 185 | −djw5EzhYvRdA/jbPdBj9Hk1MLW3aYHM820OgFDY9aaPqWSFaD7lbPTMh30+Tox2rmxeICfWMV0KU | |
| 186 | −YMUF630dxm1tbiwC+9tnIjdcr4lWw20ubmoEGOdH1OybPUU0PxV/dftWXDw3bHaduAuoQd4+KpqF | |
| 187 | −exXBuNO0iC2oOX6fbrCuAF71+GUtL6KSKNuZBwKs12xU1eGkDb7HvstrxPyWivy9puHJsf+dsSh0 | |
| 188 | −n+M2eBZJ/Bh87wz7GE2O7rIZ5R0O2SRY/YD1HbATGb1TqDJfmF6badYg/Y5qP2HU8RtFk+vf1ahg | |
| 189 | −5Bh4iTO3L5qlQ+P0Pzaaa/+uLW8PewJoavEGXmQvrWBlGzVmmprbOOWBQpFesD+icrA6W71i82qE | |
| 190 | −ZR1dNlRR9Me8tB93f3OU0afRrimj/X8FlVzji8TUOXyDLF40mfk+kvusBCs+WBVGISNvM9XkDJ0J | |
| 191 | −rUDpjaLV2luahZtrYzq0MlGN9C/aqKN+ciE/YF15Ctqt9/lf0lNU25YdNveiGqQPMdbzF9uod9IM | |
| 192 | −1q2Qu/lEyBkEAuzdq98KK0iKJucniOE6sdkP0dT98LEi28I96PePU6mAn4H+UmjZUVxRfITt0kQN | |
| 193 | −m8Xw+AEJVhSwOoNg/QrgzmAEHlq7YeHz4aUcXgC0WAvgslOiEsh/CiKpGhYV9HuWikKKNv1wlB60 | |
| 194 | −Yi9Q1eSP8zJGH+bk/SENYBlDvHipyIPZ6KJmrDNOyNPcGuamg2D1ziS/fgUPqdArbkbzS1Xewf4c | |
| 195 | −vy7053gditc0HlL9GHLxstgAdkXTnhMBVilrk2BFActsCsJmOjaFtszoSHubPaFbhoJ1vIjs0MkF | |
| 196 | −oCowDsF5DLJp9SpeknEBZG/XzKJF60OK6Z2cQnvpyVf0GxhY7OAC6rw5tOei7BoEqxej8F9TKObY | |
| 197 | −wU4uB/SK2aA/z3z3UUjPus7BjyhGJ9h7Dsw4wfbmIEPYl8TvUeFOvx+tXf5pCVa/YPVu4D05ZXWU | |
| 198 | −EhchYCFXo45QTw93duAl7g+UiqSm/ruOH2E4wt4xwcJ9yNWofURUiwBrd7rTDeiBPbdnO0B9Lg5Y | |
| 199 | −vpmgPm3UKcSzKcLTGWUaLyqrvV8Dx0uUJTmETClU8IhgW3SKvf4R3OzkmFw8pXYJVnxXSL+z97E8 | |
| 200 | −ozRRTLAO6ZCNsfoHOmz2U52xl9BiKUGLRUXW7EdEzvG3WraZDTpWJKp+ptVihYPFj2Hv+dH6CSZY | |
| 201 | −vinC5VFfcboyY88V8N/oFY2C7xR1vaoB/Jp/0LFVDu2BV7QJ9PiAf/A4fhzaKsgm4wVKhWQpTh5L | |
| 202 | −6PBiyDsRGyzkitfvNAKr5RhYhcRYIq+jG2DdBXeYNOZBDjdeIsb6IMk674mDdWDVFNE92AW2mGCh | |
| 203 | −FdVCe7JdOXazV9ibRVVuu8ag+R0d7Ge8CnMpjqezfR00AstQpWQpNliPlf1cOLB4VZOP6/QgGhao | |
| 204 | −wb0Kctifgr1CwxUaddXGmHYJvee4I0aamnqFf7LZ09wrxL7encYXxrZYiyHXeKbPX8vz3qFIazLF | |
| 205 | −6WOPUoVu9Q1ebnKHqPf+lRL6Owc7kGixqMb4rTCZdXhI9eBo9kqWYoM1nUprM+pOx7FYRfBR4Sd/ | |
| 206 | −oelHeMD/eQLo14E8lgjeeWb9bwG7NF2Un2QskMc6L915rPsBCmsbn5wOKsVIEU8F52Cd2asZ4X41 | |
| 207 | −FRDN3/aY3f4Sz7xrW58cBbPQQFEW9Ble1f5F0Fc3zOePnVhMi7drjh8ZaWQZvPcD1ssOyFm3rWG5 | |
| 208 | −g9d5jKjoJ8A6Qw9fEBX9eqfg1g0XYBx/hjLv6xpE5v1n1CP8iqhua1RTZmeeMffyknOZsW2VI/2Z | |
| 209 | −994N2fxeofZ8RB4raLG+ZDoyDKr2Z9P9Px5v9S7HqEmddYr6HsXcNo0+KlbaZ5GB66EbWJD9tPlh | |
| 210 | −Eqz+YqxdOvUKHaJXGL0G6cxgDdJj/F5hDm+39XRfgyruoyO8mSfvP3oq8CgU8iDB24YH6bah8jRL | |
| 211 | −PVhtnkax0OjhSavelmZPc1vYKlONnhb+1xC96PV6dpsjFl5vbqL9Xvd46Kazr8lDHY4DYiXpIG4b | |
| 212 | −NOroECVJkRe5R/QKvUabHPB6ml45FbbKkPHSbApPB/+pPa8YHu5gcxMfvOD1eGj31zweDNNagi1t | |
| 213 | −iM9GbfE0p2V0g5QUk2BJSbCkJFhSUoPW/wfr5tj8wgE+HwAAAABJRU5ErkJggg== | |
| @@ -1,206 +0,0 @@ | ||
| 1 | −iVBORw0KGgoAAAANSUhEUgAABIsAAAHpCAYAAAACi7yYAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A | |
| 2 | −/wD/oL2nkwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sLCBAiCLMGMtAAACAASURBVHja | |
| 3 | −7d3rkds4FgZQaMohTBY7ObRCV+fgyWJy4P6wJavVIgmSAIjHOVWu3bElPkBSAj5dgpdpmqYAAAAA | |
| 4 | −ACGEvzQBAAAAAHfCIgAAAAAehEUAAAAAPAiLAAAAAHgQFgEAAADwICwCAAAA4EFYBAAAAMDDD00A | |
| 5 | −21wul9XXTNN0aHnP749Z39o2rK0jRzssLX/pvVve9+61S69Jdey2bn/sMTx6TAAA/cIW+oVb+2tb | |
| 6 | −3p+izwioLIJsHYe9X+a979vae89ut6Pb1+txBwD0C3vZN0ERrFNZBAct/ZJxuVx2Vdg8v+/oLyEx | |
| 7 | −69j7xbq2/1u2e0u75Th2Mevf8ytVzDkDAOgXjtYv3LquVP0nQRHEUVkEBTsJve/r0hfu2hdz7e0W | |
| 8 | −27HQ4QAA9Avr7BcJiiCesAhO+GKK/YIt8SV+RscoNmippUPl1jIAQL/w3PUc7Y8JimAbYRGc9KVY | |
| 9 | −Yu6b3OsYNUTRuQAA9AvL9AtT9LsERbCdOYsAX74ZOiVbO1M6LQCAfmH7/TzohcoiqOhLK+eXV4p1 | |
| 10 | −xP4y1krF0X1bn7dXBwIA0C+ss19oagAoR1gEJ4j9osv5iPq965imKUk59eidwNc/AIB+oX7h/HpK | |
| 11 | −tzeMzm1oQJIv7Ra/eO/7sOWxtgAAtN0v1N+DdcIiyPQFlPP1JbZpTyehl19q1joQOhgAgH7hOf3C | |
| 12 | −Pct9tz36c7DMbWhQwPMXUYkOQ6517P3Sj/216axJEdfWoyMBAOgXpukX5uqv7Xm/W9JgnsoiSGxr | |
| 13 | −4FHiiyvlOu7v21pu/PqLzuuvOTHtlmIZW/bz+f1r6177ewBAv1C/8FwqjCCesAgSdwK2dAh63e+5 | |
| 14 | −fX8XuBxtt1SdkZhy6djt37vNOioAoF84Sr8wV39tzzIERvCd29Agg7knQ8T+unTk15mc64j5El17 | |
| 15 | −KsbRW75inrqR6glj79rELWsAgH5hmn7hmcckpt8HI7tMRjYAAAAA/KayCAAAAIAHYREAAAAAD8Ii | |
| 16 | −AAAAAB6ERQAAAAA8CIsAAAAAeBAWAQAAAPAgLAIAAADgQVgEAAAAwIOwCAAAAIAHYREAAAAADz80 | |
| 17 | −AQAAqVwuF40AABWbpmn1NbvDIh0BAKDGzg3n0T8EgD7sCot0BAAAmDNNUwj6iwBQlS3fzIduQ7vd | |
| 18 | −blobAMjuer1qhKZ6o4IiAGiZOYsAAMji0w+LAHC6jx0/unkaGgAAAAAPwiIAAAAAHoRFAAAAADwI | |
| 19 | −iwAAAAB4EBYBAAAA8OBpaAAAFDf3ZJa5J6htef3za5eeyDb3urWnxsQuM/V7jmxX7Dr3HIMUbfj6 | |
| 20 | −+qXjurZ977Zja1vuaVOAnqgsAgCgqKWB+rt/2/r6s7Z/z3aesf0x+1fjdgFQjsoiALpyfRng3J5+ | |
| 21 | −Fb7/2+3NL8Xv/m1pWa/veX7t/XXXN4OtuWXs+fe59c/t45H2erd/Mdu/9XX0b63q5zWkWHr9/d8+ | |
| 22 | −rtfFapOY9byz9L7X5e7ZzqVKmT2VP3ts2cc966+1MmfuGKkkAvhFZREA3XgON94FNnMhzlJQNLes | |
| 23 | −1/ffX/f62ue/fw1d3r3m9d/nlhu7/rX22rv8LW20d/voT8ztYbEBzNJrS4YMubbzzNCidLs+BzX3 | |
| 24 | −datsAjiXsAiALrwLfPYGE1uXtaVK5l2YNLes2OXurdI5svwtbaSKiFdbg5Cl18f821y1UupAZu92 | |
| 25 | −1njblwobgLG5DQ0AZqSofjkSnOSuvsmxf2fsB5SUMtT5vN2+LC82xNoziXaJNthyO11MBdHS7YUA | |
| 26 | −5CUsAmAo91u97rdGLc1jdKQi5t08QiH8uSVrTcwcSkekWv7avuTeD1hzD2TuwcOWqqIS8wa9C01G | |
| 27 | −nD/neV9fQzQAyhMWAUAma5NVA23KEeLMhUZHJ5g+e/9jXyscAqiLOYsA6MK7+XLW5gWK/fdnsYHP | |
| 28 | −2uvWJtveu969ti5/bxsJzNgTDOx5JP2z1yAmNsC4T7j8+ifXdj6vs7VjlGsdQiSAc6gsAqAbz7eY | |
| 29 | −Pf9dqmVtWd7cbWivE0LPbe/rv80tL1Vb7Vl+TBvl3g/a8nx70dIj7e9/v/b6mKer1bBfc9tZ65w8 | |
| 30 | −pdt1bh1zQdFaGwNw3GWapmnzmy6XQx1wAIAt7gHTjm4LJTuWv/uI084QYC482Pv6LfMSvXtc/Nag | |
| 31 | −pNR+xb7+yLYeXX9MG669ZunYpN7mEeeJAsZx/4y7/P7vmP6U29AAAChq6yPm9z6S3n7t34/c648J | |
| 32 | −Z97N49TKuQDQOpVFAED1VBY10rGMrCwCAMpRWQQAAADAIcIiAAAAAB48DQ0AADqSciJsAMYkLAIA | |
| 33 | −gI4IgwA4SlgEAADAZh9/X9/+/ed/t8Ovf37t3PKWXje3rq3LTP2eI9sVs961969t59r2LbX16zJi | |
| 34 | −t+Xzv1vyduE4YVHpD9SZsuDnX4COlA7HLD/Ferase2lZW7Zh6/a+vn6pDda27912rK0vVbsCAEB1 | |
| 35 | −45qFwf3H39dNIcm715fY/rWQKsV7Wj5me93Dn6VlxgZKnEdYVPLiXAgTPq7X6BBh7rWpln/kPWv7 | |
| 36 | −LigBAIDGxzUrVT+vocTS6+//thYs7A1plt73utw927kUeixt3xnhWEybzO13qe0VHtVDWFTq4nwK | |
| 37 | −cmKDni2B0NLy7/82F/4srWdPYLRneVvWUWvgNNfuAjIAALoZ10TcHhYbwNz/LiYwStpvf3PbU47t | |
| 38 | −zL0v727/WqvqijlmEEIIf2mCAh+oK0HR0UBhbflbbuVKsT1ry4vdhhRt/nm7PdZdYr0AADCCreHC | |
| 39 | −0utj/m0u3EkdcuzdzntQ09MxS7Gud23iFrQ2qCwqeXFmrjBZWv7n7XZ6WFLDNgAAAGNLGeq8Vilt | |
| 40 | −ndz53fKO7sMZc0DlPjaCpfKERTVfKBsmqy617hr2de21qeduAgAAzvM6YfKWypQS8wa9q6IpVT3z | |
| 41 | −vPyYp4pBLGERu55i1sSXytO2q2oCAAAe44MMIc5caDQ3B1KSsVzF4dC7p6KthWgqiOohLKr5A2zj | |
| 42 | −RNW511/LurY8NQ4AAEhv661OMY9RXxwDPAUP9/+OGjtsDB+ObufzOnMFOTHLnZvoWhhDLBNcl/xA | |
| 43 | −PRherIUka7dfLS333Z/a9j/VOoRIAACwc0wy86SzL/3tmadvLU12/Pra2vZryz6V3OZ3f44eMwhB | |
| 44 | −ZVGZi/jpFqi5qqAj1UJry495Gltupbdhbh1zQdFauwEAAL/72i+PkU/x+hoeRb93O/fMi1R6Iuet | |
| 45 | −xyz1emNDQRNc10NYVOoieQl0jnoNN2KWXyoo2jMH0lnbfKTdzm5nAAA4bXyzMJnyXHVLC0FA7fsV | |
| 46 | −cxveu7mCWjoG1EFYVPKDZ2GS5diAYW0ZtQYYJZ/gtrSuexs9h201txsAAFQ7vtkYMGx5/dHXHgk/ | |
| 47 | −atmvI+9PNYF0ioqvGqrG2O4yTdO0+U2XSwghhJuBNABQwPV3qL+j20LJjuXvPuL9KPnRBWCbtVvE | |
| 48 | −hCrsOq9+96Muv/87pj+lsggAAKDFAeBLsCBIaJ9jSC2ERQAAAB0QHgGpCIuI++JZmZRbmTkAAFTW | |
| 49 | −h98QHn1cPzQYFPR5+6x6+4RFRJ7IN40AAAA19dGfwp+Yx6HHPr4cQFgEAADQuNfwZy08inkEOzAu | |
| 50 | −YREAAECjYiqKdvl50bg04Ujg+Xr7Ze5bw1q63VNYlPzgXzUCAP13zNyeDJB/bJErCAKKB0WtERYB | |
| 51 | −AACcNWA9IRBy6xnDX3eColXCoowUbgLQk0kTAMQPRguFQItPOHuzDXuCoss/jieV9Ul+Hrg2TwqK | |
| 52 | −WnvioLAIAABgy6CvgiBoz/apKGL4a1dQFE1YBAAA8DywK3hrWOoAJ1U1EXR3XQuKNhEWAQAAYwwW | |
| 53 | −Gw6B9u6foAgERXsIiwAAgLYHgoUnia4tgBESwcL1UUlQ9Hn7bCo8EhYBAAB1DvJOenR860GLoAh+ | |
| 54 | −f4ZUFBS1RlgEAACUH8R5ZLx9hJyfMYKiQ4RFAABAuoGSEMj+w9mfQ4Kiw4RFAADA+iBICAS08Fkl | |
| 55 | −KEpCWAQAACMPrMwLBPTyeSYoSkZYBAAAPQ6ahEDASJ95gqKkhEUAANDaoMgtYQB/PhMFRckJiwAA | |
| 56 | −oJYBjxAIYNvnpqAoC2ERAADkHlQIgQDyf+4JipIRFgEAwN4Bg3mBAKogKEpLWAQAAK+DASEQQDME | |
| 57 | −RekJiwAAGIpbwgD6ISjKQ1gEAEAXhEAAZPl+GSwoCkFYBABA7Z10IRAAZ30HDRgUhSAsAgDgrA64 | |
| 58 | −eYEAqPl7atCgKARhEQAAR/17CSGEMP186WSHa9HNEAIB70zTNMy+Xi4XBzyRkYOiEIRFAAAs+ff8 | |
| 59 | −gYcQCICSRg+KQhAWAQCMSQgE0J25KioVR/EERb8IiwAAenJGCPS/6ctgZHp0sG+OB0AFXkMk4dF7 | |
| 60 | −gqI/hEUAAC04qxLof5O2B6B7gqKvhEUAAGcSAgFQ2HOlkSojQdE7wiIAgFxOvCUMAFgnKHpPWAQA | |
| 61 | −sJUQCIBOjFxlJCiaJywCALgTAgHAEARFy4RFAED/zAsEAKvuVUa9VxgJitYJi6DmD+uf7//+8s/6 | |
| 62 | −a969ds/yU6xn636uLWttu9e2dakdX5cRuy2Xf/K2ETBDCAQAbHBWUPS63toJi6BSS8HD9DM+eJh7 | |
| 63 | −barlH3nPme2y5h7+LC0zNlACdnaq/r5+v/Zzh0NCIADotsJIUBRPWAQ1fjg/BSKxQc+WQGhp+fd/ | |
| 64 | −mwtJltaTOzCKbZe5fSoV6giPYKXD9BQCFSMEAoCx+x+Cok2ERVCZtUBk6e9TLP/5dqrY8CfmFqy1 | |
| 65 | −7Xm+/evdenO3C5CgMyQEAoC+xibT1EV1kaBoO2ERVCp38LG0/CPhT+vt8q4dlsIrARVDdBTffB58 | |
| 66 | −hGv29X7+d3v8/+v1+ui0AgDEqiUo+rx9NhUeCYug48FcCOfPI7T3faXmQOrtWECJa/eo5xAIAKi8 | |
| 67 | −v9Dw/EU1BUWtERYByQaXe8OQ5/fVXNUEvVyruQiBAIBaCIqOERZBJ7ZOVJ17/bUParfs1+utaGu3 | |
| 68 | −oKkgIqczrpfHuf+l43NzMABgpD5IQ/MXCYqOExZBxQPCI6HDWoVOzCPhlwaNJQa8c3MFCWPo9Zov | |
| 69 | −zbUEAPRGUJSGsAgqE/M0siOBydryY546VmKw+jpwzt0ukMtZlXOuBQAgeb+m8uoiQVE6wiKo0Gsw | |
| 70 | −kmKwOjcvUEuTMadul63rjQ3STHA9SGdJCAQAUA1BUVrCIqjU0m1ksYPFtWWcFWrEPHZ+7rH1Z243 | |
| 71 | −43BLGADATD+pwuoiQVF6wiKoWMzgce01a4HMGQPZLWFXim3J3Y4G+w11boRAAABdERTlISwCoHlC | |
| 72 | −IACAgn2v6dczUmurMBIUpSMsAqDejoh5gQAAiCAoSktYBBQf4BuIIwQCACAVQVF6wiLAgJyk3BIG | |
| 73 | −AEApgqI8hEUARBECAQDwpX9Y4ZPRchgtKApBWATgS14IBAAAb40YFIUgLALolnmBAADI3ufsuLpo | |
| 74 | −1KAoBGERQHtfyEIgAADIauSgKARhEUBV3BIGAEBzfdjOqotGD4pCEBYBlPkCFQIBAED1BEW/CIsA | |
| 75 | −DhACAQCMpbYKmmmaqtmO1quLBEV/CIsA3n3ZmRcIAACGISj6SlgEDEUIBABAT16reWqpNGqJoOg7 | |
| 76 | −YRHQDbeEAQAAWwiK3hMWAdUTAgEAQGQ/9qnSqHSVUWvzFgmK5gmLgNMIgQAAgDMIipYJi4DkzAsE | |
| 77 | −AADnu1f5mMfoK0HROmEREE0IBAAAtOysoOh1vbUTFgEhBLeEAQBAr0pWGNU8b5GgKJ6wCDonBAIA | |
| 78 | −AEYnKNpGWASNEgIBAACb+vODzmEkKNpOWASVMS8QAABAGrUERZ+3z6bCI2ERFCIEAgAAanC5XLJW | |
| 79 | −F9Uyb1FNQVFrhEWQ+oOxUCgkBAIAAHaPJzIHRmcTFB0jLILaPrSFQAAAALsJio4TFkEhQiAAAKCq | |
| 80 | −MUqH1UWCojSERZD6A1coBAAAUJygKJ2/nE4AAABASqUrlgRFaaksghQfhD+1Af1QHQcAQEsERemp | |
| 81 | −LAIAAIBB1fCI+yMERXkIiwAAAIDmCYrScRsaJOYWHlrkVkoAgIHHMB08FU1QlJbKIgAAAKBZgqL0 | |
| 82 | −hEUAAABAkwRFeQiLAAAAAGaMFhSFICwCAAAAeGvEoCgEYREAAADAN6MGRSEIiwAAAGB4l8sl+TJb | |
| 83 | −fsLayEFRCCH8cEkAQJkOTo5OGAAAaY0eFIUgLAJgcCV/8VpalyAJAOB8gqJfhEUADKPmUuh32yZA | |
| 84 | −AgAoR1D0h7CIrgduBlp9DqqdM4xyHj9vv3MTACAfQdFXwiKAmcH5K4P19o9hT/vlfAQASENQ9J2w | |
| 85 | −iO4HjQZUGKyPeXxG2V/nIQCQyuVyGa5PJSh6T1iEgR0kOIcN2H2OOA8BANoiKJonLAIwYG+6vfne | |
| 86 | −Ls5BAIBlgqJlf2kCeh/oGVRyxvntvNO22gkAoE6ConUqiwAyDthDUOWRsi1xDgIAHHFWUPS63tqp | |
| 87 | −LAIoMGAXdhxrP5yDAABHCYriCYsYYuBnkIQBu/ZCmwIA4xIUbSMsAjhhwI42Ort9tTEAMApB0XbC | |
| 88 | −IoYZABoY4Vpoo120jfMQACCVWoKi1ibRFhYBGKhrD+0OANAdQdF+wiKAkwfqBusCCwAA0hIUHSMs | |
| 89 | −YqjBoAEp1Pe54LoEACAlQdFxP5xGAOebpilcLpfh9rkVKY6NUAwAID9BURrCIoBKjBQY1Rqc5Gz/ | |
| 90 | −uWULkQAA0hAUpSMsYriB4YgVHLR1rfR+ftb0eVBDW79ug/AIAGA7QVFawiJgqIH5O7UNznsOjGpo | |
| 91 | −69rb9nn7BEcAAOsERekJixhuIN77YJxjg3OD9D4/C1q93gVHAADLBEV5CIsAKhyk9xZonhV09NSG | |
| 92 | −giMAgGWConSERQCRg3QD9PaOmXMSAGAMgqJkHc0Qpin85ZQip5oHMgZZ7BmglwwhejlHS+/HSLeY | |
| 93 | −lj4nAQBqJChK2nkPIQRhEW0NisAAvbXvmslxse8AgDFcNoKiPIRFGMhCxV9+LZ+jpYMitAMAQA6j | |
| 94 | −BUUhCItoZKB4HwAZCGFwPt71v9b+joE2AQDa6sO1ZMSgKARhEUCSwTnaXfsAAPRl1KAoBGERmbSU | |
| 95 | −SEvPcY62t72CkPh20lYAANuNHBSFICyikcGOQSKtnaejEhQ5PwEAWjd6UBSCsAjAgFwbD9N22g8A | |
| 96 | −YJmg6BdhEcnlmNi6pW0G134egg7tCACQk6DoD2ERBjuAa157AgAMTVD0lbCIpFqu0FFdRM2D8NrP | |
| 97 | −z5zbJ9jQrgBAe/25lvoagqLvhEU0O5Ax0IE+OxbU8zkLANA7QdF7wiIAqiXM0MYAALkIiuYJi0im | |
| 98 | −xYmtc+4DBt+ue+0IAECdBEXLhEUYlAMAAAxstB/NBUXrhEUAVNepEAQDAJDDWUHR63prJyyiukHj | |
| 99 | −1kFi6kGlW9HgXIIiAAD9uRwERfGERQAAAEDXBEXbCIs4rMdKHNVFcM41oqoIAMDYJzVB0XbCIqqy | |
| 100 | −d6BogAkAAMCrWoKi1ibRFhYBsImqIgAA/boW+nSCov2ERVTz4VLbQNGtaAAAAG0SFB0jLKIbqhLA | |
| 101 | −9QsAQJyefxwXFB0nLIJBP0BpSy1himsCAICaCYrSEBZRxaAx1UBYdQK9XRsAANBKf/Xs8ZigKB1h | |
| 102 | −EQCnEvICAHCUoCgtYRG79Dyxdc59Bdc9AABn9ud67NMJitITFtEdVQoAAABjEBTl8cOpBZBOjl9q | |
| 103 | −eg5AhbsAAG32UWvs1wmK0lFZxKkfNLk+UFIv1+03AAAA9RIUpaWyCCCRnkNFgSkAgD7cnLOrigRF | |
| 104 | −6akswoDRvlMxt2kBAMA8QVEeKovodhB8uVwEPBTjXKvvMwAAQL9Uny6F0YKiEFQWAVT7hSxMAQCA | |
| 105 | −c40YFIWgsoiTBsSlBsGpq4umaTKAJ9t1AQAALfVHex8bjRoUhaCyCKDKL+aavngFYgAAjGbkoCgE | |
| 106 | −lUUAmwlPjlOhBwDoC+rP1Wr0oCgElUWc8IFY+kMl9fp8OYx9HZQ4/oIUAAA4h6DoF5VFACtKBoSC | |
| 107 | −IgAAatdrn1VQ9IewiKID5V4+VEx07bz3pQsAAP0QFH0lLGIIqZ+KRl9qODcERQAAtDK26o2g6Dth | |
| 108 | −EVCMwG6cL1wAAGiBoOg9E1xTbHB/9oDYRNfUSFAEAEAr/dbe+q6ConnCIoATv3BrJxQFAKBHgqJl | |
| 109 | −bkMDKGz0aiLVVAAA+m5nEhStU1nErB6fguZWNM4+/wQlAABwnrOCotf11k5lEUBmAiIAAPRjzyco | |
| 110 | −iqeyiLd6rCrKtT2qi5g7z1QSAQBAHQRF26gsAjhIIAQAgL5tvQRF26ksAjhomqYvfwAAgDrUEhS1 | |
| 111 | −Nom2yiLeDnxTqTWVvlwuBvUUuYZUHQEAUKve+6qCov2ERQAZCY4AAGihr9pbf1VQdIzb0Fj8sDjC | |
| 112 | −wBi+X18q2gAAIC9B0XHCIoYlzOIsQiMAAGrup7bcVxUUpSEsAjjxyxgAAEhDUJSOsIgsA9dWqnZU | |
| 113 | −F1HDdSc0AgBAP/UYQVFawiKASr6MAQCA7QRF6QmLACohMAIAoMY+as39VEFRHj+c+qQepLZ2a9fl | |
| 114 | −ckm6/9M0ub2t4XPj7C9C5w8AAOwjKEpHWATw5F1QUzpAEhgBAFCbe5+41n6qoCgtt6ExdFVRru12 | |
| 115 | −O1FfLpfL40+L1yUAAPRMUJSesAhgg5LBkcAIAIDa1NZHFRTlISwC2KlEaCQwAgCAc40WFIUgLBqe | |
| 116 | −W9Dybb9B/jgERgAAjDaOHKWPOmJQFIKwCCCJ0nMaAQAAeY0aFIUgLCLhQBnIdy2oLgIAoDY991FH | |
| 117 | −DopCEBa5sMk60NfGzqPWz6cc++K6AACgZqMHRSEIiwCyUG0HAMAIevshUFD0i7DIBW1QnHl/VFHg | |
| 118 | −fAIAgPoJiv744XQAyONyuQh3AIDmTdOkavqlj1fzsXKO7CMo+kplEUBjnQkBFAAApCMo+k5YNCC3 | |
| 119 | −oJXfL4N7AACgxDjm+U+r48ySBEXvCYsACnxp+zIGAIC6CIrmCYsGo6rovP0zuAfXAwD47qb0mKZk | |
| 120 | −lVFL54mgaJkJrvGFAax2MlzvAAD0QlC0TmURQAGeIAIAwNn90RJVRrX/yHhWUPS63toJiwaiMsAx | |
| 121 | −wPkEAACjEhTFExYBcAphFwDAOXJXGNXYzxMUbSMsAgAAALolKNpOWDQIv+A7Fpyv5XmLzLkEAOjH | |
| 122 | −6p+2eL7UEhS1Nom2sAgAAADojqBoP2HRAPwC4JjgXLL9AAC8U+IJaWcQFB0jLAIAAAC6ISg6TlgE | |
| 123 | −QBTzFgEA6OttcUYVuaAoDWFR59zi4diAawEAgBEIitIRFgEAABDFjzx9a7m6SFCUlrAIgFM7EAAA | |
| 124 | −cISgKD1hUcek/o4RuBYAANiitR8HBUV5CIsAAACA5gmK0hEWdcqv9I4V5JLr1ybXAgDov+Kc2UtQ | |
| 125 | −lJawCAAAAGiWoCi9H04rYpjU9iu/puAz4ZLlOpimyecNAECnfb0cBEV5qCzqkCDDMcNxBgAA0hgt | |
| 126 | −KApBWEQEv/IDJQnVAACMA2sxYlAUgrDIIItqPjgdO1wHrgcAMO6AeowaFIUgLAJoml98AAAgvZGD | |
| 127 | −ohCERRiIahuK6PXXN9VFAAD01rcbPSgKQVjk4sMxBNeENgYAIIQgKLoTFjFL5Qzgs6JvgiIAfI/A | |
| 128 | −H4KiP4RFYJCMjpT2064AAEMTFH0lLNLpx7GkUTWFlbm3xXWhPQEAchEUfScsovpBKBiU+9wYrS21 | |
| 129 | −IwBAGYKi94RFOv5UOEB2TF2baNMcbaf9AICzxzo1ERTNExYB+OJuarsEHtoMAOAoQdEyYRHNDELB | |
| 130 | −4NxniPbVVgD4nsH5cpSgaJ2wyMWGY4tjp507bR9tBADw1VlB0et6aycsAkg8QM+theq/UtsoENEm | |
| 131 | −AACxBEXxhEU0NwgFA3SfJ+/aH+0AADBHULSNsMigAMeYho5Ta4Fu6cBo1GtGWAkAME9QtJ2wiGYH | |
| 132 | −oWCA7rNl7rg4BwEACKGeoKi1SbSFRQ0PEHCsOW9wfsZxEehuP072DwD0Vxm3Dyoo2u+HUx+g/g5Q | |
| 133 | −60HR5XI5pR3v6+whaNMRBwCIJyg6RlhENwMpMCCv/3PmrPZ9Xm9rn3fOSQCAbQRFxwmLDGZpYEA8 | |
| 134 | −TZPKiMHPKddHnvOwxrZ1nQAA7CcoSkNYBFCxHqv+agiM7l6344z2Fg4B0INeftyk7XNFUJSOsAgf | |
| 135 | −6uDaPGXfagxJ5rYpxbEQCgEA5CMoSktY1BiDjXEHwn6tGe8ccp347AUAYJ2gKL2/nFYGpIDr8sx9 | |
| 136 | −9TkEAMBegqI8hEUN8cu2Ab9zwHljv9H2AADvCYrSERYBGLTbf20OANA0QVFa5iwySABci1W1hQo6 | |
| 137 | −5xwAwBaCovRUFjXC4MmAzLngHBmpTbSLcw4AIIagKA+VRQAG7FW3kYDUOQcAcKbRgqIQVBY1IcdA | |
| 138 | −yaDBOcF5A3bXn88r5xwAQBtGDIpCUFkERQZqwh0M1tO0n2vJOQcAUMqoQVEIwiIAA/YG21No5JwD | |
| 139 | −AMhp5KAoBLehVc8taAZvJc8N0h1vt/6UaWO0CQB9j13gDKMHRSGoLAJINlDn3HYfsYPqvAMASEtQ | |
| 140 | −9IuwyMACcB11dVxGCI2cgwAA6QmK/hAWVUwZZ3+Du9THdJomg0aDcRaOXS+fo85HAIC8BEVfCYsM | |
| 141 | −DnBMnX8Mc821FB65BgFokR8zaZGg6DthEaT+gvypDaBW7zqvNQRIOtUAAOcQFL0nLAJgaEtBTcog | |
| 142 | −SSAEAFAXQdE8YREAzBDwAAD0SVC0TFgEKQaU//z637lb0O7/DgAAwLkEReuERVBAzDxGAiUAAIC8 | |
| 143 | −zgqKXtdbO2ERVGItUBImAQDQRL/WE9G6O569EBTFExZBQnOBToonpKlOAgAA2EdQtI2wCAqICXEE | |
| 144 | −SgAAAOkJirYTFkEl1kKcFGFS7HIESgAAHOpzuhWNStQSFH3ePpsKj4RF0IhS1UkxyxEmAQAAtasp | |
| 145 | −KGqNsAg64nY3AACg6jFLoYozQdExwiIY7cPZ7W4AAEDHBEXHCYuAL2q63S12ewAAgPSmaWpumwVF | |
| 146 | −aQiLgM3MnwQAANRGUJSOsAjIwvxJAABj80Q0ShIUpSUsAk5j/iQA8i3Z/QAADThJREFUAOAoQVF6 | |
| 147 | −wiKgWm53AwAAlgiK8hAWAU1zuxsAABCCoCglYRHQPYESAAD0TVCUlrAIIJg/CQAAWiUoSk9YBBDB | |
| 148 | −/EkAADv6NZ6IxnM/NsO5ICjKQ1gEkOrLz+1uAADQndGCohCERQBFCZQAAGjBNE0aIYwZFIUgLAKo | |
| 149 | −jvmTAADgfKMGRSEIiwCaY/4kAKAl5i1q85iNbuSgKARhEUCX3O4GAAD7jB4UhSAsAhiW290AACjW | |
| 150 | −92ykukxQ9IuwCID3X+gV3e4Wuz0AALCXoOgPYREAu5k/CQCgL6POVyQo+kpYBEBW5k8CAKBmgqLv | |
| 151 | −hEUAnM78SQDQN09Ea+c4jUZQ9J6wCIDqmT8JAIDUBEXzhEUAdMH8SQAAB/o3g1UVCYqWCYsAGIb5 | |
| 152 | −kwAAEBStExYBwBPzJwEAI1FR9HnKemsnLAKADdzuBgDQJkFRPGERACTmdjcAePO95YloVR6TIn2j | |
| 153 | −Co67oGgbYREAnECgBABQhqBoO2ERAFTK/EkAQA4jzVNUS1D0eftsKjwSFgFAo86cP+kjXL92gP67 | |
| 154 | −OSAAQFVqCopaIywCgI6VCpQ+/r6uvkagBIB5i85t+1P6Iicdb0HRMcIiABhcqdvdBEoAQAmCouOE | |
| 155 | −RQDAonuYNH3p/Ny+do4igqCoTtbMch6B1b+XEP43OSgAEOHsuYnOqCoSFKUhLAIADoupCEoVKIV/ | |
| 156 | −VzqewiQAGJKgKB1hEQBQRLFA6d+IXzEFSgB0aKSnnH3rQwiKkhIWAQDVmAuUrtfrr05wovmTBEoA | |
| 157 | −0A9BUXrCIgCgHTEBzr+J5kcQKAGEEH7NO5OyYqX1J6KNXL2z9bwpQVCUh7AIAOhLTYGSMAkAihEU | |
| 158 | −pSMsAgDGUypQUp0EwIDOqBwTFKUlLAIAeGctxHG7GwBUQVCUnrAIAGAPt7sBwDelq4oERXkIiwAA | |
| 159 | −cnG7G9BRAGCSa2LOkx6NFhSFICwCADiXQAkAqjViUBSCsAgAoH7mTwKgcj1WFY0aFIUgLAIAaF8l | |
| 160 | −8ydNP0O4/ONwANC+kYOiEIRFAABjKBQoTT+fOtrhGvWez/9ujg80wLxFLJ0bPRk9KApBWAQAwF2p | |
| 161 | −291eO+V/X1dfI1ACoARB0S/CIgAA4qyESZfL5UtlUdLOu0AJoEo9VRUJiv4QFgEAkG7Q8E8I06OT | |
| 162 | −fYvrnEcEQSmWI0wCYPY7RFD0hbAIAIBTxYQ4KQIl1UkA6ago6puwCACA6q2FOKWqk2K2BYB2CIre | |
| 163 | −ExYBANC8UtVJscsRKNErT0Tjfh70QFA0T1gEAMAQagqUhEkA5xIULRMWAQDAfbBg/iSAWSqKxiEs | |
| 164 | −AgCADcyfBNCus4Ki1/XWTlgEAAAJud0NtjFvUf1UFKVdbwuERQAAUJjb3QDKEhRtIywCAIAKCZSo | |
| 165 | −VeonolH3se6BoGg7YREAADTK/EkAK59flQRFn7fPpsIjYREAAHTK/EnAXj1UFdUUFLVGWAQAAANz | |
| 166 | −uxvQI0HRMcIiAABgkUCJV6nnLfJEtHqOaw8ERccJiwAAgMPMnwTUQFCUhrAIAADIzvxJUKeeKroE | |
| 167 | −RekIiwAAgCq43S3xAPZpPwVk9E5QlJawCAAAaEYNt7u1GLx8/H0VGNHtvFCCovSERQAAQDdKVCe1 | |
| 168 | −WpkkMKJHgqI8hEUAAMBQSlQn1TBv0ud/t2/bkTIw8kS0Oo3choKidIRFAAAAzwO/CsKkmO2I3Zec | |
| 169 | −gRFUc90KipISFgEAAGwZlJ44b9KekCdnYNRCFYtqpQGuSUFRcsIiAACAlAPXjPMm7b29TYUR3V5v | |
| 170 | −gqIshEUAAAClB7iZAqWt74kJjKafjhdjGy0oCkFYBAAAUKV3IU6qW9y+L3PS4PDu+hgwKApBWAQA | |
| 171 | −ANCMUvMlAeMGRSEIiwAAALqR6va2PXMZnTWwtl7r7Wm9tRAWAQAADCBn1ZEgwXqtty/Coozc9QsA | |
| 172 | −AJwt5glqHwb01mu9p663NsIiAACAzsQERAb01mu9day3RsIiAACATpQKiUYc0Fuv9Y5EWJTY5+2m | |
| 173 | −EQAAgHrGKAkDolEH9NZrvaMRFgEAAHQoR0g04oDeeq13RMIiAACATuQKiEYd0Fuv9Y7qL00AAACA | |
| 174 | −Ab31Wi93wiIAAAAM6K3XenkQFgEAAGBAb73WW3C9tRMWAQAAYEBvvdZbaL0tEBYBAABgQG+91ltg | |
| 175 | −va0QFgEAAGBAb73Wm3m9LREWAQAAMEuQYL3W2856UxEWAQAA8JYBvfVabzvrTekyTdO0+U2XSwgh | |
| 176 | −hNvt5tMTAMjuer2GEELY0W2hZMfydx9xenSO9RWhFS3fLgMtKhkgffzuR11+/3dMf0plEQAAAAAP | |
| 177 | −wiIAAAAAHn5oAgAAgLG1OKcKkI/KIgAAAAAehEUAAAAAPAiLAAAAAHgQFgEAAADwYIJrAAAAivq4 | |
| 178 | −frz9+7mJtre8/vm1SxN3z71ubl1bl5n6PUe2K3adW4/DWvsfPb5737PlmJrc/T2VRQAAABSzNHB/ | |
| 179 | −929bX3/W9u/ZzjO2/+gxOrrcrcve856alt8qlUUAAAAUsVb18zpoX3r9/d8+rh+L1Sdbq19itu91 | |
| 180 | −uXu28/73qapz9tiyjyWWneo9Z+xvb1QWAQAAkF3M7WGxAczSa3Pac9vbnu08M7RYu+3r8/b5eM3W | |
| 181 | −dj/aFjmO8xnnUQuERQAAABSzNQhZen3Mv81VK6UOZPZu52i3Qe1p99zhmYqi79yGBgAAABFShjqf | |
| 182 | −t88vy4sNsfZMon10H9fmYzozbMndHqMSFgEAANCleyBzDzS2VBWVmDfoXfVTrsqnFPv4/HevYRd9 | |
| 183 | −ERYBAABApBwhzlxodHRC59T7WGM4pIIoD2ERAAAAxWy9bWntaWdrnquL7v8dY2sIcXQ7n9d55oTd | |
| 184 | −e7Z9yzHds2+520OF1HcmuAYAACC7mKdOzT1ZbG0enVqeHrZlO1sLKO5PQXv9s8WeY5b7ONdyHtVG | |
| 185 | −ZREAAABFPM9zs6UqaOn1MQP8Ek/T2rOde+ZFamVC55T7lqo9SsxD1QuVRQAAABSz9RHzex9Jb7+O | |
| 186 | −i7l1b8utc3uqkfa8p6blt+oyTdO0+U2XSwghhNvtpgUBgOyu12sIIYQd3RZKdix/9xGnRwdcXxEA | |
| 187 | −zvbxux91+f3fMf0plUUAAAAAPJizCACA09yrxl7NVbBvef3za5cq4udeN7eurctM/Z4j2xW7ztT7 | |
| 188 | −eH/t2nGda//YZS7tz1q77DlmAL1SWQQAwCmWBvbv/m3r68/a/j3becb2x+5jDccixTLn9qXm9oc9 | |
| 189 | −Pq4fi38gRrHKopikvvQvG3vWs+fLxS8yfpEBAOb7DDH9taXX3//ter0u9pP29AvXtu91uXu2c6mP | |
| 190 | −d6RftsWWdR89FiXsOWZ7zw+ojcmaSaFIZVGqXx5S/nqzd3v37r9fZAAA1sOGd3+/9votPz6msue2 | |
| 191 | −tz3bWWvgcsaxOLq81tof4EzZK4u2/mq05XVry1/7ZWPLLw4pvlBTbXcNHQS/yAAAOfoae19/u90W | |
| 192 | −K5zvP3jN9V9S9lf2budaFXlpe6uacrRnquW11P4AZ8paWbT1V6PUy6/h1wO/yPjCBQD6kzNcWqrk | |
| 193 | −fve61z9792duOTX05e7bkONHyL3tD9CzIreh5f6CWftlo9aORMntzn1Puy9XAKBmr2HDliqSEkHK | |
| 194 | −7XYTWpx8fmh/gD9+1LhRZ06SfOQLodQEhEe+BN+VYKdc9mtbqCoCAHqVo5/zroJmy5QKqfclV9+x | |
| 195 | −tr7snvYH6NmPkXe+9nCn1Q6T0AgAiO2LbekjrD3tLKav8lwtErvuPU/KPbKdc/2qVo5diW0+crtd | |
| 196 | −D+0PkNtfNW7UvQz0tRz0zKdb7Nnu5+2v5YumxPbMlfECALz2tbY+DGTtCbO1PBxky3a21E86eiy2 | |
| 197 | −PiE4VT+9l/YHKKVIZdHR0s21JyDs/WWjhvmM/CIDAIzouX+3pSpo6fUxfbsSc2nu2c49fdaUUzds | |
| 198 | −DWy27mOq45dif1K1P0DPslYWbf3VKPXya3uKQ6rt9osMANCDrQ/7qPmhJr3u17uK8b3bnGo/j94F | |
| 199 | −0Op5BVDSZZqmafObLpdNH55rQcJrBcrWx83HLv/19ak+/Pc+Qn7rdqfc19flbA1+UuwLAGz9rt3R | |
| 200 | −baFkx/J3H/F+lD59/wPA6T5+96Muv/87pj9VZM6iFGn93mXU8uQGv8gAAAAALShSWQQAcITKokY6 | |
| 201 | −liqLAKA6eyqLfmg2AADoj2kCANhLWAQAAB0SBgGwl7BohV9kAAAAgJEIi1YIgwAAAICRCIsAAMji | |
| 202 | −Y6VCGwCo01+aAAAAAIA7lUUAACR10QQA0PZ3+TRN0+Y3XXQBAIDydnRbKNmx1EcEgC76UyqLAAAo | |
| 203 | −1vkEAOq3KyzSEQAAAADokwmuAQAAAHgQFgEAAADwICwCAAAA4EFYBAAAAMCDsAgAAACAB2ERAAAA | |
| 204 | −AA/CIgAAAAAehEUAAAAAPAiLAAAAAHgQFgEAAADwICwCAAAA4EFYBAAAAMCDsAgAAACAB2ERAAAA | |
| 205 | −AA/CIgAAAAAehEUAAAAAPAiLAAAAAHgQFgEAAADwICwCAAAA4EFYBAAAAMCDsAgAAACAB2ERAAAA | |
| 206 | −AA/CIgAAAAAe/g/10lQlA3JSSwAAAABJRU5ErkJggg== | |
| @@ -1,28 +0,0 @@ | ||
| 1 | −<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
| 2 | −<svg stroke-linejoin="round" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" clip-path="url(#a)" xml:space="preserve" fill-rule="evenodd" height="178.78mm" viewBox="0 0 24285.662 17877.829" width="251.99mm" version="1.2" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" preserveAspectRatio="xMidYMid" stroke-width="28.222"><defs><clipPath id="a" clipPathUnits="userSpaceOnUse"><rect y="0" x="0" width="28000" height="21000"/></clipPath></defs><g transform="matrix(1.004 0 0 1 -2185.6 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#fcf" d="m12231 4800c-516 0-1031 515-1031 1031v4124c0 516 515 1032 1031 1032h8538c516 0 1032-516 1032-1032v-4124c0-516-516-1031-1032-1031h-8538z"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#ffc" d="m3595 15607c-293 0-585 292-585 585v2340c0 293 292 586 585 586h3275c293 0 586-293 586-586v-2340c0-293-293-585-586-585h-3275z"/></g><g transform="translate(-2197.3 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#e6e6e6" d="m2663 2186c-461 0-922 461-922 922v11169c0 461 461 923 922 923h3692c461 0 922-462 922-923v-11169c0-461-461-922-922-922h-3692z"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4461 8602h-2260v-1086h4520v1086h-2260z"/><path fill="none" d="m4461 8602h-2260v-1086h4520v1086h-2260z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="8275" x="2579" class="TextPosition"><tspan fill="#000000">Audio decoder</tspan></tspan></tspan></text> | |
| 3 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4461 11772h-2260v-1270h4520v1270h-2260z"/><path fill="none" d="m4461 11772h-2260v-1270h4520v1270h-2260z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="11353" x="2617" class="TextPosition"><tspan fill="#000000">Video decoder</tspan></tspan></tspan></text> | |
| 4 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4453 10217h-2269v-1224h4537v1224h-2268z"/><path fill="none" d="m4453 10217h-2269v-1224h4537v1224h-2268z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="9821" x="2571" class="TextPosition"><tspan fill="#000000">Audio encoder</tspan></tspan></tspan></text> | |
| 5 | −</g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.RectangleShape"><path fill="#cfc" d="m15711 12832h-3810v-1281h7620v1281h-3810z"/><path fill="none" d="m15711 12832h-3810v-1281h7620v1281h-3810z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="12407" x="12377" class="TextPosition"><tspan fill="#000000">Button Key/IR input logic</tspan></tspan></tspan></text> | |
| 6 | −</g><g transform="translate(-2140.9 -2411.8)" class="com.sun.star.drawing.RectangleShape"><path fill="#cfe7f5" d="m14169 14572h-2268v-1412h4536v1412h-2268z"/><path fill="none" d="m14169 14572h-2268v-1412h4536v1412h-2268z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="14082" x="12882" class="TextPosition"><tspan fill="#000000">EEPROM</tspan></tspan></tspan></text> | |
| 7 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#fc9" d="m5140 17662h-1563v-1715h3126v1715h-1563z"/><path fill="none" d="m5140 17662h-1563v-1715h3126v1715h-1563z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="17020" x="4276" class="TextPosition"><tspan fill="#000000">Sensor</tspan></tspan></tspan></text> | |
| 8 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6719 8030 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z"/><path fill="none" d="m6719 8030 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6719 9612 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z"/><path fill="none" d="m6719 9612 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6721 11100 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m6721 11100 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2411.8)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 13854 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m9962 13854 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 12163 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m9962 12163 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 17158 670-353v176h2028v-176l671 353-671 354v-177h-2028v177l-670-354z"/><path fill="none" d="m9962 17158 670-353v176h2028v-176l671 353-671 354v-177h-2028v177l-670-354z" stroke="#3465af"/></g><g transform="matrix(0 .83339 -1.0005 0 30268 -5276.3)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m23229 12779 1009-978 1009 978h-505v2959h505l-1009 979-1009-979h504v-2959h-504z"/><path fill="none" d="m23229 12779 1009-978 1009 978h-505v2959h505l-1009 979-1009-979h504v-2959h-504z" stroke="#3465af"/></g><g transform="translate(-9973.6 -666.6)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="706px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="15832" x="24341" class="TextPosition" transform="matrix(0,-1,1,0,8509,40173)"><tspan fill="#000000">System Bus</tspan></tspan></tspan></text> | |
| 9 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#cff" d="m13151 9262h-1250v-875h2499v875h-1249z"/><path fill="none" d="m13151 9262h-1250v-875h2499v875h-1249z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="9040" x="12215" class="TextPosition"><tspan fill="#000000">Demux</tspan></tspan></tspan></text> | |
| 10 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9996 8765 373-357v178h1130v-178l374 357-374 358v-179h-1130v179l-373-358z"/><path fill="none" d="m9996 8765 373-357v178h1130v-178l374 357-374 358v-179h-1130v179l-373-358z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9996 7378 373-358v179h1130v-179l374 358-374 358v-179h-1130v179l-373-358z"/><path fill="none" d="m9996 7378 373-358v179h1130v-179l374 358-374 358v-179h-1130v179l-373-358z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#cff" d="m16322 7992h-4421v-1270h8841v1270h-4420z"/><path fill="none" d="m16322 7992h-4421v-1270h8841v1270h-4420z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="7573" x="12786" class="TextPosition"><tspan fill="#000000">Conditional Access Module</tspan></tspan></tspan></text> | |
| 11 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m4445 13287h-2269v-1224h4537v1224h-2268z"/><path fill="none" d="m4445 13287h-2269v-1224h4537v1224h-2268z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="12891" x="2601" class="TextPosition"><tspan fill="#000000">Video encoder</tspan></tspan></tspan></text> | |
| 12 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6721 12634 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m6721 12634 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m20791 7545 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m20791 7545 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2028 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="14478" x="1990" class="TextPosition"><tspan fill="#000000">Radio / Analog TV</tspan></tspan></tspan></text> | |
| 13 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="700" class="TextParagraph"><tspan y="10724" x="14956" class="TextPosition"><tspan fill="#000000">Digital TV</tspan></tspan></tspan></text> | |
| 14 | −</g><g transform="translate(-8970.5 -1395.8)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="494px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="19167" x="14724" class="TextPosition"><tspan fill="#000000">PS.: picture is not complete: other blocks may be present</tspan></tspan></tspan></text> | |
| 15 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="18561" x="4199" class="TextPosition"><tspan fill="#000000">Webcam</tspan></tspan></tspan></text> | |
| 16 | −</g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.RectangleShape"><path fill="#f90" d="m14552 16372h-2650v-1412h5299v1412h-2649z"/><path fill="none" d="m14552 16372h-2650v-1412h5299v1412h-2649z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="15882" x="12265" class="TextPosition"><tspan fill="#000000">Processing blocks</tspan></tspan></tspan></text> | |
| 17 | −</g><g transform="translate(-2140.9 -2468.2)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9962 15654 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z"/><path fill="none" d="m9962 15654 385-353v176h1166v-176l386 353-386 354v-177h-1166v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6702 16954 397-353v176h1201v-176l398 353-398 354v-177h-1201v177l-397-354z"/><path fill="none" d="m6702 16954 397-353v176h1201v-176l398 353-398 354v-177h-1201v177l-397-354z" stroke="#3465af"/></g><g transform="translate(-2479.5 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="8792" x="22850" class="TextPosition"><tspan fill="#000000">Smartcard</tspan></tspan></tspan></text> | |
| 18 | −</g><g transform="matrix(1.0048 0 0 1 -2207.4 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#fcf" d="m2766 2600c-333 0-666 333-666 666v2668c0 333 333 666 666 666h18368c333 0 667-333 667-666v-2668c0-333-334-666-667-666h-18368z"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#ff8080" d="m5121 5155h-1614v-1816h3227v1816h-1613z"/><path fill="none" d="m5121 5155h-1614v-1816h3227v1816h-1613z" stroke="#3465af"/><text font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextShape"><tspan class="TextParagraph"><tspan y="4111" x="4374" class="TextPosition"><tspan fill="#000000">Tuner</tspan></tspan></tspan><tspan class="TextParagraph"><tspan y="4814" x="4151" class="TextPosition"><tspan fill="#000000">FM/TV</tspan></tspan></tspan></text> | |
| 19 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#ff8080" d="m2902 3702c0 111 40 202 88 202h530c48 0 89-91 89-202 0-110-41-202-89-202h-530c-48 0-88 92-88 202z"/><path fill="none" d="m2902 3702c0 111 40 202 88 202h530c48 0 89-91 89-202 0-110-41-202-89-202h-530c-48 0-88 92-88 202z" stroke="#3465af"/><path fill="#ffb3b3" d="m2902 3702c0 111 40 202 88 202s88-91 88-202c0-110-40-202-88-202s-88 92-88 202z"/><path fill="none" d="m2902 3702c0 111 40 202 88 202s88-91 88-202c0-110-40-202-88-202s-88 92-88 202z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#ff8080" d="m2903 4267c0 110 40 202 88 202h530c48 0 89-92 89-202s-41-203-89-203h-530c-48 0-88 93-88 203z"/><path fill="none" d="m2903 4267c0 110 40 202 88 202h530c48 0 89-92 89-202s-41-203-89-203h-530c-48 0-88 93-88 203z" stroke="#3465af"/><path fill="#ffb3b3" d="m2903 4267c0 110 40 202 88 202s88-92 88-202-40-203-88-203-88 93-88 203z"/><path fill="none" d="m2903 4267c0 110 40 202 88 202s88-92 88-202-40-203-88-203-88 93-88 203z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m6719 4196 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z"/><path fill="none" d="m6719 4196 385-353v176h1167v-176l386 353-386 354v-177h-1167v177l-385-354z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9979 4150 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z"/><path fill="none" d="m9979 4150 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" stroke="#3465af"/></g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.RectangleShape"><path fill="#cff" d="m16500 6189h-4500v-1389h9e3v1389h-4500z"/><path fill="none" d="m16500 6189h-4500v-1389h9e3v1389h-4500z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="5710" x="12051" class="TextPosition"><tspan fill="#000000">Satellite Equipment Control (SEC)</tspan></tspan></tspan></text> | |
| 20 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#cff" d="m13400 4600h-1400v-1e3h2800v1e3h-1400z"/><path fill="none" d="m13400 4600h-1400v-1e3h2800v1e3h-1400z" stroke="#3465af"/><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="4316" x="12465" class="TextPosition"><tspan fill="#000000">Demod</tspan></tspan></tspan></text> | |
| 21 | −</g><g transform="translate(-2140.9 -2186)" class="com.sun.star.drawing.CustomShape"><path fill="#729fcf" d="m9979 5451 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z"/><path fill="none" d="m9979 5451 402-368v184h1217v-184l403 368-403 369v-185h-1217v185l-402-369z" stroke="#3465af"/></g><path fill="#ff9" d="m7855.1 9099v7302h-1270v-14605h1270v7303z"/><path fill="none" d="m7855.1 9099v7302h-1270v-14605h1270v7303z" stroke="#3465af"/><text y="-6640.4663" x="-20770.572" transform="rotate(-90)" class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="7409.5396" x="-11193.634" class="TextPosition" transform="matrix(0,-1,1,0,-4473,23627)"><tspan fill="#000000">I2C Bus (control bus)</tspan></tspan></tspan></text> | |
| 22 | −<g transform="translate(-2197.3 -2186)" class="com.sun.star.drawing.TextShape"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="3278" x="9391" class="TextPosition"><tspan fill="#000000">Digital TV Frontend</tspan></tspan></tspan></text> | |
| 23 | −</g><g transform="matrix(1.015 0 0 .99994 -2233.3 -2185.7)" class="com.sun.star.drawing.CustomShape"><g stroke="#3465af" fill="none"><path d="m3e3 2800c-18 0-35 1-53 3"/><path d="m2915 2808c-17 3-35 7-52 12"/><path d="m2832 2830c-16 6-33 12-49 20"/><path d="m2754 2864c-15 8-31 17-46 27"/><path d="m2681 2909c-14 10-28 21-42 32"/><path d="m2614 2962c-13 12-26 24-38 37"/><path d="m2554 3023c-11 13-22 27-33 41"/><path d="m2502 3091c-10 14-19 29-28 45"/><path d="m2459 3164c-8 16-15 32-22 49"/><path d="m2426 3243c-5 17-10 34-14 51"/><path d="m2406 3326c-3 18-5 35-6 53"/><path d="m2400 3411v53"/><path d="m2400 3497v53"/><path d="m2400 3582v53"/><path d="m2400 3668v53"/><path d="m2400 3753v53"/><path d="m2400 3839v53"/><path d="m2400 3924v53"/><path d="m2400 4009v54"/><path d="m2400 4095v53"/><path d="m2400 4180v53"/><path d="m2400 4266v53"/><path d="m2400 4351v53"/><path d="m2400 4437v53"/><path d="m2400 4522v53"/><path d="m2400 4607v54"/><path d="m2400 4693v53"/><path d="m2400 4778v53"/><path d="m2400 4864v53"/><path d="m2400 4949v53"/><path d="m2400 5035v53"/><path d="m2400 5120v53"/><path d="m2400 5205v54"/><path d="m2400 5291v53"/><path d="m2400 5376v53"/><path d="m2400 5462v53"/><path d="m2400 5547v53"/><path d="m2400 5633v53"/><path d="m2400 5718v53"/><path d="m2400 5803c0 18 1 36 3 53"/><path d="m2408 5888c4 18 8 35 13 52"/><path d="m2431 5971c6 16 13 33 20 49"/><path d="m2466 6049c8 15 17 31 27 46"/><path d="m2511 6122c10 14 21 28 32 42"/><path d="m2564 6188c12 13 25 26 38 38"/><path d="m2626 6248c13 11 27 23 41 33"/><path d="m2694 6300c14 10 29 19 45 27"/><path d="m2768 6343c15 7 32 15 48 21"/><path d="m2847 6375c17 5 34 10 51 14"/><path d="m2930 6395c17 2 35 4 53 5"/><path d="m3015 6400h53"/><path d="m3100 6400h53"/><path d="m3186 6400h53"/><path d="m3271 6400h53"/><path d="m3357 6400h53"/><path d="m3442 6400h53"/><path d="m3527 6400h54"/><path d="m3613 6400h53"/><path d="m3698 6400h53"/><path d="m3784 6400h53"/><path d="m3869 6400h53"/><path d="m3955 6400h53"/><path d="m4040 6400h53"/><path d="m4125 6400h54"/><path d="m4211 6400h53"/><path d="m4296 6400h53"/><path d="m4382 6400h53"/><path d="m4467 6400h53"/><path d="m4553 6400h53"/><path d="m4638 6400h53"/><path d="m4723 6400h54"/><path d="m4809 6400h53"/><path d="m4894 6400h53"/><path d="m4980 6400h53"/><path d="m5065 6400h53"/><path d="m5151 6400h53"/><path d="m5236 6400h53"/><path d="m5322 6400h53"/><path d="m5407 6400h53"/><path d="m5492 6400h53"/><path d="m5578 6400h53"/><path d="m5663 6400h53"/><path d="m5749 6400h53"/><path d="m5834 6400h53"/><path d="m5920 6400h53"/><path d="m6005 6400h53"/><path d="m6090 6400h53"/><path d="m6176 6400h53"/><path d="m6261 6400h53"/><path d="m6347 6400h53"/><path d="m6432 6400h53"/><path d="m6518 6400h53"/><path d="m6603 6400h53"/><path d="m6688 6400h54"/><path d="m6774 6400h53"/><path d="m6859 6400h53"/><path d="m6945 6400h53"/><path d="m7030 6400h53"/><path d="m7116 6400h53"/><path d="m7201 6400h53"/><path d="m7286 6400h54"/><path d="m7372 6400h53"/><path d="m7457 6400h53"/><path d="m7543 6400h53"/><path d="m7628 6400h53"/><path d="m7714 6400h53"/><path d="m7799 6400h53"/><path d="m7884 6400h54"/><path d="m7970 6400h53"/><path d="m8055 6400h53"/><path d="m8141 6400h53"/><path d="m8226 6400h53"/><path d="m8312 6400h53"/><path d="m8397 6400h53"/><path d="m8482 6400h54"/><path d="m8568 6400h53"/><path d="m8653 6400h53"/><path d="m8739 6400h53"/><path d="m8824 6400h53"/><path d="m8910 6400h53"/><path d="m8995 6400h53"/><path d="m9081 6400h53"/><path d="m9166 6400h53"/><path d="m9251 6400h53"/><path d="m9337 6400h53"/><path d="m9422 6400h53"/><path d="m9508 6400h53"/><path d="m9593 6400h53"/><path d="m9679 6400h53"/><path d="m9764 6400h53"/><path d="m9849 6400h53"/><path d="m9935 6400h53"/><path d="m10020 6400h53"/><path d="m10106 6400h53"/><path d="m10191 6400h53"/><path d="m10277 6400h53"/><path d="m10362 6400h53"/><path d="m10447 6400h53"/><path d="m10533 6400h53"/><path d="m10618 6400h53"/><path d="m10704 6400h53"/><path d="m10789 6400h53"/><path d="m10875 6400h53"/><path d="m10960 6400h53"/><path d="m11045 6400h54"/><path d="m11131 6400h53"/><path d="m11216 6400h53"/><path d="m11302 6400h53"/><path d="m11387 6400h53"/><path d="m11473 6400h53"/><path d="m11558 6400h53"/><path d="m11643 6400h54"/><path d="m11729 6400h53"/><path d="m11814 6400h53"/><path d="m11900 6400h53"/><path d="m11985 6400h53"/><path d="m12071 6400h53"/><path d="m12156 6400h53"/><path d="m12241 6400h54"/><path d="m12327 6400h53"/><path d="m12412 6400h53"/><path d="m12498 6400h53"/><path d="m12583 6400h53"/><path d="m12669 6400h53"/><path d="m12754 6400h53"/><path d="m12839 6400h54"/><path d="m12925 6400h53"/><path d="m13010 6400h53"/><path d="m13096 6400h53"/><path d="m13181 6400h53"/><path d="m13267 6400h53"/><path d="m13352 6400h53"/><path d="m13438 6400h53"/><path d="m13523 6400h53"/><path d="m13608 6400h53"/><path d="m13694 6400h53"/><path d="m13779 6400h53"/><path d="m13865 6400h53"/><path d="m13950 6400h53"/><path d="m14036 6400h53"/><path d="m14121 6400h53"/><path d="m14206 6400h53"/><path d="m14292 6400h53"/><path d="m14377 6400h53"/><path d="m14463 6400h53"/><path d="m14548 6400h53"/><path d="m14634 6400h53"/><path d="m14719 6400h53"/><path d="m14804 6400h54"/><path d="m14890 6400h53"/><path d="m14975 6400h53"/><path d="m15061 6400h53"/><path d="m15146 6400h53"/><path d="m15232 6400h53"/><path d="m15317 6400h53"/><path d="m15402 6400h54"/><path d="m15488 6400h53"/><path d="m15573 6400h53"/><path d="m15659 6400h53"/><path d="m15744 6400h53"/><path d="m15830 6400h53"/><path d="m15915 6400h53"/><path d="m16000 6400h54"/><path d="m16086 6400h53"/><path d="m16171 6400h53"/><path d="m16257 6400h53"/><path d="m16342 6400h53"/><path d="m16428 6400h53"/><path d="m16513 6400h53"/><path d="m16598 6400h54"/><path d="m16684 6400h53"/><path d="m16769 6400h53"/><path d="m16855 6400h53"/><path d="m16940 6400h53"/><path d="m17026 6400h53"/><path d="m17111 6400h53"/><path d="m17196 6400h54"/><path d="m17282 6400h53"/><path d="m17367 6400h53"/><path d="m17453 6400h53"/><path d="m17538 6400h53"/><path d="m17624 6400h53"/><path d="m17709 6400h53"/><path d="m17795 6400h53"/><path d="m17880 6400h53"/><path d="m17965 6400h53"/><path d="m18051 6400h53"/><path d="m18136 6400h53"/><path d="m18222 6400h53"/><path d="m18307 6400h53"/><path d="m18393 6400h53"/><path d="m18478 6400h53"/><path d="m18563 6400h53"/><path d="m18649 6400h53"/><path d="m18734 6400h53"/><path d="m18820 6400h53"/><path d="m18905 6400h53"/><path d="m18991 6400h53"/><path d="m19076 6400h53"/><path d="m19161 6400h54"/><path d="m19247 6400h53"/><path d="m19332 6400h53"/><path d="m19418 6400h53"/><path d="m19503 6400h53"/><path d="m19589 6400h53"/><path d="m19674 6400h53"/><path d="m19759 6400h54"/><path d="m19845 6400h53"/><path d="m19930 6400h53"/><path d="m20016 6400h53"/><path d="m20101 6400h53"/><path d="m20187 6400h53"/><path d="m20272 6400h53"/><path d="m20357 6400h54"/><path d="m20443 6400h53"/><path d="m20528 6400h53"/><path d="m20614 6400c17-1 35-2 53-5"/><path d="m20699 6390c17-4 34-9 51-14"/><path d="m20781 6365c16-6 32-13 48-21"/><path d="m20858 6329c15-8 31-17 45-27"/><path d="m20930 6283c14-10 28-21 42-32"/><path d="m20996 6229c13-12 25-25 37-38"/><path d="m21055 6167c11-14 22-28 33-42"/><path d="m21106 6098c10-15 19-30 27-45"/><path d="m21148 6024c7-16 14-33 20-49"/><path d="m21179 5944c5-17 9-34 13-51"/><path d="m21197 5861c2-18 4-35 4-53"/><path d="m21201 5776v-54"/><path d="m21201 5690v-53"/><path d="m21201 5605v-53"/><path d="m21201 5519v-53"/><path d="m21201 5434v-53"/><path d="m21201 5348v-53"/><path d="m21201 5263v-53"/><path d="m21201 5178v-54"/><path d="m21201 5092v-53"/><path d="m21201 5007v-53"/><path d="m21201 4921v-53"/><path d="m21201 4836v-53"/><path d="m21201 4750v-53"/><path d="m21201 4665v-53"/><path d="m21201 4579v-53"/><path d="m21201 4494v-53"/><path d="m21201 4409v-53"/><path d="m21201 4323v-53"/><path d="m21201 4238v-53"/><path d="m21201 4152v-53"/><path d="m21201 4067v-53"/><path d="m21201 3981v-53"/><path d="m21201 3896v-53"/><path d="m21201 3811v-53"/><path d="m21201 3725v-53"/><path d="m21201 3640v-53"/><path d="m21201 3554v-53"/><path d="m21201 3469v-53"/><path d="m21201 3383c-1-17-3-35-5-52"/><path d="m21190 3299c-4-17-8-35-14-51"/><path d="m21165 3217c-6-16-13-33-21-49"/><path d="m21129 3140c-9-16-18-31-28-46"/><path d="m21082 3068c-10-14-21-28-33-42"/><path d="m21027 3002c-12-13-24-25-37-37"/><path d="m20965 2944c-14-12-28-22-42-33"/><path d="m20896 2893c-15-9-30-18-46-27"/><path d="m20821 2852c-16-8-32-14-49-20"/><path d="m20741 2821c-17-5-34-9-51-12"/><path d="m20658 2804c-18-3-35-4-53-4"/><path d="m20573 2800h-53"/><path d="m20487 2800h-53"/><path d="m20402 2800h-53"/><path d="m20316 2800h-53"/><path d="m20231 2800h-53"/><path d="m20146 2800h-54"/><path d="m20060 2800h-53"/><path d="m19975 2800h-53"/><path d="m19889 2800h-53"/><path d="m19804 2800h-53"/><path d="m19718 2800h-53"/><path d="m19633 2800h-53"/><path d="m19548 2800h-54"/><path d="m19462 2800h-53"/><path d="m19377 2800h-53"/><path d="m19291 2800h-53"/><path d="m19206 2800h-53"/><path d="m19120 2800h-53"/><path d="m19035 2800h-53"/><path d="m18950 2800h-54"/><path d="m18864 2800h-53"/><path d="m18779 2800h-53"/><path d="m18693 2800h-53"/><path d="m18608 2800h-53"/><path d="m18522 2800h-53"/><path d="m18437 2800h-53"/><path d="m18352 2800h-54"/><path d="m18266 2800h-53"/><path d="m18181 2800h-53"/><path d="m18095 2800h-53"/><path d="m18010 2800h-53"/><path d="m17924 2800h-53"/><path d="m17839 2800h-53"/><path d="m17753 2800h-53"/><path d="m17668 2800h-53"/><path d="m17583 2800h-53"/><path d="m17497 2800h-53"/><path d="m17412 2800h-53"/><path d="m17326 2800h-53"/><path d="m17241 2800h-53"/><path d="m17155 2800h-53"/><path d="m17070 2800h-53"/><path d="m16985 2800h-53"/><path d="m16899 2800h-53"/><path d="m16814 2800h-53"/><path d="m16728 2800h-53"/><path d="m16643 2800h-53"/><path d="m16557 2800h-53"/><path d="m16472 2800h-53"/><path d="m16387 2800h-54"/><path d="m16301 2800h-53"/><path d="m16216 2800h-53"/><path d="m16130 2800h-53"/><path d="m16045 2800h-53"/><path d="m15959 2800h-53"/><path d="m15874 2800h-53"/><path d="m15789 2800h-54"/><path d="m15703 2800h-53"/><path d="m15618 2800h-53"/><path d="m15532 2800h-53"/><path d="m15447 2800h-53"/><path d="m15361 2800h-53"/><path d="m15276 2800h-53"/><path d="m15191 2800h-54"/><path d="m15105 2800h-53"/><path d="m15020 2800h-53"/><path d="m14934 2800h-53"/><path d="m14849 2800h-53"/><path d="m14763 2800h-53"/><path d="m14678 2800h-53"/><path d="m14593 2800h-54"/><path d="m14507 2800h-53"/><path d="m14422 2800h-53"/><path d="m14336 2800h-53"/><path d="m14251 2800h-53"/><path d="m14165 2800h-53"/><path d="m14080 2800h-53"/><path d="m13994 2800h-53"/><path d="m13909 2800h-53"/><path d="m13824 2800h-53"/><path d="m13738 2800h-53"/><path d="m13653 2800h-53"/><path d="m13567 2800h-53"/><path d="m13482 2800h-53"/><path d="m13396 2800h-53"/><path d="m13311 2800h-53"/><path d="m13226 2800h-53"/><path d="m13140 2800h-53"/><path d="m13055 2800h-53"/><path d="m12969 2800h-53"/><path d="m12884 2800h-53"/><path d="m12798 2800h-53"/><path d="m12713 2800h-53"/><path d="m12628 2800h-53"/><path d="m12542 2800h-53"/><path d="m12457 2800h-53"/><path d="m12371 2800h-53"/><path d="m12286 2800h-53"/><path d="m12200 2800h-53"/><path d="m12115 2800h-53"/><path d="m12030 2800h-54"/><path d="m11944 2800h-53"/><path d="m11859 2800h-53"/><path d="m11773 2800h-53"/><path d="m11688 2800h-53"/><path d="m11602 2800h-53"/><path d="m11517 2800h-53"/><path d="m11432 2800h-54"/><path d="m11346 2800h-53"/><path d="m11261 2800h-53"/><path d="m11175 2800h-53"/><path d="m11090 2800h-53"/><path d="m11004 2800h-53"/><path d="m10919 2800h-53"/><path d="m10834 2800h-54"/><path d="m10748 2800h-53"/><path d="m10663 2800h-53"/><path d="m10577 2800h-53"/><path d="m10492 2800h-53"/><path d="m10406 2800h-53"/><path d="m10321 2800h-53"/><path d="m10236 2800h-54"/><path d="m10150 2800h-53"/><path d="m10065 2800h-53"/><path d="m9979 2800h-53"/><path d="m9894 2800h-53"/><path d="m9808 2800h-53"/><path d="m9723 2800h-53"/><path d="m9637 2800h-53"/><path d="m9552 2800h-53"/><path d="m9467 2800h-53"/><path d="m9381 2800h-53"/><path d="m9296 2800h-53"/><path d="m9210 2800h-53"/><path d="m9125 2800h-53"/><path d="m9039 2800h-53"/><path d="m8954 2800h-53"/><path d="m8869 2800h-53"/><path d="m8783 2800h-53"/><path d="m8698 2800h-53"/><path d="m8612 2800h-53"/><path d="m8527 2800h-53"/><path d="m8441 2800h-53"/><path d="m8356 2800h-53"/><path d="m8271 2800h-54"/><path d="m8185 2800h-53"/><path d="m8100 2800h-53"/><path d="m8014 2800h-53"/><path d="m7929 2800h-53"/><path d="m7843 2800h-53"/><path d="m7758 2800h-53"/><path d="m7673 2800h-54"/><path d="m7587 2800h-53"/><path d="m7502 2800h-53"/><path d="m7416 2800h-53"/><path d="m7331 2800h-53"/><path d="m7245 2800h-53"/><path d="m7160 2800h-53"/><path d="m7075 2800h-54"/><path d="m6989 2800h-53"/><path d="m6904 2800h-53"/><path d="m6818 2800h-53"/><path d="m6733 2800h-53"/><path d="m6647 2800h-53"/><path d="m6562 2800h-53"/><path d="m6477 2800h-54"/><path d="m6391 2800h-53"/><path d="m6306 2800h-53"/><path d="m6220 2800h-53"/><path d="m6135 2800h-53"/><path d="m6049 2800h-53"/><path d="m5964 2800h-53"/><path d="m5879 2800h-54"/><path d="m5793 2800h-53"/><path d="m5708 2800h-53"/><path d="m5622 2800h-53"/><path d="m5537 2800h-53"/><path d="m5451 2800h-53"/><path d="m5366 2800h-53"/><path d="m5280 2800h-53"/><path d="m5195 2800h-53"/><path d="m5110 2800h-53"/><path d="m5024 2800h-53"/><path d="m4939 2800h-53"/><path d="m4853 2800h-53"/><path d="m4768 2800h-53"/><path d="m4682 2800h-53"/><path d="m4597 2800h-53"/><path d="m4512 2800h-53"/><path d="m4426 2800h-53"/><path d="m4341 2800h-53"/><path d="m4255 2800h-53"/><path d="m4170 2800h-53"/><path d="m4084 2800h-53"/><path d="m3999 2800h-53"/><path d="m3914 2800h-54"/><path d="m3828 2800h-53"/><path d="m3743 2800h-53"/><path d="m3657 2800h-53"/><path d="m3572 2800h-53"/><path d="m3486 2800h-53"/><path d="m3401 2800h-53"/><path d="m3316 2800h-54"/><path d="m3230 2800h-53"/><path d="m3145 2800h-53"/><path d="m3059 2800h-53"/></g></g><g transform="translate(-2197.3 -2186)"><rect height="1100.7" width="1213.6" y="6917.1" x="23255" fill="#f3e777"/><path fill="#ca4677" d="m22802 7700.4v-405.46l150.7-169.16c82.886-93.039 170.53-186.62 194.77-207.96l44.069-38.798 783.23-0.086 783.23-0.086v613.5 613.5h-978-978v-405.46zm1027.7 136.98v-78.372l-169.91 4.925-169.91 4.9249-5.09 45.854c-8.249 74.303 46.711 101.04 207.69 101.04h137.21v-78.372zm235.86-262.94 4.495-341.31 207.2-8.6408 207.2-8.6408 5.144-46.443c9.596-86.615-41.863-102.05-322.02-96.607l-246.71 4.7956-4.438 419.08-4.439 419.08h74.537 74.538l4.494-341.31zm391.3 313.72c26.41-19.286 36.255-41.399 32.697-73.447l-5.09-45.854h-174.05-174.05l-5.38 48.984c-9.97 90.771 0.993 97.91 150.36 97.91 99.305 0 148.27-7.6982 175.52-27.594zm-627.16-274.84v-77.768h-174.05-174.05v66.246c0 36.436 4.973 71.431 11.051 77.768 6.078 6.3366 84.401 11.521 174.05 11.521h163v-77.768zm659.89-4.9154 5.125-74.042-179.18 4.9155-179.18 4.9155-5.38 48.984c-10.473 95.348-2.259 99.57 183.28 94.197l170.2-4.9284 5.125-74.042zm-659.89-237.63v-78.372l-169.91 4.925-169.91 4.925-5.097 73.447-5.097 73.447h175 175v-78.372zm659.86 4.925-5.097-73.447h-174.05-174.05l-5.38 48.984c-10.289 93.673-2.146 97.91 188.15 97.91h175.52l-5.097-73.447zm-659.86-228.98v-77.768h-137.21c-97.358 0-147.91 7.8138-174.05 26.902-34.952 25.523-49.645 92.242-25.79 117.11 6.078 6.3366 84.401 11.521 174.05 11.521h163v-77.768z"/></g><g transform="matrix(.84874 0 0 .76147 2408.1 3615.3)"><rect height="3076.2" width="2734.3" y="13264" x="19249" fill="#6076b3"/><g stroke-linejoin="round" fill-rule="evenodd" stroke-width="28.222" fill="#e0ee2c"><rect y="13369" width="356.65" x="18937" height="180.95"/><rect y="13708" width="356.65" x="18937" height="180.95"/><rect y="14048" width="356.65" x="18937" height="180.95"/><rect y="14387" width="356.65" x="18937" height="180.95"/><rect y="14726" width="356.65" x="18937" height="180.95"/><rect y="15066" width="356.65" x="18937" height="180.95"/><rect y="15405" width="356.65" x="18937" height="180.95"/><rect y="15744" width="356.65" x="18937" height="180.95"/><rect y="16083" width="356.65" x="18937" height="180.95"/><rect y="13324" width="356.65" x="21939" height="180.95"/><rect y="13663" width="356.65" x="21939" height="180.95"/><rect y="14002" width="356.65" x="21939" height="180.95"/><rect y="14342" width="356.65" x="21939" height="180.95"/><rect y="14681" width="356.65" x="21939" height="180.95"/><rect y="15020" width="356.65" x="21939" height="180.95"/><rect y="15360" width="356.65" x="21939" height="180.95"/><rect y="15699" width="356.65" x="21939" height="180.95"/><rect y="16038" width="356.65" x="21939" height="180.95"/></g><g stroke-linejoin="round" fill-rule="evenodd" transform="matrix(.98702 0 0 .90336 -2675 7020.8)" class="com.sun.star.drawing.TextShape" stroke-width="28.222"><text class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"/></text> | |
| 24 | −<text style="word-spacing:0px;letter-spacing:0px" xml:space="preserve" font-size="1128.9px" y="9042.0264" x="22439.668" font-family="Sans" line-height="125%" fill="#000000"><tspan y="9042.0264" x="22439.668">CPU</tspan></text> | |
| 25 | −</g></g><g stroke-linejoin="round" fill-rule="evenodd" transform="translate(-11752 543.6)" class="com.sun.star.drawing.TextShape" stroke-width="28.222"><text class="TextShape"><tspan font-size="706px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="15832" x="24341" class="TextPosition" transform="matrix(0,-1,1,0,8509,40173)"><tspan fill="#000000">PCI, USB, SPI, I2C, ...</tspan></tspan></tspan></text> | |
| 26 | −</g><g stroke-linejoin="round" fill-rule="evenodd" transform="translate(-655.31 963.83)" class="com.sun.star.drawing.RectangleShape" stroke-width="28.222"><g transform="matrix(.49166 0 0 1.0059 6045.6 -82.24)"><path fill="#cfe7f5" d="m14169 14572h-2268v-1412h4536v1412h-2268z"/><path fill="none" d="m14169 14572h-2268v-1412h4536v1412h-2268z" stroke="#3465af"/></g><text y="-395.11282" x="-790.22229" class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="13686.9" x="12091.779" class="TextPosition"><tspan fill="#000000">Bridge</tspan></tspan></tspan></text> | |
| 27 | −<text y="338.66486" x="-846.66675" class="TextShape"><tspan font-size="635px" font-family="'Times New Roman', serif" font-weight="400" class="TextParagraph"><tspan y="14420.677" x="12035.335" class="TextPosition"><tspan fill="#000000"> DMA</tspan></tspan></tspan></text> | |
| 28 | −</g></svg> | |
| @@ -1 +0,0 @@ | ||
| 1 | −!*.xml | |
| @@ -1,381 +0,0 @@ | ||
| 1 | − <bibliography> | |
| 2 | − <title>References</title> | |
| 3 | − | |
| 4 | − <biblioentry id="cea608"> | |
| 5 | − <abbrev>CEA 608-E</abbrev> | |
| 6 | − <authorgroup> | |
| 7 | − <corpauthor>Consumer Electronics Association (<ulink | |
| 8 | −url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor> | |
| 9 | − </authorgroup> | |
| 10 | − <title>CEA-608-E R-2014 "Line 21 Data Services"</title> | |
| 11 | − </biblioentry> | |
| 12 | − | |
| 13 | − <biblioentry id="en300294"> | |
| 14 | − <abbrev>EN 300 294</abbrev> | |
| 15 | − <authorgroup> | |
| 16 | − <corpauthor>European Telecommunication Standards Institute | |
| 17 | −(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor> | |
| 18 | − </authorgroup> | |
| 19 | − <title>EN 300 294 "625-line television Wide Screen Signalling | |
| 20 | −(WSS)"</title> | |
| 21 | − </biblioentry> | |
| 22 | − | |
| 23 | − <biblioentry id="ets300231"> | |
| 24 | − <abbrev>ETS 300 231</abbrev> | |
| 25 | − <authorgroup> | |
| 26 | − <corpauthor>European Telecommunication Standards Institute | |
| 27 | −(<ulink | |
| 28 | −url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor> | |
| 29 | − </authorgroup> | |
| 30 | − <title>ETS 300 231 "Specification of the domestic video | |
| 31 | −Programme Delivery Control system (PDC)"</title> | |
| 32 | − </biblioentry> | |
| 33 | − | |
| 34 | − <biblioentry id="ets300706"> | |
| 35 | − <abbrev>ETS 300 706</abbrev> | |
| 36 | − <authorgroup> | |
| 37 | − <corpauthor>European Telecommunication Standards Institute | |
| 38 | −(<ulink url="http://www.etsi.org">http://www.etsi.org</ulink>)</corpauthor> | |
| 39 | − </authorgroup> | |
| 40 | − <title>ETS 300 706 "Enhanced Teletext specification"</title> | |
| 41 | − </biblioentry> | |
| 42 | − | |
| 43 | − <biblioentry id="mpeg2part1"> | |
| 44 | − <abbrev>ISO 13818-1</abbrev> | |
| 45 | − <authorgroup> | |
| 46 | − <corpauthor>International Telecommunication Union (<ulink | |
| 47 | −url="http://www.itu.ch">http://www.itu.ch</ulink>), International | |
| 48 | −Organisation for Standardisation (<ulink | |
| 49 | −url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor> | |
| 50 | − </authorgroup> | |
| 51 | − <title>ITU-T Rec. H.222.0 | ISO/IEC 13818-1 "Information | |
| 52 | −technology — Generic coding of moving pictures and associated | |
| 53 | −audio information: Systems"</title> | |
| 54 | − </biblioentry> | |
| 55 | − | |
| 56 | − <biblioentry id="mpeg2part2"> | |
| 57 | − <abbrev>ISO 13818-2</abbrev> | |
| 58 | − <authorgroup> | |
| 59 | − <corpauthor>International Telecommunication Union (<ulink | |
| 60 | −url="http://www.itu.ch">http://www.itu.ch</ulink>), International | |
| 61 | −Organisation for Standardisation (<ulink | |
| 62 | −url="http://www.iso.ch">http://www.iso.ch</ulink>)</corpauthor> | |
| 63 | − </authorgroup> | |
| 64 | − <title>ITU-T Rec. H.262 | ISO/IEC 13818-2 "Information | |
| 65 | −technology — Generic coding of moving pictures and associated | |
| 66 | −audio information: Video"</title> | |
| 67 | − </biblioentry> | |
| 68 | − | |
| 69 | − <biblioentry id="itu470"> | |
| 70 | − <abbrev>ITU BT.470</abbrev> | |
| 71 | − <authorgroup> | |
| 72 | − <corpauthor>International Telecommunication Union (<ulink | |
| 73 | −url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> | |
| 74 | − </authorgroup> | |
| 75 | − <title>ITU-R Recommendation BT.470-6 "Conventional Television | |
| 76 | −Systems"</title> | |
| 77 | − </biblioentry> | |
| 78 | − | |
| 79 | − <biblioentry id="itu601"> | |
| 80 | − <abbrev>ITU BT.601</abbrev> | |
| 81 | − <authorgroup> | |
| 82 | − <corpauthor>International Telecommunication Union (<ulink | |
| 83 | −url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> | |
| 84 | − </authorgroup> | |
| 85 | − <title>ITU-R Recommendation BT.601-5 "Studio Encoding Parameters | |
| 86 | −of Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect | |
| 87 | −Ratios"</title> | |
| 88 | − </biblioentry> | |
| 89 | − | |
| 90 | − <biblioentry id="itu653"> | |
| 91 | − <abbrev>ITU BT.653</abbrev> | |
| 92 | − <authorgroup> | |
| 93 | − <corpauthor>International Telecommunication Union (<ulink | |
| 94 | −url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> | |
| 95 | − </authorgroup> | |
| 96 | − <title>ITU-R Recommendation BT.653-3 "Teletext systems"</title> | |
| 97 | − </biblioentry> | |
| 98 | − | |
| 99 | − <biblioentry id="itu709"> | |
| 100 | − <abbrev>ITU BT.709</abbrev> | |
| 101 | − <authorgroup> | |
| 102 | − <corpauthor>International Telecommunication Union (<ulink | |
| 103 | −url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> | |
| 104 | − </authorgroup> | |
| 105 | − <title>ITU-R Recommendation BT.709-5 "Parameter values for the | |
| 106 | −HDTV standards for production and international programme | |
| 107 | −exchange"</title> | |
| 108 | − </biblioentry> | |
| 109 | − | |
| 110 | − <biblioentry id="itu1119"> | |
| 111 | − <abbrev>ITU BT.1119</abbrev> | |
| 112 | − <authorgroup> | |
| 113 | − <corpauthor>International Telecommunication Union (<ulink | |
| 114 | −url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> | |
| 115 | − </authorgroup> | |
| 116 | − <title>ITU-R Recommendation BT.1119 "625-line | |
| 117 | −television Wide Screen Signalling (WSS)"</title> | |
| 118 | − </biblioentry> | |
| 119 | − | |
| 120 | − <biblioentry id="jfif"> | |
| 121 | − <abbrev>JFIF</abbrev> | |
| 122 | − <authorgroup> | |
| 123 | − <corpauthor>Independent JPEG Group (<ulink | |
| 124 | −url="http://www.ijg.org">http://www.ijg.org</ulink>)</corpauthor> | |
| 125 | − </authorgroup> | |
| 126 | − <title>JPEG File Interchange Format</title> | |
| 127 | − <subtitle>Version 1.02</subtitle> | |
| 128 | − </biblioentry> | |
| 129 | − | |
| 130 | − <biblioentry id="itu-t81"> | |
| 131 | − <abbrev>ITU-T.81</abbrev> | |
| 132 | − <authorgroup> | |
| 133 | − <corpauthor>International Telecommunication Union | |
| 134 | −(<ulink url="http://www.itu.int">http://www.itu.int</ulink>)</corpauthor> | |
| 135 | − </authorgroup> | |
| 136 | − <title>ITU-T Recommendation T.81 | |
| 137 | −"Information Technology — Digital Compression and Coding of Continous-Tone | |
| 138 | −Still Images — Requirements and Guidelines"</title> | |
| 139 | − </biblioentry> | |
| 140 | − | |
| 141 | − <biblioentry id="w3c-jpeg-jfif"> | |
| 142 | − <abbrev>W3C JPEG JFIF</abbrev> | |
| 143 | − <authorgroup> | |
| 144 | − <corpauthor>The World Wide Web Consortium (<ulink | |
| 145 | −url="http://www.w3.org/Graphics/JPEG">http://www.w3.org</ulink>)</corpauthor> | |
| 146 | − </authorgroup> | |
| 147 | − <title>JPEG JFIF</title> | |
| 148 | − </biblioentry> | |
| 149 | − | |
| 150 | − <biblioentry id="smpte12m"> | |
| 151 | − <abbrev>SMPTE 12M</abbrev> | |
| 152 | − <authorgroup> | |
| 153 | − <corpauthor>Society of Motion Picture and Television Engineers | |
| 154 | −(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> | |
| 155 | − </authorgroup> | |
| 156 | − <title>SMPTE 12M-1999 "Television, Audio and Film - Time and | |
| 157 | −Control Code"</title> | |
| 158 | − </biblioentry> | |
| 159 | − | |
| 160 | − <biblioentry id="smpte170m"> | |
| 161 | − <abbrev>SMPTE 170M</abbrev> | |
| 162 | − <authorgroup> | |
| 163 | − <corpauthor>Society of Motion Picture and Television Engineers | |
| 164 | −(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> | |
| 165 | − </authorgroup> | |
| 166 | − <title>SMPTE 170M-1999 "Television - Composite Analog Video | |
| 167 | −Signal - NTSC for Studio Applications"</title> | |
| 168 | − </biblioentry> | |
| 169 | − | |
| 170 | − <biblioentry id="smpte240m"> | |
| 171 | − <abbrev>SMPTE 240M</abbrev> | |
| 172 | − <authorgroup> | |
| 173 | − <corpauthor>Society of Motion Picture and Television Engineers | |
| 174 | −(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> | |
| 175 | − </authorgroup> | |
| 176 | − <title>SMPTE 240M-1999 "Television - Signal Parameters - | |
| 177 | −1125-Line High-Definition Production"</title> | |
| 178 | − </biblioentry> | |
| 179 | − | |
| 180 | − <biblioentry id="smpte431"> | |
| 181 | − <abbrev>SMPTE RP 431-2</abbrev> | |
| 182 | − <authorgroup> | |
| 183 | − <corpauthor>Society of Motion Picture and Television Engineers | |
| 184 | −(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> | |
| 185 | − </authorgroup> | |
| 186 | − <title>SMPTE RP 431-2:2011 "D-Cinema Quality - Reference Projector and Environment"</title> | |
| 187 | − </biblioentry> | |
| 188 | − | |
| 189 | − <biblioentry id="smpte2084"> | |
| 190 | − <abbrev>SMPTE ST 2084</abbrev> | |
| 191 | − <authorgroup> | |
| 192 | − <corpauthor>Society of Motion Picture and Television Engineers | |
| 193 | −(<ulink url="http://www.smpte.org">http://www.smpte.org</ulink>)</corpauthor> | |
| 194 | − </authorgroup> | |
| 195 | − <title>SMPTE ST 2084:2014 "High Dynamic Range Electro-Optical Transfer Function of Master Reference Displays"</title> | |
| 196 | − </biblioentry> | |
| 197 | − | |
| 198 | − <biblioentry id="srgb"> | |
| 199 | − <abbrev>sRGB</abbrev> | |
| 200 | − <authorgroup> | |
| 201 | − <corpauthor>International Electrotechnical Commission | |
| 202 | −(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> | |
| 203 | − </authorgroup> | |
| 204 | − <title>IEC 61966-2-1 ed1.0 "Multimedia systems and equipment - Colour measurement | |
| 205 | −and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title> | |
| 206 | − </biblioentry> | |
| 207 | − | |
| 208 | − <biblioentry id="sycc"> | |
| 209 | − <abbrev>sYCC</abbrev> | |
| 210 | − <authorgroup> | |
| 211 | − <corpauthor>International Electrotechnical Commission | |
| 212 | −(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> | |
| 213 | − </authorgroup> | |
| 214 | − <title>IEC 61966-2-1-am1 ed1.0 "Amendment 1 - Multimedia systems and equipment - Colour measurement | |
| 215 | −and management - Part 2-1: Colour management - Default RGB colour space - sRGB"</title> | |
| 216 | − </biblioentry> | |
| 217 | − | |
| 218 | − <biblioentry id="xvycc"> | |
| 219 | − <abbrev>xvYCC</abbrev> | |
| 220 | − <authorgroup> | |
| 221 | − <corpauthor>International Electrotechnical Commission | |
| 222 | −(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> | |
| 223 | − </authorgroup> | |
| 224 | − <title>IEC 61966-2-4 ed1.0 "Multimedia systems and equipment - Colour measurement | |
| 225 | −and management - Part 2-4: Colour management - Extended-gamut YCC colour space for video | |
| 226 | −applications - xvYCC"</title> | |
| 227 | − </biblioentry> | |
| 228 | − | |
| 229 | − <biblioentry id="adobergb"> | |
| 230 | − <abbrev>AdobeRGB</abbrev> | |
| 231 | − <authorgroup> | |
| 232 | − <corpauthor>Adobe Systems Incorporated (<ulink url="http://www.adobe.com">http://www.adobe.com</ulink>)</corpauthor> | |
| 233 | − </authorgroup> | |
| 234 | − <title>Adobe© RGB (1998) Color Image Encoding Version 2005-05</title> | |
| 235 | − </biblioentry> | |
| 236 | − | |
| 237 | − <biblioentry id="oprgb"> | |
| 238 | − <abbrev>opRGB</abbrev> | |
| 239 | − <authorgroup> | |
| 240 | − <corpauthor>International Electrotechnical Commission | |
| 241 | −(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> | |
| 242 | − </authorgroup> | |
| 243 | − <title>IEC 61966-2-5 "Multimedia systems and equipment - Colour measurement | |
| 244 | −and management - Part 2-5: Colour management - Optional RGB colour space - opRGB"</title> | |
| 245 | − </biblioentry> | |
| 246 | − | |
| 247 | − <biblioentry id="itu2020"> | |
| 248 | − <abbrev>ITU BT.2020</abbrev> | |
| 249 | − <authorgroup> | |
| 250 | − <corpauthor>International Telecommunication Union (<ulink | |
| 251 | −url="http://www.itu.ch">http://www.itu.ch</ulink>)</corpauthor> | |
| 252 | − </authorgroup> | |
| 253 | − <title>ITU-R Recommendation BT.2020 (08/2012) "Parameter values for ultra-high | |
| 254 | −definition television systems for production and international programme exchange" | |
| 255 | −</title> | |
| 256 | − </biblioentry> | |
| 257 | − | |
| 258 | − <biblioentry id="tech3213"> | |
| 259 | − <abbrev>EBU Tech 3213</abbrev> | |
| 260 | − <authorgroup> | |
| 261 | − <corpauthor>European Broadcast Union (<ulink | |
| 262 | −url="http://www.ebu.ch">http://www.ebu.ch</ulink>)</corpauthor> | |
| 263 | − </authorgroup> | |
| 264 | − <title>E.B.U. Standard for Chromaticity Tolerances for Studio Monitors"</title> | |
| 265 | − </biblioentry> | |
| 266 | − | |
| 267 | − <biblioentry id="iec62106"> | |
| 268 | − <abbrev>IEC 62106</abbrev> | |
| 269 | − <authorgroup> | |
| 270 | − <corpauthor>International Electrotechnical Commission | |
| 271 | −(<ulink url="http://www.iec.ch">http://www.iec.ch</ulink>)</corpauthor> | |
| 272 | − </authorgroup> | |
| 273 | − <title>Specification of the radio data system (RDS) for VHF/FM sound broadcasting | |
| 274 | −in the frequency range from 87,5 to 108,0 MHz</title> | |
| 275 | − </biblioentry> | |
| 276 | − | |
| 277 | − <biblioentry id="nrsc4"> | |
| 278 | − <abbrev>NRSC-4-B</abbrev> | |
| 279 | − <authorgroup> | |
| 280 | − <corpauthor>National Radio Systems Committee | |
| 281 | −(<ulink url="http://www.nrscstandards.org">http://www.nrscstandards.org</ulink>)</corpauthor> | |
| 282 | − </authorgroup> | |
| 283 | − <title>NRSC-4-B: United States RBDS Standard</title> | |
| 284 | − </biblioentry> | |
| 285 | − | |
| 286 | − <biblioentry id="iso12232"> | |
| 287 | − <abbrev>ISO 12232:2006</abbrev> | |
| 288 | − <authorgroup> | |
| 289 | − <corpauthor>International Organization for Standardization | |
| 290 | −(<ulink url="http://www.iso.org">http://www.iso.org</ulink>)</corpauthor> | |
| 291 | − </authorgroup> | |
| 292 | − <title>Photography — Digital still cameras — Determination | |
| 293 | − of exposure index, ISO speed ratings, standard output sensitivity, and | |
| 294 | − recommended exposure index</title> | |
| 295 | − </biblioentry> | |
| 296 | − | |
| 297 | − <biblioentry id="cea861"> | |
| 298 | − <abbrev>CEA-861-E</abbrev> | |
| 299 | − <authorgroup> | |
| 300 | − <corpauthor>Consumer Electronics Association | |
| 301 | −(<ulink url="http://www.ce.org">http://www.ce.org</ulink>)</corpauthor> | |
| 302 | − </authorgroup> | |
| 303 | − <title>A DTV Profile for Uncompressed High Speed Digital Interfaces</title> | |
| 304 | − </biblioentry> | |
| 305 | − | |
| 306 | − <biblioentry id="vesadmt"> | |
| 307 | − <abbrev>VESA DMT</abbrev> | |
| 308 | − <authorgroup> | |
| 309 | − <corpauthor>Video Electronics Standards Association | |
| 310 | −(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor> | |
| 311 | − </authorgroup> | |
| 312 | − <title>VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT)</title> | |
| 313 | − </biblioentry> | |
| 314 | − | |
| 315 | − <biblioentry id="vesaedid"> | |
| 316 | − <abbrev>EDID</abbrev> | |
| 317 | − <authorgroup> | |
| 318 | − <corpauthor>Video Electronics Standards Association | |
| 319 | −(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor> | |
| 320 | − </authorgroup> | |
| 321 | − <title>VESA Enhanced Extended Display Identification Data Standard</title> | |
| 322 | − <subtitle>Release A, Revision 2</subtitle> | |
| 323 | − </biblioentry> | |
| 324 | − | |
| 325 | − <biblioentry id="hdcp"> | |
| 326 | − <abbrev>HDCP</abbrev> | |
| 327 | − <authorgroup> | |
| 328 | − <corpauthor>Digital Content Protection LLC | |
| 329 | −(<ulink url="http://www.digital-cp.com">http://www.digital-cp.com</ulink>)</corpauthor> | |
| 330 | − </authorgroup> | |
| 331 | − <title>High-bandwidth Digital Content Protection System</title> | |
| 332 | − <subtitle>Revision 1.3</subtitle> | |
| 333 | − </biblioentry> | |
| 334 | − | |
| 335 | − <biblioentry id="hdmi"> | |
| 336 | − <abbrev>HDMI</abbrev> | |
| 337 | − <authorgroup> | |
| 338 | − <corpauthor>HDMI Licensing LLC | |
| 339 | −(<ulink url="http://www.hdmi.org">http://www.hdmi.org</ulink>)</corpauthor> | |
| 340 | − </authorgroup> | |
| 341 | − <title>High-Definition Multimedia Interface</title> | |
| 342 | − <subtitle>Specification Version 1.4a</subtitle> | |
| 343 | − </biblioentry> | |
| 344 | − | |
| 345 | − <biblioentry id="hdmi2"> | |
| 346 | − <abbrev>HDMI2</abbrev> | |
| 347 | − <authorgroup> | |
| 348 | − <corpauthor>HDMI Licensing LLC | |
| 349 | −(<ulink url="http://www.hdmi.org">http://www.hdmi.org</ulink>)</corpauthor> | |
| 350 | − </authorgroup> | |
| 351 | − <title>High-Definition Multimedia Interface</title> | |
| 352 | − <subtitle>Specification Version 2.0</subtitle> | |
| 353 | − </biblioentry> | |
| 354 | − | |
| 355 | − <biblioentry id="dp"> | |
| 356 | − <abbrev>DP</abbrev> | |
| 357 | − <authorgroup> | |
| 358 | − <corpauthor>Video Electronics Standards Association | |
| 359 | −(<ulink url="http://www.vesa.org">http://www.vesa.org</ulink>)</corpauthor> | |
| 360 | − </authorgroup> | |
| 361 | − <title>VESA DisplayPort Standard</title> | |
| 362 | − <subtitle>Version 1, Revision 2</subtitle> | |
| 363 | − </biblioentry> | |
| 364 | − | |
| 365 | − <biblioentry id="poynton"> | |
| 366 | − <abbrev>poynton</abbrev> | |
| 367 | − <authorgroup> | |
| 368 | − <corpauthor>Charles Poynton</corpauthor> | |
| 369 | − </authorgroup> | |
| 370 | − <title>Digital Video and HDTV, Algorithms and Interfaces</title> | |
| 371 | − </biblioentry> | |
| 372 | − | |
| 373 | − <biblioentry id="colimg"> | |
| 374 | − <abbrev>colimg</abbrev> | |
| 375 | − <authorgroup> | |
| 376 | − <corpauthor>Erik Reinhard et al.</corpauthor> | |
| 377 | − </authorgroup> | |
| 378 | − <title>Color Imaging: Fundamentals and Applications</title> | |
| 379 | − </biblioentry> | |
| 380 | − | |
| 381 | − </bibliography> | |
| @@ -1,659 +0,0 @@ | ||
| 1 | −<programlisting> | |
| 2 | −/* | |
| 3 | − * V4L2 video capture example | |
| 4 | − * | |
| 5 | − * This program can be used and distributed without restrictions. | |
| 6 | − * | |
| 7 | − * This program is provided with the V4L2 API | |
| 8 | − * see https://linuxtv.org/docs.php for more information | |
| 9 | − */ | |
| 10 | − | |
| 11 | −#include <stdio.h> | |
| 12 | −#include <stdlib.h> | |
| 13 | −#include <string.h> | |
| 14 | −#include <assert.h> | |
| 15 | − | |
| 16 | −#include <getopt.h> /* getopt_long() */ | |
| 17 | − | |
| 18 | −#include <fcntl.h> /* low-level i/o */ | |
| 19 | −#include <unistd.h> | |
| 20 | −#include <errno.h> | |
| 21 | −#include <sys/stat.h> | |
| 22 | −#include <sys/types.h> | |
| 23 | −#include <sys/time.h> | |
| 24 | −#include <sys/mman.h> | |
| 25 | −#include <sys/ioctl.h> | |
| 26 | − | |
| 27 | −#include <linux/videodev2.h> | |
| 28 | − | |
| 29 | −#define CLEAR(x) memset(&(x), 0, sizeof(x)) | |
| 30 | − | |
| 31 | −enum io_method { | |
| 32 | − IO_METHOD_READ, | |
| 33 | − IO_METHOD_MMAP, | |
| 34 | − IO_METHOD_USERPTR, | |
| 35 | −}; | |
| 36 | − | |
| 37 | −struct buffer { | |
| 38 | − void *start; | |
| 39 | − size_t length; | |
| 40 | −}; | |
| 41 | − | |
| 42 | −static char *dev_name; | |
| 43 | −static enum io_method io = IO_METHOD_MMAP; | |
| 44 | −static int fd = -1; | |
| 45 | −struct buffer *buffers; | |
| 46 | −static unsigned int n_buffers; | |
| 47 | −static int out_buf; | |
| 48 | −static int force_format; | |
| 49 | −static int frame_count = 70; | |
| 50 | − | |
| 51 | −static void errno_exit(const char *s) | |
| 52 | −{ | |
| 53 | − fprintf(stderr, "%s error %d, %s\n", s, errno, strerror(errno)); | |
| 54 | − exit(EXIT_FAILURE); | |
| 55 | −} | |
| 56 | − | |
| 57 | −static int xioctl(int fh, int request, void *arg) | |
| 58 | −{ | |
| 59 | − int r; | |
| 60 | − | |
| 61 | − do { | |
| 62 | − r = ioctl(fh, request, arg); | |
| 63 | − } while (-1 == r && EINTR == errno); | |
| 64 | − | |
| 65 | − return r; | |
| 66 | −} | |
| 67 | − | |
| 68 | −static void process_image(const void *p, int size) | |
| 69 | −{ | |
| 70 | − if (out_buf) | |
| 71 | − fwrite(p, size, 1, stdout); | |
| 72 | − | |
| 73 | − fflush(stderr); | |
| 74 | − fprintf(stderr, "."); | |
| 75 | − fflush(stdout); | |
| 76 | −} | |
| 77 | − | |
| 78 | −static int read_frame(void) | |
| 79 | −{ | |
| 80 | − struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; | |
| 81 | − unsigned int i; | |
| 82 | − | |
| 83 | − switch (io) { | |
| 84 | − case IO_METHOD_READ: | |
| 85 | − if (-1 == read(fd, buffers[0].start, buffers[0].length)) { | |
| 86 | − switch (errno) { | |
| 87 | − case EAGAIN: | |
| 88 | − return 0; | |
| 89 | − | |
| 90 | − case EIO: | |
| 91 | − /* Could ignore EIO, see spec. */ | |
| 92 | − | |
| 93 | − /* fall through */ | |
| 94 | − | |
| 95 | − default: | |
| 96 | − errno_exit("read"); | |
| 97 | − } | |
| 98 | − } | |
| 99 | − | |
| 100 | − process_image(buffers[0].start, buffers[0].length); | |
| 101 | − break; | |
| 102 | − | |
| 103 | − case IO_METHOD_MMAP: | |
| 104 | − CLEAR(buf); | |
| 105 | − | |
| 106 | − buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 107 | − buf.memory = V4L2_MEMORY_MMAP; | |
| 108 | − | |
| 109 | − if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { | |
| 110 | − switch (errno) { | |
| 111 | − case EAGAIN: | |
| 112 | − return 0; | |
| 113 | − | |
| 114 | − case EIO: | |
| 115 | − /* Could ignore EIO, see spec. */ | |
| 116 | − | |
| 117 | − /* fall through */ | |
| 118 | − | |
| 119 | − default: | |
| 120 | − errno_exit("VIDIOC_DQBUF"); | |
| 121 | − } | |
| 122 | − } | |
| 123 | − | |
| 124 | − assert(buf.index < n_buffers); | |
| 125 | − | |
| 126 | − process_image(buffers[buf.index].start, buf.bytesused); | |
| 127 | − | |
| 128 | − if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) | |
| 129 | − errno_exit("VIDIOC_QBUF"); | |
| 130 | − break; | |
| 131 | − | |
| 132 | − case IO_METHOD_USERPTR: | |
| 133 | − CLEAR(buf); | |
| 134 | − | |
| 135 | − buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 136 | − buf.memory = V4L2_MEMORY_USERPTR; | |
| 137 | − | |
| 138 | − if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) { | |
| 139 | − switch (errno) { | |
| 140 | − case EAGAIN: | |
| 141 | − return 0; | |
| 142 | − | |
| 143 | − case EIO: | |
| 144 | − /* Could ignore EIO, see spec. */ | |
| 145 | − | |
| 146 | − /* fall through */ | |
| 147 | − | |
| 148 | − default: | |
| 149 | − errno_exit("VIDIOC_DQBUF"); | |
| 150 | − } | |
| 151 | − } | |
| 152 | − | |
| 153 | − for (i = 0; i < n_buffers; ++i) | |
| 154 | − if (buf.m.userptr == (unsigned long)buffers[i].start | |
| 155 | − && buf.length == buffers[i].length) | |
| 156 | − break; | |
| 157 | − | |
| 158 | − assert(i < n_buffers); | |
| 159 | − | |
| 160 | − process_image((void *)buf.m.userptr, buf.bytesused); | |
| 161 | − | |
| 162 | − if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) | |
| 163 | − errno_exit("VIDIOC_QBUF"); | |
| 164 | − break; | |
| 165 | − } | |
| 166 | − | |
| 167 | − return 1; | |
| 168 | −} | |
| 169 | − | |
| 170 | −static void mainloop(void) | |
| 171 | −{ | |
| 172 | − unsigned int count; | |
| 173 | − | |
| 174 | − count = frame_count; | |
| 175 | − | |
| 176 | − while (count-- > 0) { | |
| 177 | − for (;;) { | |
| 178 | − fd_set fds; | |
| 179 | − struct timeval tv; | |
| 180 | − int r; | |
| 181 | − | |
| 182 | − FD_ZERO(&fds); | |
| 183 | − FD_SET(fd, &fds); | |
| 184 | − | |
| 185 | − /* Timeout. */ | |
| 186 | − tv.tv_sec = 2; | |
| 187 | − tv.tv_usec = 0; | |
| 188 | − | |
| 189 | − r = select(fd + 1, &fds, NULL, NULL, &tv); | |
| 190 | − | |
| 191 | − if (-1 == r) { | |
| 192 | − if (EINTR == errno) | |
| 193 | − continue; | |
| 194 | − errno_exit("select"); | |
| 195 | − } | |
| 196 | − | |
| 197 | − if (0 == r) { | |
| 198 | − fprintf(stderr, "select timeout\n"); | |
| 199 | − exit(EXIT_FAILURE); | |
| 200 | − } | |
| 201 | − | |
| 202 | − if (read_frame()) | |
| 203 | − break; | |
| 204 | − /* EAGAIN - continue select loop. */ | |
| 205 | − } | |
| 206 | − } | |
| 207 | −} | |
| 208 | − | |
| 209 | −static void stop_capturing(void) | |
| 210 | −{ | |
| 211 | − enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type; | |
| 212 | − | |
| 213 | − switch (io) { | |
| 214 | − case IO_METHOD_READ: | |
| 215 | − /* Nothing to do. */ | |
| 216 | − break; | |
| 217 | − | |
| 218 | − case IO_METHOD_MMAP: | |
| 219 | − case IO_METHOD_USERPTR: | |
| 220 | − type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 221 | − if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type)) | |
| 222 | − errno_exit("VIDIOC_STREAMOFF"); | |
| 223 | − break; | |
| 224 | − } | |
| 225 | −} | |
| 226 | − | |
| 227 | −static void start_capturing(void) | |
| 228 | −{ | |
| 229 | − unsigned int i; | |
| 230 | − enum <link linkend="v4l2-buf-type">v4l2_buf_type</link> type; | |
| 231 | − | |
| 232 | − switch (io) { | |
| 233 | − case IO_METHOD_READ: | |
| 234 | − /* Nothing to do. */ | |
| 235 | − break; | |
| 236 | − | |
| 237 | − case IO_METHOD_MMAP: | |
| 238 | − for (i = 0; i < n_buffers; ++i) { | |
| 239 | − struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; | |
| 240 | − | |
| 241 | − CLEAR(buf); | |
| 242 | − buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 243 | − buf.memory = V4L2_MEMORY_MMAP; | |
| 244 | − buf.index = i; | |
| 245 | − | |
| 246 | − if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) | |
| 247 | − errno_exit("VIDIOC_QBUF"); | |
| 248 | − } | |
| 249 | − type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 250 | − if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) | |
| 251 | − errno_exit("VIDIOC_STREAMON"); | |
| 252 | − break; | |
| 253 | − | |
| 254 | − case IO_METHOD_USERPTR: | |
| 255 | − for (i = 0; i < n_buffers; ++i) { | |
| 256 | − struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; | |
| 257 | − | |
| 258 | − CLEAR(buf); | |
| 259 | − buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 260 | − buf.memory = V4L2_MEMORY_USERPTR; | |
| 261 | − buf.index = i; | |
| 262 | − buf.m.userptr = (unsigned long)buffers[i].start; | |
| 263 | − buf.length = buffers[i].length; | |
| 264 | − | |
| 265 | − if (-1 == xioctl(fd, VIDIOC_QBUF, &buf)) | |
| 266 | − errno_exit("VIDIOC_QBUF"); | |
| 267 | − } | |
| 268 | − type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 269 | − if (-1 == xioctl(fd, VIDIOC_STREAMON, &type)) | |
| 270 | − errno_exit("VIDIOC_STREAMON"); | |
| 271 | − break; | |
| 272 | − } | |
| 273 | −} | |
| 274 | − | |
| 275 | −static void uninit_device(void) | |
| 276 | −{ | |
| 277 | − unsigned int i; | |
| 278 | − | |
| 279 | − switch (io) { | |
| 280 | − case IO_METHOD_READ: | |
| 281 | − free(buffers[0].start); | |
| 282 | − break; | |
| 283 | − | |
| 284 | − case IO_METHOD_MMAP: | |
| 285 | − for (i = 0; i < n_buffers; ++i) | |
| 286 | − if (-1 == munmap(buffers[i].start, buffers[i].length)) | |
| 287 | − errno_exit("munmap"); | |
| 288 | − break; | |
| 289 | − | |
| 290 | − case IO_METHOD_USERPTR: | |
| 291 | − for (i = 0; i < n_buffers; ++i) | |
| 292 | − free(buffers[i].start); | |
| 293 | − break; | |
| 294 | − } | |
| 295 | − | |
| 296 | − free(buffers); | |
| 297 | −} | |
| 298 | − | |
| 299 | −static void init_read(unsigned int buffer_size) | |
| 300 | −{ | |
| 301 | − buffers = calloc(1, sizeof(*buffers)); | |
| 302 | − | |
| 303 | − if (!buffers) { | |
| 304 | − fprintf(stderr, "Out of memory\n"); | |
| 305 | − exit(EXIT_FAILURE); | |
| 306 | − } | |
| 307 | − | |
| 308 | − buffers[0].length = buffer_size; | |
| 309 | − buffers[0].start = malloc(buffer_size); | |
| 310 | − | |
| 311 | − if (!buffers[0].start) { | |
| 312 | − fprintf(stderr, "Out of memory\n"); | |
| 313 | − exit(EXIT_FAILURE); | |
| 314 | − } | |
| 315 | −} | |
| 316 | − | |
| 317 | −static void init_mmap(void) | |
| 318 | −{ | |
| 319 | − struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req; | |
| 320 | − | |
| 321 | − CLEAR(req); | |
| 322 | − | |
| 323 | − req.count = 4; | |
| 324 | − req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 325 | − req.memory = V4L2_MEMORY_MMAP; | |
| 326 | − | |
| 327 | − if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) { | |
| 328 | − if (EINVAL == errno) { | |
| 329 | − fprintf(stderr, "%s does not support " | |
| 330 | − "memory mapping\n", dev_name); | |
| 331 | − exit(EXIT_FAILURE); | |
| 332 | − } else { | |
| 333 | − errno_exit("VIDIOC_REQBUFS"); | |
| 334 | − } | |
| 335 | − } | |
| 336 | − | |
| 337 | − if (req.count < 2) { | |
| 338 | − fprintf(stderr, "Insufficient buffer memory on %s\n", | |
| 339 | − dev_name); | |
| 340 | − exit(EXIT_FAILURE); | |
| 341 | − } | |
| 342 | − | |
| 343 | − buffers = calloc(req.count, sizeof(*buffers)); | |
| 344 | − | |
| 345 | − if (!buffers) { | |
| 346 | − fprintf(stderr, "Out of memory\n"); | |
| 347 | − exit(EXIT_FAILURE); | |
| 348 | − } | |
| 349 | − | |
| 350 | − for (n_buffers = 0; n_buffers < req.count; ++n_buffers) { | |
| 351 | − struct <link linkend="v4l2-buffer">v4l2_buffer</link> buf; | |
| 352 | − | |
| 353 | − CLEAR(buf); | |
| 354 | − | |
| 355 | − buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 356 | − buf.memory = V4L2_MEMORY_MMAP; | |
| 357 | − buf.index = n_buffers; | |
| 358 | − | |
| 359 | − if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf)) | |
| 360 | − errno_exit("VIDIOC_QUERYBUF"); | |
| 361 | − | |
| 362 | − buffers[n_buffers].length = buf.length; | |
| 363 | − buffers[n_buffers].start = | |
| 364 | − mmap(NULL /* start anywhere */, | |
| 365 | − buf.length, | |
| 366 | − PROT_READ | PROT_WRITE /* required */, | |
| 367 | − MAP_SHARED /* recommended */, | |
| 368 | − fd, buf.m.offset); | |
| 369 | − | |
| 370 | − if (MAP_FAILED == buffers[n_buffers].start) | |
| 371 | − errno_exit("mmap"); | |
| 372 | − } | |
| 373 | −} | |
| 374 | − | |
| 375 | −static void init_userp(unsigned int buffer_size) | |
| 376 | −{ | |
| 377 | − struct <link linkend="v4l2-requestbuffers">v4l2_requestbuffers</link> req; | |
| 378 | − | |
| 379 | − CLEAR(req); | |
| 380 | − | |
| 381 | − req.count = 4; | |
| 382 | − req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 383 | − req.memory = V4L2_MEMORY_USERPTR; | |
| 384 | − | |
| 385 | − if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) { | |
| 386 | − if (EINVAL == errno) { | |
| 387 | − fprintf(stderr, "%s does not support " | |
| 388 | − "user pointer i/o\n", dev_name); | |
| 389 | − exit(EXIT_FAILURE); | |
| 390 | − } else { | |
| 391 | − errno_exit("VIDIOC_REQBUFS"); | |
| 392 | − } | |
| 393 | − } | |
| 394 | − | |
| 395 | − buffers = calloc(4, sizeof(*buffers)); | |
| 396 | − | |
| 397 | − if (!buffers) { | |
| 398 | − fprintf(stderr, "Out of memory\n"); | |
| 399 | − exit(EXIT_FAILURE); | |
| 400 | − } | |
| 401 | − | |
| 402 | − for (n_buffers = 0; n_buffers < 4; ++n_buffers) { | |
| 403 | − buffers[n_buffers].length = buffer_size; | |
| 404 | − buffers[n_buffers].start = malloc(buffer_size); | |
| 405 | − | |
| 406 | − if (!buffers[n_buffers].start) { | |
| 407 | − fprintf(stderr, "Out of memory\n"); | |
| 408 | − exit(EXIT_FAILURE); | |
| 409 | − } | |
| 410 | − } | |
| 411 | −} | |
| 412 | − | |
| 413 | −static void init_device(void) | |
| 414 | −{ | |
| 415 | − struct <link linkend="v4l2-capability">v4l2_capability</link> cap; | |
| 416 | − struct <link linkend="v4l2-cropcap">v4l2_cropcap</link> cropcap; | |
| 417 | − struct <link linkend="v4l2-crop">v4l2_crop</link> crop; | |
| 418 | − struct <link linkend="v4l2-format">v4l2_format</link> fmt; | |
| 419 | − unsigned int min; | |
| 420 | − | |
| 421 | − if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) { | |
| 422 | − if (EINVAL == errno) { | |
| 423 | − fprintf(stderr, "%s is no V4L2 device\n", | |
| 424 | − dev_name); | |
| 425 | − exit(EXIT_FAILURE); | |
| 426 | − } else { | |
| 427 | − errno_exit("VIDIOC_QUERYCAP"); | |
| 428 | − } | |
| 429 | − } | |
| 430 | − | |
| 431 | − if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { | |
| 432 | − fprintf(stderr, "%s is no video capture device\n", | |
| 433 | − dev_name); | |
| 434 | − exit(EXIT_FAILURE); | |
| 435 | − } | |
| 436 | − | |
| 437 | − switch (io) { | |
| 438 | − case IO_METHOD_READ: | |
| 439 | − if (!(cap.capabilities & V4L2_CAP_READWRITE)) { | |
| 440 | − fprintf(stderr, "%s does not support read i/o\n", | |
| 441 | − dev_name); | |
| 442 | − exit(EXIT_FAILURE); | |
| 443 | − } | |
| 444 | − break; | |
| 445 | − | |
| 446 | − case IO_METHOD_MMAP: | |
| 447 | − case IO_METHOD_USERPTR: | |
| 448 | − if (!(cap.capabilities & V4L2_CAP_STREAMING)) { | |
| 449 | − fprintf(stderr, "%s does not support streaming i/o\n", | |
| 450 | − dev_name); | |
| 451 | − exit(EXIT_FAILURE); | |
| 452 | − } | |
| 453 | − break; | |
| 454 | − } | |
| 455 | − | |
| 456 | − | |
| 457 | − /* Select video input, video standard and tune here. */ | |
| 458 | − | |
| 459 | − | |
| 460 | − CLEAR(cropcap); | |
| 461 | − | |
| 462 | − cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 463 | − | |
| 464 | − if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) { | |
| 465 | − crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 466 | − crop.c = cropcap.defrect; /* reset to default */ | |
| 467 | − | |
| 468 | − if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) { | |
| 469 | − switch (errno) { | |
| 470 | − case EINVAL: | |
| 471 | − /* Cropping not supported. */ | |
| 472 | − break; | |
| 473 | − default: | |
| 474 | − /* Errors ignored. */ | |
| 475 | − break; | |
| 476 | − } | |
| 477 | − } | |
| 478 | − } else { | |
| 479 | − /* Errors ignored. */ | |
| 480 | − } | |
| 481 | − | |
| 482 | − | |
| 483 | − CLEAR(fmt); | |
| 484 | − | |
| 485 | − fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 486 | − if (force_format) { | |
| 487 | − fmt.fmt.pix.width = 640; | |
| 488 | − fmt.fmt.pix.height = 480; | |
| 489 | − fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; | |
| 490 | − fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; | |
| 491 | − | |
| 492 | − if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt)) | |
| 493 | − errno_exit("VIDIOC_S_FMT"); | |
| 494 | − | |
| 495 | − /* Note VIDIOC_S_FMT may change width and height. */ | |
| 496 | − } else { | |
| 497 | − /* Preserve original settings as set by v4l2-ctl for example */ | |
| 498 | − if (-1 == xioctl(fd, VIDIOC_G_FMT, &fmt)) | |
| 499 | − errno_exit("VIDIOC_G_FMT"); | |
| 500 | − } | |
| 501 | − | |
| 502 | − /* Buggy driver paranoia. */ | |
| 503 | − min = fmt.fmt.pix.width * 2; | |
| 504 | − if (fmt.fmt.pix.bytesperline < min) | |
| 505 | − fmt.fmt.pix.bytesperline = min; | |
| 506 | − min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height; | |
| 507 | − if (fmt.fmt.pix.sizeimage < min) | |
| 508 | − fmt.fmt.pix.sizeimage = min; | |
| 509 | − | |
| 510 | − switch (io) { | |
| 511 | − case IO_METHOD_READ: | |
| 512 | − init_read(fmt.fmt.pix.sizeimage); | |
| 513 | − break; | |
| 514 | − | |
| 515 | − case IO_METHOD_MMAP: | |
| 516 | − init_mmap(); | |
| 517 | − break; | |
| 518 | − | |
| 519 | − case IO_METHOD_USERPTR: | |
| 520 | − init_userp(fmt.fmt.pix.sizeimage); | |
| 521 | − break; | |
| 522 | − } | |
| 523 | −} | |
| 524 | − | |
| 525 | −static void close_device(void) | |
| 526 | −{ | |
| 527 | − if (-1 == close(fd)) | |
| 528 | − errno_exit("close"); | |
| 529 | − | |
| 530 | − fd = -1; | |
| 531 | −} | |
| 532 | − | |
| 533 | −static void open_device(void) | |
| 534 | −{ | |
| 535 | − struct stat st; | |
| 536 | − | |
| 537 | − if (-1 == stat(dev_name, &st)) { | |
| 538 | − fprintf(stderr, "Cannot identify '%s': %d, %s\n", | |
| 539 | − dev_name, errno, strerror(errno)); | |
| 540 | − exit(EXIT_FAILURE); | |
| 541 | − } | |
| 542 | − | |
| 543 | − if (!S_ISCHR(st.st_mode)) { | |
| 544 | − fprintf(stderr, "%s is no device\n", dev_name); | |
| 545 | − exit(EXIT_FAILURE); | |
| 546 | − } | |
| 547 | − | |
| 548 | − fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0); | |
| 549 | − | |
| 550 | − if (-1 == fd) { | |
| 551 | − fprintf(stderr, "Cannot open '%s': %d, %s\n", | |
| 552 | − dev_name, errno, strerror(errno)); | |
| 553 | − exit(EXIT_FAILURE); | |
| 554 | − } | |
| 555 | −} | |
| 556 | − | |
| 557 | −static void usage(FILE *fp, int argc, char **argv) | |
| 558 | −{ | |
| 559 | − fprintf(fp, | |
| 560 | − "Usage: %s [options]\n\n" | |
| 561 | − "Version 1.3\n" | |
| 562 | − "Options:\n" | |
| 563 | − "-d | --device name Video device name [%s]\n" | |
| 564 | − "-h | --help Print this message\n" | |
| 565 | − "-m | --mmap Use memory mapped buffers [default]\n" | |
| 566 | − "-r | --read Use read() calls\n" | |
| 567 | − "-u | --userp Use application allocated buffers\n" | |
| 568 | − "-o | --output Outputs stream to stdout\n" | |
| 569 | − "-f | --format Force format to 640x480 YUYV\n" | |
| 570 | − "-c | --count Number of frames to grab [%i]\n" | |
| 571 | − "", | |
| 572 | − argv[0], dev_name, frame_count); | |
| 573 | −} | |
| 574 | − | |
| 575 | −static const char short_options[] = "d:hmruofc:"; | |
| 576 | − | |
| 577 | −static const struct option | |
| 578 | −long_options[] = { | |
| 579 | − { "device", required_argument, NULL, 'd' }, | |
| 580 | − { "help", no_argument, NULL, 'h' }, | |
| 581 | − { "mmap", no_argument, NULL, 'm' }, | |
| 582 | − { "read", no_argument, NULL, 'r' }, | |
| 583 | − { "userp", no_argument, NULL, 'u' }, | |
| 584 | − { "output", no_argument, NULL, 'o' }, | |
| 585 | − { "format", no_argument, NULL, 'f' }, | |
| 586 | − { "count", required_argument, NULL, 'c' }, | |
| 587 | − { 0, 0, 0, 0 } | |
| 588 | −}; | |
| 589 | − | |
| 590 | −int main(int argc, char **argv) | |
| 591 | −{ | |
| 592 | − dev_name = "/dev/video0"; | |
| 593 | − | |
| 594 | − for (;;) { | |
| 595 | − int idx; | |
| 596 | − int c; | |
| 597 | − | |
| 598 | − c = getopt_long(argc, argv, | |
| 599 | − short_options, long_options, &idx); | |
| 600 | − | |
| 601 | − if (-1 == c) | |
| 602 | − break; | |
| 603 | − | |
| 604 | − switch (c) { | |
| 605 | − case 0: /* getopt_long() flag */ | |
| 606 | − break; | |
| 607 | − | |
| 608 | − case 'd': | |
| 609 | − dev_name = optarg; | |
| 610 | − break; | |
| 611 | − | |
| 612 | − case 'h': | |
| 613 | − usage(stdout, argc, argv); | |
| 614 | − exit(EXIT_SUCCESS); | |
| 615 | − | |
| 616 | − case 'm': | |
| 617 | − io = IO_METHOD_MMAP; | |
| 618 | − break; | |
| 619 | − | |
| 620 | − case 'r': | |
| 621 | − io = IO_METHOD_READ; | |
| 622 | − break; | |
| 623 | − | |
| 624 | − case 'u': | |
| 625 | − io = IO_METHOD_USERPTR; | |
| 626 | − break; | |
| 627 | − | |
| 628 | − case 'o': | |
| 629 | − out_buf++; | |
| 630 | − break; | |
| 631 | − | |
| 632 | − case 'f': | |
| 633 | − force_format++; | |
| 634 | − break; | |
| 635 | − | |
| 636 | − case 'c': | |
| 637 | − errno = 0; | |
| 638 | − frame_count = strtol(optarg, NULL, 0); | |
| 639 | − if (errno) | |
| 640 | − errno_exit(optarg); | |
| 641 | − break; | |
| 642 | − | |
| 643 | − default: | |
| 644 | − usage(stderr, argc, argv); | |
| 645 | − exit(EXIT_FAILURE); | |
| 646 | − } | |
| 647 | − } | |
| 648 | − | |
| 649 | − open_device(); | |
| 650 | − init_device(); | |
| 651 | − start_capturing(); | |
| 652 | − mainloop(); | |
| 653 | − stop_capturing(); | |
| 654 | − uninit_device(); | |
| 655 | − close_device(); | |
| 656 | − fprintf(stderr, "\n"); | |
| 657 | − return 0; | |
| 658 | −} | |
| 659 | −</programlisting> | |
| @@ -1,75 +0,0 @@ | ||
| 1 | −<partinfo> | |
| 2 | − <authorgroup> | |
| 3 | − <author> | |
| 4 | − <firstname>Hans</firstname> | |
| 5 | − <surname>Verkuil</surname> | |
| 6 | − <affiliation><address><email>hans.verkuil@cisco.com</email></address></affiliation> | |
| 7 | − <contrib>Initial version.</contrib> | |
| 8 | − </author> | |
| 9 | − </authorgroup> | |
| 10 | − <copyright> | |
| 11 | − <year>2016</year> | |
| 12 | − <holder>Hans Verkuil</holder> | |
| 13 | − </copyright> | |
| 14 | − | |
| 15 | − <revhistory> | |
| 16 | − <!-- Put document revisions here, newest first. --> | |
| 17 | − <revision> | |
| 18 | − <revnumber>1.0.0</revnumber> | |
| 19 | − <date>2016-03-17</date> | |
| 20 | − <authorinitials>hv</authorinitials> | |
| 21 | − <revremark>Initial revision</revremark> | |
| 22 | − </revision> | |
| 23 | − </revhistory> | |
| 24 | −</partinfo> | |
| 25 | − | |
| 26 | −<title>CEC API</title> | |
| 27 | − | |
| 28 | −<chapter id="cec-api"> | |
| 29 | − <title>CEC: Consumer Electronics Control</title> | |
| 30 | − | |
| 31 | − <section id="cec-intro"> | |
| 32 | − <title>Introduction</title> | |
| 33 | − <para> | |
| 34 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 35 | − is currently only available as a staging kernel module. | |
| 36 | − </para> | |
| 37 | − <para>HDMI connectors provide a single pin for use by the Consumer Electronics | |
| 38 | − Control protocol. This protocol allows different devices connected by an HDMI cable | |
| 39 | − to communicate. The protocol for CEC version 1.4 is defined in supplements 1 (CEC) | |
| 40 | − and 2 (HEAC or HDMI Ethernet and Audio Return Channel) of the HDMI 1.4a | |
| 41 | − (<xref linkend="hdmi" />) specification and the extensions added to CEC version 2.0 | |
| 42 | − are defined in chapter 11 of the HDMI 2.0 (<xref linkend="hdmi2" />) specification. | |
| 43 | − </para> | |
| 44 | − | |
| 45 | − <para>The bitrate is very slow (effectively no more than 36 bytes per second) and | |
| 46 | − is based on the ancient AV.link protocol used in old SCART connectors. The protocol | |
| 47 | − closely resembles a crazy Rube Goldberg contraption and is an unholy mix of low and | |
| 48 | − high level messages. Some messages, especially those part of the HEAC protocol layered | |
| 49 | − on top of CEC, need to be handled by the kernel, others can be handled either by the | |
| 50 | − kernel or by userspace.</para> | |
| 51 | − | |
| 52 | − <para>In addition, CEC can be implemented in HDMI receivers, transmitters and in USB | |
| 53 | − devices that have an HDMI input and an HDMI output and that control just the CEC pin.</para> | |
| 54 | − | |
| 55 | − <para>Drivers that support CEC will create a CEC device node (/dev/cecX) | |
| 56 | − to give userspace access to the CEC adapter. The &CEC-ADAP-G-CAPS; ioctl will tell userspace | |
| 57 | − what it is allowed to do.</para> | |
| 58 | − </section> | |
| 59 | −</chapter> | |
| 60 | − | |
| 61 | −<appendix id="cec-user-func"> | |
| 62 | − <title>Function Reference</title> | |
| 63 | − <!-- Keep this alphabetically sorted. --> | |
| 64 | − &sub-cec-func-open; | |
| 65 | − &sub-cec-func-close; | |
| 66 | − &sub-cec-func-ioctl; | |
| 67 | − &sub-cec-func-poll; | |
| 68 | − <!-- All ioctls go here. --> | |
| 69 | − &sub-cec-ioc-adap-g-caps; | |
| 70 | − &sub-cec-ioc-adap-g-log-addrs; | |
| 71 | − &sub-cec-ioc-adap-g-phys-addr; | |
| 72 | − &sub-cec-ioc-dqevent; | |
| 73 | − &sub-cec-ioc-g-mode; | |
| 74 | − &sub-cec-ioc-receive; | |
| 75 | −</appendix> | |
| @@ -1,64 +0,0 @@ | ||
| 1 | −<refentry id="cec-func-close"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>cec close()</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>cec-close</refname> | |
| 9 | − <refpurpose>Close a cec device</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcsynopsisinfo>#include <unistd.h></funcsynopsisinfo> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>close</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − </funcprototype> | |
| 19 | − </funcsynopsis> | |
| 20 | − </refsynopsisdiv> | |
| 21 | − | |
| 22 | − <refsect1> | |
| 23 | − <title>Arguments</title> | |
| 24 | − | |
| 25 | − <variablelist> | |
| 26 | − <varlistentry> | |
| 27 | − <term><parameter>fd</parameter></term> | |
| 28 | − <listitem> | |
| 29 | − <para>&fd;</para> | |
| 30 | − </listitem> | |
| 31 | − </varlistentry> | |
| 32 | − </variablelist> | |
| 33 | − </refsect1> | |
| 34 | − | |
| 35 | − <refsect1> | |
| 36 | − <title>Description</title> | |
| 37 | − | |
| 38 | − <para> | |
| 39 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 40 | − is currently only available as a staging kernel module. | |
| 41 | − </para> | |
| 42 | − | |
| 43 | − <para>Closes the cec device. Resources associated with the file descriptor | |
| 44 | − are freed. The device configuration remain unchanged.</para> | |
| 45 | − </refsect1> | |
| 46 | − | |
| 47 | − <refsect1> | |
| 48 | − <title>Return Value</title> | |
| 49 | − | |
| 50 | − <para><function>close</function> returns 0 on success. On error, -1 is | |
| 51 | − returned, and <varname>errno</varname> is set appropriately. Possible error | |
| 52 | − codes are:</para> | |
| 53 | − | |
| 54 | − <variablelist> | |
| 55 | − <varlistentry> | |
| 56 | − <term><errorcode>EBADF</errorcode></term> | |
| 57 | − <listitem> | |
| 58 | − <para><parameter>fd</parameter> is not a valid open file descriptor. | |
| 59 | − </para> | |
| 60 | − </listitem> | |
| 61 | − </varlistentry> | |
| 62 | − </variablelist> | |
| 63 | − </refsect1> | |
| 64 | −</refentry> | |
| @@ -1,78 +0,0 @@ | ||
| 1 | −<refentry id="cec-func-ioctl"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>cec ioctl()</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>cec-ioctl</refname> | |
| 9 | − <refpurpose>Control a cec device</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcsynopsisinfo>#include <sys/ioctl.h></funcsynopsisinfo> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>void *<parameter>argp</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − | |
| 27 | − <variablelist> | |
| 28 | − <varlistentry> | |
| 29 | − <term><parameter>fd</parameter></term> | |
| 30 | − <listitem> | |
| 31 | − <para>&fd;</para> | |
| 32 | − </listitem> | |
| 33 | − </varlistentry> | |
| 34 | − <varlistentry> | |
| 35 | − <term><parameter>request</parameter></term> | |
| 36 | − <listitem> | |
| 37 | − <para>CEC ioctl request code as defined in the cec.h header file, | |
| 38 | − for example CEC_ADAP_G_CAPS.</para> | |
| 39 | − </listitem> | |
| 40 | − </varlistentry> | |
| 41 | − <varlistentry> | |
| 42 | − <term><parameter>argp</parameter></term> | |
| 43 | − <listitem> | |
| 44 | − <para>Pointer to a request-specific structure.</para> | |
| 45 | − </listitem> | |
| 46 | − </varlistentry> | |
| 47 | − </variablelist> | |
| 48 | − </refsect1> | |
| 49 | − | |
| 50 | − <refsect1> | |
| 51 | − <title>Description</title> | |
| 52 | − <para> | |
| 53 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 54 | − is currently only available as a staging kernel module. | |
| 55 | − </para> | |
| 56 | − | |
| 57 | − <para>The <function>ioctl()</function> function manipulates cec device | |
| 58 | − parameters. The argument <parameter>fd</parameter> must be an open file | |
| 59 | − descriptor.</para> | |
| 60 | − <para>The ioctl <parameter>request</parameter> code specifies the cec | |
| 61 | − function to be called. It has encoded in it whether the argument is an | |
| 62 | − input, output or read/write parameter, and the size of the argument | |
| 63 | − <parameter>argp</parameter> in bytes.</para> | |
| 64 | − <para>Macros and structures definitions specifying cec ioctl requests and | |
| 65 | − their parameters are located in the cec.h header file. All cec ioctl | |
| 66 | − requests, their respective function and parameters are specified in | |
| 67 | − <xref linkend="cec-user-func" />.</para> | |
| 68 | − </refsect1> | |
| 69 | − | |
| 70 | − <refsect1> | |
| 71 | − &return-value; | |
| 72 | − | |
| 73 | − <para>Request-specific error codes are listed in the | |
| 74 | − individual requests descriptions.</para> | |
| 75 | − <para>When an ioctl that takes an output or read/write parameter fails, | |
| 76 | − the parameter remains unmodified.</para> | |
| 77 | − </refsect1> | |
| 78 | −</refentry> | |
| @@ -1,104 +0,0 @@ | ||
| 1 | −<refentry id="cec-func-open"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>cec open()</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>cec-open</refname> | |
| 9 | − <refpurpose>Open a cec device</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcsynopsisinfo>#include <fcntl.h></funcsynopsisinfo> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>open</function></funcdef> | |
| 17 | − <paramdef>const char *<parameter>device_name</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>flags</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>device_name</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>Device to be opened.</para> | |
| 31 | − </listitem> | |
| 32 | − </varlistentry> | |
| 33 | − <varlistentry> | |
| 34 | − <term><parameter>flags</parameter></term> | |
| 35 | − <listitem> | |
| 36 | − <para>Open flags. Access mode must be <constant>O_RDWR</constant>. | |
| 37 | − </para> | |
| 38 | − <para>When the <constant>O_NONBLOCK</constant> flag is | |
| 39 | −given, the &CEC-RECEIVE; ioctl will return &EAGAIN; when no message is | |
| 40 | −available, and the &CEC-TRANSMIT;, &CEC-ADAP-S-PHYS-ADDR; and | |
| 41 | −&CEC-ADAP-S-LOG-ADDRS; ioctls all act in non-blocking mode.</para> | |
| 42 | − <para>Other flags have no effect.</para> | |
| 43 | − </listitem> | |
| 44 | − </varlistentry> | |
| 45 | − </variablelist> | |
| 46 | − </refsect1> | |
| 47 | − <refsect1> | |
| 48 | − <title>Description</title> | |
| 49 | − <para> | |
| 50 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 51 | − is currently only available as a staging kernel module. | |
| 52 | − </para> | |
| 53 | − | |
| 54 | − <para>To open a cec device applications call <function>open()</function> | |
| 55 | − with the desired device name. The function has no side effects; the device | |
| 56 | − configuration remain unchanged.</para> | |
| 57 | − <para>When the device is opened in read-only mode, attempts to modify its | |
| 58 | − configuration will result in an error, and <varname>errno</varname> will be | |
| 59 | − set to <errorcode>EBADF</errorcode>.</para> | |
| 60 | − </refsect1> | |
| 61 | − <refsect1> | |
| 62 | − <title>Return Value</title> | |
| 63 | − | |
| 64 | − <para><function>open</function> returns the new file descriptor on success. | |
| 65 | − On error, -1 is returned, and <varname>errno</varname> is set appropriately. | |
| 66 | − Possible error codes include:</para> | |
| 67 | − | |
| 68 | − <variablelist> | |
| 69 | − <varlistentry> | |
| 70 | − <term><errorcode>EACCES</errorcode></term> | |
| 71 | − <listitem> | |
| 72 | − <para>The requested access to the file is not allowed.</para> | |
| 73 | − </listitem> | |
| 74 | − </varlistentry> | |
| 75 | − <varlistentry> | |
| 76 | − <term><errorcode>EMFILE</errorcode></term> | |
| 77 | − <listitem> | |
| 78 | − <para>The process already has the maximum number of files open. | |
| 79 | − </para> | |
| 80 | − </listitem> | |
| 81 | − </varlistentry> | |
| 82 | − <varlistentry> | |
| 83 | − <term><errorcode>ENFILE</errorcode></term> | |
| 84 | − <listitem> | |
| 85 | − <para>The system limit on the total number of open files has been | |
| 86 | − reached.</para> | |
| 87 | − </listitem> | |
| 88 | − </varlistentry> | |
| 89 | − <varlistentry> | |
| 90 | − <term><errorcode>ENOMEM</errorcode></term> | |
| 91 | − <listitem> | |
| 92 | − <para>Insufficient kernel memory was available.</para> | |
| 93 | − </listitem> | |
| 94 | − </varlistentry> | |
| 95 | − <varlistentry> | |
| 96 | − <term><errorcode>ENXIO</errorcode></term> | |
| 97 | − <listitem> | |
| 98 | − <para>No device corresponding to this device special file exists. | |
| 99 | − </para> | |
| 100 | − </listitem> | |
| 101 | − </varlistentry> | |
| 102 | − </variablelist> | |
| 103 | − </refsect1> | |
| 104 | −</refentry> | |
| @@ -1,94 +0,0 @@ | ||
| 1 | −<refentry id="cec-func-poll"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>cec poll()</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>cec-poll</refname> | |
| 9 | − <refpurpose>Wait for some event on a file descriptor</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcsynopsisinfo>#include <sys/poll.h></funcsynopsisinfo> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>poll</function></funcdef> | |
| 17 | − <paramdef>struct pollfd *<parameter>ufds</parameter></paramdef> | |
| 18 | − <paramdef>unsigned int <parameter>nfds</parameter></paramdef> | |
| 19 | − <paramdef>int <parameter>timeout</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Description</title> | |
| 26 | − | |
| 27 | − <para> | |
| 28 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 29 | − is currently only available as a staging kernel module. | |
| 30 | − </para> | |
| 31 | − | |
| 32 | − <para>With the <function>poll()</function> function applications | |
| 33 | −can wait for CEC events.</para> | |
| 34 | − | |
| 35 | − <para>On success <function>poll()</function> returns the number of | |
| 36 | −file descriptors that have been selected (that is, file descriptors | |
| 37 | −for which the <structfield>revents</structfield> field of the | |
| 38 | −respective <structname>pollfd</structname> structure is non-zero). | |
| 39 | −CEC devices set the <constant>POLLIN</constant> and | |
| 40 | −<constant>POLLRDNORM</constant> flags in the | |
| 41 | −<structfield>revents</structfield> field if there are messages in the | |
| 42 | −receive queue. If the transmit queue has room for new messages, the | |
| 43 | −<constant>POLLOUT</constant> and <constant>POLLWRNORM</constant> | |
| 44 | −flags are set. If there are events in the event queue, then the | |
| 45 | −<constant>POLLPRI</constant> flag is set. | |
| 46 | −When the function timed out it returns a value of zero, on | |
| 47 | −failure it returns <returnvalue>-1</returnvalue> and the | |
| 48 | −<varname>errno</varname> variable is set appropriately. | |
| 49 | −</para> | |
| 50 | − | |
| 51 | − <para>For more details see the | |
| 52 | −<function>poll()</function> manual page.</para> | |
| 53 | − </refsect1> | |
| 54 | − | |
| 55 | − <refsect1> | |
| 56 | − <title>Return Value</title> | |
| 57 | − | |
| 58 | − <para>On success, <function>poll()</function> returns the number | |
| 59 | −structures which have non-zero <structfield>revents</structfield> | |
| 60 | −fields, or zero if the call timed out. On error | |
| 61 | −<returnvalue>-1</returnvalue> is returned, and the | |
| 62 | −<varname>errno</varname> variable is set appropriately:</para> | |
| 63 | − | |
| 64 | − <variablelist> | |
| 65 | − <varlistentry> | |
| 66 | − <term><errorcode>EBADF</errorcode></term> | |
| 67 | − <listitem> | |
| 68 | − <para>One or more of the <parameter>ufds</parameter> members | |
| 69 | −specify an invalid file descriptor.</para> | |
| 70 | − </listitem> | |
| 71 | − </varlistentry> | |
| 72 | − <varlistentry> | |
| 73 | − <term><errorcode>EFAULT</errorcode></term> | |
| 74 | − <listitem> | |
| 75 | − <para><parameter>ufds</parameter> references an inaccessible | |
| 76 | −memory area.</para> | |
| 77 | − </listitem> | |
| 78 | − </varlistentry> | |
| 79 | − <varlistentry> | |
| 80 | − <term><errorcode>EINTR</errorcode></term> | |
| 81 | − <listitem> | |
| 82 | − <para>The call was interrupted by a signal.</para> | |
| 83 | − </listitem> | |
| 84 | − </varlistentry> | |
| 85 | − <varlistentry> | |
| 86 | − <term><errorcode>EINVAL</errorcode></term> | |
| 87 | − <listitem> | |
| 88 | − <para>The <parameter>nfds</parameter> argument is greater | |
| 89 | −than <constant>OPEN_MAX</constant>.</para> | |
| 90 | − </listitem> | |
| 91 | − </varlistentry> | |
| 92 | − </variablelist> | |
| 93 | − </refsect1> | |
| 94 | −</refentry> | |
| @@ -1,151 +0,0 @@ | ||
| 1 | −<refentry id="cec-ioc-adap-g-caps"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl CEC_ADAP_G_CAPS</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>CEC_ADAP_G_CAPS</refname> | |
| 9 | − <refpurpose>Query device capabilities</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>struct cec_caps *<parameter>argp</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>fd</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>File descriptor returned by | |
| 31 | − <link linkend='cec-func-open'><function>open()</function></link>.</para> | |
| 32 | − </listitem> | |
| 33 | − </varlistentry> | |
| 34 | − <varlistentry> | |
| 35 | − <term><parameter>request</parameter></term> | |
| 36 | − <listitem> | |
| 37 | − <para>CEC_ADAP_G_CAPS</para> | |
| 38 | − </listitem> | |
| 39 | − </varlistentry> | |
| 40 | − <varlistentry> | |
| 41 | − <term><parameter>argp</parameter></term> | |
| 42 | − <listitem> | |
| 43 | − <para></para> | |
| 44 | − </listitem> | |
| 45 | − </varlistentry> | |
| 46 | − </variablelist> | |
| 47 | − </refsect1> | |
| 48 | − | |
| 49 | − <refsect1> | |
| 50 | − <title>Description</title> | |
| 51 | − | |
| 52 | − <para> | |
| 53 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 54 | − is currently only available as a staging kernel module. | |
| 55 | − </para> | |
| 56 | − | |
| 57 | − <para>All cec devices must support the <constant>CEC_ADAP_G_CAPS</constant> | |
| 58 | − ioctl. To query device information, applications call the ioctl with a | |
| 59 | − pointer to a &cec-caps;. The driver fills the structure and returns | |
| 60 | − the information to the application. | |
| 61 | − The ioctl never fails.</para> | |
| 62 | − | |
| 63 | − <table pgwide="1" frame="none" id="cec-caps"> | |
| 64 | − <title>struct <structname>cec_caps</structname></title> | |
| 65 | − <tgroup cols="3"> | |
| 66 | − &cs-str; | |
| 67 | − <tbody valign="top"> | |
| 68 | − <row> | |
| 69 | − <entry>char</entry> | |
| 70 | − <entry><structfield>driver[32]</structfield></entry> | |
| 71 | − <entry>The name of the cec adapter driver.</entry> | |
| 72 | − </row> | |
| 73 | − <row> | |
| 74 | − <entry>char</entry> | |
| 75 | − <entry><structfield>name[32]</structfield></entry> | |
| 76 | − <entry>The name of this CEC adapter. The combination <structfield>driver</structfield> | |
| 77 | − and <structfield>name</structfield> must be unique.</entry> | |
| 78 | − </row> | |
| 79 | − <row> | |
| 80 | − <entry>__u32</entry> | |
| 81 | − <entry><structfield>capabilities</structfield></entry> | |
| 82 | − <entry>The capabilities of the CEC adapter, see <xref | |
| 83 | − linkend="cec-capabilities" />.</entry> | |
| 84 | − </row> | |
| 85 | − <row> | |
| 86 | − <entry>__u32</entry> | |
| 87 | − <entry><structfield>version</structfield></entry> | |
| 88 | − <entry>CEC Framework API version, formatted with the | |
| 89 | − <constant>KERNEL_VERSION()</constant> macro.</entry> | |
| 90 | − </row> | |
| 91 | − </tbody> | |
| 92 | − </tgroup> | |
| 93 | − </table> | |
| 94 | − | |
| 95 | − <table pgwide="1" frame="none" id="cec-capabilities"> | |
| 96 | − <title>CEC Capabilities Flags</title> | |
| 97 | − <tgroup cols="3"> | |
| 98 | − &cs-def; | |
| 99 | − <tbody valign="top"> | |
| 100 | − <row> | |
| 101 | − <entry><constant>CEC_CAP_PHYS_ADDR</constant></entry> | |
| 102 | − <entry>0x00000001</entry> | |
| 103 | − <entry>Userspace has to configure the physical address by | |
| 104 | − calling &CEC-ADAP-S-PHYS-ADDR;. If this capability isn't set, | |
| 105 | − then setting the physical address is handled by the kernel | |
| 106 | − whenever the EDID is set (for an HDMI receiver) or read (for | |
| 107 | − an HDMI transmitter).</entry> | |
| 108 | − </row> | |
| 109 | − <row> | |
| 110 | − <entry><constant>CEC_CAP_LOG_ADDRS</constant></entry> | |
| 111 | − <entry>0x00000002</entry> | |
| 112 | − <entry>Userspace has to configure the logical addresses by | |
| 113 | − calling &CEC-ADAP-S-LOG-ADDRS;. If this capability isn't set, | |
| 114 | − then the kernel will have configured this.</entry> | |
| 115 | − </row> | |
| 116 | − <row> | |
| 117 | − <entry><constant>CEC_CAP_TRANSMIT</constant></entry> | |
| 118 | − <entry>0x00000004</entry> | |
| 119 | − <entry>Userspace can transmit CEC messages by calling &CEC-TRANSMIT;. This | |
| 120 | − implies that userspace can be a follower as well, since being able to | |
| 121 | − transmit messages is a prerequisite of becoming a follower. If this | |
| 122 | − capability isn't set, then the kernel will handle all CEC transmits | |
| 123 | − and process all CEC messages it receives. | |
| 124 | − </entry> | |
| 125 | − </row> | |
| 126 | − <row> | |
| 127 | − <entry><constant>CEC_CAP_PASSTHROUGH</constant></entry> | |
| 128 | − <entry>0x00000008</entry> | |
| 129 | − <entry>Userspace can use the passthrough mode by | |
| 130 | − calling &CEC-S-MODE;.</entry> | |
| 131 | − </row> | |
| 132 | − <row> | |
| 133 | − <entry><constant>CEC_CAP_RC</constant></entry> | |
| 134 | − <entry>0x00000010</entry> | |
| 135 | − <entry>This adapter supports the remote control protocol.</entry> | |
| 136 | − </row> | |
| 137 | − <row> | |
| 138 | − <entry><constant>CEC_CAP_MONITOR_ALL</constant></entry> | |
| 139 | − <entry>0x00000020</entry> | |
| 140 | − <entry>The CEC hardware can monitor all messages, not just directed and | |
| 141 | − broadcast messages.</entry> | |
| 142 | − </row> | |
| 143 | − </tbody> | |
| 144 | − </tgroup> | |
| 145 | − </table> | |
| 146 | − </refsect1> | |
| 147 | − | |
| 148 | − <refsect1> | |
| 149 | − &return-value; | |
| 150 | − </refsect1> | |
| 151 | −</refentry> | |
| @@ -1,329 +0,0 @@ | ||
| 1 | −<refentry id="cec-ioc-adap-g-log-addrs"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>CEC_ADAP_G_LOG_ADDRS</refname> | |
| 9 | − <refname>CEC_ADAP_S_LOG_ADDRS</refname> | |
| 10 | − <refpurpose>Get or set the logical addresses</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>struct cec_log_addrs *<parameter>argp</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − | |
| 27 | − <variablelist> | |
| 28 | − <varlistentry> | |
| 29 | − <term><parameter>fd</parameter></term> | |
| 30 | − <listitem> | |
| 31 | − <para>File descriptor returned by | |
| 32 | − <link linkend='cec-func-open'><function>open()</function></link>.</para> | |
| 33 | − </listitem> | |
| 34 | − </varlistentry> | |
| 35 | − <varlistentry> | |
| 36 | − <term><parameter>request</parameter></term> | |
| 37 | − <listitem> | |
| 38 | − <para>CEC_ADAP_G_LOG_ADDRS, CEC_ADAP_S_LOG_ADDRS</para> | |
| 39 | − </listitem> | |
| 40 | − </varlistentry> | |
| 41 | − <varlistentry> | |
| 42 | − <term><parameter>argp</parameter></term> | |
| 43 | − <listitem> | |
| 44 | − <para></para> | |
| 45 | − </listitem> | |
| 46 | − </varlistentry> | |
| 47 | − </variablelist> | |
| 48 | − </refsect1> | |
| 49 | − | |
| 50 | − <refsect1> | |
| 51 | − <title>Description</title> | |
| 52 | − | |
| 53 | − <para> | |
| 54 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 55 | − is currently only available as a staging kernel module. | |
| 56 | − </para> | |
| 57 | − | |
| 58 | − <para>To query the current CEC logical addresses, applications call the | |
| 59 | −<constant>CEC_ADAP_G_LOG_ADDRS</constant> ioctl with a pointer to a | |
| 60 | −<structname>cec_log_addrs</structname> structure where the drivers stores the | |
| 61 | −logical addresses.</para> | |
| 62 | − | |
| 63 | − <para>To set new logical addresses, applications fill in struct <structname>cec_log_addrs</structname> | |
| 64 | −and call the <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl with a pointer to this struct. | |
| 65 | −The <constant>CEC_ADAP_S_LOG_ADDRS</constant> ioctl is only available if | |
| 66 | −<constant>CEC_CAP_LOG_ADDRS</constant> is set (&ENOTTY; is returned otherwise). This ioctl will block until all | |
| 67 | −requested logical addresses have been claimed. <constant>CEC_ADAP_S_LOG_ADDRS</constant> | |
| 68 | −can only be called by a file handle in initiator mode (see &CEC-S-MODE;).</para> | |
| 69 | − | |
| 70 | − <table pgwide="1" frame="none" id="cec-log-addrs"> | |
| 71 | − <title>struct <structname>cec_log_addrs</structname></title> | |
| 72 | − <tgroup cols="3"> | |
| 73 | − &cs-str; | |
| 74 | − <tbody valign="top"> | |
| 75 | − <row> | |
| 76 | − <entry>__u8</entry> | |
| 77 | − <entry><structfield>log_addr</structfield>[CEC_MAX_LOG_ADDRS]</entry> | |
| 78 | − <entry>The actual logical addresses that were claimed. This is set by the | |
| 79 | − driver. If no logical address could be claimed, then it is set to | |
| 80 | − <constant>CEC_LOG_ADDR_INVALID</constant>. If this adapter is Unregistered, | |
| 81 | − then <structfield>log_addr[0]</structfield> is set to 0xf and all others to | |
| 82 | − <constant>CEC_LOG_ADDR_INVALID</constant>.</entry> | |
| 83 | − </row> | |
| 84 | − <row> | |
| 85 | − <entry>__u16</entry> | |
| 86 | − <entry><structfield>log_addr_mask</structfield></entry> | |
| 87 | − <entry>The bitmask of all logical addresses this adapter has claimed. | |
| 88 | − If this adapter is Unregistered then <structfield>log_addr_mask</structfield> | |
| 89 | − sets bit 15 and clears all other bits. If this adapter is not configured at all, then | |
| 90 | − <structfield>log_addr_mask</structfield> is set to 0. Set by the driver.</entry> | |
| 91 | − </row> | |
| 92 | − <row> | |
| 93 | − <entry>__u8</entry> | |
| 94 | − <entry><structfield>cec_version</structfield></entry> | |
| 95 | − <entry>The CEC version that this adapter shall use. See | |
| 96 | − <xref linkend="cec-versions" />. | |
| 97 | − Used to implement the <constant>CEC_MSG_CEC_VERSION</constant> and | |
| 98 | − <constant>CEC_MSG_REPORT_FEATURES</constant> messages. Note that | |
| 99 | − <constant>CEC_OP_CEC_VERSION_1_3A</constant> is not allowed | |
| 100 | − by the CEC framework. | |
| 101 | − </entry> | |
| 102 | − </row> | |
| 103 | − <row> | |
| 104 | − <entry>__u8</entry> | |
| 105 | − <entry><structfield>num_log_addrs</structfield></entry> | |
| 106 | − <entry>Number of logical addresses to set up. Must be ≤ | |
| 107 | − <structfield>available_log_addrs</structfield> as returned by | |
| 108 | − &CEC-ADAP-G-CAPS;. All arrays in this structure are only filled up to | |
| 109 | − index <structfield>available_log_addrs</structfield>-1. The remaining | |
| 110 | − array elements will be ignored. Note that the CEC 2.0 standard allows | |
| 111 | − for a maximum of 2 logical addresses, although some hardware has support | |
| 112 | − for more. <constant>CEC_MAX_LOG_ADDRS</constant> is 4. The driver will | |
| 113 | − return the actual number of logical addresses it could claim, which may | |
| 114 | − be less than what was requested. If this field is set to 0, then the | |
| 115 | − CEC adapter shall clear all claimed logical addresses and all other | |
| 116 | − fields will be ignored.</entry> | |
| 117 | − </row> | |
| 118 | − <row> | |
| 119 | − <entry>__u32</entry> | |
| 120 | − <entry><structfield>vendor_id</structfield></entry> | |
| 121 | − <entry>The vendor ID is a 24-bit number that identifies the specific | |
| 122 | − vendor or entity. Based on this ID vendor specific commands may be | |
| 123 | − defined. If you do not want a vendor ID then set it to | |
| 124 | − <constant>CEC_VENDOR_ID_NONE</constant>.</entry> | |
| 125 | − </row> | |
| 126 | − <row> | |
| 127 | − <entry>__u32</entry> | |
| 128 | − <entry><structfield>flags</structfield></entry> | |
| 129 | − <entry>Flags. No flags are defined yet, so set this to 0.</entry> | |
| 130 | − </row> | |
| 131 | − <row> | |
| 132 | − <entry>char</entry> | |
| 133 | − <entry><structfield>osd_name</structfield>[15]</entry> | |
| 134 | − <entry>The On-Screen Display name as is returned by the | |
| 135 | − <constant>CEC_MSG_SET_OSD_NAME</constant> message.</entry> | |
| 136 | − </row> | |
| 137 | − <row> | |
| 138 | − <entry>__u8</entry> | |
| 139 | − <entry><structfield>primary_device_type</structfield>[CEC_MAX_LOG_ADDRS]</entry> | |
| 140 | − <entry>Primary device type for each logical address. See | |
| 141 | − <xref linkend="cec-prim-dev-types" /> for possible types.</entry> | |
| 142 | − </row> | |
| 143 | − <row> | |
| 144 | − <entry>__u8</entry> | |
| 145 | − <entry><structfield>log_addr_type</structfield>[CEC_MAX_LOG_ADDRS]</entry> | |
| 146 | − <entry>Logical address types. See <xref linkend="cec-log-addr-types" /> for | |
| 147 | − possible types. The driver will update this with the actual logical address | |
| 148 | − type that it claimed (e.g. it may have to fallback to | |
| 149 | − <constant>CEC_LOG_ADDR_TYPE_UNREGISTERED</constant>).</entry> | |
| 150 | − </row> | |
| 151 | − <row> | |
| 152 | − <entry>__u8</entry> | |
| 153 | − <entry><structfield>all_device_types</structfield>[CEC_MAX_LOG_ADDRS]</entry> | |
| 154 | − <entry>CEC 2.0 specific: all device types. See <xref linkend="cec-all-dev-types-flags" />. | |
| 155 | − Used to implement the <constant>CEC_MSG_REPORT_FEATURES</constant> message. | |
| 156 | − This field is ignored if <structfield>cec_version</structfield> < | |
| 157 | − <constant>CEC_OP_CEC_VERSION_2_0</constant>.</entry> | |
| 158 | − </row> | |
| 159 | − <row> | |
| 160 | − <entry>__u8</entry> | |
| 161 | − <entry><structfield>features</structfield>[CEC_MAX_LOG_ADDRS][12]</entry> | |
| 162 | − <entry>Features for each logical address. Used to implement the | |
| 163 | − <constant>CEC_MSG_REPORT_FEATURES</constant> message. The 12 bytes include | |
| 164 | − both the RC Profile and the Device Features. | |
| 165 | − This field is ignored if <structfield>cec_version</structfield> < | |
| 166 | − <constant>CEC_OP_CEC_VERSION_2_0</constant>.</entry> | |
| 167 | − </row> | |
| 168 | − </tbody> | |
| 169 | − </tgroup> | |
| 170 | − </table> | |
| 171 | − | |
| 172 | − <table pgwide="1" frame="none" id="cec-versions"> | |
| 173 | − <title>CEC Versions</title> | |
| 174 | − <tgroup cols="3"> | |
| 175 | − &cs-def; | |
| 176 | − <tbody valign="top"> | |
| 177 | − <row> | |
| 178 | − <entry><constant>CEC_OP_CEC_VERSION_1_3A</constant></entry> | |
| 179 | − <entry>4</entry> | |
| 180 | − <entry>CEC version according to the HDMI 1.3a standard.</entry> | |
| 181 | − </row> | |
| 182 | − <row> | |
| 183 | − <entry><constant>CEC_OP_CEC_VERSION_1_4B</constant></entry> | |
| 184 | − <entry>5</entry> | |
| 185 | − <entry>CEC version according to the HDMI 1.4b standard.</entry> | |
| 186 | − </row> | |
| 187 | − <row> | |
| 188 | − <entry><constant>CEC_OP_CEC_VERSION_2_0</constant></entry> | |
| 189 | − <entry>6</entry> | |
| 190 | − <entry>CEC version according to the HDMI 2.0 standard.</entry> | |
| 191 | − </row> | |
| 192 | − </tbody> | |
| 193 | − </tgroup> | |
| 194 | − </table> | |
| 195 | − | |
| 196 | − <table pgwide="1" frame="none" id="cec-prim-dev-types"> | |
| 197 | − <title>CEC Primary Device Types</title> | |
| 198 | − <tgroup cols="3"> | |
| 199 | − &cs-def; | |
| 200 | − <tbody valign="top"> | |
| 201 | − <row> | |
| 202 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_TV</constant></entry> | |
| 203 | − <entry>0</entry> | |
| 204 | − <entry>Use for a TV.</entry> | |
| 205 | − </row> | |
| 206 | − <row> | |
| 207 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_RECORD</constant></entry> | |
| 208 | − <entry>1</entry> | |
| 209 | − <entry>Use for a recording device.</entry> | |
| 210 | − </row> | |
| 211 | − <row> | |
| 212 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_TUNER</constant></entry> | |
| 213 | − <entry>3</entry> | |
| 214 | − <entry>Use for a device with a tuner.</entry> | |
| 215 | − </row> | |
| 216 | − <row> | |
| 217 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_PLAYBACK</constant></entry> | |
| 218 | − <entry>4</entry> | |
| 219 | − <entry>Use for a playback device.</entry> | |
| 220 | − </row> | |
| 221 | − <row> | |
| 222 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_AUDIOSYSTEM</constant></entry> | |
| 223 | − <entry>5</entry> | |
| 224 | − <entry>Use for an audio system (e.g. an audio/video receiver).</entry> | |
| 225 | − </row> | |
| 226 | − <row> | |
| 227 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_SWITCH</constant></entry> | |
| 228 | − <entry>6</entry> | |
| 229 | − <entry>Use for a CEC switch.</entry> | |
| 230 | − </row> | |
| 231 | − <row> | |
| 232 | − <entry><constant>CEC_OP_PRIM_DEVTYPE_VIDEOPROC</constant></entry> | |
| 233 | − <entry>7</entry> | |
| 234 | − <entry>Use for a video processor device.</entry> | |
| 235 | − </row> | |
| 236 | − </tbody> | |
| 237 | − </tgroup> | |
| 238 | − </table> | |
| 239 | − | |
| 240 | − <table pgwide="1" frame="none" id="cec-log-addr-types"> | |
| 241 | − <title>CEC Logical Address Types</title> | |
| 242 | − <tgroup cols="3"> | |
| 243 | − &cs-def; | |
| 244 | − <tbody valign="top"> | |
| 245 | − <row> | |
| 246 | − <entry><constant>CEC_LOG_ADDR_TYPE_TV</constant></entry> | |
| 247 | − <entry>0</entry> | |
| 248 | − <entry>Use for a TV.</entry> | |
| 249 | − </row> | |
| 250 | − <row> | |
| 251 | − <entry><constant>CEC_LOG_ADDR_TYPE_RECORD</constant></entry> | |
| 252 | − <entry>1</entry> | |
| 253 | − <entry>Use for a recording device.</entry> | |
| 254 | − </row> | |
| 255 | − <row> | |
| 256 | − <entry><constant>CEC_LOG_ADDR_TYPE_TUNER</constant></entry> | |
| 257 | − <entry>2</entry> | |
| 258 | − <entry>Use for a tuner device.</entry> | |
| 259 | − </row> | |
| 260 | − <row> | |
| 261 | − <entry><constant>CEC_LOG_ADDR_TYPE_PLAYBACK</constant></entry> | |
| 262 | − <entry>3</entry> | |
| 263 | − <entry>Use for a playback device.</entry> | |
| 264 | − </row> | |
| 265 | − <row> | |
| 266 | − <entry><constant>CEC_LOG_ADDR_TYPE_AUDIOSYSTEM</constant></entry> | |
| 267 | − <entry>4</entry> | |
| 268 | − <entry>Use for an audio system device.</entry> | |
| 269 | − </row> | |
| 270 | − <row> | |
| 271 | − <entry><constant>CEC_LOG_ADDR_TYPE_SPECIFIC</constant></entry> | |
| 272 | − <entry>5</entry> | |
| 273 | − <entry>Use for a second TV or for a video processor device.</entry> | |
| 274 | − </row> | |
| 275 | − <row> | |
| 276 | − <entry><constant>CEC_LOG_ADDR_TYPE_UNREGISTERED</constant></entry> | |
| 277 | − <entry>6</entry> | |
| 278 | − <entry>Use this if you just want to remain unregistered. | |
| 279 | − Used for pure CEC switches or CDC-only devices (CDC: | |
| 280 | − Capability Discovery and Control).</entry> | |
| 281 | − </row> | |
| 282 | − </tbody> | |
| 283 | − </tgroup> | |
| 284 | − </table> | |
| 285 | − | |
| 286 | − <table pgwide="1" frame="none" id="cec-all-dev-types-flags"> | |
| 287 | − <title>CEC All Device Types Flags</title> | |
| 288 | − <tgroup cols="3"> | |
| 289 | − &cs-def; | |
| 290 | − <tbody valign="top"> | |
| 291 | − <row> | |
| 292 | − <entry><constant>CEC_OP_ALL_DEVTYPE_TV</constant></entry> | |
| 293 | − <entry>0x80</entry> | |
| 294 | − <entry>This supports the TV type.</entry> | |
| 295 | − </row> | |
| 296 | − <row> | |
| 297 | − <entry><constant>CEC_OP_ALL_DEVTYPE_RECORD</constant></entry> | |
| 298 | − <entry>0x40</entry> | |
| 299 | − <entry>This supports the Recording type.</entry> | |
| 300 | − </row> | |
| 301 | − <row> | |
| 302 | − <entry><constant>CEC_OP_ALL_DEVTYPE_TUNER</constant></entry> | |
| 303 | − <entry>0x20</entry> | |
| 304 | − <entry>This supports the Tuner type.</entry> | |
| 305 | − </row> | |
| 306 | − <row> | |
| 307 | − <entry><constant>CEC_OP_ALL_DEVTYPE_PLAYBACK</constant></entry> | |
| 308 | − <entry>0x10</entry> | |
| 309 | − <entry>This supports the Playback type.</entry> | |
| 310 | − </row> | |
| 311 | − <row> | |
| 312 | − <entry><constant>CEC_OP_ALL_DEVTYPE_AUDIOSYSTEM</constant></entry> | |
| 313 | − <entry>0x08</entry> | |
| 314 | − <entry>This supports the Audio System type.</entry> | |
| 315 | − </row> | |
| 316 | − <row> | |
| 317 | − <entry><constant>CEC_OP_ALL_DEVTYPE_SWITCH</constant></entry> | |
| 318 | − <entry>0x04</entry> | |
| 319 | − <entry>This supports the CEC Switch or Video Processing type.</entry> | |
| 320 | − </row> | |
| 321 | − </tbody> | |
| 322 | − </tgroup> | |
| 323 | − </table> | |
| 324 | − </refsect1> | |
| 325 | − | |
| 326 | − <refsect1> | |
| 327 | − &return-value; | |
| 328 | − </refsect1> | |
| 329 | −</refentry> | |
| @@ -1,86 +0,0 @@ | ||
| 1 | −<refentry id="cec-ioc-adap-g-phys-addr"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>CEC_ADAP_G_PHYS_ADDR</refname> | |
| 9 | − <refname>CEC_ADAP_S_PHYS_ADDR</refname> | |
| 10 | − <refpurpose>Get or set the physical address</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>__u16 *<parameter>argp</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − | |
| 27 | − <variablelist> | |
| 28 | − <varlistentry> | |
| 29 | − <term><parameter>fd</parameter></term> | |
| 30 | − <listitem> | |
| 31 | − <para>File descriptor returned by | |
| 32 | − <link linkend='cec-func-open'><function>open()</function></link>.</para> | |
| 33 | − </listitem> | |
| 34 | − </varlistentry> | |
| 35 | − <varlistentry> | |
| 36 | − <term><parameter>request</parameter></term> | |
| 37 | − <listitem> | |
| 38 | − <para>CEC_ADAP_G_PHYS_ADDR, CEC_ADAP_S_PHYS_ADDR</para> | |
| 39 | − </listitem> | |
| 40 | − </varlistentry> | |
| 41 | − <varlistentry> | |
| 42 | − <term><parameter>argp</parameter></term> | |
| 43 | − <listitem> | |
| 44 | − <para></para> | |
| 45 | − </listitem> | |
| 46 | − </varlistentry> | |
| 47 | − </variablelist> | |
| 48 | − </refsect1> | |
| 49 | − | |
| 50 | − <refsect1> | |
| 51 | − <title>Description</title> | |
| 52 | − | |
| 53 | − <para> | |
| 54 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 55 | − is currently only available as a staging kernel module. | |
| 56 | − </para> | |
| 57 | − | |
| 58 | − <para>To query the current physical address applications call the | |
| 59 | −<constant>CEC_ADAP_G_PHYS_ADDR</constant> ioctl with a pointer to an __u16 | |
| 60 | −where the driver stores the physical address.</para> | |
| 61 | − | |
| 62 | − <para>To set a new physical address applications store the physical address in | |
| 63 | −an __u16 and call the <constant>CEC_ADAP_S_PHYS_ADDR</constant> ioctl with a | |
| 64 | −pointer to this integer. <constant>CEC_ADAP_S_PHYS_ADDR</constant> is only | |
| 65 | −available if <constant>CEC_CAP_PHYS_ADDR</constant> is set (&ENOTTY; will be returned | |
| 66 | −otherwise). <constant>CEC_ADAP_S_PHYS_ADDR</constant> | |
| 67 | −can only be called by a file handle in initiator mode (see &CEC-S-MODE;), if not | |
| 68 | −&EBUSY; will be returned.</para> | |
| 69 | − | |
| 70 | − <para>The physical address is a 16-bit number where each group of 4 bits | |
| 71 | −represent a digit of the physical address a.b.c.d where the most significant | |
| 72 | −4 bits represent 'a'. The CEC root device (usually the TV) has address 0.0.0.0. | |
| 73 | −Every device that is hooked up to an input of the TV has address a.0.0.0 (where | |
| 74 | −'a' is ≥ 1), devices hooked up to those in turn have addresses a.b.0.0, etc. | |
| 75 | −So a topology of up to 5 devices deep is supported. The physical address a | |
| 76 | −device shall use is stored in the EDID of the sink.</para> | |
| 77 | − | |
| 78 | −<para>For example, the EDID for each HDMI input of the TV will have a different | |
| 79 | −physical address of the form a.0.0.0 that the sources will read out and use as | |
| 80 | −their physical address.</para> | |
| 81 | − </refsect1> | |
| 82 | − | |
| 83 | − <refsect1> | |
| 84 | − &return-value; | |
| 85 | − </refsect1> | |
| 86 | −</refentry> | |
| @@ -1,202 +0,0 @@ | ||
| 1 | −<refentry id="cec-ioc-g-event"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl CEC_DQEVENT</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>CEC_DQEVENT</refname> | |
| 9 | − <refpurpose>Dequeue a CEC event</refpurpose> | |
| 10 | − </refnamediv> | |
| 11 | − | |
| 12 | − <refsynopsisdiv> | |
| 13 | − <funcsynopsis> | |
| 14 | − <funcprototype> | |
| 15 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 16 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 17 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 18 | − <paramdef>struct cec_event *<parameter>argp</parameter></paramdef> | |
| 19 | − </funcprototype> | |
| 20 | − </funcsynopsis> | |
| 21 | − </refsynopsisdiv> | |
| 22 | − | |
| 23 | − <refsect1> | |
| 24 | − <title>Arguments</title> | |
| 25 | − | |
| 26 | − <variablelist> | |
| 27 | − <varlistentry> | |
| 28 | − <term><parameter>fd</parameter></term> | |
| 29 | − <listitem> | |
| 30 | − <para>File descriptor returned by | |
| 31 | − <link linkend='cec-func-open'><function>open()</function></link>.</para> | |
| 32 | − </listitem> | |
| 33 | − </varlistentry> | |
| 34 | − <varlistentry> | |
| 35 | − <term><parameter>request</parameter></term> | |
| 36 | − <listitem> | |
| 37 | − <para>CEC_DQEVENT</para> | |
| 38 | − </listitem> | |
| 39 | − </varlistentry> | |
| 40 | − <varlistentry> | |
| 41 | − <term><parameter>argp</parameter></term> | |
| 42 | − <listitem> | |
| 43 | − <para></para> | |
| 44 | − </listitem> | |
| 45 | − </varlistentry> | |
| 46 | − </variablelist> | |
| 47 | − </refsect1> | |
| 48 | − | |
| 49 | − <refsect1> | |
| 50 | − <title>Description</title> | |
| 51 | − | |
| 52 | − <para> | |
| 53 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 54 | − is currently only available as a staging kernel module. | |
| 55 | − </para> | |
| 56 | − | |
| 57 | − <para>CEC devices can send asynchronous events. These can be retrieved by calling | |
| 58 | − the <constant>CEC_DQEVENT</constant> ioctl. If the file descriptor is in non-blocking | |
| 59 | − mode and no event is pending, then it will return -1 and set errno to the &EAGAIN;.</para> | |
| 60 | − | |
| 61 | − <para>The internal event queues are per-filehandle and per-event type. If there is | |
| 62 | − no more room in a queue then the last event is overwritten with the new one. This | |
| 63 | − means that intermediate results can be thrown away but that the latest event is always | |
| 64 | − available. This also means that is it possible to read two successive events that have | |
| 65 | − the same value (e.g. two CEC_EVENT_STATE_CHANGE events with the same state). In that | |
| 66 | − case the intermediate state changes were lost but it is guaranteed that the state | |
| 67 | − did change in between the two events.</para> | |
| 68 | − | |
| 69 | − <table pgwide="1" frame="none" id="cec-event-state-change"> | |
| 70 | − <title>struct <structname>cec_event_state_change</structname></title> | |
| 71 | − <tgroup cols="3"> | |
| 72 | − &cs-str; | |
| 73 | − <tbody valign="top"> | |
| 74 | − <row> | |
| 75 | − <entry>__u16</entry> | |
| 76 | − <entry><structfield>phys_addr</structfield></entry> | |
| 77 | − <entry>The current physical address.</entry> | |
| 78 | − </row> | |
| 79 | − <row> | |
| 80 | − <entry>__u16</entry> | |
| 81 | − <entry><structfield>log_addr_mask</structfield></entry> | |
| 82 | − <entry>The current set of claimed logical addresses.</entry> | |
| 83 | − </row> | |
| 84 | − </tbody> | |
| 85 | − </tgroup> | |
| 86 | − </table> | |
| 87 | − | |
| 88 | − <table pgwide="1" frame="none" id="cec-event-lost-msgs"> | |
| 89 | − <title>struct <structname>cec_event_lost_msgs</structname></title> | |
| 90 | − <tgroup cols="3"> | |
| 91 | − &cs-str; | |
| 92 | − <tbody valign="top"> | |
| 93 | − <row> | |
| 94 | − <entry>__u32</entry> | |
| 95 | − <entry><structfield>lost_msgs</structfield></entry> | |
| 96 | − <entry>Set to the number of lost messages since the filehandle | |
| 97 | − was opened or since the last time this event was dequeued for | |
| 98 | − this filehandle. The messages lost are the oldest messages. So | |
| 99 | − when a new message arrives and there is no more room, then the | |
| 100 | − oldest message is discarded to make room for the new one. The | |
| 101 | − internal size of the message queue guarantees that all messages | |
| 102 | − received in the last two seconds will be stored. Since messages | |
| 103 | − should be replied to within a second according to the CEC | |
| 104 | − specification, this is more than enough. | |
| 105 | − </entry> | |
| 106 | − </row> | |
| 107 | − </tbody> | |
| 108 | − </tgroup> | |
| 109 | − </table> | |
| 110 | − | |
| 111 | − <table pgwide="1" frame="none" id="cec-event"> | |
| 112 | − <title>struct <structname>cec_event</structname></title> | |
| 113 | − <tgroup cols="4"> | |
| 114 | − &cs-str; | |
| 115 | − <tbody valign="top"> | |
| 116 | − <row> | |
| 117 | − <entry>__u64</entry> | |
| 118 | − <entry><structfield>ts</structfield></entry> | |
| 119 | − <entry>Timestamp of the event in ns.</entry> | |
| 120 | − <entry></entry> | |
| 121 | − </row> | |
| 122 | − <row> | |
| 123 | − <entry>__u32</entry> | |
| 124 | − <entry><structfield>event</structfield></entry> | |
| 125 | − <entry>The CEC event type, see <xref linkend="cec-events" />.</entry> | |
| 126 | − <entry></entry> | |
| 127 | − </row> | |
| 128 | − <row> | |
| 129 | − <entry>__u32</entry> | |
| 130 | − <entry><structfield>flags</structfield></entry> | |
| 131 | − <entry>Event flags, see <xref linkend="cec-event-flags" />.</entry> | |
| 132 | − <entry></entry> | |
| 133 | − </row> | |
| 134 | − <row> | |
| 135 | − <entry>union</entry> | |
| 136 | − <entry>(anonymous)</entry> | |
| 137 | − <entry></entry> | |
| 138 | − <entry></entry> | |
| 139 | − </row> | |
| 140 | − <row> | |
| 141 | − <entry></entry> | |
| 142 | − <entry>struct cec_event_state_change</entry> | |
| 143 | − <entry><structfield>state_change</structfield></entry> | |
| 144 | − <entry>The new adapter state as sent by the <constant>CEC_EVENT_STATE_CHANGE</constant> | |
| 145 | − event.</entry> | |
| 146 | − </row> | |
| 147 | − <row> | |
| 148 | − <entry></entry> | |
| 149 | − <entry>struct cec_event_lost_msgs</entry> | |
| 150 | − <entry><structfield>lost_msgs</structfield></entry> | |
| 151 | − <entry>The number of lost messages as sent by the <constant>CEC_EVENT_LOST_MSGS</constant> | |
| 152 | − event.</entry> | |
| 153 | − </row> | |
| 154 | − </tbody> | |
| 155 | − </tgroup> | |
| 156 | − </table> | |
| 157 | − | |
| 158 | − <table pgwide="1" frame="none" id="cec-events"> | |
| 159 | − <title>CEC Events Types</title> | |
| 160 | − <tgroup cols="3"> | |
| 161 | − &cs-def; | |
| 162 | − <tbody valign="top"> | |
| 163 | − <row> | |
| 164 | − <entry><constant>CEC_EVENT_STATE_CHANGE</constant></entry> | |
| 165 | − <entry>1</entry> | |
| 166 | − <entry>Generated when the CEC Adapter's state changes. When open() is | |
| 167 | − called an initial event will be generated for that filehandle with the | |
| 168 | − CEC Adapter's state at that time. | |
| 169 | − </entry> | |
| 170 | − </row> | |
| 171 | − <row> | |
| 172 | − <entry><constant>CEC_EVENT_LOST_MSGS</constant></entry> | |
| 173 | − <entry>2</entry> | |
| 174 | − <entry>Generated if one or more CEC messages were lost because the | |
| 175 | − application didn't dequeue CEC messages fast enough.</entry> | |
| 176 | − </row> | |
| 177 | − </tbody> | |
| 178 | − </tgroup> | |
| 179 | − </table> | |
| 180 | − | |
| 181 | − <table pgwide="1" frame="none" id="cec-event-flags"> | |
| 182 | − <title>CEC Event Flags</title> | |
| 183 | − <tgroup cols="3"> | |
| 184 | − &cs-def; | |
| 185 | − <tbody valign="top"> | |
| 186 | − <row> | |
| 187 | − <entry><constant>CEC_EVENT_FL_INITIAL_VALUE</constant></entry> | |
| 188 | − <entry>1</entry> | |
| 189 | − <entry>Set for the initial events that are generated when the device is | |
| 190 | − opened. See the table above for which events do this. This allows | |
| 191 | − applications to learn the initial state of the CEC adapter at open() | |
| 192 | − time.</entry> | |
| 193 | − </row> | |
| 194 | − </tbody> | |
| 195 | − </tgroup> | |
| 196 | − </table> | |
| 197 | − </refsect1> | |
| 198 | − | |
| 199 | − <refsect1> | |
| 200 | − &return-value; | |
| 201 | − </refsect1> | |
| 202 | −</refentry> | |
| @@ -1,255 +0,0 @@ | ||
| 1 | −<refentry id="cec-ioc-g-mode"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl CEC_G_MODE, CEC_S_MODE</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>CEC_G_MODE</refname> | |
| 9 | − <refname>CEC_S_MODE</refname> | |
| 10 | − <refpurpose>Get or set exclusive use of the CEC adapter</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>__u32 *<parameter>argp</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − | |
| 27 | − <variablelist> | |
| 28 | − <varlistentry> | |
| 29 | − <term><parameter>fd</parameter></term> | |
| 30 | − <listitem> | |
| 31 | − <para>File descriptor returned by | |
| 32 | − <link linkend='cec-func-open'><function>open()</function></link>.</para> | |
| 33 | − </listitem> | |
| 34 | − </varlistentry> | |
| 35 | − <varlistentry> | |
| 36 | − <term><parameter>request</parameter></term> | |
| 37 | − <listitem> | |
| 38 | − <para>CEC_G_MODE, CEC_S_MODE</para> | |
| 39 | − </listitem> | |
| 40 | − </varlistentry> | |
| 41 | − <varlistentry> | |
| 42 | − <term><parameter>argp</parameter></term> | |
| 43 | − <listitem> | |
| 44 | − <para></para> | |
| 45 | − </listitem> | |
| 46 | − </varlistentry> | |
| 47 | − </variablelist> | |
| 48 | − </refsect1> | |
| 49 | − | |
| 50 | − <refsect1> | |
| 51 | − <title>Description</title> | |
| 52 | − | |
| 53 | − <para> | |
| 54 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 55 | − is currently only available as a staging kernel module. | |
| 56 | − </para> | |
| 57 | − | |
| 58 | − <para>By default any filehandle can use &CEC-TRANSMIT; and &CEC-RECEIVE;, but | |
| 59 | −in order to prevent applications from stepping on each others toes it must be possible | |
| 60 | −to obtain exclusive access to the CEC adapter. This ioctl sets the filehandle | |
| 61 | −to initiator and/or follower mode which can be exclusive depending on the chosen | |
| 62 | −mode. The initiator is the filehandle that is used | |
| 63 | −to initiate messages, i.e. it commands other CEC devices. The follower is the filehandle | |
| 64 | −that receives messages sent to the CEC adapter and processes them. The same filehandle | |
| 65 | −can be both initiator and follower, or this role can be taken by two different | |
| 66 | −filehandles.</para> | |
| 67 | − | |
| 68 | − <para>When a CEC message is received, then the CEC framework will decide how | |
| 69 | −it will be processed. If the message is a reply to an earlier transmitted message, | |
| 70 | −then the reply is sent back to the filehandle that is waiting for it. In addition | |
| 71 | −the CEC framework will process it.</para> | |
| 72 | − | |
| 73 | − <para>If the message is not a reply, then the CEC framework will process it | |
| 74 | −first. If there is no follower, then the message is just discarded and a feature | |
| 75 | −abort is sent back to the initiator if the framework couldn't process it. If there | |
| 76 | −is a follower, then the message is passed on to the follower who will use | |
| 77 | −&CEC-RECEIVE; to dequeue the new message. The framework expects the follower to | |
| 78 | −make the right decisions.</para> | |
| 79 | − | |
| 80 | − <para>The CEC framework will process core messages unless requested otherwise | |
| 81 | −by the follower. The follower can enable the passthrough mode. In that case, the | |
| 82 | −CEC framework will pass on most core messages without processing them and | |
| 83 | −the follower will have to implement those messages. There are some messages | |
| 84 | −that the core will always process, regardless of the passthrough mode. See | |
| 85 | −<xref linkend="cec-core-processing" /> for details.</para> | |
| 86 | − | |
| 87 | − <para>If there is no initiator, then any CEC filehandle can use &CEC-TRANSMIT;. | |
| 88 | −If there is an exclusive initiator then only that initiator can call &CEC-TRANSMIT;. | |
| 89 | −The follower can of course always call &CEC-TRANSMIT;.</para> | |
| 90 | − | |
| 91 | − <para>Available initiator modes are:</para> | |
| 92 | − | |
| 93 | − <table pgwide="1" frame="none" id="cec-mode-initiator"> | |
| 94 | − <title>Initiator Modes</title> | |
| 95 | − <tgroup cols="3"> | |
| 96 | − &cs-def; | |
| 97 | − <tbody valign="top"> | |
| 98 | − <row> | |
| 99 | − <entry><constant>CEC_MODE_NO_INITIATOR</constant></entry> | |
| 100 | − <entry>0x0</entry> | |
| 101 | − <entry>This is not an initiator, i.e. it cannot transmit CEC messages | |
| 102 | − or make any other changes to the CEC adapter.</entry> | |
| 103 | − </row> | |
| 104 | − <row> | |
| 105 | − <entry><constant>CEC_MODE_INITIATOR</constant></entry> | |
| 106 | − <entry>0x1</entry> | |
| 107 | − <entry>This is an initiator (the default when the device is opened) and it | |
| 108 | − can transmit CEC messages and make changes to the CEC adapter, unless there | |
| 109 | − is an exclusive initiator.</entry> | |
| 110 | − </row> | |
| 111 | − <row> | |
| 112 | − <entry><constant>CEC_MODE_EXCL_INITIATOR</constant></entry> | |
| 113 | − <entry>0x2</entry> | |
| 114 | − <entry>This is an exclusive initiator and this file descriptor is the only one | |
| 115 | − that can transmit CEC messages and make changes to the CEC adapter. If someone | |
| 116 | − else is already the exclusive initiator then an attempt to become one will return | |
| 117 | − the &EBUSY; error.</entry> | |
| 118 | − </row> | |
| 119 | − </tbody> | |
| 120 | − </tgroup> | |
| 121 | − </table> | |
| 122 | − | |
| 123 | − <para>Available follower modes are:</para> | |
| 124 | − | |
| 125 | − <table pgwide="1" frame="none" id="cec-mode-follower"> | |
| 126 | − <title>Follower Modes</title> | |
| 127 | − <tgroup cols="3"> | |
| 128 | − &cs-def; | |
| 129 | − <tbody valign="top"> | |
| 130 | − <row> | |
| 131 | − <entry><constant>CEC_MODE_NO_FOLLOWER</constant></entry> | |
| 132 | − <entry>0x00</entry> | |
| 133 | − <entry>This is not a follower (the default when the device is opened).</entry> | |
| 134 | − </row> | |
| 135 | − <row> | |
| 136 | − <entry><constant>CEC_MODE_FOLLOWER</constant></entry> | |
| 137 | − <entry>0x10</entry> | |
| 138 | − <entry>This is a follower and it will receive CEC messages unless there is | |
| 139 | − an exclusive follower. You cannot become a follower if <constant>CEC_CAP_TRANSMIT</constant> | |
| 140 | − is not set or if <constant>CEC_MODE_NO_INITIATOR</constant> was specified, | |
| 141 | − &EINVAL; is returned in that case.</entry> | |
| 142 | − </row> | |
| 143 | − <row> | |
| 144 | − <entry><constant>CEC_MODE_EXCL_FOLLOWER</constant></entry> | |
| 145 | − <entry>0x20</entry> | |
| 146 | − <entry>This is an exclusive follower and only this file descriptor will receive | |
| 147 | − CEC messages for processing. If someone else is already the exclusive follower | |
| 148 | − then an attempt to become one will return the &EBUSY; error. You cannot become | |
| 149 | − a follower if <constant>CEC_CAP_TRANSMIT</constant> is not set or if | |
| 150 | − <constant>CEC_MODE_NO_INITIATOR</constant> was specified, &EINVAL; is returned | |
| 151 | − in that case.</entry> | |
| 152 | − </row> | |
| 153 | − <row> | |
| 154 | − <entry><constant>CEC_MODE_EXCL_FOLLOWER_PASSTHRU</constant></entry> | |
| 155 | − <entry>0x30</entry> | |
| 156 | − <entry>This is an exclusive follower and only this file descriptor will receive | |
| 157 | − CEC messages for processing. In addition it will put the CEC device into | |
| 158 | − passthrough mode, allowing the exclusive follower to handle most core messages | |
| 159 | − instead of relying on the CEC framework for that. If someone else is already the | |
| 160 | − exclusive follower then an attempt to become one will return the &EBUSY; error. | |
| 161 | − You cannot become a follower if <constant>CEC_CAP_TRANSMIT</constant> | |
| 162 | − is not set or if <constant>CEC_MODE_NO_INITIATOR</constant> was specified, | |
| 163 | − &EINVAL; is returned in that case.</entry> | |
| 164 | − </row> | |
| 165 | − <row> | |
| 166 | − <entry><constant>CEC_MODE_MONITOR</constant></entry> | |
| 167 | − <entry>0xe0</entry> | |
| 168 | − <entry>Put the file descriptor into monitor mode. Can only be used in combination | |
| 169 | − with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be | |
| 170 | − returned. In monitor mode all messages this CEC device transmits and all messages | |
| 171 | − it receives (both broadcast messages and directed messages for one its logical | |
| 172 | − addresses) will be reported. This is very useful for debugging. This is only | |
| 173 | − allowed if the process has the <constant>CAP_NET_ADMIN</constant> | |
| 174 | − capability. If that is not set, then &EPERM; is returned.</entry> | |
| 175 | − </row> | |
| 176 | − <row> | |
| 177 | − <entry><constant>CEC_MODE_MONITOR_ALL</constant></entry> | |
| 178 | − <entry>0xf0</entry> | |
| 179 | − <entry>Put the file descriptor into 'monitor all' mode. Can only be used in combination | |
| 180 | − with <constant>CEC_MODE_NO_INITIATOR</constant>, otherwise &EINVAL; will be | |
| 181 | − returned. In 'monitor all' mode all messages this CEC device transmits and all messages | |
| 182 | − it receives, including directed messages for other CEC devices will be reported. This | |
| 183 | − is very useful for debugging, but not all devices support this. This mode requires that | |
| 184 | − the <constant>CEC_CAP_MONITOR_ALL</constant> capability is set, otherwise &EINVAL; is | |
| 185 | − returned. This is only allowed if the process has the <constant>CAP_NET_ADMIN</constant> | |
| 186 | − capability. If that is not set, then &EPERM; is returned.</entry> | |
| 187 | − </row> | |
| 188 | − </tbody> | |
| 189 | − </tgroup> | |
| 190 | − </table> | |
| 191 | − | |
| 192 | − <para>Core message processing details:</para> | |
| 193 | − | |
| 194 | − <table pgwide="1" frame="none" id="cec-core-processing"> | |
| 195 | − <title>Core Message Processing</title> | |
| 196 | − <tgroup cols="2"> | |
| 197 | − &cs-def; | |
| 198 | − <tbody valign="top"> | |
| 199 | − <row> | |
| 200 | − <entry><constant>CEC_MSG_GET_CEC_VERSION</constant></entry> | |
| 201 | − <entry>When in passthrough mode this message has to be handled by userspace, | |
| 202 | − otherwise the core will return the CEC version that was set with &CEC-ADAP-S-LOG-ADDRS;.</entry> | |
| 203 | − </row> | |
| 204 | − <row> | |
| 205 | − <entry><constant>CEC_MSG_GIVE_DEVICE_VENDOR_ID</constant></entry> | |
| 206 | − <entry>When in passthrough mode this message has to be handled by userspace, | |
| 207 | − otherwise the core will return the vendor ID that was set with &CEC-ADAP-S-LOG-ADDRS;.</entry> | |
| 208 | − </row> | |
| 209 | − <row> | |
| 210 | − <entry><constant>CEC_MSG_ABORT</constant></entry> | |
| 211 | − <entry>When in passthrough mode this message has to be handled by userspace, | |
| 212 | − otherwise the core will return a feature refused message as per the specification.</entry> | |
| 213 | − </row> | |
| 214 | − <row> | |
| 215 | − <entry><constant>CEC_MSG_GIVE_PHYSICAL_ADDR</constant></entry> | |
| 216 | − <entry>When in passthrough mode this message has to be handled by userspace, | |
| 217 | − otherwise the core will report the current physical address.</entry> | |
| 218 | − </row> | |
| 219 | − <row> | |
| 220 | − <entry><constant>CEC_MSG_GIVE_OSD_NAME</constant></entry> | |
| 221 | − <entry>When in passthrough mode this message has to be handled by userspace, | |
| 222 | − otherwise the core will report the current OSD name as was set with | |
| 223 | − &CEC-ADAP-S-LOG-ADDRS;.</entry> | |
| 224 | − </row> | |
| 225 | − <row> | |
| 226 | − <entry><constant>CEC_MSG_GIVE_FEATURES</constant></entry> | |
| 227 | − <entry>When in passthrough mode this message has to be handled by userspace, | |
| 228 | − otherwise the core will report the current features as was set with | |
| 229 | − &CEC-ADAP-S-LOG-ADDRS; or the message is ignore if the CEC version was | |
| 230 | − older than 2.0.</entry> | |
| 231 | − </row> | |
| 232 | − <row> | |
| 233 | − <entry><constant>CEC_MSG_USER_CONTROL_PRESSED</constant></entry> | |
| 234 | − <entry>If <constant>CEC_CAP_RC</constant> is set, then generate a remote control | |
| 235 | − key press. This message is always passed on to userspace.</entry> | |
| 236 | − </row> | |
| 237 | − <row> | |
| 238 | − <entry><constant>CEC_MSG_USER_CONTROL_RELEASED</constant></entry> | |
| 239 | − <entry>If <constant>CEC_CAP_RC</constant> is set, then generate a remote control | |
| 240 | − key release. This message is always passed on to userspace.</entry> | |
| 241 | − </row> | |
| 242 | − <row> | |
| 243 | − <entry><constant>CEC_MSG_REPORT_PHYSICAL_ADDR</constant></entry> | |
| 244 | − <entry>The CEC framework will make note of the reported physical address | |
| 245 | − and then just pass the message on to userspace.</entry> | |
| 246 | − </row> | |
| 247 | − </tbody> | |
| 248 | − </tgroup> | |
| 249 | − </table> | |
| 250 | − </refsect1> | |
| 251 | − | |
| 252 | − <refsect1> | |
| 253 | − &return-value; | |
| 254 | − </refsect1> | |
| 255 | −</refentry> | |
| @@ -1,274 +0,0 @@ | ||
| 1 | −<refentry id="cec-ioc-receive"> | |
| 2 | − <refmeta> | |
| 3 | − <refentrytitle>ioctl CEC_RECEIVE, CEC_TRANSMIT</refentrytitle> | |
| 4 | − &manvol; | |
| 5 | − </refmeta> | |
| 6 | − | |
| 7 | − <refnamediv> | |
| 8 | − <refname>CEC_RECEIVE</refname> | |
| 9 | − <refname>CEC_TRANSMIT</refname> | |
| 10 | − <refpurpose>Receive or transmit a CEC message</refpurpose> | |
| 11 | − </refnamediv> | |
| 12 | − | |
| 13 | − <refsynopsisdiv> | |
| 14 | − <funcsynopsis> | |
| 15 | − <funcprototype> | |
| 16 | − <funcdef>int <function>ioctl</function></funcdef> | |
| 17 | − <paramdef>int <parameter>fd</parameter></paramdef> | |
| 18 | − <paramdef>int <parameter>request</parameter></paramdef> | |
| 19 | − <paramdef>struct cec_msg *<parameter>argp</parameter></paramdef> | |
| 20 | − </funcprototype> | |
| 21 | − </funcsynopsis> | |
| 22 | − </refsynopsisdiv> | |
| 23 | − | |
| 24 | − <refsect1> | |
| 25 | − <title>Arguments</title> | |
| 26 | − | |
| 27 | − <variablelist> | |
| 28 | − <varlistentry> | |
| 29 | − <term><parameter>fd</parameter></term> | |
| 30 | − <listitem> | |
| 31 | − <para>File descriptor returned by | |
| 32 | − <link linkend='cec-func-open'><function>open()</function></link>.</para> | |
| 33 | − </listitem> | |
| 34 | − </varlistentry> | |
| 35 | − <varlistentry> | |
| 36 | − <term><parameter>request</parameter></term> | |
| 37 | − <listitem> | |
| 38 | − <para>CEC_RECEIVE, CEC_TRANSMIT</para> | |
| 39 | − </listitem> | |
| 40 | − </varlistentry> | |
| 41 | − <varlistentry> | |
| 42 | − <term><parameter>argp</parameter></term> | |
| 43 | − <listitem> | |
| 44 | − <para></para> | |
| 45 | − </listitem> | |
| 46 | − </varlistentry> | |
| 47 | − </variablelist> | |
| 48 | − </refsect1> | |
| 49 | − | |
| 50 | − <refsect1> | |
| 51 | − <title>Description</title> | |
| 52 | − | |
| 53 | − <para> | |
| 54 | − Note: this documents the proposed CEC API. This API is not yet finalized and | |
| 55 | − is currently only available as a staging kernel module. | |
| 56 | − </para> | |
| 57 | − | |
| 58 | − <para>To receive a CEC message the application has to fill in the | |
| 59 | − <structname>cec_msg</structname> structure and pass it to the | |
| 60 | − <constant>CEC_RECEIVE</constant> ioctl. <constant>CEC_RECEIVE</constant> is | |
| 61 | − only available if <constant>CEC_CAP_RECEIVE</constant> is set. If the | |
| 62 | − file descriptor is in non-blocking mode and there are no received | |
| 63 | − messages pending, then it will return -1 and set errno to the &EAGAIN;. | |
| 64 | − If the file descriptor is in blocking mode and <structfield>timeout</structfield> | |
| 65 | − is non-zero and no message arrived within <structfield>timeout</structfield> | |
| 66 | − milliseconds, then it will return -1 and set errno to the &ETIMEDOUT;.</para> | |
| 67 | − | |
| 68 | − <para>To send a CEC message the application has to fill in the | |
| 69 | − <structname>cec_msg</structname> structure and pass it to the | |
| 70 | − <constant>CEC_TRANSMIT</constant> ioctl. <constant>CEC_TRANSMIT</constant> is | |
| 71 | − only available if <constant>CEC_CAP_TRANSMIT</constant> is set. | |
| 72 | − If there is no more room in the transmit queue, then it will return | |
| 73 | − -1 and set errno to the &EBUSY;.</para> | |
| 74 | − | |
| 75 | − <table pgwide="1" frame="none" id="cec-msg"> | |
| 76 | − <title>struct <structname>cec_msg</structname></title> | |
| 77 | − <tgroup cols="3"> | |
| 78 | − &cs-str; | |
| 79 | − <tbody valign="top"> | |
| 80 | − <row> | |
| 81 | − <entry>__u64</entry> | |
| 82 | − <entry><structfield>ts</structfield></entry> | |
| 83 | − <entry>Timestamp of when the message was transmitted in ns in the case | |
| 84 | − of <constant>CEC_TRANSMIT</constant> with <structfield>reply</structfield> | |
| 85 | − set to 0, or the timestamp of the received message in all other cases.</entry> | |
| 86 | − </row> | |
| 87 | − <row> | |
| 88 | − <entry>__u32</entry> | |
| 89 | − <entry><structfield>len</structfield></entry> | |
| 90 | − <entry>The length of the message. For <constant>CEC_TRANSMIT</constant> this | |
| 91 | − is filled in by the application. The driver will fill this in for | |
| 92 | − <constant>CEC_RECEIVE</constant> and for <constant>CEC_TRANSMIT</constant> | |
| 93 | − it will be filled in with the length of the reply message if | |
| 94 | − <structfield>reply</structfield> was set.</entry> | |
| 95 | − </row> | |
| 96 | − <row> | |
| 97 | − <entry>__u32</entry> | |
| 98 | − <entry><structfield>timeout</structfield></entry> | |
| 99 | − <entry>The timeout in milliseconds. This is the time the device will wait for a message to | |
| 100 | − be received before timing out. If it is set to 0, then it will wait indefinitely when it | |
| 101 | − is called by <constant>CEC_RECEIVE</constant>. If it is 0 and it is called by | |
| 102 | − <constant>CEC_TRANSMIT</constant>, then it will be replaced by 1000 if the | |
| 103 | − <structfield>reply</structfield> is non-zero or ignored if <structfield>reply</structfield> | |
| 104 | − is 0.</entry> | |
| 105 | − </row> | |
| 106 | − <row> | |
| 107 | − <entry>__u32</entry> | |
| 108 | − <entry><structfield>sequence</structfield></entry> | |
| 109 | − <entry>The sequence number is automatically assigned by the CEC | |
| 110 | − framework for all transmitted messages. It can be later used by the | |
| 111 | − framework to generate an event if a reply for a message was | |
| 112 | − requested and the message was transmitted in a non-blocking mode. | |
| 113 | − </entry> | |
| 114 | − </row> | |
| 115 | − <row> | |
| 116 | − <entry>__u32</entry> | |
| 117 | − <entry><structfield>flags</structfield></entry> | |
| 118 | − <entry>Flags. No flags are defined yet, so set this to 0.</entry> | |
| 119 | − </row> | |
| 120 | − <row> | |
| 121 | − <entry>__u8</entry> | |
| 122 | − <entry><structfield>rx_status</structfield></entry> | |
| 123 | − <entry>The status bits of the received message. See <xref linkend="cec-rx-status" /> | |
| 124 | − for the possible status values. It is 0 if this message was transmitted, not | |
| 125 | − received, unless this is the reply to a transmitted message. In that case both | |
| 126 | − <structfield>rx_status</structfield> and <structfield>tx_status</structfield> | |
| 127 | − are set.</entry> | |
| 128 | − </row> | |
| 129 | − <row> | |
| 130 | − <entry>__u8</entry> | |
| 131 | − <entry><structfield>tx_status</structfield></entry> | |
| 132 | − <entry>The status bits of the transmitted message. See <xref linkend="cec-tx-status" /> | |
| 133 | − for the possible status values. It is 0 if this messages was received, not | |
| 134 | − transmitted.</entry> | |
| 135 | − </row> | |
| 136 | − <row> | |
| 137 | − <entry>__u8</entry> | |
| 138 | − <entry><structfield>msg</structfield>[16]</entry> | |
| 139 | − <entry>The message payload. For <constant>CEC_TRANSMIT</constant> this | |
| 140 | − is filled in by the application. The driver will fill this in for | |
| 141 | − <constant>CEC_RECEIVE</constant> and for <constant>CEC_TRANSMIT</constant> | |
| 142 | − it will be filled in with the payload of the reply message if | |
| 143 | − <structfield>reply</structfield> was set.</entry> | |
| 144 | − </row> | |
| 145 | − <row> | |
| 146 | − <entry>__u8</entry> | |
| 147 | − <entry><structfield>reply</structfield></entry> | |
| 148 | − <entry>Wait until this message is replied. If <structfield>reply</structfield> | |
| 149 | − is 0 and the <structfield>timeout</structfield> is 0, then don't wait for a reply but | |
| 150 | − return after transmitting the message. If there was an error as indicated by a non-zero | |
| 151 | − <structfield>tx_status</structfield> field, then <structfield>reply</structfield> and | |
| 152 | − <structfield>timeout</structfield> are both set to 0 by the driver. Ignored by | |
| 153 | − <constant>CEC_RECEIVE</constant>. The case where <structfield>reply</structfield> is 0 | |
| 154 | − (this is the opcode for the Feature Abort message) and <structfield>timeout</structfield> | |
| 155 | − is non-zero is specifically allowed to send a message and wait up to <structfield>timeout</structfield> | |
| 156 | − milliseconds for a Feature Abort reply. In this case <structfield>rx_status</structfield> | |
| 157 | − will either be set to <constant>CEC_RX_STATUS_TIMEOUT</constant> or | |
| 158 | − <constant>CEC_RX_STATUS_FEATURE_ABORT</constant>.</entry> | |
| 159 | − </row> | |
| 160 | − <row> | |
| 161 | − <entry>__u8</entry> | |
| 162 | − <entry><structfield>tx_arb_lost_cnt</structfield></entry> | |
| 163 | − <entry>A counter of the number of transmit attempts that resulted in the | |
| 164 | − Arbitration Lost error. This is only set if the hardware supports this, otherwise | |
| 165 | − it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_ARB_LOST</constant> | |
| 166 | − status bit is set.</entry> | |
| 167 | − </row> | |
| 168 | − <row> | |
| 169 | − <entry>__u8</entry> | |
| 170 | − <entry><structfield>tx_nack_cnt</structfield></entry> | |
| 171 | − <entry>A counter of the number of transmit attempts that resulted in the | |
| 172 | − Not Acknowledged error. This is only set if the hardware supports this, otherwise | |
| 173 | − it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_NACK</constant> | |
| 174 | − status bit is set.</entry> | |
| 175 | − </row> | |
| 176 | − <row> | |
| 177 | − <entry>__u8</entry> | |
| 178 | − <entry><structfield>tx_low_drive_cnt</structfield></entry> | |
| 179 | − <entry>A counter of the number of transmit attempts that resulted in the | |
| 180 | − Arbitration Lost error. This is only set if the hardware supports this, otherwise | |
| 181 | − it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_LOW_DRIVE</constant> | |
| 182 | − status bit is set.</entry> | |
| 183 | − </row> | |
| 184 | − <row> | |
| 185 | − <entry>__u8</entry> | |
| 186 | − <entry><structfield>tx_error_cnt</structfield></entry> | |
| 187 | − <entry>A counter of the number of transmit errors other than Arbitration Lost | |
| 188 | − or Not Acknowledged. This is only set if the hardware supports this, otherwise | |
| 189 | − it is always 0. This counter is only valid if the <constant>CEC_TX_STATUS_ERROR</constant> | |
| 190 | − status bit is set.</entry> | |
| 191 | − </row> | |
| 192 | − </tbody> | |
| 193 | − </tgroup> | |
| 194 | − </table> | |
| 195 | − | |
| 196 | − <table pgwide="1" frame="none" id="cec-tx-status"> | |
| 197 | − <title>CEC Transmit Status</title> | |
| 198 | − <tgroup cols="3"> | |
| 199 | − &cs-def; | |
| 200 | − <tbody valign="top"> | |
| 201 | − <row> | |
| 202 | − <entry><constant>CEC_TX_STATUS_OK</constant></entry> | |
| 203 | − <entry>0x01</entry> | |
| 204 | − <entry>The message was transmitted successfully. This is mutually exclusive with | |
| 205 | − <constant>CEC_TX_STATUS_MAX_RETRIES</constant>. Other bits can still be set if | |
| 206 | − earlier attempts met with failure before the transmit was eventually successful.</entry> | |
| 207 | − </row> | |
| 208 | − <row> | |
| 209 | − <entry><constant>CEC_TX_STATUS_ARB_LOST</constant></entry> | |
| 210 | − <entry>0x02</entry> | |
| 211 | − <entry>CEC line arbitration was lost.</entry> | |
| 212 | − </row> | |
| 213 | − <row> | |
| 214 | − <entry><constant>CEC_TX_STATUS_NACK</constant></entry> | |
| 215 | − <entry>0x04</entry> | |
| 216 | − <entry>Message was not acknowledged.</entry> | |
| 217 | − </row> | |
| 218 | − <row> | |
| 219 | − <entry><constant>CEC_TX_STATUS_LOW_DRIVE</constant></entry> | |
| 220 | − <entry>0x08</entry> | |
| 221 | − <entry>Low drive was detected on the CEC bus. This indicates that a follower | |
| 222 | − detected an error on the bus and requests a retransmission.</entry> | |
| 223 | − </row> | |
| 224 | − <row> | |
| 225 | − <entry><constant>CEC_TX_STATUS_ERROR</constant></entry> | |
| 226 | − <entry>0x10</entry> | |
| 227 | − <entry>Some error occurred. This is used for any errors that do not | |
| 228 | − fit the previous two, either because the hardware could not tell | |
| 229 | − which error occurred, or because the hardware tested for other conditions | |
| 230 | − besides those two.</entry> | |
| 231 | − </row> | |
| 232 | − <row> | |
| 233 | − <entry><constant>CEC_TX_STATUS_MAX_RETRIES</constant></entry> | |
| 234 | − <entry>0x20</entry> | |
| 235 | − <entry>The transmit failed after one or more retries. This status bit is mutually | |
| 236 | − exclusive with <constant>CEC_TX_STATUS_OK</constant>. Other bits can still be set | |
| 237 | − to explain which failures were seen.</entry> | |
| 238 | − </row> | |
| 239 | − </tbody> | |
| 240 | − </tgroup> | |
| 241 | − </table> | |
| 242 | − | |
| 243 | − <table pgwide="1" frame="none" id="cec-rx-status"> | |
| 244 | − <title>CEC Receive Status</title> | |
| 245 | − <tgroup cols="3"> | |
| 246 | − &cs-def; | |
| 247 | − <tbody valign="top"> | |
| 248 | − <row> | |
| 249 | − <entry><constant>CEC_RX_STATUS_OK</constant></entry> | |
| 250 | − <entry>0x01</entry> | |
| 251 | − <entry>The message was received successfully.</entry> | |
| 252 | − </row> | |
| 253 | − <row> | |
| 254 | − <entry><constant>CEC_RX_STATUS_TIMEOUT</constant></entry> | |
| 255 | − <entry>0x02</entry> | |
| 256 | − <entry>The reply to an earlier transmitted message timed out.</entry> | |
| 257 | − </row> | |
| 258 | − <row> | |
| 259 | − <entry><constant>CEC_RX_STATUS_FEATURE_ABORT</constant></entry> | |
| 260 | − <entry>0x04</entry> | |
| 261 | − <entry>The message was received successfully but the reply was | |
| 262 | − <constant>CEC_MSG_FEATURE_ABORT</constant>. This status is only | |
| 263 | − set if this message was the reply to an earlier transmitted | |
| 264 | − message.</entry> | |
| 265 | − </row> | |
| 266 | − </tbody> | |
| 267 | − </tgroup> | |
| 268 | − </table> | |
| 269 | − </refsect1> | |
| 270 | − | |
| 271 | − <refsect1> | |
| 272 | − &return-value; | |
| 273 | − </refsect1> | |
| 274 | −</refentry> | |
| @@ -1,1102 +0,0 @@ | ||
| 1 | − <title>Common API Elements</title> | |
| 2 | − | |
| 3 | − <para>Programming a V4L2 device consists of these | |
| 4 | −steps:</para> | |
| 5 | − | |
| 6 | − <itemizedlist> | |
| 7 | − <listitem> | |
| 8 | − <para>Opening the device</para> | |
| 9 | − </listitem> | |
| 10 | − <listitem> | |
| 11 | − <para>Changing device properties, selecting a video and audio | |
| 12 | −input, video standard, picture brightness a. o.</para> | |
| 13 | − </listitem> | |
| 14 | − <listitem> | |
| 15 | − <para>Negotiating a data format</para> | |
| 16 | − </listitem> | |
| 17 | − <listitem> | |
| 18 | − <para>Negotiating an input/output method</para> | |
| 19 | − </listitem> | |
| 20 | − <listitem> | |
| 21 | − <para>The actual input/output loop</para> | |
| 22 | − </listitem> | |
| 23 | − <listitem> | |
| 24 | − <para>Closing the device</para> | |
| 25 | − </listitem> | |
| 26 | − </itemizedlist> | |
| 27 | − | |
| 28 | − <para>In practice most steps are optional and can be executed out of | |
| 29 | −order. It depends on the V4L2 device type, you can read about the | |
| 30 | −details in <xref linkend="devices" />. In this chapter we will discuss | |
| 31 | −the basic concepts applicable to all devices.</para> | |
| 32 | − | |
| 33 | − <section id="open"> | |
| 34 | − <title>Opening and Closing Devices</title> | |
| 35 | − | |
| 36 | − <section> | |
| 37 | − <title>Device Naming</title> | |
| 38 | − | |
| 39 | − <para>V4L2 drivers are implemented as kernel modules, loaded | |
| 40 | −manually by the system administrator or automatically when a device is | |
| 41 | −first discovered. The driver modules plug into the "videodev" kernel | |
| 42 | −module. It provides helper functions and a common application | |
| 43 | −interface specified in this document.</para> | |
| 44 | − | |
| 45 | − <para>Each driver thus loaded registers one or more device nodes | |
| 46 | −with major number 81 and a minor number between 0 and 255. Minor numbers | |
| 47 | −are allocated dynamically unless the kernel is compiled with the kernel | |
| 48 | −option CONFIG_VIDEO_FIXED_MINOR_RANGES. In that case minor numbers are | |
| 49 | −allocated in ranges depending on the device node type (video, radio, etc.).</para> | |
| 50 | − | |
| 51 | − <para>Many drivers support "video_nr", "radio_nr" or "vbi_nr" | |
| 52 | −module options to select specific video/radio/vbi node numbers. This allows | |
| 53 | −the user to request that the device node is named e.g. /dev/video5 instead | |
| 54 | −of leaving it to chance. When the driver supports multiple devices of the same | |
| 55 | −type more than one device node number can be assigned, separated by commas: | |
| 56 | − <informalexample> | |
| 57 | − <screen> | |
| 58 | −> modprobe mydriver video_nr=0,1 radio_nr=0,1</screen> | |
| 59 | − </informalexample></para> | |
| 60 | − | |
| 61 | − <para>In <filename>/etc/modules.conf</filename> this may be | |
| 62 | −written as: <informalexample> | |
| 63 | − <screen> | |
| 64 | −options mydriver video_nr=0,1 radio_nr=0,1 | |
| 65 | − </screen> | |
| 66 | − </informalexample> When no device node number is given as module | |
| 67 | −option the driver supplies a default.</para> | |
| 68 | − | |
| 69 | − <para>Normally udev will create the device nodes in /dev automatically | |
| 70 | −for you. If udev is not installed, then you need to enable the | |
| 71 | −CONFIG_VIDEO_FIXED_MINOR_RANGES kernel option in order to be able to correctly | |
| 72 | −relate a minor number to a device node number. I.e., you need to be certain | |
| 73 | −that minor number 5 maps to device node name video5. With this kernel option | |
| 74 | −different device types have different minor number ranges. These ranges are | |
| 75 | −listed in <xref linkend="devices" />. | |
| 76 | −</para> | |
| 77 | − | |
| 78 | − <para>The creation of character special files (with | |
| 79 | −<application>mknod</application>) is a privileged operation and | |
| 80 | −devices cannot be opened by major and minor number. That means | |
| 81 | −applications cannot <emphasis>reliable</emphasis> scan for loaded or | |
| 82 | −installed drivers. The user must enter a device name, or the | |
| 83 | −application can try the conventional device names.</para> | |
| 84 | − </section> | |
| 85 | − | |
| 86 | − <section id="related"> | |
| 87 | − <title>Related Devices</title> | |
| 88 | − | |
| 89 | − <para>Devices can support several functions. For example | |
| 90 | −video capturing, VBI capturing and radio support.</para> | |
| 91 | − | |
| 92 | − <para>The V4L2 API creates different nodes for each of these functions.</para> | |
| 93 | − | |
| 94 | − <para>The V4L2 API was designed with the idea that one device node could support | |
| 95 | −all functions. However, in practice this never worked: this 'feature' | |
| 96 | −was never used by applications and many drivers did not support it and if | |
| 97 | −they did it was certainly never tested. In addition, switching a device | |
| 98 | −node between different functions only works when using the streaming I/O | |
| 99 | −API, not with the read()/write() API.</para> | |
| 100 | − | |
| 101 | − <para>Today each device node supports just one function.</para> | |
| 102 | − | |
| 103 | − <para>Besides video input or output the hardware may also | |
| 104 | −support audio sampling or playback. If so, these functions are | |
| 105 | −implemented as ALSA PCM devices with optional ALSA audio mixer | |
| 106 | −devices.</para> | |
| 107 | − | |
| 108 | − <para>One problem with all these devices is that the V4L2 API | |
| 109 | −makes no provisions to find these related devices. Some really | |
| 110 | −complex devices use the Media Controller (see <xref linkend="media_controller" />) | |
| 111 | −which can be used for this purpose. But most drivers do not use it, | |
| 112 | −and while some code exists that uses sysfs to discover related devices | |
| 113 | −(see libmedia_dev in the <ulink url="http://git.linuxtv.org/cgit.cgi/v4l-utils.git/">v4l-utils</ulink> | |
| 114 | −git repository), there is no library yet that can provide a single API towards | |
| 115 | −both Media Controller-based devices and devices that do not use the Media Controller. | |
| 116 | −If you want to work on this please write to the linux-media mailing list: &v4l-ml;.</para> | |
| 117 | − </section> | |
| 118 | − | |
| 119 | − <section> | |
| 120 | − <title>Multiple Opens</title> | |
| 121 | − | |
| 122 | − <para>V4L2 devices can be opened more than once.<footnote><para> | |
| 123 | −There are still some old and obscure drivers that have not been updated to | |
| 124 | −allow for multiple opens. This implies that for such drivers &func-open; can | |
| 125 | −return an &EBUSY; when the device is already in use.</para></footnote> | |
| 126 | −When this is supported by the driver, users can for example start a | |
| 127 | −"panel" application to change controls like brightness or audio | |
| 128 | −volume, while another application captures video and audio. In other words, panel | |
| 129 | −applications are comparable to an ALSA audio mixer application. | |
| 130 | −Just opening a V4L2 device should not change the state of the device.<footnote> | |
| 131 | −<para>Unfortunately, opening a radio device often switches the state of the | |
| 132 | −device to radio mode in many drivers. This behavior should be fixed eventually | |
| 133 | −as it violates the V4L2 specification.</para></footnote></para> | |
| 134 | − | |
| 135 | − <para>Once an application has allocated the memory buffers needed for | |
| 136 | −streaming data (by calling the &VIDIOC-REQBUFS; or &VIDIOC-CREATE-BUFS; ioctls, | |
| 137 | −or implicitly by calling the &func-read; or &func-write; functions) that | |
| 138 | −application (filehandle) becomes the owner of the device. It is no longer | |
| 139 | −allowed to make changes that would affect the buffer sizes (e.g. by calling | |
| 140 | −the &VIDIOC-S-FMT; ioctl) and other applications are no longer allowed to allocate | |
| 141 | −buffers or start or stop streaming. The &EBUSY; will be returned instead.</para> | |
| 142 | − | |
| 143 | − <para>Merely opening a V4L2 device does not grant exclusive | |
| 144 | −access.<footnote> | |
| 145 | − <para>Drivers could recognize the | |
| 146 | −<constant>O_EXCL</constant> open flag. Presently this is not required, | |
| 147 | −so applications cannot know if it really works.</para> | |
| 148 | − </footnote> Initiating data exchange however assigns the right | |
| 149 | −to read or write the requested type of data, and to change related | |
| 150 | −properties, to this file descriptor. Applications can request | |
| 151 | −additional access privileges using the priority mechanism described in | |
| 152 | −<xref linkend="app-pri" />.</para> | |
| 153 | − </section> | |
| 154 | − | |
| 155 | − <section> | |
| 156 | − <title>Shared Data Streams</title> | |
| 157 | − | |
| 158 | − <para>V4L2 drivers should not support multiple applications | |
| 159 | −reading or writing the same data stream on a device by copying | |
| 160 | −buffers, time multiplexing or similar means. This is better handled by | |
| 161 | −a proxy application in user space.</para> | |
| 162 | − </section> | |
| 163 | − | |
| 164 | − <section> | |
| 165 | − <title>Functions</title> | |
| 166 | − | |
| 167 | − <para>To open and close V4L2 devices applications use the | |
| 168 | −&func-open; and &func-close; function, respectively. Devices are | |
| 169 | −programmed using the &func-ioctl; function as explained in the | |
| 170 | −following sections.</para> | |
| 171 | − </section> | |
| 172 | − </section> | |
| 173 | − | |
| 174 | − <section id="querycap"> | |
| 175 | − <title>Querying Capabilities</title> | |
| 176 | − | |
| 177 | − <para>Because V4L2 covers a wide variety of devices not all | |
| 178 | −aspects of the API are equally applicable to all types of devices. | |
| 179 | −Furthermore devices of the same type have different capabilities and | |
| 180 | −this specification permits the omission of a few complicated and less | |
| 181 | −important parts of the API.</para> | |
| 182 | − | |
| 183 | − <para>The &VIDIOC-QUERYCAP; ioctl is available to check if the kernel | |
| 184 | −device is compatible with this specification, and to query the <link | |
| 185 | −linkend="devices">functions</link> and <link linkend="io">I/O | |
| 186 | −methods</link> supported by the device.</para> | |
| 187 | − | |
| 188 | − <para>Starting with kernel version 3.1, VIDIOC-QUERYCAP will return the | |
| 189 | −V4L2 API version used by the driver, with generally matches the Kernel version. | |
| 190 | −There's no need of using &VIDIOC-QUERYCAP; to check if a specific ioctl is | |
| 191 | −supported, the V4L2 core now returns ENOTTY if a driver doesn't provide | |
| 192 | −support for an ioctl.</para> | |
| 193 | − | |
| 194 | − <para>Other features can be queried | |
| 195 | −by calling the respective ioctl, for example &VIDIOC-ENUMINPUT; | |
| 196 | −to learn about the number, types and names of video connectors on the | |
| 197 | −device. Although abstraction is a major objective of this API, the | |
| 198 | −&VIDIOC-QUERYCAP; ioctl also allows driver specific applications to reliably identify | |
| 199 | −the driver.</para> | |
| 200 | − | |
| 201 | − <para>All V4L2 drivers must support | |
| 202 | −<constant>VIDIOC_QUERYCAP</constant>. Applications should always call | |
| 203 | −this ioctl after opening the device.</para> | |
| 204 | − </section> | |
| 205 | − | |
| 206 | − <section id="app-pri"> | |
| 207 | − <title>Application Priority</title> | |
| 208 | − | |
| 209 | − <para>When multiple applications share a device it may be | |
| 210 | −desirable to assign them different priorities. Contrary to the | |
| 211 | −traditional "rm -rf /" school of thought a video recording application | |
| 212 | −could for example block other applications from changing video | |
| 213 | −controls or switching the current TV channel. Another objective is to | |
| 214 | −permit low priority applications working in background, which can be | |
| 215 | −preempted by user controlled applications and automatically regain | |
| 216 | −control of the device at a later time.</para> | |
| 217 | − | |
| 218 | − <para>Since these features cannot be implemented entirely in user | |
| 219 | −space V4L2 defines the &VIDIOC-G-PRIORITY; and &VIDIOC-S-PRIORITY; | |
| 220 | −ioctls to request and query the access priority associate with a file | |
| 221 | −descriptor. Opening a device assigns a medium priority, compatible | |
| 222 | −with earlier versions of V4L2 and drivers not supporting these ioctls. | |
| 223 | −Applications requiring a different priority will usually call | |
| 224 | −<constant>VIDIOC_S_PRIORITY</constant> after verifying the device with | |
| 225 | −the &VIDIOC-QUERYCAP; ioctl.</para> | |
| 226 | − | |
| 227 | − <para>Ioctls changing driver properties, such as &VIDIOC-S-INPUT;, | |
| 228 | −return an &EBUSY; after another application obtained higher priority.</para> | |
| 229 | − </section> | |
| 230 | − | |
| 231 | − <section id="video"> | |
| 232 | − <title>Video Inputs and Outputs</title> | |
| 233 | − | |
| 234 | − <para>Video inputs and outputs are physical connectors of a | |
| 235 | −device. These can be for example RF connectors (antenna/cable), CVBS | |
| 236 | −a.k.a. Composite Video, S-Video or RGB connectors. Video and VBI | |
| 237 | −capture devices have inputs. Video and VBI output devices have outputs, | |
| 238 | −at least one each. Radio devices have no video inputs or outputs.</para> | |
| 239 | − | |
| 240 | − <para>To learn about the number and attributes of the | |
| 241 | −available inputs and outputs applications can enumerate them with the | |
| 242 | −&VIDIOC-ENUMINPUT; and &VIDIOC-ENUMOUTPUT; ioctl, respectively. The | |
| 243 | −&v4l2-input; returned by the <constant>VIDIOC_ENUMINPUT</constant> | |
| 244 | −ioctl also contains signal status information applicable when the | |
| 245 | −current video input is queried.</para> | |
| 246 | − | |
| 247 | − <para>The &VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; ioctls return the | |
| 248 | −index of the current video input or output. To select a different | |
| 249 | −input or output applications call the &VIDIOC-S-INPUT; and | |
| 250 | −&VIDIOC-S-OUTPUT; ioctls. Drivers must implement all the input ioctls | |
| 251 | −when the device has one or more inputs, all the output ioctls when the | |
| 252 | −device has one or more outputs.</para> | |
| 253 | − | |
| 254 | − <example> | |
| 255 | − <title>Information about the current video input</title> | |
| 256 | − | |
| 257 | − <programlisting> | |
| 258 | −&v4l2-input; input; | |
| 259 | −int index; | |
| 260 | − | |
| 261 | −if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &index)) { | |
| 262 | − perror("VIDIOC_G_INPUT"); | |
| 263 | − exit(EXIT_FAILURE); | |
| 264 | −} | |
| 265 | − | |
| 266 | −memset(&input, 0, sizeof(input)); | |
| 267 | −input.index = index; | |
| 268 | − | |
| 269 | −if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { | |
| 270 | − perror("VIDIOC_ENUMINPUT"); | |
| 271 | − exit(EXIT_FAILURE); | |
| 272 | −} | |
| 273 | − | |
| 274 | −printf("Current input: %s\n", input.name); | |
| 275 | − </programlisting> | |
| 276 | − </example> | |
| 277 | − | |
| 278 | − <example> | |
| 279 | − <title>Switching to the first video input</title> | |
| 280 | − | |
| 281 | − <programlisting> | |
| 282 | −int index; | |
| 283 | − | |
| 284 | −index = 0; | |
| 285 | − | |
| 286 | −if (-1 == ioctl(fd, &VIDIOC-S-INPUT;, &index)) { | |
| 287 | − perror("VIDIOC_S_INPUT"); | |
| 288 | − exit(EXIT_FAILURE); | |
| 289 | −} | |
| 290 | − </programlisting> | |
| 291 | − </example> | |
| 292 | − </section> | |
| 293 | − | |
| 294 | − <section id="audio"> | |
| 295 | − <title>Audio Inputs and Outputs</title> | |
| 296 | − | |
| 297 | − <para>Audio inputs and outputs are physical connectors of a | |
| 298 | −device. Video capture devices have inputs, output devices have | |
| 299 | −outputs, zero or more each. Radio devices have no audio inputs or | |
| 300 | −outputs. They have exactly one tuner which in fact | |
| 301 | −<emphasis>is</emphasis> an audio source, but this API associates | |
| 302 | −tuners with video inputs or outputs only, and radio devices have | |
| 303 | −none of these.<footnote> | |
| 304 | − <para>Actually &v4l2-audio; ought to have a | |
| 305 | −<structfield>tuner</structfield> field like &v4l2-input;, not only | |
| 306 | −making the API more consistent but also permitting radio devices with | |
| 307 | −multiple tuners.</para> | |
| 308 | − </footnote> A connector on a TV card to loop back the received | |
| 309 | −audio signal to a sound card is not considered an audio output.</para> | |
| 310 | − | |
| 311 | − <para>Audio and video inputs and outputs are associated. Selecting | |
| 312 | −a video source also selects an audio source. This is most evident when | |
| 313 | −the video and audio source is a tuner. Further audio connectors can | |
| 314 | −combine with more than one video input or output. Assumed two | |
| 315 | −composite video inputs and two audio inputs exist, there may be up to | |
| 316 | −four valid combinations. The relation of video and audio connectors | |
| 317 | −is defined in the <structfield>audioset</structfield> field of the | |
| 318 | −respective &v4l2-input; or &v4l2-output;, where each bit represents | |
| 319 | −the index number, starting at zero, of one audio input or output.</para> | |
| 320 | − | |
| 321 | − <para>To learn about the number and attributes of the | |
| 322 | −available inputs and outputs applications can enumerate them with the | |
| 323 | −&VIDIOC-ENUMAUDIO; and &VIDIOC-ENUMAUDOUT; ioctl, respectively. The | |
| 324 | −&v4l2-audio; returned by the <constant>VIDIOC_ENUMAUDIO</constant> ioctl | |
| 325 | −also contains signal status information applicable when the current | |
| 326 | −audio input is queried.</para> | |
| 327 | − | |
| 328 | − <para>The &VIDIOC-G-AUDIO; and &VIDIOC-G-AUDOUT; ioctls report | |
| 329 | −the current audio input and output, respectively. Note that, unlike | |
| 330 | −&VIDIOC-G-INPUT; and &VIDIOC-G-OUTPUT; these ioctls return a structure | |
| 331 | −as <constant>VIDIOC_ENUMAUDIO</constant> and | |
| 332 | −<constant>VIDIOC_ENUMAUDOUT</constant> do, not just an index.</para> | |
| 333 | − | |
| 334 | − <para>To select an audio input and change its properties | |
| 335 | −applications call the &VIDIOC-S-AUDIO; ioctl. To select an audio | |
| 336 | −output (which presently has no changeable properties) applications | |
| 337 | −call the &VIDIOC-S-AUDOUT; ioctl.</para> | |
| 338 | − | |
| 339 | − <para>Drivers must implement all audio input ioctls when the device | |
| 340 | −has multiple selectable audio inputs, all audio output ioctls when the | |
| 341 | −device has multiple selectable audio outputs. When the device has any | |
| 342 | −audio inputs or outputs the driver must set the <constant>V4L2_CAP_AUDIO</constant> | |
| 343 | −flag in the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl.</para> | |
| 344 | − | |
| 345 | − <example> | |
| 346 | − <title>Information about the current audio input</title> | |
| 347 | − | |
| 348 | − <programlisting> | |
| 349 | −&v4l2-audio; audio; | |
| 350 | − | |
| 351 | −memset(&audio, 0, sizeof(audio)); | |
| 352 | − | |
| 353 | −if (-1 == ioctl(fd, &VIDIOC-G-AUDIO;, &audio)) { | |
| 354 | − perror("VIDIOC_G_AUDIO"); | |
| 355 | − exit(EXIT_FAILURE); | |
| 356 | −} | |
| 357 | − | |
| 358 | −printf("Current input: %s\n", audio.name); | |
| 359 | − </programlisting> | |
| 360 | − </example> | |
| 361 | − | |
| 362 | − <example> | |
| 363 | − <title>Switching to the first audio input</title> | |
| 364 | − | |
| 365 | − <programlisting> | |
| 366 | −&v4l2-audio; audio; | |
| 367 | − | |
| 368 | −memset(&audio, 0, sizeof(audio)); /* clear audio.mode, audio.reserved */ | |
| 369 | − | |
| 370 | −audio.index = 0; | |
| 371 | − | |
| 372 | −if (-1 == ioctl(fd, &VIDIOC-S-AUDIO;, &audio)) { | |
| 373 | − perror("VIDIOC_S_AUDIO"); | |
| 374 | − exit(EXIT_FAILURE); | |
| 375 | −} | |
| 376 | − </programlisting> | |
| 377 | − </example> | |
| 378 | − </section> | |
| 379 | − | |
| 380 | − <section id="tuner"> | |
| 381 | − <title>Tuners and Modulators</title> | |
| 382 | − | |
| 383 | − <section> | |
| 384 | − <title>Tuners</title> | |
| 385 | − | |
| 386 | − <para>Video input devices can have one or more tuners | |
| 387 | −demodulating a RF signal. Each tuner is associated with one or more | |
| 388 | −video inputs, depending on the number of RF connectors on the tuner. | |
| 389 | −The <structfield>type</structfield> field of the respective | |
| 390 | −&v4l2-input; returned by the &VIDIOC-ENUMINPUT; ioctl is set to | |
| 391 | −<constant>V4L2_INPUT_TYPE_TUNER</constant> and its | |
| 392 | −<structfield>tuner</structfield> field contains the index number of | |
| 393 | −the tuner.</para> | |
| 394 | − | |
| 395 | − <para>Radio input devices have exactly one tuner with index zero, no | |
| 396 | −video inputs.</para> | |
| 397 | − | |
| 398 | − <para>To query and change tuner properties applications use the | |
| 399 | −&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; ioctls, respectively. The | |
| 400 | −&v4l2-tuner; returned by <constant>VIDIOC_G_TUNER</constant> also | |
| 401 | −contains signal status information applicable when the tuner of the | |
| 402 | −current video or radio input is queried. Note that | |
| 403 | −<constant>VIDIOC_S_TUNER</constant> does not switch the current tuner, | |
| 404 | −when there is more than one at all. The tuner is solely determined by | |
| 405 | −the current video input. Drivers must support both ioctls and set the | |
| 406 | −<constant>V4L2_CAP_TUNER</constant> flag in the &v4l2-capability; | |
| 407 | −returned by the &VIDIOC-QUERYCAP; ioctl when the device has one or | |
| 408 | −more tuners.</para> | |
| 409 | − </section> | |
| 410 | − | |
| 411 | − <section> | |
| 412 | − <title>Modulators</title> | |
| 413 | − | |
| 414 | − <para>Video output devices can have one or more modulators, uh, | |
| 415 | −modulating a video signal for radiation or connection to the antenna | |
| 416 | −input of a TV set or video recorder. Each modulator is associated with | |
| 417 | −one or more video outputs, depending on the number of RF connectors on | |
| 418 | −the modulator. The <structfield>type</structfield> field of the | |
| 419 | −respective &v4l2-output; returned by the &VIDIOC-ENUMOUTPUT; ioctl is | |
| 420 | −set to <constant>V4L2_OUTPUT_TYPE_MODULATOR</constant> and its | |
| 421 | −<structfield>modulator</structfield> field contains the index number | |
| 422 | −of the modulator.</para> | |
| 423 | − | |
| 424 | − <para>Radio output devices have exactly one modulator with index | |
| 425 | −zero, no video outputs.</para> | |
| 426 | − | |
| 427 | − <para>A video or radio device cannot support both a tuner and a | |
| 428 | −modulator. Two separate device nodes will have to be used for such | |
| 429 | −hardware, one that supports the tuner functionality and one that supports | |
| 430 | −the modulator functionality. The reason is a limitation with the | |
| 431 | −&VIDIOC-S-FREQUENCY; ioctl where you cannot specify whether the frequency | |
| 432 | −is for a tuner or a modulator.</para> | |
| 433 | − | |
| 434 | − <para>To query and change modulator properties applications use | |
| 435 | −the &VIDIOC-G-MODULATOR; and &VIDIOC-S-MODULATOR; ioctl. Note that | |
| 436 | −<constant>VIDIOC_S_MODULATOR</constant> does not switch the current | |
| 437 | −modulator, when there is more than one at all. The modulator is solely | |
| 438 | −determined by the current video output. Drivers must support both | |
| 439 | −ioctls and set the <constant>V4L2_CAP_MODULATOR</constant> flag in | |
| 440 | −the &v4l2-capability; returned by the &VIDIOC-QUERYCAP; ioctl when the | |
| 441 | −device has one or more modulators.</para> | |
| 442 | − </section> | |
| 443 | − | |
| 444 | − <section> | |
| 445 | − <title>Radio Frequency</title> | |
| 446 | − | |
| 447 | − <para>To get and set the tuner or modulator radio frequency | |
| 448 | −applications use the &VIDIOC-G-FREQUENCY; and &VIDIOC-S-FREQUENCY; | |
| 449 | −ioctl which both take a pointer to a &v4l2-frequency;. These ioctls | |
| 450 | −are used for TV and radio devices alike. Drivers must support both | |
| 451 | −ioctls when the tuner or modulator ioctls are supported, or | |
| 452 | −when the device is a radio device.</para> | |
| 453 | − </section> | |
| 454 | − </section> | |
| 455 | − | |
| 456 | − <section id="standard"> | |
| 457 | − <title>Video Standards</title> | |
| 458 | − | |
| 459 | − <para>Video devices typically support one or more different video | |
| 460 | −standards or variations of standards. Each video input and output may | |
| 461 | −support another set of standards. This set is reported by the | |
| 462 | −<structfield>std</structfield> field of &v4l2-input; and | |
| 463 | −&v4l2-output; returned by the &VIDIOC-ENUMINPUT; and | |
| 464 | −&VIDIOC-ENUMOUTPUT; ioctls, respectively.</para> | |
| 465 | − | |
| 466 | − <para>V4L2 defines one bit for each analog video standard | |
| 467 | −currently in use worldwide, and sets aside bits for driver defined | |
| 468 | −standards, ⪚ hybrid standards to watch NTSC video tapes on PAL TVs | |
| 469 | −and vice versa. Applications can use the predefined bits to select a | |
| 470 | −particular standard, although presenting the user a menu of supported | |
| 471 | −standards is preferred. To enumerate and query the attributes of the | |
| 472 | −supported standards applications use the &VIDIOC-ENUMSTD; ioctl.</para> | |
| 473 | − | |
| 474 | − <para>Many of the defined standards are actually just variations | |
| 475 | −of a few major standards. The hardware may in fact not distinguish | |
| 476 | −between them, or do so internal and switch automatically. Therefore | |
| 477 | −enumerated standards also contain sets of one or more standard | |
| 478 | −bits.</para> | |
| 479 | − | |
| 480 | − <para>Assume a hypothetic tuner capable of demodulating B/PAL, | |
| 481 | −G/PAL and I/PAL signals. The first enumerated standard is a set of B | |
| 482 | −and G/PAL, switched automatically depending on the selected radio | |
| 483 | −frequency in UHF or VHF band. Enumeration gives a "PAL-B/G" or "PAL-I" | |
| 484 | −choice. Similar a Composite input may collapse standards, enumerating | |
| 485 | −"PAL-B/G/H/I", "NTSC-M" and "SECAM-D/K".<footnote> | |
| 486 | − <para>Some users are already confused by technical terms PAL, | |
| 487 | −NTSC and SECAM. There is no point asking them to distinguish between | |
| 488 | −B, G, D, or K when the software or hardware can do that | |
| 489 | −automatically.</para> | |
| 490 | − </footnote></para> | |
| 491 | − | |
| 492 | − <para>To query and select the standard used by the current video | |
| 493 | −input or output applications call the &VIDIOC-G-STD; and | |
| 494 | −&VIDIOC-S-STD; ioctl, respectively. The <emphasis>received</emphasis> | |
| 495 | −standard can be sensed with the &VIDIOC-QUERYSTD; ioctl. Note that the | |
| 496 | −parameter of all these ioctls is a pointer to a &v4l2-std-id; type | |
| 497 | −(a standard set), <emphasis>not</emphasis> an index into the standard | |
| 498 | −enumeration. Drivers must implement all video standard ioctls | |
| 499 | −when the device has one or more video inputs or outputs.</para> | |
| 500 | − | |
| 501 | − <para>Special rules apply to devices such as USB cameras where the notion of video | |
| 502 | −standards makes little sense. More generally for any capture or output device | |
| 503 | −which is: <itemizedlist> | |
| 504 | − <listitem> | |
| 505 | − <para>incapable of capturing fields or frames at the nominal | |
| 506 | −rate of the video standard, or</para> | |
| 507 | − </listitem> | |
| 508 | − <listitem> | |
| 509 | − <para>that does not support the video standard formats at all.</para> | |
| 510 | − </listitem> | |
| 511 | − </itemizedlist> Here the driver shall set the | |
| 512 | −<structfield>std</structfield> field of &v4l2-input; and &v4l2-output; | |
| 513 | −to zero and the <constant>VIDIOC_G_STD</constant>, | |
| 514 | −<constant>VIDIOC_S_STD</constant>, | |
| 515 | −<constant>VIDIOC_QUERYSTD</constant> and | |
| 516 | −<constant>VIDIOC_ENUMSTD</constant> ioctls shall return the | |
| 517 | −&ENOTTY; or the &EINVAL;.</para> | |
| 518 | − <para>Applications can make use of the <xref linkend="input-capabilities" /> and | |
| 519 | −<xref linkend="output-capabilities"/> flags to determine whether the video standard ioctls | |
| 520 | −can be used with the given input or output.</para> | |
| 521 | − | |
| 522 | − <example> | |
| 523 | − <title>Information about the current video standard</title> | |
| 524 | − | |
| 525 | − <programlisting> | |
| 526 | −&v4l2-std-id; std_id; | |
| 527 | −&v4l2-standard; standard; | |
| 528 | − | |
| 529 | −if (-1 == ioctl(fd, &VIDIOC-G-STD;, &std_id)) { | |
| 530 | − /* Note when VIDIOC_ENUMSTD always returns ENOTTY this | |
| 531 | − is no video device or it falls under the USB exception, | |
| 532 | − and VIDIOC_G_STD returning ENOTTY is no error. */ | |
| 533 | − | |
| 534 | − perror("VIDIOC_G_STD"); | |
| 535 | − exit(EXIT_FAILURE); | |
| 536 | −} | |
| 537 | − | |
| 538 | −memset(&standard, 0, sizeof(standard)); | |
| 539 | −standard.index = 0; | |
| 540 | − | |
| 541 | −while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) { | |
| 542 | − if (standard.id & std_id) { | |
| 543 | − printf("Current video standard: %s\n", standard.name); | |
| 544 | − exit(EXIT_SUCCESS); | |
| 545 | − } | |
| 546 | − | |
| 547 | − standard.index++; | |
| 548 | −} | |
| 549 | − | |
| 550 | −/* EINVAL indicates the end of the enumeration, which cannot be | |
| 551 | − empty unless this device falls under the USB exception. */ | |
| 552 | − | |
| 553 | −if (errno == EINVAL || standard.index == 0) { | |
| 554 | − perror("VIDIOC_ENUMSTD"); | |
| 555 | − exit(EXIT_FAILURE); | |
| 556 | −} | |
| 557 | − </programlisting> | |
| 558 | − </example> | |
| 559 | − | |
| 560 | − <example> | |
| 561 | − <title>Listing the video standards supported by the current | |
| 562 | −input</title> | |
| 563 | − | |
| 564 | − <programlisting> | |
| 565 | −&v4l2-input; input; | |
| 566 | −&v4l2-standard; standard; | |
| 567 | − | |
| 568 | −memset(&input, 0, sizeof(input)); | |
| 569 | − | |
| 570 | −if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) { | |
| 571 | − perror("VIDIOC_G_INPUT"); | |
| 572 | − exit(EXIT_FAILURE); | |
| 573 | −} | |
| 574 | − | |
| 575 | −if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { | |
| 576 | − perror("VIDIOC_ENUM_INPUT"); | |
| 577 | − exit(EXIT_FAILURE); | |
| 578 | −} | |
| 579 | − | |
| 580 | −printf("Current input %s supports:\n", input.name); | |
| 581 | − | |
| 582 | −memset(&standard, 0, sizeof(standard)); | |
| 583 | −standard.index = 0; | |
| 584 | − | |
| 585 | −while (0 == ioctl(fd, &VIDIOC-ENUMSTD;, &standard)) { | |
| 586 | − if (standard.id & input.std) | |
| 587 | − printf("%s\n", standard.name); | |
| 588 | − | |
| 589 | − standard.index++; | |
| 590 | −} | |
| 591 | − | |
| 592 | −/* EINVAL indicates the end of the enumeration, which cannot be | |
| 593 | − empty unless this device falls under the USB exception. */ | |
| 594 | − | |
| 595 | −if (errno != EINVAL || standard.index == 0) { | |
| 596 | − perror("VIDIOC_ENUMSTD"); | |
| 597 | − exit(EXIT_FAILURE); | |
| 598 | −} | |
| 599 | − </programlisting> | |
| 600 | − </example> | |
| 601 | − | |
| 602 | − <example> | |
| 603 | − <title>Selecting a new video standard</title> | |
| 604 | − | |
| 605 | − <programlisting> | |
| 606 | −&v4l2-input; input; | |
| 607 | −&v4l2-std-id; std_id; | |
| 608 | − | |
| 609 | −memset(&input, 0, sizeof(input)); | |
| 610 | − | |
| 611 | −if (-1 == ioctl(fd, &VIDIOC-G-INPUT;, &input.index)) { | |
| 612 | − perror("VIDIOC_G_INPUT"); | |
| 613 | − exit(EXIT_FAILURE); | |
| 614 | −} | |
| 615 | − | |
| 616 | −if (-1 == ioctl(fd, &VIDIOC-ENUMINPUT;, &input)) { | |
| 617 | − perror("VIDIOC_ENUM_INPUT"); | |
| 618 | − exit(EXIT_FAILURE); | |
| 619 | −} | |
| 620 | − | |
| 621 | −if (0 == (input.std & V4L2_STD_PAL_BG)) { | |
| 622 | − fprintf(stderr, "Oops. B/G PAL is not supported.\n"); | |
| 623 | − exit(EXIT_FAILURE); | |
| 624 | −} | |
| 625 | − | |
| 626 | −/* Note this is also supposed to work when only B | |
| 627 | − <emphasis>or</emphasis> G/PAL is supported. */ | |
| 628 | − | |
| 629 | −std_id = V4L2_STD_PAL_BG; | |
| 630 | − | |
| 631 | −if (-1 == ioctl(fd, &VIDIOC-S-STD;, &std_id)) { | |
| 632 | − perror("VIDIOC_S_STD"); | |
| 633 | − exit(EXIT_FAILURE); | |
| 634 | −} | |
| 635 | − </programlisting> | |
| 636 | − </example> | |
| 637 | − </section> | |
| 638 | − <section id="dv-timings"> | |
| 639 | − <title>Digital Video (DV) Timings</title> | |
| 640 | − <para> | |
| 641 | − The video standards discussed so far have been dealing with Analog TV and the | |
| 642 | −corresponding video timings. Today there are many more different hardware interfaces | |
| 643 | −such as High Definition TV interfaces (HDMI), VGA, DVI connectors etc., that carry | |
| 644 | −video signals and there is a need to extend the API to select the video timings | |
| 645 | −for these interfaces. Since it is not possible to extend the &v4l2-std-id; due to | |
| 646 | −the limited bits available, a new set of ioctls was added to set/get video timings at | |
| 647 | −the input and output.</para> | |
| 648 | − | |
| 649 | − <para>These ioctls deal with the detailed digital video timings that define | |
| 650 | −each video format. This includes parameters such as the active video width and height, | |
| 651 | −signal polarities, frontporches, backporches, sync widths etc. The <filename>linux/v4l2-dv-timings.h</filename> | |
| 652 | −header can be used to get the timings of the formats in the <xref linkend="cea861" /> and | |
| 653 | −<xref linkend="vesadmt" /> standards. | |
| 654 | − </para> | |
| 655 | − | |
| 656 | − <para>To enumerate and query the attributes of the DV timings supported by a device | |
| 657 | − applications use the &VIDIOC-ENUM-DV-TIMINGS; and &VIDIOC-DV-TIMINGS-CAP; ioctls. | |
| 658 | − To set DV timings for the device applications use the | |
| 659 | −&VIDIOC-S-DV-TIMINGS; ioctl and to get current DV timings they use the | |
| 660 | −&VIDIOC-G-DV-TIMINGS; ioctl. To detect the DV timings as seen by the video receiver applications | |
| 661 | −use the &VIDIOC-QUERY-DV-TIMINGS; ioctl.</para> | |
| 662 | − <para>Applications can make use of the <xref linkend="input-capabilities" /> and | |
| 663 | −<xref linkend="output-capabilities"/> flags to determine whether the digital video ioctls | |
| 664 | −can be used with the given input or output.</para> | |
| 665 | − </section> | |
| 666 | − | |
| 667 | − &sub-controls; | |
| 668 | − | |
| 669 | − <section id="format"> | |
| 670 | − <title>Data Formats</title> | |
| 671 | − | |
| 672 | − <section> | |
| 673 | − <title>Data Format Negotiation</title> | |
| 674 | − | |
| 675 | − <para>Different devices exchange different kinds of data with | |
| 676 | −applications, for example video images, raw or sliced VBI data, RDS | |
| 677 | −datagrams. Even within one kind many different formats are possible, | |
| 678 | −in particular an abundance of image formats. Although drivers must | |
| 679 | −provide a default and the selection persists across closing and | |
| 680 | −reopening a device, applications should always negotiate a data format | |
| 681 | −before engaging in data exchange. Negotiation means the application | |
| 682 | −asks for a particular format and the driver selects and reports the | |
| 683 | −best the hardware can do to satisfy the request. Of course | |
| 684 | −applications can also just query the current selection.</para> | |
| 685 | − | |
| 686 | − <para>A single mechanism exists to negotiate all data formats | |
| 687 | −using the aggregate &v4l2-format; and the &VIDIOC-G-FMT; and | |
| 688 | −&VIDIOC-S-FMT; ioctls. Additionally the &VIDIOC-TRY-FMT; ioctl can be | |
| 689 | −used to examine what the hardware <emphasis>could</emphasis> do, | |
| 690 | −without actually selecting a new data format. The data formats | |
| 691 | −supported by the V4L2 API are covered in the respective device section | |
| 692 | −in <xref linkend="devices" />. For a closer look at image formats see | |
| 693 | −<xref linkend="pixfmt" />.</para> | |
| 694 | − | |
| 695 | − <para>The <constant>VIDIOC_S_FMT</constant> ioctl is a major | |
| 696 | −turning-point in the initialization sequence. Prior to this point | |
| 697 | −multiple panel applications can access the same device concurrently to | |
| 698 | −select the current input, change controls or modify other properties. | |
| 699 | −The first <constant>VIDIOC_S_FMT</constant> assigns a logical stream | |
| 700 | −(video data, VBI data etc.) exclusively to one file descriptor.</para> | |
| 701 | − | |
| 702 | − <para>Exclusive means no other application, more precisely no | |
| 703 | −other file descriptor, can grab this stream or change device | |
| 704 | −properties inconsistent with the negotiated parameters. A video | |
| 705 | −standard change for example, when the new standard uses a different | |
| 706 | −number of scan lines, can invalidate the selected image format. | |
| 707 | −Therefore only the file descriptor owning the stream can make | |
| 708 | −invalidating changes. Accordingly multiple file descriptors which | |
| 709 | −grabbed different logical streams prevent each other from interfering | |
| 710 | −with their settings. When for example video overlay is about to start | |
| 711 | −or already in progress, simultaneous video capturing may be restricted | |
| 712 | −to the same cropping and image size.</para> | |
| 713 | − | |
| 714 | − <para>When applications omit the | |
| 715 | −<constant>VIDIOC_S_FMT</constant> ioctl its locking side effects are | |
| 716 | −implied by the next step, the selection of an I/O method with the | |
| 717 | −&VIDIOC-REQBUFS; ioctl or implicit with the first &func-read; or | |
| 718 | −&func-write; call.</para> | |
| 719 | − | |
| 720 | − <para>Generally only one logical stream can be assigned to a | |
| 721 | −file descriptor, the exception being drivers permitting simultaneous | |
| 722 | −video capturing and overlay using the same file descriptor for | |
| 723 | −compatibility with V4L and earlier versions of V4L2. Switching the | |
| 724 | −logical stream or returning into "panel mode" is possible by closing | |
| 725 | −and reopening the device. Drivers <emphasis>may</emphasis> support a | |
| 726 | −switch using <constant>VIDIOC_S_FMT</constant>.</para> | |
| 727 | − | |
| 728 | − <para>All drivers exchanging data with | |
| 729 | −applications must support the <constant>VIDIOC_G_FMT</constant> and | |
| 730 | −<constant>VIDIOC_S_FMT</constant> ioctl. Implementation of the | |
| 731 | −<constant>VIDIOC_TRY_FMT</constant> is highly recommended but | |
| 732 | −optional.</para> | |
| 733 | − </section> | |
| 734 | − | |
| 735 | − <section> | |
| 736 | − <title>Image Format Enumeration</title> | |
| 737 | − | |
| 738 | − <para>Apart of the generic format negotiation functions | |
| 739 | −a special ioctl to enumerate all image formats supported by video | |
| 740 | −capture, overlay or output devices is available.<footnote> | |
| 741 | − <para>Enumerating formats an application has no a-priori | |
| 742 | −knowledge of (otherwise it could explicitly ask for them and need not | |
| 743 | −enumerate) seems useless, but there are applications serving as proxy | |
| 744 | −between drivers and the actual video applications for which this is | |
| 745 | −useful.</para> | |
| 746 | − </footnote></para> | |
| 747 | − | |
| 748 | − <para>The &VIDIOC-ENUM-FMT; ioctl must be supported | |
| 749 | −by all drivers exchanging image data with applications.</para> | |
| 750 | − | |
| 751 | − <important> | |
| 752 | − <para>Drivers are not supposed to convert image formats in | |
| 753 | −kernel space. They must enumerate only formats directly supported by | |
| 754 | −the hardware. If necessary driver writers should publish an example | |
| 755 | −conversion routine or library for integration into applications.</para> | |
| 756 | − </important> | |
| 757 | − </section> | |
| 758 | − </section> | |
| 759 | − | |
| 760 | − &sub-planar-apis; | |
| 761 | − | |
| 762 | − <section id="crop"> | |
| 763 | − <title>Image Cropping, Insertion and Scaling</title> | |
| 764 | − | |
| 765 | − <para>Some video capture devices can sample a subsection of the | |
| 766 | −picture and shrink or enlarge it to an image of arbitrary size. We | |
| 767 | −call these abilities cropping and scaling. Some video output devices | |
| 768 | −can scale an image up or down and insert it at an arbitrary scan line | |
| 769 | −and horizontal offset into a video signal.</para> | |
| 770 | − | |
| 771 | − <para>Applications can use the following API to select an area in | |
| 772 | −the video signal, query the default area and the hardware limits. | |
| 773 | −<emphasis>Despite their name, the &VIDIOC-CROPCAP;, &VIDIOC-G-CROP; | |
| 774 | −and &VIDIOC-S-CROP; ioctls apply to input as well as output | |
| 775 | −devices.</emphasis></para> | |
| 776 | − | |
| 777 | − <para>Scaling requires a source and a target. On a video capture | |
| 778 | −or overlay device the source is the video signal, and the cropping | |
| 779 | −ioctls determine the area actually sampled. The target are images | |
| 780 | −read by the application or overlaid onto the graphics screen. Their | |
| 781 | −size (and position for an overlay) is negotiated with the | |
| 782 | −&VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctls.</para> | |
| 783 | − | |
| 784 | − <para>On a video output device the source are the images passed in | |
| 785 | −by the application, and their size is again negotiated with the | |
| 786 | −<constant>VIDIOC_G/S_FMT</constant> ioctls, or may be encoded in a | |
| 787 | −compressed video stream. The target is the video signal, and the | |
| 788 | −cropping ioctls determine the area where the images are | |
| 789 | −inserted.</para> | |
| 790 | − | |
| 791 | − <para>Source and target rectangles are defined even if the device | |
| 792 | −does not support scaling or the <constant>VIDIOC_G/S_CROP</constant> | |
| 793 | −ioctls. Their size (and position where applicable) will be fixed in | |
| 794 | −this case. <emphasis>All capture and output device must support the | |
| 795 | −<constant>VIDIOC_CROPCAP</constant> ioctl such that applications can | |
| 796 | −determine if scaling takes place.</emphasis></para> | |
| 797 | − | |
| 798 | − <section> | |
| 799 | − <title>Cropping Structures</title> | |
| 800 | − | |
| 801 | − <figure id="crop-scale"> | |
| 802 | − <title>Image Cropping, Insertion and Scaling</title> | |
| 803 | − <mediaobject> | |
| 804 | − <imageobject> | |
| 805 | − <imagedata fileref="crop.pdf" format="PS" /> | |
| 806 | − </imageobject> | |
| 807 | − <imageobject> | |
| 808 | − <imagedata fileref="crop.gif" format="GIF" /> | |
| 809 | − </imageobject> | |
| 810 | − <textobject> | |
| 811 | − <phrase>The cropping, insertion and scaling process</phrase> | |
| 812 | − </textobject> | |
| 813 | − </mediaobject> | |
| 814 | − </figure> | |
| 815 | − | |
| 816 | − <para>For capture devices the coordinates of the top left | |
| 817 | −corner, width and height of the area which can be sampled is given by | |
| 818 | −the <structfield>bounds</structfield> substructure of the | |
| 819 | −&v4l2-cropcap; returned by the <constant>VIDIOC_CROPCAP</constant> | |
| 820 | −ioctl. To support a wide range of hardware this specification does not | |
| 821 | −define an origin or units. However by convention drivers should | |
| 822 | −horizontally count unscaled samples relative to 0H (the leading edge | |
| 823 | −of the horizontal sync pulse, see <xref linkend="vbi-hsync" />). | |
| 824 | −Vertically ITU-R line | |
| 825 | −numbers of the first field (<xref linkend="vbi-525" />, <xref | |
| 826 | −linkend="vbi-625" />), multiplied by two if the driver can capture both | |
| 827 | −fields.</para> | |
| 828 | − | |
| 829 | − <para>The top left corner, width and height of the source | |
| 830 | −rectangle, that is the area actually sampled, is given by &v4l2-crop; | |
| 831 | −using the same coordinate system as &v4l2-cropcap;. Applications can | |
| 832 | −use the <constant>VIDIOC_G_CROP</constant> and | |
| 833 | −<constant>VIDIOC_S_CROP</constant> ioctls to get and set this | |
| 834 | −rectangle. It must lie completely within the capture boundaries and | |
| 835 | −the driver may further adjust the requested size and/or position | |
| 836 | −according to hardware limitations.</para> | |
| 837 | − | |
| 838 | − <para>Each capture device has a default source rectangle, given | |
| 839 | −by the <structfield>defrect</structfield> substructure of | |
| 840 | −&v4l2-cropcap;. The center of this rectangle shall align with the | |
| 841 | −center of the active picture area of the video signal, and cover what | |
| 842 | −the driver writer considers the complete picture. Drivers shall reset | |
| 843 | −the source rectangle to the default when the driver is first loaded, | |
| 844 | −but not later.</para> | |
| 845 | − | |
| 846 | − <para>For output devices these structures and ioctls are used | |
| 847 | −accordingly, defining the <emphasis>target</emphasis> rectangle where | |
| 848 | −the images will be inserted into the video signal.</para> | |
| 849 | − | |
| 850 | − </section> | |
| 851 | − | |
| 852 | − <section> | |
| 853 | − <title>Scaling Adjustments</title> | |
| 854 | − | |
| 855 | − <para>Video hardware can have various cropping, insertion and | |
| 856 | −scaling limitations. It may only scale up or down, support only | |
| 857 | −discrete scaling factors, or have different scaling abilities in | |
| 858 | −horizontal and vertical direction. Also it may not support scaling at | |
| 859 | −all. At the same time the &v4l2-crop; rectangle may have to be | |
| 860 | −aligned, and both the source and target rectangles may have arbitrary | |
| 861 | −upper and lower size limits. In particular the maximum | |
| 862 | −<structfield>width</structfield> and <structfield>height</structfield> | |
| 863 | −in &v4l2-crop; may be smaller than the | |
| 864 | −&v4l2-cropcap;.<structfield>bounds</structfield> area. Therefore, as | |
| 865 | −usual, drivers are expected to adjust the requested parameters and | |
| 866 | −return the actual values selected.</para> | |
| 867 | − | |
| 868 | − <para>Applications can change the source or the target rectangle | |
| 869 | −first, as they may prefer a particular image size or a certain area in | |
| 870 | −the video signal. If the driver has to adjust both to satisfy hardware | |
| 871 | −limitations, the last requested rectangle shall take priority, and the | |
| 872 | −driver should preferably adjust the opposite one. The &VIDIOC-TRY-FMT; | |
| 873 | −ioctl however shall not change the driver state and therefore only | |
| 874 | −adjust the requested rectangle.</para> | |
| 875 | − | |
| 876 | − <para>Suppose scaling on a video capture device is restricted to | |
| 877 | −a factor 1:1 or 2:1 in either direction and the target image size must | |
| 878 | −be a multiple of 16 × 16 pixels. The source cropping | |
| 879 | −rectangle is set to defaults, which are also the upper limit in this | |
| 880 | −example, of 640 × 400 pixels at offset 0, 0. An | |
| 881 | −application requests an image size of 300 × 225 | |
| 882 | −pixels, assuming video will be scaled down from the "full picture" | |
| 883 | −accordingly. The driver sets the image size to the closest possible | |
| 884 | −values 304 × 224, then chooses the cropping rectangle | |
| 885 | −closest to the requested size, that is 608 × 224 | |
| 886 | −(224 × 2:1 would exceed the limit 400). The offset | |
| 887 | −0, 0 is still valid, thus unmodified. Given the default cropping | |
| 888 | −rectangle reported by <constant>VIDIOC_CROPCAP</constant> the | |
| 889 | −application can easily propose another offset to center the cropping | |
| 890 | −rectangle.</para> | |
| 891 | − | |
| 892 | − <para>Now the application may insist on covering an area using a | |
| 893 | −picture aspect ratio closer to the original request, so it asks for a | |
| 894 | −cropping rectangle of 608 × 456 pixels. The present | |
| 895 | −scaling factors limit cropping to 640 × 384, so the | |
| 896 | −driver returns the cropping size 608 × 384 and adjusts | |
| 897 | −the image size to closest possible 304 × 192.</para> | |
| 898 | − | |
| 899 | − </section> | |
| 900 | − | |
| 901 | − <section> | |
| 902 | − <title>Examples</title> | |
| 903 | − | |
| 904 | − <para>Source and target rectangles shall remain unchanged across | |
| 905 | −closing and reopening a device, such that piping data into or out of a | |
| 906 | −device will work without special preparations. More advanced | |
| 907 | −applications should ensure the parameters are suitable before starting | |
| 908 | −I/O.</para> | |
| 909 | − | |
| 910 | − <example> | |
| 911 | − <title>Resetting the cropping parameters</title> | |
| 912 | − | |
| 913 | − <para>(A video capture device is assumed; change | |
| 914 | −<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> for other | |
| 915 | −devices.)</para> | |
| 916 | − | |
| 917 | − <programlisting> | |
| 918 | −&v4l2-cropcap; cropcap; | |
| 919 | −&v4l2-crop; crop; | |
| 920 | − | |
| 921 | −memset (&cropcap, 0, sizeof (cropcap)); | |
| 922 | −cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 923 | − | |
| 924 | −if (-1 == ioctl (fd, &VIDIOC-CROPCAP;, &cropcap)) { | |
| 925 | − perror ("VIDIOC_CROPCAP"); | |
| 926 | − exit (EXIT_FAILURE); | |
| 927 | −} | |
| 928 | − | |
| 929 | −memset (&crop, 0, sizeof (crop)); | |
| 930 | −crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 931 | −crop.c = cropcap.defrect; | |
| 932 | − | |
| 933 | −/* Ignore if cropping is not supported (EINVAL). */ | |
| 934 | − | |
| 935 | −if (-1 == ioctl (fd, &VIDIOC-S-CROP;, &crop) | |
| 936 | − && errno != EINVAL) { | |
| 937 | − perror ("VIDIOC_S_CROP"); | |
| 938 | − exit (EXIT_FAILURE); | |
| 939 | −} | |
| 940 | − </programlisting> | |
| 941 | − </example> | |
| 942 | − | |
| 943 | − <example> | |
| 944 | − <title>Simple downscaling</title> | |
| 945 | − | |
| 946 | − <para>(A video capture device is assumed.)</para> | |
| 947 | − | |
| 948 | − <programlisting> | |
| 949 | −&v4l2-cropcap; cropcap; | |
| 950 | −&v4l2-format; format; | |
| 951 | − | |
| 952 | −reset_cropping_parameters (); | |
| 953 | − | |
| 954 | −/* Scale down to 1/4 size of full picture. */ | |
| 955 | − | |
| 956 | −memset (&format, 0, sizeof (format)); /* defaults */ | |
| 957 | − | |
| 958 | −format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 959 | − | |
| 960 | −format.fmt.pix.width = cropcap.defrect.width >> 1; | |
| 961 | −format.fmt.pix.height = cropcap.defrect.height >> 1; | |
| 962 | −format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; | |
| 963 | − | |
| 964 | −if (-1 == ioctl (fd, &VIDIOC-S-FMT;, &format)) { | |
| 965 | − perror ("VIDIOC_S_FORMAT"); | |
| 966 | − exit (EXIT_FAILURE); | |
| 967 | −} | |
| 968 | − | |
| 969 | −/* We could check the actual image size now, the actual scaling factor | |
| 970 | − or if the driver can scale at all. */ | |
| 971 | − </programlisting> | |
| 972 | − </example> | |
| 973 | − | |
| 974 | − <example> | |
| 975 | − <title>Selecting an output area</title> | |
| 976 | − | |
| 977 | − <programlisting> | |
| 978 | −&v4l2-cropcap; cropcap; | |
| 979 | −&v4l2-crop; crop; | |
| 980 | − | |
| 981 | −memset (&cropcap, 0, sizeof (cropcap)); | |
| 982 | −cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; | |
| 983 | − | |
| 984 | −if (-1 == ioctl (fd, VIDIOC_CROPCAP;, &cropcap)) { | |
| 985 | − perror ("VIDIOC_CROPCAP"); | |
| 986 | − exit (EXIT_FAILURE); | |
| 987 | −} | |
| 988 | − | |
| 989 | −memset (&crop, 0, sizeof (crop)); | |
| 990 | − | |
| 991 | −crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; | |
| 992 | −crop.c = cropcap.defrect; | |
| 993 | − | |
| 994 | −/* Scale the width and height to 50 % of their original size | |
| 995 | − and center the output. */ | |
| 996 | − | |
| 997 | −crop.c.width /= 2; | |
| 998 | −crop.c.height /= 2; | |
| 999 | −crop.c.left += crop.c.width / 2; | |
| 1000 | −crop.c.top += crop.c.height / 2; | |
| 1001 | − | |
| 1002 | −/* Ignore if cropping is not supported (EINVAL). */ | |
| 1003 | − | |
| 1004 | −if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) | |
| 1005 | − && errno != EINVAL) { | |
| 1006 | − perror ("VIDIOC_S_CROP"); | |
| 1007 | − exit (EXIT_FAILURE); | |
| 1008 | −} | |
| 1009 | −</programlisting> | |
| 1010 | − </example> | |
| 1011 | − | |
| 1012 | − <example> | |
| 1013 | − <title>Current scaling factor and pixel aspect</title> | |
| 1014 | − | |
| 1015 | − <para>(A video capture device is assumed.)</para> | |
| 1016 | − | |
| 1017 | − <programlisting> | |
| 1018 | −&v4l2-cropcap; cropcap; | |
| 1019 | −&v4l2-crop; crop; | |
| 1020 | −&v4l2-format; format; | |
| 1021 | −double hscale, vscale; | |
| 1022 | −double aspect; | |
| 1023 | −int dwidth, dheight; | |
| 1024 | − | |
| 1025 | −memset (&cropcap, 0, sizeof (cropcap)); | |
| 1026 | −cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 1027 | − | |
| 1028 | −if (-1 == ioctl (fd, &VIDIOC-CROPCAP;, &cropcap)) { | |
| 1029 | − perror ("VIDIOC_CROPCAP"); | |
| 1030 | − exit (EXIT_FAILURE); | |
| 1031 | −} | |
| 1032 | − | |
| 1033 | −memset (&crop, 0, sizeof (crop)); | |
| 1034 | −crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 1035 | − | |
| 1036 | −if (-1 == ioctl (fd, &VIDIOC-G-CROP;, &crop)) { | |
| 1037 | − if (errno != EINVAL) { | |
| 1038 | − perror ("VIDIOC_G_CROP"); | |
| 1039 | − exit (EXIT_FAILURE); | |
| 1040 | − } | |
| 1041 | − | |
| 1042 | − /* Cropping not supported. */ | |
| 1043 | − crop.c = cropcap.defrect; | |
| 1044 | −} | |
| 1045 | − | |
| 1046 | −memset (&format, 0, sizeof (format)); | |
| 1047 | −format.fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; | |
| 1048 | − | |
| 1049 | −if (-1 == ioctl (fd, &VIDIOC-G-FMT;, &format)) { | |
| 1050 | − perror ("VIDIOC_G_FMT"); | |
| 1051 | − exit (EXIT_FAILURE); | |
| 1052 | −} | |
| 1053 | − | |
| 1054 | −/* The scaling applied by the driver. */ | |
| 1055 | − | |
| 1056 | −hscale = format.fmt.pix.width / (double) crop.c.width; | |
| 1057 | −vscale = format.fmt.pix.height / (double) crop.c.height; | |
| 1058 | − | |
| 1059 | −aspect = cropcap.pixelaspect.numerator / | |
| 1060 | − (double) cropcap.pixelaspect.denominator; | |
| 1061 | −aspect = aspect * hscale / vscale; | |
| 1062 | − | |
| 1063 | −/* Devices following ITU-R BT.601 do not capture | |
| 1064 | − square pixels. For playback on a computer monitor | |
| 1065 | − we should scale the images to this size. */ | |
| 1066 | − | |
| 1067 | −dwidth = format.fmt.pix.width / aspect; | |
| 1068 | −dheight = format.fmt.pix.height; | |
| 1069 | − </programlisting> | |
| 1070 | − </example> | |
| 1071 | − </section> | |
| 1072 | − </section> | |
| 1073 | − | |
| 1074 | − &sub-selection-api; | |
| 1075 | − | |
| 1076 | − <section id="streaming-par"> | |
| 1077 | − <title>Streaming Parameters</title> | |
| 1078 | − | |
| 1079 | − <para>Streaming parameters are intended to optimize the video | |
| 1080 | −capture process as well as I/O. Presently applications can request a | |
| 1081 | −high quality capture mode with the &VIDIOC-S-PARM; ioctl.</para> | |
| 1082 | − | |
| 1083 | − <para>The current video standard determines a nominal number of | |
| 1084 | −frames per second. If less than this number of frames is to be | |
| 1085 | −captured or output, applications can request frame skipping or | |
| 1086 | −duplicating on the driver side. This is especially useful when using | |
| 1087 | −the &func-read; or &func-write;, which are not augmented by timestamps | |
| 1088 | −or sequence counters, and to avoid unnecessary data copying.</para> | |
| 1089 | − | |
| 1090 | − <para>Finally these ioctls can be used to determine the number of | |
| 1091 | −buffers used internally by a driver in read/write mode. For | |
| 1092 | −implications see the section discussing the &func-read; | |
| 1093 | −function.</para> | |
| 1094 | − | |
| 1095 | − <para>To get and set the streaming parameters applications call | |
| 1096 | −the &VIDIOC-G-PARM; and &VIDIOC-S-PARM; ioctl, respectively. They take | |
| 1097 | −a pointer to a &v4l2-streamparm;, which contains a union holding | |
| 1098 | −separate parameters for input and output devices.</para> | |
| 1099 | − | |
| 1100 | − <para>These ioctls are optional, drivers need not implement | |
| 1101 | −them. If so, they return the &EINVAL;.</para> | |
| 1102 | − </section> | |
| @@ -1,2723 +0,0 @@ | ||
| 1 | − <title>Changes</title> | |
| 2 | − | |
| 3 | − <para>The following chapters document the evolution of the V4L2 API, | |
| 4 | −errata or extensions. They are also intended to help application and | |
| 5 | −driver writers to port or update their code.</para> | |
| 6 | − | |
| 7 | − <section id="diff-v4l"> | |
| 8 | − <title>Differences between V4L and V4L2</title> | |
| 9 | − | |
| 10 | − <para>The Video For Linux API was first introduced in Linux 2.1 to | |
| 11 | −unify and replace various TV and radio device related interfaces, | |
| 12 | −developed independently by driver writers in prior years. Starting | |
| 13 | −with Linux 2.5 the much improved V4L2 API replaces the V4L API. | |
| 14 | −The support for the old V4L calls were removed from Kernel, but the | |
| 15 | −library <xref linkend="libv4l" /> supports the conversion of a V4L | |
| 16 | −API system call into a V4L2 one.</para> | |
| 17 | − | |
| 18 | − <section> | |
| 19 | − <title>Opening and Closing Devices</title> | |
| 20 | − | |
| 21 | − <para>For compatibility reasons the character device file names | |
| 22 | −recommended for V4L2 video capture, overlay, radio and raw | |
| 23 | −vbi capture devices did not change from those used by V4L. They are | |
| 24 | −listed in <xref linkend="devices" /> and below in <xref | |
| 25 | − linkend="v4l-dev" />.</para> | |
2698 more lines aren’t shown here.
This diff is large: its 5506 lines aren’t shown here.
Binary file not shown.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 369 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 346 lines aren’t shown here.
This diff is large: its 197 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 707 lines aren’t shown here.
This diff is large: its 479 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 201 lines aren’t shown here.
This diff is large: its 672 lines aren’t shown here.
Binary file not shown.
Binary file not shown.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 184 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 143 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 131 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 1546 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 256 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 392 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 380 lines aren’t shown here.
Binary file not shown.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 171 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 938 lines aren’t shown here.
This diff is large: its 237 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 148 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 163 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 2004 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 321 lines aren’t shown here.
This diff is large: its 318 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 4041 lines aren’t shown here.
This diff is large: its 615 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 1589 lines aren’t shown here.
This diff is large: its 164 lines aren’t shown here.
This diff is large: its 1153 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 729 lines aren’t shown here.
This diff is large: its 165 lines aren’t shown here.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 167 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 228 lines aren’t shown here.
This diff is large: its 260 lines aren’t shown here.
This diff is large: its 472 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 266 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 317 lines aren’t shown here.
This diff is large: its 202 lines aren’t shown here.
This diff is large: its 390 lines aren’t shown here.
This diff is large: its 206 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 134 lines aren’t shown here.
This diff is large: its 344 lines aren’t shown here.
This diff is large: its 174 lines aren’t shown here.
This diff is large: its 190 lines aren’t shown here.
This diff is large: its 457 lines aren’t shown here.
This diff is large: its 460 lines aren’t shown here.
This diff is large: its 205 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 176 lines aren’t shown here.
This diff is large: its 253 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 315 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 234 lines aren’t shown here.
This diff is large: its 256 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 595 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 203 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 351 lines aren’t shown here.
This diff is large: its 662 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 138 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 119 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 178 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 131 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 510 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 206 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 382 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 654 lines aren’t shown here.
This diff is large: its 455 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 348 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 209 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 596 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 263 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 212 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 416 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 105 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 284 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 192 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 237 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 1813 lines aren’t shown here.
This diff is large: its 581 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 403 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 2895 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 157 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 180 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 802 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 314 lines aren’t shown here.
This diff is large: its 396 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 198 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 572 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 177 lines aren’t shown here.
This diff is large: its 958 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 934 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 627 lines aren’t shown here.
File renamed without changes.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 215 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 571 lines aren’t shown here.
This diff is large: its 84 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 552 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 386 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 506 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 315 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 162 lines aren’t shown here.
This diff is large: its 74 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 343 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 235 lines aren’t shown here.
This diff is large: its 144 lines aren’t shown here.
This diff is large: its 128 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 141 lines aren’t shown here.
This diff is large: its 230 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 649 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 204 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 352 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 203 lines aren’t shown here.
This diff is large: its 232 lines aren’t shown here.
File renamed without changes.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 1503 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 2101 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 279 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 195 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 544 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 142 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 246 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 233 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 253 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 205 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 3 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 1066 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 483 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 210 lines aren’t shown here.
This diff is large: its 160 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 377 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 150 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 352 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 261 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 340 lines aren’t shown here.
This diff is large: its 333 lines aren’t shown here.
This diff is large: its 360 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 304 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 315 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 382 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 200 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 196 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 269 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 211 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 585 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 188 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 189 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 313 lines aren’t shown here.
This diff is large: its 286 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 219 lines aren’t shown here.
This diff is large: its 1190 lines aren’t shown here.
This diff is large: its 702 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 606 lines aren’t shown here.
This diff is large: its 720 lines aren’t shown here.
This diff is large: its 376 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 687 lines aren’t shown here.
This diff is large: its 253 lines aren’t shown here.
This diff is large: its 370 lines aren’t shown here.
This diff is large: its 101 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 387 lines aren’t shown here.
This diff is large: its 481 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 147 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 77 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 78 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 231 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 75 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 164 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 159 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 79 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 209 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 81 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 190 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 266 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 570 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 246 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 121 lines aren’t shown here.
This diff is large: its 136 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 1930 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 236 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 191 lines aren’t shown here.
This diff is large: its 428 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 348 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 644 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 175 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 96 lines aren’t shown here.
This diff is large: its 457 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 57 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 235 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 353 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 103 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 181 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 955 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 264 lines aren’t shown here.
This diff is large: its 237 lines aren’t shown here.
This diff is large: its 514 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 331 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 120 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 168 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 247 lines aren’t shown here.
This diff is large: its 72 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 139 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 386 lines aren’t shown here.
This diff is large: its 1336 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 258 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 420 lines aren’t shown here.
This diff is large: its 68 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 289 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 566 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 154 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 126 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 484 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 826 lines aren’t shown here.
This diff is large: its 61 lines aren’t shown here.
This diff is large: its 313 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 472 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 1092 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 1784 lines aren’t shown here.
This diff is large: its 73 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 94 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 118 lines aren’t shown here.
This diff is large: its 225 lines aren’t shown here.
This diff is large: its 229 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 110 lines aren’t shown here.
This diff is large: its 60 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 69 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 125 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 2 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 92 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 553 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 90 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 757 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 789 lines aren’t shown here.
This diff is large: its 520 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 187 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 104 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 88 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 93 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 390 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 64 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 95 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 43 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 45 lines aren’t shown here.
This diff is large: its 113 lines aren’t shown here.
This diff is large: its 63 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 540 lines aren’t shown here.
This diff is large: its 224 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 49 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 204 lines aren’t shown here.
This diff is large: its 177 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 122 lines aren’t shown here.
This diff is large: its 145 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 445 lines aren’t shown here.
This diff is large: its 337 lines aren’t shown here.
This diff is large: its 390 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 164 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 362 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 208 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 111 lines aren’t shown here.
This diff is large: its 561 lines aren’t shown here.
This diff is large: its 71 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 7 lines aren’t shown here.
This diff is large: its 67 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 156 lines aren’t shown here.
This diff is large: its 316 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 279 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 323 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 130 lines aren’t shown here.
This diff is large: its 179 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 383 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 573 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 308 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 86 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 151 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 337 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 781 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 137 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 108 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 285 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 245 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 185 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 205 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 48 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 596 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 42 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 762 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 622 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 625 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 351 lines aren’t shown here.
This diff is large: its 62 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 620 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 100 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 41 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 21 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 304 lines aren’t shown here.
This diff is large: its 102 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 129 lines aren’t shown here.
This diff is large: its 28 lines aren’t shown here.
This diff is large: its 5 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 217 lines aren’t shown here.
This diff is large: its 520 lines aren’t shown here.
This diff is large: its 55 lines aren’t shown here.
This diff is large: its 692 lines aren’t shown here.
This diff is large: its 242 lines aren’t shown here.
This diff is large: its 299 lines aren’t shown here.
This diff is large: its 173 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 66 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 56 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 26 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 4 lines aren’t shown here.
This diff is large: its 115 lines aren’t shown here.
This diff is large: its 516 lines aren’t shown here.
This diff is large: its 266 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 58 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is large: its 468 lines aren’t shown here.
This diff is large: its 1414 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 27 lines aren’t shown here.
This diff is large: its 246 lines aren’t shown here.
This diff is large: its 798 lines aren’t shown here.
This diff is large: its 327 lines aren’t shown here.
This diff is large: its 239 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 999 lines aren’t shown here.
This diff is large: its 47 lines aren’t shown here.
This diff is large: its 106 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 360 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 117 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 255 lines aren’t shown here.
This diff is large: its 321 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 140 lines aren’t shown here.
This diff is large: its 52 lines aren’t shown here.
This diff is large: its 274 lines aren’t shown here.
This diff is large: its 442 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 271 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 59 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 32 lines aren’t shown here.
This diff is large: its 65 lines aren’t shown here.
This diff is large: its 80 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 38 lines aren’t shown here.
This diff is large: its 33 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 207 lines aren’t shown here.
This diff is large: its 85 lines aren’t shown here.
This diff is large: its 76 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 40 lines aren’t shown here.
This diff is large: its 97 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 14 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 53 lines aren’t shown here.
This diff is large: its 20 lines aren’t shown here.
This diff is large: its 18 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 83 lines aren’t shown here.
This diff is large: its 9 lines aren’t shown here.
This diff is large: its 123 lines aren’t shown here.
This diff is large: its 98 lines aren’t shown here.
This diff is large: its 112 lines aren’t shown here.
This diff is large: its 17 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 91 lines aren’t shown here.
This diff is large: its 116 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 31 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 23 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 132 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 12 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 37 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 11 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 25 lines aren’t shown here.
This diff is large: its 24 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 87 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 8 lines aren’t shown here.
This diff is large: its 16 lines aren’t shown here.
This diff is large: its 29 lines aren’t shown here.
This diff is large: its 10 lines aren’t shown here.
This diff is large: its 54 lines aren’t shown here.
This diff is large: its 6 lines aren’t shown here.
This diff is large: its 35 lines aren’t shown here.
This diff is large: its 146 lines aren’t shown here.
This diff is large: its 70 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 50 lines aren’t shown here.
This diff is large: its 161 lines aren’t shown here.
This diff is large: its 1549 lines aren’t shown here.
This diff is large: its 1588 lines aren’t shown here.
This diff is large: its 2550 lines aren’t shown here.
This diff is large: its 1464 lines aren’t shown here.
This diff is large: its 2365 lines aren’t shown here.
This diff is large: its 13 lines aren’t shown here.
This diff is large: its 1001 lines aren’t shown here.
This diff is large: its 46 lines aren’t shown here.
This diff is large: its 82 lines aren’t shown here.
This diff is large: its 152 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 872 lines aren’t shown here.
This diff is large: its 133 lines aren’t shown here.
This diff is large: its 89 lines aren’t shown here.
This diff is large: its 127 lines aren’t shown here.
This diff is large: its 39 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 34 lines aren’t shown here.
This diff is large: its 456 lines aren’t shown here.
This diff is large: its 15 lines aren’t shown here.
This diff is large: its 861 lines aren’t shown here.
This diff is large: its 2352 lines aren’t shown here.
This diff is large: its 44 lines aren’t shown here.
This diff is large: its 22 lines aren’t shown here.
This diff is large: its 504 lines aren’t shown here.
This diff is large: its 114 lines aren’t shown here.
This diff is large: its 182 lines aren’t shown here.
This diff is large: its 36 lines aren’t shown here.
This diff is large: its 149 lines aren’t shown here.
This diff is large: its 153 lines aren’t shown here.
This diff is large: its 107 lines aren’t shown here.
This diff is large: its 99 lines aren’t shown here.
This diff is large: its 19 lines aren’t shown here.
This diff is large: its 202 lines aren’t shown here.
This diff is large: its 51 lines aren’t shown here.
This diff is large: its 30 lines aren’t shown here.
This diff is larger than a page shows: the files after these aren’t listed. Clone the repository to see all of it.