summaryrefslogtreecommitdiff
path: root/dvb-spec
diff options
context:
space:
mode:
Diffstat (limited to 'dvb-spec')
-rw-r--r--dvb-spec/dvbapi/.cvsignore14
-rw-r--r--dvb-spec/dvbapi/LICENSE355
-rw-r--r--dvb-spec/dvbapi/Makefile166
-rw-r--r--dvb-spec/dvbapi/README (renamed from dvb-spec/sgml/README)2
-rw-r--r--dvb-spec/dvbapi/audio.tex454
-rw-r--r--dvb-spec/dvbapi/bibsection.sty29
-rw-r--r--dvb-spec/dvbapi/ca.sgml (renamed from dvb-spec/sgml/ca.sgml)0
-rw-r--r--dvb-spec/dvbapi/ca.tex129
-rw-r--r--dvb-spec/dvbapi/cimlogo.psi122
-rw-r--r--dvb-spec/dvbapi/custom.dsl (renamed from dvb-spec/sgml/custom.dsl)0
-rw-r--r--dvb-spec/dvbapi/custom.xsl (renamed from dvb-spec/sgml/custom.xsl)0
-rw-r--r--dvb-spec/dvbapi/demux.tex423
-rw-r--r--dvb-spec/dvbapi/devices.tex12
-rw-r--r--dvb-spec/dvbapi/dvbapi.sgml (renamed from dvb-spec/sgml/dvbapi.sgml)8
-rw-r--r--dvb-spec/dvbapi/dvbapi.tex170
-rw-r--r--dvb-spec/dvbapi/dvbstb.fig59
-rw-r--r--dvb-spec/dvbapi/examples.tex370
-rw-r--r--dvb-spec/dvbapi/fdl.tex367
-rwxr-xr-xdvb-spec/dvbapi/fig2pstex6
-rw-r--r--dvb-spec/dvbapi/frontend.tex674
-rwxr-xr-xdvb-spec/dvbapi/getbb12
-rw-r--r--dvb-spec/dvbapi/intro.tex148
-rw-r--r--dvb-spec/dvbapi/kdapi.tex1014
-rw-r--r--dvb-spec/dvbapi/net.tex19
-rw-r--r--dvb-spec/dvbapi/title.tex28
-rw-r--r--dvb-spec/dvbapi/video.tex697
-rw-r--r--dvb-spec/sgml/Makefile140
-rw-r--r--dvb-spec/sgml/audio.sgml1473
-rw-r--r--dvb-spec/sgml/demux.sgml973
-rw-r--r--dvb-spec/sgml/dvbstb.pdfbin1881 -> 0 bytes
-rw-r--r--dvb-spec/sgml/dvbstb.pngbin22655 -> 0 bytes
-rw-r--r--dvb-spec/sgml/examples.sgml365
-rw-r--r--dvb-spec/sgml/fdl.sgml374
-rw-r--r--dvb-spec/sgml/frontend.sgml1765
-rw-r--r--dvb-spec/sgml/intro.sgml191
-rw-r--r--dvb-spec/sgml/kdapi.sgml2309
-rw-r--r--dvb-spec/sgml/net.sgml12
-rw-r--r--dvb-spec/sgml/video.sgml1971
38 files changed, 148 insertions, 14703 deletions
diff --git a/dvb-spec/dvbapi/.cvsignore b/dvb-spec/dvbapi/.cvsignore
deleted file mode 100644
index 89f9afcb7..000000000
--- a/dvb-spec/dvbapi/.cvsignore
+++ /dev/null
@@ -1,14 +0,0 @@
-dvbapi.ps
-dvbstb.ps
-dvbstb.pst
-dvbapi.bbl
-dvbapi.aux
-dvbapi.blg
-dvbapi.dvi
-dvbapi.log
-dvbapi.pdf
-dvbapi.out
-dvbapi.toc
-dvbapi.ind
-dvbapi.ilg
-dvbapi
diff --git a/dvb-spec/dvbapi/LICENSE b/dvb-spec/dvbapi/LICENSE
deleted file mode 100644
index b42936beb..000000000
--- a/dvb-spec/dvbapi/LICENSE
+++ /dev/null
@@ -1,355 +0,0 @@
- GNU Free Documentation License
- Version 1.1, March 2000
-
- Copyright (C) 2000 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-0. PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-written document "free" in the sense of freedom: to assure everyone
-the effective freedom to copy and redistribute it, with or without
-modifying it, either commercially or noncommercially. Secondarily,
-this License preserves for the author and publisher a way to get
-credit for their work, while not being considered responsible for
-modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-1. APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work that contains a
-notice placed by the copyright holder saying it can be distributed
-under the terms of this License. The "Document", below, refers to any
-such manual or work. Any member of the public is a licensee, and is
-addressed as "you".
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A "Secondary Section" is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject. (For example, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License.
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License.
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, whose contents can be viewed and edited directly and
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup has been designed to thwart or discourage
-subsequent modification by readers is not Transparent. A copy that is
-not "Transparent" is called "Opaque".
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML designed for human modification. Opaque formats include
-PostScript, PDF, proprietary formats that can be read and edited only
-by proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML produced by some word processors for output
-purposes only.
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-
-2. VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-3. COPYING IN QUANTITY
-
-If you publish printed copies of the Document numbering more than 100,
-and the Document's license notice requires Cover Texts, you must enclose
-the copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a publicly-accessible computer-network location containing a complete
-Transparent copy of the Document, free of added material, which the
-general network-using public has access to download anonymously at no
-charge using public-standard network protocols. If you use the latter
-option, you must take reasonably prudent steps, when you begin
-distribution of Opaque copies in quantity, to ensure that this
-Transparent copy will remain thus accessible at the stated location
-until at least one year after the last time you distribute an Opaque
-copy (directly or through your agents or retailers) of that edition to
-the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-4. MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-A. Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-B. List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has less than five).
-C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-D. Preserve all the copyright notices of the Document.
-E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-F. Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-G. Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-H. Include an unaltered copy of this License.
-I. Preserve the section entitled "History", and its title, and add to
- it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-J. Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-K. In any section entitled "Acknowledgements" or "Dedications",
- preserve the section's title, and preserve in the section all the
- substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-M. Delete any section entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-N. Do not retitle any existing section as "Endorsements"
- or to conflict in title with any Invariant Section.
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-5. COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections entitled "History"
-in the various original documents, forming one section entitled
-"History"; likewise combine any sections entitled "Acknowledgements",
-and any sections entitled "Dedications". You must delete all sections
-entitled "Endorsements."
-
-
-6. COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-7. AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, does not as a whole count as a Modified Version
-of the Document, provided no compilation copyright is claimed for the
-compilation. Such a compilation is called an "aggregate", and this
-License does not apply to the other self-contained works thus compiled
-with the Document, on account of their being thus compiled, if they
-are not themselves derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one quarter
-of the entire aggregate, the Document's Cover Texts may be placed on
-covers that surround only the Document within the aggregate.
-Otherwise they must appear on covers around the whole aggregate.
-
-
-8. TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License provided that you also include the
-original English version of this License. In case of a disagreement
-between the translation and the original English version of this
-License, the original English version will prevail.
-
-
-9. TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-10. FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-
-ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
- Copyright (c) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.1
- or any later version published by the Free Software Foundation;
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-
-If you have no Invariant Sections, write "with no Invariant Sections"
-instead of saying which ones are invariant. If you have no
-Front-Cover Texts, write "no Front-Cover Texts" instead of
-"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
diff --git a/dvb-spec/dvbapi/Makefile b/dvb-spec/dvbapi/Makefile
index e741df6da..0ab91ee69 100644
--- a/dvb-spec/dvbapi/Makefile
+++ b/dvb-spec/dvbapi/Makefile
@@ -1,31 +1,153 @@
-all: dvbapi.ps dvbapi.pdf
+SHELL=/bin/bash
-TEXS= dvbapi.tex devices.tex video.tex audio.tex ca.tex net.tex frontend.tex \
- demux.tex kdapi.tex examples.tex intro.tex title.tex dvbstb.ps
+SGMLS = \
+ dvbapi.sgml \
+ intro.xml \
+ frontend.xml \
+ isdbt.xml \
+ demux.xml \
+ video.xml \
+ audio.xml \
+ ca.xml \
+ net.xml \
+ kdapi.xml \
+ examples.xml \
+ fdl-appendix.xml \
+ entities.xml \
-dvbapi.pdf: dvbapi.dvi
- dvipdf $< $@
+PDFPICS = \
+ dvbstb.pdf \
-dvbapi.ps: dvbapi.dvi
- dvips -f $< -o $@
+GIFPICS = \
+ dvbstb.png \
-dvbapi.dvi: dvbapi.bbl $(TEXS)
- -latex dvbapi
- -latex dvbapi
+# Some Jade warnings for authors.
+WARN =
+#WARN = -w all -w duplicate -w net
-dvbapi.bbl: $(TEXS)
- -latex dvbapi
- -bibtex dvbapi
- -makeindex dvbapi
+# Stylesheet customization.
+ # docbook/db2 syntax
+CUSTOM_HTML = --dsl custom.dsl\#html
+CUSTOM_PRINT = --dsl custom.dsl\#print
+ # xmlto syntax
+CUSTOM_HTML_XMLTO = -m custom.xsl
+CUSTOM_PRINT_XMLTO = -m custom.xsl
-html: dvbapi.dvi
- latex2html -address "LinuxTV DVB API" -long_titles 4 -split 3 dvbapi.tex
+all: html-single
-%.ps: %.fig
- ./fig2pstex $<
+html: html-build.stamp
-clean:
- rm -f dvbapi.dvi
- rm -f *.aux *.bbl *.blg *.idx *.ilg *.ind *.log *.out *.toc
- rm -f *.pdf *.pst *.ps
+html-single: html-single-build.stamp
+
+pdf: pdf-build.stamp
+
+man: man-build.stamp
+
+man_install: man-build.stamp
+ install -d /usr/local/man/man2
+ install -b man/* /usr/local/man/man2
+
+.PHONY: links
+
+$(SGMLS): links
+$(PDFPICS): links
+$(GIFPICS): links
+
+links::
+ ln -sf ../../linux/Documentation/DocBook/dvb/* .
+ ln -sf ../../linux/Documentation/DocBook/v4l/fdl-appendix.xml .
+
+entities.xml: Makefile $(SGMLS)
+ echo "<!-- Generated file! Do not edit. -->" >$@
+ echo -e "\n<!-- Subsections -->" >>$@
+ for file in $(SGMLS) ; do \
+ entity=`echo "$$file" | sed 's/.xml//;s/\./-/g'` ; \
+ if ! echo "$$file" | \
+ grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
+ echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
+ fi ; \
+ done
+
+# Jade can auto-generate a list-of-tables, which includes all structs,
+# but we only want data types, all types, and sorted please.
+indices.xml: Makefile $(SGMLS)
+ echo "<!-- Generated file! Do not edit. -->" >$@
+ echo -e "\n<index><title>List of Types</title>" >>$@
+ for ident in $(TYPES) ; do \
+ id=`echo $$ident | tr _ -` ; \
+ echo "<indexentry><primaryie><link" \
+ "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
+ done
+ for ident in $(ENUMS) ; do \
+ echo "<indexentry><primaryie>enum&nbsp;<link" \
+ "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
+ done
+ for ident in $(STRUCTS) ; do \
+ id=`echo $$ident | tr _ -` ; \
+ echo "<indexentry><primaryie>struct&nbsp;<link" \
+ "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
+ done
+ echo "</index>" >>$@
+
+# HTML version.
+html-build.stamp: Makefile $(SGMLS) $(GIFPICS)
rm -rf dvbapi
+ if which xmlto >/dev/null ; then \
+ xmlto xhtml $(WARN) $(CUSTOM_HTML_XMLTO) -o dvbapi dvbapi.sgml ; \
+ elif which docbook2html >/dev/null ; then \
+ export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
+ docbook2html $(WARN) $$DCL $(CUSTOM_HTML) --output dvbapi dvbapi.sgml ; \
+ else \
+ export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
+ db2html $(WARN) $$DCL $(CUSTOM_HTML) --output dvbapi dvbapi.sgml ; \
+ fi
+ cp $(GIFPICS) dvbapi/
+ cd dvbapi ; \
+ test -e index.html || ln -s book1.htm index.html ; \
+ test -e capture-example.html || \
+ ln -s `grep -l getopt_long *.htm` capture-example.html
+ chmod a+rX -R dvbapi
+ touch html-build.stamp
+
+# For online version. When you have a dial-up connection a single file
+# is more convenient than clicking through dozens of pages.
+html-single-build.stamp: Makefile $(SGMLS) $(GIFPICS)
+ rm -rf dvbapi-single
+ if which xmlto >/dev/null ; then \
+ xmlto html-nochunks $(WARN) $(CUSTOM_HTML_XMLTO) -o dvbapi-single dvbapi.sgml ; \
+ elif which docbook2html >/dev/null ; then \
+ export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
+ docbook2html $$DCL $(WARN) $(CUSTOM_HTML) --nochunks \
+ --output dvbapi-single dvbapi.sgml ; \
+ else \
+ export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
+ db2html $$DCL $(WARN) $(CUSTOM_HTML) --nochunks \
+ --output dvbapi-single dvbapi.sgml ; \
+ fi
+ cp $(GIFPICS) dvbapi-single/
+ chmod a+rX -R dvbapi-single
+ touch html-single-build.stamp
+
+# For printing.
+pdf-build.stamp: Makefile $(SGMLS) $(PDFPICS)
+ if which db2pdf >/dev/null ; then \
+ export DCL="--dcl `find /usr/share/sgml -name xml.dcl|head -1`"; \
+ db2pdf $$DCL $(WARN) $(CUSTOM_PRINT) dvbapi.sgml ; \
+ elif which xmlto >/dev/null ; then \
+ xmlto pdf $(WARN) $(CUSTOM_HTML_XMLTO) -o dvbapi-single dvbapi.sgml ; \
+ else \
+ export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
+ docbook2pdf $$DCL $(WARN) $(CUSTOM_PRINT) dvbapi.sgml ; \
+ fi
+ touch pdf-build.stamp
+
+
+# For man
+man-build.stamp: Makefile $(SGMLS) $(PDFPICS)
+ xmlto man $(WARN) $(CUSTOM_HTML_XMLTO) -o man dvbapi.sgml
+
+distclean clean:
+ rm -f *.stamp
+ rm -f indices.xml entities.xml
+ find . -type l -exec rm '{}' \;
+
diff --git a/dvb-spec/sgml/README b/dvb-spec/dvbapi/README
index 6f62d3ae2..7d908c8c8 100644
--- a/dvb-spec/sgml/README
+++ b/dvb-spec/dvbapi/README
@@ -6,6 +6,6 @@ It is still a work undergoing. Contributions are welcome.
CURRENT STATUS:
-All chapters were converted. The resulting pdf and html are close to the
+All chapters were converted. The resulting pdf and html are close to the
original LaTex book. Yet, it lacks some efforts to improve
the output layout and it lacks a topic index.
diff --git a/dvb-spec/dvbapi/audio.tex b/dvb-spec/dvbapi/audio.tex
deleted file mode 100644
index 05c23e56f..000000000
--- a/dvb-spec/dvbapi/audio.tex
+++ /dev/null
@@ -1,454 +0,0 @@
-\devsec{DVB Audio Device}
-
-The DVB audio device controls the MPEG2 audio decoder of the DVB hardware.
-It can be accessed through \texttt{/dev/dvb/adapter0/audio0}.
-Data types and and ioctl definitions can be accessed by including
-\texttt{linux/dvb/video.h} in your application.
-
-Please note that some DVB cards don't have their own
-MPEG decoder, which results in the omission of the audio and video
-device.
-
-
-\devsubsec{Audio Data Types}
-
-This section describes the structures, data types and defines used when
-talking to the audio device.
-
-\devsubsubsec{audio\_stream\_source\_t}
-\label{audiostreamsource}
-The audio stream source is set through the AUDIO\_SELECT\_SOURCE
-call and can take the following values, depending on whether we are
-replaying from an internal (demux) or external (user write) source.
-\begin{verbatim}
-typedef enum {
- AUDIO_SOURCE_DEMUX,
- AUDIO_SOURCE_MEMORY
-} audio_stream_source_t;
-\end{verbatim}
-AUDIO\_SOURCE\_DEMUX selects the demultiplexer (fed
-either by the frontend or the DVR device) as the source of
-the video stream.
-If AUDIO\_SOURCE\_MEMORY is selected the stream
-comes from the application through the \texttt{write()}
-system call.
-
-\devsubsubsec{audio\_play\_state\_t}
-The following values can be returned by the AUDIO\_GET\_STATUS call
-representing the state of audio playback.
-\label{audioplaystate}
-\begin{verbatim}
-typedef enum {
- AUDIO_STOPPED,
- AUDIO_PLAYING,
- AUDIO_PAUSED
-} audio_play_state_t;
-\end{verbatim}
-
-\devsubsubsec{audio\_channel\_select\_t}
-\label{audiochannelselect}
-The audio channel selected via AUDIO\_CHANNEL\_SELECT is determined by
-the following values.
-\begin{verbatim}
-typedef enum {
- AUDIO_STEREO,
- AUDIO_MONO_LEFT,
- AUDIO_MONO_RIGHT,
-} audio_channel_select_t;
-\end{verbatim}
-
-\devsubsubsec{struct audio\_status}
-\label{audiostatus}
-The AUDIO\_GET\_STATUS call returns the following structure informing
-about various states of the playback operation.
-\begin{verbatim}
-typedef struct audio_status {
- boolean AV_sync_state;
- boolean mute_state;
- audio_play_state_t play_state;
- audio_stream_source_t stream_source;
- audio_channel_select_t channel_select;
- boolean bypass_mode;
-} audio_status_t;
-\end{verbatim}
-
-\devsubsubsec{struct audio\_mixer}
-\label{audiomixer}
-The following structure is used by the AUDIO\_SET\_MIXER call to set
-the audio volume.
-\begin{verbatim}
-typedef struct audio_mixer {
- unsigned int volume_left;
- unsigned int volume_right;
-} audio_mixer_t;
-\end{verbatim}
-
-\devsubsubsec{audio encodings}
-\label{audiotypes}
-A call to AUDIO\_GET\_CAPABILITIES returns an unsigned integer with
-the following bits set according to the hardwares capabilities.
-\begin{verbatim}
-#define AUDIO_CAP_DTS 1
-#define AUDIO_CAP_LPCM 2
-#define AUDIO_CAP_MP1 4
-#define AUDIO_CAP_MP2 8
-#define AUDIO_CAP_MP3 16
-#define AUDIO_CAP_AAC 32
-#define AUDIO_CAP_OGG 64
-#define AUDIO_CAP_SDDS 128
-#define AUDIO_CAP_AC3 256
-\end{verbatim}
-
-
-\devsubsubsec{struct audio\_karaoke}
-\label{audiokaraoke}
-The ioctl AUDIO\_SET\_KARAOKE uses the following format:
-\begin{verbatim}
-typedef
-struct audio_karaoke{
- int vocal1;
- int vocal2;
- int melody;
-} audio_karaoke_t;
-\end{verbatim}
-
-If Vocal1 or Vocal2 are non-zero, they get mixed
-into left and right t at 70\% each.
-If both, Vocal1 and Vocal2 are non-zero, Vocal1 gets
-mixed into the left channel and
-Vocal2 into the right channel at 100\% each.
-Ff Melody is non-zero, the melody channel gets mixed
-into left and right.
-
-\devsubsubsec{audio attributes}
-\label{aattrib}
-The following attributes can be set by a call to AUDIO\_SET\_ATTRIBUTES:
-\begin{verbatim}
-typedef uint16_t audio_attributes_t;
-/* bits: descr. */
-/* 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, */
-/* 12 multichannel extension */
-/* 11-10 audio type (0=not spec, 1=language included) */
-/* 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) */
-/* 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, */
-/* 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */
-/* 2- 0 number of audio channels (n+1 channels) */
-\end{verbatim}
-
-
-\clearpage
-
-\devsubsec{Audio Function Calls}
-
-\function{open()}{
- int open(const char *deviceName, int flags);}{
- This system call opens a named audio device (e.g. /dev/dvb/adapter0/audio0) for subsequent
- use. When an open() call has succeeded, the device will be ready for use.
- The significance of blocking or non-blocking mode is described in the
- documentation for functions where there is a difference. It does not affect
- the semantics of the open() call itself. A device opened in blocking mode can
- later be put into non-blocking mode (and vice versa) using the F\_SETFL command
- of the fcntl system call. This is a standard system call, documented in the
- Linux manual page for fcntl.
- Only one user can open the Audio Device in O\_RDWR mode. All other attempts to
- open the device in this mode will fail, and an error code will be returned.
- If the Audio Device is opened in O\_RDONLY mode, the only ioctl call that can
- be used is AUDIO\_GET\_STATUS. All other call will return with an error code.
- }{
- const char *deviceName & Name of specific audio device.\\
- int flags & A bit-wise OR of the following flags:\\
- & \hspace{1em} O\_RDONLY read-only access\\
- & \hspace{1em} O\_RDWR read/write access\\
- & \hspace{1em} O\_NONBLOCK open in non-blocking mode \\
- & \hspace{1em} (blocking mode is the default)\\
- }{
- ENODEV & Device driver not loaded/available.\\
- EINTERNAL & Internal error.\\
- EBUSY & Device or resource busy.\\
- EINVAL & Invalid argument.\\
-}
-
-\function{close()}{
- int close(int fd);}{
- This system call closes a previously opened audio device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- }{
- EBADF & fd is not a valid open file descriptor.\\
-}
-
-\function{write()}{
- size\_t write(int fd, const void *buf, size\_t count);}{
- This system call can only be used if AUDIO\_SOURCE\_MEMORY is selected
- in the ioctl call AUDIO\_SELECT\_SOURCE.
- The data provided shall be in PES format.
- If O\_NONBLOCK is not specified the function will block until buffer space is
- available. The amount of data to be transferred is implied by count.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- void *buf & Pointer to the buffer containing the PES data.\\
- size\_t count& Size of buf.\\
- }{
- EPERM& Mode AUDIO\_SOURCE\_MEMORY not selected.\\
- ENOMEM& Attempted to write more data than the internal buffer can hold.\\
- EBADF& fd is not a valid open file descriptor.\\
-}
-
-\ifunction{AUDIO\_STOP}{
- int ioctl(int fd, int request = AUDIO\_STOP);}{
- This ioctl call asks the Audio Device to stop playing the current stream.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request& Equals AUDIO\_STOP for this command.
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error.
-}
-
-\ifunction{AUDIO\_PLAY}{
- int ioctl(int fd, int request = AUDIO\_PLAY);}{
- This ioctl call asks the Audio Device to start playing an audio stream
- from the selected source.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request& Equals AUDIO\_PLAY for this command.
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error.
-}
-
-\ifunction{AUDIO\_PAUSE}{
- int ioctl(int fd, int request = AUDIO\_PAUSE);}{
- This ioctl call suspends the audio stream being played.
- Decoding and playing are paused.
- It is then possible to restart again decoding and playing process of the
- audio stream using AUDIO\_CONTINUE command.\\
- If AUDIO\_SOURCE\_MEMORY is selected in the ioctl call
- AUDIO\_SELECT\_SOURCE, the DVB-subsystem will not decode (consume)
- any more data until the ioctl call
- AUDIO\_CONTINUE or AUDIO\_PLAY is performed.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request& Equals AUDIO\_PAUSE for this command.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.
-}
-
-\ifunction{AUDIO\_SELECT\_SOURCE}{
- int ioctl(int fd, int request = AUDIO\_SELECT\_SOURCE,
- audio\_stream\_source\_t source);}{
- This ioctl call informs the audio device which source shall be used for the
- input data. The possible sources are demux or memory.
- If AUDIO\_SOURCE\_MEMORY
- is selected, the data is fed to the Audio Device through the write command.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SELECT\_SOURCE for this command.\\
- audio\_stream\_source\_t source& Indicates the source that shall be used for the
- Audio stream.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Illegal input parameter.
-}
-
-\ifunction{AUDIO\_SET\_MUTE}{
- int ioctl(int fd, int request = AUDIO\_SET\_MUTE, boolean state);}{
- This ioctl call asks the audio device to mute the stream that is
- currently being played.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_MUTE for this command.\\
- boolean state & Indicates if audio device shall mute or not.\\
- &TRUE Audio Mute\\
- &FALSE Audio Un-mute\\
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Illegal input parameter.
-}
-
-\ifunction{AUDIO\_SET\_AV\_SYNC}{
- int ioctl(int fd, int request = AUDIO\_SET\_AV\_SYNC, boolean state);}{
- This ioctl call asks the Audio Device to turn ON or OFF A/V synchronization.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_AV\_SYNC for this command.\\
- boolean state& Tells the DVB subsystem if A/V
- synchronization shall be ON or OFF.\\
- & TRUE AV-sync ON \\
- & FALSE AV-sync OFF\\
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Illegal input parameter.
-}
-
-\ifunction{AUDIO\_SET\_BYPASS\_MODE}{
- int ioctl(int fd, int request = AUDIO\_SET\_BYPASS\_MODE, boolean mode);}{
- This ioctl call asks the Audio Device to bypass the Audio decoder and forward
- the stream without decoding. This mode shall be used if streams that can't be
- handled by the DVB system shall be decoded.
- Dolby DigitalTM streams are automatically forwarded by the DVB
- subsystem if the hardware can handle it.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_BYPASS\_MODE for this command.\\
- boolean mode& Enables or disables the decoding of the current
- Audio stream in the DVB subsystem.\\
- &TRUE Bypass is disabled\\
- &FALSE Bypass is enabled\\
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Illegal input parameter.
-}
-
-\ifunction{AUDIO\_CHANNEL\_SELECT}{
- int ioctl(int fd, int request = AUDIO\_CHANNEL\_SELECT,
- audio\_channel\_select\_t);}{
- This ioctl call asks the Audio Device to select the requested channel
- if possible.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_CHANNEL\_SELECT for this command.\\
- audio\_channel\_select\_t ch &
- Select the output format of the audio (mono left/right, stereo).
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Illegal input parameter ch.
-}
-
-\ifunction{AUDIO\_GET\_STATUS}{
- int ioctl(int fd, int request = AUDIO\_GET\_STATUS,
- struct audio\_status *status);}{
- This ioctl call asks the Audio Device to return the current state
- of the Audio Device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_GET\_STATUS for this command.\\
- struct audio\_status *status & Returns the current state of Audio Device.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EFAULT & status points to invalid address.
-}
-
-\ifunction{AUDIO\_GET\_CAPABILITIES}{
- int ioctl(int fd, int request = AUDIO\_GET\_CAPABILITIES,
- unsigned int *cap);}{
- This ioctl call asks the Audio Device to tell us about the
- decoding capabilities of the audio hardware.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_GET\_CAPABILITIES for this command.\\
- unsigned int *cap & Returns a bit array of supported sound formats.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EFAULT & cap points to an invalid address.
-}
-
-\ifunction{AUDIO\_CLEAR\_BUFFER}{
- int ioctl(int fd, int request = AUDIO\_CLEAR\_BUFFER);}{
- This ioctl call asks the Audio Device to clear all software
- and hardware buffers of the audio decoder device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_CLEAR\_BUFFER for this command.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.
-}
-
-\ifunction{AUDIO\_SET\_ID}{
- int ioctl(int fd, int request = AUDIO\_SET\_ID, int id);}{
- This ioctl selects which sub-stream is to be decoded if a program or
- system stream is sent to the video device. If no audio stream type is set
- the id has to be in [0xC0,0xDF] for MPEG sound, in [0x80,0x87] for
- AC3 and in [0xA0,0xA7] for LPCM. More specifications may follow
- for other stream types. If the stream type is set the id just
- specifies the substream id of the audio stream and only the first 5
- bits are recognized.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_ID for this command.\\
- int id& audio sub-stream id
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Invalid sub-stream id.
-}
-
-\ifunction{AUDIO\_SET\_MIXER}{
- int ioctl(int fd, int request = AUDIO\_SET\_MIXER, audio\_mixer\_t *mix);}{
- This ioctl lets you adjust the mixer settings of the audio decoder.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_ID for this command.\\
- audio\_mixer\_t *mix& mixer settings.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EFAULT & mix points to an invalid address.
-}
-
-\ifunction{AUDIO\_SET\_STREAMTYPE}{
- int ioctl(fd, int request = AUDIO\_SET\_STREAMTYPE, int type);}{
- This ioctl tells the driver which kind of audio stream to expect.
- This is useful if the stream offers several audio sub-streams
- like LPCM and AC3.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_STREAMTYPE for this command.\\
- int type & stream type\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& type is not a valid or supported stream type.\\
-}
-
-
-\ifunction{AUDIO\_SET\_EXT\_ID}{
- int ioctl(fd, int request = AUDIO\_SET\_EXT\_ID, int id);}{
- This ioctl can be used to set the extension id for MPEG streams in
- DVD playback. Only the first 3 bits are recognized.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_EXT\_ID for this command.\\
- int id & audio sub\_stream\_id\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& id is not a valid id.\\
-}
-
-\ifunction{AUDIO\_SET\_ATTRIBUTES}{
- int ioctl(fd, int request = AUDIO\_SET\_ATTRIBUTES, audio\_attributes\_t attr );}{
- This ioctl is intended for DVD playback and allows you to set
- certain information about the audio stream.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_ATTRIBUTES for this command.\\
- audio\_attributes\_t attr & audio attributes according to section \ref{aattrib}\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& attr is not a valid or supported attribute setting.\\
-}
-
-\ifunction{AUDIO\_SET\_KARAOKE}{
- int ioctl(fd, int request = AUDIO\_SET\_STREAMTYPE, audio\_karaoke\_t *karaoke);}{
- This ioctl allows one to set the mixer settings for a karaoke DVD.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals AUDIO\_SET\_STREAMTYPE for this command.\\
- audio\_karaoke\_t *karaoke & karaoke settings according to section \ref{audiokaraoke}.\\
- }{
- EBADF & fd is not a valid open file descriptor \\
- EINVAL& karaoke is not a valid or supported karaoke setting.\\
-}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/bibsection.sty b/dvb-spec/dvbapi/bibsection.sty
deleted file mode 100644
index 7f9eedc6a..000000000
--- a/dvb-spec/dvbapi/bibsection.sty
+++ /dev/null
@@ -1,29 +0,0 @@
-\def\thebibliography#1{\chapter*{\bibname\@mkboth
- {\uppercase{\bibname}}{\uppercase{\bibname}}}
- \setcounter{chapter}{0}
- \setcounter{section}{0}
- \def\thechapter{Bib}
- \def\thesection{\Alph{section}}
- \edef\biblab{#1}
- \addcontentsline{toc}{chapter}{\bibname}
- }
-
-\def\bibtitle#1#2{\expandafter\def\csname bibtitle#1\endcsname{
- \bibsection{#2}} }
-
-\def\bibsection#1{\section{#1}
- \begin{list}
- {\@biblabel{\arabic{enumiv}}}{\settowidth\labelwidth{\@biblabel{\biblab}}%
- \leftmargin\labelwidth
- \advance\leftmargin\labelsep
- \usecounter{enumiv}%
- \let\p@enumiv\@empty
- \def\theenumiv{\arabic{enumiv}}}%
- \def\newblock{\hskip .11em plus.33em minus.07em}%
- \sloppy\clubpenalty4000\widowpenalty4000
- \sfcode`\.=\@m}
-
-\def\endbibsection{\end{list}}
-
-\def\endthebibliography{\endbibsection}
-
diff --git a/dvb-spec/sgml/ca.sgml b/dvb-spec/dvbapi/ca.sgml
index b1f1d2fad..b1f1d2fad 100644
--- a/dvb-spec/sgml/ca.sgml
+++ b/dvb-spec/dvbapi/ca.sgml
diff --git a/dvb-spec/dvbapi/ca.tex b/dvb-spec/dvbapi/ca.tex
deleted file mode 100644
index fe76da454..000000000
--- a/dvb-spec/dvbapi/ca.tex
+++ /dev/null
@@ -1,129 +0,0 @@
-\devsec{DVB CA Device}
-
-The DVB CA device controls the conditional access hardware.
-It can be accessed through \texttt{/dev/dvb/adapter0/ca0}.
-Data types and and ioctl definitions can be accessed by including
-\texttt{linux/dvb/ca.h} in your application.
-
-
-\devsubsec{CA Data Types}
-
-\devsubsubsec{ca\_slot\_info\_t}
-\label{caslotinfo}
-
-\begin{verbatim}
-/* slot interface types and info */
-
-typedef struct ca_slot_info_s {
- int num; /* slot number */
-
- int type; /* CA interface this slot supports */
-#define CA_CI 1 /* CI high level interface */
-#define CA_CI_LINK 2 /* CI link layer level interface */
-#define CA_CI_PHYS 4 /* CI physical layer level interface */
-#define CA_SC 128 /* simple smart card interface */
-
- unsigned int flags;
-#define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */
-#define CA_CI_MODULE_READY 2
-} ca_slot_info_t;
-\end{verbatim}
-
-\devsubsubsec{ca\_descr\_info\_t}
-\label{cadescrinfo}
-
-\begin{verbatim}
-typedef struct ca_descr_info_s {
- unsigned int num; /* number of available descramblers (keys) */
- unsigned int type; /* type of supported scrambling system */
-#define CA_ECD 1
-#define CA_NDS 2
-#define CA_DSS 4
-} ca_descr_info_t;
-\end{verbatim}
-
-\devsubsubsec{ca\_cap\_t}
-\label{cacap}
-
-\begin{verbatim}
-typedef struct ca_cap_s {
- unsigned int slot_num; /* total number of CA card and module slots */
- unsigned int slot_type; /* OR of all supported types */
- unsigned int descr_num; /* total number of descrambler slots (keys) */
- unsigned int descr_type;/* OR of all supported types */
-} ca_cap_t;
-\end{verbatim}
-
-
-\devsubsubsec{ca\_msg\_t}
-\label{camsg}
-
-\begin{verbatim}
-/* a message to/from a CI-CAM */
-typedef struct ca_msg_s {
- unsigned int index;
- unsigned int type;
- unsigned int length;
- unsigned char msg[256];
-} ca_msg_t;
-\end{verbatim}
-
-
-\devsubsubsec{ca\_descr\_t}
-\label{cadescr}
-
-\begin{verbatim}
-typedef struct ca_descr_s {
- unsigned int index;
- unsigned int parity;
- unsigned char cw[8];
-} ca_descr_t;
-\end{verbatim}
-
-\clearpage
-
-\devsubsec{CA Function Calls}
-
-\function{open()}{
- int open(const char *deviceName, int flags);}{
- This system call opens a named ca device (e.g. /dev/ost/ca)
- for subsequent use.
-
- When an open() call has succeeded, the device will be ready for use.
- The significance of blocking or non-blocking mode is described in
- the documentation for functions where there is a difference.
- It does not affect the semantics of the open() call itself.
- A device opened in blocking mode can later be put into non-blocking mode
- (and vice versa) using the F\_SETFL command of the fcntl system
- call.
- This is a standard system call, documented in the Linux manual
- page for fcntl.
- Only one user can open the CA Device in O\_RDWR mode. All other attempts to
- open the device in this mode will fail, and an error code will be returned.
- }{
- const char *deviceName & Name of specific video device.\\
- int flags & A bit-wise OR of the following flags:\\
- & \hspace{1em} O\_RDONLY read-only access\\
- & \hspace{1em} O\_RDWR read/write access\\
- & \hspace{1em} O\_NONBLOCK open in non-blocking mode \\
- & \hspace{1em} (blocking mode is the default)\\
- }{
- ENODEV & Device driver not loaded/available.\\
- EINTERNAL & Internal error.\\
- EBUSY & Device or resource busy.\\
- EINVAL & Invalid argument.\\
-}
-
-\function{close()}{
- int close(int fd);}{
- This system call closes a previously opened audio device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- }{
- EBADF & fd is not a valid open file descriptor.\\
-}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/cimlogo.psi b/dvb-spec/dvbapi/cimlogo.psi
deleted file mode 100644
index b7b089a49..000000000
--- a/dvb-spec/dvbapi/cimlogo.psi
+++ /dev/null
@@ -1,122 +0,0 @@
-%!PS-Adobe-2.0 EPSF-2.0
-%%Title: /home/rjkm/dvbapi/cimlogo.ps
-%%Creator: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) - by John Bradley
-%%BoundingBox: 275 411 309 440
-%%Pages: 1
-%%DocumentFonts:
-%%EndComments
-%%EndProlog
-
-%%Page: 1 1
-
-% remember original state
-/origstate save def
-
-% build a temporary dictionary
-20 dict begin
-
-% define string to hold a scanline's worth of data
-/pix 45 string def
-
-% define space for color conversions
-/grays 45 string def % space for gray scale line
-/npixls 0 def
-/rgbindx 0 def
-
-% lower left corner
-275 411 translate
-
-% size of image (on paper, in 1/72inch coords)
-33.76800 28.51200 scale
-
-45 38 8 % dimensions of data
-[45 0 0 -38 0 38] % mapping matrix
-{currentfile pix readhexstring pop}
-image
-
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffffffffff00ffffffffffff0000000000ffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffff0000000000ffffffff000000000000ffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffff0000000000000000ffffff000000000000ffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffff0000000000000000ffffffff000000000000ffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffff000000000000000000ffffff000000000000ffffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffff0000000000000000ffffffffff000000000000ffffff00000000ffffffff
-ffffffffffffffffff
-ffffffffff00000000000000ffffffffffffff0000000000ffffff0000000000ffffffff
-ffffffffffffffffff
-ffffffffff000000000000ffffffffffffff000000000000ffffff000000000000ffffff
-ffffffffffffffffff
-ffffffff00000000000000ffffffffffffff000000000000ffffffff000000000000ffff
-ffffffffffffffffff
-ffffffff000000000000ffffffffffffffff000000000000ffffffff000000000000ffff
-ffffffffffffffffff
-ffffffff0000000000ffffffffffffffff000000000000ffffffffffff0000000000ffff
-ffffffffffffffffff
-ffffff000000000000ffffffffffffffff000000000000ffffffffffff0000000000ffff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffffffff000000000000ffffffffffff000000000000ff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffffffff0000000000ffffffffffffff000000000000ff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffffff000000000000ffffffffffffffff0000000000ff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffffff000000000000ffffffffffffff000000000000ff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffffff0000000000ffffffffffffffffff0000000000ff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffff000000000000ffffffffffffffff000000000000ff
-ffffffffffffffffff
-ffffff0000000000ffffffffffffff000000000000ffffffffffffffff0000000000ffff
-ffffffffffffffffff
-ffffff000000000000ffffffffffffff00000000ffffffffffffffffff0000000000ffff
-ffffffffffffffffff
-ffffffff0000000000ffffffffffffffff0000ffffffffffffffffff000000000000ffff
-ffffffffffffffffff
-ffffffff000000000000ffffffffffffffffffffffffffffffffffff000000000000ffff
-ffffffffffffffffff
-ffffffff000000000000ffffffffffffffffffffffffffffffffff000000000000ffffff
-ffffffffffffffffff
-ffffffffff00000000000000ffffffffffffffffffffffffffff000000000000ffffffff
-ff0000000000ffffff
-ffffffffff0000000000000000ffffffffffffffffffffffff00000000000000ffffffff
-00000000000000ffff
-ffffffffffff000000000000000000ffffffffffffffff0000000000000000ffffffffff
-00000000000000ffff
-ffffffffffffff0000000000000000000000000000000000000000000000ffffffffffff
-0000000000000000ff
-ffffffffffffffff000000000000000000000000000000000000000000ffffffffffffff
-00000000000000ffff
-ffffffffffffffffffff0000000000000000000000000000000000ffffffffffffffffff
-00000000000000ffff
-ffffffffffffffffffffffff00000000000000000000000000ffffffffffffffffffffff
-ff0000000000ffffff
-ffffffffffffffffffffffffffffff00ff0000000000ffffffffffffffffffffffffffff
-ffffff0000ffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffff
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
-ffffffffffffffffff
-
-showpage
-
-% stop using temporary dictionary
-end
-
-% restore original state
-origstate restore
-
-%%Trailer
diff --git a/dvb-spec/sgml/custom.dsl b/dvb-spec/dvbapi/custom.dsl
index 12a5e91d4..12a5e91d4 100644
--- a/dvb-spec/sgml/custom.dsl
+++ b/dvb-spec/dvbapi/custom.dsl
diff --git a/dvb-spec/sgml/custom.xsl b/dvb-spec/dvbapi/custom.xsl
index e1556c37c..e1556c37c 100644
--- a/dvb-spec/sgml/custom.xsl
+++ b/dvb-spec/dvbapi/custom.xsl
diff --git a/dvb-spec/dvbapi/demux.tex b/dvb-spec/dvbapi/demux.tex
deleted file mode 100644
index 882463090..000000000
--- a/dvb-spec/dvbapi/demux.tex
+++ /dev/null
@@ -1,423 +0,0 @@
-\devsec{DVB Demux Device}
-
-The DVB demux device controls the filters of the DVB hardware/software.
-It can be accessed through \texttt{/dev/adapter0/demux0}.
-Data types and and ioctl definitions can be accessed by including
-\texttt{linux/dvb/dmx.h} in your application.
-
-\devsubsec{Demux Data Types}
-
-
-\devsubsubsec{dmx\_output\_t}
-\label{dmxoutput}
-
-\begin{verbatim}
-typedef enum
-{
- DMX_OUT_DECODER,
- DMX_OUT_TAP,
- DMX_OUT_TS_TAP
-} dmx_output_t;
-\end{verbatim}
-
-\noindent\texttt{DMX\_OUT\_TAP} delivers the stream output to the demux device
-on which the ioctl is called.
-
-\noindent\texttt{DMX\_OUT\_TS\_TAP} routes output to the logical DVR device
-\texttt{/dev/dvb/adapter0/dvr0}, which delivers a TS multiplexed from
-all filters for which \texttt{DMX\_OUT\_TS\_TAP} was specified.
-
-
-\devsubsubsec{dmx\_input\_t}
-\label{dmxinput}
-
-\begin{verbatim}
-typedef enum
-{
- DMX_IN_FRONTEND,
- DMX_IN_DVR
-} dmx_input_t;
-\end{verbatim}
-
-
-\devsubsubsec{dmx\_pes\_type\_t}
-\label{dmxpestype}
-
-\begin{verbatim}
-typedef enum
-{
- DMX_PES_AUDIO,
- DMX_PES_VIDEO,
- DMX_PES_TELETEXT,
- DMX_PES_SUBTITLE,
- DMX_PES_PCR,
- DMX_PES_OTHER
-} dmx_pes_type_t;
-\end{verbatim}
-
-
-\devsubsubsec{dmx\_event\_t}
-\label{dmxeventt}
-
-\begin{verbatim}
-typedef enum
-{
- DMX_SCRAMBLING_EV,
- DMX_FRONTEND_EV
-} dmx_event_t;
-\end{verbatim}
-
-
-\devsubsubsec{dmx\_scrambling\_status\_t}
-\label{dmxscramblingstatus}
-
-\begin{verbatim}
-typedef enum
-{
- DMX_SCRAMBLING_OFF,
- DMX_SCRAMBLING_ON
-} dmx_scrambling_status_t;
-\end{verbatim}
-
-
-\devsubsubsec{struct dmx\_filter}
-\label{dmxfilter}
-
-\begin{verbatim}
-typedef struct dmx_filter
-{
- uint8_t filter[DMX_FILTER_SIZE];
- uint8_t mask[DMX_FILTER_SIZE];
-} dmx_filter_t;
-\end{verbatim}
-
-
-\devsubsubsec{struct dmx\_sct\_filter\_params}
-\label{dmxsctfilterparams}
-
-\begin{verbatim}
-struct dmx_sct_filter_params
-{
- uint16_t pid;
- dmx_filter_t filter;
- uint32_t timeout;
- uint32_t flags;
-#define DMX_CHECK_CRC 1
-#define DMX_ONESHOT 2
-#define DMX_IMMEDIATE_START 4
-};
-\end{verbatim}
-
-
-\devsubsubsec{struct dmx\_pes\_filter\_params}
-\label{dmxpesfilterparams}
-
-\begin{verbatim}
-struct dmx_pes_filter_params
-{
- uint16_t pid;
- dmx_input_t input;
- dmx_output_t output;
- dmx_pes_type_t pes_type;
- uint32_t flags;
-};
-\end{verbatim}
-
-
-\devsubsubsec{struct dmx\_event}
-\label{dmxevent}
-
-\begin{verbatim}
-struct dmx_event
-{
- dmx_event_t event;
- time_t timeStamp;
- union
- {
- dmx_scrambling_status_t scrambling;
- } u;
-};
-\end{verbatim}
-
-\devsubsubsec{struct dmx\_stc}
-\label{dmxstc}
-
-\begin{verbatim}
-struct dmx_stc {
- unsigned int num; /* input : which STC? 0..N */
- unsigned int base; /* output: divisor for stc to get 90 kHz clock */
- uint64_t stc; /* output: stc in 'base'*90 kHz units */
-};
-\end{verbatim}
-
-\clearpage
-
-\devsubsec{Demux Function Calls}
-\function{open()}{
- int open(const char *deviceName, int flags);}{
- This system call, used with a device name of /dev/dvb/adapter0/demux0,
- allocates a new filter
- and returns a handle which can be used for subsequent control of that
- filter. This call has to be made for each filter to be used, i.e. every
- returned file descriptor is a reference to a single filter.
- /dev/dvb/adapter0/dvr0 is a logical device to be used for retrieving Transport
- Streams for digital video recording. When reading from
- this device a transport stream containing the packets from all PES
- filters set in the corresponding demux device (/dev/dvb/adapter0/demux0)
- having the output set to DMX\_OUT\_TS\_TAP. A recorded Transport Stream
- is replayed by writing to this device.
-% This device can only be opened in read-write mode.
-
- The significance of blocking or non-blocking mode is described in the
- documentation for functions where there is a difference. It does not
- affect the semantics of the open() call itself. A device opened in
- blocking mode can later be put into non-blocking mode
- (and vice versa) using the F\_SETFL command of the fcntl system call.
- }{
- const char *deviceName & Name of demux device.\\
- int flags & A bit-wise OR of the following flags:\\
- & \hspace{1em} O\_RDWR read/write access\\
- & \hspace{1em} O\_NONBLOCK open in non-blocking mode \\
- & \hspace{1em} (blocking mode is the default)\\
- }{
- ENODEV & Device driver not loaded/available.\\
- EINVAL & Invalid argument.\\
- EMFILE & ``Too many open files'', i.e. no more filters available.\\
- ENOMEM & The driver failed to allocate enough memory.\\
-}
-
-\function{close()}{
- int close(int fd);}{
- This system call deactivates and deallocates a filter that was previously
- allocated via the open() call.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- }{
- EBADF & fd is not a valid open file descriptor.\\
-}
-
-\function{read()}{
- size\_t read(int fd, void *buf, size\_t count);
- }{
- This system call returns filtered data, which might be section or PES
- data. The filtered data is transferred from the driver's internal circular
- buffer to buf. The maximum amount of data to be transferred is implied by
- count.\\
- When returning section data the driver always tries to return a complete
- single section (even though buf would provide buffer space for more data).
- If the size of the buffer is smaller than the section as much as possible
- will be returned, and the remaining data will be provided in subsequent
- calls.\\
- The size of the internal buffer is 2 * 4096 bytes (the size of two maximum
- sized sections) by default. The size of this buffer may be changed by
- using the DMX\_SET\_BUFFER\_SIZE function. If the buffer is not large enough,
- or if the read operations are not performed fast enough, this may result
- in a buffer overflow error. In this case EOVERFLOW will be returned,
- and the circular buffer will be emptied.
- This call is blocking if there is no data to return, i.e. the process
- will be put to sleep waiting for data, unless the O\_NONBLOCK flag is
- specified.\\
- Note that in order to be able to read, the filtering process has to be
- started by defining either a section or a PES filter by means of the
- ioctl functions, and then starting the filtering process via the DMX\_START
- ioctl function or by setting the DMX\_IMMEDIATE\_START flag.
- If the reading is done from a logical DVR demux device, the data will
- constitute a Transport Stream including the packets from all PES filters
- in the corresponding demux device /dev/dvb/adapter0/demux0 having the output set
- to DMX\_OUT\_TS\_TAP.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- void *buf & Pointer to the buffer to be used for returned filtered data.\\
- size\_t count & Size of buf.\\
- }{
- EWOULDBLOCK & No data to return and O\_NONBLOCK was specified.\\
- EBADF & fd is not a valid open file descriptor.\\
- ECRC & Last section had a CRC error - no data returned.
- The buffer is flushed.\\
- EOVERFLOW & \\
-& The filtered data was not read from the buffer in
- due time, resulting in non-read data being lost.
- The buffer is flushed.\\
- ETIMEDOUT & The section was not loaded within the stated
- timeout period. See ioctl DMX\_SET\_FILTER for
- how to set a timeout.\\
- EFAULT & The driver failed to write to the callers buffer
- due to an invalid *buf pointer.\\
-}
-
-\function{write()}{
- ssize\_t write(int fd, const void *buf, size\_t count);
- }{
- This system call is only provided by the logical device /dev/dvb/adapter0/dvr0,
- associated with the physical demux device that provides the actual
- DVR functionality. It is used for replay of a digitally recorded
- Transport Stream. Matching filters have to be defined in the
- corresponding physical demux device, /dev/dvb/adapter0/demux0.
- The amount of data to be transferred is implied by count.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- void *buf & Pointer to the buffer containing the Transport Stream.\\
- size\_t count & Size of buf.\\
- }{
- EWOULDBLOCK & No data was written. This might happen if
- O\_NONBLOCK was specified and there is no more
- buffer space available (if O\_NONBLOCK is not
- specified the function will block until buffer
- space is available).\\
- EBUSY & This error code indicates that there are
- conflicting requests. The corresponding demux
- device is setup to receive data from the front-
- end. Make sure that these filters are stopped
- and that the filters with input set to DMX\_IN\_DVR
- are started.\\
- EBADF & fd is not a valid open file descriptor.\\
-}
-
-\ifunction{DMX\_START}{
- int ioctl( int fd, int request = DMX\_START);
- }{
- This ioctl call is used to start the actual filtering operation
- defined via the ioctl calls DMX\_SET\_FILTER or DMX\_SET\_PES\_FILTER.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_START for this command.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EINVAL & Invalid argument, i.e. no filtering parameters
- provided via the DMX\_SET\_FILTER or
- DMX\_SET\_PES\_FILTER functions.\\
- EBUSY & This error code indicates that there are
- conflicting requests. There are active filters
- filtering data from another input source. Make
- sure that these filters are stopped before starting
- this filter.\\
-}
-
-\ifunction{DMX\_STOP}{
- int ioctl( int fd, int request = DMX\_STOP);
- }{
- This ioctl call is used to stop the actual filtering operation defined
- via the ioctl calls DMX\_SET\_FILTER or DMX\_SET\_PES\_FILTER and started via
- the DMX\_START command.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_STOP for this command.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
-}
-
-\ifunction{DMX\_SET\_FILTER}{
- int ioctl( int fd, int request = DMX\_SET\_FILTER, struct dmx\_sct\_filter\_params *params);
- }{
- This ioctl call sets up a filter according to the filter and mask
- parameters provided. A timeout may be defined stating number of seconds
- to wait for a section to be loaded. A value of 0 means that no timeout
- should be applied. Finally there is a flag field where it is possible to
- state whether a section should be CRC-checked, whether the filter should
- be a "one-shot" filter, i.e. if the filtering operation should be stopped
- after the first section is received, and whether the filtering operation
- should be started immediately (without waiting for a DMX\_START ioctl call).
- If a filter was previously set-up, this filter will be canceled, and the
- receive buffer will be flushed.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_SET\_FILTER for this command.\\
- struct dmx\_sct\_filter\_params *params
- & Pointer to structure containing filter parameters.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EINVAL & Invalid argument.\\
-}
-
-\ifunction{DMX\_SET\_PES\_FILTER}{
- int ioctl( int fd, int request = DMX\_SET\_PES\_FILTER,
- struct dmx\_pes\_filter\_params *params);
- }{
- This ioctl call sets up a PES filter according to the parameters provided.
- By a PES filter is meant a filter that is based just on the packet
- identifier (PID), i.e. no PES header or payload filtering capability is
- supported.\\
- The transport stream destination for the filtered output may be set. Also
- the PES type may be stated in order to be able to e.g. direct a video
- stream directly to the video decoder. Finally there is a flag field where
- it is possible to state whether the filtering operation should be started
- immediately (without waiting for a DMX\_START ioctl call).
- If a filter was previously set-up, this filter will be cancelled, and the
- receive buffer will be flushed.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_SET\_PES\_FILTER for this command.\\
- struct dmx\_pes\_filter\_params *params
- & Pointer to structure containing filter parameters.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EINVAL & Invalid argument.\\
- EBUSY & This error code indicates that there are
- conflicting requests. There are active filters
- filtering data from another input source. Make
- sure that these filters are stopped before starting
- this filter.\\
-}
-
-\ifunction{DMX\_SET\_BUFFER\_SIZE}{
- int ioctl( int fd, int request = DMX\_SET\_BUFFER\_SIZE, unsigned long size);
- }{
- This ioctl call is used to set the size of the circular buffer used
- for filtered data. The default size is two maximum sized sections, i.e.
- if this function is not called a buffer size of 2 * 4096 bytes will be
- used.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_SET\_BUFFER\_SIZE for this command.\\
- unsigned long size & Size of circular buffer.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- ENOMEM & The driver was not able to allocate a buffer of the requested size.\\
-}
-
-\ifunction{DMX\_GET\_EVENT}{
- int ioctl( int fd, int request = DMX\_GET\_EVENT, struct dmx\_event *ev);
- }{
- This ioctl call returns an event if available. If an event is not
- available, the behavior depends on whether the device is in blocking or
- non-blocking mode. In the latter case, the call fails immediately with
- errno set to EWOULDBLOCK. In the former case, the call blocks until an
- event becomes available.\\
- The standard Linux poll() and/or select() system calls can be used with
- the device file descriptor to watch for new events. For select(), the
- file descriptor should be included in the exceptfds argument, and for
- poll(), POLLPRI should be specified as the wake-up condition.
- Only the latest event for each filter is saved.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_GET\_EVENT for this command.\\
- struct dmx\_event *ev & Pointer to the location where the event is to be stored.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EFAULT & ev points to an invalid address.\\
- EWOULDBLOCK & There is no event pending, and the device is in non-blocking mode.\\
-}
-
-\ifunction{DMX\_GET\_STC}{
- int ioctl( int fd, int request = DMX\_GET\_STC, struct dmx\_stc *stc);
- }{
- This ioctl call returns the current value of the system time counter
- (which is driven by a PES filter of type DMX\_PES\_PCR). Some hardware
- supports more than one STC, so you must specify which one by setting
- the num field of stc before the ioctl (range 0...n). The result is returned in form
- of a ratio with a 64 bit numerator and a 32 bit denominator, so the
- real 90kHz STC value is \begin{ttfamily}stc->stc / stc->base\end{ttfamily}.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals DMX\_GET\_STC for this command.\\
- struct dmx\_stc *stc & Pointer to the location where the stc is to be stored.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EFAULT & stc points to an invalid address.\\
- EINVAL & Invalid stc number.\\
-}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/devices.tex b/dvb-spec/dvbapi/devices.tex
deleted file mode 100644
index 11eccd897..000000000
--- a/dvb-spec/dvbapi/devices.tex
+++ /dev/null
@@ -1,12 +0,0 @@
-\input{frontend.tex}
-\input{demux.tex}
-\input{video.tex}
-\input{audio.tex}
-\input{ca.tex}
-\input{net.tex}
-\input{kdapi.tex}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/sgml/dvbapi.sgml b/dvb-spec/dvbapi/dvbapi.sgml
index 6b4b96fe5..377fe8fba 100644
--- a/dvb-spec/sgml/dvbapi.sgml
+++ b/dvb-spec/dvbapi/dvbapi.sgml
@@ -1,7 +1,7 @@
-<?xml version="1.0"?>
+<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
-<!ENTITY % entities SYSTEM "./entities.sgml"> %entities;
+<!ENTITY % entities SYSTEM "./entities.xml"> %entities;
<!ENTITY i2c "I<superscript>2</superscript>C">
]>
@@ -95,9 +95,7 @@ contents is the same as the original LaTex version.</revremark>
<chapter id="examples">
&sub-examples;
</chapter>
- <appendix id="fdl">
- &sub-fdl;
- </appendix>
<!-- END OF CHAPTERS -->
+ &sub-fdl-appendix;
</book>
diff --git a/dvb-spec/dvbapi/dvbapi.tex b/dvb-spec/dvbapi/dvbapi.tex
deleted file mode 100644
index 74fc6510e..000000000
--- a/dvb-spec/dvbapi/dvbapi.tex
+++ /dev/null
@@ -1,170 +0,0 @@
-\documentclass[a4paper,10pt]{book}
-\usepackage[dvips,colorlinks=true]{hyperref}
-
-\usepackage{times}
-
-%\usepackage[hang]{caption}
-\usepackage{fancyhdr}
-%\usepackage{lucidabr}
-%\usepackage{fancybox}
-\usepackage{array}
-\usepackage{graphicx}
-%\usepackage{latexsym}
-%\usepackage{pstricks,pst-node,pst-tree}
-%\usepackage{verbatim}
-%\usepackage{rotating}
-%\usepackage{pdftex}
-%\usepackage{color}
-%\usepackage{subfigure}
-%\usepackage{wrapfig}
-
-\newcommand{\devsec}[1]{\chapter{#1}}
-\newcommand{\devsubsec}[1]{\section{#1}}
-\newcommand{\devsubsubsec}[1]{\subsection{#1}}
-\newcommand{\function}[5]{
- \subsection{#1}
-
- \noindent DESCRIPTION
- \medskip
-
- \begin{tabular}[h]{p{11cm}}
- #3
- \end{tabular}
-
- \medskip
- \noindent SYNOPSIS
- \medskip
-
- \begin{tabular}[h]{p{11cm}}
- {\tt #2}
- \end{tabular}
-
- %\item[]
-\medskip
-\noindent PARAMETERS
-\medskip
-
- \begin{tabular}[h]{p{3cm}p{8cm}}
- #4
- \end{tabular}
-
- %\item[]
-\medskip
-\noindent ERRORS
-\medskip
-
- \begin{tabular}[h]{p{3cm}p{8cm}}
- #5
- \end{tabular}
-
- %\end{itemize}
-
-\medskip
-}
-\def\ifunction#1#2#3#4#5{\function{#1\index{#1}}{#2}{#3}{#4}{#5}}
-
-\newcommand{\kfunction}[5]{
- \subsection{#1}
- \noindent DESCRIPTION
- \medskip
-
- \begin{tabular}[h]{p{11cm}}
- #3
- \end{tabular}
-
- \medskip
- \noindent SYNOPSIS
- \medskip
-
- \begin{tabular}[h]{p{11cm}}
- {\tt #2}
- \end{tabular}
-
- %\item[]
-\medskip
-\noindent PARAMETERS
-\medskip
-
- \begin{tabular}[h]{p{3cm}p{8cm}}
- #4
- \end{tabular}
-
- %\item[]
-\medskip
-\noindent RETURNS
-\medskip
-
- \begin{tabular}[h]{p{3cm}p{8cm}}
- #5
- \end{tabular}
-
- %\end{itemize}
-
-\medskip
-}
-\def\kifunction#1#2#3#4#5{\kfunction{#1\index{#1}}{#2}{#3}{#4}{#5}}
-
-
-%\usepackage{index}
-%\makeindex
-
-
-\begin{document}
-
-\input{title.tex}
-
-\cleardoublepage
-
-\pagenumbering{roman}
-\pagestyle{fancyplain}
-
-
-\tableofcontents
-%\listoffigures
-%\listoftables
-
-\cleardoublepage
-
-\pagenumbering{arabic}
-
-\renewcommand{\chaptermark}[1]{\markboth{\uppercase{#1}}{}}
-\renewcommand{\sectionmark}[1]{\markright{\thesection.\ #1}{}}
-\lhead[\fancyplain{}{\bfseries \thepage}]{\bfseries \rightmark}
-\rhead[\fancyplain{}{\bfseries \leftmark}]{\bfseries \thepage}
-%\cfoot{\copyright\ 2002, 2003 Convergence GmbH}
-
-\input{intro.tex}
-
-\input{devices.tex}
-
-\input{examples.tex}
-
-\cleardoublepage
-
-\appendix
-
-\cleardoublepage
-
-\input{fdl.tex}
-
-\cleardoublepage
-
-\thispagestyle{plain}\chaptermark{Bibliography}
-\addcontentsline{toc}{chapter}{Bibliography}
-\bibliographystyle{bibsec}
-\bibliography{main}
-
-\cleardoublepage
-
-\thispagestyle{plain}\chaptermark{Subject Index}
-\addcontentsline{toc}{chapter}{Subject Index}
-%\printindex
-
-\cleardoublepage
-
-\end{document}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: t
-%%% End:
diff --git a/dvb-spec/dvbapi/dvbstb.fig b/dvb-spec/dvbapi/dvbstb.fig
deleted file mode 100644
index 0a6bbadc3..000000000
--- a/dvb-spec/dvbapi/dvbstb.fig
+++ /dev/null
@@ -1,59 +0,0 @@
-#FIG 3.2
-Landscape
-Center
-Metric
-A4
-100.00
-Single
--2
-1200 2
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 1620 360 2520 360 2520 900 1620 900 1620 360
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 1260 1080 1620 630
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 2520 630 2880 630
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 2880 360 3780 360 3780 900 2880 900 2880 360
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 0 0 1.00 60.00 120.00
- 4590 900 3330 1170
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 0 0 1.00 60.00 120.00
- 4590 900 4590 1170
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 4140 360 5040 360 5040 900 4140 900 4140 360
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 3780 630 4140 630
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 4140 1170 5040 1170 5040 1710 4140 1710 4140 1170
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 2880 1170 3780 1170 3780 1710 2880 1710 2880 1170
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 1620 1170 2520 1170 2520 1710 1620 1710 1620 1170
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 0 0 1.00 60.00 120.00
- 1620 1440 1260 1080
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 1350 225 5175 225 5175 1845 1350 1845 1350 225
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 3240 1710 3960 2070
-2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
- 1 1 1.00 60.00 120.00
- 4590 1710 3960 2070
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 3510 2070 4410 2070 4410 2610 3510 2610 3510 2070
-2 2 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 5
- 360 810 1260 810 1260 1350 360 1350 360 810
-4 0 0 50 0 0 12 0.0000 4 135 675 1755 675 Frontend\001
-4 0 0 50 0 0 12 0.0000 4 135 690 4275 675 Demuxer\001
-4 0 0 50 0 0 12 0.0000 4 135 450 4365 1485 Video\001
-4 0 0 50 0 0 12 0.0000 4 135 450 3105 1485 Audio\001
-4 0 0 50 0 0 12 0.0000 4 135 345 1890 1485 SEC\001
-4 0 0 50 0 0 12 0.0000 4 135 255 3195 675 CA\001
-4 0 0 50 0 0 12 0.0000 4 135 645 495 1125 Antenna\001
-4 0 0 50 0 0 12 0.0000 4 135 240 3870 2385 TV\001
diff --git a/dvb-spec/dvbapi/examples.tex b/dvb-spec/dvbapi/examples.tex
deleted file mode 100644
index c9a19ba29..000000000
--- a/dvb-spec/dvbapi/examples.tex
+++ /dev/null
@@ -1,370 +0,0 @@
-\chapter{Examples}
-In this section we would like to present some examples for using the DVB API.
-
-Maintainer note: This section is out of date. Please refer to the sample
-programs packaged with the driver distribution from
-\texttt{http://linuxtv.org/}.
-
-\section{Tuning}
-We will start with a generic tuning subroutine that uses the frontend
-and SEC, as well as the demux devices. The example is given for QPSK
-tuners, but can easily be adjusted for QAM.
-
-{\small
-\begin{verbatim}
-#include <sys/ioctl.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <linux/dvb/dmx.h>
-#include <linux/dvb/frontend.h>
-#include <linux/dvb/sec.h>
-#include <sys/poll.h>
-
-#define DMX "/dev/dvb/adapter0/demux1"
-#define FRONT "/dev/dvb/adapter0/frontend1"
-#define SEC "/dev/dvb/adapter0/sec1"
-
-/* routine for checking if we have a signal and other status information*/
-int FEReadStatus(int fd, fe_status_t *stat)
-{
- int ans;
-
- if ( (ans = ioctl(fd,FE_READ_STATUS,stat) < 0)){
- perror("FE READ STATUS: ");
- return -1;
- }
-
- if (*stat & FE_HAS_POWER)
- printf("FE HAS POWER\n");
-
- if (*stat & FE_HAS_SIGNAL)
- printf("FE HAS SIGNAL\n");
-
- if (*stat & FE_SPECTRUM_INV)
- printf("SPEKTRUM INV\n");
-
- return 0;
-}
-
-
-/* tune qpsk */
-/* freq: frequency of transponder */
-/* vpid, apid, tpid: PIDs of video, audio and teletext TS packets */
-/* diseqc: DiSEqC address of the used LNB */
-/* pol: Polarisation */
-/* srate: Symbol Rate */
-/* fec. FEC */
-/* lnb_lof1: local frequency of lower LNB band */
-/* lnb_lof2: local frequency of upper LNB band */
-/* lnb_slof: switch frequency of LNB */
-
-int set_qpsk_channel(int freq, int vpid, int apid, int tpid,
- int diseqc, int pol, int srate, int fec, int lnb_lof1,
- int lnb_lof2, int lnb_slof)
-{
- struct secCommand scmd;
- struct secCmdSequence scmds;
- struct dmx_pes_filter_params pesFilterParams;
- FrontendParameters frp;
- struct pollfd pfd[1];
- FrontendEvent event;
- int demux1, demux2, demux3, front;
-
- frequency = (uint32_t) freq;
- symbolrate = (uint32_t) srate;
-
- if((front = open(FRONT,O_RDWR)) < 0){
- perror("FRONTEND DEVICE: ");
- return -1;
- }
-
- if((sec = open(SEC,O_RDWR)) < 0){
- perror("SEC DEVICE: ");
- return -1;
- }
-
- if (demux1 < 0){
- if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
- < 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (demux2 < 0){
- if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
- < 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (demux3 < 0){
- if ((demux3=open(DMX, O_RDWR|O_NONBLOCK))
- < 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (freq < lnb_slof) {
- frp.Frequency = (freq - lnb_lof1);
- scmds.continuousTone = SEC_TONE_OFF;
- } else {
- frp.Frequency = (freq - lnb_lof2);
- scmds.continuousTone = SEC_TONE_ON;
- }
- frp.Inversion = INVERSION_AUTO;
- if (pol) scmds.voltage = SEC_VOLTAGE_18;
- else scmds.voltage = SEC_VOLTAGE_13;
-
- scmd.type=0;
- scmd.u.diseqc.addr=0x10;
- scmd.u.diseqc.cmd=0x38;
- scmd.u.diseqc.numParams=1;
- scmd.u.diseqc.params[0] = 0xF0 | ((diseqc * 4) & 0x0F) |
- (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) |
- (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0);
-
- scmds.miniCommand=SEC_MINI_NONE;
- scmds.numCommands=1;
- scmds.commands=&scmd;
- if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){
- perror("SEC SEND: ");
- return -1;
- }
-
- if (ioctl(sec, SEC_SEND_SEQUENCE, &scmds) < 0){
- perror("SEC SEND: ");
- return -1;
- }
-
- frp.u.qpsk.SymbolRate = srate;
- frp.u.qpsk.FEC_inner = fec;
-
- if (ioctl(front, FE_SET_FRONTEND, &frp) < 0){
- perror("QPSK TUNE: ");
- return -1;
- }
-
- pfd[0].fd = front;
- pfd[0].events = POLLIN;
-
- if (poll(pfd,1,3000)){
- if (pfd[0].revents & POLLIN){
- printf("Getting QPSK event\n");
- if ( ioctl(front, FE_GET_EVENT, &event)
-
- == -EOVERFLOW){
- perror("qpsk get event");
- return -1;
- }
- printf("Received ");
- switch(event.type){
- case FE_UNEXPECTED_EV:
- printf("unexpected event\n");
- return -1;
- case FE_FAILURE_EV:
- printf("failure event\n");
- return -1;
-
- case FE_COMPLETION_EV:
- printf("completion event\n");
- }
- }
- }
-
-
- pesFilterParams.pid = vpid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_DECODER;
- pesFilterParams.pes_type = DMX_PES_VIDEO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
- perror("set_vpid");
- return -1;
- }
-
- pesFilterParams.pid = apid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_DECODER;
- pesFilterParams.pes_type = DMX_PES_AUDIO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
- perror("set_apid");
- return -1;
- }
-
- pesFilterParams.pid = tpid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_DECODER;
- pesFilterParams.pes_type = DMX_PES_TELETEXT;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux3, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
- perror("set_tpid");
- return -1;
- }
-
- return has_signal(fds);
-}
-
-\end{verbatim}
-}
-The program assumes that you are using a universal LNB and a standard
-DiSEqC switch with up to 4 addresses. Of course, you could build in
-some more checking if tuning was successful and maybe try to repeat
-the tuning process. Depending on the external hardware, i.e. LNB and
-DiSEqC switch, and weather conditions this may be necessary.
-
-
-\section{The DVR device}
-The following program code shows how to use the DVR device for
-recording.
-
-{\small
-\begin{verbatim}
-#include <sys/ioctl.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <linux/dvb/dmx.h>
-#include <linux/dvb/video.h>
-#include <sys/poll.h>
-#define DVR "/dev/dvb/adapter0/dvr1"
-#define AUDIO "/dev/dvb/adapter0/audio1"
-#define VIDEO "/dev/dvb/adapter0/video1"
-
-#define BUFFY (188*20)
-#define MAX_LENGTH (1024*1024*5) /* record 5MB */
-
-
-/* switch the demuxes to recording, assuming the transponder is tuned */
-
-/* demux1, demux2: file descriptor of video and audio filters */
-/* vpid, apid: PIDs of video and audio channels */
-
-int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid)
-{
- struct dmx_pes_filter_params pesFilterParams;
-
- if (demux1 < 0){
- if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
- < 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (demux2 < 0){
- if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
- < 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- pesFilterParams.pid = vpid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_TS_TAP;
- pesFilterParams.pes_type = DMX_PES_VIDEO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux1, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
- perror("DEMUX DEVICE");
- return -1;
- }
- pesFilterParams.pid = apid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_TS_TAP;
- pesFilterParams.pes_type = DMX_PES_AUDIO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux2, DMX_SET_PES_FILTER, &pesFilterParams) < 0){
- perror("DEMUX DEVICE");
- return -1;
- }
- return 0;
-}
-
-/* start recording MAX_LENGTH , assuming the transponder is tuned */
-
-/* demux1, demux2: file descriptor of video and audio filters */
-/* vpid, apid: PIDs of video and audio channels */
-int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid)
-{
- int i;
- int len;
- int written;
- uint8_t buf[BUFFY];
- uint64_t length;
- struct pollfd pfd[1];
- int dvr, dvr_out;
-
- /* open dvr device */
- if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) < 0){
- perror("DVR DEVICE");
- return -1;
- }
-
- /* switch video and audio demuxes to dvr */
- printf ("Switching dvr on\n");
- i = switch_to_record(demux1, demux2, vpid, apid);
- printf("finished: ");
-
- printf("Recording %2.0f MB of test file in TS format\n",
- MAX_LENGTH/(1024.0*1024.0));
- length = 0;
-
- /* open output file */
- if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT
- |O_TRUNC, S_IRUSR|S_IWUSR
- |S_IRGRP|S_IWGRP|S_IROTH|
- S_IWOTH)) < 0){
- perror("Can't open file for dvr test");
- return -1;
- }
-
- pfd[0].fd = dvr;
- pfd[0].events = POLLIN;
-
- /* poll for dvr data and write to file */
- while (length < MAX_LENGTH ) {
- if (poll(pfd,1,1)){
- if (pfd[0].revents & POLLIN){
- len = read(dvr, buf, BUFFY);
- if (len < 0){
- perror("recording");
- return -1;
- }
- if (len > 0){
- written = 0;
- while (written < len)
- written +=
- write (dvr_out,
- buf, len);
- length += len;
- printf("written %2.0f MB\r",
- length/1024./1024.);
- }
- }
- }
- }
- return 0;
-}
-
-\end{verbatim}
-}
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% TeX-master: t
-%%% End:
diff --git a/dvb-spec/dvbapi/fdl.tex b/dvb-spec/dvbapi/fdl.tex
deleted file mode 100644
index c0fcbe3f3..000000000
--- a/dvb-spec/dvbapi/fdl.tex
+++ /dev/null
@@ -1,367 +0,0 @@
-% fdl.tex
-% This file is a chapter. It must be included in a larger document to work
-% properly.
-
-\chapter{GNU Free Documentation License}
-
-Version 1.1, March 2000\\
-
- Copyright \copyright\ 2000 Free Software Foundation, Inc.\\
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\\
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-\section*{Preamble}
-
-The purpose of this License is to make a manual, textbook, or other
-written document ``free'' in the sense of freedom: to assure everyone
-the effective freedom to copy and redistribute it, with or without
-modifying it, either commercially or noncommercially. Secondarily,
-this License preserves for the author and publisher a way to get
-credit for their work, while not being considered responsible for
-modifications made by others.
-
-This License is a kind of ``copyleft'', which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-\section{Applicability and Definitions}
-
-This License applies to any manual or other work that contains a
-notice placed by the copyright holder saying it can be distributed
-under the terms of this License. The ``Document'', below, refers to any
-such manual or work. Any member of the public is a licensee, and is
-addressed as ``you''.
-
-A ``Modified Version'' of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A ``Secondary Section'' is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject. (For example, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The ``Invariant Sections'' are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License.
-
-The ``Cover Texts'' are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License.
-
-A ``Transparent'' copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, whose contents can be viewed and edited directly and
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup has been designed to thwart or discourage
-subsequent modification by readers is not Transparent. A copy that is
-not ``Transparent'' is called ``Opaque''.
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, \LaTeX~input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML designed for human modification. Opaque formats include
-PostScript, PDF, proprietary formats that can be read and edited only
-by proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML produced by some word processors for output
-purposes only.
-
-The ``Title Page'' means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, ``Title Page'' means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-
-\section{Verbatim Copying}
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-\section{Copying in Quantity}
-
-If you publish printed copies of the Document numbering more than 100,
-and the Document's license notice requires Cover Texts, you must enclose
-the copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a publicly-accessible computer-network location containing a complete
-Transparent copy of the Document, free of added material, which the
-general network-using public has access to download anonymously at no
-charge using public-standard network protocols. If you use the latter
-option, you must take reasonably prudent steps, when you begin
-distribution of Opaque copies in quantity, to ensure that this
-Transparent copy will remain thus accessible at the stated location
-until at least one year after the last time you distribute an Opaque
-copy (directly or through your agents or retailers) of that edition to
-the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-\section{Modifications}
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-\begin{itemize}
-
-\item Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-\item List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has less than five).
-\item State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-\item Preserve all the copyright notices of the Document.
-\item Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-\item Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-\item Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-\item Include an unaltered copy of this License.
-\item Preserve the section entitled ``History'', and its title, and add to
- it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section entitled ``History'' in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-\item Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the ``History'' section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-\item In any section entitled ``Acknowledgements'' or ``Dedications'',
- preserve the section's title, and preserve in the section all the
- substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-\item Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-\item Delete any section entitled ``Endorsements''. Such a section
- may not be included in the Modified Version.
-\item Do not retitle any existing section as ``Endorsements''
- or to conflict in title with any Invariant Section.
-
-\end{itemize}
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section entitled ``Endorsements'', provided it contains
-nothing but endorsements of your Modified Version by various
-parties -- for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-\section{Combining Documents}
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections entitled ``History''
-in the various original documents, forming one section entitled
-``History''; likewise combine any sections entitled ``Acknowledgements'',
-and any sections entitled ``Dedications''. You must delete all sections
-entitled ``Endorsements.''
-
-
-\section{Collections of Documents}
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-
-\section{Aggregation With Independent Works}
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, does not as a whole count as a Modified Version
-of the Document, provided no compilation copyright is claimed for the
-compilation. Such a compilation is called an ``aggregate'', and this
-License does not apply to the other self-contained works thus compiled
-with the Document, on account of their being thus compiled, if they
-are not themselves derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one quarter
-of the entire aggregate, the Document's Cover Texts may be placed on
-covers that surround only the Document within the aggregate.
-Otherwise they must appear on covers around the whole aggregate.
-
-
-\section{Translation}
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License provided that you also include the
-original English version of this License. In case of a disagreement
-between the translation and the original English version of this
-License, the original English version will prevail.
-
-
-\section{Termination}
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-\section{Future Revisions of This License}
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-\section*{ADDENDUM: How to use this License for your documents}
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-\begin{quote}
-
- Copyright \copyright\ YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.1
- or any later version published by the Free Software Foundation;
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
- A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
-\end{quote}
-
-If you have no Invariant Sections, write ``with no Invariant Sections''
-instead of saying which ones are invariant. If you have no
-Front-Cover Texts, write ``no Front-Cover Texts'' instead of
-``Front-Cover Texts being LIST''; likewise for Back-Cover Texts.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
diff --git a/dvb-spec/dvbapi/fig2pstex b/dvb-spec/dvbapi/fig2pstex
deleted file mode 100755
index bf62eb7ec..000000000
--- a/dvb-spec/dvbapi/fig2pstex
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-f=`basename $1 .fig`
-fig2dev -L pstex $f.fig $f.ps
-fig2dev -L pstex_t -p $f.ps $f.fig $f.pst2
-./getbb $f.pst2 $f.ps > $f.pst
-rm $f.pst2 \ No newline at end of file
diff --git a/dvb-spec/dvbapi/frontend.tex b/dvb-spec/dvbapi/frontend.tex
deleted file mode 100644
index 9ae8a343e..000000000
--- a/dvb-spec/dvbapi/frontend.tex
+++ /dev/null
@@ -1,674 +0,0 @@
-\devsec{DVB Frontend API}
-
-The DVB frontend device controls the tuner and DVB demodulator hardware.
-It can be accessed through \texttt{/dev/dvb/adapter0/frontend0}.
-Data types and and ioctl definitions can be accessed by including
-\texttt{linux/dvb/frontend.h} in your application.
-
-DVB frontends come in three varieties: DVB-S (satellite), DVB-C (cable)
-and DVB-T (terrestrial). Transmission via the internet (DVB-IP) is
-not yet handled by this API but a future extension is possible.
-For DVB-S the frontend device also supports satellite equipment control
-(SEC) via DiSEqC and V-SEC protocols. The DiSEqC (digital SEC) specification
-is available from Eutelsat \texttt{http://www.eutelsat.org/}.
-
-Note that the DVB API may also be used for MPEG decoder-only PCI cards,
-in which case there exists no frontend device.
-
-\devsubsec{Frontend Data Types}
-
-\devsubsubsec{frontend type}
-\label{frontendtype}
-
-For historical reasons frontend types are named after the
-type of modulation used in transmission.
-
-\begin{verbatim}
-typedef enum fe_type {
- FE_QPSK, /* DVB-S */
- FE_QAM, /* DVB-C */
- FE_OFDM /* DVB-T */
-} fe_type_t;
-\end{verbatim}
-
-\devsubsubsec{frontend capabilities}
-\label{frontendcaps}
-
-Capabilities describe what a frontend can do. Some capabilities
-can only be supported for a specific frontend type.
-
-\begin{verbatim}
-typedef enum fe_caps {
- FE_IS_STUPID = 0,
- FE_CAN_INVERSION_AUTO = 0x1,
- FE_CAN_FEC_1_2 = 0x2,
- FE_CAN_FEC_2_3 = 0x4,
- FE_CAN_FEC_3_4 = 0x8,
- FE_CAN_FEC_4_5 = 0x10,
- FE_CAN_FEC_5_6 = 0x20,
- FE_CAN_FEC_6_7 = 0x40,
- FE_CAN_FEC_7_8 = 0x80,
- FE_CAN_FEC_8_9 = 0x100,
- FE_CAN_FEC_AUTO = 0x200,
- FE_CAN_QPSK = 0x400,
- FE_CAN_QAM_16 = 0x800,
- FE_CAN_QAM_32 = 0x1000,
- FE_CAN_QAM_64 = 0x2000,
- FE_CAN_QAM_128 = 0x4000,
- FE_CAN_QAM_256 = 0x8000,
- FE_CAN_QAM_AUTO = 0x10000,
- FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,
- FE_CAN_BANDWIDTH_AUTO = 0x40000,
- FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,
- FE_CAN_HIERARCHY_AUTO = 0x100000,
- FE_CAN_MUTE_TS = 0x80000000,
- FE_CAN_CLEAN_SETUP = 0x40000000
-} fe_caps_t;
-\end{verbatim}
-
-\devsubsubsec{frontend information}
-\label{frontendinfo}
-
-Information about the frontend ca be queried with
-FE\_GET\_INFO (\ref{fegetinfo}).
-
-\begin{verbatim}
-struct dvb_frontend_info {
- char name[128];
- fe_type_t type;
- uint32_t frequency_min;
- uint32_t frequency_max;
- uint32_t frequency_stepsize;
- uint32_t frequency_tolerance;
- uint32_t symbol_rate_min;
- uint32_t symbol_rate_max;
- uint32_t symbol_rate_tolerance; /* ppm */
- uint32_t notifier_delay; /* ms */
- fe_caps_t caps;
-};
-\end{verbatim}
-
-\devsubsubsec{diseqc master command}
-\label{diseqcmastercmd}
-
-A message sent from the frontend to DiSEqC capable equipment.
-
-\begin{verbatim}
-struct dvb_diseqc_master_cmd {
- uint8_t msg [6]; /* { framing, address, command, data[3] } */
- uint8_t msg_len; /* valid values are 3...6 */
-};
-\end{verbatim}
-
-\devsubsubsec{diseqc slave reply}
-\label{diseqcslavereply}
-
-A reply to the frontend from DiSEqC 2.0 capable equipment.
-
-\begin{verbatim}
-struct dvb_diseqc_slave_reply {
- uint8_t msg [4]; /* { framing, data [3] } */
- uint8_t msg_len; /* valid values are 0...4, 0 means no msg */
- int timeout; /* return from ioctl after timeout ms with */
-}; /* errorcode when no message was received */
-\end{verbatim}
-
-\devsubsubsec{SEC voltage}
-\label{secvoltage}
-
-The voltage is usually used with non-DiSEqC capable LNBs to
-switch the polarzation (horizontal/vertical).
-When using DiSEqC epuipment this voltage has to be switched consistently
-to the DiSEqC commands as described in the DiSEqC spec.
-
-\begin{verbatim}
-typedef enum fe_sec_voltage {
- SEC_VOLTAGE_13,
- SEC_VOLTAGE_18
-} fe_sec_voltage_t;
-\end{verbatim}
-
-\devsubsubsec{SEC continuous tone}
-\label{sectone}
-
-The continous 22KHz tone is usually used with non-DiSEqC capable LNBs to
-switch the high/low band of a dual-band LNB.
-When using DiSEqC epuipment this voltage has to be switched consistently
-to the DiSEqC commands as described in the DiSEqC spec.
-
-\begin{verbatim}
-typedef enum fe_sec_tone_mode {
- SEC_TONE_ON,
- SEC_TONE_OFF
-} fe_sec_tone_mode_t;
-\end{verbatim}
-
-\devsubsubsec{SEC tone burst}
-\label{sectoneburst}
-
-The 22KHz tone burst is usually used with non-DiSEqC capable
-switches to select between two connected LNBs/satellites.
-When using DiSEqC epuipment this voltage has to be switched consistently
-to the DiSEqC commands as described in the DiSEqC spec.
-
-\begin{verbatim}
-typedef enum fe_sec_mini_cmd {
- SEC_MINI_A,
- SEC_MINI_B
-} fe_sec_mini_cmd_t;
-\end{verbatim}
-
-
-\devsubsubsec{frontend status}
-\label{frontendstatus}
-
-Several functions of the frontend device use the fe\_status data
-type defined by
-\begin{verbatim}
-typedef enum fe_status {
- FE_HAS_SIGNAL = 0x01, /* found something above the noise level */
- FE_HAS_CARRIER = 0x02, /* found a DVB signal */
- FE_HAS_VITERBI = 0x04, /* FEC is stable */
- FE_HAS_SYNC = 0x08, /* found sync bytes */
- FE_HAS_LOCK = 0x10, /* everything's working... */
- FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */
- FE_REINIT = 0x40 /* frontend was reinitialized, */
-} fe_status_t; /* application is recommned to reset */
-\end{verbatim}
-to indicate the current state and/or state changes of
-the frontend hardware.
-
-
-\devsubsubsec{frontend parameters}
-\label{frontendparameters}
-
-The kind of parameters passed to the frontend device for tuning
-depend on the kind of hardware you are using.
-All kinds of parameters are combined as a union in the
-FrontendParameters structure:
-\begin{verbatim}
-struct dvb_frontend_parameters {
- uint32_t frequency; /* (absolute) frequency in Hz for QAM/OFDM */
- /* intermediate frequency in kHz for QPSK */
- fe_spectral_inversion_t inversion;
- union {
- struct dvb_qpsk_parameters qpsk;
- struct dvb_qam_parameters qam;
- struct dvb_ofdm_parameters ofdm;
- } u;
-};
-\end{verbatim}
-
-For satellite QPSK frontends you have to use the \verb|QPSKParameters| member
-defined by
-\begin{verbatim}
-struct dvb_qpsk_parameters {
- uint32_t symbol_rate; /* symbol rate in Symbols per second */
- fe_code_rate_t fec_inner; /* forward error correction (see above) */
-};
-\end{verbatim}
-for cable QAM frontend you use the \verb|QAMParameters| structure
-\begin{verbatim}
-struct dvb_qam_parameters {
- uint32_t symbol_rate; /* symbol rate in Symbols per second */
- fe_code_rate_t fec_inner; /* forward error correction (see above) */
- fe_modulation_t modulation; /* modulation type (see above) */
-};
-\end{verbatim}
-DVB-T frontends are supported by the \verb|OFDMParamters| structure
-\begin{verbatim}
-struct dvb_ofdm_parameters {
- fe_bandwidth_t bandwidth;
- fe_code_rate_t code_rate_HP; /* high priority stream code rate */
- fe_code_rate_t code_rate_LP; /* low priority stream code rate */
- fe_modulation_t constellation; /* modulation type (see above) */
- fe_transmit_mode_t transmission_mode;
- fe_guard_interval_t guard_interval;
- fe_hierarchy_t hierarchy_information;
-};
-\end{verbatim}
-
-In the case of QPSK frontends the \verb|Frequency| field specifies the
-intermediate frequency, i.e. the offset which is effectively added to the
-local oscillator frequency (LOF) of the LNB.
-The intermediate frequency has to be specified in units of kHz.
-For QAM and OFDM frontends the Frequency specifies the absolute frequency
-and is given in Hz.
-
-The Inversion field can take one of these values:
-\begin{verbatim}
-typedef enum fe_spectral_inversion {
- INVERSION_OFF,
- INVERSION_ON,
- INVERSION_AUTO
-} fe_spectral_inversion_t;
-\end{verbatim}
-It indicates if spectral inversion should be presumed or not.
-In the automatic setting (\verb|INVERSION_AUTO|) the hardware will
-try to figure out the correct setting by itself.
-
-\noindent
-The possible values for the \verb|FEC_inner| field are
-\begin{verbatim}
-typedef enum fe_code_rate {
- FEC_NONE = 0,
- FEC_1_2,
- FEC_2_3,
- FEC_3_4,
- FEC_4_5,
- FEC_5_6,
- FEC_6_7,
- FEC_7_8,
- FEC_8_9,
- FEC_AUTO
-} fe_code_rate_t;
-\end{verbatim}
-which correspond to error correction rates of 1/2, 2/3, etc.,
-no error correction or auto detection.
-
-\noindent
-For cable and terrestrial frontends (QAM and OFDM) one also has to
-specify the quadrature modulation mode which can be one of the following:
-\begin{verbatim}
-typedef enum fe_modulation {
- QPSK,
- QAM_16,
- QAM_32,
- QAM_64,
- QAM_128,
- QAM_256,
- QAM_AUTO
-} fe_modulation_t;
-\end{verbatim}
-
-Finally, there are several more parameters for OFDM:
-\begin{verbatim}
-typedef enum fe_transmit_mode {
- TRANSMISSION_MODE_2K,
- TRANSMISSION_MODE_8K,
- TRANSMISSION_MODE_AUTO
-} fe_transmit_mode_t;
-\end{verbatim}
-
-\begin{verbatim}
-typedef enum fe_bandwidth {
- BANDWIDTH_8_MHZ,
- BANDWIDTH_7_MHZ,
- BANDWIDTH_6_MHZ,
- BANDWIDTH_AUTO
-} fe_bandwidth_t;
-\end{verbatim}
-
-\begin{verbatim}
-typedef enum fe_guard_interval {
- GUARD_INTERVAL_1_32,
- GUARD_INTERVAL_1_16,
- GUARD_INTERVAL_1_8,
- GUARD_INTERVAL_1_4,
- GUARD_INTERVAL_AUTO
-} fe_guard_interval_t;
-\end{verbatim}
-
-\begin{verbatim}
-typedef enum fe_hierarchy {
- HIERARCHY_NONE,
- HIERARCHY_1,
- HIERARCHY_2,
- HIERARCHY_4,
- HIERARCHY_AUTO
-} fe_hierarchy_t;
-\end{verbatim}
-
-
-\devsubsubsec{frontend events}
-\label{frontendevents}
-
-\begin{verbatim}
-struct dvb_frontend_event {
- fe_status_t status;
- struct dvb_frontend_parameters parameters;
-};
-\end{verbatim}
-
-\clearpage
-
-
-\devsubsec{Frontend Function Calls}
-
-\function{open()}{
- int open(const char *deviceName, int flags);}{
- This system call opens a named frontend device (/dev/dvb/adapter0/frontend0)
- for subsequent use. Usually the first thing to do after a successful open
- is to find out the frontend type with FE\_GET\_INFO.
-
- The device can be opened in read-only mode, which only allows
- monitoring of device status and statistics, or read/write mode, which allows
- any kind of use (e.g. performing tuning operations.)
-
- In a system with multiple front-ends, it is usually the case that multiple
- devices cannot be open in read/write mode simultaneously. As long as a
- front-end device is opened in read/write mode, other open() calls in
- read/write mode will either fail or block, depending on whether
- non-blocking or blocking mode was specified.
- A front-end device opened in blocking mode can later be put into non-blocking
- mode (and vice versa) using the F\_SETFL command of the fcntl system call.
- This is a standard system call, documented in the Linux manual page for fcntl.
- When an open() call has succeeded, the device will be ready for use in the
- specified mode. This implies that the corresponding hardware is powered up,
- and that other front-ends may have been powered down to make that possible.
-
- }{
- const char *deviceName & Name of specific video device.\\
- int flags & A bit-wise OR of the following flags:\\
- & \hspace{1em} O\_RDONLY read-only access\\
- & \hspace{1em} O\_RDWR read/write access\\
- & \hspace{1em} O\_NONBLOCK open in non-blocking mode \\
- & \hspace{1em} (blocking mode is the default)\\
- }{
- ENODEV & Device driver not loaded/available.\\
- EINTERNAL & Internal error.\\
- EBUSY & Device or resource busy.\\
- EINVAL & Invalid argument.\\
-}
-
-\function{close()}{
- int close(int fd);}{
- This system call closes a previously opened front-end device.
- After closing a front-end device, its corresponding hardware might be
- powered down automatically.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- }{
- EBADF & fd is not a valid open file descriptor.\\
-}
-
-\ifunction{FE\_READ\_STATUS}{
- int ioctl(int fd, int request = FE\_READ\_STATUS, fe\_status\_t *status);}{
- This ioctl call returns status information about the front-end.
- This call only requires read-only access to the device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_READ\_STATUS for this command.\\
- struct fe\_status\_t *status & Points to the location where the front-end
- status word is to be stored.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& status points to invalid address.\\
-}
-
-\ifunction{FE\_READ\_BER}{
- int ioctl(int fd, int request = FE\_READ\_BER, uint32\_t *ber);}{
- This ioctl call returns the bit error rate for the signal currently
- received/demodulated by the front-end. For this command, read-only access
- to the device is sufficient.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_READ\_BER for this command.\\
- uint32\_t *ber & The bit error rate is stored into *ber.\\
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& ber points to invalid address.\\
- ENOSIGNAL& There is no signal, thus no meaningful bit error
- rate. Also returned if the front-end is not turned on.\\
- ENOSYS& Function not available for this device.
-}
-
-\ifunction{FE\_READ\_SNR}{
- int ioctl(int fd, int request = FE\_READ\_SNR, int16\_t *snr);}{
- This ioctl call returns the signal-to-noise ratio for the signal currently
- received by the front-end. For this command, read-only access to the device
- is sufficient.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_READ\_SNR for this command.\\
- int16\_t *snr& The signal-to-noise ratio is stored into *snr.\\
-}{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& snr points to invalid address.\\
- ENOSIGNAL& There is no signal, thus no meaningful signal
- strength value. Also returned if front-end is not turned on.\\
- ENOSYS& Function not available for this device.
-}
-
-\ifunction{FE\_READ\_SIGNAL\_STRENGTH}{
- int ioctl( int fd, int request = FE\_READ\_SIGNAL\_STRENGTH, int16\_t *strength);
-}{
-This ioctl call returns the signal strength value for the signal currently
-received by the front-end. For this command, read-only access to the device
-is sufficient.
-}{
-int fd & File descriptor returned by a previous call to open().\\
-int request & Equals FE\_READ\_SIGNAL\_STRENGTH for this command.\\
-int16\_t *strength & The signal strength value is stored into *strength.\\
-}{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& status points to invalid address.\\
- ENOSIGNAL& There is no signal, thus no meaningful signal
- strength value. Also returned if front-end is not turned on.\\
- ENOSYS& Function not available for this device.
-}
-
-\ifunction{FE\_READ\_UNCORRECTED\_BLOCKS}{
- int ioctl( int fd, int request = FE\_READ\_UNCORRECTED\_BLOCKS, uint32\_t *ublocks); }{
- This ioctl call returns the number of uncorrected blocks detected by
- the device driver during its lifetime.
- For meaningful measurements, the increment in
- block count during a specific time interval should be calculated.
- For this command, read-only access to the device is sufficient.\\
- Note that the counter will wrap to zero after its maximum count has
- been reached.
-}{
-int fd & File descriptor returned by a previous call to open().\\
-int request & Equals FE\_READ\_UNCORRECTED\_BLOCKS for this command.\\
-uint32\_t *ublocks & The total number of uncorrected blocks seen
-by the driver so far.
-}{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& ublocks points to invalid address.\\
- ENOSYS& Function not available for this device.
-}
-
-
-\ifunction{FE\_SET\_FRONTEND}{
- int ioctl(int fd, int request = FE\_SET\_FRONTEND, struct dvb\_frontend\_parameters *p);}{
- This ioctl call starts a tuning operation using specified parameters.
- The result of this call will be successful if the parameters were valid and
- the tuning could be initiated.
- The result of the tuning operation in itself, however, will arrive
- asynchronously as an event (see documentation for FE\_GET\_EVENT
- and FrontendEvent.)
- If a new FE\_SET\_FRONTEND operation is initiated before the previous
- one was completed,
- the previous operation will be aborted in favor of the new one.
- This command requires read/write access to the device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_SET\_FRONTEND for this command.\\
- struct dvb\_frontend\_parameters *p& Points to parameters for tuning operation.\\
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& p points to invalid address.\\
- EINVAL& Maximum supported symbol rate reached.\\
-}
-
-\ifunction{FE\_GET\_FRONTEND}{
- int ioctl(int fd, int request = FE\_GET\_FRONTEND, struct dvb\_frontend\_parameters *p);}{
- This ioctl call queries the currently effective frontend parameters.
- For this command, read-only access to the device is sufficient.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_SET\_FRONTEND for this command.\\
- struct dvb\_frontend\_parameters *p& Points to parameters for tuning operation.\\
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& p points to invalid address.\\
- EINVAL& Maximum supported symbol rate reached.\\
-}
-
-\ifunction{FE\_GET\_EVENT}{
- int ioctl(int fd, int request = QPSK\_GET\_EVENT, struct dvb\_frontend\_event *ev);}{
- This ioctl call returns a frontend event if available. If an event
- is not available, the behavior depends on whether the device is in blocking
- or non-blocking mode. In the latter case, the call fails immediately with
- errno set to EWOULDBLOCK. In the former case, the call blocks until an event
- becomes available.\\
- The standard Linux poll() and/or select() system calls can be used with the
- device file descriptor to watch for new events. For select(), the file
- descriptor should be included in the exceptfds argument, and for poll(),
- POLLPRI should be specified as the wake-up condition.
- Since the event queue allocated is rather small (room for 8 events), the queue
- must be serviced regularly to avoid overflow. If an overflow happens, the
- oldest event is discarded from the queue, and an error (EOVERFLOW) occurs
- the next time the queue is read. After reporting the error condition in this
- fashion, subsequent FE\_GET\_EVENT calls will return events from the queue as
- usual.\\
- For the sake of implementation simplicity, this command requires read/write
- access to the device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_GET\_EVENT for this command.\\
- struct dvb\_frontend\_event *ev & Points to the location where the event,\\
- & if any, is to be stored.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& ev points to invalid address.\\
- EWOULDBLOCK & There is no event pending, and the device is in
- non-blocking mode.\\
- EOVERFLOW &\\
-& Overflow in event queue - one or more events were lost.\\
-}
-
-\ifunction{FE\_GET\_INFO}{
-\label{fegetinfo}
- int ioctl(int fd, int request = FE\_GET\_INFO, struct dvb\_frontend\_info *info);}{
- This ioctl call returns information about the front-end.
- This call only requires read-only access to the device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_GET\_INFO for this command.\\
- struct dvb\_frontend\_info *info & Points to the location where the front-end
- information is to be stored.
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EFAULT& info points to invalid address.\\
-}
-
-\ifunction{FE\_DISEQC\_RESET\_OVERLOAD}{
- int ioctl(int fd, int request = FE\_DISEQC\_RESET\_OVERLOAD);}{
- If the bus has been automatically powered off due to power overload, this
- ioctl call restores the power to the bus. The call requires read/write
- access to the device.
- This call has no effect if the device is manually powered off.
- Not all DVB adapters support this ioctl.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_DISEQC\_RESET\_OVERLOAD for this command.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EPERM & Permission denied (needs read/write access).\\
- EINTERNAL & Internal error in the device driver.\\
-}
-
-
-\ifunction{FE\_DISEQC\_SEND\_MASTER\_CMD}{
-int ioctl(int fd, int request = FE\_DISEQC\_SEND\_MASTER\_CMD, struct dvb\_diseqc\_master\_cmd *cmd);}{
- This ioctl call is used to send a a DiSEqC command.\\
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_DISEQC\_SEND\_MASTER\_CMD for this command.\\
- struct dvb\_diseqc\_master\_cmd *cmd & Pointer to the command to be transmitted.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EFAULT & Seq points to an invalid address.\\
- EINVAL & The data structure referred to by seq is invalid in some way.\\
- EPERM & Permission denied (needs read/write access).\\
- EINTERNAL & Internal error in the device driver.\\
-}
-
-\ifunction{FE\_DISEQC\_RECV\_SLAVE\_REPLY}{
-int ioctl(int fd, int request = FE\_DISEQC\_RECV\_SLAVE\_REPLY, struct dvb\_diseqc\_slave\_reply *reply);}{
-This ioctl call is used to receive reply to a DiSEqC 2.0 command.\\
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_DISEQC\_RECV\_SLAVE\_REPLY for this command.\\
- struct dvb\_diseqc\_slave\_reply *reply & Pointer to the command to be received.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EFAULT & Seq points to an invalid address.\\
- EINVAL & The data structure referred to by seq is invalid in some way.\\
- EPERM & Permission denied (needs read/write access).\\
- EINTERNAL & Internal error in the device driver.\\
-}
-
-\ifunction{FE\_DISEQC\_SEND\_BURST}{
-int ioctl(int fd, int request = FE\_DISEQC\_SEND\_BURST, fe\_sec\_mini\_cmd\_t burst);}{
-This ioctl call is used to send a 22KHz tone burst.\\
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals FE\_DISEQC\_SEND\_BURST for this command.\\
- fe\_sec\_mini\_cmd\_t burst & burst A or B.\\
- }{
- EBADF & fd is not a valid file descriptor.\\
- EFAULT & Seq points to an invalid address.\\
- EINVAL & The data structure referred to by seq is invalid in some way.\\
- EPERM & Permission denied (needs read/write access).\\
- EINTERNAL & Internal error in the device driver.\\
-}
-
-
-\ifunction{FE\_SET\_TONE}{
-int ioctl(int fd, int request = FE\_SET\_TONE, fe\_sec\_tone\_mode\_t tone);}{
-This call is used to set the generation of the continuous 22kHz tone.
-This call requires read/write permissions.
-}{
-int fd & File descriptor returned by a previous call to open().\\
-int request & Equals FE\_SET\_TONE for this command.\\
-fe\_sec\_tone\_mode\_t tone & The requested tone generation mode (on/off).\\
-}{
-ENODEV & Device driver not loaded/available.\\
-EBUSY & Device or resource busy.\\
-EINVAL & Invalid argument.\\
-EPERM & File not opened with read permissions.\\
-EINTERNAL & Internal error in the device driver.\\
-}
-
-
-\ifunction{FE\_SET\_VOLTAGE}{
-int ioctl(int fd, int request = FE\_SET\_VOLTAGE, fe\_sec\_voltage\_t voltage);}{
-This call is used to set the bus voltage.
-This call requires read/write permissions.
-}{
-int fd & File descriptor returned by a previous call to open().\\
-int request & Equals FE\_SET\_VOLTAGE for this command.\\
-fe\_sec\_voltage\_t voltage & The requested bus voltage.\\
-}{
-ENODEV & Device driver not loaded/available.\\
-EBUSY & Device or resource busy.\\
-EINVAL & Invalid argument.\\
-EPERM & File not opened with read permissions.\\
-EINTERNAL & Internal error in the device driver.\\
-}
-
-\ifunction{FE\_ENABLE\_HIGH\_LNB\_VOLTAGE}{
-int ioctl(int fd, int request = FE\_ENABLE\_HIGH\_LNB\_VOLTAGE, int high);}{
-If high != 0 enables slightly higher voltages instead of 13/18V
-(to compensate for long cables).
-This call requires read/write permissions.
-Not all DVB adapters support this ioctl.
-}{
-int fd & File descriptor returned by a previous call to open().\\
-int request & Equals FE\_SET\_VOLTAGE for this command.\\
-int high & The requested bus voltage.\\
-}{
-ENODEV & Device driver not loaded/available.\\
-EBUSY & Device or resource busy.\\
-EINVAL & Invalid argument.\\
-EPERM & File not opened with read permissions.\\
-EINTERNAL & Internal error in the device driver.\\
-}
-
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/getbb b/dvb-spec/dvbapi/getbb
deleted file mode 100755
index 004714d3a..000000000
--- a/dvb-spec/dvbapi/getbb
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-f=`grep BoundingBox $2 | cut -d' ' -f2,3,4,5`
-g=`\
-echo $2" llx=";(echo $f|cut -d' ' -f1 );\
-echo " lly=";(echo $f|cut -d' ' -f2 );\
-echo " urx=";(echo $f|cut -d' ' -f3 );\
-echo " ury=";(echo $f|cut -d' ' -f4 );\
-echo " rwi=";(echo $f|cut -d' ' -f3 );\
-echo "0"
-`
-h=`echo $g| sed "s/= /=/g" | sed "s/ 0/0/g"`
-cat $1 | sed "s/psfile=$2/psfile=$h/"
diff --git a/dvb-spec/dvbapi/intro.tex b/dvb-spec/dvbapi/intro.tex
deleted file mode 100644
index 613bcd6c8..000000000
--- a/dvb-spec/dvbapi/intro.tex
+++ /dev/null
@@ -1,148 +0,0 @@
-\chapter{Introduction}
-%\addcontentsline{toc}{part}{Introduction}
-%\chaptermark{Introduction}
-
-\section{What you need to know}
-
-The reader of this document is required to have some knowledge in the
-area of digital video broadcasting (DVB) and should be familiar with
-part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222),
-i.e you should know what a program/transport stream (PS/TS) is and what is
-meant by a packetized elementary stream (PES) or an I-frame.
-
-Various DVB standards documents are available from
-\texttt{http://www.dvb.org/} and/or \texttt{http://www.etsi.org/}.
-
-It is also necessary to know how to access unix/linux devices and how
-to use ioctl calls. This also includes the knowledge of C or C++.
-
-\section{History}
-
-The first API for DVB cards we used at Convergence in late 1999
-was an extension of the Video4Linux API which was primarily
-developed for frame grabber cards.
-As such it was not really well suited to be used for DVB cards and
-their new features like recording MPEG streams and filtering several
-section and PES data streams at the same time.
-
-In early 2000, we were approached by Nokia with a proposal for a new
-standard Linux DVB API.
-As a commitment to the development of terminals based on open standards,
-Nokia and Convergence made it available to all Linux developers and
-published it on \texttt{http://www.linuxtv.org/} in September 2000.
-Convergence is the maintainer of the Linux DVB API.
-Together with the LinuxTV community (i.e. you, the reader of this document),
-the Linux DVB API will be constantly reviewed and improved.
-With the Linux driver for the Siemens/Hauppauge DVB PCI card Convergence
-provides a first implementation of the Linux DVB API.
-
-
-\newpage
-\section{Overview}
-
-\begin{figure}[htbp]
- \begin{center}
- \includegraphics{dvbstb.ps}
- \caption{Components of a DVB card/STB}
- \label{fig:dvbstb}
- \end{center}
-\end{figure}
-
-
-A DVB PCI card or DVB set-top-box (STB) usually consists of the following
-main hardware components:
-\begin{itemize}
-\item Frontend consisting of tuner and DVB demodulator
-
-Here the raw signal reaches the DVB hardware from a satellite dish or antenna
-or directly from cable. The frontend down-converts and demodulates
-this signal into an MPEG transport stream (TS). In case of a satellite
-frontend, this includes a facility for satellite equipment control (SEC),
-which allows control of LNB polarization, multi feed switches or
-dish rotors.
-
-\item Conditional Access (CA) hardware like CI adapters and smartcard slots
-
-The complete TS is passed through the CA hardware. Programs to which
-the user has access (controlled by the smart card) are decoded in real
-time and re-inserted into the TS.
-
-\item Demultiplexer which filters the incoming DVB stream
-
-The demultiplexer splits the TS into its components like audio and video
-streams. Besides usually several of such audio and video streams it also
-contains data streams with information about the programs offered in this
-or other streams of the same provider.
-
-\item MPEG2 audio and video decoder
-
-The main targets of the demultiplexer are the MPEG2 audio and video
-decoders. After decoding they pass on the uncompressed audio
-and video to the computer screen or (through a PAL/NTSC encoder) to
-a TV set.
-\end{itemize}
-
-Figure \ref{fig:dvbstb} shows a crude schematic of the control and data flow
-between those components.
-
-On a DVB PCI card not all of these have to be present since some
-functionality can be provided by the main CPU of the PC (e.g. MPEG picture
-and sound decoding) or is not needed (e.g. for data-only uses like
-``internet over satellite'').
-Also not every card or STB provides conditional access hardware.
-
-\section{Linux DVB Devices}
-
-The Linux DVB API lets you control these hardware components
-through currently six Unix-style character devices for
-video, audio, frontend, demux, CA and IP-over-DVB networking.
-The video and audio devices control the MPEG2 decoder hardware,
-the frontend device the tuner and the DVB demodulator.
-The demux device gives you control over the PES and section filters
-of the hardware. If the hardware does not support filtering these filters
-can be implemented in software.
-Finally, the CA device controls all the conditional access capabilities
-of the hardware. It can depend on the individual security requirements
-of the platform, if and how many of the CA functions are made available
-to the application through this device.
-
-\smallskip
-All devices can be found in the \texttt{/dev} tree under
-\texttt{/dev/dvb}. The individual devices are called
-\begin{itemize}
-\item \texttt{/dev/dvb/adapterN/audioM},
-\item \texttt{/dev/dvb/adapterN/videoM},
-\item \texttt{/dev/dvb/adapterN/frontendM},
-\item \texttt{/dev/dvb/adapterN/netM},
-\item \texttt{/dev/dvb/adapterN/demuxM},
-\item \texttt{/dev/dvb/adapterN/caM},
-\end{itemize}
-where N enumerates the DVB PCI cards in a system starting from~0,
-and M enumerates the devices of each type within each adapter, starting
-from~0, too.
-We will omit the ``\texttt{/dev/dvb/adapterN/}'' in the further dicussion of
-these devices. The naming scheme for the devices is the same wheter devfs
-is used or not.
-
-More details about the data structures and function calls of
-all the devices are described in the following chapters.
-
-\section{API include files}
-
-For each of the DVB devices a corresponding include file
-exists. The DVB API include files should be included
-in application sources with a partial path like:
-
-\begin{verbatim}
-#include <linux/dvb/frontend.h>
-\end{verbatim}
-
-To enable applications to support different API version, an additional
-include file \texttt{linux/dvb/version.h} exists, which defines the
-constant \texttt{DVB\_API\_VERSION}. This document describes
-\texttt{DVB\_API\_VERSION~3}.
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/kdapi.tex b/dvb-spec/dvbapi/kdapi.tex
deleted file mode 100644
index f7fc69353..000000000
--- a/dvb-spec/dvbapi/kdapi.tex
+++ /dev/null
@@ -1,1014 +0,0 @@
-\devsec{Kernel Demux API}
-
-The kernel demux API defines a driver-internal interface
-for registering low-level, hardware specific driver to a
-hardware independent demux layer. It is only of interest
-for DVB device driver writers. The header file for this
-API is named \texttt{demux.h} and located in
-\texttt{drivers/media/dvb/dvb-core}.
-
-Maintainer note: This section must be reviewed. It is probably out of date.
-
-\devsubsec{Kernel Demux Data Types}
-
-\devsubsubsec{dmx\_success\_t}
-\label{dmxsuccesst}
-
-\begin{verbatim}
-typedef enum {
- DMX_OK = 0, /* Received Ok */
- DMX_LENGTH_ERROR, /* Incorrect length */
- DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */
- DMX_CRC_ERROR, /* Incorrect CRC */
- DMX_FRAME_ERROR, /* Frame alignment error */
- DMX_FIFO_ERROR, /* Receiver FIFO overrun */
- DMX_MISSED_ERROR /* Receiver missed packet */
-} dmx_success_t;
-\end{verbatim}
-
-
-\devsubsubsec{TS filter types}
-\label{tsfiltertypes}
-
-\begin{verbatim}
-/*--------------------------------------------------------------------------*/
-/* TS packet reception */
-/*--------------------------------------------------------------------------*/
-
-/* TS filter type for set_type() */
-
-#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */
-#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS
- payload (<=184 bytes per packet) to callback */
-#define TS_DECODER 4 /* send stream to built-in decoder (if present) */
-\end{verbatim}
-
-
-\devsubsubsec{dmx\_ts\_pes\_t}
-\label{dmxtspest}
-
-The structure
-\begin{verbatim}
-typedef enum
-{
- DMX_TS_PES_AUDIO, /* also send packets to audio decoder (if it exists) */
- DMX_TS_PES_VIDEO, /* ... */
- DMX_TS_PES_TELETEXT,
- DMX_TS_PES_SUBTITLE,
- DMX_TS_PES_PCR,
- DMX_TS_PES_OTHER,
-} dmx_ts_pes_t;
-\end{verbatim}
-describes the PES type for filters which write to
-a built-in decoder.
-The correspond (and should be kept identical) to the types in
-the demux device.
-
-\begin{verbatim}
-struct dmx_ts_feed_s {
- int is_filtering; /* Set to non-zero when filtering in progress */
- struct dmx_demux_s* parent; /* Back-pointer */
- void* priv; /* Pointer to private data of the API client */
- int (*set) (struct dmx_ts_feed_s* feed,
- __u16 pid,
- size_t callback_length,
- size_t circular_buffer_size,
- int descramble,
- struct timespec timeout);
- int (*start_filtering) (struct dmx_ts_feed_s* feed);
- int (*stop_filtering) (struct dmx_ts_feed_s* feed);
- int (*set_type) (struct dmx_ts_feed_s* feed,
- int type,
- dmx_ts_pes_t pes_type);
-};
-
-typedef struct dmx_ts_feed_s dmx_ts_feed_t;
-\end{verbatim}
-
-\begin{verbatim}
-/*--------------------------------------------------------------------------*/
-/* PES packet reception (not supported yet) */
-/*--------------------------------------------------------------------------*/
-
-typedef struct dmx_pes_filter_s {
- struct dmx_pes_s* parent; /* Back-pointer */
- void* priv; /* Pointer to private data of the API client */
-} dmx_pes_filter_t;
-\end{verbatim}
-
-\begin{verbatim}
-typedef struct dmx_pes_feed_s {
- int is_filtering; /* Set to non-zero when filtering in progress */
- struct dmx_demux_s* parent; /* Back-pointer */
- void* priv; /* Pointer to private data of the API client */
- int (*set) (struct dmx_pes_feed_s* feed,
- __u16 pid,
- size_t circular_buffer_size,
- int descramble,
- struct timespec timeout);
- int (*start_filtering) (struct dmx_pes_feed_s* feed);
- int (*stop_filtering) (struct dmx_pes_feed_s* feed);
- int (*allocate_filter) (struct dmx_pes_feed_s* feed,
- dmx_pes_filter_t** filter);
- int (*release_filter) (struct dmx_pes_feed_s* feed,
- dmx_pes_filter_t* filter);
-} dmx_pes_feed_t;
-\end{verbatim}
-
-
-\label{sectionfilter}
-\begin{verbatim}
-typedef struct {
- __u8 filter_value [DMX_MAX_FILTER_SIZE];
- __u8 filter_mask [DMX_MAX_FILTER_SIZE];
- struct dmx_section_feed_s* parent; /* Back-pointer */
- void* priv; /* Pointer to private data of the API client */
-} dmx_section_filter_t;
-\end{verbatim}
-
-\begin{verbatim}
-struct dmx_section_feed_s {
- int is_filtering; /* Set to non-zero when filtering in progress */
- struct dmx_demux_s* parent; /* Back-pointer */
- void* priv; /* Pointer to private data of the API client */
- int (*set) (struct dmx_section_feed_s* feed,
- __u16 pid,
- size_t circular_buffer_size,
- int descramble,
- int check_crc);
- int (*allocate_filter) (struct dmx_section_feed_s* feed,
- dmx_section_filter_t** filter);
- int (*release_filter) (struct dmx_section_feed_s* feed,
- dmx_section_filter_t* filter);
- int (*start_filtering) (struct dmx_section_feed_s* feed);
- int (*stop_filtering) (struct dmx_section_feed_s* feed);
-};
-typedef struct dmx_section_feed_s dmx_section_feed_t;
-
-/*--------------------------------------------------------------------------*/
-/* Callback functions */
-/*--------------------------------------------------------------------------*/
-
-typedef int (*dmx_ts_cb) ( __u8 * buffer1,
- size_t buffer1_length,
- __u8 * buffer2,
- size_t buffer2_length,
- dmx_ts_feed_t* source,
- dmx_success_t success);
-
-typedef int (*dmx_section_cb) ( __u8 * buffer1,
- size_t buffer1_len,
- __u8 * buffer2,
- size_t buffer2_len,
- dmx_section_filter_t * source,
- dmx_success_t success);
-
-typedef int (*dmx_pes_cb) ( __u8 * buffer1,
- size_t buffer1_len,
- __u8 * buffer2,
- size_t buffer2_len,
- dmx_pes_filter_t* source,
- dmx_success_t success);
-
-/*--------------------------------------------------------------------------*/
-/* DVB Front-End */
-/*--------------------------------------------------------------------------*/
-
-typedef enum {
- DMX_OTHER_FE = 0,
- DMX_SATELLITE_FE,
- DMX_CABLE_FE,
- DMX_TERRESTRIAL_FE,
- DMX_LVDS_FE,
- DMX_ASI_FE, /* DVB-ASI interface */
- DMX_MEMORY_FE
-} dmx_frontend_source_t;
-
-typedef struct {
- /* The following char* fields point to NULL terminated strings */
- char* id; /* Unique front-end identifier */
- char* vendor; /* Name of the front-end vendor */
- char* model; /* Name of the front-end model */
- struct list_head connectivity_list; /* List of front-ends that can
- be connected to a particular
- demux */
- void* priv; /* Pointer to private data of the API client */
- dmx_frontend_source_t source;
-} dmx_frontend_t;
-
-/*--------------------------------------------------------------------------*/
-/* MPEG-2 TS Demux */
-/*--------------------------------------------------------------------------*/
-
-/*
- * Flags OR'ed in the capabilites field of struct dmx_demux_s.
- */
-
-#define DMX_TS_FILTERING 1
-#define DMX_PES_FILTERING 2
-#define DMX_SECTION_FILTERING 4
-#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */
-#define DMX_CRC_CHECKING 16
-#define DMX_TS_DESCRAMBLING 32
-#define DMX_SECTION_PAYLOAD_DESCRAMBLING 64
-#define DMX_MAC_ADDRESS_DESCRAMBLING 128
-\end{verbatim}
-
-\devsubsubsec{demux\_demux\_t}
-\label{demuxdemuxt}
-
-\begin{verbatim}
-/*
- * DMX_FE_ENTRY(): Casts elements in the list of registered
- * front-ends from the generic type struct list_head
- * to the type * dmx_frontend_t
- *.
-*/
-
-#define DMX_FE_ENTRY(list) list_entry(list, dmx_frontend_t, connectivity_list)
-
-struct dmx_demux_s {
- /* The following char* fields point to NULL terminated strings */
- char* id; /* Unique demux identifier */
- char* vendor; /* Name of the demux vendor */
- char* model; /* Name of the demux model */
- __u32 capabilities; /* Bitfield of capability flags */
- dmx_frontend_t* frontend; /* Front-end connected to the demux */
- struct list_head reg_list; /* List of registered demuxes */
- void* priv; /* Pointer to private data of the API client */
- int users; /* Number of users */
- int (*open) (struct dmx_demux_s* demux);
- int (*close) (struct dmx_demux_s* demux);
- int (*write) (struct dmx_demux_s* demux, const char* buf, size_t count);
- int (*allocate_ts_feed) (struct dmx_demux_s* demux,
- dmx_ts_feed_t** feed,
- dmx_ts_cb callback);
- int (*release_ts_feed) (struct dmx_demux_s* demux,
- dmx_ts_feed_t* feed);
- int (*allocate_pes_feed) (struct dmx_demux_s* demux,
- dmx_pes_feed_t** feed,
- dmx_pes_cb callback);
- int (*release_pes_feed) (struct dmx_demux_s* demux,
- dmx_pes_feed_t* feed);
- int (*allocate_section_feed) (struct dmx_demux_s* demux,
- dmx_section_feed_t** feed,
- dmx_section_cb callback);
- int (*release_section_feed) (struct dmx_demux_s* demux,
- dmx_section_feed_t* feed);
- int (*descramble_mac_address) (struct dmx_demux_s* demux,
- __u8* buffer1,
- size_t buffer1_length,
- __u8* buffer2,
- size_t buffer2_length,
- __u16 pid);
- int (*descramble_section_payload) (struct dmx_demux_s* demux,
- __u8* buffer1,
- size_t buffer1_length,
- __u8* buffer2, size_t buffer2_length,
- __u16 pid);
- int (*add_frontend) (struct dmx_demux_s* demux,
- dmx_frontend_t* frontend);
- int (*remove_frontend) (struct dmx_demux_s* demux,
- dmx_frontend_t* frontend);
- struct list_head* (*get_frontends) (struct dmx_demux_s* demux);
- int (*connect_frontend) (struct dmx_demux_s* demux,
- dmx_frontend_t* frontend);
- int (*disconnect_frontend) (struct dmx_demux_s* demux);
-
-
- /* added because js cannot keep track of these himself */
- int (*get_pes_pids) (struct dmx_demux_s* demux, __u16 *pids);
-};
-typedef struct dmx_demux_s dmx_demux_t;
-\end{verbatim}
-
-
-\devsubsubsec{Demux directory}
-\label{demuxdir}
-
-\begin{verbatim}
-/*
- * DMX_DIR_ENTRY(): Casts elements in the list of registered
- * demuxes from the generic type struct list_head* to the type dmx_demux_t
- *.
- */
-
-#define DMX_DIR_ENTRY(list) list_entry(list, dmx_demux_t, reg_list)
-
-int dmx_register_demux (dmx_demux_t* demux);
-int dmx_unregister_demux (dmx_demux_t* demux);
-struct list_head* dmx_get_demuxes (void);
-\end{verbatim}
-
-\clearpage
-
-\devsubsec{Demux Directory API}
-
-The demux directory is a Linux kernel-wide facility for registering and
-accessing the MPEG-2 TS demuxes in the system. Run-time registering and
-unregistering of demux drivers is possible using this API.
-
-All demux drivers in the directory implement the abstract interface dmx\_demux\_t.
-
-\kifunction{dmx\_register\_demux()}{
- int dmx\_register\_demux ( dmx\_demux\_t *demux )
- }{
- This function makes a demux driver interface available to the Linux kernel.
- It is usually called by the init\_module() function of the kernel module that
- contains the demux driver. The caller of this function is responsible for
- allocating dynamic or static memory for the demux structure and for initializing
- its fields before calling this function.
- The memory allocated for the demux structure must not be freed before calling
- dmx\_unregister\_demux(),
- }{
- dmx\_demux\_t* demux & Pointer to the demux structure.
- }{
- 0 & The function was completed without errors.\\
- -EEXIST & A demux with the same value of the id field
- already stored in the directory.\\
- -ENOSPC & No space left in the directory.
-}
-
-\kifunction{dmx\_unregister\_demux()}{
- int dmx\_unregister\_demux ( dmx\_demux\_t *demux )
- }{
- This function is called to indicate that the given demux interface is no longer
- available. The caller of this function is responsible for freeing the memory of
- the demux structure, if it was dynamically allocated before calling
- dmx\_register\_demux().
- The cleanup\_module() function of the kernel module that contains the demux
- driver should call this function. Note that this function fails if the demux
- is currently in use, i.e., release\_demux() has not been called for the
- interface.
- }{
- dmx\_demux\_t* demux & Pointer to the demux structure which is to be unregistered.
- }{
- 0 & The function was completed without errors.\\
- ENODEV & The specified demux is not registered in the demux directory.\\
- EBUSY & The specified demux is currently in use.
-}
-
-\kifunction{dmx\_get\_demuxes()}{
- struct list\_head *dmx\_get\_demuxes ()
- }{
- Provides the caller with the list of registered demux interfaces, using the
- standard list structure defined in the include file linux/list.h.
- The include file demux.h defines the macro DMX\_DIR\_ENTRY() for converting an
- element of the generic type struct list\_head* to the type dmx\_demux\_t*.
- The caller must not free the memory of any of the elements obtained via this
- function call.
- }{
- none
- }{
- struct list\_head * &
- A list of demux interfaces, or NULL in the case of an empty list.
-}
-
-\clearpage
-
-\devsubsec{Demux API}
-
-The demux API should be implemented for each demux in the system. It is used to
-select the TS source of a demux and to manage the demux resources. When the
-demux client allocates a resource via the demux API, it receives a pointer
-to the API of that resource.
-
-Each demux receives its TS input from a DVB front-end or from memory, as
-set via the demux API. In a system with more than one front-end, the API can
-be used to select one of the DVB front-ends as a TS source for a demux, unless
-this is fixed in the HW platform. The demux API only controls front-ends
-regarding their connections with demuxes; the APIs used to set the other
-front-end parameters, such as tuning, are not defined in this document.
-
-The functions that implement the abstract interface demux should be defined
-static or module private and registered to the Demux Directory for external
-access. It is not necessary to implement every function in the demux\_t struct,
-however (for example, a demux interface might support Section filtering, but
-not TS or PES filtering). The API client is expected to check the value of any
-function pointer before calling the function: the value of NULL means ``function
-not available''.
-
-Whenever the functions of the demux API modify shared data, the possibilities
-of lost update and race condition problems should be addressed, e.g. by
-protecting parts of code with mutexes. This is especially important on
-multi-processor hosts.
-
-Note that functions called from a bottom half context must not sleep, at least
-in the 2.2.x kernels. Even a simple memory allocation can result in a kernel
-thread being put to sleep if swapping is needed. For example, the Linux kernel
-calls the functions of a network device interface from a bottom half context.
-Thus, if a demux API function is called from network device code, the function
-must not sleep.
-
-\kfunction{open()}{
- int open ( demux\_t* demux );
- }{
- This function reserves the demux for use by the caller and, if necessary,
- initializes the demux. When the demux is no longer needed, the function close()
- should be called.
- It should be possible for multiple clients to access the demux at the same time.
- Thus, the function implementation should increment the demux usage count when
- open() is called and decrement it when close() is called.
- }{
- demux\_t* demux & Pointer to the demux API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EUSERS & Maximum usage count reached.\\
- -EINVAL & Bad parameter.
-}
-
-\kfunction{close()}{
- int close(demux\_t* demux);
- }{
- This function reserves the demux for use by the caller and, if necessary,
- initializes the demux. When the demux is no longer needed, the function close()
- should be called.
- It should be possible for multiple clients to access the demux at the same time.
- Thus, the function implementation should increment the demux usage count when
- open() is called and decrement it when close() is called.
- }{
- demux\_t* demux & Pointer to the demux API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -ENODEV & The demux was not in use.\\
- -EINVAL & Bad parameter.
-}
-
-\kfunction{write()}{
- int write(demux\_t* demux, const char* buf, size\_t count);
- }{
- This function provides the demux driver with a memory buffer containing TS
- packets. Instead of receiving TS packets from the DVB front-end, the demux
- driver software will read packets from memory. Any clients of this demux
- with active TS, PES or Section filters will receive filtered data via the Demux
- callback API (see 0). The function returns when all the data in the buffer has
- been consumed by the demux.
- Demux hardware typically cannot read TS from memory. If this is the case,
- memory-based filtering has to be implemented entirely in software.
- }{
- demux\_t* demux & Pointer to the demux API and instance data.\\
- const char* buf & Pointer to the TS data in kernel-space memory.\\
- size\_t length & Length of the TS data.
- }{
- 0 & The function was completed without errors.\\
- -ENOSYS & The command is not implemented.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{allocate\_ts\_feed()}{
- int allocate\_ts\_feed(dmx\_demux\_t* demux,
- dmx\_ts\_feed\_t** feed, dmx\_ts\_cb callback);
- }{
- Allocates a new TS feed, which is used to filter the TS packets carrying a
- certain PID.
- The TS feed normally corresponds to a hardware PID filter on the demux chip.
- }{
- demux\_t* demux & Pointer to the demux API and instance data.\\
- dmx\_ts\_feed\_t** feed & Pointer to the TS feed API and instance data.\\
- dmx\_ts\_cb callback & Pointer to the callback function for
- passing received TS packet
- }{
- 0 & The function was completed without errors.\\
- -EBUSY & No more TS feeds available.\\
- -ENOSYS & The command is not implemented.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{release\_ts\_feed()}{
- int release\_ts\_feed(dmx\_demux\_t* demux, dmx\_ts\_feed\_t* feed);
- }{
- Releases the resources allocated with allocate\_ts\_feed(). Any filtering in progress
- on the TS feed should be stopped before calling this function.
- }{
- demux\_t* demux & Pointer to the demux API and instance data.\\
- dmx\_ts\_feed\_t* feed & Pointer to the TS feed API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{allocate\_section\_feed()}{
- int allocate\_section\_feed(dmx\_demux\_t* demux, dmx\_section\_feed\_t **feed,
- dmx\_section\_cb callback);
- }{
- Allocates a new section feed, i.e. a demux resource for filtering and
- receiving sections.
- On platforms with hardware support for section filtering, a section feed is directly
- mapped to the demux HW. On other platforms, TS packets are first PID filtered in
- hardware and a hardware section filter then emulated in software.
- The caller obtains an API pointer of type dmx\_section\_feed\_t as an out parameter.
- Using this API the caller can set filtering parameters and start receiving sections.
- }{
- demux\_t *demux & Pointer to the demux API and instance data.\\
- dmx\_section\_feed\_t **feed & Pointer to the section feed API and instance data.\\
- dmx\_section\_cb callback & Pointer to the callback function for
- passing received sections.
- }{
- 0 & The function was completed without errors.\\
- -EBUSY & No more section feeds available.\\
- -ENOSYS & The command is not implemented.\\
- -EINVAL & Bad parameter.
-}
-
-
-\kifunction{release\_section\_feed()}{
- int release\_section\_feed(dmx\_demux\_t* demux, dmx\_section\_feed\_t *feed);
- }{
- Releases the resources allocated with allocate\_section\_feed(), including allocated
- filters.
- Any filtering in progress on the section feed should be stopped before calling
- this function.
- }{
- demux\_t *demux & Pointer to the demux API and instance data.\\
- dmx\_section\_feed\_t *feed & Pointer to the section feed API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{descramble\_mac\_address()}{
- int descramble\_mac\_address(dmx\_demux\_t* demux,
- \_\_u8 *buffer1, size\_t buffer1\_length,
- \_\_u8 *buffer2, size\_t buffer2\_length, \_\_u16 pid);
- }{
- This function runs a descrambling algorithm on the destination MAC address field of a
- DVB Datagram Section, replacing the original address with its un-encrypted version.
- Otherwise, the description on the function descramble\_section\_payload() applies
- also to this function.
- }{
- dmx\_demux\_t *demux & Pointer to the demux API and instance data.\\
- \_\_u8 *buffer1 & Pointer to the first byte of the section.\\
- size\_t buffer1\_length & Length of the section data, including headers and CRC,
- in buffer1.\\
- \_\_u8* buffer2 & Pointer to the tail of the section data, or NULL. The pointer has a
- non-NULL value if the section wraps
- past the end of a circular buffer.\\
- size\_t buffer2\_length & Length of the section data,
- including headers and CRC, in buffer2.\\
- \_\_u16 pid & The PID on which the section was received. Useful for obtaining the
- descrambling key, e.g. from a DVB Common Access facility.
- }{
- 0 & The function was completed without errors.\\
- -ENOSYS & No descrambling facility available.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{descramble\_section\_payload()}{
- int descramble\_section\_payload(dmx\_demux\_t* demux,
- \_\_u8 *buffer1, size\_t buffer1\_length, \_\_u8 *buffer2, size\_t
- buffer2\_length, \_\_u16 pid);
- }{
- This function runs a descrambling algorithm on the payload of a DVB Datagram
- Section, replacing the original payload with its un-encrypted version.
- The function will
- be called from the demux API implementation; the API client need
- not call this function directly.
- Section-level scrambling algorithms are currently standardized only for DVB-RCC
- (return channel over 2-directional cable TV network) systems. For all other DVB
- networks, encryption schemes are likely to be proprietary to each data broadcaster.
- Thus, it is expected that this function pointer will have the value of NULL
- (i.e., function not available) in most demux API implementations.
- Nevertheless, it should be possible
- to use the function pointer as a hook for dynamically adding a ``plug-in''
- descrambling facility to a demux driver.\\
- While this function is not needed with hardware-based section descrambling, the
- descramble\_section\_payload function pointer can be used to override the default
- hardware-based descrambling algorithm: if the function pointer has a non-NULL value,
- the corresponding function should be used instead of any descrambling hardware.
- }{
- dmx\_demux\_t *demux & Pointer to the demux API and instance data.\\
- \_\_u8 *buffer1 & Pointer to the first byte of the section.\\
- size\_t buffer1\_length & Length of the section data, including headers and CRC, in
- buffer1.\\
- \_\_u8 *buffer2 & Pointer to the tail of the section data, or NULL. The pointer has a
- non-NULL value if the section wraps
- past the end of a circular buffer.\\
- size\_t buffer2\_length & Length of the section data, including headers and CRC, in
- buffer2.\\
- \_\_u16 pid & The PID on which the section was received. Useful for obtaining the
- descrambling key, e.g. from a DVB Common Access facility.
- }{
- 0 & The function was completed without errors.\\
- -ENOSYS & No descrambling facility available.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{add\_frontend()}{
- int add\_frontend(dmx\_demux\_t *demux, dmx\_frontend\_t *frontend);
- }{
- Registers a connectivity between a demux and a front-end, i.e., indicates that the
- demux can be connected via a call to connect\_frontend() to use the given front-end
- as a TS source. The client of this function has to allocate dynamic or static
- memory for
- the frontend structure and initialize its fields before calling this function.
- This function is normally called during the driver initialization.
- The caller must not free
- the memory of the frontend struct before successfully calling remove\_frontend().
- }{
- dmx\_demux\_t* demux & Pointer to the demux API and instance data.\\
- dmx\_frontend\_t* frontend & Pointer to the front-end instance data.
- }{
- 0 & The function was completed without errors.\\
- -EEXIST & A front-end with the same value of the id field already registered.\\
- -EINUSE & The demux is in use.\\
- -ENOMEM & No more front-ends can be added.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{remove\_frontend()}{
- int remove\_frontend(dmx\_demux\_t* demux, dmx\_frontend\_t* frontend);
- }{
- Indicates that the given front-end, registered by a call to add\_frontend(), can no
- longer be connected as a TS source by this demux. The function should be called
- when a front-end driver or a demux driver is removed from the system. If the front-end
- is in use, the function fails with the return value of -EBUSY.
- After successfully calling this function, the caller can free the memory of
- the frontend struct if it was dynamically allocated before the add\_frontend()
- operation.
- }{
- dmx\_demux\_t* demux & Pointer to the demux API and instance data.\\
- dmx\_frontend\_t* frontend & Pointer to the front-end instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.\\
- -EBUSY & The front-end is in use, i.e. a call to
- connect\_frontend() has not been followed by
- a call to disconnect\_frontend().
-}
-
-\kifunction{get\_frontends()}{
- struct list\_head* get\_frontends(dmx\_demux\_t* demux);
- }{
- Provides the APIs of the front-ends that have been registered for this demux. Any of
- the front-ends obtained with this call can be used as a parameter for
- connect\_frontend().\\
- The include file demux.h contains the macro DMX\_FE\_ENTRY() for converting an
- element of the generic type struct list\_head* to the type dmx\_frontend\_t*.
- The caller must not free the memory of any of the elements obtained via this function
- call.
- }{
- dmx\_demux\_t* demux & Pointer to the demux API and instance data.
- }{
- dmx\_demux\_t* & A list of front-end interfaces, or NULL in the case of an empty list.
-}
-
-
-\kifunction{connect\_frontend()}{
- int connect\_frontend(dmx\_demux\_t* demux, dmx\_frontend\_t* frontend);
- }{
- Connects the TS output of the front-end to the input of the demux. A demux can only
- be connected to a front-end registered to the demux with the function
- add\_frontend().\\
- It may or may not be possible to connect multiple demuxes to the same front-end,
- depending on the capabilities of the HW platform. When not used, the front-end should
- be released by calling disconnect\_frontend().
- }{
- dmx\_demux\_t* demux & Pointer to the demux API and instance data.\\
- dmx\_frontend\_t* frontend & Pointer to the front-end instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.\\
- -EBUSY & The front-end is in use.
-}
-
-\kifunction{disconnect\_frontend()}{
- int disconnect\_frontend(dmx\_demux\_t* demux);
- }{
- Disconnects the demux and a front-end previously connected by a
- connect\_frontend() call.
- }{
- dmx\_demux\_t* demux & Pointer to the demux API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-\clearpage
-
-\devsubsec{Demux Callback API}
-
-This kernel-space API comprises the callback functions that deliver filtered data to the
-demux client. Unlike the other APIs, these API functions are provided by the client and
-called from the demux code.
-
-The function pointers of this abstract interface are not packed into a structure
-as in the
-other demux APIs, because the callback functions are registered and used
-independent of each other. As an example, it is possible for the API client to provide
-several callback functions for receiving TS packets and no callbacks for PES packets
-or sections.
-
-The functions that implement the callback API need not be re-entrant: when a demux
-driver calls one of these functions, the driver is not allowed to call the
-function again before the original call returns.
-If a callback is triggered by a hardware interrupt, it is
-recommended to use the Linux ``bottom half'' mechanism or start a tasklet instead of
-making the callback function call directly from a hardware interrupt.
-
-\kifunction{dmx\_ts\_cb()}{
- int dmx\_ts\_cb(\_\_u8* buffer1, size\_t buffer1\_length,
- \_\_u8* buffer2, size\_t buffer2\_length,
- dmx\_ts\_feed\_t* source, dmx\_success\_t success);
- }{
- This function, provided by the client of the demux API, is called from the
- demux code. The function is only called when filtering on this TS feed has
- been enabled using the start\_filtering() function. \\
- Any TS packets that match the filter settings are copied to a circular buffer.
- The filtered TS packets are delivered to the client using this callback
- function. The size of the circular buffer is controlled by the
- circular\_buffer\_size parameter of the set() function in the TS Feed API. It is
- expected that the buffer1 and buffer2 callback parameters point to addresses
- within the circular buffer, but other implementations are also
- possible. Note that the called party should not try to free the memory the
- buffer1 and buffer2 parameters point to.\\
- When this function is called, the buffer1 parameter typically points to the
- start of the first undelivered TS packet within a circular buffer. The buffer2
- buffer parameter is normally NULL, except when the received TS packets have
- crossed the last address of the circular buffer and "wrapped" to the beginning
- of the buffer. In the latter case the buffer1 parameter would contain an
- address within the circular buffer, while the buffer2 parameter would contain
- the first address of the circular buffer.\\
- The number of bytes delivered with this function (i.e. buffer1\_length +
- buffer2\_length) is usually equal to the value of callback\_length parameter given
- in the set() function, with one exception: if a timeout occurs before receiving
- callback\_length bytes of TS data, any undelivered packets are immediately
- delivered to the client by calling this function. The timeout duration is
- controlled by the set() function in the TS Feed API.\\
- If a TS packet is received with errors that could not be fixed by the TS-level
- forward error correction (FEC), the Transport\_error\_indicator flag of the TS
- packet header should be set. The TS packet should not be discarded, as the
- error can possibly be corrected by a higher layer protocol.
- If the called party is slow in processing the callback, it is possible that
- the circular buffer eventually fills up. If this happens, the demux driver
- should discard any TS packets received while the buffer is full. The error
- should be indicated to the client on the next callback by setting the success
- parameter to the value of DMX\_OVERRUN\_ERROR.\\
- The type of data returned to the callback can be selected by the
- new function int (*set\_type) (struct dmx\_ts\_feed\_s* feed, int type,
- dmx\_ts\_pes\_t pes\_type) which is part of the dmx\_ts\_feed\_s struct
- (also cf. to the include file ost/demux.h)
- The type parameter decides if the raw TS packet (TS\_PACKET) or just the
- payload (TS\_PACKET|TS\_PAYLOAD\_ONLY) should be returned.
- If additionally the TS\_DECODER bit is set the stream will also be sent
- to the hardware MPEG decoder. In this case, the second flag decides
- as what kind of data the stream should be interpreted.
- The possible choices are one of DMX\_TS\_PES\_AUDIO, DMX\_TS\_PES\_VIDEO,
- DMX\_TS\_PES\_TELETEXT, DMX\_TS\_PES\_SUBTITLE, DMX\_TS\_PES\_PCR, or
- DMX\_TS\_PES\_OTHER.
- }{
- \_\_u8* buffer1 & Pointer to the start of the filtered TS packets.\\
- size\_t buffer1\_length & Length of the TS data in buffer1.\\
- \_\_u8* buffer2 & Pointer to the tail of the filtered TS packets, or NULL.\\
- size\_t buffer2\_length & Length of the TS data in buffer2.\\
- dmx\_ts\_feed\_t* source & Indicates which TS feed is the source of the callback.\\
- dmx\_success\_t success & Indicates if there was an error in TS reception.
- }{
- 0 & Continue filtering.\\
- -1& Stop filtering - has the same effect as a call
- to stop\_filtering() on the TS Feed API.
-}
-
-\kifunction{dmx\_section\_cb()}{
- int dmx\_section\_cb(\_\_u8* buffer1, size\_t buffer1\_length, \_\_u8* buffer2,
- size\_t buffer2\_length, dmx\_section\_filter\_t* source,
- dmx\_success\_t success);
- }{
- This function, provided by the client of the demux API, is called from the demux code.
- The function is only called when filtering of sections has been enabled using the
- function start\_filtering() of the section feed API.
- When the demux driver has received a complete section that matches at least one
- section filter, the client is notified via this callback function. Normally this function is
- called for each received section; however, it is also possible to deliver multiple sections
- with one callback, for example when the system load is high.
- If an error occurs while receiving a section, this function should be called with the
- corresponding error type set in the success field, whether or not there is data to
- deliver.
- The Section Feed implementation should maintain a circular buffer for received sections.
- However, this is not necessary if the Section Feed API is implemented as a client of
- the TS Feed API, because the TS Feed implementation then buffers the
- received data.
- The size of the circular buffer can be configured using the set() function in the
- Section Feed API. If there is no room in the circular buffer when a new section is
- received, the section must be discarded. If this happens, the value of the success
- parameter should be DMX\_OVERRUN\_ERROR on the next callback.
- }{
- \_\_u8* buffer1 & Pointer to the start of the filtered section, e.g.
- within the circular buffer of the demux driver.\\
- size\_t buffer1\_length & Length of the filtered section data in buffer1,
- including headers and CRC.\\
- \_\_u8* buffer2 & Pointer to the tail of the filtered section data, or
- NULL. Useful to handle the wrapping of a circular
- buffer.\\
- size\_t buffer2\_length & Length of the filtered section data in buffer2,
- including headers and CRC.\\
- dmx\_section\_filter\_t* filter & Indicates the filter that triggered the callback.\\
- dmx\_success\_t success & Indicates if there was an error in section reception.
- }{
- 0 & Continue filtering.\\
- -1& Stop filtering - has the same effect as a call
- to stop\_filtering() on the Section Feed API.
-}
-
-\clearpage
-
-\devsubsec{TS Feed API}
-
-A TS feed is typically mapped to a hardware PID filter on the demux chip. Using this
-API, the client can set the filtering properties to start/stop filtering TS packets on a
-particular TS feed. The API is defined as an abstract interface of the type
-dmx\_ts\_feed\_t.
-
-The functions that implement the interface should be defined static or module
-private. The client can get the handle of a TS feed API by calling the function
-allocate\_ts\_feed() in the demux API.
-
-\kifunction{set()}{
- int set ( dmx\_ts\_feed\_t* feed, \_\_u16 pid, size\_t callback\_length,
- size\_t circular\_buffer\_size, int descramble, struct timespec timeout);
- }{
- This function sets the parameters of a TS feed.
- Any filtering in progress on the TS feed
- must be stopped before calling this function.
- }{
- dmx\_ts\_feed\_t* feed & Pointer to the TS feed API and instance data.\\
- \_\_u16 pid & PID value to filter. Only the TS packets carrying the specified PID will
- be passed to the API client.\\
- size\_t callback\_length & Number of bytes to deliver with each
- call to the dmx\_ts\_cb() callback
- function. The value of this
- parameter should be a multiple of 188.\\
- size\_t circular\_buffer\_size & Size of the circular buffer for the filtered TS packets.\\
- int descramble & If non-zero, descramble the filtered TS packets.\\
- struct timespec timeout & Maximum time to wait before
- delivering received TS packets to the client.
- }{
- 0 & The function was completed without errors.\\
- -ENOMEM & Not enough memory for the requested buffer size.\\
- -ENOSYS & No descrambling facility available for TS.\\
- -EINVAL & Bad parameter.
-}
-
-
-\kifunction{start\_filtering()}{
- int start\_filtering(dmx\_ts\_feed\_t* feed);
- }{
- Starts filtering TS packets on this TS feed, according to its settings.
- The PID value to filter can be set by the API client.
- All matching TS packets are delivered asynchronously to the client,
- using the callback function registered with allocate\_ts\_feed().
- }{
- dmx\_ts\_feed\_t* feed & Pointer to the TS feed API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{stop\_filtering()}{
- int stop\_filtering(dmx\_ts\_feed\_t* feed);
- }{
- Stops filtering TS packets on this TS feed.
- }{
- dmx\_ts\_feed\_t* feed & Pointer to the TS feed API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-\clearpage
-
-\devsubsec{Section Feed API}
-
-A section feed is a resource consisting of a PID filter and a set of section filters.
-Using this API, the client can set the properties of a section feed and to
-start/stop filtering.
-The API is defined as an abstract interface of the type dmx\_section\_feed\_t.
-The functions that implement the interface should be defined static or module
-private. The client can get the handle of a section feed API by calling the function
-allocate\_section\_feed() in the demux API.
-
-On demux platforms that provide section filtering in hardware, the Section Feed API
-implementation provides a software wrapper for the demux hardware. Other platforms
-may support only PID filtering in hardware, requiring that TS packets are converted to
-sections in software. In the latter case the Section Feed API implementation can be a
-client of the TS Feed API.
-
-
-\kifunction{set()}{
- int set(dmx\_section\_feed\_t* feed, \_\_u16 pid, size\_t circular\_buffer\_size,
- int descramble, int check\_crc);
- }{
- This function sets the parameters of a section feed. Any filtering in progress on the
- section feed must be stopped before calling this function.
- If descrambling is enabled, the payload\_scrambling\_control and
- address\_scrambling\_control fields of received DVB datagram sections should be
- observed. If either one is non-zero, the section should be descrambled either in
- hardware or using the functions descramble\_mac\_address() and
- descramble\_section\_payload() of the demux API. Note that according to the
- MPEG-2 Systems specification, only the payloads of private sections can be
- scrambled while the rest of the section data must be sent in the clear.
- }{
- dmx\_section\_feed\_t* feed & Pointer to the section feed API and instance data.\\
- \_\_u16 pid & PID value to filter; only the TS packets
- carrying the specified PID will be accepted.\\
- size\_t circular\_buffer\_size & Size of the circular buffer for filtered sections.\\
- int descramble & If non-zero, descramble any sections that are scrambled.\\
- int check\_crc & If non-zero, check the CRC values of filtered sections.
- }{
- 0 & The function was completed without errors.\\
- -ENOMEM & Not enough memory for the requested buffer size.\\
- -ENOSYS & No descrambling facility available for sections.\\
- -EINVAL & Bad parameters.
-}
-
-\kifunction{allocate\_filter()}{
- int allocate\_filter(dmx\_section\_feed\_t* feed, dmx\_section\_filter\_t** filter);
- }{
- This function is used to allocate a section filter on the demux.
- It should only be called when no filtering is in progress on this section feed.
- If a filter cannot be allocated, the function fails with -ENOSPC.
- See in section \ref{sectionfilter} for the format of the section filter. \\
- The bitfields filter\_mask and filter\_value should only be modified when no
- filtering is in progress on this section feed. filter\_mask controls which bits of
- filter\_value are compared with the section headers/payload. On a binary value of 1
- in filter\_mask, the corresponding bits are compared. The filter only accepts sections
- that are equal to filter\_value in all the tested bit positions. Any changes to the
- values of filter\_mask and filter\_value are guaranteed to take effect only when
- the start\_filtering() function is called next time. The parent pointer in the struct
- is initialized by the API implementation to the value of the feed parameter. The priv
- pointer is not used by the API implementation, and can thus be freely utilized by the
- caller of this function. Any data pointed to by the priv pointer is available to the
- recipient of the dmx\_section\_cb() function call.\\
- While the maximum section filter length (DMX\_MAX\_FILTER\_SIZE)
- is currently set at 16 bytes, hardware filters of that size are not
- available on all platforms. Therefore, section filtering will often
- take place first in hardware, followed by filtering in software for the
- header bytes that were not covered by a hardware filter.
- The filter\_mask field can be checked to determine how many bytes of
- the section filter are actually used, and if the
- hardware filter will suffice. Additionally, software-only section filters
- can optionally be
- allocated to clients when all hardware section filters are in use.
- Note that on most demux hardware it is not possible to filter on the
- section\_length field
- of the section header -- thus this field is ignored, even though it is included in
- filter\_value and filter\_mask fields.
- }{
- dmx\_section\_feed\_t* feed & Pointer to the section feed API and instance data.\\
- dmx\_section\_filter\_t** filter & Pointer to the allocated filter.
- }{
- 0 & The function was completed without errors.\\
- -ENOSPC & No filters of given type and length available.\\
- -EINVAL & Bad parameters.
-}
-
-\kifunction{release\_filter()}{
- int release\_filter ( dmx\_section\_feed\_t* feed, dmx\_section\_filter\_t* filter);
- }{
- This function releases all the resources of a previously allocated section filter.
- The function should not be called while filtering is in progress on this section feed.
- After calling this function, the caller should not try to dereference the
- filter pointer.
- }{
- dmx\_section\_feed\_t* feed & Pointer to the section feed API and instance data.\\
- dmx\_section\_filter\_t* filter & I/O Pointer to the instance data of a section filter.
- }{
- 0 & The function was completed without errors.\\
- -ENODEV & No such filter allocated.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{start\_filtering()}{
- int start\_filtering ( dmx\_section\_feed\_t* feed );
- }{
- Starts filtering sections on this section feed, according to its settings.
- Sections are first filtered based on their PID and then matched with the
- section filters allocated for this feed.
- If the section matches the PID filter and at least one section filter, it is delivered
- to the API client. The section is delivered asynchronously using the callback function
- registered with allocate\_section\_feed().
- }{
- dmx\_section\_feed\_t* feed & Pointer to the section feed API and instance data.\\
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-\kifunction{stop\_filtering()}{
- int stop\_filtering ( dmx\_section\_feed\_t* feed );
- }{
- Stops filtering sections on this section feed. Note that any changes to the
- filtering parameters (filter\_value, filter\_mask, etc.) should only be made
- when filtering is stopped.
- }{
- dmx\_section\_feed\_t* feed & Pointer to the section feed API and instance data.
- }{
- 0 & The function was completed without errors.\\
- -EINVAL & Bad parameter.
-}
-
-
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/net.tex b/dvb-spec/dvbapi/net.tex
deleted file mode 100644
index dc6566633..000000000
--- a/dvb-spec/dvbapi/net.tex
+++ /dev/null
@@ -1,19 +0,0 @@
-\devsec{DVB Network API}
-
-The DVB net device enables feeding of MPE (multi protocol
-encapsulation) packets received via DVB into the Linux network
-protocol stack, e.g. for internet via satellite applications.
-It can be accessed through \texttt{/dev/dvb/adapter0/net0}.
-Data types and and ioctl definitions can be accessed by including
-\texttt{linux/dvb/net.h} in your application.
-
-
-\devsubsec{DVB Net Data Types}
-
-To be written\dots
-
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/dvbapi/title.tex b/dvb-spec/dvbapi/title.tex
deleted file mode 100644
index 857492b7e..000000000
--- a/dvb-spec/dvbapi/title.tex
+++ /dev/null
@@ -1,28 +0,0 @@
-\pagenumbering{arabic}
-\pagestyle{empty}
-\title{\huge\textbf{LINUX DVB API Version 3}}
-
-\author{
-\includegraphics{cimlogo.psi}\\
- Copyright 2002, 2003 Convergence GmbH\\\\
- Written by Dr. Ralph J.K. Metzler\\
- \texttt{<rjkm@metzlerbros.de>}\\\\
- and Dr. Marcus O.C. Metzler\\
- \texttt{<mocm@metzlerbros.de>}\\
-}
-\date{24/07/2003\\V 1.0.0}
-
-\maketitle
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation.
-A copy of the license is included in the chapter entitled "GNU
-Free Documentation License".
-
-\newpage
-
-% Local Variables:
-% mode: latex
-% TeX-master: "dvbapi"
-% End:
diff --git a/dvb-spec/dvbapi/video.tex b/dvb-spec/dvbapi/video.tex
deleted file mode 100644
index 3fa066b87..000000000
--- a/dvb-spec/dvbapi/video.tex
+++ /dev/null
@@ -1,697 +0,0 @@
-\devsec{DVB Video Device}
-
-The DVB video device controls the MPEG2 video decoder of the DVB hardware.
-It can be accessed through \texttt{/dev/dvb/adapter0/video0}.
-Data types and and ioctl definitions can be accessed by including
-\texttt{linux/dvb/video.h} in your application.
-
-
-Note that the DVB video device only controls decoding of the MPEG
-video stream, not its presentation on the TV or computer screen.
-On PCs this is typically handled by an associated video4linux device, e.g.
-\texttt{/dev/video}, which allows scaling and defining output windows.
-
-Some DVB cards don't have their own MPEG decoder, which results in the omission
-of the audio and video device as well as the video4linux device.
-
-The ioctls that deal with SPUs (sub picture units) and navigation
-packets are only supported on some MPEG decoders made for DVD playback.
-
-
-\devsubsec{Video Data Types}
-
-\devsubsubsec{video\_format\_t}
-\label{videoformat}
-
-The \texttt{video\_format\_t} data type defined by
-\begin{verbatim}
-typedef enum {
- VIDEO_FORMAT_4_3,
- VIDEO_FORMAT_16_9
-} video_format_t;
-\end{verbatim}
-is used in the VIDEO\_SET\_FORMAT function (\ref{videosetformat}) to
-tell the driver which aspect ratio the output hardware (e.g. TV) has.
-It is also used in the data structures video\_status (\ref{videostatus})
-returned by VIDEO\_GET\_STATUS (\ref{videogetstatus}) and
-video\_event (\ref{videoevent}) returned by VIDEO\_GET\_EVENT (\ref{videogetevent})
-which report about the display format of the current video stream.
-
-\devsubsubsec{video\_display\_format\_t}
-\label{videodispformat}
-
-In case the display format of the video stream and of the
-display hardware differ the application has to specify how to handle
-the cropping of the picture.
-This can be done using the VIDEO\_SET\_DISPLAY\_FORMAT call
-(\ref{videosetdisplayformat}) which accepts
-\begin{verbatim}
-typedef enum {
- VIDEO_PAN_SCAN,
- VIDEO_LETTER_BOX,
- VIDEO_CENTER_CUT_OUT
-} video_display_format_t;
-\end{verbatim}
-as argument.
-
-
-\devsubsubsec{video stream source}
-\label{videostreamsource}
-The video stream source is set through the VIDEO\_SELECT\_SOURCE
-call and can take the following values, depending on whether we are
-replaying from an internal (demuxer) or external (user write) source.
-\begin{verbatim}
-typedef enum {
- VIDEO_SOURCE_DEMUX,
- VIDEO_SOURCE_MEMORY
-} video_stream_source_t;
-\end{verbatim}
-VIDEO\_SOURCE\_DEMUX selects the demultiplexer (fed
-either by the frontend or the DVR device) as the source of
-the video stream.
-If VIDEO\_SOURCE\_MEMORY is selected the stream
-comes from the application through the \texttt{write()}
-system call.
-
-\devsubsubsec{video play state}
-\label{videoplaystate}
-The following values can be returned by the VIDEO\_GET\_STATUS call
-representing the state of video playback.
-\begin{verbatim}
-typedef enum {
- VIDEO_STOPPED,
- VIDEO_PLAYING,
- VIDEO_FREEZED
-} video_play_state_t;
-\end{verbatim}
-
-
-\devsubsubsec{struct video\_event}
-\label{videoevent}
-The following is the structure of a video event as it is returned by
-the VIDEO\_GET\_EVENT call.
-\begin{verbatim}
-struct video_event {
- int32_t type;
- time_t timestamp;
- union {
- video_format_t video_format;
- } u;
-};
-\end{verbatim}
-
-\devsubsubsec{struct video\_status}
-\label{videostatus}
-The VIDEO\_GET\_STATUS call returns the following structure informing
-about various states of the playback operation.
-\begin{verbatim}
-struct video_status {
- boolean video_blank;
- video_play_state_t play_state;
- video_stream_source_t stream_source;
- video_format_t video_format;
- video_displayformat_t display_format;
-};
-\end{verbatim}
-If video\_blank is set video will be blanked out if the channel is changed or
-if playback is stopped. Otherwise, the last picture will be displayed.
-play\_state indicates if the video is currently frozen, stopped, or
-being played back. The stream\_source corresponds to the seleted source
-for the video stream. It can come either from the demultiplexer or from memory.
-The video\_format indicates the aspect ratio (one of 4:3 or 16:9)
-of the currently played video stream.
-Finally, display\_format corresponds to the selected cropping mode in case the
-source video format is not the same as the format of the output device.
-
-
-\devsubsubsec{struct video\_still\_picture}
-\label{videostill}
-An I-frame displayed via the VIDEO\_STILLPICTURE call is passed on
-within the following structure.
-\begin{verbatim}
-/* pointer to and size of a single iframe in memory */
-struct video_still_picture {
- char *iFrame;
- int32_t size;
-};
-\end{verbatim}
-
-\devsubsubsec{video capabilities}
-\label{videocaps}
-A call to VIDEO\_GET\_CAPABILITIES returns an unsigned integer with
-the following bits set according to the hardwares capabilities.
-\begin{verbatim}
-/* bit definitions for capabilities: */
-/* can the hardware decode MPEG1 and/or MPEG2? */
-#define VIDEO_CAP_MPEG1 1
-#define VIDEO_CAP_MPEG2 2
-/* can you send a system and/or program stream to video device?
- (you still have to open the video and the audio device but only
- send the stream to the video device) */
-#define VIDEO_CAP_SYS 4
-#define VIDEO_CAP_PROG 8
-/* can the driver also handle SPU, NAVI and CSS encoded data?
- (CSS API is not present yet) */
-#define VIDEO_CAP_SPU 16
-#define VIDEO_CAP_NAVI 32
-#define VIDEO_CAP_CSS 64
-\end{verbatim}
-
-
-\devsubsubsec{video system}
-\label{videosys}
-A call to VIDEO\_SET\_SYSTEM sets the desired video system for TV
-output. The following system types can be set:
-
-\begin{verbatim}
-typedef enum {
- VIDEO_SYSTEM_PAL,
- VIDEO_SYSTEM_NTSC,
- VIDEO_SYSTEM_PALN,
- VIDEO_SYSTEM_PALNc,
- VIDEO_SYSTEM_PALM,
- VIDEO_SYSTEM_NTSC60,
- VIDEO_SYSTEM_PAL60,
- VIDEO_SYSTEM_PALM60
-} video_system_t;
-\end{verbatim}
-
-
-
-\devsubsubsec{struct video\_highlight}
-\label{vhilite}
-Calling the ioctl VIDEO\_SET\_HIGHLIGHTS posts the SPU highlight
-information. The call expects the following format for that information:
-
-\begin{verbatim}
-typedef
-struct video_highlight {
- boolean active; /* 1=show highlight, 0=hide highlight */
- uint8_t contrast1; /* 7- 4 Pattern pixel contrast */
- /* 3- 0 Background pixel contrast */
- uint8_t contrast2; /* 7- 4 Emphasis pixel-2 contrast */
- /* 3- 0 Emphasis pixel-1 contrast */
- uint8_t color1; /* 7- 4 Pattern pixel color */
- /* 3- 0 Background pixel color */
- uint8_t color2; /* 7- 4 Emphasis pixel-2 color */
- /* 3- 0 Emphasis pixel-1 color */
- uint32_t ypos; /* 23-22 auto action mode */
- /* 21-12 start y */
- /* 9- 0 end y */
- uint32_t xpos; /* 23-22 button color number */
- /* 21-12 start x */
- /* 9- 0 end x */
-} video_highlight_t;
-\end{verbatim}
-
-
-\devsubsubsec{video SPU}
-\label{videospu}
-Calling VIDEO\_SET\_SPU deactivates or activates SPU decoding,
-according to the following format:
-\begin{verbatim}
-typedef
-struct video_spu {
- boolean active;
- int stream_id;
-} video_spu_t;
-\end{verbatim}
-
-
-\devsubsubsec{video SPU palette}
-\label{vspupal}
-The following structure is used to set the SPU palette by calling VIDEO\_SPU\_PALETTE:
-\begin{verbatim}
-typedef
-struct video_spu_palette{
- int length;
- uint8_t *palette;
-} video_spu_palette_t;
-\end{verbatim}
-
-\devsubsubsec{video NAVI pack}
-\label{videonavi}
-In order to get the navigational data the following structure has to
-be passed to the ioctl VIDEO\_GET\_NAVI:
-\begin{verbatim}
-typedef
-struct video_navi_pack{
- int length; /* 0 ... 1024 */
- uint8_t data[1024];
-} video_navi_pack_t;
-\end{verbatim}
-
-
-\devsubsubsec{video attributes}
-\label{vattrib}
-The following attributes can be set by a call to VIDEO\_SET\_ATTRIBUTES:
-\begin{verbatim}
-typedef uint16_t video_attributes_t;
-/* bits: descr. */
-/* 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) */
-/* 13-12 TV system (0=525/60, 1=625/50) */
-/* 11-10 Aspect ratio (0=4:3, 3=16:9) */
-/* 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca */
-/* 7 line 21-1 data present in GOP (1=yes, 0=no) */
-/* 6 line 21-2 data present in GOP (1=yes, 0=no) */
-/* 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 */
-/* 2 source letterboxed (1=yes, 0=no) */
-/* 0 film/camera mode (0=camera, 1=film (625/50 only)) */
-\end{verbatim}
-
-
-\clearpage
-
-\devsubsec{Video Function Calls}
-
-\function{open()}{
- int open(const char *deviceName, int flags);}{
- This system call opens a named video device (e.g. /dev/dvb/adapter0/video0)
- for subsequent use.
-
- When an open() call has succeeded, the device will be ready for use.
- The significance of blocking or non-blocking mode is described in
- the documentation for functions where there is a difference.
- It does not affect the semantics of the open() call itself.
- A device opened in blocking mode can later be put into non-blocking mode
- (and vice versa) using the F\_SETFL command of the fcntl system
- call.
- This is a standard system call, documented in the Linux manual
- page for fcntl.
- Only one user can open the Video Device in O\_RDWR mode. All other attempts to
- open the device in this mode will fail, and an error-code will be returned.
- If the Video Device is opened in O\_RDONLY mode, the only ioctl call that can
- be used is VIDEO\_GET\_STATUS. All other call will return an error code.
- }{
- const char *deviceName & Name of specific video device.\\
- int flags & A bit-wise OR of the following flags:\\
- & \hspace{1em} O\_RDONLY read-only access\\
- & \hspace{1em} O\_RDWR read/write access\\
- & \hspace{1em} O\_NONBLOCK open in non-blocking mode \\
- & \hspace{1em} (blocking mode is the default)\\
- }{
- ENODEV & Device driver not loaded/available.\\
- EINTERNAL & Internal error.\\
- EBUSY & Device or resource busy.\\
- EINVAL & Invalid argument.\\
-}
-
-\function{close()}{
- int close(int fd);}{
- This system call closes a previously opened video device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- }{
- EBADF & fd is not a valid open file descriptor.\\
-}
-
-\function{write()}{
- size\_t write(int fd, const void *buf, size\_t count);}{
- This system call can only be used if VIDEO\_SOURCE\_MEMORY is selected in the
- ioctl call VIDEO\_SELECT\_SOURCE. The data provided shall be in PES
- format, unless the capability allows other formats.
- If O\_NONBLOCK is not specified the function will block until buffer space is
- available. The amount of data to be transferred is implied by count.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- void *buf & Pointer to the buffer containing the PES data.\\
- size\_t count& Size of buf.\\
- }{
- EPERM& Mode VIDEO\_SOURCE\_MEMORY not selected.\\
- ENOMEM& Attempted to write more data than the internal buffer can hold.\\
- EBADF& fd is not a valid open file descriptor.\\
-}
-
-
-\ifunction{VIDEO\_STOP}{
- int ioctl(fd, int request = VIDEO\_STOP, boolean mode);}{
- This ioctl call asks the Video Device to stop playing the current stream.
- Depending on the input parameter, the screen can be blanked out or
- displaying the last decoded frame.
-}{
-int fd & File descriptor returned by a previous call to open(). \\
-int request & Equals VIDEO\_STOP for this command. \\
-Boolean mode & Indicates how the screen shall be handled. \\
-& TRUE: Blank screen when stop. \\
-& FALSE: Show last decoded frame.\\
-}{
-EBADF& fd is not a valid open file descriptor \\
-EINTERNAL & Internal error, possibly in the communication with
- the DVB subsystem.\\
-}
-
-\ifunction{VIDEO\_PLAY}{
- int ioctl(fd, int request = VIDEO\_PLAY);}{
- This ioctl call asks the Video Device to start playing a video stream
- from the selected source.
-}{
-int fd & File descriptor returned by a previous call to open(). \\
-int request & Equals VIDEO\_PLAY for this command. \\
-}{
-EBADF& fd is not a valid open file descriptor \\
-EINTERNAL & Internal error, possibly in the communication with
- the DVB subsystem.\\
-}
-
-
-\ifunction{VIDEO\_FREEZE}{
- int ioctl(fd, int request = VIDEO\_FREEZE);}{
- This ioctl call suspends the live video stream being played.
- Decoding and playing are frozen. It is then possible to restart
- the decoding and playing process of the video stream using the
- VIDEO\_CONTINUE command. If VIDEO\_SOURCE\_MEMORY is selected in the
- ioctl call VIDEO\_SELECT\_SOURCE, the DVB subsystem will not decode
- any more data until the ioctl call VIDEO\_CONTINUE or VIDEO\_PLAY is
- performed.
-}{
-int fd & File descriptor returned by a previous call to open(). \\
-int request & Equals VIDEO\_FREEZE for this command. \\
-}{
-EBADF& fd is not a valid open file descriptor \\
-EINTERNAL & Internal error, possibly in the communication with
- the DVB subsystem.\\
-}
-
-\ifunction{VIDEO\_CONTINUE}{
- int ioctl(fd, int request = VIDEO\_CONTINUE);}{
- This ioctl call restarts decoding and playing processes of the video
- stream which was played before a call to VIDEO\_FREEZE was made.
- }{
- int fd & File descriptor returned by a previous call to open(). \\
- int request & Equals VIDEO\_CONTINUE for this command. \\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error, possibly in the communication with
- the DVB subsystem.\\
- }
-
-
-\ifunction{VIDEO\_SELECT\_SOURCE}{
- int ioctl(fd, int request = VIDEO\_SELECT\_SOURCE, video\_stream\_source\_t source);}{
- This ioctl call informs the video device which source shall be used
- for the input data. The possible sources are demux or memory. If
- memory is selected, the data is fed to the video device through
- the write command.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request& Equals VIDEO\_SELECT\_SOURCE for this command. \\
- video\_stream\_source\_t source&Indicates which source shall be used for the Video stream.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error, possibly in the communication with the DVB subsystem.\\
-}
-
-\ifunction{VIDEO\_SET\_BLANK}{
- int ioctl(fd, int request = VIDEO\_SET\_BLANK, boolean mode);}{
- This ioctl call asks the Video Device to blank out the picture.
-}{
-int fd & File descriptor returned by a previous call to open().\\
-int request& Equals VIDEO\_SET\_BLANK for this command. \\
-boolean mode&TRUE: Blank screen when stop.\\
- &FALSE: Show last decoded frame.\\
-}{
-EBADF& fd is not a valid open file descriptor \\
-EINTERNAL & Internal error, possibly in the communication with the DVB subsystem.\\
-EINVAL & Illegal input parameter\\
-}
-
-\ifunction{VIDEO\_GET\_STATUS}{
-\label{videogetstatus}
- int ioctl(fd, int request = VIDEO\_GET\_STATUS, struct video\_status *status);}{
- This ioctl call asks the Video Device to return the current status of the device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request& Equals VIDEO\_GET\_STATUS for this command.\\
- struct video\_status *status & Returns the current status of the Video Device.\\
-}{
-EBADF& fd is not a valid open file descriptor \\
-EINTERNAL & Internal error, possibly in the communication with the DVB subsystem.\\
-EFAULT & status points to invalid address\\
-}
-
-\ifunction{VIDEO\_GET\_EVENT}{
-\label{videogetevent}
- int ioctl(fd, int request = VIDEO\_GET\_EVENT, struct video\_event *ev);}{
- This ioctl call returns an event of type video\_event if available.
- If an event is not available, the behavior depends on whether the device is in
- blocking or non-blocking mode. In the latter case, the call fails immediately
- with errno set to EWOULDBLOCK. In the former case, the call blocks until an
- event becomes available.
- The standard Linux poll() and/or select() system calls can be used with the
- device file descriptor to watch for new events. For select(), the file
- descriptor should be included in the exceptfds argument, and for poll(),
- POLLPRI should be specified as the wake-up condition.
- Read-only permissions are sufficient for this ioctl call.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request& Equals VIDEO\_GET\_EVENT for this command.\\
- struct video\_event *ev & Points to the location where the event, if any, is
- to be stored.\\
-}{
-EBADF & fd is not a valid open file descriptor \\
-EFAULT & ev points to invalid address \\
-EWOULDBLOCK & There is no event pending, and the device is in non-blocking mode.\\
-EOVERFLOW & \\
-&Overflow in event queue - one or more events were lost.\\
-}
-
-\ifunction{VIDEO\_SET\_DISPLAY\_FORMAT}{
-\label{videosetdisplayformat}
- int ioctl(fd, int request = VIDEO\_SET\_DISPLAY\_FORMAT, video\_display\_format\_t format);}{
- This ioctl call asks the Video Device to select the video format to be applied
- by the MPEG chip on the video.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_DISPLAY\_FORMAT for this command.\\
- video\_display\_format\_t format & Selects the video format to be used.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error.\\
- EINVAL & Illegal parameter format.\\
-}
-
-\ifunction{VIDEO\_STILLPICTURE}{
- int ioctl(fd, int request = VIDEO\_STILLPICTURE, struct video\_still\_picture *sp);}{
- This ioctl call asks the Video Device to display a still picture (I-frame).
- The input data shall contain an I-frame. If the pointer is NULL, then the
- current displayed still picture is blanked.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_STILLPICTURE for this command.\\
- struct video\_still\_picture *sp&
- Pointer to a location where an I-frame and size is stored.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error.\\
- EFAULT & sp points to an invalid iframe.\\
-}
-
-\ifunction{VIDEO\_FAST\_FORWARD}{
- int ioctl(fd, int request = VIDEO\_FAST\_FORWARD, int nFrames);}{
- This ioctl call asks the Video Device to skip decoding of N number of I-frames.
- This call can only be used if VIDEO\_SOURCE\_MEMORY is selected.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_FAST\_FORWARD for this command.\\
- int nFrames & The number of frames to skip.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error.\\
- EPERM & Mode VIDEO\_SOURCE\_MEMORY not selected.\\
- EINVAL & Illegal parameter format.\\
-}
-
-\ifunction{VIDEO\_SLOWMOTION}{
- int ioctl(fd, int request = VIDEO\_SLOWMOTION, int nFrames);}{
- This ioctl call asks the video device to repeat decoding frames N
- number of times.
- This call can only be used if VIDEO\_SOURCE\_MEMORY is selected.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SLOWMOTION for this command.\\
- int nFrames & The number of times to repeat each frame.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINTERNAL & Internal error.\\
- EPERM & Mode VIDEO\_SOURCE\_MEMORY not selected.\\
- EINVAL & Illegal parameter format.\\
-}
-
-\ifunction{VIDEO\_GET\_CAPABILITIES}{
- int ioctl(fd, int request = VIDEO\_GET\_CAPABILITIES, unsigned int *cap);}{
- This ioctl call asks the video device about its decoding capabilities.
- On success it returns and integer which has bits set according to the
- defines in section \ref{videocaps}.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_GET\_CAPABILITIES for this command.\\
- unsigned int *cap & Pointer to a location where to store the
- capability information.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EFAULT & cap points to an invalid iframe.\\
-}
-
-\ifunction{VIDEO\_SET\_ID}{
- int ioctl(int fd, int request = VIDEO\_SET\_ID, int id);}{
- This ioctl selects which sub-stream is to be decoded if a program or
- system stream is sent to the video device.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_ID for this command.\\
- int id& video sub-stream id
- }{
- EBADF& fd is not a valid open file descriptor.\\
- EINTERNAL & Internal error.\\
- EINVAL & Invalid sub-stream id.
-}
-
-\ifunction{VIDEO\_CLEAR\_BUFFER}{
- int ioctl(fd, int request = VIDEO\_CLEAR\_BUFFER);}{
- This ioctl call clears all video buffers in the driver and
- in the decoder hardware.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_CLEAR\_BUFFER for this command.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
-}
-
-\ifunction{VIDEO\_SET\_STREAMTYPE}{
- int ioctl(fd, int request = VIDEO\_SET\_STREAMTYPE, int type);}{
- This ioctl tells the driver which kind of stream to expect
- being written to it. If this call is not used the default of video PES
- is used. Some drivers might not support this call and always expect PES.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_STREAMTYPE for this command.\\
- int type & stream type\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& type is not a valid or supported stream type.\\
-}
-
-\ifunction{VIDEO\_SET\_FORMAT}{
-\label{videosetformat}
- int ioctl(fd, int request = VIDEO\_SET\_FORMAT, video\_format\_t format);
-}{
- This ioctl sets the screen format (aspect ratio) of the connected
- output device (TV) so that the output of the decoder can
- be adjusted accordingly.
- }{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_FORMAT for this command.\\
- video\_format\_t format& video format of TV as defined in section \ref{videoformat}.\\
- }{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& format is not a valid video format.\\
-}
-
-\ifunction{VIDEO\_SET\_SYSTEM}{
-\label{videosetsystem}
- int ioctl(fd, int request = VIDEO\_SET\_SYSTEM , video\_system\_t system);
-}{
- This ioctl sets the television output format. The format (see section
- \ref{videosys}) may vary from the color format of the displayed MPEG
- stream. If the hardware is not able to display the requested format
- the call will return an error.
-}{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_FORMAT for this command.\\
- video\_system\_t system& video system of TV output.\\
-}{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& system is not a valid or supported video system.\\
-}
-
-\ifunction{VIDEO\_SET\_HIGHLIGHT}{
-\label{videosethighlight}
- int ioctl(fd, int request = VIDEO\_SET\_HIGHLIGHT ,video\_highlight\_t *vhilite)
-}{
- This ioctl sets the SPU highlight information for the menu access of
- a DVD.
-}{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_HIGHLIGHT for this command.\\
- video\_highlight\_t *vhilite& SPU Highlight information according to
- section \ref{vhilite}.\\
-}{
- EBADF& fd is not a valid open file descriptor. \\
- EINVAL& input is not a valid highlight setting.\\
-}
-
-
-\ifunction{VIDEO\_SET\_SPU}{
-\label{videosetspu}
- int ioctl(fd, int request = VIDEO\_SET\_SPU , video\_spu\_t *spu)
-}{
- This ioctl activates or deactivates SPU decoding in a DVD input
- stream. It can only be used, if the driver is able to handle a DVD
- stream.
-}{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_SPU for this command.\\
- video\_spu\_t *spu& SPU decoding (de)activation and subid setting
- according to section \ref{videospu}.\\
-}{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& input is not a valid spu setting or driver cannot handle SPU.\\
-}
-
-
-\ifunction{VIDEO\_SET\_SPU\_PALETTE}{
-\label{videosetspupalette}
- int ioctl(fd, int request = VIDEO\_SET\_SPU\_PALETTE ,video\_spu\_palette\_t *palette )
-}{
- This ioctl sets the SPU color palette.
-}{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_SPU\_PALETTE for this command.\\
- video\_spu\_palette\_t *palette& SPU palette according to section \ref{vspupal}.\\
-}{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& input is not a valid palette or driver doesn't handle SPU.\\
-}
-
-
-
-\ifunction{VIDEO\_GET\_NAVI}{
-\label{videosetnavi}
- int ioctl(fd, int request = VIDEO\_GET\_NAVI , video\_navi\_pack\_t *navipack)
-}{
- This ioctl returns navigational information from the DVD stream. This is
- especially needed if an encoded stream has to be decoded by the hardware.
-}{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_GET\_NAVI for this command.\\
- video\_navi\_pack\_t *navipack& PCI or DSI pack (private stream 2)
- according to section \ref{videonavi}.\\
-}{
- EBADF& fd is not a valid open file descriptor \\
- EFAULT& driver is not able to return navigational information\\
-}
-
-
-\ifunction{VIDEO\_SET\_ATTRIBUTES}{
-\label{videosetattributes}
- int ioctl(fd, int request = VIDEO\_SET\_ATTRIBUTE ,video\_attributes\_t
- vattr)
-}{
- This ioctl is intended for DVD playback and allows you to set
- certain information about the stream. Some hardware may not need
- this information, but the call also tells the hardware to prepare
- for DVD playback.
-}{
- int fd & File descriptor returned by a previous call to open().\\
- int request & Equals VIDEO\_SET\_ATTRIBUTE for this command.\\
- video\_attributes\_t vattr& video attributes according to section \ref{vattrib}.\\
-}{
- EBADF& fd is not a valid open file descriptor \\
- EINVAL& input is not a valid attribute setting.\\
-}
-
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "dvbapi"
-%%% End:
diff --git a/dvb-spec/sgml/Makefile b/dvb-spec/sgml/Makefile
deleted file mode 100644
index 9471e4b98..000000000
--- a/dvb-spec/sgml/Makefile
+++ /dev/null
@@ -1,140 +0,0 @@
-SHELL=/bin/bash
-
-SGMLS = \
- dvbapi.sgml \
- intro.sgml \
- frontend.sgml \
- demux.sgml \
- video.sgml \
- audio.sgml \
- ca.sgml \
- net.sgml \
- kdapi.sgml \
- examples.sgml \
- fdl.sgml \
- entities.sgml \
-
-PDFPICS = \
- dvbstb.pdf \
-
-GIFPICS = \
- dvbstb.png \
-
-# Some Jade warnings for authors.
-WARN =
-#WARN = -w all -w duplicate -w net
-
-# Stylesheet customization.
- # docbook/db2 syntax
-CUSTOM_HTML = --dsl custom.dsl\#html
-CUSTOM_PRINT = --dsl custom.dsl\#print
- # xmlto syntax
-CUSTOM_HTML_XMLTO = -m custom.xsl
-CUSTOM_PRINT_XMLTO = -m custom.xsl
-
-all: html-single
-
-html: html-build.stamp
-
-html-single: html-single-build.stamp
-
-pdf: pdf-build.stamp
-
-man: man-build.stamp
-
-man_install: man-build.stamp
- install -d /usr/local/man/man2
- install -b man/* /usr/local/man/man2
-
-entities.sgml: Makefile
- echo "<!-- Generated file! Do not edit. -->" >$@
- echo -e "\n<!-- Subsections -->" >>$@
- for file in $(SGMLS) ; do \
- entity=`echo "$$file" | sed 's/.sgml//;s/\./-/g'` ; \
- if ! echo "$$file" | \
- grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
- echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
- fi ; \
- done
-
-# Jade can auto-generate a list-of-tables, which includes all structs,
-# but we only want data types, all types, and sorted please.
-indices.sgml: Makefile
- echo "<!-- Generated file! Do not edit. -->" >$@
- echo -e "\n<index><title>List of Types</title>" >>$@
- for ident in $(TYPES) ; do \
- id=`echo $$ident | tr _ -` ; \
- echo "<indexentry><primaryie><link" \
- "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
- done
- for ident in $(ENUMS) ; do \
- echo "<indexentry><primaryie>enum&nbsp;<link" \
- "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
- done
- for ident in $(STRUCTS) ; do \
- id=`echo $$ident | tr _ -` ; \
- echo "<indexentry><primaryie>struct&nbsp;<link" \
- "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
- done
- echo "</index>" >>$@
-
-# HTML version.
-html-build.stamp: Makefile $(SGMLS) $(GIFPICS)
- rm -rf dvbapi
- if which xmlto >/dev/null ; then \
- xmlto xhtml $(WARN) $(CUSTOM_HTML_XMLTO) -o dvbapi dvbapi.sgml ; \
- elif which docbook2html >/dev/null ; then \
- export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
- docbook2html $(WARN) $$DCL $(CUSTOM_HTML) --output dvbapi dvbapi.sgml ; \
- else \
- export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
- db2html $(WARN) $$DCL $(CUSTOM_HTML) --output dvbapi dvbapi.sgml ; \
- fi
- cp $(GIFPICS) dvbapi/
- cd dvbapi ; \
- test -e index.html || ln -s book1.htm index.html ; \
- test -e capture-example.html || \
- ln -s `grep -l getopt_long *.htm` capture-example.html
- chmod a+rX -R dvbapi
- touch html-build.stamp
-
-# For online version. When you have a dial-up connection a single file
-# is more convenient than clicking through dozens of pages.
-html-single-build.stamp: Makefile $(SGMLS) $(GIFPICS)
- rm -rf dvbapi-single
- if which xmlto >/dev/null ; then \
- xmlto html-nochunks $(WARN) $(CUSTOM_HTML_XMLTO) -o dvbapi-single dvbapi.sgml ; \
- elif which docbook2html >/dev/null ; then \
- export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
- docbook2html $$DCL $(WARN) $(CUSTOM_HTML) --nochunks \
- --output dvbapi-single dvbapi.sgml ; \
- else \
- export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
- db2html $$DCL $(WARN) $(CUSTOM_HTML) --nochunks \
- --output dvbapi-single dvbapi.sgml ; \
- fi
- cp $(GIFPICS) dvbapi-single/
- chmod a+rX -R dvbapi-single
- touch html-single-build.stamp
-
-# For printing.
-pdf-build.stamp: Makefile $(SGMLS) $(PDFPICS)
- if which db2pdf >/dev/null ; then \
- export DCL="--dcl `find /usr/share/sgml -name xml.dcl|head -1`"; \
- db2pdf $$DCL $(WARN) $(CUSTOM_PRINT) dvbapi.sgml ; \
- elif which xmlto >/dev/null ; then \
- xmlto pdf $(WARN) $(CUSTOM_HTML_XMLTO) -o dvbapi-single dvbapi.sgml ; \
- else \
- export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
- docbook2pdf $$DCL $(WARN) $(CUSTOM_PRINT) dvbapi.sgml ; \
- fi
- touch pdf-build.stamp
-
-
-# For man
-man-build.stamp: Makefile $(SGMLS) $(PDFPICS)
- xmlto man $(WARN) $(CUSTOM_HTML_XMLTO) -o man dvbapi.sgml
-
-distclean clean:
- rm -f *.stamp
- rm -f indices.sgml entities.sgml
diff --git a/dvb-spec/sgml/audio.sgml b/dvb-spec/sgml/audio.sgml
deleted file mode 100644
index eeb96b8a0..000000000
--- a/dvb-spec/sgml/audio.sgml
+++ /dev/null
@@ -1,1473 +0,0 @@
-<title>DVB Audio Device</title>
-<para>The DVB audio device controls the MPEG2 audio decoder of the DVB hardware. It
-can be accessed through <emphasis role="tt">/dev/dvb/adapter0/audio0</emphasis>. Data types and and
-ioctl definitions can be accessed by including <emphasis role="tt">linux/dvb/video.h</emphasis> in your
-application.
-</para>
-<para>Please note that some DVB cards don&#8217;t have their own MPEG decoder, which results in
-the omission of the audio and video device.
-</para>
-
-<section id="audio_data_types">
-<title>Audio Data Types</title>
-<para>This section describes the structures, data types and defines used when talking to the
-audio device.
-</para>
-
-<section id="audio_stream_source_t">
-<title>audio_stream_source_t</title>
-<para>The audio stream source is set through the AUDIO_SELECT_SOURCE call and can take
-the following values, depending on whether we are replaying from an internal (demux) or
-external (user write) source.
-</para>
-<programlisting>
- typedef enum {
- AUDIO_SOURCE_DEMUX,
- AUDIO_SOURCE_MEMORY
- } audio_stream_source_t;
-</programlisting>
-<para>AUDIO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the
-DVR device) as the source of the video stream. If AUDIO_SOURCE_MEMORY
-is selected the stream comes from the application through the <emphasis role="tt">write()</emphasis> system
-call.
-</para>
-
-</section>
-<section id="audio_play_state_t">
-<title>audio_play_state_t</title>
-<para>The following values can be returned by the AUDIO_GET_STATUS call representing the
-state of audio playback.
-</para>
-<programlisting>
- typedef enum {
- AUDIO_STOPPED,
- AUDIO_PLAYING,
- AUDIO_PAUSED
- } audio_play_state_t;
-</programlisting>
-
-</section>
-<section id="audio_channel_select_t">
-<title>audio_channel_select_t</title>
-<para>The audio channel selected via AUDIO_CHANNEL_SELECT is determined by the
-following values.
-</para>
-<programlisting>
- typedef enum {
- AUDIO_STEREO,
- AUDIO_MONO_LEFT,
- AUDIO_MONO_RIGHT,
- } audio_channel_select_t;
-</programlisting>
-
-</section>
-<section id="struct_audio_status">
-<title>struct audio_status</title>
-<para>The AUDIO_GET_STATUS call returns the following structure informing about various
-states of the playback operation.
-</para>
-<programlisting>
- typedef struct audio_status {
- boolean AV_sync_state;
- boolean mute_state;
- audio_play_state_t play_state;
- audio_stream_source_t stream_source;
- audio_channel_select_t channel_select;
- boolean bypass_mode;
- } audio_status_t;
-</programlisting>
-
-</section>
-<section id="struct_audio_mixer">
-<title>struct audio_mixer</title>
-<para>The following structure is used by the AUDIO_SET_MIXER call to set the audio
-volume.
-</para>
-<programlisting>
- typedef struct audio_mixer {
- unsigned int volume_left;
- unsigned int volume_right;
- } audio_mixer_t;
-</programlisting>
-
-</section>
-<section id="audio_encodings">
-<title>audio encodings</title>
-<para>A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the following
-bits set according to the hardwares capabilities.
-</para>
-<programlisting>
- #define AUDIO_CAP_DTS 1
- #define AUDIO_CAP_LPCM 2
- #define AUDIO_CAP_MP1 4
- #define AUDIO_CAP_MP2 8
- #define AUDIO_CAP_MP3 16
- #define AUDIO_CAP_AAC 32
- #define AUDIO_CAP_OGG 64
- #define AUDIO_CAP_SDDS 128
- #define AUDIO_CAP_AC3 256
-</programlisting>
-
-</section>
-<section id="struct_audio_karaoke">
-<title>struct audio_karaoke</title>
-<para>The ioctl AUDIO_SET_KARAOKE uses the following format:
-</para>
-<programlisting>
- typedef
- struct audio_karaoke{
- int vocal1;
- int vocal2;
- int melody;
- } audio_karaoke_t;
-</programlisting>
-<para>If Vocal1 or Vocal2 are non-zero, they get mixed into left and right t at 70% each. If both,
-Vocal1 and Vocal2 are non-zero, Vocal1 gets mixed into the left channel and Vocal2 into the
-right channel at 100% each. Ff Melody is non-zero, the melody channel gets mixed into left
-and right.
-</para>
-
-</section>
-<section id="audio_attributes">
-<title>audio attributes</title>
-<para>The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES:
-</para>
-<programlisting>
- typedef uint16_t audio_attributes_t;
- /&#x22C6; bits: descr. &#x22C6;/
- /&#x22C6; 15-13 audio coding mode (0=ac3, 2=mpeg1, 3=mpeg2ext, 4=LPCM, 6=DTS, &#x22C6;/
- /&#x22C6; 12 multichannel extension &#x22C6;/
- /&#x22C6; 11-10 audio type (0=not spec, 1=language included) &#x22C6;/
- /&#x22C6; 9- 8 audio application mode (0=not spec, 1=karaoke, 2=surround) &#x22C6;/
- /&#x22C6; 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, &#x22C6;/
- /&#x22C6; 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) &#x22C6;/
- /&#x22C6; 2- 0 number of audio channels (n+1 channels) &#x22C6;/
-</programlisting>
- </section></section>
-<section id="audio_function_calls">
-<title>Audio Function Calls</title>
-
-
-<section id="audio_fopen">
-<title>open()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call opens a named audio device (e.g. /dev/dvb/adapter0/audio0)
- for subsequent use. When an open() call has succeeded, the device will be ready
- for use. The significance of blocking or non-blocking mode is described in the
- documentation for functions where there is a difference. It does not affect the
- semantics of the open() call itself. A device opened in blocking mode can later
- be put into non-blocking mode (and vice versa) using the F_SETFL command
- of the fcntl system call. This is a standard system call, documented in the Linux
- manual page for fcntl. Only one user can open the Audio Device in O_RDWR
- mode. All other attempts to open the device in this mode will fail, and an error
- code will be returned. If the Audio Device is opened in O_RDONLY mode, the
- only ioctl call that can be used is AUDIO_GET_STATUS. All other call will
- return with an error code.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int open(const char &#x22C6;deviceName, int flags);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>const char
- *deviceName</para>
-</entry><entry
- align="char">
-<para>Name of specific audio device.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int flags</para>
-</entry><entry
- align="char">
-<para>A bit-wise OR of the following flags:</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDONLY read-only access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDWR read/write access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_NONBLOCK open in non-blocking mode</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>(blocking mode is the default)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>Device or resource busy.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-<section id="audio_fclose">
-<title>close()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call closes a previously opened audio device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int close(int fd);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-<section id="audio_fwrite">
-<title>write()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call can only be used if AUDIO_SOURCE_MEMORY is selected
- in the ioctl call AUDIO_SELECT_SOURCE. The data provided shall be in
- PES format. If O_NONBLOCK is not specified the function will block until
- buffer space is available. The amount of data to be transferred is implied by
- count.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>size_t write(int fd, const void &#x22C6;buf, size_t count);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>void *buf</para>
-</entry><entry
- align="char">
-<para>Pointer to the buffer containing the PES data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t count</para>
-</entry><entry
- align="char">
-<para>Size of buf.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Mode AUDIO_SOURCE_MEMORY not selected.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOMEM</para>
-</entry><entry
- align="char">
-<para>Attempted to write more data than the internal buffer can
- hold.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_STOP</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to stop playing the current stream.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_STOP);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_STOP for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_PLAY</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to start playing an audio stream from the
- selected source.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_PLAY);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_PLAY for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_PAUSE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call suspends the audio stream being played. Decoding and playing
- are paused. It is then possible to restart again decoding and playing process of
- the audio stream using AUDIO_CONTINUE command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>If AUDIO_SOURCE_MEMORY is selected in the ioctl call
- AUDIO_SELECT_SOURCE, the DVB-subsystem will not decode (consume)
- any more data until the ioctl call AUDIO_CONTINUE or AUDIO_PLAY is
- performed.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_PAUSE);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_PAUSE for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SELECT_SOURCE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call informs the audio device which source shall be used
- for the input data. The possible sources are demux or memory. If
- AUDIO_SOURCE_MEMORY is selected, the data is fed to the Audio Device
- through the write command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_SELECT_SOURCE,
- audio_stream_source_t source);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SELECT_SOURCE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>audio_stream_source_t
- source</para>
-</entry><entry
- align="char">
-<para>Indicates the source that shall be used for the Audio
- stream.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal input parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_MUTE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the audio device to mute the stream that is currently being
- played.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_SET_MUTE,
- boolean state);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_MUTE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>boolean state</para>
-</entry><entry
- align="char">
-<para>Indicates if audio device shall mute or not.</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>TRUE Audio Mute</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>FALSE Audio Un-mute</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal input parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_AV_SYNC</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to turn ON or OFF A/V synchronization.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_SET_AV_SYNC,
- boolean state);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_AV_SYNC for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>boolean state</para>
-</entry><entry
- align="char">
-<para>Tells the DVB subsystem if A/V synchronization shall be
- ON or OFF.</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>TRUE AV-sync ON</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>FALSE AV-sync OFF</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal input parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_BYPASS_MODE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to bypass the Audio decoder and forward
- the stream without decoding. This mode shall be used if streams that can&#8217;t be
- handled by the DVB system shall be decoded. Dolby DigitalTM streams are
- automatically forwarded by the DVB subsystem if the hardware can handle it.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- AUDIO_SET_BYPASS_MODE, boolean mode);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_BYPASS_MODE for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>boolean mode</para>
-</entry><entry
- align="char">
-<para>Enables or disables the decoding of the current Audio
- stream in the DVB subsystem.</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>TRUE Bypass is disabled</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>FALSE Bypass is enabled</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal input parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_CHANNEL_SELECT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to select the requested channel if possible.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- AUDIO_CHANNEL_SELECT, audio_channel_select_t);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_CHANNEL_SELECT for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>audio_channel_select_t
- ch</para>
-</entry><entry
- align="char">
-<para>Select the output format of the audio (mono left/right,
- stereo).</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal input parameter ch.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_GET_STATUS</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to return the current state of the Audio
- Device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_GET_STATUS,
- struct audio_status &#x22C6;status);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_GET_STATUS for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct audio_status
- *status</para>
-</entry><entry
- align="char">
-<para>Returns the current state of Audio Device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>status points to invalid address.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_GET_CAPABILITIES</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to tell us about the decoding capabilities
- of the audio hardware.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- AUDIO_GET_CAPABILITIES, unsigned int &#x22C6;cap);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_GET_CAPABILITIES for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>unsigned int *cap</para>
-</entry><entry
- align="char">
-<para>Returns a bit array of supported sound formats.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>cap points to an invalid address.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_CLEAR_BUFFER</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Audio Device to clear all software and hardware buffers
- of the audio decoder device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_CLEAR_BUFFER);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_CLEAR_BUFFER for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_ID</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl selects which sub-stream is to be decoded if a program or system
- stream is sent to the video device. If no audio stream type is set the id has to be
- in [0xC0,0xDF] for MPEG sound, in [0x80,0x87] for AC3 and in [0xA0,0xA7]
- for LPCM. More specifications may follow for other stream types. If the stream
- type is set the id just specifies the substream id of the audio stream and only
- the first 5 bits are recognized.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_SET_ID, int
- id);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_ID for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int id</para>
-</entry><entry
- align="char">
-<para>audio sub-stream id</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid sub-stream id.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_MIXER</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl lets you adjust the mixer settings of the audio decoder.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = AUDIO_SET_MIXER,
- audio_mixer_t &#x22C6;mix);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_ID for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>audio_mixer_t *mix</para>
-</entry><entry
- align="char">
-<para>mixer settings.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>mix points to an invalid address.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_STREAMTYPE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl tells the driver which kind of audio stream to expect. This is useful
- if the stream offers several audio sub-streams like LPCM and AC3.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = AUDIO_SET_STREAMTYPE,
- int type);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_STREAMTYPE for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int type</para>
-</entry><entry
- align="char">
-<para>stream type</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>type is not a valid or supported stream type.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_EXT_ID</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl can be used to set the extension id for MPEG streams in DVD
- playback. Only the first 3 bits are recognized.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = AUDIO_SET_EXT_ID, int
- id);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_EXT_ID for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int id</para>
-</entry><entry
- align="char">
-<para>audio sub_stream_id</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>id is not a valid id.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_ATTRIBUTES</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl is intended for DVD playback and allows you to set certain
- information about the audio stream.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = AUDIO_SET_ATTRIBUTES,
- audio_attributes_t attr );</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_ATTRIBUTES for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>audio_attributes_t
- attr</para>
-</entry><entry
- align="char">
-<para>audio attributes according to section ??</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>attr is not a valid or supported attribute setting.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>AUDIO_SET_KARAOKE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl allows one to set the mixer settings for a karaoke DVD.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = AUDIO_SET_STREAMTYPE,
- audio_karaoke_t &#x22C6;karaoke);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals AUDIO_SET_STREAMTYPE for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>audio_karaoke_t
- *karaoke</para>
-</entry><entry
- align="char">
-<para>karaoke settings according to section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>karaoke is not a valid or supported karaoke setting.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section>
-</section>
diff --git a/dvb-spec/sgml/demux.sgml b/dvb-spec/sgml/demux.sgml
deleted file mode 100644
index 1b8c4e983..000000000
--- a/dvb-spec/sgml/demux.sgml
+++ /dev/null
@@ -1,973 +0,0 @@
-<title>DVB Demux Device</title>
-
-<para>The DVB demux device controls the filters of the DVB hardware/software. It can be
-accessed through <emphasis role="tt">/dev/adapter0/demux0</emphasis>. Data types and and ioctl definitions can be
-accessed by including <emphasis role="tt">linux/dvb/dmx.h</emphasis> in your application.
-</para>
-<section id="dmx_types">
-<title>Demux Data Types</title>
-
-<section id="dmx_output_t">
-<title>dmx_output_t</title>
- <programlisting>
- typedef enum
- {
- DMX_OUT_DECODER,
- DMX_OUT_TAP,
- DMX_OUT_TS_TAP
- } dmx_output_t;
-</programlisting>
-<para><emphasis role="tt">DMX_OUT_TAP</emphasis> delivers the stream output to the demux device on which the ioctl is
-called.
-</para>
-<para><emphasis role="tt">DMX_OUT_TS_TAP</emphasis> routes output to the logical DVR device <emphasis role="tt">/dev/dvb/adapter0/dvr0</emphasis>,
-which delivers a TS multiplexed from all filters for which <emphasis role="tt">DMX_OUT_TS_TAP</emphasis> was
-specified.
-</para>
-</section>
-
-<section id="dmx_input_t">
-<title>dmx_input_t</title>
- <programlisting>
- typedef enum
- {
- DMX_IN_FRONTEND,
- DMX_IN_DVR
- } dmx_input_t;
-</programlisting>
-</section>
-
-<section id="dmx_pes_type_t">
-<title>dmx_pes_type_t</title>
- <programlisting>
- typedef enum
- {
- DMX_PES_AUDIO,
- DMX_PES_VIDEO,
- DMX_PES_TELETEXT,
- DMX_PES_SUBTITLE,
- DMX_PES_PCR,
- DMX_PES_OTHER
- } dmx_pes_type_t;
-</programlisting>
-</section>
-
-<section id="dmx_event_t">
-<title>dmx_event_t</title>
- <programlisting>
- typedef enum
- {
- DMX_SCRAMBLING_EV,
- DMX_FRONTEND_EV
- } dmx_event_t;
-</programlisting>
-</section>
-
-<section id="dmx_scrambling_status_t">
-<title>dmx_scrambling_status_t</title>
- <programlisting>
- typedef enum
- {
- DMX_SCRAMBLING_OFF,
- DMX_SCRAMBLING_ON
- } dmx_scrambling_status_t;
-</programlisting>
-</section>
-
-<section id="dmx_filter">
-<title>struct dmx_filter</title>
- <programlisting>
- typedef struct dmx_filter
- {
- uint8_t filter[DMX_FILTER_SIZE];
- uint8_t mask[DMX_FILTER_SIZE];
- } dmx_filter_t;
-</programlisting>
-</section>
-
-<section id="dmx_sct_filter_params">
-<title>struct dmx_sct_filter_params</title>
- <programlisting>
- struct dmx_sct_filter_params
- {
- uint16_t pid;
- dmx_filter_t filter;
- uint32_t timeout;
- uint32_t flags;
- #define DMX_CHECK_CRC 1
- #define DMX_ONESHOT 2
- #define DMX_IMMEDIATE_START 4
- };
-</programlisting>
-</section>
-
-<section id="dmx_pes_filter_params">
-<title>struct dmx_pes_filter_params</title>
- <programlisting>
- struct dmx_pes_filter_params
- {
- uint16_t pid;
- dmx_input_t input;
- dmx_output_t output;
- dmx_pes_type_t pes_type;
- uint32_t flags;
- };
-</programlisting>
-</section>
-
-<section id="dmx_event">
-<title>struct dmx_event</title>
- <programlisting>
- struct dmx_event
- {
- dmx_event_t event;
- time_t timeStamp;
- union
- {
- dmx_scrambling_status_t scrambling;
- } u;
- };
-</programlisting>
-</section>
-
-<section id="dmx_stc">
-<title>struct dmx_stc</title>
- <programlisting>
- struct dmx_stc {
- unsigned int num; /&#x22C6; input : which STC? 0..N &#x22C6;/
- unsigned int base; /&#x22C6; output: divisor for stc to get 90 kHz clock &#x22C6;/
- uint64_t stc; /&#x22C6; output: stc in 'base'&#x22C6;90 kHz units &#x22C6;/
- };
-</programlisting>
- </section>
-
-</section>
-
-<section id="dmx_fcalls">
-<title>Demux Function Calls</title>
-
-<section id="dmx_fopen">
-<title>open()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call, used with a device name of /dev/dvb/adapter0/demux0,
- allocates a new filter and returns a handle which can be used for subsequent
- control of that filter. This call has to be made for each filter to be used, i.e. every
- returned file descriptor is a reference to a single filter. /dev/dvb/adapter0/dvr0
- is a logical device to be used for retrieving Transport Streams for digital
- video recording. When reading from this device a transport stream containing
- the packets from all PES filters set in the corresponding demux device
- (/dev/dvb/adapter0/demux0) having the output set to DMX_OUT_TS_TAP. A
- recorded Transport Stream is replayed by writing to this device. </para>
-<para>The significance of blocking or non-blocking mode is described in the
- documentation for functions where there is a difference. It does not affect the
- semantics of the open() call itself. A device opened in blocking mode can later
- be put into non-blocking mode (and vice versa) using the F_SETFL command
- of the fcntl system call.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int open(const char &#x22C6;deviceName, int flags);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>const char
- *deviceName</para>
-</entry><entry
- align="char">
-<para>Name of demux device.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int flags</para>
-</entry><entry
- align="char">
-<para>A bit-wise OR of the following flags:</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDWR read/write access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_NONBLOCK open in non-blocking mode</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>(blocking mode is the default)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EMFILE</para>
-</entry><entry
- align="char">
-<para>&#8220;Too many open files&#8221;, i.e. no more filters available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOMEM</para>
-</entry><entry
- align="char">
-<para>The driver failed to allocate enough memory.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_fclose">
-<title>close()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call deactivates and deallocates a filter that was previously
- allocated via the open() call.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int close(int fd);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_fread">
-<title>read()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call returns filtered data, which might be section or PES data. The
- filtered data is transferred from the driver&#8217;s internal circular buffer to buf. The
- maximum amount of data to be transferred is implied by count.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>When returning section data the driver always tries to return a complete single
- section (even though buf would provide buffer space for more data). If the size
- of the buffer is smaller than the section as much as possible will be returned,
- and the remaining data will be provided in subsequent calls.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The size of the internal buffer is 2 * 4096 bytes (the size of two maximum
- sized sections) by default. The size of this buffer may be changed by using the
- DMX_SET_BUFFER_SIZE function. If the buffer is not large enough, or if
- the read operations are not performed fast enough, this may result in a buffer
- overflow error. In this case EOVERFLOW will be returned, and the circular
- buffer will be emptied. This call is blocking if there is no data to return, i.e. the
- process will be put to sleep waiting for data, unless the O_NONBLOCK flag
- is specified.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>Note that in order to be able to read, the filtering process has to be started
- by defining either a section or a PES filter by means of the ioctl functions,
- and then starting the filtering process via the DMX_START ioctl function
- or by setting the DMX_IMMEDIATE_START flag. If the reading is done
- from a logical DVR demux device, the data will constitute a Transport Stream
- including the packets from all PES filters in the corresponding demux device
- /dev/dvb/adapter0/demux0 having the output set to DMX_OUT_TS_TAP.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>size_t read(int fd, void &#x22C6;buf, size_t count);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>void *buf</para>
-</entry><entry
- align="char">
-<para>Pointer to the buffer to be used for returned filtered data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t count</para>
-</entry><entry
- align="char">
-<para>Size of buf.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EWOULDBLOCK</para>
-</entry><entry
- align="char">
-<para>No data to return and O_NONBLOCK was specified.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ECRC</para>
-</entry><entry
- align="char">
-<para>Last section had a CRC error - no data returned. The
- buffer is flushed.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EOVERFLOW</para>
-</entry><entry
- align="char">
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>The filtered data was not read from the buffer in due
- time, resulting in non-read data being lost. The buffer is
- flushed.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ETIMEDOUT</para>
-</entry><entry
- align="char">
-<para>The section was not loaded within the stated timeout
- period. See ioctl DMX_SET_FILTER for how to set a
- timeout.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>The driver failed to write to the callers buffer due to an
- invalid *buf pointer.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_fwrite">
-<title>write()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call is only provided by the logical device /dev/dvb/adapter0/dvr0,
- associated with the physical demux device that provides the actual DVR
- functionality. It is used for replay of a digitally recorded Transport Stream.
- Matching filters have to be defined in the corresponding physical demux
- device, /dev/dvb/adapter0/demux0. The amount of data to be transferred is
- implied by count.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>ssize_t write(int fd, const void &#x22C6;buf, size_t
- count);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>void *buf</para>
-</entry><entry
- align="char">
-<para>Pointer to the buffer containing the Transport Stream.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t count</para>
-</entry><entry
- align="char">
-<para>Size of buf.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EWOULDBLOCK</para>
-</entry><entry
- align="char">
-<para>No data was written. This
- might happen if O_NONBLOCK was specified and there
- is no more buffer space available (if O_NONBLOCK is
- not specified the function will block until buffer space is
- available).</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>This error code indicates that there are conflicting
- requests. The corresponding demux device is setup to
- receive data from the front- end. Make sure that these
- filters are stopped and that the filters with input set to
- DMX_IN_DVR are started.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_start">
-<title>DMX_START</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call is used to start the actual filtering operation defined via the ioctl
- calls DMX_SET_FILTER or DMX_SET_PES_FILTER.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request = DMX_START);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_START for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument, i.e. no filtering parameters provided via
- the DMX_SET_FILTER or DMX_SET_PES_FILTER
- functions.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>This error code indicates that there are conflicting
- requests. There are active filters filtering data from
- another input source. Make sure that these filters are
- stopped before starting this filter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_stop">
-<title>DMX_STOP</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call is used to stop the actual filtering operation defined via the
- ioctl calls DMX_SET_FILTER or DMX_SET_PES_FILTER and started via
- the DMX_START command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request = DMX_STOP);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_STOP for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_set_filter">
-<title>DMX_SET_FILTER</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call sets up a filter according to the filter and mask parameters
- provided. A timeout may be defined stating number of seconds to wait for a
- section to be loaded. A value of 0 means that no timeout should be applied.
- Finally there is a flag field where it is possible to state whether a section should
- be CRC-checked, whether the filter should be a &#8221;one-shot&#8221; filter, i.e. if the
- filtering operation should be stopped after the first section is received, and
- whether the filtering operation should be started immediately (without waiting
- for a DMX_START ioctl call). If a filter was previously set-up, this filter will
- be canceled, and the receive buffer will be flushed.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request = DMX_SET_FILTER,
- struct dmx_sct_filter_params &#x22C6;params);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_SET_FILTER for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dmx_sct_filter_params
- *params</para>
-</entry><entry
- align="char">
-<para>Pointer to structure containing filter parameters.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_set_pes_filter">
-<title>DMX_SET_PES_FILTER</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call sets up a PES filter according to the parameters provided. By a
- PES filter is meant a filter that is based just on the packet identifier (PID), i.e.
- no PES header or payload filtering capability is supported.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The transport stream destination for the filtered output may be set. Also the
- PES type may be stated in order to be able to e.g. direct a video stream directly
- to the video decoder. Finally there is a flag field where it is possible to state
- whether the filtering operation should be started immediately (without waiting
- for a DMX_START ioctl call). If a filter was previously set-up, this filter will
- be cancelled, and the receive buffer will be flushed.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request = DMX_SET_PES_FILTER,
- struct dmx_pes_filter_params &#x22C6;params);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_SET_PES_FILTER for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dmx_pes_filter_params
- *params</para>
-</entry><entry
- align="char">
-<para>Pointer to structure containing filter parameters.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>This error code indicates that there are conflicting
- requests. There are active filters filtering data from
- another input source. Make sure that these filters are
- stopped before starting this filter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dms_set_buffer_size">
-<title>DMX_SET_BUFFER_SIZE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call is used to set the size of the circular buffer used for filtered data.
- The default size is two maximum sized sections, i.e. if this function is not called
- a buffer size of 2 * 4096 bytes will be used.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request =
- DMX_SET_BUFFER_SIZE, unsigned long size);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_SET_BUFFER_SIZE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>unsigned long size</para>
-</entry><entry
- align="char">
-<para>Size of circular buffer.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOMEM</para>
-</entry><entry
- align="char">
-<para>The driver was not able to allocate a buffer of the
- requested size.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_get_event">
-<title>DMX_GET_EVENT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns an event if available. If an event is not available,
- the behavior depends on whether the device is in blocking or non-blocking
- mode. In the latter case, the call fails immediately with errno set to
- EWOULDBLOCK. In the former case, the call blocks until an event becomes
- available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The standard Linux poll() and/or select() system calls can be used with the
- device file descriptor to watch for new events. For select(), the file descriptor
- should be included in the exceptfds argument, and for poll(), POLLPRI should
- be specified as the wake-up condition. Only the latest event for each filter is
- saved.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request = DMX_GET_EVENT,
- struct dmx_event &#x22C6;ev);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_GET_EVENT for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct dmx_event *ev</para>
-</entry><entry
- align="char">
-<para>Pointer to the location where the event is to be stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>ev points to an invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EWOULDBLOCK</para>
-</entry><entry
- align="char">
-<para>There is no event pending, and the device is in
- non-blocking mode.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="dmx_get_stc">
-<title>DMX_GET_STC</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns the current value of the system time counter (which is driven
- by a PES filter of type DMX_PES_PCR). Some hardware supports more than one
- STC, so you must specify which one by setting the num field of stc before the ioctl
- (range 0...n). The result is returned in form of a ratio with a 64 bit numerator
- and a 32 bit denominator, so the real 90kHz STC value is stc-&#x003E;stc /
- stc-&#x003E;base
- .</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request = DMX_GET_STC, struct
- dmx_stc &#x22C6;stc);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals DMX_GET_STC for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct dmx_stc *stc</para>
-</entry><entry
- align="char">
-<para>Pointer to the location where the stc is to be stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>stc points to an invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid stc number.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section></section>
diff --git a/dvb-spec/sgml/dvbstb.pdf b/dvb-spec/sgml/dvbstb.pdf
deleted file mode 100644
index 0fa75d90c..000000000
--- a/dvb-spec/sgml/dvbstb.pdf
+++ /dev/null
Binary files differ
diff --git a/dvb-spec/sgml/dvbstb.png b/dvb-spec/sgml/dvbstb.png
deleted file mode 100644
index 9b8f372e7..000000000
--- a/dvb-spec/sgml/dvbstb.png
+++ /dev/null
Binary files differ
diff --git a/dvb-spec/sgml/examples.sgml b/dvb-spec/sgml/examples.sgml
deleted file mode 100644
index b89dceda6..000000000
--- a/dvb-spec/sgml/examples.sgml
+++ /dev/null
@@ -1,365 +0,0 @@
-<title>Examples</title>
-<para>In this section we would like to present some examples for using the DVB API.
-</para>
-<para>Maintainer note: This section is out of date. Please refer to the sample programs packaged
-with the driver distribution from <emphasis role="tt">http://linuxtv.org/</emphasis>.
-</para>
-
-<section id="tuning">
-<title>Tuning</title>
-<para>We will start with a generic tuning subroutine that uses the frontend and SEC, as well as
-the demux devices. The example is given for QPSK tuners, but can easily be adjusted for
-QAM.
-</para>
-<programlisting>
- #include &#x003C;sys/ioctl.h&#x003E;
- #include &#x003C;stdio.h&#x003E;
- #include &#x003C;stdint.h&#x003E;
- #include &#x003C;sys/types.h&#x003E;
- #include &#x003C;sys/stat.h&#x003E;
- #include &#x003C;fcntl.h&#x003E;
- #include &#x003C;time.h&#x003E;
- #include &#x003C;unistd.h&#x003E;
-
- #include &#x003C;linux/dvb/dmx.h&#x003E;
- #include &#x003C;linux/dvb/frontend.h&#x003E;
- #include &#x003C;linux/dvb/sec.h&#x003E;
- #include &#x003C;sys/poll.h&#x003E;
-
- #define DMX "/dev/dvb/adapter0/demux1"
- #define FRONT "/dev/dvb/adapter0/frontend1"
- #define SEC "/dev/dvb/adapter0/sec1"
-
- /&#x22C6; routine for checking if we have a signal and other status information&#x22C6;/
- int FEReadStatus(int fd, fe_status_t &#x22C6;stat)
- {
- int ans;
-
- if ( (ans = ioctl(fd,FE_READ_STATUS,stat) &#x003C; 0)){
- perror("FE READ STATUS: ");
- return -1;
- }
-
- if (&#x22C6;stat &amp; FE_HAS_POWER)
- printf("FE HAS POWER\n");
-
- if (&#x22C6;stat &amp; FE_HAS_SIGNAL)
- printf("FE HAS SIGNAL\n");
-
- if (&#x22C6;stat &amp; FE_SPECTRUM_INV)
- printf("SPEKTRUM INV\n");
-
- return 0;
- }
-
-
- /&#x22C6; tune qpsk &#x22C6;/
- /&#x22C6; freq: frequency of transponder &#x22C6;/
- /&#x22C6; vpid, apid, tpid: PIDs of video, audio and teletext TS packets &#x22C6;/
- /&#x22C6; diseqc: DiSEqC address of the used LNB &#x22C6;/
- /&#x22C6; pol: Polarisation &#x22C6;/
- /&#x22C6; srate: Symbol Rate &#x22C6;/
- /&#x22C6; fec. FEC &#x22C6;/
- /&#x22C6; lnb_lof1: local frequency of lower LNB band &#x22C6;/
- /&#x22C6; lnb_lof2: local frequency of upper LNB band &#x22C6;/
- /&#x22C6; lnb_slof: switch frequency of LNB &#x22C6;/
-
- int set_qpsk_channel(int freq, int vpid, int apid, int tpid,
- int diseqc, int pol, int srate, int fec, int lnb_lof1,
- int lnb_lof2, int lnb_slof)
- {
- struct secCommand scmd;
- struct secCmdSequence scmds;
- struct dmx_pes_filter_params pesFilterParams;
- FrontendParameters frp;
- struct pollfd pfd[1];
- FrontendEvent event;
- int demux1, demux2, demux3, front;
-
- frequency = (uint32_t) freq;
- symbolrate = (uint32_t) srate;
-
- if((front = open(FRONT,O_RDWR)) &#x003C; 0){
- perror("FRONTEND DEVICE: ");
- return -1;
- }
-
- if((sec = open(SEC,O_RDWR)) &#x003C; 0){
- perror("SEC DEVICE: ");
- return -1;
- }
-
- if (demux1 &#x003C; 0){
- if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
- &#x003C; 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (demux2 &#x003C; 0){
- if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
- &#x003C; 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (demux3 &#x003C; 0){
- if ((demux3=open(DMX, O_RDWR|O_NONBLOCK))
- &#x003C; 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (freq &#x003C; lnb_slof) {
- frp.Frequency = (freq - lnb_lof1);
- scmds.continuousTone = SEC_TONE_OFF;
- } else {
- frp.Frequency = (freq - lnb_lof2);
- scmds.continuousTone = SEC_TONE_ON;
- }
- frp.Inversion = INVERSION_AUTO;
- if (pol) scmds.voltage = SEC_VOLTAGE_18;
- else scmds.voltage = SEC_VOLTAGE_13;
-
- scmd.type=0;
- scmd.u.diseqc.addr=0x10;
- scmd.u.diseqc.cmd=0x38;
- scmd.u.diseqc.numParams=1;
- scmd.u.diseqc.params[0] = 0xF0 | ((diseqc &#x22C6; 4) &amp; 0x0F) |
- (scmds.continuousTone == SEC_TONE_ON ? 1 : 0) |
- (scmds.voltage==SEC_VOLTAGE_18 ? 2 : 0);
-
- scmds.miniCommand=SEC_MINI_NONE;
- scmds.numCommands=1;
- scmds.commands=&amp;scmd;
- if (ioctl(sec, SEC_SEND_SEQUENCE, &amp;scmds) &#x003C; 0){
- perror("SEC SEND: ");
- return -1;
- }
-
- if (ioctl(sec, SEC_SEND_SEQUENCE, &amp;scmds) &#x003C; 0){
- perror("SEC SEND: ");
- return -1;
- }
-
- frp.u.qpsk.SymbolRate = srate;
- frp.u.qpsk.FEC_inner = fec;
-
- if (ioctl(front, FE_SET_FRONTEND, &amp;frp) &#x003C; 0){
- perror("QPSK TUNE: ");
- return -1;
- }
-
- pfd[0].fd = front;
- pfd[0].events = POLLIN;
-
- if (poll(pfd,1,3000)){
- if (pfd[0].revents &amp; POLLIN){
- printf("Getting QPSK event\n");
- if ( ioctl(front, FE_GET_EVENT, &amp;event)
-
- == -EOVERFLOW){
- perror("qpsk get event");
- return -1;
- }
- printf("Received ");
- switch(event.type){
- case FE_UNEXPECTED_EV:
- printf("unexpected event\n");
- return -1;
- case FE_FAILURE_EV:
- printf("failure event\n");
- return -1;
-
- case FE_COMPLETION_EV:
- printf("completion event\n");
- }
- }
- }
-
-
- pesFilterParams.pid = vpid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_DECODER;
- pesFilterParams.pes_type = DMX_PES_VIDEO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux1, DMX_SET_PES_FILTER, &amp;pesFilterParams) &#x003C; 0){
- perror("set_vpid");
- return -1;
- }
-
- pesFilterParams.pid = apid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_DECODER;
- pesFilterParams.pes_type = DMX_PES_AUDIO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux2, DMX_SET_PES_FILTER, &amp;pesFilterParams) &#x003C; 0){
- perror("set_apid");
- return -1;
- }
-
- pesFilterParams.pid = tpid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_DECODER;
- pesFilterParams.pes_type = DMX_PES_TELETEXT;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux3, DMX_SET_PES_FILTER, &amp;pesFilterParams) &#x003C; 0){
- perror("set_tpid");
- return -1;
- }
-
- return has_signal(fds);
- }
-
-</programlisting>
-<para>The program assumes that you are using a universal LNB and a standard DiSEqC
-switch with up to 4 addresses. Of course, you could build in some more checking if
-tuning was successful and maybe try to repeat the tuning process. Depending on the
-external hardware, i.e. LNB and DiSEqC switch, and weather conditions this may be
-necessary.
-</para>
-</section>
-
-<section id="the_dvr_device">
-<title>The DVR device</title>
-<para>The following program code shows how to use the DVR device for recording.
-</para>
-<programlisting>
- #include &#x003C;sys/ioctl.h&#x003E;
- #include &#x003C;stdio.h&#x003E;
- #include &#x003C;stdint.h&#x003E;
- #include &#x003C;sys/types.h&#x003E;
- #include &#x003C;sys/stat.h&#x003E;
- #include &#x003C;fcntl.h&#x003E;
- #include &#x003C;time.h&#x003E;
- #include &#x003C;unistd.h&#x003E;
-
- #include &#x003C;linux/dvb/dmx.h&#x003E;
- #include &#x003C;linux/dvb/video.h&#x003E;
- #include &#x003C;sys/poll.h&#x003E;
- #define DVR "/dev/dvb/adapter0/dvr1"
- #define AUDIO "/dev/dvb/adapter0/audio1"
- #define VIDEO "/dev/dvb/adapter0/video1"
-
- #define BUFFY (188&#x22C6;20)
- #define MAX_LENGTH (1024&#x22C6;1024&#x22C6;5) /&#x22C6; record 5MB &#x22C6;/
-
-
- /&#x22C6; switch the demuxes to recording, assuming the transponder is tuned &#x22C6;/
-
- /&#x22C6; demux1, demux2: file descriptor of video and audio filters &#x22C6;/
- /&#x22C6; vpid, apid: PIDs of video and audio channels &#x22C6;/
-
- int switch_to_record(int demux1, int demux2, uint16_t vpid, uint16_t apid)
- {
- struct dmx_pes_filter_params pesFilterParams;
-
- if (demux1 &#x003C; 0){
- if ((demux1=open(DMX, O_RDWR|O_NONBLOCK))
- &#x003C; 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- if (demux2 &#x003C; 0){
- if ((demux2=open(DMX, O_RDWR|O_NONBLOCK))
- &#x003C; 0){
- perror("DEMUX DEVICE: ");
- return -1;
- }
- }
-
- pesFilterParams.pid = vpid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_TS_TAP;
- pesFilterParams.pes_type = DMX_PES_VIDEO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux1, DMX_SET_PES_FILTER, &amp;pesFilterParams) &#x003C; 0){
- perror("DEMUX DEVICE");
- return -1;
- }
- pesFilterParams.pid = apid;
- pesFilterParams.input = DMX_IN_FRONTEND;
- pesFilterParams.output = DMX_OUT_TS_TAP;
- pesFilterParams.pes_type = DMX_PES_AUDIO;
- pesFilterParams.flags = DMX_IMMEDIATE_START;
- if (ioctl(demux2, DMX_SET_PES_FILTER, &amp;pesFilterParams) &#x003C; 0){
- perror("DEMUX DEVICE");
- return -1;
- }
- return 0;
- }
-
- /&#x22C6; start recording MAX_LENGTH , assuming the transponder is tuned &#x22C6;/
-
- /&#x22C6; demux1, demux2: file descriptor of video and audio filters &#x22C6;/
- /&#x22C6; vpid, apid: PIDs of video and audio channels &#x22C6;/
- int record_dvr(int demux1, int demux2, uint16_t vpid, uint16_t apid)
- {
- int i;
- int len;
- int written;
- uint8_t buf[BUFFY];
- uint64_t length;
- struct pollfd pfd[1];
- int dvr, dvr_out;
-
- /&#x22C6; open dvr device &#x22C6;/
- if ((dvr = open(DVR, O_RDONLY|O_NONBLOCK)) &#x003C; 0){
- perror("DVR DEVICE");
- return -1;
- }
-
- /&#x22C6; switch video and audio demuxes to dvr &#x22C6;/
- printf ("Switching dvr on\n");
- i = switch_to_record(demux1, demux2, vpid, apid);
- printf("finished: ");
-
- printf("Recording %2.0f MB of test file in TS format\n",
- MAX_LENGTH/(1024.0&#x22C6;1024.0));
- length = 0;
-
- /&#x22C6; open output file &#x22C6;/
- if ((dvr_out = open(DVR_FILE,O_WRONLY|O_CREAT
- |O_TRUNC, S_IRUSR|S_IWUSR
- |S_IRGRP|S_IWGRP|S_IROTH|
- S_IWOTH)) &#x003C; 0){
- perror("Can't open file for dvr test");
- return -1;
- }
-
- pfd[0].fd = dvr;
- pfd[0].events = POLLIN;
-
- /&#x22C6; poll for dvr data and write to file &#x22C6;/
- while (length &#x003C; MAX_LENGTH ) {
- if (poll(pfd,1,1)){
- if (pfd[0].revents &amp; POLLIN){
- len = read(dvr, buf, BUFFY);
- if (len &#x003C; 0){
- perror("recording");
- return -1;
- }
- if (len &#x003E; 0){
- written = 0;
- while (written &#x003C; len)
- written +=
- write (dvr_out,
- buf, len);
- length += len;
- printf("written %2.0f MB\r",
- length/1024./1024.);
- }
- }
- }
- }
- return 0;
- }
-
-</programlisting>
-
-</section>
diff --git a/dvb-spec/sgml/fdl.sgml b/dvb-spec/sgml/fdl.sgml
deleted file mode 100644
index 3b992d039..000000000
--- a/dvb-spec/sgml/fdl.sgml
+++ /dev/null
@@ -1,374 +0,0 @@
-<title>GNU Free Documentation License</title>
-<para>Version 1.1, March 2000
-</para>
-<para>Copyright &copy; 2000 Free Software Foundation, Inc.
-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-Everyone is permitted to copy and distribute verbatim copies of this license document, but
-changing it is not allowed.
-</para>
-<section id="preamble">
-<title>Preamble</title>
-<para>The purpose of this License is to make a manual, textbook, or other written document
-&#8220;free&#8221; in the sense of freedom: to assure everyone the effective freedom to copy and
-redistribute it, with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way to get credit
-for their work, while not being considered responsible for modifications made by
-others.
-</para>
-<para>This License is a kind of &#8220;copyleft&#8221;, which means that derivative works of the document
-must themselves be free in the same sense. It complements the GNU General Public License,
-which is a copyleft license designed for free software.
-</para>
-<para>We have designed this License in order to use it for manuals for free software, because
-free software needs free documentation: a free program should come with manuals providing
-the same freedoms that the software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or whether it is published as a
-printed book. We recommend this License principally for works whose purpose is instruction
-or reference.
-</para>
-</section>
-
-<section id="applicability_and_definitions">
-<title>Applicability and Definitions</title>
-<para>This License applies to any manual or other work that contains a notice placed by the
-copyright holder saying it can be distributed under the terms of this License. The
-&#8220;Document&#8221;, below, refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as &#8220;you&#8221;.
-</para>
-<para>A &#8220;Modified Version&#8221; of the Document means any work containing the Document or a
-portion of it, either copied verbatim, or with modifications and/or translated into another
-language.
-</para>
-<para>A &#8220;Secondary Section&#8221; is a named appendix or a front-matter section of the Document
-that deals exclusively with the relationship of the publishers or authors of the Document to
-the Document&#8217;s overall subject (or to related matters) and contains nothing that could
-fall directly within that overall subject. (For example, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any mathematics.) The
-relationship could be a matter of historical connection with the subject or with related
-matters, or of legal, commercial, philosophical, ethical or political position regarding
-them.
-</para>
-<para>The &#8220;Invariant Sections&#8221; are certain Secondary Sections whose titles are designated, as
-being those of Invariant Sections, in the notice that says that the Document is released under
-this License.
-</para>
-<para>The &#8220;Cover Texts&#8221; are certain short passages of text that are listed, as Front-Cover Texts
-or Back-Cover Texts, in the notice that says that the Document is released under this
-License.
-</para>
-<para>A &#8220;Transparent&#8221; copy of the Document means a machine-readable copy, represented in a
-format whose specification is available to the general public, whose contents can be viewed
-and edited directly and straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available drawing editor, and
-that is suitable for input to text formatters or for automatic translation to a variety of
-formats suitable for input to text formatters. A copy made in an otherwise Transparent
-file format whose markup has been designed to thwart or discourage subsequent
-modification by readers is not Transparent. A copy that is not &#8220;Transparent&#8221; is called
-&#8220;Opaque&#8221;.
-</para>
-<para>Examples of suitable formats for Transparent copies include plain ASCII without markup,
-Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD,
-and standard-conforming simple HTML designed for human modification. Opaque formats
-include PostScript, PDF, proprietary formats that can be read and edited only by proprietary
-word processors, SGML or XML for which the DTD and/or processing tools are not
-generally available, and the machine-generated HTML produced by some word processors
-for output purposes only.
-</para>
-<para>The &#8220;Title Page&#8221; means, for a printed book, the title page itself, plus such following pages
-as are needed to hold, legibly, the material this License requires to appear in the title page.
-For works in formats which do not have any title page as such, &#8220;Title Page&#8221; means the text
-near the most prominent appearance of the work&#8217;s title, preceding the beginning of the body
-of the text.
-</para>
-</section>
-
-<section id="verbatim_copying">
-<title>Verbatim Copying</title>
-<para>You may copy and distribute the Document in any medium, either commercially or
-noncommercially, provided that this License, the copyright notices, and the license notice
-saying this License applies to the Document are reproduced in all copies, and that you add no
-other conditions whatsoever to those of this License. You may not use technical measures to
-obstruct or control the reading or further copying of the copies you make or distribute.
-However, you may accept compensation in exchange for copies. If you distribute
-a large enough number of copies you must also follow the conditions in section
-3.
-</para>
-<para>You may also lend copies, under the same conditions stated above, and you may publicly
-display copies.
-</para>
-</section>
-
-<section id="copying_in_quantity">
-<title>Copying in Quantity</title>
-<para>If you publish printed copies of the Document numbering more than 100, and the
-Document&#8217;s license notice requires Cover Texts, you must enclose the copies in covers that
-carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and
-Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you
-as the publisher of these copies. The front cover must present the full title with all words of
-the title equally prominent and visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve the title of the
-Document and satisfy these conditions, can be treated as verbatim copying in other
-respects.
-</para>
-<para>If the required texts for either cover are too voluminous to fit legibly, you should put the
-first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto
-adjacent pages.
-</para>
-<para>If you publish or distribute Opaque copies of the Document numbering more than 100,
-you must either include a machine-readable Transparent copy along with each Opaque copy,
-or state in or with each Opaque copy a publicly-accessible computer-network location
-containing a complete Transparent copy of the Document, free of added material,
-which the general network-using public has access to download anonymously at
-no charge using public-standard network protocols. If you use the latter option,
-you must take reasonably prudent steps, when you begin distribution of Opaque
-copies in quantity, to ensure that this Transparent copy will remain thus accessible
-at the stated location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that edition to the
-public.
-</para>
-<para>It is requested, but not required, that you contact the authors of the Document well before
-redistributing any large number of copies, to give them a chance to provide you with an
-updated version of the Document.
-</para>
-</section>
-
-<section id="modifications">
-<title>Modifications</title>
-<para>You may copy and distribute a Modified Version of the Document under the conditions of
-sections 2 and 3 above, provided that you release the Modified Version under precisely this
-License, with the Modified Version filling the role of the Document, thus licensing
-distribution and modification of the Modified Version to whoever possesses a copy of it. In
-addition, you must do these things in the Modified Version:
-</para>
-
-<itemizedlist>
- <listitem>
-<para>Use in the Title Page (and on the covers, if any) a title distinct from that of the
- Document, and from those of previous versions (which should, if there were any,
- be listed in the History section of the Document). You may use the same title as
- a previous version if the original publisher of that version gives permission.
-</para>
-</listitem>
- <listitem>
-<para>List on the Title Page, as authors, one or more persons or entities responsible for
- authorship of the modifications in the Modified Version, together with at least
- five of the principal authors of the Document (all of its principal authors, if it has
- less than five).
-</para>
-</listitem>
- <listitem>
-<para>State on the Title page the name of the publisher of the Modified Version, as the
- publisher.
-</para>
-</listitem>
- <listitem>
-<para>Preserve all the copyright notices of the Document.
-</para>
-</listitem>
- <listitem>
-<para>Add an appropriate copyright notice for your modifications adjacent to the other
- copyright notices.
-</para>
-</listitem>
- <listitem>
-<para>Include, immediately after the copyright notices, a license notice giving the
- public permission to use the Modified Version under the terms of this License,
- in the form shown in the Addendum below.
-</para>
-</listitem>
- <listitem>
-<para>Preserve in that license notice the full lists of Invariant Sections and required
- Cover Texts given in the Document&#8217;s license notice.
-</para>
-</listitem>
- <listitem>
-<para>Include an unaltered copy of this License.
-</para>
-</listitem>
- <listitem>
-<para>Preserve the section entitled &#8220;History&#8221;, and its title, and add to it an item stating
- at least the title, year, new authors, and publisher of the Modified Version as
- given on the Title Page. If there is no section entitled &#8220;History&#8221; in the Document,
- create one stating the title, year, authors, and publisher of the Document as given
- on its Title Page, then add an item describing the Modified Version as stated in
- the previous sentence.
-</para>
-</listitem>
- <listitem>
-<para>Preserve the network location, if any, given in the Document for public access
- to a Transparent copy of the Document, and likewise the network locations
- given in the Document for previous versions it was based on. These may be
- placed in the &#8220;History&#8221; section. You may omit a network location for a work that
- was published at least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-</para>
-</listitem>
- <listitem>
-<para>In any section entitled &#8220;Acknowledgements&#8221; or &#8220;Dedications&#8221;, preserve the
- section&#8217;s title, and preserve in the section all the substance and tone of each of
- the contributor acknowledgements and/or dedications given therein.
-</para>
-</listitem>
- <listitem>
-<para>Preserve all the Invariant Sections of the Document, unaltered in their text and
- in their titles. Section numbers or the equivalent are not considered part of the
- section titles.
-</para>
-</listitem>
- <listitem>
-<para>Delete any section entitled &#8220;Endorsements&#8221;. Such a section may not be included
- in the Modified Version.
-</para>
-</listitem>
- <listitem>
-<para>Do not retitle any existing section as &#8220;Endorsements&#8221; or to conflict in title with
- any Invariant Section.
-</para>
-</listitem></itemizedlist>
-<para>If the Modified Version includes new front-matter sections or appendices that qualify as
-Secondary Sections and contain no material copied from the Document, you may at your
-option designate some or all of these sections as invariant. To do this, add their titles to the list
-of Invariant Sections in the Modified Version&#8217;s license notice. These titles must be distinct
-from any other section titles.
-</para>
-<para>You may add a section entitled &#8220;Endorsements&#8221;, provided it contains nothing but
-endorsements of your Modified Version by various parties &#8211; for example, statements of peer
-review or that the text has been approved by an organization as the authoritative definition of
-a standard.
-</para>
-<para>You may add a passage of up to five words as a Front-Cover Text, and a passage of up to
-25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version.
-Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already includes a cover text
-for the same cover, previously added by you or by arrangement made by the same
-entity you are acting on behalf of, you may not add another; but you may replace
-the old one, on explicit permission from the previous publisher that added the old
-one.
-</para>
-<para>The author(s) and publisher(s) of the Document do not by this License give permission to
-use their names for publicity for or to assert or imply endorsement of any Modified
-Version.
-</para>
-</section>
-
-<section id="combining_documents">
-<title>Combining Documents</title>
-<para>You may combine the Document with other documents released under this License, under
-the terms defined in section 4 above for modified versions, provided that you include
-in the combination all of the Invariant Sections of all of the original documents,
-unmodified, and list them all as Invariant Sections of your combined work in its license
-notice.
-</para>
-<para>The combined work need only contain one copy of this License, and multiple identical
-Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections
-with the same name but different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original author or publisher of
-that section if known, or else a unique number. Make the same adjustment to the
-section titles in the list of Invariant Sections in the license notice of the combined
-work.
-</para>
-<para>In the combination, you must combine any sections entitled &#8220;History&#8221; in the various
-original documents, forming one section entitled &#8220;History&#8221;; likewise combine any sections
-entitled &#8220;Acknowledgements&#8221;, and any sections entitled &#8220;Dedications&#8221;. You must delete all
-sections entitled &#8220;Endorsements.&#8221;
-</para>
-</section>
-
-<section id="collections_of_documents">
-<title>Collections of Documents</title>
-<para>You may make a collection consisting of the Document and other documents released
-under this License, and replace the individual copies of this License in the various documents
-with a single copy that is included in the collection, provided that you follow the
-rules of this License for verbatim copying of each of the documents in all other
-respects.
-</para>
-<para>You may extract a single document from such a collection, and distribute it individually
-under this License, provided you insert a copy of this License into the extracted document,
-and follow this License in all other respects regarding verbatim copying of that
-document.
-</para>
-</section>
-
-<section id="aggregation_with_independent_works">
-<title>Aggregation With Independent Works</title>
-<para>A compilation of the Document or its derivatives with other separate and independent
-documents or works, in or on a volume of a storage or distribution medium, does not as a
-whole count as a Modified Version of the Document, provided no compilation copyright is
-claimed for the compilation. Such a compilation is called an &#8220;aggregate&#8221;, and this License
-does not apply to the other self-contained works thus compiled with the Document, on
-account of their being thus compiled, if they are not themselves derivative works of the
-Document.
-</para>
-<para>If the Cover Text requirement of section 3 is applicable to these copies of the Document,
-then if the Document is less than one quarter of the entire aggregate, the Document&#8217;s Cover
-Texts may be placed on covers that surround only the Document within the aggregate.
-Otherwise they must appear on covers around the whole aggregate.
-</para>
-</section>
-
-<section id="translation">
-<title>Translation</title>
-<para>Translation is considered a kind of modification, so you may distribute translations of the
-Document under the terms of section 4. Replacing Invariant Sections with translations
-requires special permission from their copyright holders, but you may include translations of
-some or all Invariant Sections in addition to the original versions of these Invariant Sections.
-You may include a translation of this License provided that you also include the original
-English version of this License. In case of a disagreement between the translation
-and the original English version of this License, the original English version will
-prevail.
-</para>
-</section>
-
-<section id="termination">
-<title>Termination</title>
-<para>You may not copy, modify, sublicense, or distribute the Document except as expressly
-provided for under this License. Any other attempt to copy, modify, sublicense or
-distribute the Document is void, and will automatically terminate your rights under this
-License. However, parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such parties remain in full
-compliance.
-</para>
-</section>
-
-<section id="future_revisions_of_this_license">
-<title>Future Revisions of This License</title>
-<para>The Free Software Foundation may publish new, revised versions of the GNU Free
-Documentation License from time to time. Such new versions will be similar in spirit to the
-present version, but may differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-</para>
-<para>Each version of the License is given a distinguishing version number. If the Document
-specifies that a particular numbered version of this License &#8221;or any later version&#8221; applies to it,
-you have the option of following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the Free Software
-Foundation. If the Document does not specify a version number of this License,
-you may choose any version ever published (not as a draft) by the Free Software
-Foundation.
-</para>
-</section>
-
-<section id="addendum">
-<title>ADDENDUM: How to use this License for your documents</title>
-<para>To use this License in a document you have written, include a copy of the License in the
-document and put the following copyright and license notices just after the title
-page:
-</para>
-
-<para>Copyright &copy; YEAR YOUR NAME. Permission is granted to copy,
- distribute and/or modify this document under the terms of the GNU Free
- Documentation License, Version 1.1 or any later version published by the
- Free Software Foundation; with the Invariant Sections being LIST THEIR
- TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover
- Texts being LIST. A copy of the license is included in the section entitled
- &#8220;GNU Free Documentation License&#8221;.
-</para>
-<para>If you have no Invariant Sections, write &#8220;with no Invariant Sections&#8221; instead
-of saying which ones are invariant. If you have no Front-Cover Texts, write &#8220;no
-Front-Cover Texts&#8221; instead of &#8220;Front-Cover Texts being LIST&#8221;; likewise for Back-Cover
-Texts.
-</para>
-<para>If your document contains nontrivial examples of program code, we recommend releasing
-these examples in parallel under your choice of free software license, such as the GNU
-General Public License, to permit their use in free software.
-</para>
-</section>
diff --git a/dvb-spec/sgml/frontend.sgml b/dvb-spec/sgml/frontend.sgml
deleted file mode 100644
index 91a749f70..000000000
--- a/dvb-spec/sgml/frontend.sgml
+++ /dev/null
@@ -1,1765 +0,0 @@
-<title>DVB Frontend API</title>
-
-<para>The DVB frontend device controls the tuner and DVB demodulator
-hardware. It can be accessed through <emphasis
-role="tt">/dev/dvb/adapter0/frontend0</emphasis>. Data types and and
-ioctl definitions can be accessed by including <emphasis
-role="tt">linux/dvb/frontend.h</emphasis> in your application.</para>
-
-<para>DVB frontends come in three varieties: DVB-S (satellite), DVB-C
-(cable) and DVB-T (terrestrial). Transmission via the internet (DVB-IP)
-is not yet handled by this API but a future extension is possible. For
-DVB-S the frontend device also supports satellite equipment control
-(SEC) via DiSEqC and V-SEC protocols. The DiSEqC (digital SEC)
-specification is available from Eutelsat <emphasis
-role="tt">http://www.eutelsat.org/</emphasis>.</para>
-
-<para>Note that the DVB API may also be used for MPEG decoder-only PCI
-cards, in which case there exists no frontend device.</para>
-
-<section id="frontend_types">
-<title>Frontend Data Types</title>
-
-<section id="frontend_type">
-<title>frontend type</title>
-
-<para>For historical reasons frontend types are named after the type of modulation used in
-transmission.</para>
-<programlisting>
- typedef enum fe_type {
- FE_QPSK, /&#x22C6; DVB-S &#x22C6;/
- FE_QAM, /&#x22C6; DVB-C &#x22C6;/
- FE_OFDM /&#x22C6; DVB-T &#x22C6;/
- } fe_type_t;
-</programlisting>
-
-</section>
-
-<section id="frontend_caps">
-<title>frontend capabilities</title>
-
-<para>Capabilities describe what a frontend can do. Some capabilities can only be supported for
-a specific frontend type.</para>
-<programlisting>
- typedef enum fe_caps {
- FE_IS_STUPID = 0,
- FE_CAN_INVERSION_AUTO = 0x1,
- FE_CAN_FEC_1_2 = 0x2,
- FE_CAN_FEC_2_3 = 0x4,
- FE_CAN_FEC_3_4 = 0x8,
- FE_CAN_FEC_4_5 = 0x10,
- FE_CAN_FEC_5_6 = 0x20,
- FE_CAN_FEC_6_7 = 0x40,
- FE_CAN_FEC_7_8 = 0x80,
- FE_CAN_FEC_8_9 = 0x100,
- FE_CAN_FEC_AUTO = 0x200,
- FE_CAN_QPSK = 0x400,
- FE_CAN_QAM_16 = 0x800,
- FE_CAN_QAM_32 = 0x1000,
- FE_CAN_QAM_64 = 0x2000,
- FE_CAN_QAM_128 = 0x4000,
- FE_CAN_QAM_256 = 0x8000,
- FE_CAN_QAM_AUTO = 0x10000,
- FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,
- FE_CAN_BANDWIDTH_AUTO = 0x40000,
- FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,
- FE_CAN_HIERARCHY_AUTO = 0x100000,
- FE_CAN_MUTE_TS = 0x80000000,
- FE_CAN_CLEAN_SETUP = 0x40000000
- } fe_caps_t;
-</programlisting>
-</section>
-
-<section id="frontend_info">
-<title>frontend information</title>
-
-<para>Information about the frontend ca be queried with FE_GET_INFO.</para>
-
-<programlisting>
- struct dvb_frontend_info {
- char name[128];
- fe_type_t type;
- uint32_t frequency_min;
- uint32_t frequency_max;
- uint32_t frequency_stepsize;
- uint32_t frequency_tolerance;
- uint32_t symbol_rate_min;
- uint32_t symbol_rate_max;
- uint32_t symbol_rate_tolerance; /&#x22C6; ppm &#x22C6;/
- uint32_t notifier_delay; /&#x22C6; ms &#x22C6;/
- fe_caps_t caps;
- };
-</programlisting>
-</section>
-
-<section id="frontend_diseqc">
-<title>diseqc master command</title>
-
-<para>A message sent from the frontend to DiSEqC capable equipment.</para>
-<programlisting>
- struct dvb_diseqc_master_cmd {
- uint8_t msg [6]; /&#x22C6; { framing, address, command, data[3] } &#x22C6;/
- uint8_t msg_len; /&#x22C6; valid values are 3...6 &#x22C6;/
- };
-</programlisting>
-</section>
-<section role="subsection">
-<title>diseqc slave reply</title>
-
-<para>A reply to the frontend from DiSEqC 2.0 capable equipment.</para>
-<programlisting>
- struct dvb_diseqc_slave_reply {
- uint8_t msg [4]; /&#x22C6; { framing, data [3] } &#x22C6;/
- uint8_t msg_len; /&#x22C6; valid values are 0...4, 0 means no msg &#x22C6;/
- int timeout; /&#x22C6; return from ioctl after timeout ms with &#x22C6;/
- }; /&#x22C6; errorcode when no message was received &#x22C6;/
-</programlisting>
-</section>
-
-<section id="frontend_diseqc_slave_reply">
-<title>diseqc slave reply</title>
-<para>The voltage is usually used with non-DiSEqC capable LNBs to switch the polarzation
-(horizontal/vertical). When using DiSEqC epuipment this voltage has to be switched
-consistently to the DiSEqC commands as described in the DiSEqC spec.</para>
-<programlisting>
- typedef enum fe_sec_voltage {
- SEC_VOLTAGE_13,
- SEC_VOLTAGE_18
- } fe_sec_voltage_t;
-</programlisting>
-</section>
-
-<section id="frontend_sec_tone">
-<title>SEC continuous tone</title>
-
-<para>The continous 22KHz tone is usually used with non-DiSEqC capable LNBs to switch the
-high/low band of a dual-band LNB. When using DiSEqC epuipment this voltage has to
-be switched consistently to the DiSEqC commands as described in the DiSEqC
-spec.</para>
-<programlisting>
- typedef enum fe_sec_tone_mode {
- SEC_TONE_ON,
- SEC_TONE_OFF
- } fe_sec_tone_mode_t;
-</programlisting>
-</section>
-
-<section id="frontend_sec_burst">
-<title>SEC tone burst</title>
-
-<para>The 22KHz tone burst is usually used with non-DiSEqC capable switches to select
-between two connected LNBs/satellites. When using DiSEqC epuipment this voltage has to
-be switched consistently to the DiSEqC commands as described in the DiSEqC
-spec.</para>
-<programlisting>
- typedef enum fe_sec_mini_cmd {
- SEC_MINI_A,
- SEC_MINI_B
- } fe_sec_mini_cmd_t;
-</programlisting>
-
-<para></para>
-</section>
-
-<section id="frontend_status">
-<title>frontend status</title>
-<para>Several functions of the frontend device use the fe_status data type defined
-by</para>
-<programlisting>
- typedef enum fe_status {
- FE_HAS_SIGNAL = 0x01, /&#x22C6; found something above the noise level &#x22C6;/
- FE_HAS_CARRIER = 0x02, /&#x22C6; found a DVB signal &#x22C6;/
- FE_HAS_VITERBI = 0x04, /&#x22C6; FEC is stable &#x22C6;/
- FE_HAS_SYNC = 0x08, /&#x22C6; found sync bytes &#x22C6;/
- FE_HAS_LOCK = 0x10, /&#x22C6; everything's working... &#x22C6;/
- FE_TIMEDOUT = 0x20, /&#x22C6; no lock within the last ~2 seconds &#x22C6;/
- FE_REINIT = 0x40 /&#x22C6; frontend was reinitialized, &#x22C6;/
- } fe_status_t; /&#x22C6; application is recommned to reset &#x22C6;/
-</programlisting>
-<para>to indicate the current state and/or state changes of the frontend hardware.
-</para>
-
-</section>
-
-<section id="frontend_params">
-<title>frontend parameters</title>
-<para>The kind of parameters passed to the frontend device for tuning depend on
-the kind of hardware you are using. All kinds of parameters are combined as an
-union in the FrontendParameters structure:</para>
-<programlisting>
- struct dvb_frontend_parameters {
- uint32_t frequency; /&#x22C6; (absolute) frequency in Hz for QAM/OFDM &#x22C6;/
- /&#x22C6; intermediate frequency in kHz for QPSK &#x22C6;/
- fe_spectral_inversion_t inversion;
- union {
- struct dvb_qpsk_parameters qpsk;
- struct dvb_qam_parameters qam;
- struct dvb_ofdm_parameters ofdm;
- } u;
- };
-</programlisting>
-<para>For satellite QPSK frontends you have to use the <constant>QPSKParameters</constant> member defined by</para>
-<programlisting>
- struct dvb_qpsk_parameters {
- uint32_t symbol_rate; /&#x22C6; symbol rate in Symbols per second &#x22C6;/
- fe_code_rate_t fec_inner; /&#x22C6; forward error correction (see above) &#x22C6;/
- };
-</programlisting>
-<para>for cable QAM frontend you use the <constant>QAMParameters</constant> structure</para>
-<programlisting>
- struct dvb_qam_parameters {
- uint32_t symbol_rate; /&#x22C6; symbol rate in Symbols per second &#x22C6;/
- fe_code_rate_t fec_inner; /&#x22C6; forward error correction (see above) &#x22C6;/
- fe_modulation_t modulation; /&#x22C6; modulation type (see above) &#x22C6;/
- };
-</programlisting>
-<para>DVB-T frontends are supported by the <constant>OFDMParamters</constant> structure
-</para>
-<programlisting>
- struct dvb_ofdm_parameters {
- fe_bandwidth_t bandwidth;
- fe_code_rate_t code_rate_HP; /&#x22C6; high priority stream code rate &#x22C6;/
- fe_code_rate_t code_rate_LP; /&#x22C6; low priority stream code rate &#x22C6;/
- fe_modulation_t constellation; /&#x22C6; modulation type (see above) &#x22C6;/
- fe_transmit_mode_t transmission_mode;
- fe_guard_interval_t guard_interval;
- fe_hierarchy_t hierarchy_information;
- };
-</programlisting>
-<para>In the case of QPSK frontends the <constant>Frequency</constant> field specifies the intermediate
-frequency, i.e. the offset which is effectively added to the local oscillator frequency (LOF) of
-the LNB. The intermediate frequency has to be specified in units of kHz. For QAM and
-OFDM frontends the Frequency specifies the absolute frequency and is given in
-Hz.
-</para>
-<para>The Inversion field can take one of these values:
-</para>
-<programlisting>
- typedef enum fe_spectral_inversion {
- INVERSION_OFF,
- INVERSION_ON,
- INVERSION_AUTO
- } fe_spectral_inversion_t;
-</programlisting>
-<para>It indicates if spectral inversion should be presumed or not. In the automatic setting
-(<constant>INVERSION_AUTO</constant>) the hardware will try to figure out the correct setting by
-itself.
-</para>
-<para>The possible values for the <constant>FEC_inner</constant> field are
-</para>
-<programlisting>
- typedef enum fe_code_rate {
- FEC_NONE = 0,
- FEC_1_2,
- FEC_2_3,
- FEC_3_4,
- FEC_4_5,
- FEC_5_6,
- FEC_6_7,
- FEC_7_8,
- FEC_8_9,
- FEC_AUTO
- } fe_code_rate_t;
-</programlisting>
-<para>which correspond to error correction rates of 1/2, 2/3, etc., no error correction or auto
-detection.
-</para>
-<para>For cable and terrestrial frontends (QAM and OFDM) one also has to specify the quadrature
-modulation mode which can be one of the following:
-</para>
-<programlisting>
- typedef enum fe_modulation {
- QPSK,
- QAM_16,
- QAM_32,
- QAM_64,
- QAM_128,
- QAM_256,
- QAM_AUTO
- } fe_modulation_t;
-</programlisting>
-<para>Finally, there are several more parameters for OFDM:
-</para>
-<programlisting>
- typedef enum fe_transmit_mode {
- TRANSMISSION_MODE_2K,
- TRANSMISSION_MODE_8K,
- TRANSMISSION_MODE_AUTO
- } fe_transmit_mode_t;
-</programlisting>
- <programlisting>
- typedef enum fe_bandwidth {
- BANDWIDTH_8_MHZ,
- BANDWIDTH_7_MHZ,
- BANDWIDTH_6_MHZ,
- BANDWIDTH_AUTO
- } fe_bandwidth_t;
-</programlisting>
- <programlisting>
- typedef enum fe_guard_interval {
- GUARD_INTERVAL_1_32,
- GUARD_INTERVAL_1_16,
- GUARD_INTERVAL_1_8,
- GUARD_INTERVAL_1_4,
- GUARD_INTERVAL_AUTO
- } fe_guard_interval_t;
-</programlisting>
- <programlisting>
- typedef enum fe_hierarchy {
- HIERARCHY_NONE,
- HIERARCHY_1,
- HIERARCHY_2,
- HIERARCHY_4,
- HIERARCHY_AUTO
- } fe_hierarchy_t;
-</programlisting>
-
-</section>
-
-<section id="frontend_events">
-<title>frontend events</title>
- <programlisting>
- struct dvb_frontend_event {
- fe_status_t status;
- struct dvb_frontend_parameters parameters;
- };
-</programlisting>
- </section>
-</section>
-
-
-<section id="frontend_fcalls">
-<title>Frontend Function Calls</title>
-
-<section id="frontend_f_open">
-<title>open()</title>
-<para>DESCRIPTION</para>
-<informaltable><tgroup cols="1"><tbody><row>
-<entry align="char">
-<para>This system call opens a named frontend device (/dev/dvb/adapter0/frontend0)
- for subsequent use. Usually the first thing to do after a successful open is to
- find out the frontend type with FE_GET_INFO.</para>
-<para>The device can be opened in read-only mode, which only allows monitoring of
- device status and statistics, or read/write mode, which allows any kind of use
- (e.g. performing tuning operations.)
-</para>
-<para>In a system with multiple front-ends, it is usually the case that multiple devices
- cannot be open in read/write mode simultaneously. As long as a front-end
- device is opened in read/write mode, other open() calls in read/write mode will
- either fail or block, depending on whether non-blocking or blocking mode was
- specified. A front-end device opened in blocking mode can later be put into
- non-blocking mode (and vice versa) using the F_SETFL command of the fcntl
- system call. This is a standard system call, documented in the Linux manual
- page for fcntl. When an open() call has succeeded, the device will be ready
- for use in the specified mode. This implies that the corresponding hardware is
- powered up, and that other front-ends may have been powered down to make
- that possible.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int open(const char &#x22C6;deviceName, int flags);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>const char
- *deviceName</para>
-</entry><entry
- align="char">
-<para>Name of specific video device.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int flags</para>
-</entry><entry
- align="char">
-<para>A bit-wise OR of the following flags:</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDONLY read-only access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDWR read/write access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_NONBLOCK open in non-blocking mode</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>(blocking mode is the default)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>Device or resource busy.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_f_close">
-<title>close()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call closes a previously opened front-end device. After closing
- a front-end device, its corresponding hardware might be powered down
- automatically.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int close(int fd);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_read_status">
-<title>FE_READ_STATUS</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns status information about the front-end. This call only
- requires read-only access to the device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_READ_STATUS,
- fe_status_t &#x22C6;status);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_READ_STATUS for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct fe_status_t
- *status</para>
-</entry><entry
- align="char">
-<para>Points to the location where the front-end status word is
- to be stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>status points to invalid address.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_read_ber">
-<title>FE_READ_BER</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns the bit error rate for the signal currently
- received/demodulated by the front-end. For this command, read-only access to
- the device is sufficient.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_READ_BER,
- uint32_t &#x22C6;ber);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_READ_BER for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>uint32_t *ber</para>
-</entry><entry
- align="char">
-<para>The bit error rate is stored into *ber.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>ber points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSIGNAL</para>
-</entry><entry
- align="char">
-<para>There is no signal, thus no meaningful bit error rate. Also
- returned if the front-end is not turned on.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSYS</para>
-</entry><entry
- align="char">
-<para>Function not available for this device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_read_snr">
-<title>FE_READ_SNR</title>
-
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns the signal-to-noise ratio for the signal currently received
- by the front-end. For this command, read-only access to the device is sufficient.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_READ_SNR, int16_t
- &#x22C6;snr);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_READ_SNR for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int16_t *snr</para>
-</entry><entry
- align="char">
-<para>The signal-to-noise ratio is stored into *snr.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>snr points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSIGNAL</para>
-</entry><entry
- align="char">
-<para>There is no signal, thus no meaningful signal strength
- value. Also returned if front-end is not turned on.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSYS</para>
-</entry><entry
- align="char">
-<para>Function not available for this device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_read_signal_strength">
-<title>FE_READ_SIGNAL_STRENGTH</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns the signal strength value for the signal currently received
- by the front-end. For this command, read-only access to the device is sufficient.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request =
- FE_READ_SIGNAL_STRENGTH, int16_t &#x22C6;strength);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_READ_SIGNAL_STRENGTH for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int16_t *strength</para>
-</entry><entry
- align="char">
-<para>The signal strength value is stored into *strength.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>status points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSIGNAL</para>
-</entry><entry
- align="char">
-<para>There is no signal, thus no meaningful signal strength
- value. Also returned if front-end is not turned on.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSYS</para>
-</entry><entry
- align="char">
-<para>Function not available for this device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_read_ub">
-<title>FE_READ_UNCORRECTED_BLOCKS</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns the number of uncorrected blocks detected by the device
- driver during its lifetime. For meaningful measurements, the increment in block
- count during a specific time interval should be calculated. For this command,
- read-only access to the device is sufficient.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>Note that the counter will wrap to zero after its maximum count has been
- reached.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl( int fd, int request =
- FE_READ_UNCORRECTED_BLOCKS, uint32_t &#x22C6;ublocks);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_READ_UNCORRECTED_BLOCKS for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>uint32_t *ublocks</para>
-</entry><entry
- align="char">
-<para>The total number of uncorrected blocks seen by the driver
- so far.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>ublocks points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOSYS</para>
-</entry><entry
- align="char">
-<para>Function not available for this device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_set_fe">
-<title>FE_SET_FRONTEND</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call starts a tuning operation using specified parameters. The result
- of this call will be successful if the parameters were valid and the tuning could
- be initiated. The result of the tuning operation in itself, however, will arrive
- asynchronously as an event (see documentation for FE_GET_EVENT and
- FrontendEvent.) If a new FE_SET_FRONTEND operation is initiated before
- the previous one was completed, the previous operation will be aborted in favor
- of the new one. This command requires read/write access to the device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_SET_FRONTEND,
- struct dvb_frontend_parameters &#x22C6;p);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_SET_FRONTEND for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dvb_frontend_parameters
- *p</para>
-</entry><entry
- align="char">
-<para>Points to parameters for tuning operation.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>p points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Maximum supported symbol rate reached.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_get_fe">
-<title>FE_GET_FRONTEND</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call queries the currently effective frontend parameters. For this
- command, read-only access to the device is sufficient.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_GET_FRONTEND,
- struct dvb_frontend_parameters &#x22C6;p);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_SET_FRONTEND for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dvb_frontend_parameters
- *p</para>
-</entry><entry
- align="char">
-<para>Points to parameters for tuning operation.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>p points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Maximum supported symbol rate reached.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-
-<section id="frontend_get_event">
-<title>FE_GET_EVENT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns a frontend event if available. If an event is not
- available, the behavior depends on whether the device is in blocking or
- non-blocking mode. In the latter case, the call fails immediately with errno
- set to EWOULDBLOCK. In the former case, the call blocks until an event
- becomes available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The standard Linux poll() and/or select() system calls can be used with the
- device file descriptor to watch for new events. For select(), the file descriptor
- should be included in the exceptfds argument, and for poll(), POLLPRI should
- be specified as the wake-up condition. Since the event queue allocated is
- rather small (room for 8 events), the queue must be serviced regularly to avoid
- overflow. If an overflow happens, the oldest event is discarded from the queue,
- and an error (EOVERFLOW) occurs the next time the queue is read. After
- reporting the error condition in this fashion, subsequent FE_GET_EVENT
- calls will return events from the queue as usual.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>For the sake of implementation simplicity, this command requires read/write
- access to the device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = QPSK_GET_EVENT,
- struct dvb_frontend_event &#x22C6;ev);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_GET_EVENT for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dvb_frontend_event
- *ev</para>
-</entry><entry
- align="char">
-<para>Points to the location where the event,</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>if any, is to be stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>ev points to invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EWOULDBLOCK</para>
-</entry><entry
- align="char">
-<para>There is no event pending, and the device is in
- non-blocking mode.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EOVERFLOW</para>
-</entry><entry
- align="char">
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>Overflow in event queue - one or more events were lost.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_get_info">
-<title>FE_GET_INFO</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns information about the front-end. This call only requires
- read-only access to the device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(int fd, int request = FE_GET_INFO, struct
- dvb_frontend_info &#x22C6;info);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_GET_INFO for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dvb_frontend_info
- *info</para>
-</entry><entry
- align="char">
-<para>Points to the location where the front-end information is
- to be stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>info points to invalid address.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_diseqc_reset_overload">
-<title>FE_DISEQC_RESET_OVERLOAD</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>If the bus has been automatically powered off due to power overload, this ioctl
- call restores the power to the bus. The call requires read/write access to the
- device. This call has no effect if the device is manually powered off. Not all
- DVB adapters support this ioctl.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- FE_DISEQC_RESET_OVERLOAD);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_DISEQC_RESET_OVERLOAD for this
- command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Permission denied (needs read/write access).</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_diseqc_send_master_cmd">
-<title>FE_DISEQC_SEND_MASTER_CMD</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call is used to send a a DiSEqC command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- FE_DISEQC_SEND_MASTER_CMD, struct
- dvb_diseqc_master_cmd &#x22C6;cmd);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_DISEQC_SEND_MASTER_CMD for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dvb_diseqc_master_cmd
- *cmd</para>
-</entry><entry
- align="char">
-<para>Pointer to the command to be transmitted.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>Seq points to an invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>The data structure referred to by seq is invalid in some
- way.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Permission denied (needs read/write access).</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_diseqc_recv_slave_reply">
-<title>FE_DISEQC_RECV_SLAVE_REPLY</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call is used to receive reply to a DiSEqC 2.0 command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- FE_DISEQC_RECV_SLAVE_REPLY, struct
- dvb_diseqc_slave_reply &#x22C6;reply);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_DISEQC_RECV_SLAVE_REPLY for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- dvb_diseqc_slave_reply
- *reply</para>
-</entry><entry
- align="char">
-<para>Pointer to the command to be received.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>Seq points to an invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>The data structure referred to by seq is invalid in some
- way.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Permission denied (needs read/write access).</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_diseqc_send_burst">
-<title>FE_DISEQC_SEND_BURST</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call is used to send a 22KHz tone burst.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- FE_DISEQC_SEND_BURST, fe_sec_mini_cmd_t burst);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_DISEQC_SEND_BURST for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>fe_sec_mini_cmd_t
- burst</para>
-</entry><entry
- align="char">
-<para>burst A or B.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>Seq points to an invalid address.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>The data structure referred to by seq is invalid in some
- way.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Permission denied (needs read/write access).</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_set_tone">
-<title>FE_SET_TONE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This call is used to set the generation of the continuous 22kHz tone. This call
- requires read/write permissions.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_SET_TONE,
- fe_sec_tone_mode_t tone);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_SET_TONE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>fe_sec_tone_mode_t
- tone</para>
-</entry><entry
- align="char">
-<para>The requested tone generation mode (on/off).</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>Device or resource busy.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>File not opened with read permissions.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
-</row></tbody></tgroup></informaltable>
-</section>
-
-<section id="fe_set_voltage">
-<title>FE_SET_VOLTAGE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This call is used to set the bus voltage. This call requires read/write
- permissions.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = FE_SET_VOLTAGE,
- fe_sec_voltage_t voltage);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_SET_VOLTAGE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>fe_sec_voltage_t
- voltage</para>
-</entry><entry
- align="char">
-<para>The requested bus voltage.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>Device or resource busy.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>File not opened with read permissions.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-
-<section id="frontend_enable_high_lnb_volt">
-<title>FE_ENABLE_HIGH_LNB_VOLTAGE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>If high != 0 enables slightly higher voltages instead of 13/18V (to compensate
- for long cables). This call requires read/write permissions. Not all DVB
- adapters support this ioctl.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request =
- FE_ENABLE_HIGH_LNB_VOLTAGE, int high);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals FE_SET_VOLTAGE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int high</para>
-</entry><entry
- align="char">
-<para>The requested bus voltage.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>Device or resource busy.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>File not opened with read permissions.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error in the device driver.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-</section>
-</section>
diff --git a/dvb-spec/sgml/intro.sgml b/dvb-spec/sgml/intro.sgml
deleted file mode 100644
index 83676c44e..000000000
--- a/dvb-spec/sgml/intro.sgml
+++ /dev/null
@@ -1,191 +0,0 @@
-<title>Introduction</title>
-
-<section id="requisites">
-<title>What you need to know</title>
-
-<para>The reader of this document is required to have some knowledge in
-the area of digital video broadcasting (DVB) and should be familiar with
-part I of the MPEG2 specification ISO/IEC 13818 (aka ITU-T H.222), i.e
-you should know what a program/transport stream (PS/TS) is and what is
-meant by a packetized elementary stream (PES) or an I-frame.</para>
-
-<para>Various DVB standards documents are available from
-<emphasis role="tt">http://www.dvb.org/</emphasis> and/or
-<emphasis role="tt">http://www.etsi.org/</emphasis>.</para>
-
-<para>It is also necessary to know how to access unix/linux devices and
-how to use ioctl calls. This also includes the knowledge of C or C++.
-</para>
-</section>
-
-<section id="history">
-<title>History</title>
-
-<para>The first API for DVB cards we used at Convergence in late 1999
-was an extension of the Video4Linux API which was primarily developed
-for frame grabber cards. As such it was not really well suited to be
-used for DVB cards and their new features like recording MPEG streams
-and filtering several section and PES data streams at the same time.
-</para>
-
-<para>In early 2000, we were approached by Nokia with a proposal for a
-new standard Linux DVB API. As a commitment to the development of
-terminals based on open standards, Nokia and Convergence made it
-available to all Linux developers and published it on <emphasis
-role="tt">http://www.linuxtv.org/</emphasis> in September 2000.
-Convergence is the maintainer of the Linux DVB API. Together with the
-LinuxTV community (i.e. you, the reader of this document), the Linux DVB
-API will be constantly reviewed and improved. With the Linux driver for
-the Siemens/Hauppauge DVB PCI card Convergence provides a first
-implementation of the Linux DVB API.</para>
-</section>
-
-<section id="overview">
-<title>Overview</title>
-
-<figure id="stb_components">
-<title>Components of a DVB card/STB</title>
-<mediaobject>
-<imageobject>
-<imagedata fileref="dvbstb.pdf" format="PS" />
-</imageobject>
-<imageobject>
-<imagedata fileref="dvbstb.png" format="PNG" />
-</imageobject>
-</mediaobject>
-</figure>
-
-<para>A DVB PCI card or DVB set-top-box (STB) usually consists of the
-following main hardware components: </para>
-
-<itemizedlist>
- <listitem>
-
-<para>Frontend consisting of tuner and DVB demodulator</para>
-
-<para>Here the raw signal reaches the DVB hardware from a satellite dish
-or antenna or directly from cable. The frontend down-converts and
-demodulates this signal into an MPEG transport stream (TS). In case of a
-satellite frontend, this includes a facility for satellite equipment
-control (SEC), which allows control of LNB polarization, multi feed
-switches or dish rotors.</para>
-
-</listitem>
- <listitem>
-
-<para>Conditional Access (CA) hardware like CI adapters and smartcard slots
-</para>
-
-<para>The complete TS is passed through the CA hardware. Programs to
-which the user has access (controlled by the smart card) are decoded in
-real time and re-inserted into the TS.</para>
-
-</listitem>
- <listitem>
- <para>Demultiplexer which filters the incoming DVB stream</para>
-
-<para>The demultiplexer splits the TS into its components like audio and
-video streams. Besides usually several of such audio and video streams
-it also contains data streams with information about the programs
-offered in this or other streams of the same provider.</para>
-
-</listitem>
-<listitem>
-
-<para>MPEG2 audio and video decoder</para>
-
-<para>The main targets of the demultiplexer are the MPEG2 audio and
-video decoders. After decoding they pass on the uncompressed audio and
-video to the computer screen or (through a PAL/NTSC encoder) to a TV
-set.</para>
-
-
-</listitem>
-</itemizedlist>
-
-<para><xref linkend="stb_components" /> shows a crude schematic of the control and data flow
-between those components.</para>
-
-<para>On a DVB PCI card not all of these have to be present since some
-functionality can be provided by the main CPU of the PC (e.g. MPEG
-picture and sound decoding) or is not needed (e.g. for data-only uses
-like &#8220;internet over satellite&#8221;). Also not every card or STB
-provides conditional access hardware.</para>
-
-</section>
-
-<section id="dvb_devices">
-<title>Linux DVB Devices</title>
-
-<para>The Linux DVB API lets you control these hardware components
-through currently six Unix-style character devices for video, audio,
-frontend, demux, CA and IP-over-DVB networking. The video and audio
-devices control the MPEG2 decoder hardware, the frontend device the
-tuner and the DVB demodulator. The demux device gives you control over
-the PES and section filters of the hardware. If the hardware does not
-support filtering these filters can be implemented in software. Finally,
-the CA device controls all the conditional access capabilities of the
-hardware. It can depend on the individual security requirements of the
-platform, if and how many of the CA functions are made available to the
-application through this device.</para>
-
-<para>All devices can be found in the <emphasis role="tt">/dev</emphasis>
-tree under <emphasis role="tt">/dev/dvb</emphasis>. The individual devices
-are called:</para>
-
-<itemizedlist>
-<listitem>
-
-<para><emphasis role="tt">/dev/dvb/adapterN/audioM</emphasis>,</para>
-</listitem>
-<listitem>
-<para><emphasis role="tt">/dev/dvb/adapterN/videoM</emphasis>,</para>
-</listitem>
-<listitem>
-<para><emphasis role="tt">/dev/dvb/adapterN/frontendM</emphasis>,</para>
-</listitem>
- <listitem>
-
-<para><emphasis role="tt">/dev/dvb/adapterN/netM</emphasis>,</para>
-</listitem>
- <listitem>
-
-<para><emphasis role="tt">/dev/dvb/adapterN/demuxM</emphasis>,</para>
-</listitem>
- <listitem>
-
-<para><emphasis role="tt">/dev/dvb/adapterN/caM</emphasis>,</para></listitem></itemizedlist>
-
-<para>where N enumerates the DVB PCI cards in a system starting
-from&#x00A0;0, and M enumerates the devices of each type within each
-adapter, starting from&#x00A0;0, too. We will omit the &#8220;<emphasis
-role="tt">/dev/dvb/adapterN/</emphasis>&#8221; in the further dicussion
-of these devices. The naming scheme for the devices is the same wheter
-devfs is used or not.</para>
-
-<para>More details about the data structures and function calls of all
-the devices are described in the following chapters.</para>
-
-</section>
-
-<section id="include_files">
-<title>API include files</title>
-
-<para>For each of the DVB devices a corresponding include file exists.
-The DVB API include files should be included in application sources with
-a partial path like:</para>
-
-
-<programlisting>
- #include &#x003C;linux/dvb/frontend.h&#x003E;
-</programlisting>
-
-<para>To enable applications to support different API version, an
-additional include file <emphasis
-role="tt">linux/dvb/version.h</emphasis> exists, which defines the
-constant <emphasis role="tt">DVB_API_VERSION</emphasis>. This document
-describes <emphasis role="tt">DVB_API_VERSION&#x00A0;3</emphasis>.
-</para>
-
-</section>
-
diff --git a/dvb-spec/sgml/kdapi.sgml b/dvb-spec/sgml/kdapi.sgml
deleted file mode 100644
index 6c67481ea..000000000
--- a/dvb-spec/sgml/kdapi.sgml
+++ /dev/null
@@ -1,2309 +0,0 @@
-<title>Kernel Demux API</title>
-<para>The kernel demux API defines a driver-internal interface for registering low-level,
-hardware specific driver to a hardware independent demux layer. It is only of interest for
-DVB device driver writers. The header file for this API is named <emphasis role="tt">demux.h</emphasis> and located in
-<emphasis role="tt">drivers/media/dvb/dvb-core</emphasis>.
-</para>
-<para>Maintainer note: This section must be reviewed. It is probably out of date.
-</para>
-
-<section id="kernel_demux_data_types">
-<title>Kernel Demux Data Types</title>
-
-
-<section id="dmx_success_t">
-<title>dmx_success_t</title>
- <programlisting>
- typedef enum {
- DMX_OK = 0, /&#x22C6; Received Ok &#x22C6;/
- DMX_LENGTH_ERROR, /&#x22C6; Incorrect length &#x22C6;/
- DMX_OVERRUN_ERROR, /&#x22C6; Receiver ring buffer overrun &#x22C6;/
- DMX_CRC_ERROR, /&#x22C6; Incorrect CRC &#x22C6;/
- DMX_FRAME_ERROR, /&#x22C6; Frame alignment error &#x22C6;/
- DMX_FIFO_ERROR, /&#x22C6; Receiver FIFO overrun &#x22C6;/
- DMX_MISSED_ERROR /&#x22C6; Receiver missed packet &#x22C6;/
- } dmx_success_t;
-</programlisting>
-
-</section>
-<section id="ts_filter_types">
-<title>TS filter types</title>
- <programlisting>
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
- /&#x22C6; TS packet reception &#x22C6;/
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
-
- /&#x22C6; TS filter type for set_type() &#x22C6;/
-
- #define TS_PACKET 1 /&#x22C6; send TS packets (188 bytes) to callback (default) &#x22C6;/
- #define TS_PAYLOAD_ONLY 2 /&#x22C6; in case TS_PACKET is set, only send the TS
- payload (&#x003C;=184 bytes per packet) to callback &#x22C6;/
- #define TS_DECODER 4 /&#x22C6; send stream to built-in decoder (if present) &#x22C6;/
-</programlisting>
-
-</section>
-<section id="dmx_ts_pes_t">
-<title>dmx_ts_pes_t</title>
-<para>The structure
-</para>
-<programlisting>
- typedef enum
- {
- DMX_TS_PES_AUDIO, /&#x22C6; also send packets to audio decoder (if it exists) &#x22C6;/
- DMX_TS_PES_VIDEO, /&#x22C6; ... &#x22C6;/
- DMX_TS_PES_TELETEXT,
- DMX_TS_PES_SUBTITLE,
- DMX_TS_PES_PCR,
- DMX_TS_PES_OTHER,
- } dmx_ts_pes_t;
-</programlisting>
-<para>describes the PES type for filters which write to a built-in decoder. The correspond (and
-should be kept identical) to the types in the demux device.
-</para>
-<programlisting>
- struct dmx_ts_feed_s {
- int is_filtering; /&#x22C6; Set to non-zero when filtering in progress &#x22C6;/
- struct dmx_demux_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- int (&#x22C6;set) (struct dmx_ts_feed_s&#x22C6; feed,
- __u16 pid,
- size_t callback_length,
- size_t circular_buffer_size,
- int descramble,
- struct timespec timeout);
- int (&#x22C6;start_filtering) (struct dmx_ts_feed_s&#x22C6; feed);
- int (&#x22C6;stop_filtering) (struct dmx_ts_feed_s&#x22C6; feed);
- int (&#x22C6;set_type) (struct dmx_ts_feed_s&#x22C6; feed,
- int type,
- dmx_ts_pes_t pes_type);
- };
-
- typedef struct dmx_ts_feed_s dmx_ts_feed_t;
-</programlisting>
- <programlisting>
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
- /&#x22C6; PES packet reception (not supported yet) &#x22C6;/
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
-
- typedef struct dmx_pes_filter_s {
- struct dmx_pes_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- } dmx_pes_filter_t;
-</programlisting>
- <programlisting>
- typedef struct dmx_pes_feed_s {
- int is_filtering; /&#x22C6; Set to non-zero when filtering in progress &#x22C6;/
- struct dmx_demux_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- int (&#x22C6;set) (struct dmx_pes_feed_s&#x22C6; feed,
- __u16 pid,
- size_t circular_buffer_size,
- int descramble,
- struct timespec timeout);
- int (&#x22C6;start_filtering) (struct dmx_pes_feed_s&#x22C6; feed);
- int (&#x22C6;stop_filtering) (struct dmx_pes_feed_s&#x22C6; feed);
- int (&#x22C6;allocate_filter) (struct dmx_pes_feed_s&#x22C6; feed,
- dmx_pes_filter_t&#x22C6;&#x22C6; filter);
- int (&#x22C6;release_filter) (struct dmx_pes_feed_s&#x22C6; feed,
- dmx_pes_filter_t&#x22C6; filter);
- } dmx_pes_feed_t;
-</programlisting>
- <programlisting>
- typedef struct {
- __u8 filter_value [DMX_MAX_FILTER_SIZE];
- __u8 filter_mask [DMX_MAX_FILTER_SIZE];
- struct dmx_section_feed_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- } dmx_section_filter_t;
-</programlisting>
- <programlisting>
- struct dmx_section_feed_s {
- int is_filtering; /&#x22C6; Set to non-zero when filtering in progress &#x22C6;/
- struct dmx_demux_s&#x22C6; parent; /&#x22C6; Back-pointer &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- int (&#x22C6;set) (struct dmx_section_feed_s&#x22C6; feed,
- __u16 pid,
- size_t circular_buffer_size,
- int descramble,
- int check_crc);
- int (&#x22C6;allocate_filter) (struct dmx_section_feed_s&#x22C6; feed,
- dmx_section_filter_t&#x22C6;&#x22C6; filter);
- int (&#x22C6;release_filter) (struct dmx_section_feed_s&#x22C6; feed,
- dmx_section_filter_t&#x22C6; filter);
- int (&#x22C6;start_filtering) (struct dmx_section_feed_s&#x22C6; feed);
- int (&#x22C6;stop_filtering) (struct dmx_section_feed_s&#x22C6; feed);
- };
- typedef struct dmx_section_feed_s dmx_section_feed_t;
-
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
- /&#x22C6; Callback functions &#x22C6;/
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
-
- typedef int (&#x22C6;dmx_ts_cb) ( __u8 &#x22C6; buffer1,
- size_t buffer1_length,
- __u8 &#x22C6; buffer2,
- size_t buffer2_length,
- dmx_ts_feed_t&#x22C6; source,
- dmx_success_t success);
-
- typedef int (&#x22C6;dmx_section_cb) ( __u8 &#x22C6; buffer1,
- size_t buffer1_len,
- __u8 &#x22C6; buffer2,
- size_t buffer2_len,
- dmx_section_filter_t &#x22C6; source,
- dmx_success_t success);
-
- typedef int (&#x22C6;dmx_pes_cb) ( __u8 &#x22C6; buffer1,
- size_t buffer1_len,
- __u8 &#x22C6; buffer2,
- size_t buffer2_len,
- dmx_pes_filter_t&#x22C6; source,
- dmx_success_t success);
-
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
- /&#x22C6; DVB Front-End &#x22C6;/
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
-
- typedef enum {
- DMX_OTHER_FE = 0,
- DMX_SATELLITE_FE,
- DMX_CABLE_FE,
- DMX_TERRESTRIAL_FE,
- DMX_LVDS_FE,
- DMX_ASI_FE, /&#x22C6; DVB-ASI interface &#x22C6;/
- DMX_MEMORY_FE
- } dmx_frontend_source_t;
-
- typedef struct {
- /&#x22C6; The following char&#x22C6; fields point to NULL terminated strings &#x22C6;/
- char&#x22C6; id; /&#x22C6; Unique front-end identifier &#x22C6;/
- char&#x22C6; vendor; /&#x22C6; Name of the front-end vendor &#x22C6;/
- char&#x22C6; model; /&#x22C6; Name of the front-end model &#x22C6;/
- struct list_head connectivity_list; /&#x22C6; List of front-ends that can
- be connected to a particular
- demux &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- dmx_frontend_source_t source;
- } dmx_frontend_t;
-
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
- /&#x22C6; MPEG-2 TS Demux &#x22C6;/
- /&#x22C6;--------------------------------------------------------------------------&#x22C6;/
-
- /&#x22C6;
- &#x22C6; Flags OR'ed in the capabilites field of struct dmx_demux_s.
- &#x22C6;/
-
- #define DMX_TS_FILTERING 1
- #define DMX_PES_FILTERING 2
- #define DMX_SECTION_FILTERING 4
- #define DMX_MEMORY_BASED_FILTERING 8 /&#x22C6; write() available &#x22C6;/
- #define DMX_CRC_CHECKING 16
- #define DMX_TS_DESCRAMBLING 32
- #define DMX_SECTION_PAYLOAD_DESCRAMBLING 64
- #define DMX_MAC_ADDRESS_DESCRAMBLING 128
-</programlisting>
-
-</section>
-<section id="demux_demux_t">
-<title>demux_demux_t</title>
- <programlisting>
- /&#x22C6;
- &#x22C6; DMX_FE_ENTRY(): Casts elements in the list of registered
- &#x22C6; front-ends from the generic type struct list_head
- &#x22C6; to the type &#x22C6; dmx_frontend_t
- &#x22C6;.
- &#x22C6;/
-
- #define DMX_FE_ENTRY(list) list_entry(list, dmx_frontend_t, connectivity_list)
-
- struct dmx_demux_s {
- /&#x22C6; The following char&#x22C6; fields point to NULL terminated strings &#x22C6;/
- char&#x22C6; id; /&#x22C6; Unique demux identifier &#x22C6;/
- char&#x22C6; vendor; /&#x22C6; Name of the demux vendor &#x22C6;/
- char&#x22C6; model; /&#x22C6; Name of the demux model &#x22C6;/
- __u32 capabilities; /&#x22C6; Bitfield of capability flags &#x22C6;/
- dmx_frontend_t&#x22C6; frontend; /&#x22C6; Front-end connected to the demux &#x22C6;/
- struct list_head reg_list; /&#x22C6; List of registered demuxes &#x22C6;/
- void&#x22C6; priv; /&#x22C6; Pointer to private data of the API client &#x22C6;/
- int users; /&#x22C6; Number of users &#x22C6;/
- int (&#x22C6;open) (struct dmx_demux_s&#x22C6; demux);
- int (&#x22C6;close) (struct dmx_demux_s&#x22C6; demux);
- int (&#x22C6;write) (struct dmx_demux_s&#x22C6; demux, const char&#x22C6; buf, size_t count);
- int (&#x22C6;allocate_ts_feed) (struct dmx_demux_s&#x22C6; demux,
- dmx_ts_feed_t&#x22C6;&#x22C6; feed,
- dmx_ts_cb callback);
- int (&#x22C6;release_ts_feed) (struct dmx_demux_s&#x22C6; demux,
- dmx_ts_feed_t&#x22C6; feed);
- int (&#x22C6;allocate_pes_feed) (struct dmx_demux_s&#x22C6; demux,
- dmx_pes_feed_t&#x22C6;&#x22C6; feed,
- dmx_pes_cb callback);
- int (&#x22C6;release_pes_feed) (struct dmx_demux_s&#x22C6; demux,
- dmx_pes_feed_t&#x22C6; feed);
- int (&#x22C6;allocate_section_feed) (struct dmx_demux_s&#x22C6; demux,
- dmx_section_feed_t&#x22C6;&#x22C6; feed,
- dmx_section_cb callback);
- int (&#x22C6;release_section_feed) (struct dmx_demux_s&#x22C6; demux,
- dmx_section_feed_t&#x22C6; feed);
- int (&#x22C6;descramble_mac_address) (struct dmx_demux_s&#x22C6; demux,
- __u8&#x22C6; buffer1,
- size_t buffer1_length,
- __u8&#x22C6; buffer2,
- size_t buffer2_length,
- __u16 pid);
- int (&#x22C6;descramble_section_payload) (struct dmx_demux_s&#x22C6; demux,
- __u8&#x22C6; buffer1,
- size_t buffer1_length,
- __u8&#x22C6; buffer2, size_t buffer2_length,
- __u16 pid);
- int (&#x22C6;add_frontend) (struct dmx_demux_s&#x22C6; demux,
- dmx_frontend_t&#x22C6; frontend);
- int (&#x22C6;remove_frontend) (struct dmx_demux_s&#x22C6; demux,
- dmx_frontend_t&#x22C6; frontend);
- struct list_head&#x22C6; (&#x22C6;get_frontends) (struct dmx_demux_s&#x22C6; demux);
- int (&#x22C6;connect_frontend) (struct dmx_demux_s&#x22C6; demux,
- dmx_frontend_t&#x22C6; frontend);
- int (&#x22C6;disconnect_frontend) (struct dmx_demux_s&#x22C6; demux);
-
-
- /&#x22C6; added because js cannot keep track of these himself &#x22C6;/
- int (&#x22C6;get_pes_pids) (struct dmx_demux_s&#x22C6; demux, __u16 &#x22C6;pids);
- };
- typedef struct dmx_demux_s dmx_demux_t;
-</programlisting>
-
-</section>
-<section id="demux_directory">
-<title>Demux directory</title>
- <programlisting>
- /&#x22C6;
- &#x22C6; DMX_DIR_ENTRY(): Casts elements in the list of registered
- &#x22C6; demuxes from the generic type struct list_head&#x22C6; to the type dmx_demux_t
- &#x22C6;.
- &#x22C6;/
-
- #define DMX_DIR_ENTRY(list) list_entry(list, dmx_demux_t, reg_list)
-
- int dmx_register_demux (dmx_demux_t&#x22C6; demux);
- int dmx_unregister_demux (dmx_demux_t&#x22C6; demux);
- struct list_head&#x22C6; dmx_get_demuxes (void);
-</programlisting>
- </section></section>
-<section id="demux_directory_api">
-<title>Demux Directory API</title>
-<para>The demux directory is a Linux kernel-wide facility for registering and accessing the
-MPEG-2 TS demuxes in the system. Run-time registering and unregistering of demux drivers
-is possible using this API.
-</para>
-<para>All demux drivers in the directory implement the abstract interface dmx_demux_t.
-</para>
-
-<section
-role="subsection"><title>dmx_register_demux()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function makes a demux driver interface available to the Linux kernel. It is
- usually called by the init_module() function of the kernel module that contains
- the demux driver. The caller of this function is responsible for allocating
- dynamic or static memory for the demux structure and for initializing its fields
- before calling this function. The memory allocated for the demux structure
- must not be freed before calling dmx_unregister_demux(),</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int dmx_register_demux ( dmx_demux_t &#x22C6;demux )</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux structure.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EEXIST</para>
-</entry><entry
- align="char">
-<para>A demux with the same value of the id field already stored
- in the directory.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSPC</para>
-</entry><entry
- align="char">
-<para>No space left in the directory.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>dmx_unregister_demux()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function is called to indicate that the given demux interface is no
- longer available. The caller of this function is responsible for freeing the
- memory of the demux structure, if it was dynamically allocated before calling
- dmx_register_demux(). The cleanup_module() function of the kernel module
- that contains the demux driver should call this function. Note that this function
- fails if the demux is currently in use, i.e., release_demux() has not been called
- for the interface.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int dmx_unregister_demux ( dmx_demux_t &#x22C6;demux )</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux structure which is to be
- unregistered.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>The specified demux is not registered in the demux
- directory.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>The specified demux is currently in use.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>dmx_get_demuxes()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Provides the caller with the list of registered demux interfaces, using the
- standard list structure defined in the include file linux/list.h. The include file
- demux.h defines the macro DMX_DIR_ENTRY() for converting an element of
- the generic type struct list_head* to the type dmx_demux_t*. The caller must
- not free the memory of any of the elements obtained via this function call.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>struct list_head &#x22C6;dmx_get_demuxes ()</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>none</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>struct list_head *</para>
-</entry><entry
- align="char">
-<para>A list of demux interfaces, or NULL in the case of an
- empty list.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section></section>
-<section id="demux_api">
-<title>Demux API</title>
-<para>The demux API should be implemented for each demux in the system. It is used to select
-the TS source of a demux and to manage the demux resources. When the demux
-client allocates a resource via the demux API, it receives a pointer to the API of that
-resource.
-</para>
-<para>Each demux receives its TS input from a DVB front-end or from memory, as set via the
-demux API. In a system with more than one front-end, the API can be used to select one of
-the DVB front-ends as a TS source for a demux, unless this is fixed in the HW platform. The
-demux API only controls front-ends regarding their connections with demuxes; the APIs
-used to set the other front-end parameters, such as tuning, are not defined in this
-document.
-</para>
-<para>The functions that implement the abstract interface demux should be defined static or
-module private and registered to the Demux Directory for external access. It is not necessary
-to implement every function in the demux_t struct, however (for example, a demux interface
-might support Section filtering, but not TS or PES filtering). The API client is expected to
-check the value of any function pointer before calling the function: the value of NULL means
-&#8220;function not available&#8221;.
-</para>
-<para>Whenever the functions of the demux API modify shared data, the possibilities of lost
-update and race condition problems should be addressed, e.g. by protecting parts of code with
-mutexes. This is especially important on multi-processor hosts.
-</para>
-<para>Note that functions called from a bottom half context must not sleep, at least in the 2.2.x
-kernels. Even a simple memory allocation can result in a kernel thread being put to sleep if
-swapping is needed. For example, the Linux kernel calls the functions of a network device
-interface from a bottom half context. Thus, if a demux API function is called from network
-device code, the function must not sleep.
-</para>
-
-
-<section id="kdapi_fopen">
-<title>open()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function reserves the demux for use by the caller and, if necessary,
- initializes the demux. When the demux is no longer needed, the function close()
- should be called. It should be possible for multiple clients to access the demux
- at the same time. Thus, the function implementation should increment the
- demux usage count when open() is called and decrement it when close() is
- called.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int open ( demux_t&#x22C6; demux );</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t* demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EUSERS</para>
-</entry><entry
- align="char">
-<para>Maximum usage count reached.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-<section id="kdapi_fclose">
-<title>close()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function reserves the demux for use by the caller and, if necessary,
- initializes the demux. When the demux is no longer needed, the function close()
- should be called. It should be possible for multiple clients to access the demux
- at the same time. Thus, the function implementation should increment the
- demux usage count when open() is called and decrement it when close() is
- called.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int close(demux_t&#x22C6; demux);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t* demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENODEV</para>
-</entry><entry
- align="char">
-<para>The demux was not in use.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-<section id="kdapi_fwrite">
-<title>write()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function provides the demux driver with a memory buffer containing TS
- packets. Instead of receiving TS packets from the DVB front-end, the demux
- driver software will read packets from memory. Any clients of this demux
- with active TS, PES or Section filters will receive filtered data via the Demux
- callback API (see 0). The function returns when all the data in the buffer has
- been consumed by the demux. Demux hardware typically cannot read TS from
- memory. If this is the case, memory-based filtering has to be implemented
- entirely in software.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int write(demux_t&#x22C6; demux, const char&#x22C6; buf, size_t
- count);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t* demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>const char* buf</para>
-</entry><entry
- align="char">
-<para>Pointer to the TS data in kernel-space memory.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t length</para>
-</entry><entry
- align="char">
-<para>Length of the TS data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>The command is not implemented.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>allocate_ts_feed()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Allocates a new TS feed, which is used to filter the TS packets carrying a
- certain PID. The TS feed normally corresponds to a hardware PID filter on the
- demux chip.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int allocate_ts_feed(dmx_demux_t&#x22C6; demux,
- dmx_ts_feed_t&#x22C6;&#x22C6; feed, dmx_ts_cb callback);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t* demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_ts_feed_t**
- feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the TS feed API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_ts_cb callback</para>
-</entry><entry
- align="char">
-<para>Pointer to the callback function for passing received TS
- packet</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EBUSY</para>
-</entry><entry
- align="char">
-<para>No more TS feeds available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>The command is not implemented.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>release_ts_feed()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Releases the resources allocated with allocate_ts_feed(). Any filtering in
- progress on the TS feed should be stopped before calling this function.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int release_ts_feed(dmx_demux_t&#x22C6; demux,
- dmx_ts_feed_t&#x22C6; feed);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t* demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_ts_feed_t* feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the TS feed API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>allocate_section_feed()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Allocates a new section feed, i.e. a demux resource for filtering and receiving
- sections. On platforms with hardware support for section filtering, a section
- feed is directly mapped to the demux HW. On other platforms, TS packets are
- first PID filtered in hardware and a hardware section filter then emulated in
- software. The caller obtains an API pointer of type dmx_section_feed_t as an
- out parameter. Using this API the caller can set filtering parameters and start
- receiving sections.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int allocate_section_feed(dmx_demux_t&#x22C6; demux,
- dmx_section_feed_t &#x22C6;&#x22C6;feed, dmx_section_cb callback);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t *demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_section_feed_t
- **feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_section_cb
- callback</para>
-</entry><entry
- align="char">
-<para>Pointer to the callback function for passing received
- sections.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EBUSY</para>
-</entry><entry
- align="char">
-<para>No more section feeds available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>The command is not implemented.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>release_section_feed()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Releases the resources allocated with allocate_section_feed(), including
- allocated filters. Any filtering in progress on the section feed should be stopped
- before calling this function.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int release_section_feed(dmx_demux_t&#x22C6; demux,
- dmx_section_feed_t &#x22C6;feed);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>demux_t *demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_section_feed_t
- *feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>descramble_mac_address()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function runs a descrambling algorithm on the destination MAC
- address field of a DVB Datagram Section, replacing the original address
- with its un-encrypted version. Otherwise, the description on the function
- descramble_section_payload() applies also to this function.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int descramble_mac_address(dmx_demux_t&#x22C6; demux, __u8
- &#x22C6;buffer1, size_t buffer1_length, __u8 &#x22C6;buffer2,
- size_t buffer2_length, __u16 pid);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t
- *demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u8 *buffer1</para>
-</entry><entry
- align="char">
-<para>Pointer to the first byte of the section.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer1_length</para>
-</entry><entry
- align="char">
-<para>Length of the section data, including headers and CRC,
- in buffer1.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u8* buffer2</para>
-</entry><entry
- align="char">
-<para>Pointer to the tail of the section data, or NULL. The
- pointer has a non-NULL value if the section wraps past
- the end of a circular buffer.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer2_length</para>
-</entry><entry
- align="char">
-<para>Length of the section data, including headers and CRC,
- in buffer2.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u16 pid</para>
-</entry><entry
- align="char">
-<para>The PID on which the section was received. Useful
- for obtaining the descrambling key, e.g. from a DVB
- Common Access facility.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>No descrambling facility available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>descramble_section_payload()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function runs a descrambling algorithm on the payload of a DVB
- Datagram Section, replacing the original payload with its un-encrypted
- version. The function will be called from the demux API implementation;
- the API client need not call this function directly. Section-level scrambling
- algorithms are currently standardized only for DVB-RCC (return channel
- over 2-directional cable TV network) systems. For all other DVB networks,
- encryption schemes are likely to be proprietary to each data broadcaster. Thus,
- it is expected that this function pointer will have the value of NULL (i.e.,
- function not available) in most demux API implementations. Nevertheless, it
- should be possible to use the function pointer as a hook for dynamically adding
- a &#8220;plug-in&#8221; descrambling facility to a demux driver.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>While this function is not needed with hardware-based section descrambling,
- the descramble_section_payload function pointer can be used to override the
- default hardware-based descrambling algorithm: if the function pointer has a
- non-NULL value, the corresponding function should be used instead of any
- descrambling hardware.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int descramble_section_payload(dmx_demux_t&#x22C6; demux,
- __u8 &#x22C6;buffer1, size_t buffer1_length, __u8 &#x22C6;buffer2,
- size_t buffer2_length, __u16 pid);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t
- *demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u8 *buffer1</para>
-</entry><entry
- align="char">
-<para>Pointer to the first byte of the section.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer1_length</para>
-</entry><entry
- align="char">
-<para>Length of the section data, including headers and CRC,
- in buffer1.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u8 *buffer2</para>
-</entry><entry
- align="char">
-<para>Pointer to the tail of the section data, or NULL. The
- pointer has a non-NULL value if the section wraps past
- the end of a circular buffer.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer2_length</para>
-</entry><entry
- align="char">
-<para>Length of the section data, including headers and CRC,
- in buffer2.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u16 pid</para>
-</entry><entry
- align="char">
-<para>The PID on which the section was received. Useful
- for obtaining the descrambling key, e.g. from a DVB
- Common Access facility.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>No descrambling facility available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>add_frontend()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Registers a connectivity between a demux and a front-end, i.e., indicates that
- the demux can be connected via a call to connect_frontend() to use the given
- front-end as a TS source. The client of this function has to allocate dynamic or
- static memory for the frontend structure and initialize its fields before calling
- this function. This function is normally called during the driver initialization.
- The caller must not free the memory of the frontend struct before successfully
- calling remove_frontend().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int add_frontend(dmx_demux_t &#x22C6;demux, dmx_frontend_t
- &#x22C6;frontend);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_frontend_t*
- frontend</para>
-</entry><entry
- align="char">
-<para>Pointer to the front-end instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EEXIST</para>
-</entry><entry
- align="char">
-<para>A front-end with the same value of the id field already
- registered.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINUSE</para>
-</entry><entry
- align="char">
-<para>The demux is in use.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOMEM</para>
-</entry><entry
- align="char">
-<para>No more front-ends can be added.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>remove_frontend()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Indicates that the given front-end, registered by a call to add_frontend(), can
- no longer be connected as a TS source by this demux. The function should be
- called when a front-end driver or a demux driver is removed from the system.
- If the front-end is in use, the function fails with the return value of -EBUSY.
- After successfully calling this function, the caller can free the memory of
- the frontend struct if it was dynamically allocated before the add_frontend()
- operation.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int remove_frontend(dmx_demux_t&#x22C6; demux,
- dmx_frontend_t&#x22C6; frontend);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_frontend_t*
- frontend</para>
-</entry><entry
- align="char">
-<para>Pointer to the front-end instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EBUSY</para>
-</entry><entry
- align="char">
-<para>The front-end is in use, i.e. a call to connect_frontend()
- has not been followed by a call to disconnect_frontend().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>get_frontends()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Provides the APIs of the front-ends that have been registered for this demux.
- Any of the front-ends obtained with this call can be used as a parameter for
- connect_frontend().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The include file demux.h contains the macro DMX_FE_ENTRY() for
- converting an element of the generic type struct list_head* to the type
- dmx_frontend_t*. The caller must not free the memory of any of the elements
- obtained via this function call.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>struct list_head&#x22C6; get_frontends(dmx_demux_t&#x22C6; demux);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*</para>
-</entry><entry
- align="char">
-<para>A list of front-end interfaces, or NULL in the case of an
- empty list.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>connect_frontend()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Connects the TS output of the front-end to the input of the demux. A demux
- can only be connected to a front-end registered to the demux with the function
- add_frontend().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>It may or may not be possible to connect multiple demuxes to the same
- front-end, depending on the capabilities of the HW platform. When not used,
- the front-end should be released by calling disconnect_frontend().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int connect_frontend(dmx_demux_t&#x22C6; demux,
- dmx_frontend_t&#x22C6; frontend);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_frontend_t*
- frontend</para>
-</entry><entry
- align="char">
-<para>Pointer to the front-end instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EBUSY</para>
-</entry><entry
- align="char">
-<para>The front-end is in use.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>disconnect_frontend()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Disconnects the demux and a front-end previously connected by a
- connect_frontend() call.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int disconnect_frontend(dmx_demux_t&#x22C6; demux);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_demux_t*
- demux</para>
-</entry><entry
- align="char">
-<para>Pointer to the demux API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section></section>
-<section id="demux_callback_api">
-<title>Demux Callback API</title>
-<para>This kernel-space API comprises the callback functions that deliver filtered data to the
-demux client. Unlike the other APIs, these API functions are provided by the client and called
-from the demux code.
-</para>
-<para>The function pointers of this abstract interface are not packed into a structure as in the
-other demux APIs, because the callback functions are registered and used independent
-of each other. As an example, it is possible for the API client to provide several
-callback functions for receiving TS packets and no callbacks for PES packets or
-sections.
-</para>
-<para>The functions that implement the callback API need not be re-entrant: when a demux
-driver calls one of these functions, the driver is not allowed to call the function again before
-the original call returns. If a callback is triggered by a hardware interrupt, it is recommended
-to use the Linux &#8220;bottom half&#8221; mechanism or start a tasklet instead of making the callback
-function call directly from a hardware interrupt.
-</para>
-
-<section
-role="subsection"><title>dmx_ts_cb()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function, provided by the client of the demux API, is called from the
- demux code. The function is only called when filtering on this TS feed has
- been enabled using the start_filtering() function.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>Any TS packets that match the filter settings are copied to a circular buffer. The
- filtered TS packets are delivered to the client using this callback function. The
- size of the circular buffer is controlled by the circular_buffer_size parameter
- of the set() function in the TS Feed API. It is expected that the buffer1 and
- buffer2 callback parameters point to addresses within the circular buffer, but
- other implementations are also possible. Note that the called party should not
- try to free the memory the buffer1 and buffer2 parameters point to.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>When this function is called, the buffer1 parameter typically points to the
- start of the first undelivered TS packet within a circular buffer. The buffer2
- buffer parameter is normally NULL, except when the received TS packets have
- crossed the last address of the circular buffer and &#8221;wrapped&#8221; to the beginning
- of the buffer. In the latter case the buffer1 parameter would contain an address
- within the circular buffer, while the buffer2 parameter would contain the first
- address of the circular buffer.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The number of bytes delivered with this function (i.e. buffer1_length +
- buffer2_length) is usually equal to the value of callback_length parameter
- given in the set() function, with one exception: if a timeout occurs before
- receiving callback_length bytes of TS data, any undelivered packets are
- immediately delivered to the client by calling this function. The timeout
- duration is controlled by the set() function in the TS Feed API.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>If a TS packet is received with errors that could not be fixed by the TS-level
- forward error correction (FEC), the Transport_error_indicator flag of the TS
- packet header should be set. The TS packet should not be discarded, as
- the error can possibly be corrected by a higher layer protocol. If the called
- party is slow in processing the callback, it is possible that the circular buffer
- eventually fills up. If this happens, the demux driver should discard any TS
- packets received while the buffer is full. The error should be indicated to the
- client on the next callback by setting the success parameter to the value of
- DMX_OVERRUN_ERROR.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The type of data returned to the callback can be selected by the new
- function int (*set_type) (struct dmx_ts_feed_s* feed, int type, dmx_ts_pes_t
- pes_type) which is part of the dmx_ts_feed_s struct (also cf. to the
- include file ost/demux.h) The type parameter decides if the raw TS packet
- (TS_PACKET) or just the payload (TS_PACKET&#8212;TS_PAYLOAD_ONLY)
- should be returned. If additionally the TS_DECODER bit is set the stream
- will also be sent to the hardware MPEG decoder. In this case, the second
- flag decides as what kind of data the stream should be interpreted. The
- possible choices are one of DMX_TS_PES_AUDIO, DMX_TS_PES_VIDEO,
- DMX_TS_PES_TELETEXT, DMX_TS_PES_SUBTITLE,
- DMX_TS_PES_PCR, or DMX_TS_PES_OTHER.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int dmx_ts_cb(__u8&#x22C6; buffer1, size_t buffer1_length,
- __u8&#x22C6; buffer2, size_t buffer2_length, dmx_ts_feed_t&#x22C6;
- source, dmx_success_t success);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>__u8* buffer1</para>
-</entry><entry
- align="char">
-<para>Pointer to the start of the filtered TS packets.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer1_length</para>
-</entry><entry
- align="char">
-<para>Length of the TS data in buffer1.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u8* buffer2</para>
-</entry><entry
- align="char">
-<para>Pointer to the tail of the filtered TS packets, or NULL.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer2_length</para>
-</entry><entry
- align="char">
-<para>Length of the TS data in buffer2.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_ts_feed_t*
- source</para>
-</entry><entry
- align="char">
-<para>Indicates which TS feed is the source of the callback.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_success_t
- success</para>
-</entry><entry
- align="char">
-<para>Indicates if there was an error in TS reception.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>Continue filtering.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-1</para>
-</entry><entry
- align="char">
-<para>Stop filtering - has the same effect as a call to
- stop_filtering() on the TS Feed API.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>dmx_section_cb()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function, provided by the client of the demux API, is called from the
- demux code. The function is only called when filtering of sections has been
- enabled using the function start_filtering() of the section feed API. When the
- demux driver has received a complete section that matches at least one section
- filter, the client is notified via this callback function. Normally this function is
- called for each received section; however, it is also possible to deliver multiple
- sections with one callback, for example when the system load is high. If an
- error occurs while receiving a section, this function should be called with
- the corresponding error type set in the success field, whether or not there is
- data to deliver. The Section Feed implementation should maintain a circular
- buffer for received sections. However, this is not necessary if the Section Feed
- API is implemented as a client of the TS Feed API, because the TS Feed
- implementation then buffers the received data. The size of the circular buffer
- can be configured using the set() function in the Section Feed API. If there
- is no room in the circular buffer when a new section is received, the section
- must be discarded. If this happens, the value of the success parameter should
- be DMX_OVERRUN_ERROR on the next callback.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int dmx_section_cb(__u8&#x22C6; buffer1, size_t
- buffer1_length, __u8&#x22C6; buffer2, size_t
- buffer2_length, dmx_section_filter_t&#x22C6; source,
- dmx_success_t success);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>__u8* buffer1</para>
-</entry><entry
- align="char">
-<para>Pointer to the start of the filtered section, e.g. within the
- circular buffer of the demux driver.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer1_length</para>
-</entry><entry
- align="char">
-<para>Length of the filtered section data in buffer1, including
- headers and CRC.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u8* buffer2</para>
-</entry><entry
- align="char">
-<para>Pointer to the tail of the filtered section data, or NULL.
- Useful to handle the wrapping of a circular buffer.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t buffer2_length</para>
-</entry><entry
- align="char">
-<para>Length of the filtered section data in buffer2, including
- headers and CRC.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_section_filter_t*
- filter</para>
-</entry><entry
- align="char">
-<para>Indicates the filter that triggered the callback.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_success_t
- success</para>
-</entry><entry
- align="char">
-<para>Indicates if there was an error in section reception.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>Continue filtering.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-1</para>
-</entry><entry
- align="char">
-<para>Stop filtering - has the same effect as a call to
- stop_filtering() on the Section Feed API.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section></section>
-<section id="ts_feed_api">
-<title>TS Feed API</title>
-<para>A TS feed is typically mapped to a hardware PID filter on the demux chip.
-Using this API, the client can set the filtering properties to start/stop filtering TS
-packets on a particular TS feed. The API is defined as an abstract interface of the type
-dmx_ts_feed_t.
-</para>
-<para>The functions that implement the interface should be defined static or module private. The
-client can get the handle of a TS feed API by calling the function allocate_ts_feed() in the
-demux API.
-</para>
-
-<section
-role="subsection"><title>set()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function sets the parameters of a TS feed. Any filtering in progress on the
- TS feed must be stopped before calling this function.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int set ( dmx_ts_feed_t&#x22C6; feed, __u16 pid, size_t
- callback_length, size_t circular_buffer_size, int
- descramble, struct timespec timeout);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_ts_feed_t* feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the TS feed API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u16 pid</para>
-</entry><entry
- align="char">
-<para>PID value to filter. Only the TS packets carrying the
- specified PID will be passed to the API client.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t
- callback_length</para>
-</entry><entry
- align="char">
-<para>Number of bytes to deliver with each call to the
- dmx_ts_cb() callback function. The value of this
- parameter should be a multiple of 188.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t
- circular_buffer_size</para>
-</entry><entry
- align="char">
-<para>Size of the circular buffer for the filtered TS packets.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int descramble</para>
-</entry><entry
- align="char">
-<para>If non-zero, descramble the filtered TS packets.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct timespec
- timeout</para>
-</entry><entry
- align="char">
-<para>Maximum time to wait before delivering received TS
- packets to the client.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOMEM</para>
-</entry><entry
- align="char">
-<para>Not enough memory for the requested buffer size.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>No descrambling facility available for TS.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>start_filtering()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Starts filtering TS packets on this TS feed, according to its settings. The PID
- value to filter can be set by the API client. All matching TS packets are
- delivered asynchronously to the client, using the callback function registered
- with allocate_ts_feed().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int start_filtering(dmx_ts_feed_t&#x22C6; feed);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_ts_feed_t* feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the TS feed API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>stop_filtering()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Stops filtering TS packets on this TS feed.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int stop_filtering(dmx_ts_feed_t&#x22C6; feed);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_ts_feed_t* feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the TS feed API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section></section>
-<section id="section_feed_api">
-<title>Section Feed API</title>
-<para>A section feed is a resource consisting of a PID filter and a set of section filters. Using this
-API, the client can set the properties of a section feed and to start/stop filtering. The API is
-defined as an abstract interface of the type dmx_section_feed_t. The functions that implement
-the interface should be defined static or module private. The client can get the handle of
-a section feed API by calling the function allocate_section_feed() in the demux
-API.
-</para>
-<para>On demux platforms that provide section filtering in hardware, the Section Feed API
-implementation provides a software wrapper for the demux hardware. Other platforms may
-support only PID filtering in hardware, requiring that TS packets are converted to sections in
-software. In the latter case the Section Feed API implementation can be a client of the TS
-Feed API.
-</para>
-
-</section>
-<section id="kdapi_set">
-<title>set()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function sets the parameters of a section feed. Any filtering in progress on
- the section feed must be stopped before calling this function. If descrambling
- is enabled, the payload_scrambling_control and address_scrambling_control
- fields of received DVB datagram sections should be observed. If either one is
- non-zero, the section should be descrambled either in hardware or using the
- functions descramble_mac_address() and descramble_section_payload() of the
- demux API. Note that according to the MPEG-2 Systems specification, only
- the payloads of private sections can be scrambled while the rest of the section
- data must be sent in the clear.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int set(dmx_section_feed_t&#x22C6; feed, __u16 pid, size_t
- circular_buffer_size, int descramble, int
- check_crc);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_section_feed_t*
- feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>__u16 pid</para>
-</entry><entry
- align="char">
-<para>PID value to filter; only the TS packets carrying the
- specified PID will be accepted.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t
- circular_buffer_size</para>
-</entry><entry
- align="char">
-<para>Size of the circular buffer for filtered sections.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int descramble</para>
-</entry><entry
- align="char">
-<para>If non-zero, descramble any sections that are scrambled.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int check_crc</para>
-</entry><entry
- align="char">
-<para>If non-zero, check the CRC values of filtered sections.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOMEM</para>
-</entry><entry
- align="char">
-<para>Not enough memory for the requested buffer size.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSYS</para>
-</entry><entry
- align="char">
-<para>No descrambling facility available for sections.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameters.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>allocate_filter()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function is used to allocate a section filter on the demux. It should only be
- called when no filtering is in progress on this section feed. If a filter cannot be
- allocated, the function fails with -ENOSPC. See in section ?? for the format of
- the section filter.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>The bitfields filter_mask and filter_value should only be modified when no
- filtering is in progress on this section feed. filter_mask controls which bits of
- filter_value are compared with the section headers/payload. On a binary value
- of 1 in filter_mask, the corresponding bits are compared. The filter only accepts
- sections that are equal to filter_value in all the tested bit positions. Any changes
- to the values of filter_mask and filter_value are guaranteed to take effect only
- when the start_filtering() function is called next time. The parent pointer in
- the struct is initialized by the API implementation to the value of the feed
- parameter. The priv pointer is not used by the API implementation, and can
- thus be freely utilized by the caller of this function. Any data pointed to by the
- priv pointer is available to the recipient of the dmx_section_cb() function call.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>While the maximum section filter length (DMX_MAX_FILTER_SIZE) is
- currently set at 16 bytes, hardware filters of that size are not available on all
- platforms. Therefore, section filtering will often take place first in hardware,
- followed by filtering in software for the header bytes that were not covered
- by a hardware filter. The filter_mask field can be checked to determine how
- many bytes of the section filter are actually used, and if the hardware filter will
- suffice. Additionally, software-only section filters can optionally be allocated
- to clients when all hardware section filters are in use. Note that on most demux
- hardware it is not possible to filter on the section_length field of the section
- header &#8211; thus this field is ignored, even though it is included in filter_value and
- filter_mask fields.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int allocate_filter(dmx_section_feed_t&#x22C6; feed,
- dmx_section_filter_t&#x22C6;&#x22C6; filter);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_section_feed_t*
- feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_section_filter_t**
- filter</para>
-</entry><entry
- align="char">
-<para>Pointer to the allocated filter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENOSPC</para>
-</entry><entry
- align="char">
-<para>No filters of given type and length available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameters.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>release_filter()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This function releases all the resources of a previously allocated section filter.
- The function should not be called while filtering is in progress on this section
- feed. After calling this function, the caller should not try to dereference the
- filter pointer.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int release_filter ( dmx_section_feed_t&#x22C6; feed,
- dmx_section_filter_t&#x22C6; filter);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_section_feed_t*
- feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>dmx_section_filter_t*
- filter</para>
-</entry><entry
- align="char">
-<para>I/O Pointer to the instance data of a section filter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-ENODEV</para>
-</entry><entry
- align="char">
-<para>No such filter allocated.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>start_filtering()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Starts filtering sections on this section feed, according to its settings. Sections
- are first filtered based on their PID and then matched with the section
- filters allocated for this feed. If the section matches the PID filter and
- at least one section filter, it is delivered to the API client. The section
- is delivered asynchronously using the callback function registered with
- allocate_section_feed().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int start_filtering ( dmx_section_feed_t&#x22C6; feed );</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_section_feed_t*
- feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>stop_filtering()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>Stops filtering sections on this section feed. Note that any changes to the
- filtering parameters (filter_value, filter_mask, etc.) should only be made when
- filtering is stopped.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int stop_filtering ( dmx_section_feed_t&#x22C6; feed );</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>dmx_section_feed_t*
- feed</para>
-</entry><entry
- align="char">
-<para>Pointer to the section feed API and instance data.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>RETURNS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>0</para>
-</entry><entry
- align="char">
-<para>The function was completed without errors.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>-EINVAL</para>
-</entry><entry
- align="char">
-<para>Bad parameter.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
diff --git a/dvb-spec/sgml/net.sgml b/dvb-spec/sgml/net.sgml
deleted file mode 100644
index 94e388d94..000000000
--- a/dvb-spec/sgml/net.sgml
+++ /dev/null
@@ -1,12 +0,0 @@
-<title>DVB Network API</title>
-<para>The DVB net device enables feeding of MPE (multi protocol encapsulation) packets
-received via DVB into the Linux network protocol stack, e.g. for internet via satellite
-applications. It can be accessed through <emphasis role="tt">/dev/dvb/adapter0/net0</emphasis>. Data types and
-and ioctl definitions can be accessed by including <emphasis role="tt">linux/dvb/net.h</emphasis> in your
-application.
-</para>
-<section id="dvb_net_types">
-<title>DVB Net Data Types</title>
-<para>To be written&#x2026;
-</para>
-</section>
diff --git a/dvb-spec/sgml/video.sgml b/dvb-spec/sgml/video.sgml
deleted file mode 100644
index 7bb287e67..000000000
--- a/dvb-spec/sgml/video.sgml
+++ /dev/null
@@ -1,1971 +0,0 @@
-<title>DVB Video Device</title>
-<para>The DVB video device controls the MPEG2 video decoder of the DVB hardware. It
-can be accessed through <emphasis role="tt">/dev/dvb/adapter0/video0</emphasis>. Data types and and
-ioctl definitions can be accessed by including <emphasis role="tt">linux/dvb/video.h</emphasis> in your
-application.
-</para>
-<para>Note that the DVB video device only controls decoding of the MPEG video stream, not
-its presentation on the TV or computer screen. On PCs this is typically handled by an
-associated video4linux device, e.g. <emphasis role="tt">/dev/video</emphasis>, which allows scaling and defining output
-windows.
-</para>
-<para>Some DVB cards don&#8217;t have their own MPEG decoder, which results in the omission of
-the audio and video device as well as the video4linux device.
-</para>
-<para>The ioctls that deal with SPUs (sub picture units) and navigation packets are only
-supported on some MPEG decoders made for DVD playback.
-</para>
-<section id="video_types">
-<title>Video Data Types</title>
-
-<section id="video_format_t">
-<title>video_format_t</title>
-<para>The <emphasis role="tt">video_format_t</emphasis> data type defined by
-</para>
-<programlisting>
- typedef enum {
- VIDEO_FORMAT_4_3,
- VIDEO_FORMAT_16_9
- } video_format_t;
-</programlisting>
-<para>is used in the VIDEO_SET_FORMAT function (??) to tell the driver which aspect ratio
-the output hardware (e.g. TV) has. It is also used in the data structures video_status
-(??) returned by VIDEO_GET_STATUS (??) and video_event (??) returned by
-VIDEO_GET_EVENT (??) which report about the display format of the current video
-stream.
-</para>
-</section>
-
-<section id="video_display_format_t">
-<title>video_display_format_t</title>
-<para>In case the display format of the video stream and of the display hardware differ the
-application has to specify how to handle the cropping of the picture. This can be done using
-the VIDEO_SET_DISPLAY_FORMAT call (??) which accepts
-</para>
-<programlisting>
- typedef enum {
- VIDEO_PAN_SCAN,
- VIDEO_LETTER_BOX,
- VIDEO_CENTER_CUT_OUT
- } video_display_format_t;
-</programlisting>
-<para>as argument.
-</para>
-</section>
-
-<section id="video_stream_source">
-<title>video stream source</title>
-<para>The video stream source is set through the VIDEO_SELECT_SOURCE call and can take
-the following values, depending on whether we are replaying from an internal (demuxer) or
-external (user write) source.
-</para>
-<programlisting>
- typedef enum {
- VIDEO_SOURCE_DEMUX,
- VIDEO_SOURCE_MEMORY
- } video_stream_source_t;
-</programlisting>
-<para>VIDEO_SOURCE_DEMUX selects the demultiplexer (fed either by the frontend or the
-DVR device) as the source of the video stream. If VIDEO_SOURCE_MEMORY
-is selected the stream comes from the application through the <emphasis role="tt">write()</emphasis> system
-call.
-</para>
-</section>
-
-<section id="video_play_state">
-<title>video play state</title>
-<para>The following values can be returned by the VIDEO_GET_STATUS call representing the
-state of video playback.
-</para>
-<programlisting>
- typedef enum {
- VIDEO_STOPPED,
- VIDEO_PLAYING,
- VIDEO_FREEZED
- } video_play_state_t;
-</programlisting>
-</section>
-
-<section id="video_event">
-<title>struct video_event</title>
-<para>The following is the structure of a video event as it is returned by the VIDEO_GET_EVENT
-call.
-</para>
-<programlisting>
- struct video_event {
- int32_t type;
- time_t timestamp;
- union {
- video_format_t video_format;
- } u;
- };
-</programlisting>
-</section>
-
-<section id="video_status">
-<title>struct video_status</title>
-<para>The VIDEO_GET_STATUS call returns the following structure informing about various
-states of the playback operation.
-</para>
-<programlisting>
- struct video_status {
- boolean video_blank;
- video_play_state_t play_state;
- video_stream_source_t stream_source;
- video_format_t video_format;
- video_displayformat_t display_format;
- };
-</programlisting>
-<para>If video_blank is set video will be blanked out if the channel is changed or if playback is
-stopped. Otherwise, the last picture will be displayed. play_state indicates if the video is
-currently frozen, stopped, or being played back. The stream_source corresponds to the seleted
-source for the video stream. It can come either from the demultiplexer or from memory.
-The video_format indicates the aspect ratio (one of 4:3 or 16:9) of the currently
-played video stream. Finally, display_format corresponds to the selected cropping
-mode in case the source video format is not the same as the format of the output
-device.
-</para>
-</section>
-
-<section id="video_still_picture">
-<title>struct video_still_picture</title>
-<para>An I-frame displayed via the VIDEO_STILLPICTURE call is passed on within the
-following structure.
-</para>
-<programlisting>
- /&#x22C6; pointer to and size of a single iframe in memory &#x22C6;/
- struct video_still_picture {
- char &#x22C6;iFrame;
- int32_t size;
- };
-</programlisting>
-</section>
-
-<section id="video_caps">
-<title>video capabilities</title>
-<para>A call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the following
-bits set according to the hardwares capabilities.
-</para>
-<programlisting>
- /&#x22C6; bit definitions for capabilities: &#x22C6;/
- /&#x22C6; can the hardware decode MPEG1 and/or MPEG2? &#x22C6;/
- #define VIDEO_CAP_MPEG1 1
- #define VIDEO_CAP_MPEG2 2
- /&#x22C6; can you send a system and/or program stream to video device?
- (you still have to open the video and the audio device but only
- send the stream to the video device) &#x22C6;/
- #define VIDEO_CAP_SYS 4
- #define VIDEO_CAP_PROG 8
- /&#x22C6; can the driver also handle SPU, NAVI and CSS encoded data?
- (CSS API is not present yet) &#x22C6;/
- #define VIDEO_CAP_SPU 16
- #define VIDEO_CAP_NAVI 32
- #define VIDEO_CAP_CSS 64
-</programlisting>
-</section>
-
-<section id="video_system">
-<title>video system</title>
-<para>A call to VIDEO_SET_SYSTEM sets the desired video system for TV output. The
-following system types can be set:
-</para>
-<programlisting>
- typedef enum {
- VIDEO_SYSTEM_PAL,
- VIDEO_SYSTEM_NTSC,
- VIDEO_SYSTEM_PALN,
- VIDEO_SYSTEM_PALNc,
- VIDEO_SYSTEM_PALM,
- VIDEO_SYSTEM_NTSC60,
- VIDEO_SYSTEM_PAL60,
- VIDEO_SYSTEM_PALM60
- } video_system_t;
-</programlisting>
-</section>
-
-<section id="video_highlight">
-<title>struct video_highlight</title>
-<para>Calling the ioctl VIDEO_SET_HIGHLIGHTS posts the SPU highlight information. The
-call expects the following format for that information:
-</para>
-<programlisting>
- typedef
- struct video_highlight {
- boolean active; /&#x22C6; 1=show highlight, 0=hide highlight &#x22C6;/
- uint8_t contrast1; /&#x22C6; 7- 4 Pattern pixel contrast &#x22C6;/
- /&#x22C6; 3- 0 Background pixel contrast &#x22C6;/
- uint8_t contrast2; /&#x22C6; 7- 4 Emphasis pixel-2 contrast &#x22C6;/
- /&#x22C6; 3- 0 Emphasis pixel-1 contrast &#x22C6;/
- uint8_t color1; /&#x22C6; 7- 4 Pattern pixel color &#x22C6;/
- /&#x22C6; 3- 0 Background pixel color &#x22C6;/
- uint8_t color2; /&#x22C6; 7- 4 Emphasis pixel-2 color &#x22C6;/
- /&#x22C6; 3- 0 Emphasis pixel-1 color &#x22C6;/
- uint32_t ypos; /&#x22C6; 23-22 auto action mode &#x22C6;/
- /&#x22C6; 21-12 start y &#x22C6;/
- /&#x22C6; 9- 0 end y &#x22C6;/
- uint32_t xpos; /&#x22C6; 23-22 button color number &#x22C6;/
- /&#x22C6; 21-12 start x &#x22C6;/
- /&#x22C6; 9- 0 end x &#x22C6;/
- } video_highlight_t;
-</programlisting>
-
-</section>
-<section id="video_spu">
-<title>video SPU</title>
-<para>Calling VIDEO_SET_SPU deactivates or activates SPU decoding, according to the
-following format:
-</para>
-<programlisting>
- typedef
- struct video_spu {
- boolean active;
- int stream_id;
- } video_spu_t;
-</programlisting>
-
-</section>
-<section id="video_spu_palette">
-<title>video SPU palette</title>
-<para>The following structure is used to set the SPU palette by calling VIDEO_SPU_PALETTE:
-</para>
-<programlisting>
- typedef
- struct video_spu_palette{
- int length;
- uint8_t &#x22C6;palette;
- } video_spu_palette_t;
-</programlisting>
-
-</section>
-<section id="video_navi_pack">
-<title>video NAVI pack</title>
-<para>In order to get the navigational data the following structure has to be passed to the ioctl
-VIDEO_GET_NAVI:
-</para>
-<programlisting>
- typedef
- struct video_navi_pack{
- int length; /&#x22C6; 0 ... 1024 &#x22C6;/
- uint8_t data[1024];
- } video_navi_pack_t;
-</programlisting>
-</section>
-
-
-<section id="video_attributes">
-<title>video attributes</title>
-<para>The following attributes can be set by a call to VIDEO_SET_ATTRIBUTES:
-</para>
-<programlisting>
- typedef uint16_t video_attributes_t;
- /&#x22C6; bits: descr. &#x22C6;/
- /&#x22C6; 15-14 Video compression mode (0=MPEG-1, 1=MPEG-2) &#x22C6;/
- /&#x22C6; 13-12 TV system (0=525/60, 1=625/50) &#x22C6;/
- /&#x22C6; 11-10 Aspect ratio (0=4:3, 3=16:9) &#x22C6;/
- /&#x22C6; 9- 8 permitted display mode on 4:3 monitor (0=both, 1=only pan-sca &#x22C6;/
- /&#x22C6; 7 line 21-1 data present in GOP (1=yes, 0=no) &#x22C6;/
- /&#x22C6; 6 line 21-2 data present in GOP (1=yes, 0=no) &#x22C6;/
- /&#x22C6; 5- 3 source resolution (0=720x480/576, 1=704x480/576, 2=352x480/57 &#x22C6;/
- /&#x22C6; 2 source letterboxed (1=yes, 0=no) &#x22C6;/
- /&#x22C6; 0 film/camera mode (0=camera, 1=film (625/50 only)) &#x22C6;/
-</programlisting>
-</section></section>
-
-
-<section id="video_function_calls">
-<title>Video Function Calls</title>
-
-
-<section id="video_fopen">
-<title>open()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call opens a named video device (e.g. /dev/dvb/adapter0/video0)
- for subsequent use.</para>
-<para>When an open() call has succeeded, the device will be ready for use.
- The significance of blocking or non-blocking mode is described in the
- documentation for functions where there is a difference. It does not affect the
- semantics of the open() call itself. A device opened in blocking mode can later
- be put into non-blocking mode (and vice versa) using the F_SETFL command
- of the fcntl system call. This is a standard system call, documented in the Linux
- manual page for fcntl. Only one user can open the Video Device in O_RDWR
- mode. All other attempts to open the device in this mode will fail, and an
- error-code will be returned. If the Video Device is opened in O_RDONLY
- mode, the only ioctl call that can be used is VIDEO_GET_STATUS. All other
- call will return an error code.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int open(const char &#x22C6;deviceName, int flags);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>const char
- *deviceName</para>
-</entry><entry
- align="char">
-<para>Name of specific video device.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int flags</para>
-</entry><entry
- align="char">
-<para>A bit-wise OR of the following flags:</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDONLY read-only access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_RDWR read/write access</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>O_NONBLOCK open in non-blocking mode</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>(blocking mode is the default)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>ENODEV</para>
-</entry><entry
- align="char">
-<para>Device driver not loaded/available.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBUSY</para>
-</entry><entry
- align="char">
-<para>Device or resource busy.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid argument.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-<section id="video_fclose">
-<title>close()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call closes a previously opened video device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int close(int fd);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section>
-<section id="video_fwrite">
-<title>write()</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This system call can only be used if VIDEO_SOURCE_MEMORY is selected
- in the ioctl call VIDEO_SELECT_SOURCE. The data provided shall be in
- PES format, unless the capability allows other formats. If O_NONBLOCK is
- not specified the function will block until buffer space is available. The amount
- of data to be transferred is implied by count.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>size_t write(int fd, const void &#x22C6;buf, size_t count);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>void *buf</para>
-</entry><entry
- align="char">
-<para>Pointer to the buffer containing the PES data.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>size_t count</para>
-</entry><entry
- align="char">
-<para>Size of buf.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Mode VIDEO_SOURCE_MEMORY not selected.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>ENOMEM</para>
-</entry><entry
- align="char">
-<para>Attempted to write more data than the internal buffer can
- hold.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_STOP</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to stop playing the current stream.
- Depending on the input parameter, the screen can be blanked out or displaying
- the last decoded frame.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_STOP, boolean
- mode);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_STOP for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>Boolean mode</para>
-</entry><entry
- align="char">
-<para>Indicates how the screen shall be handled.</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>TRUE: Blank screen when stop.</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>FALSE: Show last decoded frame.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_PLAY</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to start playing a video stream from the
- selected source.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_PLAY);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_PLAY for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_FREEZE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call suspends the live video stream being played. Decoding
- and playing are frozen. It is then possible to restart the decoding
- and playing process of the video stream using the VIDEO_CONTINUE
- command. If VIDEO_SOURCE_MEMORY is selected in the ioctl call
- VIDEO_SELECT_SOURCE, the DVB subsystem will not decode any more
- data until the ioctl call VIDEO_CONTINUE or VIDEO_PLAY is performed.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_FREEZE);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_FREEZE for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_CONTINUE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call restarts decoding and playing processes of the video stream
- which was played before a call to VIDEO_FREEZE was made.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_CONTINUE);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_CONTINUE for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SELECT_SOURCE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call informs the video device which source shall be used for the input
- data. The possible sources are demux or memory. If memory is selected, the
- data is fed to the video device through the write command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_SELECT_SOURCE,
- video_stream_source_t source);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SELECT_SOURCE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_stream_source_t
- source</para>
-</entry><entry
- align="char">
-<para>Indicates which source shall be used for the Video stream.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_BLANK</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to blank out the picture.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_SET_BLANK, boolean
- mode);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_BLANK for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>boolean mode</para>
-</entry><entry
- align="char">
-<para>TRUE: Blank screen when stop.</para>
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>FALSE: Show last decoded frame.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal input parameter</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_GET_STATUS</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to return the current status of the device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_GET_STATUS, struct
- video_status &#x22C6;status);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_GET_STATUS for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct video_status
- *status</para>
-</entry><entry
- align="char">
-<para>Returns the current status of the Video Device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error, possibly in the communication with the
- DVB subsystem.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>status points to invalid address</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_GET_EVENT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call returns an event of type video_event if available. If an event is
- not available, the behavior depends on whether the device is in blocking or
- non-blocking mode. In the latter case, the call fails immediately with errno
- set to EWOULDBLOCK. In the former case, the call blocks until an event
- becomes available. The standard Linux poll() and/or select() system calls can
- be used with the device file descriptor to watch for new events. For select(),
- the file descriptor should be included in the exceptfds argument, and for
- poll(), POLLPRI should be specified as the wake-up condition. Read-only
- permissions are sufficient for this ioctl call.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_GET_EVENT, struct
- video_event &#x22C6;ev);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_GET_EVENT for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct video_event
- *ev</para>
-</entry><entry
- align="char">
-<para>Points to the location where the event, if any, is to be
- stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>ev points to invalid address</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EWOULDBLOCK</para>
-</entry><entry
- align="char">
-<para>There is no event pending, and the device is in
- non-blocking mode.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EOVERFLOW</para>
-</entry><entry
- align="char">
-</entry>
- </row><row><entry
- align="char">
-</entry><entry
- align="char">
-<para>Overflow in event queue - one or more events were lost.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_DISPLAY_FORMAT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to select the video format to be applied
- by the MPEG chip on the video.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request =
- VIDEO_SET_DISPLAY_FORMAT, video_display_format_t
- format);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_DISPLAY_FORMAT for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_display_format_t
- format</para>
-</entry><entry
- align="char">
-<para>Selects the video format to be used.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal parameter format.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_STILLPICTURE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to display a still picture (I-frame). The
- input data shall contain an I-frame. If the pointer is NULL, then the current
- displayed still picture is blanked.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_STILLPICTURE,
- struct video_still_picture &#x22C6;sp);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_STILLPICTURE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>struct
- video_still_picture
- *sp</para>
-</entry><entry
- align="char">
-<para>Pointer to a location where an I-frame and size is stored.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>sp points to an invalid iframe.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_FAST_FORWARD</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the Video Device to skip decoding of N number of I-frames.
- This call can only be used if VIDEO_SOURCE_MEMORY is selected.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_FAST_FORWARD, int
- nFrames);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_FAST_FORWARD for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int nFrames</para>
-</entry><entry
- align="char">
-<para>The number of frames to skip.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Mode VIDEO_SOURCE_MEMORY not selected.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal parameter format.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SLOWMOTION</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the video device to repeat decoding frames N number of
- times. This call can only be used if VIDEO_SOURCE_MEMORY is selected.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_SLOWMOTION, int
- nFrames);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SLOWMOTION for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int nFrames</para>
-</entry><entry
- align="char">
-<para>The number of times to repeat each frame.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EPERM</para>
-</entry><entry
- align="char">
-<para>Mode VIDEO_SOURCE_MEMORY not selected.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Illegal parameter format.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_GET_CAPABILITIES</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call asks the video device about its decoding capabilities. On success
- it returns and integer which has bits set according to the defines in section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_GET_CAPABILITIES,
- unsigned int &#x22C6;cap);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_GET_CAPABILITIES for this
- command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>unsigned int *cap</para>
-</entry><entry
- align="char">
-<para>Pointer to a location where to store the capability
- information.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>cap points to an invalid iframe.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_ID</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl selects which sub-stream is to be decoded if a program or system
- stream is sent to the video device.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(int fd, int request = VIDEO_SET_ID, int
- id);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_ID for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int id</para>
-</entry><entry
- align="char">
-<para>video sub-stream id</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINTERNAL</para>
-</entry><entry
- align="char">
-<para>Internal error.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>Invalid sub-stream id.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_CLEAR_BUFFER</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl call clears all video buffers in the driver and in the decoder hardware.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_CLEAR_BUFFER);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_CLEAR_BUFFER for this command.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_STREAMTYPE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl tells the driver which kind of stream to expect being written to it. If
- this call is not used the default of video PES is used. Some drivers might not
- support this call and always expect PES.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>int ioctl(fd, int request = VIDEO_SET_STREAMTYPE,
- int type);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_STREAMTYPE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int type</para>
-</entry><entry
- align="char">
-<para>stream type</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>type is not a valid or supported stream type.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_FORMAT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl sets the screen format (aspect ratio) of the connected output device
- (TV) so that the output of the decoder can be adjusted accordingly.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_SET_FORMAT,
- video_format_t format);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_FORMAT for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_format_t
- format</para>
-</entry><entry
- align="char">
-<para>video format of TV as defined in section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>format is not a valid video format.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_SYSTEM</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl sets the television output format. The format (see section ??) may
- vary from the color format of the displayed MPEG stream. If the hardware is
- not able to display the requested format the call will return an error.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_SET_SYSTEM ,
- video_system_t system);</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_FORMAT for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_system_t
- system</para>
-</entry><entry
- align="char">
-<para>video system of TV output.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>system is not a valid or supported video system.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_HIGHLIGHT</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl sets the SPU highlight information for the menu access of a DVD.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_SET_HIGHLIGHT
- ,video_highlight_t &#x22C6;vhilite)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_HIGHLIGHT for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_highlight_t
- *vhilite</para>
-</entry><entry
- align="char">
-<para>SPU Highlight information according to section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>input is not a valid highlight setting.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_SPU</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl activates or deactivates SPU decoding in a DVD input stream. It can
- only be used, if the driver is able to handle a DVD stream.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_SET_SPU ,
- video_spu_t &#x22C6;spu)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_SPU for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_spu_t *spu</para>
-</entry><entry
- align="char">
-<para>SPU decoding (de)activation and subid setting according
- to section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>input is not a valid spu setting or driver cannot handle
- SPU.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_SPU_PALETTE</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl sets the SPU color palette.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_SET_SPU_PALETTE
- ,video_spu_palette_t &#x22C6;palette )</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_SPU_PALETTE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_spu_palette_t
- *palette</para>
-</entry><entry
- align="char">
-<para>SPU palette according to section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>input is not a valid palette or driver doesn&#8217;t handle SPU.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_GET_NAVI</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl returns navigational information from the DVD stream. This is
- especially needed if an encoded stream has to be decoded by the hardware.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_GET_NAVI ,
- video_navi_pack_t &#x22C6;navipack)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_GET_NAVI for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_navi_pack_t
- *navipack</para>
-</entry><entry
- align="char">
-<para>PCI or DSI pack (private stream 2) according to section
- ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EFAULT</para>
-</entry><entry
- align="char">
-<para>driver is not able to return navigational information</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-
-</section><section
-role="subsection"><title>VIDEO_SET_ATTRIBUTES</title>
-<para>DESCRIPTION
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para>This ioctl is intended for DVD playback and allows you to set certain
- information about the stream. Some hardware may not need this information,
- but the call also tells the hardware to prepare for DVD playback.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>SYNOPSIS
-</para>
-<informaltable><tgroup cols="1"><tbody><row><entry
- align="char">
-<para> int ioctl(fd, int request = VIDEO_SET_ATTRIBUTE
- ,video_attributes_t vattr)</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>PARAMETERS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>int fd</para>
-</entry><entry
- align="char">
-<para>File descriptor returned by a previous call to open().</para>
-</entry>
- </row><row><entry
- align="char">
-<para>int request</para>
-</entry><entry
- align="char">
-<para>Equals VIDEO_SET_ATTRIBUTE for this command.</para>
-</entry>
- </row><row><entry
- align="char">
-<para>video_attributes_t
- vattr</para>
-</entry><entry
- align="char">
-<para>video attributes according to section ??.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
-<para>ERRORS
-</para>
-<informaltable><tgroup cols="2"><tbody><row><entry
- align="char">
-<para>EBADF</para>
-</entry><entry
- align="char">
-<para>fd is not a valid open file descriptor</para>
-</entry>
- </row><row><entry
- align="char">
-<para>EINVAL</para>
-</entry><entry
- align="char">
-<para>input is not a valid attribute setting.</para>
-</entry>
- </row></tbody></tgroup></informaltable>
- </section></section>