doc-rst: linux_tv DocBook to reST migration (docs-next)
This is the restructuredText (reST) migration of the ``media`` DocBook-XML set from the linux_tv project. Signed-off-by: Markus Heiser <markus.heiser@darmarIT.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
6ab99fa6a0
commit
5377d91f3e
|
@ -14,6 +14,7 @@ Contents:
|
|||
:maxdepth: 2
|
||||
|
||||
kernel-documentation
|
||||
linux_tv/index
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
file: audio.h
|
||||
=============
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/*
|
||||
* audio.h
|
||||
*
|
||||
* Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
|
||||
* & Marcus Metzler <marcus@convergence.de>
|
||||
* for convergence integrated media GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Lesser Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DVBAUDIO_H_
|
||||
#define _DVBAUDIO_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
typedef enum {
|
||||
AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */
|
||||
AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */
|
||||
} audio_stream_source_t;
|
||||
|
||||
|
||||
typedef enum {
|
||||
AUDIO_STOPPED, /* Device is stopped */
|
||||
AUDIO_PLAYING, /* Device is currently playing */
|
||||
AUDIO_PAUSED /* Device is paused */
|
||||
} audio_play_state_t;
|
||||
|
||||
|
||||
typedef enum {
|
||||
AUDIO_STEREO,
|
||||
AUDIO_MONO_LEFT,
|
||||
AUDIO_MONO_RIGHT,
|
||||
AUDIO_MONO,
|
||||
AUDIO_STEREO_SWAPPED
|
||||
} audio_channel_select_t;
|
||||
|
||||
|
||||
typedef struct audio_mixer {
|
||||
unsigned int volume_left;
|
||||
unsigned int volume_right;
|
||||
// what else do we need? bass, pass-through, ...
|
||||
} audio_mixer_t;
|
||||
|
||||
|
||||
typedef struct audio_status {
|
||||
int AV_sync_state; /* sync audio and video? */
|
||||
int mute_state; /* audio is muted */
|
||||
audio_play_state_t play_state; /* current playback state */
|
||||
audio_stream_source_t stream_source; /* current stream source */
|
||||
audio_channel_select_t channel_select; /* currently selected channel */
|
||||
int bypass_mode; /* pass on audio data to */
|
||||
audio_mixer_t mixer_state; /* current mixer state */
|
||||
} audio_status_t; /* separate decoder hardware */
|
||||
|
||||
|
||||
typedef
|
||||
struct audio_karaoke { /* if Vocal1 or Vocal2 are non-zero, they get mixed */
|
||||
int vocal1; /* into left and right t at 70% each */
|
||||
int vocal2; /* if both, Vocal1 and Vocal2 are non-zero, Vocal1 gets*/
|
||||
int melody; /* mixed into the left channel and */
|
||||
/* Vocal2 into the right channel at 100% each. */
|
||||
/* if Melody is non-zero, the melody channel gets mixed*/
|
||||
} audio_karaoke_t; /* into left and right */
|
||||
|
||||
|
||||
typedef __u16 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) */
|
||||
|
||||
|
||||
/* for GET_CAPABILITIES and SET_FORMAT, the latter should only set one bit */
|
||||
#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
|
||||
|
||||
#define AUDIO_STOP _IO('o', 1)
|
||||
#define AUDIO_PLAY _IO('o', 2)
|
||||
#define AUDIO_PAUSE _IO('o', 3)
|
||||
#define AUDIO_CONTINUE _IO('o', 4)
|
||||
#define AUDIO_SELECT_SOURCE _IO('o', 5)
|
||||
#define AUDIO_SET_MUTE _IO('o', 6)
|
||||
#define AUDIO_SET_AV_SYNC _IO('o', 7)
|
||||
#define AUDIO_SET_BYPASS_MODE _IO('o', 8)
|
||||
#define AUDIO_CHANNEL_SELECT _IO('o', 9)
|
||||
#define AUDIO_GET_STATUS _IOR('o', 10, audio_status_t)
|
||||
|
||||
#define AUDIO_GET_CAPABILITIES _IOR('o', 11, unsigned int)
|
||||
#define AUDIO_CLEAR_BUFFER _IO('o', 12)
|
||||
#define AUDIO_SET_ID _IO('o', 13)
|
||||
#define AUDIO_SET_MIXER _IOW('o', 14, audio_mixer_t)
|
||||
#define AUDIO_SET_STREAMTYPE _IO('o', 15)
|
||||
#define AUDIO_SET_EXT_ID _IO('o', 16)
|
||||
#define AUDIO_SET_ATTRIBUTES _IOW('o', 17, audio_attributes_t)
|
||||
#define AUDIO_SET_KARAOKE _IOW('o', 18, audio_karaoke_t)
|
||||
|
||||
/**
|
||||
* AUDIO_GET_PTS
|
||||
*
|
||||
* Read the 33 bit presentation time stamp as defined
|
||||
* in ITU T-REC-H.222.0 / ISO/IEC 13818-1.
|
||||
*
|
||||
* The PTS should belong to the currently played
|
||||
* frame if possible, but may also be a value close to it
|
||||
* like the PTS of the last decoded frame or the last PTS
|
||||
* extracted by the PES parser.
|
||||
*/
|
||||
#define AUDIO_GET_PTS _IOR('o', 19, __u64)
|
||||
#define AUDIO_BILINGUAL_CHANNEL_SELECT _IO('o', 20)
|
||||
|
||||
#endif /* _DVBAUDIO_H_ */
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,108 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
file: ca.h
|
||||
==========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/*
|
||||
* ca.h
|
||||
*
|
||||
* Copyright (C) 2000 Ralph Metzler <ralph@convergence.de>
|
||||
* & Marcus Metzler <marcus@convergence.de>
|
||||
* for convergence integrated media GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Lesser Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DVBCA_H_
|
||||
#define _DVBCA_H_
|
||||
|
||||
/* slot interface types and info */
|
||||
|
||||
typedef struct ca_slot_info {
|
||||
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_DESCR 8 /* built-in descrambler */
|
||||
#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;
|
||||
|
||||
|
||||
/* descrambler types and info */
|
||||
|
||||
typedef struct ca_descr_info {
|
||||
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;
|
||||
|
||||
typedef struct ca_caps {
|
||||
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_caps_t;
|
||||
|
||||
/* a message to/from a CI-CAM */
|
||||
typedef struct ca_msg {
|
||||
unsigned int index;
|
||||
unsigned int type;
|
||||
unsigned int length;
|
||||
unsigned char msg[256];
|
||||
} ca_msg_t;
|
||||
|
||||
typedef struct ca_descr {
|
||||
unsigned int index;
|
||||
unsigned int parity; /* 0 == even, 1 == odd */
|
||||
unsigned char cw[8];
|
||||
} ca_descr_t;
|
||||
|
||||
typedef struct ca_pid {
|
||||
unsigned int pid;
|
||||
int index; /* -1 == disable*/
|
||||
} ca_pid_t;
|
||||
|
||||
#define CA_RESET _IO('o', 128)
|
||||
#define CA_GET_CAP _IOR('o', 129, ca_caps_t)
|
||||
#define CA_GET_SLOT_INFO _IOR('o', 130, ca_slot_info_t)
|
||||
#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t)
|
||||
#define CA_GET_MSG _IOR('o', 132, ca_msg_t)
|
||||
#define CA_SEND_MSG _IOW('o', 133, ca_msg_t)
|
||||
#define CA_SET_DESCR _IOW('o', 134, ca_descr_t)
|
||||
#define CA_SET_PID _IOW('o', 135, ca_pid_t)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,221 @@
|
|||
# -*- coding: utf-8; mode: python -*-
|
||||
#
|
||||
# This is the project specific sphinx-build configuration, which is loaded from
|
||||
# the base configuration file (``../conf.py``). About config values consult:
|
||||
#
|
||||
# * http://www.sphinx-doc.org/en/stable/config.html
|
||||
#
|
||||
# While setting values here, please take care to not overwrite common needed
|
||||
# configurations. This means, do not *overwrite* composite values (e.g. the
|
||||
# list- or dictionary-value of "latex_elements" resp. "extensions") by
|
||||
# thoughtless assignments. Manipulate composite values always by *update*
|
||||
# (dict-values) or extend (list-values). Nevertheless, if you know what you are
|
||||
# doing, you are free to *overwrite* values to your needs.
|
||||
#
|
||||
# useful preset names:
|
||||
#
|
||||
# * BASE_FOLDER: the folder where the top conf.py is located
|
||||
# * main_name: the basename of this project-folder
|
||||
|
||||
# Set parser's default kernel-doc mode ``reST|kernel-doc``.
|
||||
kernel_doc_mode = "kernel-doc"
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# General configuration
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
project = u'LINUX MEDIA INFRASTRUCTURE API'
|
||||
copyright = u'2009-2015 : LinuxTV Developers'
|
||||
author = u'The LinuxTV Developers'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
#version = 'v4.7'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
#release = 'v4.7-rc2'
|
||||
|
||||
# extlinks["man"] = ('http://manpages.ubuntu.com/cgi-bin/search.py?q=%s', ' ')
|
||||
|
||||
# intersphinx_mapping['kernel-doc'] = ('http://return42.github.io/sphkerneldoc/books/kernel-doc-HOWTO/', None)
|
||||
|
||||
extensions.extend([
|
||||
# 'sphinx.ext.pngmath'
|
||||
#, 'sphinx.ext.mathjax'
|
||||
])
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Options for HTML output
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = pathjoin(BASE_FOLDER, "_tex", "logo.png")
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path.extend([])
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = main_name
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Options for rst2pdf output
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# Grouping the document tree into PDF files. List of tuples
|
||||
# (source start file, target name, title, author, options).
|
||||
#
|
||||
# The options element is a dictionary that lets you override
|
||||
# this config per-document.
|
||||
# For example,
|
||||
# ('index', u'MyProject', u'My Project', u'Author Name',
|
||||
# dict(pdf_compressed = True))
|
||||
# would mean that specific document would be compressed
|
||||
# regardless of the global pdf_compressed setting.
|
||||
#
|
||||
# further: http://rst2pdf.ralsina.me/handbook.html#sphinx
|
||||
|
||||
# FIXME: at this time, the rst2pdf fails with a bug
|
||||
#pdf_documents = [
|
||||
# (master_doc, main_name, project, author)
|
||||
# , ]
|
||||
|
||||
# If false, no index is generated.
|
||||
pdf_use_index = False
|
||||
|
||||
# How many levels deep should the table of contents be?
|
||||
pdf_toc_depth = 3
|
||||
|
||||
# Add section number to section references
|
||||
pdf_use_numbered_links = False
|
||||
|
||||
# Background images fitting mode
|
||||
pdf_fit_background_mode = 'scale'
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Options for manual page output
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
# man_pages = [
|
||||
# (master_doc, 'kernel-doc', u'Kernel-Doc',
|
||||
# [author], 1)
|
||||
# ]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Options for Texinfo output
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
# texinfo_documents = [
|
||||
# (master_doc, 'Kernel-Doc', u'Kernel-Doc Documentation',
|
||||
# author, 'Kernel-Doc', 'One line description of project.',
|
||||
# 'Miscellaneous'),
|
||||
# ]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#texinfo_no_detailmenu = False
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Options for Epub output
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# Bibliographic Dublin Core info.
|
||||
# epub_title = project
|
||||
# epub_author = author
|
||||
# epub_publisher = author
|
||||
# epub_copyright = copyright
|
||||
|
||||
# The basename for the epub file. It defaults to the project name.
|
||||
#epub_basename = project
|
||||
|
||||
# The HTML theme for the epub output. Since the default themes are not
|
||||
# optimized for small screen space, using the same theme for HTML and epub
|
||||
# output is usually not wise. This defaults to 'epub', a theme designed to save
|
||||
# visual space.
|
||||
#epub_theme = 'epub'
|
||||
|
||||
# The language of the text. It defaults to the language option
|
||||
# or 'en' if the language is not set.
|
||||
#epub_language = ''
|
||||
|
||||
# The scheme of the identifier. Typical schemes are ISBN or URL.
|
||||
#epub_scheme = ''
|
||||
|
||||
# The unique identifier of the text. This can be a ISBN number
|
||||
# or the project homepage.
|
||||
#epub_identifier = ''
|
||||
|
||||
# A unique identification for the text.
|
||||
#epub_uid = ''
|
||||
|
||||
# A tuple containing the cover image and cover page html template filenames.
|
||||
#epub_cover = ()
|
||||
|
||||
# A sequence of (type, uri, title) tuples for the guide element of content.opf.
|
||||
#epub_guide = ()
|
||||
|
||||
# HTML files that should be inserted before the pages created by sphinx.
|
||||
# The format is a list of tuples containing the path and title.
|
||||
#epub_pre_files.extend([])
|
||||
|
||||
# HTML files that should be inserted after the pages created by sphinx.
|
||||
# The format is a list of tuples containing the path and title.
|
||||
#epub_post_files.extend([])
|
||||
|
||||
# A list of files that should not be packed into the epub file.
|
||||
epub_exclude_files.extend([])
|
||||
|
||||
# The depth of the table of contents in toc.ncx.
|
||||
#epub_tocdepth = 3
|
||||
|
||||
# Allow duplicate toc entries.
|
||||
#epub_tocdup = True
|
||||
|
||||
# Choose between 'default' and 'includehidden'.
|
||||
#epub_tocscope = 'default'
|
||||
|
||||
# Fix unsupported image types using the Pillow.
|
||||
#epub_fix_images = False
|
||||
|
||||
# Scale large images.
|
||||
#epub_max_image_width = 0
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#epub_show_urls = 'inline'
|
||||
|
||||
# If false, no index is generated.
|
||||
#epub_use_index = True
|
||||
|
|
@ -0,0 +1,173 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
file: dmx.h
|
||||
===========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/*
|
||||
* dmx.h
|
||||
*
|
||||
* Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
|
||||
* & Ralph Metzler <ralph@convergence.de>
|
||||
* for convergence integrated media GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _UAPI_DVBDMX_H_
|
||||
#define _UAPI_DVBDMX_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#ifndef __KERNEL__
|
||||
#include <time.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define DMX_FILTER_SIZE 16
|
||||
|
||||
enum dmx_output
|
||||
{
|
||||
DMX_OUT_DECODER, /* Streaming directly to decoder. */
|
||||
DMX_OUT_TAP, /* Output going to a memory buffer */
|
||||
/* (to be retrieved via the read command).*/
|
||||
DMX_OUT_TS_TAP, /* Output multiplexed into a new TS */
|
||||
/* (to be retrieved by reading from the */
|
||||
/* logical DVR device). */
|
||||
DMX_OUT_TSDEMUX_TAP /* Like TS_TAP but retrieved from the DMX device */
|
||||
};
|
||||
|
||||
typedef enum dmx_output dmx_output_t;
|
||||
|
||||
typedef enum dmx_input
|
||||
{
|
||||
DMX_IN_FRONTEND, /* Input from a front-end device. */
|
||||
DMX_IN_DVR /* Input from the logical DVR device. */
|
||||
} dmx_input_t;
|
||||
|
||||
|
||||
typedef enum dmx_ts_pes
|
||||
{
|
||||
DMX_PES_AUDIO0,
|
||||
DMX_PES_VIDEO0,
|
||||
DMX_PES_TELETEXT0,
|
||||
DMX_PES_SUBTITLE0,
|
||||
DMX_PES_PCR0,
|
||||
|
||||
DMX_PES_AUDIO1,
|
||||
DMX_PES_VIDEO1,
|
||||
DMX_PES_TELETEXT1,
|
||||
DMX_PES_SUBTITLE1,
|
||||
DMX_PES_PCR1,
|
||||
|
||||
DMX_PES_AUDIO2,
|
||||
DMX_PES_VIDEO2,
|
||||
DMX_PES_TELETEXT2,
|
||||
DMX_PES_SUBTITLE2,
|
||||
DMX_PES_PCR2,
|
||||
|
||||
DMX_PES_AUDIO3,
|
||||
DMX_PES_VIDEO3,
|
||||
DMX_PES_TELETEXT3,
|
||||
DMX_PES_SUBTITLE3,
|
||||
DMX_PES_PCR3,
|
||||
|
||||
DMX_PES_OTHER
|
||||
} dmx_pes_type_t;
|
||||
|
||||
#define DMX_PES_AUDIO DMX_PES_AUDIO0
|
||||
#define DMX_PES_VIDEO DMX_PES_VIDEO0
|
||||
#define DMX_PES_TELETEXT DMX_PES_TELETEXT0
|
||||
#define DMX_PES_SUBTITLE DMX_PES_SUBTITLE0
|
||||
#define DMX_PES_PCR DMX_PES_PCR0
|
||||
|
||||
|
||||
typedef struct dmx_filter
|
||||
{
|
||||
__u8 filter[DMX_FILTER_SIZE];
|
||||
__u8 mask[DMX_FILTER_SIZE];
|
||||
__u8 mode[DMX_FILTER_SIZE];
|
||||
} dmx_filter_t;
|
||||
|
||||
|
||||
struct dmx_sct_filter_params
|
||||
{
|
||||
__u16 pid;
|
||||
dmx_filter_t filter;
|
||||
__u32 timeout;
|
||||
__u32 flags;
|
||||
#define DMX_CHECK_CRC 1
|
||||
#define DMX_ONESHOT 2
|
||||
#define DMX_IMMEDIATE_START 4
|
||||
#define DMX_KERNEL_CLIENT 0x8000
|
||||
};
|
||||
|
||||
|
||||
struct dmx_pes_filter_params
|
||||
{
|
||||
__u16 pid;
|
||||
dmx_input_t input;
|
||||
dmx_output_t output;
|
||||
dmx_pes_type_t pes_type;
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
typedef struct dmx_caps {
|
||||
__u32 caps;
|
||||
int num_decoders;
|
||||
} dmx_caps_t;
|
||||
|
||||
typedef enum dmx_source {
|
||||
DMX_SOURCE_FRONT0 = 0,
|
||||
DMX_SOURCE_FRONT1,
|
||||
DMX_SOURCE_FRONT2,
|
||||
DMX_SOURCE_FRONT3,
|
||||
DMX_SOURCE_DVR0 = 16,
|
||||
DMX_SOURCE_DVR1,
|
||||
DMX_SOURCE_DVR2,
|
||||
DMX_SOURCE_DVR3
|
||||
} dmx_source_t;
|
||||
|
||||
struct dmx_stc {
|
||||
unsigned int num; /* input : which STC? 0..N */
|
||||
unsigned int base; /* output: divisor for stc to get 90 kHz clock */
|
||||
__u64 stc; /* output: stc in 'base'*90 kHz units */
|
||||
};
|
||||
|
||||
#define DMX_START _IO('o', 41)
|
||||
#define DMX_STOP _IO('o', 42)
|
||||
#define DMX_SET_FILTER _IOW('o', 43, struct dmx_sct_filter_params)
|
||||
#define DMX_SET_PES_FILTER _IOW('o', 44, struct dmx_pes_filter_params)
|
||||
#define DMX_SET_BUFFER_SIZE _IO('o', 45)
|
||||
#define DMX_GET_PES_PIDS _IOR('o', 47, __u16[5])
|
||||
#define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t)
|
||||
#define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t)
|
||||
#define DMX_GET_STC _IOWR('o', 50, struct dmx_stc)
|
||||
#define DMX_ADD_PID _IOW('o', 51, __u16)
|
||||
#define DMX_REMOVE_PID _IOW('o', 52, __u16)
|
||||
|
||||
#endif /* _UAPI_DVBDMX_H_ */
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,620 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
file: frontend.h
|
||||
================
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/*
|
||||
* frontend.h
|
||||
*
|
||||
* Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
|
||||
* Ralph Metzler <ralph@convergence.de>
|
||||
* Holger Waechtler <holger@convergence.de>
|
||||
* Andre Draszik <ad@convergence.de>
|
||||
* for convergence integrated media GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _DVBFRONTEND_H_
|
||||
#define _DVBFRONTEND_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum fe_type {
|
||||
FE_QPSK,
|
||||
FE_QAM,
|
||||
FE_OFDM,
|
||||
FE_ATSC
|
||||
};
|
||||
|
||||
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_8VSB = 0x200000,
|
||||
FE_CAN_16VSB = 0x400000,
|
||||
FE_HAS_EXTENDED_CAPS = 0x800000, /* We need more bitspace for newer APIs, indicate this. */
|
||||
FE_CAN_MULTISTREAM = 0x4000000, /* frontend supports multistream filtering */
|
||||
FE_CAN_TURBO_FEC = 0x8000000, /* frontend supports "turbo fec modulation" */
|
||||
FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */
|
||||
FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */
|
||||
FE_CAN_RECOVER = 0x40000000, /* frontend can recover from a cable unplug automatically */
|
||||
FE_CAN_MUTE_TS = 0x80000000 /* frontend can stop spurious TS data output */
|
||||
};
|
||||
|
||||
struct dvb_frontend_info {
|
||||
char name[128];
|
||||
enum fe_type type; /* DEPRECATED. Use DTV_ENUM_DELSYS instead */
|
||||
__u32 frequency_min;
|
||||
__u32 frequency_max;
|
||||
__u32 frequency_stepsize;
|
||||
__u32 frequency_tolerance;
|
||||
__u32 symbol_rate_min;
|
||||
__u32 symbol_rate_max;
|
||||
__u32 symbol_rate_tolerance; /* ppm */
|
||||
__u32 notifier_delay; /* DEPRECATED */
|
||||
enum fe_caps caps;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Check out the DiSEqC bus spec available on http://www.eutelsat.org/ for
|
||||
* the meaning of this struct...
|
||||
*/
|
||||
struct dvb_diseqc_master_cmd {
|
||||
__u8 msg [6]; /* { framing, address, command, data [3] } */
|
||||
__u8 msg_len; /* valid values are 3...6 */
|
||||
};
|
||||
|
||||
struct dvb_diseqc_slave_reply {
|
||||
__u8 msg [4]; /* { framing, data [3] } */
|
||||
__u8 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 */
|
||||
|
||||
enum fe_sec_voltage {
|
||||
SEC_VOLTAGE_13,
|
||||
SEC_VOLTAGE_18,
|
||||
SEC_VOLTAGE_OFF
|
||||
};
|
||||
|
||||
enum fe_sec_tone_mode {
|
||||
SEC_TONE_ON,
|
||||
SEC_TONE_OFF
|
||||
};
|
||||
|
||||
enum fe_sec_mini_cmd {
|
||||
SEC_MINI_A,
|
||||
SEC_MINI_B
|
||||
};
|
||||
|
||||
/**
|
||||
* enum fe_status - enumerates the possible frontend status
|
||||
* @FE_HAS_SIGNAL: found something above the noise level
|
||||
* @FE_HAS_CARRIER: found a DVB signal
|
||||
* @FE_HAS_VITERBI: FEC is stable
|
||||
* @FE_HAS_SYNC: found sync bytes
|
||||
* @FE_HAS_LOCK: everything's working
|
||||
* @FE_TIMEDOUT: no lock within the last ~2 seconds
|
||||
* @FE_REINIT: frontend was reinitialized, application is recommended
|
||||
* to reset DiSEqC, tone and parameters
|
||||
*/
|
||||
enum fe_status {
|
||||
FE_HAS_SIGNAL = 0x01,
|
||||
FE_HAS_CARRIER = 0x02,
|
||||
FE_HAS_VITERBI = 0x04,
|
||||
FE_HAS_SYNC = 0x08,
|
||||
FE_HAS_LOCK = 0x10,
|
||||
FE_TIMEDOUT = 0x20,
|
||||
FE_REINIT = 0x40,
|
||||
};
|
||||
|
||||
enum fe_spectral_inversion {
|
||||
INVERSION_OFF,
|
||||
INVERSION_ON,
|
||||
INVERSION_AUTO
|
||||
};
|
||||
|
||||
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,
|
||||
FEC_3_5,
|
||||
FEC_9_10,
|
||||
FEC_2_5,
|
||||
};
|
||||
|
||||
enum fe_modulation {
|
||||
QPSK,
|
||||
QAM_16,
|
||||
QAM_32,
|
||||
QAM_64,
|
||||
QAM_128,
|
||||
QAM_256,
|
||||
QAM_AUTO,
|
||||
VSB_8,
|
||||
VSB_16,
|
||||
PSK_8,
|
||||
APSK_16,
|
||||
APSK_32,
|
||||
DQPSK,
|
||||
QAM_4_NR,
|
||||
};
|
||||
|
||||
enum fe_transmit_mode {
|
||||
TRANSMISSION_MODE_2K,
|
||||
TRANSMISSION_MODE_8K,
|
||||
TRANSMISSION_MODE_AUTO,
|
||||
TRANSMISSION_MODE_4K,
|
||||
TRANSMISSION_MODE_1K,
|
||||
TRANSMISSION_MODE_16K,
|
||||
TRANSMISSION_MODE_32K,
|
||||
TRANSMISSION_MODE_C1,
|
||||
TRANSMISSION_MODE_C3780,
|
||||
};
|
||||
|
||||
enum fe_guard_interval {
|
||||
GUARD_INTERVAL_1_32,
|
||||
GUARD_INTERVAL_1_16,
|
||||
GUARD_INTERVAL_1_8,
|
||||
GUARD_INTERVAL_1_4,
|
||||
GUARD_INTERVAL_AUTO,
|
||||
GUARD_INTERVAL_1_128,
|
||||
GUARD_INTERVAL_19_128,
|
||||
GUARD_INTERVAL_19_256,
|
||||
GUARD_INTERVAL_PN420,
|
||||
GUARD_INTERVAL_PN595,
|
||||
GUARD_INTERVAL_PN945,
|
||||
};
|
||||
|
||||
enum fe_hierarchy {
|
||||
HIERARCHY_NONE,
|
||||
HIERARCHY_1,
|
||||
HIERARCHY_2,
|
||||
HIERARCHY_4,
|
||||
HIERARCHY_AUTO
|
||||
};
|
||||
|
||||
enum fe_interleaving {
|
||||
INTERLEAVING_NONE,
|
||||
INTERLEAVING_AUTO,
|
||||
INTERLEAVING_240,
|
||||
INTERLEAVING_720,
|
||||
};
|
||||
|
||||
/* S2API Commands */
|
||||
#define DTV_UNDEFINED 0
|
||||
#define DTV_TUNE 1
|
||||
#define DTV_CLEAR 2
|
||||
#define DTV_FREQUENCY 3
|
||||
#define DTV_MODULATION 4
|
||||
#define DTV_BANDWIDTH_HZ 5
|
||||
#define DTV_INVERSION 6
|
||||
#define DTV_DISEQC_MASTER 7
|
||||
#define DTV_SYMBOL_RATE 8
|
||||
#define DTV_INNER_FEC 9
|
||||
#define DTV_VOLTAGE 10
|
||||
#define DTV_TONE 11
|
||||
#define DTV_PILOT 12
|
||||
#define DTV_ROLLOFF 13
|
||||
#define DTV_DISEQC_SLAVE_REPLY 14
|
||||
|
||||
/* Basic enumeration set for querying unlimited capabilities */
|
||||
#define DTV_FE_CAPABILITY_COUNT 15
|
||||
#define DTV_FE_CAPABILITY 16
|
||||
#define DTV_DELIVERY_SYSTEM 17
|
||||
|
||||
/* ISDB-T and ISDB-Tsb */
|
||||
#define DTV_ISDBT_PARTIAL_RECEPTION 18
|
||||
#define DTV_ISDBT_SOUND_BROADCASTING 19
|
||||
|
||||
#define DTV_ISDBT_SB_SUBCHANNEL_ID 20
|
||||
#define DTV_ISDBT_SB_SEGMENT_IDX 21
|
||||
#define DTV_ISDBT_SB_SEGMENT_COUNT 22
|
||||
|
||||
#define DTV_ISDBT_LAYERA_FEC 23
|
||||
#define DTV_ISDBT_LAYERA_MODULATION 24
|
||||
#define DTV_ISDBT_LAYERA_SEGMENT_COUNT 25
|
||||
#define DTV_ISDBT_LAYERA_TIME_INTERLEAVING 26
|
||||
|
||||
#define DTV_ISDBT_LAYERB_FEC 27
|
||||
#define DTV_ISDBT_LAYERB_MODULATION 28
|
||||
#define DTV_ISDBT_LAYERB_SEGMENT_COUNT 29
|
||||
#define DTV_ISDBT_LAYERB_TIME_INTERLEAVING 30
|
||||
|
||||
#define DTV_ISDBT_LAYERC_FEC 31
|
||||
#define DTV_ISDBT_LAYERC_MODULATION 32
|
||||
#define DTV_ISDBT_LAYERC_SEGMENT_COUNT 33
|
||||
#define DTV_ISDBT_LAYERC_TIME_INTERLEAVING 34
|
||||
|
||||
#define DTV_API_VERSION 35
|
||||
|
||||
#define DTV_CODE_RATE_HP 36
|
||||
#define DTV_CODE_RATE_LP 37
|
||||
#define DTV_GUARD_INTERVAL 38
|
||||
#define DTV_TRANSMISSION_MODE 39
|
||||
#define DTV_HIERARCHY 40
|
||||
|
||||
#define DTV_ISDBT_LAYER_ENABLED 41
|
||||
|
||||
#define DTV_STREAM_ID 42
|
||||
#define DTV_ISDBS_TS_ID_LEGACY DTV_STREAM_ID
|
||||
#define DTV_DVBT2_PLP_ID_LEGACY 43
|
||||
|
||||
#define DTV_ENUM_DELSYS 44
|
||||
|
||||
/* ATSC-MH */
|
||||
#define DTV_ATSCMH_FIC_VER 45
|
||||
#define DTV_ATSCMH_PARADE_ID 46
|
||||
#define DTV_ATSCMH_NOG 47
|
||||
#define DTV_ATSCMH_TNOG 48
|
||||
#define DTV_ATSCMH_SGN 49
|
||||
#define DTV_ATSCMH_PRC 50
|
||||
#define DTV_ATSCMH_RS_FRAME_MODE 51
|
||||
#define DTV_ATSCMH_RS_FRAME_ENSEMBLE 52
|
||||
#define DTV_ATSCMH_RS_CODE_MODE_PRI 53
|
||||
#define DTV_ATSCMH_RS_CODE_MODE_SEC 54
|
||||
#define DTV_ATSCMH_SCCC_BLOCK_MODE 55
|
||||
#define DTV_ATSCMH_SCCC_CODE_MODE_A 56
|
||||
#define DTV_ATSCMH_SCCC_CODE_MODE_B 57
|
||||
#define DTV_ATSCMH_SCCC_CODE_MODE_C 58
|
||||
#define DTV_ATSCMH_SCCC_CODE_MODE_D 59
|
||||
|
||||
#define DTV_INTERLEAVING 60
|
||||
#define DTV_LNA 61
|
||||
|
||||
/* Quality parameters */
|
||||
#define DTV_STAT_SIGNAL_STRENGTH 62
|
||||
#define DTV_STAT_CNR 63
|
||||
#define DTV_STAT_PRE_ERROR_BIT_COUNT 64
|
||||
#define DTV_STAT_PRE_TOTAL_BIT_COUNT 65
|
||||
#define DTV_STAT_POST_ERROR_BIT_COUNT 66
|
||||
#define DTV_STAT_POST_TOTAL_BIT_COUNT 67
|
||||
#define DTV_STAT_ERROR_BLOCK_COUNT 68
|
||||
#define DTV_STAT_TOTAL_BLOCK_COUNT 69
|
||||
|
||||
#define DTV_MAX_COMMAND DTV_STAT_TOTAL_BLOCK_COUNT
|
||||
|
||||
enum fe_pilot {
|
||||
PILOT_ON,
|
||||
PILOT_OFF,
|
||||
PILOT_AUTO,
|
||||
};
|
||||
|
||||
enum fe_rolloff {
|
||||
ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
|
||||
ROLLOFF_20,
|
||||
ROLLOFF_25,
|
||||
ROLLOFF_AUTO,
|
||||
};
|
||||
|
||||
enum fe_delivery_system {
|
||||
SYS_UNDEFINED,
|
||||
SYS_DVBC_ANNEX_A,
|
||||
SYS_DVBC_ANNEX_B,
|
||||
SYS_DVBT,
|
||||
SYS_DSS,
|
||||
SYS_DVBS,
|
||||
SYS_DVBS2,
|
||||
SYS_DVBH,
|
||||
SYS_ISDBT,
|
||||
SYS_ISDBS,
|
||||
SYS_ISDBC,
|
||||
SYS_ATSC,
|
||||
SYS_ATSCMH,
|
||||
SYS_DTMB,
|
||||
SYS_CMMB,
|
||||
SYS_DAB,
|
||||
SYS_DVBT2,
|
||||
SYS_TURBO,
|
||||
SYS_DVBC_ANNEX_C,
|
||||
};
|
||||
|
||||
/* backward compatibility */
|
||||
#define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A
|
||||
#define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB instead */
|
||||
|
||||
/* ATSC-MH */
|
||||
|
||||
enum atscmh_sccc_block_mode {
|
||||
ATSCMH_SCCC_BLK_SEP = 0,
|
||||
ATSCMH_SCCC_BLK_COMB = 1,
|
||||
ATSCMH_SCCC_BLK_RES = 2,
|
||||
};
|
||||
|
||||
enum atscmh_sccc_code_mode {
|
||||
ATSCMH_SCCC_CODE_HLF = 0,
|
||||
ATSCMH_SCCC_CODE_QTR = 1,
|
||||
ATSCMH_SCCC_CODE_RES = 2,
|
||||
};
|
||||
|
||||
enum atscmh_rs_frame_ensemble {
|
||||
ATSCMH_RSFRAME_ENS_PRI = 0,
|
||||
ATSCMH_RSFRAME_ENS_SEC = 1,
|
||||
};
|
||||
|
||||
enum atscmh_rs_frame_mode {
|
||||
ATSCMH_RSFRAME_PRI_ONLY = 0,
|
||||
ATSCMH_RSFRAME_PRI_SEC = 1,
|
||||
ATSCMH_RSFRAME_RES = 2,
|
||||
};
|
||||
|
||||
enum atscmh_rs_code_mode {
|
||||
ATSCMH_RSCODE_211_187 = 0,
|
||||
ATSCMH_RSCODE_223_187 = 1,
|
||||
ATSCMH_RSCODE_235_187 = 2,
|
||||
ATSCMH_RSCODE_RES = 3,
|
||||
};
|
||||
|
||||
#define NO_STREAM_ID_FILTER (~0U)
|
||||
#define LNA_AUTO (~0U)
|
||||
|
||||
struct dtv_cmds_h {
|
||||
char *name; /* A display name for debugging purposes */
|
||||
|
||||
__u32 cmd; /* A unique ID */
|
||||
|
||||
/* Flags */
|
||||
__u32 set:1; /* Either a set or get property */
|
||||
__u32 buffer:1; /* Does this property use the buffer? */
|
||||
__u32 reserved:30; /* Align */
|
||||
};
|
||||
|
||||
/**
|
||||
* Scale types for the quality parameters.
|
||||
* @FE_SCALE_NOT_AVAILABLE: That QoS measure is not available. That
|
||||
* could indicate a temporary or a permanent
|
||||
* condition.
|
||||
* @FE_SCALE_DECIBEL: The scale is measured in 0.001 dB steps, typically
|
||||
* used on signal measures.
|
||||
* @FE_SCALE_RELATIVE: The scale is a relative percentual measure,
|
||||
* ranging from 0 (0%) to 0xffff (100%).
|
||||
* @FE_SCALE_COUNTER: The scale counts the occurrence of an event, like
|
||||
* bit error, block error, lapsed time.
|
||||
*/
|
||||
enum fecap_scale_params {
|
||||
FE_SCALE_NOT_AVAILABLE = 0,
|
||||
FE_SCALE_DECIBEL,
|
||||
FE_SCALE_RELATIVE,
|
||||
FE_SCALE_COUNTER
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dtv_stats - Used for reading a DTV status property
|
||||
*
|
||||
* @value: value of the measure. Should range from 0 to 0xffff;
|
||||
* @scale: Filled with enum fecap_scale_params - the scale
|
||||
* in usage for that parameter
|
||||
*
|
||||
* For most delivery systems, this will return a single value for each
|
||||
* parameter.
|
||||
* It should be noticed, however, that new OFDM delivery systems like
|
||||
* ISDB can use different modulation types for each group of carriers.
|
||||
* On such standards, up to 8 groups of statistics can be provided, one
|
||||
* for each carrier group (called "layer" on ISDB).
|
||||
* In order to be consistent with other delivery systems, the first
|
||||
* value refers to the entire set of carriers ("global").
|
||||
* dtv_status:scale should use the value FE_SCALE_NOT_AVAILABLE when
|
||||
* the value for the entire group of carriers or from one specific layer
|
||||
* is not provided by the hardware.
|
||||
* st.len should be filled with the latest filled status + 1.
|
||||
*
|
||||
* In other words, for ISDB, those values should be filled like:
|
||||
* u.st.stat.svalue[0] = global statistics;
|
||||
* u.st.stat.scale[0] = FE_SCALE_DECIBEL;
|
||||
* u.st.stat.value[1] = layer A statistics;
|
||||
* u.st.stat.scale[1] = FE_SCALE_NOT_AVAILABLE (if not available);
|
||||
* u.st.stat.svalue[2] = layer B statistics;
|
||||
* u.st.stat.scale[2] = FE_SCALE_DECIBEL;
|
||||
* u.st.stat.svalue[3] = layer C statistics;
|
||||
* u.st.stat.scale[3] = FE_SCALE_DECIBEL;
|
||||
* u.st.len = 4;
|
||||
*/
|
||||
struct dtv_stats {
|
||||
__u8 scale; /* enum fecap_scale_params type */
|
||||
union {
|
||||
__u64 uvalue; /* for counters and relative scales */
|
||||
__s64 svalue; /* for 0.001 dB measures */
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
#define MAX_DTV_STATS 4
|
||||
|
||||
struct dtv_fe_stats {
|
||||
__u8 len;
|
||||
struct dtv_stats stat[MAX_DTV_STATS];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct dtv_property {
|
||||
__u32 cmd;
|
||||
__u32 reserved[3];
|
||||
union {
|
||||
__u32 data;
|
||||
struct dtv_fe_stats st;
|
||||
struct {
|
||||
__u8 data[32];
|
||||
__u32 len;
|
||||
__u32 reserved1[3];
|
||||
void *reserved2;
|
||||
} buffer;
|
||||
} u;
|
||||
int result;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
|
||||
#define DTV_IOCTL_MAX_MSGS 64
|
||||
|
||||
struct dtv_properties {
|
||||
__u32 num;
|
||||
struct dtv_property *props;
|
||||
};
|
||||
|
||||
#if defined(__DVB_CORE__) || !defined (__KERNEL__)
|
||||
|
||||
/*
|
||||
* DEPRECATED: The DVBv3 ioctls, structs and enums should not be used on
|
||||
* newer programs, as it doesn't support the second generation of digital
|
||||
* TV standards, nor supports newer delivery systems.
|
||||
*/
|
||||
|
||||
enum fe_bandwidth {
|
||||
BANDWIDTH_8_MHZ,
|
||||
BANDWIDTH_7_MHZ,
|
||||
BANDWIDTH_6_MHZ,
|
||||
BANDWIDTH_AUTO,
|
||||
BANDWIDTH_5_MHZ,
|
||||
BANDWIDTH_10_MHZ,
|
||||
BANDWIDTH_1_712_MHZ,
|
||||
};
|
||||
|
||||
/* This is needed for legacy userspace support */
|
||||
typedef enum fe_sec_voltage fe_sec_voltage_t;
|
||||
typedef enum fe_caps fe_caps_t;
|
||||
typedef enum fe_type fe_type_t;
|
||||
typedef enum fe_sec_tone_mode fe_sec_tone_mode_t;
|
||||
typedef enum fe_sec_mini_cmd fe_sec_mini_cmd_t;
|
||||
typedef enum fe_status fe_status_t;
|
||||
typedef enum fe_spectral_inversion fe_spectral_inversion_t;
|
||||
typedef enum fe_code_rate fe_code_rate_t;
|
||||
typedef enum fe_modulation fe_modulation_t;
|
||||
typedef enum fe_transmit_mode fe_transmit_mode_t;
|
||||
typedef enum fe_bandwidth fe_bandwidth_t;
|
||||
typedef enum fe_guard_interval fe_guard_interval_t;
|
||||
typedef enum fe_hierarchy fe_hierarchy_t;
|
||||
typedef enum fe_pilot fe_pilot_t;
|
||||
typedef enum fe_rolloff fe_rolloff_t;
|
||||
typedef enum fe_delivery_system fe_delivery_system_t;
|
||||
|
||||
struct dvb_qpsk_parameters {
|
||||
__u32 symbol_rate; /* symbol rate in Symbols per second */
|
||||
fe_code_rate_t fec_inner; /* forward error correction (see above) */
|
||||
};
|
||||
|
||||
struct dvb_qam_parameters {
|
||||
__u32 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) */
|
||||
};
|
||||
|
||||
struct dvb_vsb_parameters {
|
||||
fe_modulation_t modulation; /* modulation type (see above) */
|
||||
};
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
struct dvb_frontend_parameters {
|
||||
__u32 frequency; /* (absolute) frequency in Hz for DVB-C/DVB-T/ATSC */
|
||||
/* intermediate frequency in kHz for DVB-S */
|
||||
fe_spectral_inversion_t inversion;
|
||||
union {
|
||||
struct dvb_qpsk_parameters qpsk; /* DVB-S */
|
||||
struct dvb_qam_parameters qam; /* DVB-C */
|
||||
struct dvb_ofdm_parameters ofdm; /* DVB-T */
|
||||
struct dvb_vsb_parameters vsb; /* ATSC */
|
||||
} u;
|
||||
};
|
||||
|
||||
struct dvb_frontend_event {
|
||||
fe_status_t status;
|
||||
struct dvb_frontend_parameters parameters;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define FE_SET_PROPERTY _IOW('o', 82, struct dtv_properties)
|
||||
#define FE_GET_PROPERTY _IOR('o', 83, struct dtv_properties)
|
||||
|
||||
/**
|
||||
* When set, this flag will disable any zigzagging or other "normal" tuning
|
||||
* behaviour. Additionally, there will be no automatic monitoring of the lock
|
||||
* status, and hence no frontend events will be generated. If a frontend device
|
||||
* is closed, this flag will be automatically turned off when the device is
|
||||
* reopened read-write.
|
||||
*/
|
||||
#define FE_TUNE_MODE_ONESHOT 0x01
|
||||
|
||||
#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info)
|
||||
|
||||
#define FE_DISEQC_RESET_OVERLOAD _IO('o', 62)
|
||||
#define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd)
|
||||
#define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply)
|
||||
#define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */
|
||||
|
||||
#define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */
|
||||
#define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */
|
||||
#define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */
|
||||
|
||||
#define FE_READ_STATUS _IOR('o', 69, fe_status_t)
|
||||
#define FE_READ_BER _IOR('o', 70, __u32)
|
||||
#define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16)
|
||||
#define FE_READ_SNR _IOR('o', 72, __u16)
|
||||
#define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32)
|
||||
|
||||
#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters)
|
||||
#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters)
|
||||
#define FE_SET_FRONTEND_TUNE_MODE _IO('o', 81) /* unsigned int */
|
||||
#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event)
|
||||
|
||||
#define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */
|
||||
|
||||
#endif /*_DVBFRONTEND_H_*/
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,100 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
##############################
|
||||
LINUX MEDIA INFRASTRUCTURE API
|
||||
##############################
|
||||
|
||||
**Copyright** 2009-2015 : LinuxTV Developers
|
||||
|
||||
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"
|
||||
|
||||
|
||||
============
|
||||
Introduction
|
||||
============
|
||||
|
||||
This document covers the Linux Kernel to Userspace API's used by video
|
||||
and radio streaming devices, including video cameras, analog and digital
|
||||
TV receiver cards, AM/FM receiver cards, streaming capture and output
|
||||
devices, codec devices and remote controllers.
|
||||
|
||||
A typical media device hardware is shown at
|
||||
:ref:`typical_media_device`.
|
||||
|
||||
|
||||
.. _typical_media_device:
|
||||
|
||||
.. figure:: media_api_files/typical_media_device.*
|
||||
:alt: typical_media_device.svg
|
||||
:align: center
|
||||
|
||||
Typical Media Device
|
||||
|
||||
Typical Media Device Block Diagram
|
||||
|
||||
|
||||
|
||||
The media infrastructure API was designed to control such devices. It is
|
||||
divided into four parts.
|
||||
|
||||
The first part covers radio, video capture and output, cameras, analog
|
||||
TV devices and codecs.
|
||||
|
||||
The second part covers the API used for digital TV and Internet
|
||||
reception via one of the several digital tv standards. While it is
|
||||
called as DVB API, in fact it covers several different video standards
|
||||
including DVB-T/T2, DVB-S/S2, DVB-C, ATSC, ISDB-T, ISDB-S,etc. The
|
||||
complete list of supported standards can be found at
|
||||
:ref:`fe-delivery-system-t`.
|
||||
|
||||
The third part covers the Remote Controller API.
|
||||
|
||||
The fourth part covers the Media Controller API.
|
||||
|
||||
It should also be noted that a media device may also have audio
|
||||
components, like mixers, PCM capture, PCM playback, etc, which are
|
||||
controlled via ALSA API.
|
||||
|
||||
For additional information and for the latest development code, see:
|
||||
`https://linuxtv.org <https://linuxtv.org>`__.
|
||||
|
||||
For discussing improvements, reporting troubles, sending new drivers,
|
||||
etc, please mail to:
|
||||
`Linux Media Mailing List (LMML). <http://vger.kernel.org/vger-lists.html#linux-media>`__.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
media/v4l/v4l2
|
||||
media/dvb/dvbapi
|
||||
media/v4l/remote_controllers
|
||||
media/v4l/media-controller
|
||||
media/v4l/gen-errors
|
||||
media/v4l/fdl-appendix
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
||||
|
||||
|
||||
.. only:: html
|
||||
|
||||
Retrieval
|
||||
=========
|
||||
|
||||
* :ref:`genindex`
|
||||
|
||||
.. todolist::
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_DISHNETWORK_SEND_LEGACY_CMD:
|
||||
|
||||
******************************
|
||||
FE_DISHNETWORK_SEND_LEGACY_CMD
|
||||
******************************
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
WARNING: This is a very obscure legacy command, used only at stv0299
|
||||
driver. Should not be used on newer drivers.
|
||||
|
||||
It provides a non-standard method for selecting Diseqc voltage on the
|
||||
frontend, for Dish Network legacy switches.
|
||||
|
||||
As support for this ioctl were added in 2004, this means that such
|
||||
dishes were already legacy in 2004.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(int fd, int request =
|
||||
:ref:`FE_DISHNETWORK_SEND_LEGACY_CMD <FE_DISHNETWORK_SEND_LEGACY_CMD>`,
|
||||
unsigned long cmd);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- unsigned long cmd
|
||||
|
||||
- sends the specified raw cmd to the dish via DISEqC.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,89 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_GET_EVENT:
|
||||
|
||||
************
|
||||
FE_GET_EVENT
|
||||
************
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(int fd, int request = QPSK_GET_EVENT, struct
|
||||
dvb_frontend_event *ev);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals :ref:`FE_GET_EVENT <FE_GET_EVENT>` for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- struct dvb_frontend_event *ev
|
||||
|
||||
- Points to the location where the event,
|
||||
|
||||
- .. row 4
|
||||
|
||||
-
|
||||
- if any, is to be stored.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- EWOULDBLOCK
|
||||
|
||||
- There is no event pending, and the device is in non-blocking mode.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- EOVERFLOW
|
||||
|
||||
- Overflow in event queue - one or more events were lost.
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,77 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_GET_FRONTEND:
|
||||
|
||||
***************
|
||||
FE_GET_FRONTEND
|
||||
***************
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl call queries the currently effective frontend parameters. For
|
||||
this command, read-only access to the device is sufficient.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(int fd, int request =
|
||||
:ref:`FE_GET_FRONTEND <FE_GET_FRONTEND>`, struct
|
||||
dvb_frontend_parameters *p);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals :ref:`FE_SET_FRONTEND <FE_SET_FRONTEND>` for this
|
||||
command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- struct dvb_frontend_parameters *p
|
||||
|
||||
- Points to parameters for tuning operation.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- EINVAL
|
||||
|
||||
- Maximum supported symbol rate reached.
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,61 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_READ_BER:
|
||||
|
||||
***********
|
||||
FE_READ_BER
|
||||
***********
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(int fd, int request = :ref:`FE_READ_BER <FE_READ_BER>`,
|
||||
uint32_t *ber);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals :ref:`FE_READ_BER <FE_READ_BER>` for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- uint32_t *ber
|
||||
|
||||
- The bit error rate is stored into *ber.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,64 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_READ_SIGNAL_STRENGTH:
|
||||
|
||||
***********************
|
||||
FE_READ_SIGNAL_STRENGTH
|
||||
***********************
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl( int fd, int request =
|
||||
:ref:`FE_READ_SIGNAL_STRENGTH <FE_READ_SIGNAL_STRENGTH>`,
|
||||
uint16_t *strength);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals
|
||||
:ref:`FE_READ_SIGNAL_STRENGTH <FE_READ_SIGNAL_STRENGTH>`
|
||||
for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- uint16_t *strength
|
||||
|
||||
- The signal strength value is stored into *strength.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,61 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_READ_SNR:
|
||||
|
||||
***********
|
||||
FE_READ_SNR
|
||||
***********
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(int fd, int request = :ref:`FE_READ_SNR <FE_READ_SNR>`,
|
||||
uint16_t *snr);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals :ref:`FE_READ_SNR <FE_READ_SNR>` for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- uint16_t *snr
|
||||
|
||||
- The signal-to-noise ratio is stored into *snr.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,66 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_READ_UNCORRECTED_BLOCKS:
|
||||
|
||||
**************************
|
||||
FE_READ_UNCORRECTED_BLOCKS
|
||||
**************************
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl( int fd, int request =
|
||||
:ref:`FE_READ_UNCORRECTED_BLOCKS <FE_READ_UNCORRECTED_BLOCKS>`,
|
||||
uint32_t *ublocks);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals
|
||||
:ref:`FE_READ_UNCORRECTED_BLOCKS <FE_READ_UNCORRECTED_BLOCKS>`
|
||||
for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- uint32_t *ublocks
|
||||
|
||||
- The total number of uncorrected blocks seen by the driver so far.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,84 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_SET_FRONTEND:
|
||||
|
||||
***************
|
||||
FE_SET_FRONTEND
|
||||
***************
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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 :ref:`FE_GET_EVENT <FE_GET_EVENT>` and
|
||||
FrontendEvent.) If a new :ref:`FE_SET_FRONTEND <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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(int fd, int request =
|
||||
:ref:`FE_SET_FRONTEND <FE_SET_FRONTEND>`, struct
|
||||
dvb_frontend_parameters *p);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals :ref:`FE_SET_FRONTEND <FE_SET_FRONTEND>` for this
|
||||
command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- struct dvb_frontend_parameters *p
|
||||
|
||||
- Points to parameters for tuning operation.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- EINVAL
|
||||
|
||||
- Maximum supported symbol rate reached.
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,37 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_audio:
|
||||
|
||||
################
|
||||
DVB Audio Device
|
||||
################
|
||||
The DVB audio device controls the MPEG2 audio decoder of the DVB
|
||||
hardware. It can be accessed through ``/dev/dvb/adapter?/audio?``. Data
|
||||
types and and ioctl definitions can be accessed by including
|
||||
``linux/dvb/audio.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.
|
||||
|
||||
These ioctls were also used by V4L2 to control MPEG decoders implemented
|
||||
in V4L2. The use of these ioctls for that purpose has been made obsolete
|
||||
and proper V4L2 ioctls or controls have been created to replace that
|
||||
functionality.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
audio_data_types
|
||||
audio_function_calls
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,187 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _audio_data_types:
|
||||
|
||||
****************
|
||||
Audio Data Types
|
||||
****************
|
||||
|
||||
This section describes the structures, data types and defines used when
|
||||
talking to the audio device.
|
||||
|
||||
|
||||
.. _audio-stream-source-t:
|
||||
|
||||
audio_stream_source_t
|
||||
=====================
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
AUDIO_SOURCE_DEMUX,
|
||||
AUDIO_SOURCE_MEMORY
|
||||
} audio_stream_source_t;
|
||||
|
||||
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 ``write()`` system call.
|
||||
|
||||
|
||||
.. _audio-play-state-t:
|
||||
|
||||
audio_play_state_t
|
||||
==================
|
||||
|
||||
The following values can be returned by the AUDIO_GET_STATUS call
|
||||
representing the state of audio playback.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
AUDIO_STOPPED,
|
||||
AUDIO_PLAYING,
|
||||
AUDIO_PAUSED
|
||||
} audio_play_state_t;
|
||||
|
||||
|
||||
.. _audio-channel-select-t:
|
||||
|
||||
audio_channel_select_t
|
||||
======================
|
||||
|
||||
The audio channel selected via AUDIO_CHANNEL_SELECT is determined by
|
||||
the following values.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
AUDIO_STEREO,
|
||||
AUDIO_MONO_LEFT,
|
||||
AUDIO_MONO_RIGHT,
|
||||
AUDIO_MONO,
|
||||
AUDIO_STEREO_SWAPPED
|
||||
} audio_channel_select_t;
|
||||
|
||||
|
||||
.. _audio-status:
|
||||
|
||||
struct audio_status
|
||||
===================
|
||||
|
||||
The AUDIO_GET_STATUS call returns the following structure informing
|
||||
about various states of the playback operation.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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_mixer_t mixer_state;
|
||||
} audio_status_t;
|
||||
|
||||
|
||||
.. _audio-mixer:
|
||||
|
||||
struct audio_mixer
|
||||
==================
|
||||
|
||||
The following structure is used by the AUDIO_SET_MIXER call to set the
|
||||
audio volume.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct audio_mixer {
|
||||
unsigned int volume_left;
|
||||
unsigned int volume_right;
|
||||
} audio_mixer_t;
|
||||
|
||||
|
||||
.. _audio_encodings:
|
||||
|
||||
audio encodings
|
||||
===============
|
||||
|
||||
A call to AUDIO_GET_CAPABILITIES returns an unsigned integer with the
|
||||
following bits set according to the hardwares capabilities.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#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
|
||||
|
||||
|
||||
.. _audio-karaoke:
|
||||
|
||||
struct audio_karaoke
|
||||
====================
|
||||
|
||||
The ioctl AUDIO_SET_KARAOKE uses the following format:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef
|
||||
struct audio_karaoke {
|
||||
int vocal1;
|
||||
int vocal2;
|
||||
int melody;
|
||||
} audio_karaoke_t;
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. _audio-attributes-t:
|
||||
|
||||
audio attributes
|
||||
================
|
||||
|
||||
The following attributes can be set by a call to AUDIO_SET_ATTRIBUTES:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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) */
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _audio_h:
|
||||
|
||||
*********************
|
||||
DVB Audio Header File
|
||||
*********************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
../../audio.h
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,29 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_ca:
|
||||
|
||||
#############
|
||||
DVB CA Device
|
||||
#############
|
||||
The DVB CA device controls the conditional access hardware. It can be
|
||||
accessed through ``/dev/dvb/adapter?/ca?``. Data types and and ioctl
|
||||
definitions can be accessed by including ``linux/dvb/ca.h`` in your
|
||||
application.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
ca_data_types
|
||||
ca_function_calls
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,121 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _ca_data_types:
|
||||
|
||||
*************
|
||||
CA Data Types
|
||||
*************
|
||||
|
||||
|
||||
.. _ca-slot-info:
|
||||
|
||||
ca_slot_info_t
|
||||
==============
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct ca_slot_info {
|
||||
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_DESCR 8 /* built-in descrambler */
|
||||
#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;
|
||||
|
||||
|
||||
.. _ca-descr-info:
|
||||
|
||||
ca_descr_info_t
|
||||
===============
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct ca_descr_info {
|
||||
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;
|
||||
|
||||
|
||||
.. _ca-caps:
|
||||
|
||||
ca_caps_t
|
||||
=========
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct ca_caps {
|
||||
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;
|
||||
|
||||
|
||||
.. _ca-msg:
|
||||
|
||||
ca_msg_t
|
||||
========
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* a message to/from a CI-CAM */
|
||||
typedef struct ca_msg {
|
||||
unsigned int index;
|
||||
unsigned int type;
|
||||
unsigned int length;
|
||||
unsigned char msg[256];
|
||||
} ca_msg_t;
|
||||
|
||||
|
||||
.. _ca-descr:
|
||||
|
||||
ca_descr_t
|
||||
==========
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct ca_descr {
|
||||
unsigned int index;
|
||||
unsigned int parity;
|
||||
unsigned char cw[8];
|
||||
} ca_descr_t;
|
||||
|
||||
|
||||
.. _ca-pid:
|
||||
|
||||
ca-pid
|
||||
======
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct ca_pid {
|
||||
unsigned int pid;
|
||||
int index; /* -1 == disable*/
|
||||
} ca_pid_t;
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,541 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _ca_function_calls:
|
||||
|
||||
*****************
|
||||
CA Function Calls
|
||||
*****************
|
||||
|
||||
|
||||
.. _ca_fopen:
|
||||
|
||||
open()
|
||||
======
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
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.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int open(const char *deviceName, int flags);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- const char *deviceName
|
||||
|
||||
- Name of specific video device.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int flags
|
||||
|
||||
- A bit-wise OR of the following flags:
|
||||
|
||||
- .. row 3
|
||||
|
||||
-
|
||||
- O_RDONLY read-only access
|
||||
|
||||
- .. row 4
|
||||
|
||||
-
|
||||
- O_RDWR read/write access
|
||||
|
||||
- .. row 5
|
||||
|
||||
-
|
||||
- O_NONBLOCK open in non-blocking mode
|
||||
|
||||
- .. row 6
|
||||
|
||||
-
|
||||
- (blocking mode is the default)
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ENODEV
|
||||
|
||||
- Device driver not loaded/available.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- EINTERNAL
|
||||
|
||||
- Internal error.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- EBUSY
|
||||
|
||||
- Device or resource busy.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- EINVAL
|
||||
|
||||
- Invalid argument.
|
||||
|
||||
|
||||
|
||||
.. _ca_fclose:
|
||||
|
||||
close()
|
||||
=======
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This system call closes a previously opened audio device.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int close(int fd);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- EBADF
|
||||
|
||||
- fd is not a valid open file descriptor.
|
||||
|
||||
|
||||
|
||||
.. _CA_RESET:
|
||||
|
||||
CA_RESET
|
||||
========
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_RESET);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_RESET for this command.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_GET_CAP:
|
||||
|
||||
CA_GET_CAP
|
||||
==========
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_GET_CAP, ca_caps_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_GET_CAP for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_caps_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_GET_SLOT_INFO:
|
||||
|
||||
CA_GET_SLOT_INFO
|
||||
================
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_GET_SLOT_INFO, ca_slot_info_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_GET_SLOT_INFO for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_slot_info_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_GET_DESCR_INFO:
|
||||
|
||||
CA_GET_DESCR_INFO
|
||||
=================
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_GET_DESCR_INFO, ca_descr_info_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_GET_DESCR_INFO for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_descr_info_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_GET_MSG:
|
||||
|
||||
CA_GET_MSG
|
||||
==========
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_GET_MSG, ca_msg_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_GET_MSG for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_msg_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_SEND_MSG:
|
||||
|
||||
CA_SEND_MSG
|
||||
===========
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_SEND_MSG, ca_msg_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_SEND_MSG for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_msg_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_SET_DESCR:
|
||||
|
||||
CA_SET_DESCR
|
||||
============
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_SET_DESCR, ca_descr_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_SET_DESCR for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_descr_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _CA_SET_PID:
|
||||
|
||||
CA_SET_PID
|
||||
==========
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This ioctl is undocumented. Documentation is welcome.
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
int ioctl(fd, int request = CA_SET_PID, ca_pid_t *);
|
||||
|
||||
PARAMETERS
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- int fd
|
||||
|
||||
- File descriptor returned by a previous call to open().
|
||||
|
||||
- .. row 2
|
||||
|
||||
- int request
|
||||
|
||||
- Equals CA_SET_PID for this command.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ca_pid_t *
|
||||
|
||||
- Undocumented.
|
||||
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _ca_h:
|
||||
|
||||
**********************************
|
||||
DVB Conditional Access Header File
|
||||
**********************************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
../../ca.h
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,29 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_demux:
|
||||
|
||||
################
|
||||
DVB Demux Device
|
||||
################
|
||||
The DVB demux device controls the filters of the DVB hardware/software.
|
||||
It can be accessed through ``/dev/adapter?/demux?``. Data types and and
|
||||
ioctl definitions can be accessed by including ``linux/dvb/dmx.h`` in
|
||||
your application.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dmx_types
|
||||
dmx_fcalls
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dmx_h:
|
||||
|
||||
*********************
|
||||
DVB Demux Header File
|
||||
*********************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
../../dmx.h
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,253 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dmx_types:
|
||||
|
||||
****************
|
||||
Demux Data Types
|
||||
****************
|
||||
|
||||
|
||||
.. _dmx-output-t:
|
||||
|
||||
Output for the demux
|
||||
====================
|
||||
|
||||
|
||||
.. _dmx-output:
|
||||
|
||||
.. flat-table:: enum dmx_output
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`DMX-OUT-DECODER`:
|
||||
|
||||
DMX_OUT_DECODER
|
||||
|
||||
- Streaming directly to decoder.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`DMX-OUT-TAP`:
|
||||
|
||||
DMX_OUT_TAP
|
||||
|
||||
- Output going to a memory buffer (to be retrieved via the read
|
||||
command). Delivers the stream output to the demux device on which
|
||||
the ioctl is called.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- .. _`DMX-OUT-TS-TAP`:
|
||||
|
||||
DMX_OUT_TS_TAP
|
||||
|
||||
- Output multiplexed into a new TS (to be retrieved by reading from
|
||||
the logical DVR device). Routes output to the logical DVR device
|
||||
``/dev/dvb/adapter?/dvr?``, which delivers a TS multiplexed from
|
||||
all filters for which ``DMX_OUT_TS_TAP`` was specified.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- .. _`DMX-OUT-TSDEMUX-TAP`:
|
||||
|
||||
DMX_OUT_TSDEMUX_TAP
|
||||
|
||||
- Like :ref:`DMX_OUT_TS_TAP <DMX-OUT-TS-TAP>` but retrieved
|
||||
from the DMX device.
|
||||
|
||||
|
||||
|
||||
.. _dmx-input-t:
|
||||
|
||||
dmx_input_t
|
||||
===========
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DMX_IN_FRONTEND, /* Input from a front-end device. */
|
||||
DMX_IN_DVR /* Input from the logical DVR device. */
|
||||
} dmx_input_t;
|
||||
|
||||
|
||||
.. _dmx-pes-type-t:
|
||||
|
||||
dmx_pes_type_t
|
||||
==============
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DMX_PES_AUDIO0,
|
||||
DMX_PES_VIDEO0,
|
||||
DMX_PES_TELETEXT0,
|
||||
DMX_PES_SUBTITLE0,
|
||||
DMX_PES_PCR0,
|
||||
|
||||
DMX_PES_AUDIO1,
|
||||
DMX_PES_VIDEO1,
|
||||
DMX_PES_TELETEXT1,
|
||||
DMX_PES_SUBTITLE1,
|
||||
DMX_PES_PCR1,
|
||||
|
||||
DMX_PES_AUDIO2,
|
||||
DMX_PES_VIDEO2,
|
||||
DMX_PES_TELETEXT2,
|
||||
DMX_PES_SUBTITLE2,
|
||||
DMX_PES_PCR2,
|
||||
|
||||
DMX_PES_AUDIO3,
|
||||
DMX_PES_VIDEO3,
|
||||
DMX_PES_TELETEXT3,
|
||||
DMX_PES_SUBTITLE3,
|
||||
DMX_PES_PCR3,
|
||||
|
||||
DMX_PES_OTHER
|
||||
} dmx_pes_type_t;
|
||||
|
||||
|
||||
.. _dmx-filter:
|
||||
|
||||
struct dmx_filter
|
||||
=================
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct dmx_filter
|
||||
{
|
||||
__u8 filter[DMX_FILTER_SIZE];
|
||||
__u8 mask[DMX_FILTER_SIZE];
|
||||
__u8 mode[DMX_FILTER_SIZE];
|
||||
} dmx_filter_t;
|
||||
|
||||
|
||||
.. _dmx-sct-filter-params:
|
||||
|
||||
struct dmx_sct_filter_params
|
||||
============================
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dmx_sct_filter_params
|
||||
{
|
||||
__u16 pid;
|
||||
dmx_filter_t filter;
|
||||
__u32 timeout;
|
||||
__u32 flags;
|
||||
#define DMX_CHECK_CRC 1
|
||||
#define DMX_ONESHOT 2
|
||||
#define DMX_IMMEDIATE_START 4
|
||||
#define DMX_KERNEL_CLIENT 0x8000
|
||||
};
|
||||
|
||||
|
||||
.. _dmx-pes-filter-params:
|
||||
|
||||
struct dmx_pes_filter_params
|
||||
============================
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dmx_pes_filter_params
|
||||
{
|
||||
__u16 pid;
|
||||
dmx_input_t input;
|
||||
dmx_output_t output;
|
||||
dmx_pes_type_t pes_type;
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
|
||||
.. _dmx-event:
|
||||
|
||||
struct dmx_event
|
||||
================
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dmx_event
|
||||
{
|
||||
dmx_event_t event;
|
||||
time_t timeStamp;
|
||||
union
|
||||
{
|
||||
dmx_scrambling_status_t scrambling;
|
||||
} u;
|
||||
};
|
||||
|
||||
|
||||
.. _dmx-stc:
|
||||
|
||||
struct dmx_stc
|
||||
==============
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dmx_stc {
|
||||
unsigned int num; /* input : which STC? 0..N */
|
||||
unsigned int base; /* output: divisor for stc to get 90 kHz clock */
|
||||
__u64 stc; /* output: stc in 'base'*90 kHz units */
|
||||
};
|
||||
|
||||
|
||||
.. _dmx-caps:
|
||||
|
||||
struct dmx_caps
|
||||
===============
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct dmx_caps {
|
||||
__u32 caps;
|
||||
int num_decoders;
|
||||
} dmx_caps_t;
|
||||
|
||||
|
||||
.. _dmx-source-t:
|
||||
|
||||
enum dmx_source_t
|
||||
=================
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
DMX_SOURCE_FRONT0 = 0,
|
||||
DMX_SOURCE_FRONT1,
|
||||
DMX_SOURCE_FRONT2,
|
||||
DMX_SOURCE_FRONT3,
|
||||
DMX_SOURCE_DVR0 = 16,
|
||||
DMX_SOURCE_DVR1,
|
||||
DMX_SOURCE_DVR2,
|
||||
DMX_SOURCE_DVR3
|
||||
} dmx_source_t;
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,28 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dtv-fe-stats:
|
||||
|
||||
*******************
|
||||
struct dtv_fe_stats
|
||||
*******************
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#define MAX_DTV_STATS 4
|
||||
|
||||
struct dtv_fe_stats {
|
||||
__u8 len;
|
||||
struct dtv_stats stat[MAX_DTV_STATS];
|
||||
} __packed;
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,26 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dtv-properties:
|
||||
|
||||
*********************
|
||||
struct dtv_properties
|
||||
*********************
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dtv_properties {
|
||||
__u32 num;
|
||||
struct dtv_property *props;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,42 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dtv-property:
|
||||
|
||||
*******************
|
||||
struct dtv_property
|
||||
*******************
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* Reserved fields should be set to 0 */
|
||||
|
||||
struct dtv_property {
|
||||
__u32 cmd;
|
||||
__u32 reserved[3];
|
||||
union {
|
||||
__u32 data;
|
||||
struct dtv_fe_stats st;
|
||||
struct {
|
||||
__u8 data[32];
|
||||
__u32 len;
|
||||
__u32 reserved1[3];
|
||||
void *reserved2;
|
||||
} buffer;
|
||||
} u;
|
||||
int result;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* num of properties cannot exceed DTV_IOCTL_MAX_MSGS per ioctl */
|
||||
#define DTV_IOCTL_MAX_MSGS 64
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,29 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dtv-stats:
|
||||
|
||||
****************
|
||||
struct dtv_stats
|
||||
****************
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dtv_stats {
|
||||
__u8 scale; /* enum fecap_scale_params type */
|
||||
union {
|
||||
__u64 uvalue; /* for counters and relative scales */
|
||||
__s64 svalue; /* for 1/1000 dB measures */
|
||||
};
|
||||
} __packed;
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,31 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb-fe-read-status:
|
||||
|
||||
***************************************
|
||||
Querying frontend status and statistics
|
||||
***************************************
|
||||
|
||||
Once :ref:`FE_SET_PROPERTY <FE_GET_PROPERTY>` is called, the
|
||||
frontend will run a kernel thread that will periodically check for the
|
||||
tuner lock status and provide statistics about the quality of the
|
||||
signal.
|
||||
|
||||
The information about the frontend tuner locking status can be queried
|
||||
using :ref:`FE_READ_STATUS <FE_READ_STATUS>`.
|
||||
|
||||
Signal statistics are provided via
|
||||
:ref:`FE_GET_PROPERTY <FE_GET_PROPERTY>`. Please note that several
|
||||
statistics require the demodulator to be fully locked (e. g. with
|
||||
FE_HAS_LOCK bit set). See
|
||||
:ref:`Frontend statistics indicators <frontend-stat-properties>` for
|
||||
more details.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,26 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb-frontend-event:
|
||||
|
||||
***************
|
||||
frontend events
|
||||
***************
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dvb_frontend_event {
|
||||
fe_status_t status;
|
||||
struct dvb_frontend_parameters parameters;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,130 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb-frontend-parameters:
|
||||
|
||||
*******************
|
||||
frontend parameters
|
||||
*******************
|
||||
|
||||
The kind of parameters passed to the frontend device for tuning depend
|
||||
on the kind of hardware you are using.
|
||||
|
||||
The struct ``dvb_frontend_parameters`` uses an union with specific
|
||||
per-system parameters. However, as newer delivery systems required more
|
||||
data, the structure size weren't enough to fit, and just extending its
|
||||
size would break the existing applications. So, those parameters were
|
||||
replaced by the usage of
|
||||
:ref:`FE_GET_PROPERTY/FE_SET_PROPERTY <FE_GET_PROPERTY>`
|
||||
ioctl's. The new API is flexible enough to add new parameters to
|
||||
existing delivery systems, and to add newer delivery systems.
|
||||
|
||||
So, newer applications should use
|
||||
:ref:`FE_GET_PROPERTY/FE_SET_PROPERTY <FE_GET_PROPERTY>`
|
||||
instead, in order to be able to support the newer System Delivery like
|
||||
DVB-S2, DVB-T2, DVB-C2, ISDB, etc.
|
||||
|
||||
All kinds of parameters are combined as an union in the
|
||||
FrontendParameters structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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;
|
||||
struct dvb_vsb_parameters vsb;
|
||||
} u;
|
||||
};
|
||||
|
||||
In the case of QPSK frontends the ``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.
|
||||
|
||||
|
||||
.. _dvb-qpsk-parameters:
|
||||
|
||||
QPSK parameters
|
||||
===============
|
||||
|
||||
For satellite QPSK frontends you have to use the ``dvb_qpsk_parameters``
|
||||
structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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) */
|
||||
};
|
||||
|
||||
|
||||
.. _dvb-qam-parameters:
|
||||
|
||||
QAM parameters
|
||||
==============
|
||||
|
||||
for cable QAM frontend you use the ``dvb_qam_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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) */
|
||||
};
|
||||
|
||||
|
||||
.. _dvb-vsb-parameters:
|
||||
|
||||
VSB parameters
|
||||
==============
|
||||
|
||||
ATSC frontends are supported by the ``dvb_vsb_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct dvb_vsb_parameters {
|
||||
fe_modulation_t modulation; /* modulation type (see above) */
|
||||
};
|
||||
|
||||
|
||||
.. _dvb-ofdm-parameters:
|
||||
|
||||
OFDM parameters
|
||||
===============
|
||||
|
||||
DVB-T frontends are supported by the ``dvb_ofdm_parameters`` structure:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,95 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvbapi:
|
||||
|
||||
#############
|
||||
LINUX DVB API
|
||||
#############
|
||||
|
||||
**Version 5.10**
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
intro
|
||||
frontend
|
||||
demux
|
||||
ca
|
||||
net
|
||||
legacy_dvb_apis
|
||||
examples
|
||||
audio_h
|
||||
ca_h
|
||||
dmx_h
|
||||
frontend_h
|
||||
net_h
|
||||
video_h
|
||||
|
||||
|
||||
**********************
|
||||
Revision and Copyright
|
||||
**********************
|
||||
|
||||
|
||||
:author: Metzler Ralph (*J. K.*)
|
||||
:address: rjkm@metzlerbros.de
|
||||
|
||||
:author: Metzler Marcus (*O. C.*)
|
||||
:address: rjkm@metzlerbros.de
|
||||
|
||||
:author: Chehab Mauro (*Carvalho*)
|
||||
:address: m.chehab@samsung.com
|
||||
:contrib: Ported document to Docbook XML.
|
||||
|
||||
**Copyright** 2002, 2003 : Convergence GmbH
|
||||
|
||||
**Copyright** 2009-2015 : Mauro Carvalho Chehab
|
||||
|
||||
:revision: 2.1.0 / 2015-05-29 (*mcc*)
|
||||
|
||||
DocBook improvements and cleanups, in order to document the system calls
|
||||
on a more standard way and provide more description about the current
|
||||
DVB API.
|
||||
|
||||
|
||||
:revision: 2.0.4 / 2011-05-06 (*mcc*)
|
||||
|
||||
Add more information about DVB APIv5, better describing the frontend
|
||||
GET/SET props ioctl's.
|
||||
|
||||
|
||||
:revision: 2.0.3 / 2010-07-03 (*mcc*)
|
||||
|
||||
Add some frontend capabilities flags, present on kernel, but missing at
|
||||
the specs.
|
||||
|
||||
|
||||
:revision: 2.0.2 / 2009-10-25 (*mcc*)
|
||||
|
||||
documents FE_SET_FRONTEND_TUNE_MODE and
|
||||
FE_DISHETWORK_SEND_LEGACY_CMD ioctls.
|
||||
|
||||
|
||||
:revision: 2.0.1 / 2009-09-16 (*mcc*)
|
||||
|
||||
Added ISDB-T test originally written by Patrick Boettcher
|
||||
|
||||
|
||||
:revision: 2.0.0 / 2009-09-06 (*mcc*)
|
||||
|
||||
Conversion from LaTex to DocBook XML. The contents is the same as the
|
||||
original LaTex version.
|
||||
|
||||
|
||||
:revision: 1.0.0 / 2003-07-24 (*rjkm*)
|
||||
|
||||
Initial revision on LaTEX.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,21 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
**************
|
||||
Property types
|
||||
**************
|
||||
|
||||
On :ref:`FE_GET_PROPERTY and FE_SET_PROPERTY <FE_GET_PROPERTY>`,
|
||||
the actual action is determined by the dtv_property cmd/data pairs.
|
||||
With one single ioctl, is possible to get/set up to 64 properties. The
|
||||
actual meaning of each property is described on the next sections.
|
||||
|
||||
The available frontend property types are shown on the next section.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,122 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend-properties:
|
||||
|
||||
DVB Frontend properties
|
||||
=======================
|
||||
|
||||
Tuning into a Digital TV physical channel and starting decoding it
|
||||
requires changing a set of parameters, in order to control the tuner,
|
||||
the demodulator, the Linear Low-noise Amplifier (LNA) and to set the
|
||||
antenna subsystem via Satellite Equipment Control (SEC), on satellite
|
||||
systems. The actual parameters are specific to each particular digital
|
||||
TV standards, and may change as the digital TV specs evolves.
|
||||
|
||||
In the past, the strategy used was to have a union with the parameters
|
||||
needed to tune for DVB-S, DVB-C, DVB-T and ATSC delivery systems grouped
|
||||
there. The problem is that, as the second generation standards appeared,
|
||||
those structs were not big enough to contain the additional parameters.
|
||||
Also, the union didn't have any space left to be expanded without
|
||||
breaking userspace. So, the decision was to deprecate the legacy
|
||||
union/struct based approach, in favor of a properties set approach.
|
||||
|
||||
NOTE: on Linux DVB API version 3, setting a frontend were done via
|
||||
:ref:`struct dvb_frontend_parameters <dvb-frontend-parameters>`.
|
||||
This got replaced on version 5 (also called "S2API", as this API were
|
||||
added originally_enabled to provide support for DVB-S2), because the
|
||||
old API has a very limited support to new standards and new hardware.
|
||||
This section describes the new and recommended way to set the frontend,
|
||||
with suppports all digital TV delivery systems.
|
||||
|
||||
Example: with the properties based approach, in order to set the tuner
|
||||
to a DVB-C channel at 651 kHz, modulated with 256-QAM, FEC 3/4 and
|
||||
symbol rate of 5.217 Mbauds, those properties should be sent to
|
||||
:ref:`FE_SET_PROPERTY <FE_GET_PROPERTY>` ioctl:
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>` =
|
||||
SYS_DVBC_ANNEX_A
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>` = 651000000
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>` = QAM_256
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>` = INVERSION_AUTO
|
||||
|
||||
- :ref:`DTV_SYMBOL_RATE <DTV-SYMBOL-RATE>` = 5217000
|
||||
|
||||
- :ref:`DTV_INNER_FEC <DTV-INNER-FEC>` = FEC_3_4
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
The code that would do the above is:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/dvb/frontend.h>
|
||||
|
||||
static struct dtv_property props[] = {
|
||||
{ .cmd = DTV_DELIVERY_SYSTEM, .u.data = SYS_DVBC_ANNEX_A },
|
||||
{ .cmd = DTV_FREQUENCY, .u.data = 651000000 },
|
||||
{ .cmd = DTV_MODULATION, .u.data = QAM_256 },
|
||||
{ .cmd = DTV_INVERSION, .u.data = INVERSION_AUTO },
|
||||
{ .cmd = DTV_SYMBOL_RATE, .u.data = 5217000 },
|
||||
{ .cmd = DTV_INNER_FEC, .u.data = FEC_3_4 },
|
||||
{ .cmd = DTV_TUNE }
|
||||
};
|
||||
|
||||
static struct dtv_properties dtv_prop = {
|
||||
.num = 6, .props = props
|
||||
};
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int fd = open("/dev/dvb/adapter0/frontend0", O_RDWR);
|
||||
|
||||
if (!fd) {
|
||||
perror ("open");
|
||||
return -1;
|
||||
}
|
||||
if (ioctl(fd, FE_SET_PROPERTY, &dtv_prop) == -1) {
|
||||
perror("ioctl");
|
||||
return -1;
|
||||
}
|
||||
printf("Frontend set\\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
NOTE: While it is possible to directly call the Kernel code like the
|
||||
above example, it is strongly recommended to use
|
||||
`libdvbv5 <https://linuxtv.org/docs/libdvbv5/index.html>`__, as it
|
||||
provides abstraction to work with the supported digital TV standards and
|
||||
provides methods for usual operations like program scanning and to
|
||||
read/write channel descriptor files.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
dtv-stats
|
||||
dtv-fe-stats
|
||||
dtv-property
|
||||
dtv-properties
|
||||
dvbproperty-006
|
||||
fe_property_parameters
|
||||
frontend-stat-properties
|
||||
frontend-property-terrestrial-systems
|
||||
frontend-property-cable-systems
|
||||
frontend-property-satellite-systems
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,391 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_examples:
|
||||
|
||||
********
|
||||
Examples
|
||||
********
|
||||
|
||||
In this section we would like to present some examples for using the DVB
|
||||
API.
|
||||
|
||||
NOTE: This section is out of date, and the code below won't even
|
||||
compile. Please refer to the
|
||||
`libdvbv5 <https://linuxtv.org/docs/libdvbv5/index.html>`__ for
|
||||
updated/recommended examples.
|
||||
|
||||
|
||||
.. _tuning:
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#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);
|
||||
}
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. _the_dvr_device:
|
||||
|
||||
The DVR device
|
||||
==============
|
||||
|
||||
The following program code shows how to use the DVR device for
|
||||
recording.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,88 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _fe-bandwidth-t:
|
||||
|
||||
******************
|
||||
Frontend bandwidth
|
||||
******************
|
||||
|
||||
|
||||
.. _fe-bandwidth:
|
||||
|
||||
.. flat-table:: enum fe_bandwidth
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`BANDWIDTH-AUTO`:
|
||||
|
||||
``BANDWIDTH_AUTO``
|
||||
|
||||
- Autodetect bandwidth (if supported)
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`BANDWIDTH-1-712-MHZ`:
|
||||
|
||||
``BANDWIDTH_1_712_MHZ``
|
||||
|
||||
- 1.712 MHz
|
||||
|
||||
- .. row 4
|
||||
|
||||
- .. _`BANDWIDTH-5-MHZ`:
|
||||
|
||||
``BANDWIDTH_5_MHZ``
|
||||
|
||||
- 5 MHz
|
||||
|
||||
- .. row 5
|
||||
|
||||
- .. _`BANDWIDTH-6-MHZ`:
|
||||
|
||||
``BANDWIDTH_6_MHZ``
|
||||
|
||||
- 6 MHz
|
||||
|
||||
- .. row 6
|
||||
|
||||
- .. _`BANDWIDTH-7-MHZ`:
|
||||
|
||||
``BANDWIDTH_7_MHZ``
|
||||
|
||||
- 7 MHz
|
||||
|
||||
- .. row 7
|
||||
|
||||
- .. _`BANDWIDTH-8-MHZ`:
|
||||
|
||||
``BANDWIDTH_8_MHZ``
|
||||
|
||||
- 8 MHz
|
||||
|
||||
- .. row 8
|
||||
|
||||
- .. _`BANDWIDTH-10-MHZ`:
|
||||
|
||||
``BANDWIDTH_10_MHZ``
|
||||
|
||||
- 10 MHz
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,88 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_DISEQC_RECV_SLAVE_REPLY:
|
||||
|
||||
********************************
|
||||
ioctl FE_DISEQC_RECV_SLAVE_REPLY
|
||||
********************************
|
||||
|
||||
*man FE_DISEQC_RECV_SLAVE_REPLY(2)*
|
||||
|
||||
Receives reply from a DiSEqC 2.0 command
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, struct dvb_diseqc_slave_reply *argp )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_DISEQC_RECV_SLAVE_REPLY
|
||||
|
||||
``argp``
|
||||
pointer to struct
|
||||
:ref:`dvb_diseqc_slave_reply <dvb-diseqc-slave-reply>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Receives reply from a DiSEqC 2.0 command.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _dvb-diseqc-slave-reply:
|
||||
|
||||
.. flat-table:: struct dvb_diseqc_slave_reply
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- uint8_t
|
||||
|
||||
- msg[4]
|
||||
|
||||
- DiSEqC message (framing, data[3])
|
||||
|
||||
- .. row 2
|
||||
|
||||
- uint8_t
|
||||
|
||||
- msg_len
|
||||
|
||||
- Length of the DiSEqC message. Valid values are 0 to 4, where 0
|
||||
means no msg
|
||||
|
||||
- .. row 3
|
||||
|
||||
- int
|
||||
|
||||
- timeout
|
||||
|
||||
- Return from ioctl after timeout ms with errorcode when no message
|
||||
was received
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,51 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_DISEQC_RESET_OVERLOAD:
|
||||
|
||||
******************************
|
||||
ioctl FE_DISEQC_RESET_OVERLOAD
|
||||
******************************
|
||||
|
||||
*man FE_DISEQC_RESET_OVERLOAD(2)*
|
||||
|
||||
Restores the power to the antenna subsystem, if it was powered off due
|
||||
to power overload.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, NULL )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_DISEQC_RESET_OVERLOAD
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
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.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,93 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_DISEQC_SEND_BURST:
|
||||
|
||||
**************************
|
||||
ioctl FE_DISEQC_SEND_BURST
|
||||
**************************
|
||||
|
||||
*man FE_DISEQC_SEND_BURST(2)*
|
||||
|
||||
Sends a 22KHz tone burst for 2x1 mini DiSEqC satellite selection.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, enum fe_sec_mini_cmd *tone )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_DISEQC_SEND_BURST
|
||||
|
||||
``tone``
|
||||
pointer to enum :ref:`fe_sec_mini_cmd <fe-sec-mini-cmd>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl is used to set the generation of a 22kHz tone burst for mini
|
||||
DiSEqC satellite selection for 2x1 switches. This call requires
|
||||
read/write permissions.
|
||||
|
||||
It provides support for what's specified at
|
||||
`Digital Satellite Equipment Control (DiSEqC) - Simple "ToneBurst" Detection Circuit specification. <http://www.eutelsat.com/files/contributed/satellites/pdf/Diseqc/associated%20docs/simple_tone_burst_detec.pdf>`__
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _fe-sec-mini-cmd-t:
|
||||
|
||||
enum fe_sec_mini_cmd
|
||||
====================
|
||||
|
||||
|
||||
.. _fe-sec-mini-cmd:
|
||||
|
||||
.. flat-table:: enum fe_sec_mini_cmd
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`SEC-MINI-A`:
|
||||
|
||||
``SEC_MINI_A``
|
||||
|
||||
- Sends a mini-DiSEqC 22kHz '0' Tone Burst to select satellite-A
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`SEC-MINI-B`:
|
||||
|
||||
``SEC_MINI_B``
|
||||
|
||||
- Sends a mini-DiSEqC 22kHz '1' Data Burst to select satellite-B
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,78 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_DISEQC_SEND_MASTER_CMD:
|
||||
|
||||
*******************************
|
||||
ioctl FE_DISEQC_SEND_MASTER_CMD
|
||||
*******************************
|
||||
|
||||
*man FE_DISEQC_SEND_MASTER_CMD(2)*
|
||||
|
||||
Sends a DiSEqC command
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, struct dvb_diseqc_master_cmd *argp )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_DISEQC_SEND_MASTER_CMD
|
||||
|
||||
``argp``
|
||||
pointer to struct
|
||||
:ref:`dvb_diseqc_master_cmd <dvb-diseqc-master-cmd>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Sends a DiSEqC command to the antenna subsystem.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _dvb-diseqc-master-cmd:
|
||||
|
||||
.. flat-table:: struct dvb_diseqc_master_cmd
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- uint8_t
|
||||
|
||||
- msg[6]
|
||||
|
||||
- DiSEqC message (framing, address, command, data[3])
|
||||
|
||||
- .. row 2
|
||||
|
||||
- uint8_t
|
||||
|
||||
- msg_len
|
||||
|
||||
- Length of the DiSEqC message. Valid values are 3 to 6
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,58 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_ENABLE_HIGH_LNB_VOLTAGE:
|
||||
|
||||
********************************
|
||||
ioctl FE_ENABLE_HIGH_LNB_VOLTAGE
|
||||
********************************
|
||||
|
||||
*man FE_ENABLE_HIGH_LNB_VOLTAGE(2)*
|
||||
|
||||
Select output DC level between normal LNBf voltages or higher LNBf
|
||||
voltages.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, unsigned int high )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_ENABLE_HIGH_LNB_VOLTAGE
|
||||
|
||||
``high``
|
||||
Valid flags:
|
||||
|
||||
- 0 - normal 13V and 18V.
|
||||
|
||||
- >0 - enables slightly higher voltages instead of 13/18V, in order
|
||||
to compensate for long antenna cables.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Select output DC level between normal LNBf voltages or higher LNBf
|
||||
voltages between 0 (normal) or a value grater than 0 for higher
|
||||
voltages.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,434 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_GET_INFO:
|
||||
|
||||
*****************
|
||||
ioctl FE_GET_INFO
|
||||
*****************
|
||||
|
||||
*man FE_GET_INFO(2)*
|
||||
|
||||
Query DVB frontend capabilities and returns information about the
|
||||
front-end. This call only requires read-only access to the device
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, struct dvb_frontend_info *argp )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_GET_INFO
|
||||
|
||||
``argp``
|
||||
pointer to struct struct
|
||||
:ref:`dvb_frontend_info <dvb-frontend-info>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All DVB frontend devices support the ``FE_GET_INFO`` ioctl. It is used
|
||||
to identify kernel devices compatible with this specification and to
|
||||
obtain information about driver and hardware capabilities. The ioctl
|
||||
takes a pointer to dvb_frontend_info which is filled by the driver.
|
||||
When the driver is not compatible with this specification the ioctl
|
||||
returns an error.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _dvb-frontend-info:
|
||||
|
||||
.. flat-table:: struct dvb_frontend_info
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- char
|
||||
|
||||
- name[128]
|
||||
|
||||
- Name of the frontend
|
||||
|
||||
- .. row 2
|
||||
|
||||
- fe_type_t
|
||||
|
||||
- type
|
||||
|
||||
- **DEPRECATED**. DVBv3 type. Should not be used on modern programs,
|
||||
as a frontend may have more than one type. So, the DVBv5 API
|
||||
should be used instead to enumerate and select the frontend type.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- uint32_t
|
||||
|
||||
- frequency_min
|
||||
|
||||
- Minimal frequency supported by the frontend
|
||||
|
||||
- .. row 4
|
||||
|
||||
- uint32_t
|
||||
|
||||
- frequency_max
|
||||
|
||||
- Maximal frequency supported by the frontend
|
||||
|
||||
- .. row 5
|
||||
|
||||
- uint32_t
|
||||
|
||||
- frequency_stepsize
|
||||
|
||||
- Frequency step - all frequencies are multiple of this value
|
||||
|
||||
- .. row 6
|
||||
|
||||
- uint32_t
|
||||
|
||||
- frequency_tolerance
|
||||
|
||||
- Tolerance of the frequency
|
||||
|
||||
- .. row 7
|
||||
|
||||
- uint32_t
|
||||
|
||||
- symbol_rate_min
|
||||
|
||||
- Minimal symbol rate (for Cable/Satellite systems), in bauds
|
||||
|
||||
- .. row 8
|
||||
|
||||
- uint32_t
|
||||
|
||||
- symbol_rate_max
|
||||
|
||||
- Maximal symbol rate (for Cable/Satellite systems), in bauds
|
||||
|
||||
- .. row 9
|
||||
|
||||
- uint32_t
|
||||
|
||||
- symbol_rate_tolerance
|
||||
|
||||
- Maximal symbol rate tolerance, in ppm
|
||||
|
||||
- .. row 10
|
||||
|
||||
- uint32_t
|
||||
|
||||
- notifier_delay
|
||||
|
||||
- **DEPRECATED**. Not used by any driver.
|
||||
|
||||
- .. row 11
|
||||
|
||||
- enum :ref:`fe_caps <fe-caps>`
|
||||
|
||||
- caps
|
||||
|
||||
- Capabilities supported by the frontend
|
||||
|
||||
|
||||
NOTE: The frequencies are specified in Hz for Terrestrial and Cable
|
||||
systems. They're specified in kHz for Satellite systems
|
||||
|
||||
|
||||
.. _fe-caps-t:
|
||||
|
||||
frontend capabilities
|
||||
=====================
|
||||
|
||||
Capabilities describe what a frontend can do. Some capabilities are
|
||||
supported only on some specific frontend types.
|
||||
|
||||
|
||||
.. _fe-caps:
|
||||
|
||||
.. flat-table:: enum fe_caps
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`FE-IS-STUPID`:
|
||||
|
||||
``FE_IS_STUPID``
|
||||
|
||||
- There's something wrong at the frontend, and it can't report its
|
||||
capabilities
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`FE-CAN-INVERSION-AUTO`:
|
||||
|
||||
``FE_CAN_INVERSION_AUTO``
|
||||
|
||||
- The frontend is capable of auto-detecting inversion
|
||||
|
||||
- .. row 4
|
||||
|
||||
- .. _`FE-CAN-FEC-1-2`:
|
||||
|
||||
``FE_CAN_FEC_1_2``
|
||||
|
||||
- The frontend supports FEC 1/2
|
||||
|
||||
- .. row 5
|
||||
|
||||
- .. _`FE-CAN-FEC-2-3`:
|
||||
|
||||
``FE_CAN_FEC_2_3``
|
||||
|
||||
- The frontend supports FEC 2/3
|
||||
|
||||
- .. row 6
|
||||
|
||||
- .. _`FE-CAN-FEC-3-4`:
|
||||
|
||||
``FE_CAN_FEC_3_4``
|
||||
|
||||
- The frontend supports FEC 3/4
|
||||
|
||||
- .. row 7
|
||||
|
||||
- .. _`FE-CAN-FEC-4-5`:
|
||||
|
||||
``FE_CAN_FEC_4_5``
|
||||
|
||||
- The frontend supports FEC 4/5
|
||||
|
||||
- .. row 8
|
||||
|
||||
- .. _`FE-CAN-FEC-5-6`:
|
||||
|
||||
``FE_CAN_FEC_5_6``
|
||||
|
||||
- The frontend supports FEC 5/6
|
||||
|
||||
- .. row 9
|
||||
|
||||
- .. _`FE-CAN-FEC-6-7`:
|
||||
|
||||
``FE_CAN_FEC_6_7``
|
||||
|
||||
- The frontend supports FEC 6/7
|
||||
|
||||
- .. row 10
|
||||
|
||||
- .. _`FE-CAN-FEC-7-8`:
|
||||
|
||||
``FE_CAN_FEC_7_8``
|
||||
|
||||
- The frontend supports FEC 7/8
|
||||
|
||||
- .. row 11
|
||||
|
||||
- .. _`FE-CAN-FEC-8-9`:
|
||||
|
||||
``FE_CAN_FEC_8_9``
|
||||
|
||||
- The frontend supports FEC 8/9
|
||||
|
||||
- .. row 12
|
||||
|
||||
- .. _`FE-CAN-FEC-AUTO`:
|
||||
|
||||
``FE_CAN_FEC_AUTO``
|
||||
|
||||
- The frontend can autodetect FEC.
|
||||
|
||||
- .. row 13
|
||||
|
||||
- .. _`FE-CAN-QPSK`:
|
||||
|
||||
``FE_CAN_QPSK``
|
||||
|
||||
- The frontend supports QPSK modulation
|
||||
|
||||
- .. row 14
|
||||
|
||||
- .. _`FE-CAN-QAM-16`:
|
||||
|
||||
``FE_CAN_QAM_16``
|
||||
|
||||
- The frontend supports 16-QAM modulation
|
||||
|
||||
- .. row 15
|
||||
|
||||
- .. _`FE-CAN-QAM-32`:
|
||||
|
||||
``FE_CAN_QAM_32``
|
||||
|
||||
- The frontend supports 32-QAM modulation
|
||||
|
||||
- .. row 16
|
||||
|
||||
- .. _`FE-CAN-QAM-64`:
|
||||
|
||||
``FE_CAN_QAM_64``
|
||||
|
||||
- The frontend supports 64-QAM modulation
|
||||
|
||||
- .. row 17
|
||||
|
||||
- .. _`FE-CAN-QAM-128`:
|
||||
|
||||
``FE_CAN_QAM_128``
|
||||
|
||||
- The frontend supports 128-QAM modulation
|
||||
|
||||
- .. row 18
|
||||
|
||||
- .. _`FE-CAN-QAM-256`:
|
||||
|
||||
``FE_CAN_QAM_256``
|
||||
|
||||
- The frontend supports 256-QAM modulation
|
||||
|
||||
- .. row 19
|
||||
|
||||
- .. _`FE-CAN-QAM-AUTO`:
|
||||
|
||||
``FE_CAN_QAM_AUTO``
|
||||
|
||||
- The frontend can autodetect modulation
|
||||
|
||||
- .. row 20
|
||||
|
||||
- .. _`FE-CAN-TRANSMISSION-MODE-AUTO`:
|
||||
|
||||
``FE_CAN_TRANSMISSION_MODE_AUTO``
|
||||
|
||||
- The frontend can autodetect the transmission mode
|
||||
|
||||
- .. row 21
|
||||
|
||||
- .. _`FE-CAN-BANDWIDTH-AUTO`:
|
||||
|
||||
``FE_CAN_BANDWIDTH_AUTO``
|
||||
|
||||
- The frontend can autodetect the bandwidth
|
||||
|
||||
- .. row 22
|
||||
|
||||
- .. _`FE-CAN-GUARD-INTERVAL-AUTO`:
|
||||
|
||||
``FE_CAN_GUARD_INTERVAL_AUTO``
|
||||
|
||||
- The frontend can autodetect the guard interval
|
||||
|
||||
- .. row 23
|
||||
|
||||
- .. _`FE-CAN-HIERARCHY-AUTO`:
|
||||
|
||||
``FE_CAN_HIERARCHY_AUTO``
|
||||
|
||||
- The frontend can autodetect hierarch
|
||||
|
||||
- .. row 24
|
||||
|
||||
- .. _`FE-CAN-8VSB`:
|
||||
|
||||
``FE_CAN_8VSB``
|
||||
|
||||
- The frontend supports 8-VSB modulation
|
||||
|
||||
- .. row 25
|
||||
|
||||
- .. _`FE-CAN-16VSB`:
|
||||
|
||||
``FE_CAN_16VSB``
|
||||
|
||||
- The frontend supports 16-VSB modulation
|
||||
|
||||
- .. row 26
|
||||
|
||||
- .. _`FE-HAS-EXTENDED-CAPS`:
|
||||
|
||||
``FE_HAS_EXTENDED_CAPS``
|
||||
|
||||
- Currently, unused
|
||||
|
||||
- .. row 27
|
||||
|
||||
- .. _`FE-CAN-MULTISTREAM`:
|
||||
|
||||
``FE_CAN_MULTISTREAM``
|
||||
|
||||
- The frontend supports multistream filtering
|
||||
|
||||
- .. row 28
|
||||
|
||||
- .. _`FE-CAN-TURBO-FEC`:
|
||||
|
||||
``FE_CAN_TURBO_FEC``
|
||||
|
||||
- The frontend supports turbo FEC modulation
|
||||
|
||||
- .. row 29
|
||||
|
||||
- .. _`FE-CAN-2G-MODULATION`:
|
||||
|
||||
``FE_CAN_2G_MODULATION``
|
||||
|
||||
- The frontend supports "2nd generation modulation" (DVB-S2/T2)>
|
||||
|
||||
- .. row 30
|
||||
|
||||
- .. _`FE-NEEDS-BENDING`:
|
||||
|
||||
``FE_NEEDS_BENDING``
|
||||
|
||||
- Not supported anymore, don't use it
|
||||
|
||||
- .. row 31
|
||||
|
||||
- .. _`FE-CAN-RECOVER`:
|
||||
|
||||
``FE_CAN_RECOVER``
|
||||
|
||||
- The frontend can recover from a cable unplug automatically
|
||||
|
||||
- .. row 32
|
||||
|
||||
- .. _`FE-CAN-MUTE-TS`:
|
||||
|
||||
``FE_CAN_MUTE_TS``
|
||||
|
||||
- The frontend can stop spurious TS data output
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,75 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_GET_PROPERTY:
|
||||
|
||||
**************************************
|
||||
ioctl FE_SET_PROPERTY, FE_GET_PROPERTY
|
||||
**************************************
|
||||
|
||||
*man FE_SET_PROPERTY(2)*
|
||||
|
||||
FE_GET_PROPERTY
|
||||
FE_SET_PROPERTY sets one or more frontend properties.
|
||||
FE_GET_PROPERTY returns one or more frontend properties.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, struct dtv_properties *argp )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_PROPERTY, FE_GET_PROPERTY
|
||||
|
||||
``argp``
|
||||
pointer to struct :ref:`dtv_properties <dtv-properties>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All DVB frontend devices support the ``FE_SET_PROPERTY`` and
|
||||
``FE_GET_PROPERTY`` ioctls. The supported properties and statistics
|
||||
depends on the delivery system and on the device:
|
||||
|
||||
- ``FE_SET_PROPERTY:``
|
||||
|
||||
- This ioctl is used to set one or more frontend properties.
|
||||
|
||||
- This is the basic command to request the frontend to tune into
|
||||
some frequency and to start decoding the digital TV signal.
|
||||
|
||||
- This call requires read/write access to the device.
|
||||
|
||||
- At return, the values are updated to reflect the actual parameters
|
||||
used.
|
||||
|
||||
- ``FE_GET_PROPERTY:``
|
||||
|
||||
- This ioctl is used to get properties and statistics from the
|
||||
frontend.
|
||||
|
||||
- No properties are changed, and statistics aren't reset.
|
||||
|
||||
- This call only requires read-only access to the device.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,143 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_READ_STATUS:
|
||||
|
||||
********************
|
||||
ioctl FE_READ_STATUS
|
||||
********************
|
||||
|
||||
*man FE_READ_STATUS(2)*
|
||||
|
||||
Returns status information about the front-end. This call only requires
|
||||
read-only access to the device
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, unsigned int *status )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_READ_STATUS
|
||||
|
||||
``status``
|
||||
pointer to a bitmask integer filled with the values defined by enum
|
||||
:ref:`fe_status <fe-status>`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
All DVB frontend devices support the ``FE_READ_STATUS`` ioctl. It is
|
||||
used to check about the locking status of the frontend after being
|
||||
tuned. The ioctl takes a pointer to an integer where the status will be
|
||||
written.
|
||||
|
||||
NOTE: the size of status is actually sizeof(enum fe_status), with
|
||||
varies according with the architecture. This needs to be fixed in the
|
||||
future.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _fe-status-t:
|
||||
|
||||
int fe_status
|
||||
=============
|
||||
|
||||
The fe_status parameter is used to indicate the current state and/or
|
||||
state changes of the frontend hardware. It is produced using the enum
|
||||
:ref:`fe_status <fe-status>` values on a bitmask
|
||||
|
||||
|
||||
.. _fe-status:
|
||||
|
||||
.. flat-table:: enum fe_status
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`FE-HAS-SIGNAL`:
|
||||
|
||||
``FE_HAS_SIGNAL``
|
||||
|
||||
- The frontend has found something above the noise level
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`FE-HAS-CARRIER`:
|
||||
|
||||
``FE_HAS_CARRIER``
|
||||
|
||||
- The frontend has found a DVB signal
|
||||
|
||||
- .. row 4
|
||||
|
||||
- .. _`FE-HAS-VITERBI`:
|
||||
|
||||
``FE_HAS_VITERBI``
|
||||
|
||||
- The frontend FEC inner coding (Viterbi, LDPC or other inner code)
|
||||
is stable
|
||||
|
||||
- .. row 5
|
||||
|
||||
- .. _`FE-HAS-SYNC`:
|
||||
|
||||
``FE_HAS_SYNC``
|
||||
|
||||
- Synchronization bytes was found
|
||||
|
||||
- .. row 6
|
||||
|
||||
- .. _`FE-HAS-LOCK`:
|
||||
|
||||
``FE_HAS_LOCK``
|
||||
|
||||
- The DVB were locked and everything is working
|
||||
|
||||
- .. row 7
|
||||
|
||||
- .. _`FE-TIMEDOUT`:
|
||||
|
||||
``FE_TIMEDOUT``
|
||||
|
||||
- no lock within the last about 2 seconds
|
||||
|
||||
- .. row 8
|
||||
|
||||
- .. _`FE-REINIT`:
|
||||
|
||||
``FE_REINIT``
|
||||
|
||||
- The frontend was reinitialized, application is recommended to
|
||||
reset DiSEqC, tone and parameters
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,60 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_SET_FRONTEND_TUNE_MODE:
|
||||
|
||||
*******************************
|
||||
ioctl FE_SET_FRONTEND_TUNE_MODE
|
||||
*******************************
|
||||
|
||||
*man FE_SET_FRONTEND_TUNE_MODE(2)*
|
||||
|
||||
Allow setting tuner mode flags to the frontend.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, unsigned int flags )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_FRONTEND_TUNE_MODE
|
||||
|
||||
``flags``
|
||||
Valid flags:
|
||||
|
||||
- 0 - normal tune mode
|
||||
|
||||
- FE_TUNE_MODE_ONESHOT - When set, this flag will disable any
|
||||
zigzagging or other "normal" tuning behaviour. Additionally,
|
||||
there will be no automatic monitoring of the lock status, and
|
||||
hence no frontend events will be generated. If a frontend device
|
||||
is closed, this flag will be automatically turned off when the
|
||||
device is reopened read-write.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Allow setting tuner mode flags to the frontend, between 0 (normal) or
|
||||
FE_TUNE_MODE_ONESHOT mode
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,100 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_SET_TONE:
|
||||
|
||||
*****************
|
||||
ioctl FE_SET_TONE
|
||||
*****************
|
||||
|
||||
*man FE_SET_TONE(2)*
|
||||
|
||||
Sets/resets the generation of the continuous 22kHz tone.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, enum fe_sec_tone_mode *tone )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_TONE
|
||||
|
||||
``tone``
|
||||
pointer to enum :ref:`fe_sec_tone_mode <fe-sec-tone-mode>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl is used to set the generation of the continuous 22kHz tone.
|
||||
This call requires read/write permissions.
|
||||
|
||||
Usually, satellite antenna subsystems require that the digital TV device
|
||||
to send a 22kHz tone in order to select between high/low band on some
|
||||
dual-band LNBf. It is also used to send signals to DiSEqC equipment, but
|
||||
this is done using the DiSEqC ioctls.
|
||||
|
||||
NOTE: if more than one device is connected to the same antenna, setting
|
||||
a tone may interfere on other devices, as they may lose the capability
|
||||
of selecting the band. So, it is recommended that applications would
|
||||
change to SEC_TONE_OFF when the device is not used.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _fe-sec-tone-mode-t:
|
||||
|
||||
enum fe_sec_tone_mode
|
||||
=====================
|
||||
|
||||
|
||||
.. _fe-sec-tone-mode:
|
||||
|
||||
.. flat-table:: enum fe_sec_tone_mode
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`SEC-TONE-ON`:
|
||||
|
||||
``SEC_TONE_ON``
|
||||
|
||||
- Sends a 22kHz tone burst to the antenna
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`SEC-TONE-OFF`:
|
||||
|
||||
``SEC_TONE_OFF``
|
||||
|
||||
- Don't send a 22kHz tone to the antenna (except if the
|
||||
FE_DISEQC_* ioctls are called)
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,68 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _FE_SET_VOLTAGE:
|
||||
|
||||
********************
|
||||
ioctl FE_SET_VOLTAGE
|
||||
********************
|
||||
|
||||
*man FE_SET_VOLTAGE(2)*
|
||||
|
||||
Allow setting the DC level sent to the antenna subsystem.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, enum fe_sec_voltage *voltage )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_VOLTAGE
|
||||
|
||||
``voltage``
|
||||
pointer to enum :ref:`fe_sec_voltage <fe-sec-voltage>`
|
||||
|
||||
Valid values are described at enum
|
||||
:ref:`fe_sec_voltage <fe-sec-voltage>`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This ioctl allows to set the DC voltage level sent through the antenna
|
||||
cable to 13V, 18V or off.
|
||||
|
||||
Usually, a satellite antenna subsystems require that the digital TV
|
||||
device to send a DC voltage to feed power to the LNBf. Depending on the
|
||||
LNBf type, the polarization or the intermediate frequency (IF) of the
|
||||
LNBf can controlled by the voltage level. Other devices (for example,
|
||||
the ones that implement DISEqC and multipoint LNBf's don't need to
|
||||
control the voltage level, provided that either 13V or 18V is sent to
|
||||
power up the LNBf.
|
||||
|
||||
NOTE: if more than one device is connected to the same antenna, setting
|
||||
a voltage level may interfere on other devices, as they may lose the
|
||||
capability of setting polarization or IF. So, on those cases, setting
|
||||
the voltage to SEC_VOLTAGE_OFF while the device is not is used is
|
||||
recommended.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,100 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _fe-type-t:
|
||||
|
||||
*************
|
||||
Frontend type
|
||||
*************
|
||||
|
||||
For historical reasons, frontend types are named by the type of
|
||||
modulation used in transmission. The fontend types are given by
|
||||
fe_type_t type, defined as:
|
||||
|
||||
|
||||
.. _fe-type:
|
||||
|
||||
.. flat-table:: Frontend types
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- fe_type
|
||||
|
||||
- Description
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>` equivalent
|
||||
type
|
||||
|
||||
- .. row 2
|
||||
|
||||
- .. _`FE-QPSK`:
|
||||
|
||||
``FE_QPSK``
|
||||
|
||||
- For DVB-S standard
|
||||
|
||||
- ``SYS_DVBS``
|
||||
|
||||
- .. row 3
|
||||
|
||||
- .. _`FE-QAM`:
|
||||
|
||||
``FE_QAM``
|
||||
|
||||
- For DVB-C annex A standard
|
||||
|
||||
- ``SYS_DVBC_ANNEX_A``
|
||||
|
||||
- .. row 4
|
||||
|
||||
- .. _`FE-OFDM`:
|
||||
|
||||
``FE_OFDM``
|
||||
|
||||
- For DVB-T standard
|
||||
|
||||
- ``SYS_DVBT``
|
||||
|
||||
- .. row 5
|
||||
|
||||
- .. _`FE-ATSC`:
|
||||
|
||||
``FE_ATSC``
|
||||
|
||||
- For ATSC standard (terrestrial) or for DVB-C Annex B (cable) used
|
||||
in US.
|
||||
|
||||
- ``SYS_ATSC`` (terrestrial) or ``SYS_DVBC_ANNEX_B`` (cable)
|
||||
|
||||
|
||||
Newer formats like DVB-S2, ISDB-T, ISDB-S and DVB-T2 are not described
|
||||
at the above, as they're supported via the new
|
||||
:ref:`FE_GET_PROPERTY/FE_GET_SET_PROPERTY <FE_GET_PROPERTY>`
|
||||
ioctl's, using the :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
parameter.
|
||||
|
||||
In the old days, struct :ref:`dvb_frontend_info <dvb-frontend-info>`
|
||||
used to contain ``fe_type_t`` field to indicate the delivery systems,
|
||||
filled with either FE_QPSK, FE_QAM, FE_OFDM or FE_ATSC. While this
|
||||
is still filled to keep backward compatibility, the usage of this field
|
||||
is deprecated, as it can report just one delivery system, but some
|
||||
devices support multiple delivery systems. Please use
|
||||
:ref:`DTV_ENUM_DELSYS <DTV-ENUM-DELSYS>` instead.
|
||||
|
||||
On devices that support multiple delivery systems, struct
|
||||
:ref:`dvb_frontend_info <dvb-frontend-info>`::``fe_type_t`` is
|
||||
filled with the currently standard, as selected by the last call to
|
||||
:ref:`FE_SET_PROPERTY <FE_GET_PROPERTY>` using the
|
||||
:ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>` property.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,84 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend-property-cable-systems:
|
||||
|
||||
*****************************************
|
||||
Properties used on cable delivery systems
|
||||
*****************************************
|
||||
|
||||
|
||||
.. _dvbc-params:
|
||||
|
||||
DVB-C delivery system
|
||||
=====================
|
||||
|
||||
The DVB-C Annex-A is the widely used cable standard. Transmission uses
|
||||
QAM modulation.
|
||||
|
||||
The DVB-C Annex-C is optimized for 6MHz, and is used in Japan. It
|
||||
supports a subset of the Annex A modulation types, and a roll-off of
|
||||
0.13, instead of 0.15
|
||||
|
||||
The following parameters are valid for DVB-C Annex A/C:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_SYMBOL_RATE <DTV-SYMBOL-RATE>`
|
||||
|
||||
- :ref:`DTV_INNER_FEC <DTV-INNER-FEC>`
|
||||
|
||||
- :ref:`DTV_LNA <DTV-LNA>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _dvbc-annex-b-params:
|
||||
|
||||
DVB-C Annex B delivery system
|
||||
=============================
|
||||
|
||||
The DVB-C Annex-B is only used on a few Countries like the United
|
||||
States.
|
||||
|
||||
The following parameters are valid for DVB-C Annex B:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_LNA <DTV-LNA>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,112 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend-property-satellite-systems:
|
||||
|
||||
*********************************************
|
||||
Properties used on satellite delivery systems
|
||||
*********************************************
|
||||
|
||||
|
||||
.. _dvbs-params:
|
||||
|
||||
DVB-S delivery system
|
||||
=====================
|
||||
|
||||
The following parameters are valid for DVB-S:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_SYMBOL_RATE <DTV-SYMBOL-RATE>`
|
||||
|
||||
- :ref:`DTV_INNER_FEC <DTV-INNER-FEC>`
|
||||
|
||||
- :ref:`DTV_VOLTAGE <DTV-VOLTAGE>`
|
||||
|
||||
- :ref:`DTV_TONE <DTV-TONE>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
Future implementations might add those two missing parameters:
|
||||
|
||||
- :ref:`DTV_DISEQC_MASTER <DTV-DISEQC-MASTER>`
|
||||
|
||||
- :ref:`DTV_DISEQC_SLAVE_REPLY <DTV-DISEQC-SLAVE-REPLY>`
|
||||
|
||||
|
||||
.. _dvbs2-params:
|
||||
|
||||
DVB-S2 delivery system
|
||||
======================
|
||||
|
||||
In addition to all parameters valid for DVB-S, DVB-S2 supports the
|
||||
following parameters:
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_PILOT <DTV-PILOT>`
|
||||
|
||||
- :ref:`DTV_ROLLOFF <DTV-ROLLOFF>`
|
||||
|
||||
- :ref:`DTV_STREAM_ID <DTV-STREAM-ID>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _turbo-params:
|
||||
|
||||
Turbo code delivery system
|
||||
==========================
|
||||
|
||||
In addition to all parameters valid for DVB-S, turbo code supports the
|
||||
following parameters:
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
|
||||
.. _isdbs-params:
|
||||
|
||||
ISDB-S delivery system
|
||||
======================
|
||||
|
||||
The following parameters are valid for ISDB-S:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_SYMBOL_RATE <DTV-SYMBOL-RATE>`
|
||||
|
||||
- :ref:`DTV_INNER_FEC <DTV-INNER-FEC>`
|
||||
|
||||
- :ref:`DTV_VOLTAGE <DTV-VOLTAGE>`
|
||||
|
||||
- :ref:`DTV_STREAM_ID <DTV-STREAM-ID>`
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,303 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend-property-terrestrial-systems:
|
||||
|
||||
***********************************************
|
||||
Properties used on terrestrial delivery systems
|
||||
***********************************************
|
||||
|
||||
|
||||
.. _dvbt-params:
|
||||
|
||||
DVB-T delivery system
|
||||
=====================
|
||||
|
||||
The following parameters are valid for DVB-T:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_BANDWIDTH_HZ <DTV-BANDWIDTH-HZ>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_CODE_RATE_HP <DTV-CODE-RATE-HP>`
|
||||
|
||||
- :ref:`DTV_CODE_RATE_LP <DTV-CODE-RATE-LP>`
|
||||
|
||||
- :ref:`DTV_GUARD_INTERVAL <DTV-GUARD-INTERVAL>`
|
||||
|
||||
- :ref:`DTV_TRANSMISSION_MODE <DTV-TRANSMISSION-MODE>`
|
||||
|
||||
- :ref:`DTV_HIERARCHY <DTV-HIERARCHY>`
|
||||
|
||||
- :ref:`DTV_LNA <DTV-LNA>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _dvbt2-params:
|
||||
|
||||
DVB-T2 delivery system
|
||||
======================
|
||||
|
||||
DVB-T2 support is currently in the early stages of development, so
|
||||
expect that this section maygrow and become more detailed with time.
|
||||
|
||||
The following parameters are valid for DVB-T2:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_BANDWIDTH_HZ <DTV-BANDWIDTH-HZ>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_CODE_RATE_HP <DTV-CODE-RATE-HP>`
|
||||
|
||||
- :ref:`DTV_CODE_RATE_LP <DTV-CODE-RATE-LP>`
|
||||
|
||||
- :ref:`DTV_GUARD_INTERVAL <DTV-GUARD-INTERVAL>`
|
||||
|
||||
- :ref:`DTV_TRANSMISSION_MODE <DTV-TRANSMISSION-MODE>`
|
||||
|
||||
- :ref:`DTV_HIERARCHY <DTV-HIERARCHY>`
|
||||
|
||||
- :ref:`DTV_STREAM_ID <DTV-STREAM-ID>`
|
||||
|
||||
- :ref:`DTV_LNA <DTV-LNA>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _isdbt:
|
||||
|
||||
ISDB-T delivery system
|
||||
======================
|
||||
|
||||
This ISDB-T/ISDB-Tsb API extension should reflect all information needed
|
||||
to tune any ISDB-T/ISDB-Tsb hardware. Of course it is possible that some
|
||||
very sophisticated devices won't need certain parameters to tune.
|
||||
|
||||
The information given here should help application writers to know how
|
||||
to handle ISDB-T and ISDB-Tsb hardware using the Linux DVB-API.
|
||||
|
||||
The details given here about ISDB-T and ISDB-Tsb are just enough to
|
||||
basically show the dependencies between the needed parameter values, but
|
||||
surely some information is left out. For more detailed information see
|
||||
the following documents:
|
||||
|
||||
ARIB STD-B31 - "Transmission System for Digital Terrestrial Television
|
||||
Broadcasting" and
|
||||
|
||||
ARIB TR-B14 - "Operational Guidelines for Digital Terrestrial Television
|
||||
Broadcasting".
|
||||
|
||||
In order to understand the ISDB specific parameters, one has to have
|
||||
some knowledge the channel structure in ISDB-T and ISDB-Tsb. I.e. it has
|
||||
to be known to the reader that an ISDB-T channel consists of 13
|
||||
segments, that it can have up to 3 layer sharing those segments, and
|
||||
things like that.
|
||||
|
||||
The following parameters are valid for ISDB-T:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_BANDWIDTH_HZ <DTV-BANDWIDTH-HZ>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_GUARD_INTERVAL <DTV-GUARD-INTERVAL>`
|
||||
|
||||
- :ref:`DTV_TRANSMISSION_MODE <DTV-TRANSMISSION-MODE>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYER_ENABLED <DTV-ISDBT-LAYER-ENABLED>`
|
||||
|
||||
- :ref:`DTV_ISDBT_PARTIAL_RECEPTION <DTV-ISDBT-PARTIAL-RECEPTION>`
|
||||
|
||||
- :ref:`DTV_ISDBT_SOUND_BROADCASTING <DTV-ISDBT-SOUND-BROADCASTING>`
|
||||
|
||||
- :ref:`DTV_ISDBT_SB_SUBCHANNEL_ID <DTV-ISDBT-SB-SUBCHANNEL-ID>`
|
||||
|
||||
- :ref:`DTV_ISDBT_SB_SEGMENT_IDX <DTV-ISDBT-SB-SEGMENT-IDX>`
|
||||
|
||||
- :ref:`DTV_ISDBT_SB_SEGMENT_COUNT <DTV-ISDBT-SB-SEGMENT-COUNT>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERA_FEC <DTV-ISDBT-LAYER-FEC>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERA_MODULATION <DTV-ISDBT-LAYER-MODULATION>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERA_SEGMENT_COUNT <DTV-ISDBT-LAYER-SEGMENT-COUNT>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERA_TIME_INTERLEAVING <DTV-ISDBT-LAYER-TIME-INTERLEAVING>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERB_FEC <DTV-ISDBT-LAYER-FEC>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERB_MODULATION <DTV-ISDBT-LAYER-MODULATION>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERB_SEGMENT_COUNT <DTV-ISDBT-LAYER-SEGMENT-COUNT>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERB_TIME_INTERLEAVING <DTV-ISDBT-LAYER-TIME-INTERLEAVING>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERC_FEC <DTV-ISDBT-LAYER-FEC>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERC_MODULATION <DTV-ISDBT-LAYER-MODULATION>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERC_SEGMENT_COUNT <DTV-ISDBT-LAYER-SEGMENT-COUNT>`
|
||||
|
||||
- :ref:`DTV_ISDBT_LAYERC_TIME_INTERLEAVING <DTV-ISDBT-LAYER-TIME-INTERLEAVING>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _atsc-params:
|
||||
|
||||
ATSC delivery system
|
||||
====================
|
||||
|
||||
The following parameters are valid for ATSC:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_BANDWIDTH_HZ <DTV-BANDWIDTH-HZ>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _atscmh-params:
|
||||
|
||||
ATSC-MH delivery system
|
||||
=======================
|
||||
|
||||
The following parameters are valid for ATSC-MH:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_BANDWIDTH_HZ <DTV-BANDWIDTH-HZ>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_FIC_VER <DTV-ATSCMH-FIC-VER>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_PARADE_ID <DTV-ATSCMH-PARADE-ID>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_NOG <DTV-ATSCMH-NOG>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_TNOG <DTV-ATSCMH-TNOG>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_SGN <DTV-ATSCMH-SGN>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_PRC <DTV-ATSCMH-PRC>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_RS_FRAME_MODE <DTV-ATSCMH-RS-FRAME-MODE>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_RS_FRAME_ENSEMBLE <DTV-ATSCMH-RS-FRAME-ENSEMBLE>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_RS_CODE_MODE_PRI <DTV-ATSCMH-RS-CODE-MODE-PRI>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_RS_CODE_MODE_SEC <DTV-ATSCMH-RS-CODE-MODE-SEC>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_SCCC_BLOCK_MODE <DTV-ATSCMH-SCCC-BLOCK-MODE>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_SCCC_CODE_MODE_A <DTV-ATSCMH-SCCC-CODE-MODE-A>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_SCCC_CODE_MODE_B <DTV-ATSCMH-SCCC-CODE-MODE-B>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_SCCC_CODE_MODE_C <DTV-ATSCMH-SCCC-CODE-MODE-C>`
|
||||
|
||||
- :ref:`DTV_ATSCMH_SCCC_CODE_MODE_D <DTV-ATSCMH-SCCC-CODE-MODE-D>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. _dtmb-params:
|
||||
|
||||
DTMB delivery system
|
||||
====================
|
||||
|
||||
The following parameters are valid for DTMB:
|
||||
|
||||
- :ref:`DTV_API_VERSION <DTV-API-VERSION>`
|
||||
|
||||
- :ref:`DTV_DELIVERY_SYSTEM <DTV-DELIVERY-SYSTEM>`
|
||||
|
||||
- :ref:`DTV_TUNE <DTV-TUNE>`
|
||||
|
||||
- :ref:`DTV_CLEAR <DTV-CLEAR>`
|
||||
|
||||
- :ref:`DTV_FREQUENCY <DTV-FREQUENCY>`
|
||||
|
||||
- :ref:`DTV_MODULATION <DTV-MODULATION>`
|
||||
|
||||
- :ref:`DTV_BANDWIDTH_HZ <DTV-BANDWIDTH-HZ>`
|
||||
|
||||
- :ref:`DTV_INVERSION <DTV-INVERSION>`
|
||||
|
||||
- :ref:`DTV_INNER_FEC <DTV-INNER-FEC>`
|
||||
|
||||
- :ref:`DTV_GUARD_INTERVAL <DTV-GUARD-INTERVAL>`
|
||||
|
||||
- :ref:`DTV_TRANSMISSION_MODE <DTV-TRANSMISSION-MODE>`
|
||||
|
||||
- :ref:`DTV_INTERLEAVING <DTV-INTERLEAVING>`
|
||||
|
||||
- :ref:`DTV_LNA <DTV-LNA>`
|
||||
|
||||
In addition, the :ref:`DTV QoS statistics <frontend-stat-properties>`
|
||||
are also valid.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,254 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend-stat-properties:
|
||||
|
||||
******************************
|
||||
Frontend statistics indicators
|
||||
******************************
|
||||
|
||||
The values are returned via ``dtv_property.stat``. If the property is
|
||||
supported, ``dtv_property.stat.len`` is bigger than zero.
|
||||
|
||||
For most delivery systems, ``dtv_property.stat.len`` will be 1 if the
|
||||
stats is supported, and the properties will return a single value for
|
||||
each parameter.
|
||||
|
||||
It should be noted, however, that new OFDM delivery systems like ISDB
|
||||
can use different modulation types for each group of carriers. On such
|
||||
standards, up to 3 groups of statistics can be provided, and
|
||||
``dtv_property.stat.len`` is updated to reflect the "global" metrics,
|
||||
plus one metric per each carrier group (called "layer" on ISDB).
|
||||
|
||||
So, in order to be consistent with other delivery systems, the first
|
||||
value at :ref:`dtv_property.stat.dtv_stats <dtv-stats>` array refers
|
||||
to the global metric. The other elements of the array represent each
|
||||
layer, starting from layer A(index 1), layer B (index 2) and so on.
|
||||
|
||||
The number of filled elements are stored at ``dtv_property.stat.len``.
|
||||
|
||||
Each element of the ``dtv_property.stat.dtv_stats`` array consists on
|
||||
two elements:
|
||||
|
||||
- ``svalue`` or ``uvalue``, where ``svalue`` is for signed values of
|
||||
the measure (dB measures) and ``uvalue`` is for unsigned values
|
||||
(counters, relative scale)
|
||||
|
||||
- ``scale`` - Scale for the value. It can be:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - The parameter is supported by the
|
||||
frontend, but it was not possible to collect it (could be a
|
||||
transitory or permanent condition)
|
||||
|
||||
- ``FE_SCALE_DECIBEL`` - parameter is a signed value, measured in
|
||||
1/1000 dB
|
||||
|
||||
- ``FE_SCALE_RELATIVE`` - parameter is a unsigned value, where 0
|
||||
means 0% and 65535 means 100%.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - parameter is a unsigned value that counts
|
||||
the occurrence of an event, like bit error, block error, or lapsed
|
||||
time.
|
||||
|
||||
|
||||
.. _DTV-STAT-SIGNAL-STRENGTH:
|
||||
|
||||
DTV_STAT_SIGNAL_STRENGTH
|
||||
========================
|
||||
|
||||
Indicates the signal strength level at the analog part of the tuner or
|
||||
of the demod.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_DECIBEL`` - signal strength is in 0.001 dBm units, power
|
||||
measured in miliwatts. This value is generally negative.
|
||||
|
||||
- ``FE_SCALE_RELATIVE`` - The frontend provides a 0% to 100%
|
||||
measurement for power (actually, 0 to 65535).
|
||||
|
||||
|
||||
.. _DTV-STAT-CNR:
|
||||
|
||||
DTV_STAT_CNR
|
||||
============
|
||||
|
||||
Indicates the Signal to Noise ratio for the main carrier.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_DECIBEL`` - Signal/Noise ratio is in 0.001 dB units.
|
||||
|
||||
- ``FE_SCALE_RELATIVE`` - The frontend provides a 0% to 100%
|
||||
measurement for Signal/Noise (actually, 0 to 65535).
|
||||
|
||||
|
||||
.. _DTV-STAT-PRE-ERROR-BIT-COUNT:
|
||||
|
||||
DTV_STAT_PRE_ERROR_BIT_COUNT
|
||||
============================
|
||||
|
||||
Measures the number of bit errors before the forward error correction
|
||||
(FEC) on the inner coding block (before Viterbi, LDPC or other inner
|
||||
code).
|
||||
|
||||
This measure is taken during the same interval as
|
||||
``DTV_STAT_PRE_TOTAL_BIT_COUNT``.
|
||||
|
||||
In order to get the BER (Bit Error Rate) measurement, it should be
|
||||
divided by
|
||||
:ref:`DTV_STAT_PRE_TOTAL_BIT_COUNT <DTV-STAT-PRE-TOTAL-BIT-COUNT>`.
|
||||
|
||||
This measurement is monotonically increased, as the frontend gets more
|
||||
bit count measurements. The frontend may reset it when a
|
||||
channel/transponder is tuned.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - Number of error bits counted before the inner
|
||||
coding.
|
||||
|
||||
|
||||
.. _DTV-STAT-PRE-TOTAL-BIT-COUNT:
|
||||
|
||||
DTV_STAT_PRE_TOTAL_BIT_COUNT
|
||||
============================
|
||||
|
||||
Measures the amount of bits received before the inner code block, during
|
||||
the same period as
|
||||
:ref:`DTV_STAT_PRE_ERROR_BIT_COUNT <DTV-STAT-PRE-ERROR-BIT-COUNT>`
|
||||
measurement was taken.
|
||||
|
||||
It should be noted that this measurement can be smaller than the total
|
||||
amount of bits on the transport stream, as the frontend may need to
|
||||
manually restart the measurement, losing some data between each
|
||||
measurement interval.
|
||||
|
||||
This measurement is monotonically increased, as the frontend gets more
|
||||
bit count measurements. The frontend may reset it when a
|
||||
channel/transponder is tuned.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - Number of bits counted while measuring
|
||||
:ref:`DTV_STAT_PRE_ERROR_BIT_COUNT <DTV-STAT-PRE-ERROR-BIT-COUNT>`.
|
||||
|
||||
|
||||
.. _DTV-STAT-POST-ERROR-BIT-COUNT:
|
||||
|
||||
DTV_STAT_POST_ERROR_BIT_COUNT
|
||||
=============================
|
||||
|
||||
Measures the number of bit errors after the forward error correction
|
||||
(FEC) done by inner code block (after Viterbi, LDPC or other inner
|
||||
code).
|
||||
|
||||
This measure is taken during the same interval as
|
||||
``DTV_STAT_POST_TOTAL_BIT_COUNT``.
|
||||
|
||||
In order to get the BER (Bit Error Rate) measurement, it should be
|
||||
divided by
|
||||
:ref:`DTV_STAT_POST_TOTAL_BIT_COUNT <DTV-STAT-POST-TOTAL-BIT-COUNT>`.
|
||||
|
||||
This measurement is monotonically increased, as the frontend gets more
|
||||
bit count measurements. The frontend may reset it when a
|
||||
channel/transponder is tuned.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - Number of error bits counted after the inner
|
||||
coding.
|
||||
|
||||
|
||||
.. _DTV-STAT-POST-TOTAL-BIT-COUNT:
|
||||
|
||||
DTV_STAT_POST_TOTAL_BIT_COUNT
|
||||
=============================
|
||||
|
||||
Measures the amount of bits received after the inner coding, during the
|
||||
same period as
|
||||
:ref:`DTV_STAT_POST_ERROR_BIT_COUNT <DTV-STAT-POST-ERROR-BIT-COUNT>`
|
||||
measurement was taken.
|
||||
|
||||
It should be noted that this measurement can be smaller than the total
|
||||
amount of bits on the transport stream, as the frontend may need to
|
||||
manually restart the measurement, losing some data between each
|
||||
measurement interval.
|
||||
|
||||
This measurement is monotonically increased, as the frontend gets more
|
||||
bit count measurements. The frontend may reset it when a
|
||||
channel/transponder is tuned.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - Number of bits counted while measuring
|
||||
:ref:`DTV_STAT_POST_ERROR_BIT_COUNT <DTV-STAT-POST-ERROR-BIT-COUNT>`.
|
||||
|
||||
|
||||
.. _DTV-STAT-ERROR-BLOCK-COUNT:
|
||||
|
||||
DTV_STAT_ERROR_BLOCK_COUNT
|
||||
==========================
|
||||
|
||||
Measures the number of block errors after the outer forward error
|
||||
correction coding (after Reed-Solomon or other outer code).
|
||||
|
||||
This measurement is monotonically increased, as the frontend gets more
|
||||
bit count measurements. The frontend may reset it when a
|
||||
channel/transponder is tuned.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - Number of error blocks counted after the outer
|
||||
coding.
|
||||
|
||||
|
||||
.. _DTV-STAT-TOTAL-BLOCK-COUNT:
|
||||
|
||||
DTV-STAT_TOTAL_BLOCK_COUNT
|
||||
==========================
|
||||
|
||||
Measures the total number of blocks received during the same period as
|
||||
:ref:`DTV_STAT_ERROR_BLOCK_COUNT <DTV-STAT-ERROR-BLOCK-COUNT>`
|
||||
measurement was taken.
|
||||
|
||||
It can be used to calculate the PER indicator, by dividing
|
||||
:ref:`DTV_STAT_ERROR_BLOCK_COUNT <DTV-STAT-ERROR-BLOCK-COUNT>` by
|
||||
:ref:`DTV-STAT-TOTAL-BLOCK-COUNT <DTV-STAT-TOTAL-BLOCK-COUNT>`.
|
||||
|
||||
Possible scales for this metric are:
|
||||
|
||||
- ``FE_SCALE_NOT_AVAILABLE`` - it failed to measure it, or the
|
||||
measurement was not complete yet.
|
||||
|
||||
- ``FE_SCALE_COUNTER`` - Number of blocks counted while measuring
|
||||
:ref:`DTV_STAT_ERROR_BLOCK_COUNT <DTV-STAT-ERROR-BLOCK-COUNT>`.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,62 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_frontend:
|
||||
|
||||
################
|
||||
DVB Frontend API
|
||||
################
|
||||
The DVB frontend API was designed to support three types of delivery
|
||||
systems:
|
||||
|
||||
- Terrestrial systems: DVB-T, DVB-T2, ATSC, ATSC M/H, ISDB-T, DVB-H,
|
||||
DTMB, CMMB
|
||||
|
||||
- Cable systems: DVB-C Annex A/C, ClearQAM (DVB-C Annex B), ISDB-C
|
||||
|
||||
- Satellite systems: DVB-S, DVB-S2, DVB Turbo, ISDB-S, DSS
|
||||
|
||||
The DVB frontend controls several sub-devices including:
|
||||
|
||||
- Tuner
|
||||
|
||||
- Digital TV demodulator
|
||||
|
||||
- Low noise amplifier (LNA)
|
||||
|
||||
- Satellite Equipment Control (SEC) hardware (only for Satellite).
|
||||
|
||||
The frontend can be accessed through ``/dev/dvb/adapter?/frontend?``.
|
||||
Data types and ioctl definitions can be accessed by including
|
||||
``linux/dvb/frontend.h`` in your application.
|
||||
|
||||
NOTE: Transmission via the internet (DVB-IP) is not yet handled by this
|
||||
API but a future extension is possible.
|
||||
|
||||
On Satellite systems, the API support for the Satellite Equipment
|
||||
Control (SEC) allows to power control and to send/receive signals to
|
||||
control the antenna subsystem, selecting the polarization and choosing
|
||||
the Intermediate Frequency IF) of the Low Noise Block Converter Feed
|
||||
Horn (LNBf). It supports the DiSEqC and V-SEC protocols. The DiSEqC
|
||||
(digital SEC) specification is available at
|
||||
`Eutelsat <http://www.eutelsat.com/satellites/4_5_5.html>`__.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
query-dvb-frontend-info
|
||||
dvb-fe-read-status
|
||||
dvbproperty
|
||||
frontend_fcalls
|
||||
frontend_legacy_dvbv3_api
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,55 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend_f_close:
|
||||
|
||||
********************
|
||||
DVB frontend close()
|
||||
********************
|
||||
|
||||
*man fe-close(2)*
|
||||
|
||||
Close a frontend device
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
.. c:function:: int close( int fd )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <func-open>`.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This system call closes a previously opened front-end device. After
|
||||
closing a front-end device, its corresponding hardware might be powered
|
||||
down automatically.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
The function returns 0 on success, -1 on failure and the ``errno`` is
|
||||
set appropriately. Possible error codes:
|
||||
|
||||
EBADF
|
||||
``fd`` is not a valid open file descriptor.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,108 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend_f_open:
|
||||
|
||||
*******************
|
||||
DVB frontend open()
|
||||
*******************
|
||||
|
||||
*man fe-open(2)*
|
||||
|
||||
Open a frontend device
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
|
||||
.. c:function:: int open( const char *device_name, int flags )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``device_name``
|
||||
Device to be opened.
|
||||
|
||||
``flags``
|
||||
Open flags. Access can either be ``O_RDWR`` or ``O_RDONLY``.
|
||||
|
||||
Multiple opens are allowed with ``O_RDONLY``. In this mode, only
|
||||
query and read ioctls are allowed.
|
||||
|
||||
Only one open is allowed in ``O_RDWR``. In this mode, all ioctls are
|
||||
allowed.
|
||||
|
||||
When the ``O_NONBLOCK`` flag is given, the system calls may return
|
||||
EAGAIN error code when no data is available or when the device
|
||||
driver is temporarily busy.
|
||||
|
||||
Other flags have no effect.
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
This system call opens a named frontend device
|
||||
(``/dev/dvb/adapter?/frontend?``) for subsequent use. Usually the first
|
||||
thing to do after a successful open is to find out the frontend type
|
||||
with :ref:`FE_GET_INFO <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.
|
||||
|
||||
|
||||
Return Value
|
||||
============
|
||||
|
||||
On success :c:func:`open()` returns the new file descriptor. On error
|
||||
-1 is returned, and the ``errno`` variable is set appropriately.
|
||||
Possible error codes are:
|
||||
|
||||
EACCES
|
||||
The caller has no permission to access the device.
|
||||
|
||||
EBUSY
|
||||
The the device driver is already in use.
|
||||
|
||||
ENXIO
|
||||
No device corresponding to this device special file exists.
|
||||
|
||||
ENOMEM
|
||||
Not enough kernel memory was available to complete the request.
|
||||
|
||||
EMFILE
|
||||
The process already has the maximum number of files open.
|
||||
|
||||
ENFILE
|
||||
The limit on the total number of files open on the system has been
|
||||
reached.
|
||||
|
||||
ENODEV
|
||||
The device got removed.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,35 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend_fcalls:
|
||||
|
||||
#######################
|
||||
Frontend Function Calls
|
||||
#######################
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
frontend_f_open
|
||||
frontend_f_close
|
||||
fe-get-info
|
||||
fe-read-status
|
||||
fe-get-property
|
||||
fe-diseqc-reset-overload
|
||||
fe-diseqc-send-master-cmd
|
||||
fe-diseqc-recv-slave-reply
|
||||
fe-diseqc-send-burst
|
||||
fe-set-tone
|
||||
fe-set-voltage
|
||||
fe-enable-high-lnb-voltage
|
||||
fe-set-frontend-tune-mode
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend_h:
|
||||
|
||||
************************
|
||||
DVB Frontend Header File
|
||||
************************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
../../frontend.h
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,49 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend_legacy_types:
|
||||
|
||||
Frontend Legacy Data Types
|
||||
==========================
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
fe-type-t
|
||||
fe-bandwidth-t
|
||||
dvb-frontend-parameters
|
||||
dvb-frontend-event
|
||||
|
||||
|
||||
.. _frontend_legacy_fcalls:
|
||||
|
||||
Frontend Legacy Function Calls
|
||||
==============================
|
||||
|
||||
Those functions are defined at DVB version 3. The support is kept in the
|
||||
kernel due to compatibility issues only. Their usage is strongly not
|
||||
recommended
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
FE_READ_BER
|
||||
FE_READ_SNR
|
||||
FE_READ_SIGNAL_STRENGTH
|
||||
FE_READ_UNCORRECTED_BLOCKS
|
||||
FE_SET_FRONTEND
|
||||
FE_GET_FRONTEND
|
||||
FE_GET_EVENT
|
||||
FE_DISHNETWORK_SEND_LEGACY_CMD
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,29 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _frontend_legacy_dvbv3_api:
|
||||
|
||||
****************************************
|
||||
DVB Frontend legacy API (a. k. a. DVBv3)
|
||||
****************************************
|
||||
|
||||
The usage of this API is deprecated, as it doesn't support all digital
|
||||
TV standards, doesn't provide good statistics measurements and provides
|
||||
incomplete information. This is kept only to support legacy
|
||||
applications.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
frontend_legacy_api
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,204 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_introdution:
|
||||
|
||||
************
|
||||
Introduction
|
||||
************
|
||||
|
||||
|
||||
.. _requisites:
|
||||
|
||||
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 http://www.dvb.org
|
||||
and/or 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++.
|
||||
|
||||
|
||||
.. _history:
|
||||
|
||||
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 https://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.
|
||||
|
||||
|
||||
.. _overview:
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
|
||||
.. _stb_components:
|
||||
|
||||
.. figure:: intro_files/dvbstb.*
|
||||
:alt: dvbstb.pdf / dvbstb.png
|
||||
:align: center
|
||||
|
||||
Components of a DVB card/STB
|
||||
|
||||
A DVB PCI card or DVB set-top-box (STB) usually consists of the
|
||||
following main hardware components:
|
||||
|
||||
- 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.
|
||||
|
||||
- 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.
|
||||
|
||||
- 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.
|
||||
|
||||
- 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.
|
||||
|
||||
:ref:`stb_components` 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.
|
||||
|
||||
|
||||
.. _dvb_devices:
|
||||
|
||||
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.
|
||||
|
||||
All devices can be found in the ``/dev`` tree under ``/dev/dvb``. The
|
||||
individual devices are called:
|
||||
|
||||
- ``/dev/dvb/adapterN/audioM``,
|
||||
|
||||
- ``/dev/dvb/adapterN/videoM``,
|
||||
|
||||
- ``/dev/dvb/adapterN/frontendM``,
|
||||
|
||||
- ``/dev/dvb/adapterN/netM``,
|
||||
|
||||
- ``/dev/dvb/adapterN/demuxM``,
|
||||
|
||||
- ``/dev/dvb/adapterN/dvrM``,
|
||||
|
||||
- ``/dev/dvb/adapterN/caM``,
|
||||
|
||||
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 “ ``/dev/dvb/adapterN/``\ ” in the further
|
||||
discussion of these devices.
|
||||
|
||||
More details about the data structures and function calls of all the
|
||||
devices are described in the following chapters.
|
||||
|
||||
|
||||
.. _include_files:
|
||||
|
||||
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:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/audio.h>
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/ca.h>
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/dmx.h>
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/frontend.h>
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/net.h>
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/osd.h>
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/dvb/video.h>
|
||||
|
||||
To enable applications to support different API version, an additional
|
||||
include file ``linux/dvb/version.h`` exists, which defines the constant
|
||||
``DVB_API_VERSION``. This document describes ``DVB_API_VERSION 5.10``.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
|
@ -0,0 +1,31 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _legacy_dvb_apis:
|
||||
|
||||
*******************
|
||||
DVB Deprecated APIs
|
||||
*******************
|
||||
|
||||
The APIs described here are kept only for historical reasons. There's
|
||||
just one driver for a very legacy hardware that uses this API. No modern
|
||||
drivers should use it. Instead, audio and video should be using the V4L2
|
||||
and ALSA APIs, and the pipelines should be set using the Media
|
||||
Controller API
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
video
|
||||
audio
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,219 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _net:
|
||||
|
||||
###############
|
||||
DVB Network API
|
||||
###############
|
||||
The DVB net device controls the mapping of data packages that are part
|
||||
of a transport stream to be mapped into a virtual network interface,
|
||||
visible through the standard Linux network protocol stack.
|
||||
|
||||
Currently, two encapsulations are supported:
|
||||
|
||||
- `Multi Protocol Encapsulation (MPE) <http://en.wikipedia.org/wiki/Multiprotocol_Encapsulation>`__
|
||||
|
||||
- `Ultra Lightweight Encapsulation (ULE) <http://en.wikipedia.org/wiki/Unidirectional_Lightweight_Encapsulation>`__
|
||||
|
||||
In order to create the Linux virtual network interfaces, an application
|
||||
needs to tell to the Kernel what are the PIDs and the encapsulation
|
||||
types that are present on the transport stream. This is done through
|
||||
``/dev/dvb/adapter?/net?`` device node. The data will be available via
|
||||
virtual ``dvb?_?`` network interfaces, and will be controlled/routed via
|
||||
the standard ip tools (like ip, route, netstat, ifconfig, etc).
|
||||
|
||||
Data types and and ioctl definitions are defined via ``linux/dvb/net.h``
|
||||
header.
|
||||
|
||||
|
||||
.. _net_fcalls:
|
||||
|
||||
######################
|
||||
DVB net Function Calls
|
||||
######################
|
||||
|
||||
.. _NET_ADD_IF:
|
||||
|
||||
****************
|
||||
ioctl NET_ADD_IF
|
||||
****************
|
||||
|
||||
*man NET_ADD_IF(2)*
|
||||
|
||||
Creates a new network interface for a given Packet ID.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, struct dvb_net_if *net_if )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_TONE
|
||||
|
||||
``net_if``
|
||||
pointer to struct :ref:`dvb_net_if <dvb-net-if>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The NET_ADD_IF ioctl system call selects the Packet ID (PID) that
|
||||
contains a TCP/IP traffic, the type of encapsulation to be used (MPE or
|
||||
ULE) and the interface number for the new interface to be created. When
|
||||
the system call successfully returns, a new virtual network interface is
|
||||
created.
|
||||
|
||||
The struct :ref:`dvb_net_if <dvb-net-if>`::ifnum field will be
|
||||
filled with the number of the created interface.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _dvb-net-if-t:
|
||||
|
||||
struct dvb_net_if description
|
||||
=============================
|
||||
|
||||
|
||||
.. _dvb-net-if:
|
||||
|
||||
.. flat-table:: struct dvb_net_if
|
||||
:header-rows: 1
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ID
|
||||
|
||||
- Description
|
||||
|
||||
- .. row 2
|
||||
|
||||
- pid
|
||||
|
||||
- Packet ID (PID) of the MPEG-TS that contains data
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ifnum
|
||||
|
||||
- number of the DVB interface.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- feedtype
|
||||
|
||||
- Encapsulation type of the feed. It can be:
|
||||
``DVB_NET_FEEDTYPE_MPE`` for MPE encoding or
|
||||
``DVB_NET_FEEDTYPE_ULE`` for ULE encoding.
|
||||
|
||||
|
||||
|
||||
.. _NET_REMOVE_IF:
|
||||
|
||||
*******************
|
||||
ioctl NET_REMOVE_IF
|
||||
*******************
|
||||
|
||||
*man NET_REMOVE_IF(2)*
|
||||
|
||||
Removes a network interface.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, int ifnum )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_TONE
|
||||
|
||||
``net_if``
|
||||
number of the interface to be removed
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The NET_REMOVE_IF ioctl deletes an interface previously created via
|
||||
:ref:`NET_ADD_IF <net>`.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. _NET_GET_IF:
|
||||
|
||||
****************
|
||||
ioctl NET_GET_IF
|
||||
****************
|
||||
|
||||
*man NET_GET_IF(2)*
|
||||
|
||||
Read the configuration data of an interface created via
|
||||
:ref:`NET_ADD_IF <net>`.
|
||||
|
||||
|
||||
Synopsis
|
||||
========
|
||||
|
||||
.. c:function:: int ioctl( int fd, int request, struct dvb_net_if *net_if )
|
||||
|
||||
Arguments
|
||||
=========
|
||||
|
||||
``fd``
|
||||
File descriptor returned by :ref:`open() <frontend_f_open>`.
|
||||
|
||||
``request``
|
||||
FE_SET_TONE
|
||||
|
||||
``net_if``
|
||||
pointer to struct :ref:`dvb_net_if <dvb-net-if>`
|
||||
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
The NET_GET_IF ioctl uses the interface number given by the struct
|
||||
:ref:`dvb_net_if <dvb-net-if>`::ifnum field and fills the content of
|
||||
struct :ref:`dvb_net_if <dvb-net-if>` with the packet ID and
|
||||
encapsulation type used on such interface. If the interface was not
|
||||
created yet with :ref:`NET_ADD_IF <net>`, it will return -1 and fill
|
||||
the ``errno`` with ``EINVAL`` error code.
|
||||
|
||||
RETURN VALUE
|
||||
|
||||
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
||||
appropriately. The generic error codes are described at the
|
||||
:ref:`Generic Error Codes <gen-errors>` chapter.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _net_h:
|
||||
|
||||
***********************
|
||||
DVB Network Header File
|
||||
***********************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
../../net.h
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,22 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _query-dvb-frontend-info:
|
||||
|
||||
*****************************
|
||||
Querying frontend information
|
||||
*****************************
|
||||
|
||||
Usually, the first thing to do when the frontend is opened is to check
|
||||
the frontend capabilities. This is done using
|
||||
:ref:`FE_GET_INFO <FE_GET_INFO>`. This ioctl will enumerate the
|
||||
DVB API version and other characteristics about the frontend, and can be
|
||||
opened either in read only or read/write mode.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,46 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _dvb_video:
|
||||
|
||||
################
|
||||
DVB Video Device
|
||||
################
|
||||
The DVB video device controls the MPEG2 video decoder of the DVB
|
||||
hardware. It can be accessed through **/dev/dvb/adapter0/video0**. Data
|
||||
types and and ioctl definitions can be accessed by including
|
||||
**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.
|
||||
**/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.
|
||||
|
||||
These ioctls were also used by V4L2 to control MPEG decoders implemented
|
||||
in V4L2. The use of these ioctls for that purpose has been made obsolete
|
||||
and proper V4L2 ioctls or controls have been created to replace that
|
||||
functionality.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
video_types
|
||||
video_function_calls
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _video_h:
|
||||
|
||||
*********************
|
||||
DVB Video Header File
|
||||
*********************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
../../video.h
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,390 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _video_types:
|
||||
|
||||
****************
|
||||
Video Data Types
|
||||
****************
|
||||
|
||||
|
||||
.. _video-format-t:
|
||||
|
||||
video_format_t
|
||||
==============
|
||||
|
||||
The ``video_format_t`` data type defined by
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
VIDEO_FORMAT_4_3, /* Select 4:3 format */
|
||||
VIDEO_FORMAT_16_9, /* Select 16:9 format. */
|
||||
VIDEO_FORMAT_221_1 /* 2.21:1 */
|
||||
} video_format_t;
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. _video-displayformat-t:
|
||||
|
||||
video_displayformat_t
|
||||
=====================
|
||||
|
||||
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
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
VIDEO_PAN_SCAN, /* use pan and scan format */
|
||||
VIDEO_LETTER_BOX, /* use letterbox format */
|
||||
VIDEO_CENTER_CUT_OUT /* use center cut out format */
|
||||
} video_displayformat_t;
|
||||
|
||||
as argument.
|
||||
|
||||
|
||||
.. _video-stream-source-t:
|
||||
|
||||
video_stream_source_t
|
||||
=====================
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */
|
||||
VIDEO_SOURCE_MEMORY /* If this source is selected, the stream
|
||||
comes from the user through the write
|
||||
system call */
|
||||
} video_stream_source_t;
|
||||
|
||||
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 **write()** system call.
|
||||
|
||||
|
||||
.. _video-play-state-t:
|
||||
|
||||
video_play_state_t
|
||||
==================
|
||||
|
||||
The following values can be returned by the VIDEO_GET_STATUS call
|
||||
representing the state of video playback.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef enum {
|
||||
VIDEO_STOPPED, /* Video is stopped */
|
||||
VIDEO_PLAYING, /* Video is currently playing */
|
||||
VIDEO_FREEZED /* Video is freezed */
|
||||
} video_play_state_t;
|
||||
|
||||
|
||||
.. _video-command:
|
||||
|
||||
struct video_command
|
||||
====================
|
||||
|
||||
The structure must be zeroed before use by the application This ensures
|
||||
it can be extended safely in the future.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct video_command {
|
||||
__u32 cmd;
|
||||
__u32 flags;
|
||||
union {
|
||||
struct {
|
||||
__u64 pts;
|
||||
} stop;
|
||||
|
||||
struct {
|
||||
/* 0 or 1000 specifies normal speed,
|
||||
1 specifies forward single stepping,
|
||||
-1 specifies backward single stepping,
|
||||
>>1: playback at speed/1000 of the normal speed,
|
||||
<-1: reverse playback at (-speed/1000) of the normal speed. */
|
||||
__s32 speed;
|
||||
__u32 format;
|
||||
} play;
|
||||
|
||||
struct {
|
||||
__u32 data[16];
|
||||
} raw;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
.. _video-size-t:
|
||||
|
||||
video_size_t
|
||||
============
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef struct {
|
||||
int w;
|
||||
int h;
|
||||
video_format_t aspect_ratio;
|
||||
} video_size_t;
|
||||
|
||||
|
||||
.. _video-event:
|
||||
|
||||
struct video_event
|
||||
==================
|
||||
|
||||
The following is the structure of a video event as it is returned by the
|
||||
VIDEO_GET_EVENT call.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct video_event {
|
||||
__s32 type;
|
||||
#define VIDEO_EVENT_SIZE_CHANGED 1
|
||||
#define VIDEO_EVENT_FRAME_RATE_CHANGED 2
|
||||
#define VIDEO_EVENT_DECODER_STOPPED 3
|
||||
#define VIDEO_EVENT_VSYNC 4
|
||||
__kernel_time_t timestamp;
|
||||
union {
|
||||
video_size_t size;
|
||||
unsigned int frame_rate; /* in frames per 1000sec */
|
||||
unsigned char vsync_field; /* unknown/odd/even/progressive */
|
||||
} u;
|
||||
};
|
||||
|
||||
|
||||
.. _video-status:
|
||||
|
||||
struct video_status
|
||||
===================
|
||||
|
||||
The VIDEO_GET_STATUS call returns the following structure informing
|
||||
about various states of the playback operation.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct video_status {
|
||||
int video_blank; /* blank video on freeze? */
|
||||
video_play_state_t play_state; /* current state of playback */
|
||||
video_stream_source_t stream_source; /* current source (demux/memory) */
|
||||
video_format_t video_format; /* current aspect ratio of stream */
|
||||
video_displayformat_t display_format;/* selected cropping mode */
|
||||
};
|
||||
|
||||
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.
|
||||
|
||||
|
||||
.. _video-still-picture:
|
||||
|
||||
struct video_still_picture
|
||||
==========================
|
||||
|
||||
An I-frame displayed via the VIDEO_STILLPICTURE call is passed on
|
||||
within the following structure.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* pointer to and size of a single iframe in memory */
|
||||
struct video_still_picture {
|
||||
char *iFrame; /* pointer to a single iframe in memory */
|
||||
int32_t size;
|
||||
};
|
||||
|
||||
|
||||
.. _video_caps:
|
||||
|
||||
video capabilities
|
||||
==================
|
||||
|
||||
A call to VIDEO_GET_CAPABILITIES returns an unsigned integer with the
|
||||
following bits set according to the hardwares capabilities.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* 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
|
||||
|
||||
|
||||
.. _video-system:
|
||||
|
||||
video_system_t
|
||||
==============
|
||||
|
||||
A call to VIDEO_SET_SYSTEM sets the desired video system for TV
|
||||
output. The following system types can be set:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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;
|
||||
|
||||
|
||||
.. _video-highlight:
|
||||
|
||||
struct video_highlight
|
||||
======================
|
||||
|
||||
Calling the ioctl VIDEO_SET_HIGHLIGHTS posts the SPU highlight
|
||||
information. The call expects the following format for that information:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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;
|
||||
|
||||
|
||||
.. _video-spu:
|
||||
|
||||
struct video_spu
|
||||
================
|
||||
|
||||
Calling VIDEO_SET_SPU deactivates or activates SPU decoding, according
|
||||
to the following format:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef
|
||||
struct video_spu {
|
||||
boolean active;
|
||||
int stream_id;
|
||||
} video_spu_t;
|
||||
|
||||
|
||||
.. _video-spu-palette:
|
||||
|
||||
struct video_spu_palette
|
||||
========================
|
||||
|
||||
The following structure is used to set the SPU palette by calling
|
||||
VIDEO_SPU_PALETTE:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef
|
||||
struct video_spu_palette {
|
||||
int length;
|
||||
uint8_t *palette;
|
||||
} video_spu_palette_t;
|
||||
|
||||
|
||||
.. _video-navi-pack:
|
||||
|
||||
struct video_navi_pack
|
||||
======================
|
||||
|
||||
In order to get the navigational data the following structure has to be
|
||||
passed to the ioctl VIDEO_GET_NAVI:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
typedef
|
||||
struct video_navi_pack {
|
||||
int length; /* 0 ... 1024 */
|
||||
uint8_t data[1024];
|
||||
} video_navi_pack_t;
|
||||
|
||||
|
||||
.. _video-attributes-t:
|
||||
|
||||
video_attributes_t
|
||||
==================
|
||||
|
||||
The following attributes can be set by a call to VIDEO_SET_ATTRIBUTES:
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
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)) */
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,33 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _Remote_controllers_Intro:
|
||||
|
||||
************
|
||||
Introduction
|
||||
************
|
||||
|
||||
Currently, most analog and digital devices have a Infrared input for
|
||||
remote controllers. Each manufacturer has their own type of control. It
|
||||
is not rare for the same manufacturer to ship different types of
|
||||
controls, depending on the device.
|
||||
|
||||
A Remote Controller interface is mapped as a normal evdev/input
|
||||
interface, just like a keyboard or a mouse. So, it uses all ioctls
|
||||
already defined for any other input devices.
|
||||
|
||||
However, remove controllers are more flexible than a normal input
|
||||
device, as the IR receiver (and/or transmitter) can be used in
|
||||
conjunction with a wide variety of different IR remotes.
|
||||
|
||||
In order to allow flexibility, the Remote Controller subsystem allows
|
||||
controlling the RC-specific attributes via
|
||||
:ref:`the sysfs class nodes <remote_controllers_sysfs_nodes>`.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,29 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _Remote_controllers_table_change:
|
||||
|
||||
*******************************************
|
||||
Changing default Remote Controller mappings
|
||||
*******************************************
|
||||
|
||||
The event interface provides two ioctls to be used against the
|
||||
/dev/input/event device, to allow changing the default keymapping.
|
||||
|
||||
This program demonstrates how to replace the keymap tables.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
keytable.c
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,768 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _Remote_controllers_tables:
|
||||
|
||||
************************
|
||||
Remote controller tables
|
||||
************************
|
||||
|
||||
Unfortunately, for several years, there was no effort to create uniform
|
||||
IR keycodes for different devices. This caused the same IR keyname to be
|
||||
mapped completely differently on different IR devices. This resulted
|
||||
that the same IR keyname to be mapped completely different on different
|
||||
IR's. Due to that, V4L2 API now specifies a standard for mapping Media
|
||||
keys on IR.
|
||||
|
||||
This standard should be used by both V4L/DVB drivers and userspace
|
||||
applications
|
||||
|
||||
The modules register the remote as keyboard within the linux input
|
||||
layer. This means that the IR key strokes will look like normal keyboard
|
||||
key strokes (if CONFIG_INPUT_KEYBOARD is enabled). Using the event
|
||||
devices (CONFIG_INPUT_EVDEV) it is possible for applications to access
|
||||
the remote via /dev/input/event devices.
|
||||
|
||||
|
||||
.. _rc_standard_keymap:
|
||||
|
||||
.. flat-table:: IR default keymapping
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- Key code
|
||||
|
||||
- Meaning
|
||||
|
||||
- Key examples on IR
|
||||
|
||||
- .. row 2
|
||||
|
||||
- **Numeric keys**
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``KEY_0``
|
||||
|
||||
- Keyboard digit 0
|
||||
|
||||
- 0
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``KEY_1``
|
||||
|
||||
- Keyboard digit 1
|
||||
|
||||
- 1
|
||||
|
||||
- .. row 5
|
||||
|
||||
- ``KEY_2``
|
||||
|
||||
- Keyboard digit 2
|
||||
|
||||
- 2
|
||||
|
||||
- .. row 6
|
||||
|
||||
- ``KEY_3``
|
||||
|
||||
- Keyboard digit 3
|
||||
|
||||
- 3
|
||||
|
||||
- .. row 7
|
||||
|
||||
- ``KEY_4``
|
||||
|
||||
- Keyboard digit 4
|
||||
|
||||
- 4
|
||||
|
||||
- .. row 8
|
||||
|
||||
- ``KEY_5``
|
||||
|
||||
- Keyboard digit 5
|
||||
|
||||
- 5
|
||||
|
||||
- .. row 9
|
||||
|
||||
- ``KEY_6``
|
||||
|
||||
- Keyboard digit 6
|
||||
|
||||
- 6
|
||||
|
||||
- .. row 10
|
||||
|
||||
- ``KEY_7``
|
||||
|
||||
- Keyboard digit 7
|
||||
|
||||
- 7
|
||||
|
||||
- .. row 11
|
||||
|
||||
- ``KEY_8``
|
||||
|
||||
- Keyboard digit 8
|
||||
|
||||
- 8
|
||||
|
||||
- .. row 12
|
||||
|
||||
- ``KEY_9``
|
||||
|
||||
- Keyboard digit 9
|
||||
|
||||
- 9
|
||||
|
||||
- .. row 13
|
||||
|
||||
- **Movie play control**
|
||||
|
||||
- .. row 14
|
||||
|
||||
- ``KEY_FORWARD``
|
||||
|
||||
- Instantly advance in time
|
||||
|
||||
- >> / FORWARD
|
||||
|
||||
- .. row 15
|
||||
|
||||
- ``KEY_BACK``
|
||||
|
||||
- Instantly go back in time
|
||||
|
||||
- <<< / BACK
|
||||
|
||||
- .. row 16
|
||||
|
||||
- ``KEY_FASTFORWARD``
|
||||
|
||||
- Play movie faster
|
||||
|
||||
- >>> / FORWARD
|
||||
|
||||
- .. row 17
|
||||
|
||||
- ``KEY_REWIND``
|
||||
|
||||
- Play movie back
|
||||
|
||||
- REWIND / BACKWARD
|
||||
|
||||
- .. row 18
|
||||
|
||||
- ``KEY_NEXT``
|
||||
|
||||
- Select next chapter / sub-chapter / interval
|
||||
|
||||
- NEXT / SKIP
|
||||
|
||||
- .. row 19
|
||||
|
||||
- ``KEY_PREVIOUS``
|
||||
|
||||
- Select previous chapter / sub-chapter / interval
|
||||
|
||||
- << / PREV / PREVIOUS
|
||||
|
||||
- .. row 20
|
||||
|
||||
- ``KEY_AGAIN``
|
||||
|
||||
- Repeat the video or a video interval
|
||||
|
||||
- REPEAT / LOOP / RECALL
|
||||
|
||||
- .. row 21
|
||||
|
||||
- ``KEY_PAUSE``
|
||||
|
||||
- Pause sroweam
|
||||
|
||||
- PAUSE / FREEZE
|
||||
|
||||
- .. row 22
|
||||
|
||||
- ``KEY_PLAY``
|
||||
|
||||
- Play movie at the normal timeshift
|
||||
|
||||
- NORMAL TIMESHIFT / LIVE / >
|
||||
|
||||
- .. row 23
|
||||
|
||||
- ``KEY_PLAYPAUSE``
|
||||
|
||||
- Alternate between play and pause
|
||||
|
||||
- PLAY / PAUSE
|
||||
|
||||
- .. row 24
|
||||
|
||||
- ``KEY_STOP``
|
||||
|
||||
- Stop sroweam
|
||||
|
||||
- STOP
|
||||
|
||||
- .. row 25
|
||||
|
||||
- ``KEY_RECORD``
|
||||
|
||||
- Start/stop recording sroweam
|
||||
|
||||
- CAPTURE / REC / RECORD/PAUSE
|
||||
|
||||
- .. row 26
|
||||
|
||||
- ``KEY_CAMERA``
|
||||
|
||||
- Take a picture of the image
|
||||
|
||||
- CAMERA ICON / CAPTURE / SNAPSHOT
|
||||
|
||||
- .. row 27
|
||||
|
||||
- ``KEY_SHUFFLE``
|
||||
|
||||
- Enable shuffle mode
|
||||
|
||||
- SHUFFLE
|
||||
|
||||
- .. row 28
|
||||
|
||||
- ``KEY_TIME``
|
||||
|
||||
- Activate time shift mode
|
||||
|
||||
- TIME SHIFT
|
||||
|
||||
- .. row 29
|
||||
|
||||
- ``KEY_TITLE``
|
||||
|
||||
- Allow changing the chapter
|
||||
|
||||
- CHAPTER
|
||||
|
||||
- .. row 30
|
||||
|
||||
- ``KEY_SUBTITLE``
|
||||
|
||||
- Allow changing the subtitle
|
||||
|
||||
- SUBTITLE
|
||||
|
||||
- .. row 31
|
||||
|
||||
- **Image control**
|
||||
|
||||
- .. row 32
|
||||
|
||||
- ``KEY_BRIGHTNESSDOWN``
|
||||
|
||||
- Decrease Brightness
|
||||
|
||||
- BRIGHTNESS DECREASE
|
||||
|
||||
- .. row 33
|
||||
|
||||
- ``KEY_BRIGHTNESSUP``
|
||||
|
||||
- Increase Brightness
|
||||
|
||||
- BRIGHTNESS INCREASE
|
||||
|
||||
- .. row 34
|
||||
|
||||
- ``KEY_ANGLE``
|
||||
|
||||
- Switch video camera angle (on videos with more than one angle
|
||||
stored)
|
||||
|
||||
- ANGLE / SWAP
|
||||
|
||||
- .. row 35
|
||||
|
||||
- ``KEY_EPG``
|
||||
|
||||
- Open the Elecrowonic Play Guide (EPG)
|
||||
|
||||
- EPG / GUIDE
|
||||
|
||||
- .. row 36
|
||||
|
||||
- ``KEY_TEXT``
|
||||
|
||||
- Activate/change closed caption mode
|
||||
|
||||
- CLOSED CAPTION/TELETEXT / DVD TEXT / TELETEXT / TTX
|
||||
|
||||
- .. row 37
|
||||
|
||||
- **Audio control**
|
||||
|
||||
- .. row 38
|
||||
|
||||
- ``KEY_AUDIO``
|
||||
|
||||
- Change audio source
|
||||
|
||||
- AUDIO SOURCE / AUDIO / MUSIC
|
||||
|
||||
- .. row 39
|
||||
|
||||
- ``KEY_MUTE``
|
||||
|
||||
- Mute/unmute audio
|
||||
|
||||
- MUTE / DEMUTE / UNMUTE
|
||||
|
||||
- .. row 40
|
||||
|
||||
- ``KEY_VOLUMEDOWN``
|
||||
|
||||
- Decrease volume
|
||||
|
||||
- VOLUME- / VOLUME DOWN
|
||||
|
||||
- .. row 41
|
||||
|
||||
- ``KEY_VOLUMEUP``
|
||||
|
||||
- Increase volume
|
||||
|
||||
- VOLUME+ / VOLUME UP
|
||||
|
||||
- .. row 42
|
||||
|
||||
- ``KEY_MODE``
|
||||
|
||||
- Change sound mode
|
||||
|
||||
- MONO/STEREO
|
||||
|
||||
- .. row 43
|
||||
|
||||
- ``KEY_LANGUAGE``
|
||||
|
||||
- Select Language
|
||||
|
||||
- 1ST / 2ND LANGUAGE / DVD LANG / MTS/SAP / MTS SEL
|
||||
|
||||
- .. row 44
|
||||
|
||||
- **Channel control**
|
||||
|
||||
- .. row 45
|
||||
|
||||
- ``KEY_CHANNEL``
|
||||
|
||||
- Go to the next favorite channel
|
||||
|
||||
- ALT / CHANNEL / CH SURFING / SURF / FAV
|
||||
|
||||
- .. row 46
|
||||
|
||||
- ``KEY_CHANNELDOWN``
|
||||
|
||||
- Decrease channel sequencially
|
||||
|
||||
- CHANNEL - / CHANNEL DOWN / DOWN
|
||||
|
||||
- .. row 47
|
||||
|
||||
- ``KEY_CHANNELUP``
|
||||
|
||||
- Increase channel sequencially
|
||||
|
||||
- CHANNEL + / CHANNEL UP / UP
|
||||
|
||||
- .. row 48
|
||||
|
||||
- ``KEY_DIGITS``
|
||||
|
||||
- Use more than one digit for channel
|
||||
|
||||
- PLUS / 100/ 1xx / xxx / -/-- / Single Double Triple Digit
|
||||
|
||||
- .. row 49
|
||||
|
||||
- ``KEY_SEARCH``
|
||||
|
||||
- Start channel autoscan
|
||||
|
||||
- SCAN / AUTOSCAN
|
||||
|
||||
- .. row 50
|
||||
|
||||
- **Colored keys**
|
||||
|
||||
- .. row 51
|
||||
|
||||
- ``KEY_BLUE``
|
||||
|
||||
- IR Blue key
|
||||
|
||||
- BLUE
|
||||
|
||||
- .. row 52
|
||||
|
||||
- ``KEY_GREEN``
|
||||
|
||||
- IR Green Key
|
||||
|
||||
- GREEN
|
||||
|
||||
- .. row 53
|
||||
|
||||
- ``KEY_RED``
|
||||
|
||||
- IR Red key
|
||||
|
||||
- RED
|
||||
|
||||
- .. row 54
|
||||
|
||||
- ``KEY_YELLOW``
|
||||
|
||||
- IR Yellow key
|
||||
|
||||
- YELLOW
|
||||
|
||||
- .. row 55
|
||||
|
||||
- **Media selection**
|
||||
|
||||
- .. row 56
|
||||
|
||||
- ``KEY_CD``
|
||||
|
||||
- Change input source to Compact Disc
|
||||
|
||||
- CD
|
||||
|
||||
- .. row 57
|
||||
|
||||
- ``KEY_DVD``
|
||||
|
||||
- Change input to DVD
|
||||
|
||||
- DVD / DVD MENU
|
||||
|
||||
- .. row 58
|
||||
|
||||
- ``KEY_EJECTCLOSECD``
|
||||
|
||||
- Open/close the CD/DVD player
|
||||
|
||||
- -> ) / CLOSE / OPEN
|
||||
|
||||
- .. row 59
|
||||
|
||||
- ``KEY_MEDIA``
|
||||
|
||||
- Turn on/off Media application
|
||||
|
||||
- PC/TV / TURN ON/OFF APP
|
||||
|
||||
- .. row 60
|
||||
|
||||
- ``KEY_PC``
|
||||
|
||||
- Selects from TV to PC
|
||||
|
||||
- PC
|
||||
|
||||
- .. row 61
|
||||
|
||||
- ``KEY_RADIO``
|
||||
|
||||
- Put into AM/FM radio mode
|
||||
|
||||
- RADIO / TV/FM / TV/RADIO / FM / FM/RADIO
|
||||
|
||||
- .. row 62
|
||||
|
||||
- ``KEY_TV``
|
||||
|
||||
- Select tv mode
|
||||
|
||||
- TV / LIVE TV
|
||||
|
||||
- .. row 63
|
||||
|
||||
- ``KEY_TV2``
|
||||
|
||||
- Select Cable mode
|
||||
|
||||
- AIR/CBL
|
||||
|
||||
- .. row 64
|
||||
|
||||
- ``KEY_VCR``
|
||||
|
||||
- Select VCR mode
|
||||
|
||||
- VCR MODE / DTR
|
||||
|
||||
- .. row 65
|
||||
|
||||
- ``KEY_VIDEO``
|
||||
|
||||
- Alternate between input modes
|
||||
|
||||
- SOURCE / SELECT / DISPLAY / SWITCH INPUTS / VIDEO
|
||||
|
||||
- .. row 66
|
||||
|
||||
- **Power control**
|
||||
|
||||
- .. row 67
|
||||
|
||||
- ``KEY_POWER``
|
||||
|
||||
- Turn on/off computer
|
||||
|
||||
- SYSTEM POWER / COMPUTER POWER
|
||||
|
||||
- .. row 68
|
||||
|
||||
- ``KEY_POWER2``
|
||||
|
||||
- Turn on/off application
|
||||
|
||||
- TV ON/OFF / POWER
|
||||
|
||||
- .. row 69
|
||||
|
||||
- ``KEY_SLEEP``
|
||||
|
||||
- Activate sleep timer
|
||||
|
||||
- SLEEP / SLEEP TIMER
|
||||
|
||||
- .. row 70
|
||||
|
||||
- ``KEY_SUSPEND``
|
||||
|
||||
- Put computer into suspend mode
|
||||
|
||||
- STANDBY / SUSPEND
|
||||
|
||||
- .. row 71
|
||||
|
||||
- **Window control**
|
||||
|
||||
- .. row 72
|
||||
|
||||
- ``KEY_CLEAR``
|
||||
|
||||
- Stop sroweam and return to default input video/audio
|
||||
|
||||
- CLEAR / RESET / BOSS KEY
|
||||
|
||||
- .. row 73
|
||||
|
||||
- ``KEY_CYCLEWINDOWS``
|
||||
|
||||
- Minimize windows and move to the next one
|
||||
|
||||
- ALT-TAB / MINIMIZE / DESKTOP
|
||||
|
||||
- .. row 74
|
||||
|
||||
- ``KEY_FAVORITES``
|
||||
|
||||
- Open the favorites sroweam window
|
||||
|
||||
- TV WALL / Favorites
|
||||
|
||||
- .. row 75
|
||||
|
||||
- ``KEY_MENU``
|
||||
|
||||
- Call application menu
|
||||
|
||||
- 2ND CONTROLS (USA: MENU) / DVD/MENU / SHOW/HIDE CTRL
|
||||
|
||||
- .. row 76
|
||||
|
||||
- ``KEY_NEW``
|
||||
|
||||
- Open/Close Picture in Picture
|
||||
|
||||
- PIP
|
||||
|
||||
- .. row 77
|
||||
|
||||
- ``KEY_OK``
|
||||
|
||||
- Send a confirmation code to application
|
||||
|
||||
- OK / ENTER / RETURN
|
||||
|
||||
- .. row 78
|
||||
|
||||
- ``KEY_SCREEN``
|
||||
|
||||
- Select screen aspect ratio
|
||||
|
||||
- 4:3 16:9 SELECT
|
||||
|
||||
- .. row 79
|
||||
|
||||
- ``KEY_ZOOM``
|
||||
|
||||
- Put device into zoom/full screen mode
|
||||
|
||||
- ZOOM / FULL SCREEN / ZOOM+ / HIDE PANNEL / SWITCH
|
||||
|
||||
- .. row 80
|
||||
|
||||
- **Navigation keys**
|
||||
|
||||
- .. row 81
|
||||
|
||||
- ``KEY_ESC``
|
||||
|
||||
- Cancel current operation
|
||||
|
||||
- CANCEL / BACK
|
||||
|
||||
- .. row 82
|
||||
|
||||
- ``KEY_HELP``
|
||||
|
||||
- Open a Help window
|
||||
|
||||
- HELP
|
||||
|
||||
- .. row 83
|
||||
|
||||
- ``KEY_HOMEPAGE``
|
||||
|
||||
- Navigate to Homepage
|
||||
|
||||
- HOME
|
||||
|
||||
- .. row 84
|
||||
|
||||
- ``KEY_INFO``
|
||||
|
||||
- Open On Screen Display
|
||||
|
||||
- DISPLAY INFORMATION / OSD
|
||||
|
||||
- .. row 85
|
||||
|
||||
- ``KEY_WWW``
|
||||
|
||||
- Open the default browser
|
||||
|
||||
- WEB
|
||||
|
||||
- .. row 86
|
||||
|
||||
- ``KEY_UP``
|
||||
|
||||
- Up key
|
||||
|
||||
- UP
|
||||
|
||||
- .. row 87
|
||||
|
||||
- ``KEY_DOWN``
|
||||
|
||||
- Down key
|
||||
|
||||
- DOWN
|
||||
|
||||
- .. row 88
|
||||
|
||||
- ``KEY_LEFT``
|
||||
|
||||
- Left key
|
||||
|
||||
- LEFT
|
||||
|
||||
- .. row 89
|
||||
|
||||
- ``KEY_RIGHT``
|
||||
|
||||
- Right key
|
||||
|
||||
- RIGHT
|
||||
|
||||
- .. row 90
|
||||
|
||||
- **Miscellaneous keys**
|
||||
|
||||
- .. row 91
|
||||
|
||||
- ``KEY_DOT``
|
||||
|
||||
- Return a dot
|
||||
|
||||
- .
|
||||
|
||||
- .. row 92
|
||||
|
||||
- ``KEY_FN``
|
||||
|
||||
- Select a function
|
||||
|
||||
- FUNCTION
|
||||
|
||||
|
||||
It should be noted that, sometimes, there some fundamental missing keys
|
||||
at some cheaper IR's. Due to that, it is recommended to:
|
||||
|
||||
|
||||
.. _rc_keymap_notes:
|
||||
|
||||
.. flat-table:: Notes
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- On simpler IR's, without separate channel keys, you need to map UP
|
||||
as ``KEY_CHANNELUP``
|
||||
|
||||
- .. row 2
|
||||
|
||||
- On simpler IR's, without separate channel keys, you need to map
|
||||
DOWN as ``KEY_CHANNELDOWN``
|
||||
|
||||
- .. row 3
|
||||
|
||||
- On simpler IR's, without separate volume keys, you need to map
|
||||
LEFT as ``KEY_VOLUMEDOWN``
|
||||
|
||||
- .. row 4
|
||||
|
||||
- On simpler IR's, without separate volume keys, you need to map
|
||||
RIGHT as ``KEY_VOLUMEUP``
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,39 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _app-pri:
|
||||
|
||||
********************
|
||||
Application Priority
|
||||
********************
|
||||
|
||||
When multiple applications share a device it may be desirable to assign
|
||||
them different priorities. Contrary to the traditional "rm -rf /" school
|
||||
of thought a video recording application could for example block other
|
||||
applications from changing video controls or switching the current TV
|
||||
channel. Another objective is to permit low priority applications
|
||||
working in background, which can be preempted by user controlled
|
||||
applications and automatically regain control of the device at a later
|
||||
time.
|
||||
|
||||
Since these features cannot be implemented entirely in user space V4L2
|
||||
defines the :ref:`VIDIOC_G_PRIORITY <vidioc-g-priority>` and
|
||||
:ref:`VIDIOC_S_PRIORITY <vidioc-g-priority>` ioctls to request and
|
||||
query the access priority associate with a file descriptor. Opening a
|
||||
device assigns a medium priority, compatible with earlier versions of
|
||||
V4L2 and drivers not supporting these ioctls. Applications requiring a
|
||||
different priority will usually call ``VIDIOC_S_PRIORITY`` after
|
||||
verifying the device with the
|
||||
:ref:`VIDIOC_QUERYCAP <vidioc-querycap>` ioctl.
|
||||
|
||||
Ioctls changing driver properties, such as
|
||||
:ref:`VIDIOC_S_INPUT <vidioc-g-input>`, return an EBUSY error code
|
||||
after another application obtained higher priority.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,18 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _async:
|
||||
|
||||
****************
|
||||
Asynchronous I/O
|
||||
****************
|
||||
|
||||
This method is not defined yet.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,97 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _audio:
|
||||
|
||||
************************
|
||||
Audio Inputs and Outputs
|
||||
************************
|
||||
|
||||
Audio inputs and outputs are physical connectors of a device. Video
|
||||
capture devices have inputs, output devices have outputs, zero or more
|
||||
each. Radio devices have no audio inputs or outputs. They have exactly
|
||||
one tuner which in fact *is* an audio source, but this API associates
|
||||
tuners with video inputs or outputs only, and radio devices have none of
|
||||
these. [1]_ A connector on a TV card to loop back the received audio
|
||||
signal to a sound card is not considered an audio output.
|
||||
|
||||
Audio and video inputs and outputs are associated. Selecting a video
|
||||
source also selects an audio source. This is most evident when the video
|
||||
and audio source is a tuner. Further audio connectors can combine with
|
||||
more than one video input or output. Assumed two composite video inputs
|
||||
and two audio inputs exist, there may be up to four valid combinations.
|
||||
The relation of video and audio connectors is defined in the
|
||||
``audioset`` field of the respective struct
|
||||
:ref:`v4l2_input <v4l2-input>` or struct
|
||||
:ref:`v4l2_output <v4l2-output>`, where each bit represents the index
|
||||
number, starting at zero, of one audio input or output.
|
||||
|
||||
To learn about the number and attributes of the available inputs and
|
||||
outputs applications can enumerate them with the
|
||||
:ref:`VIDIOC_ENUMAUDIO <vidioc-enumaudio>` and
|
||||
:ref:`VIDIOC_ENUMAUDOUT <vidioc-enumaudioout>` ioctl, respectively.
|
||||
The struct :ref:`v4l2_audio <v4l2-audio>` returned by the
|
||||
``VIDIOC_ENUMAUDIO`` ioctl also contains signal status information
|
||||
applicable when the current audio input is queried.
|
||||
|
||||
The :ref:`VIDIOC_G_AUDIO <vidioc-g-audio>` and
|
||||
:ref:`VIDIOC_G_AUDOUT <vidioc-g-audioout>` ioctls report the current
|
||||
audio input and output, respectively. Note that, unlike
|
||||
:ref:`VIDIOC_G_INPUT <vidioc-g-input>` and
|
||||
:ref:`VIDIOC_G_OUTPUT <vidioc-g-output>` these ioctls return a
|
||||
structure as ``VIDIOC_ENUMAUDIO`` and ``VIDIOC_ENUMAUDOUT`` do, not just
|
||||
an index.
|
||||
|
||||
To select an audio input and change its properties applications call the
|
||||
:ref:`VIDIOC_S_AUDIO <vidioc-g-audio>` ioctl. To select an audio
|
||||
output (which presently has no changeable properties) applications call
|
||||
the :ref:`VIDIOC_S_AUDOUT <vidioc-g-audioout>` ioctl.
|
||||
|
||||
Drivers must implement all audio input ioctls when the device has
|
||||
multiple selectable audio inputs, all audio output ioctls when the
|
||||
device has multiple selectable audio outputs. When the device has any
|
||||
audio inputs or outputs the driver must set the ``V4L2_CAP_AUDIO`` flag
|
||||
in the struct :ref:`v4l2_capability <v4l2-capability>` returned by
|
||||
the :ref:`VIDIOC_QUERYCAP <vidioc-querycap>` ioctl.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_audio audio;
|
||||
|
||||
memset(&audio, 0, sizeof(audio));
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_G_AUDIO, &audio)) {
|
||||
perror("VIDIOC_G_AUDIO");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf("Current input: %s\\n", audio.name);
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_audio audio;
|
||||
|
||||
memset(&audio, 0, sizeof(audio)); /* clear audio.mode, audio.reserved */
|
||||
|
||||
audio.index = 0;
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_S_AUDIO, &audio)) {
|
||||
perror("VIDIOC_S_AUDIO");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
.. [1]
|
||||
Actually struct :ref:`v4l2_audio <v4l2-audio>` ought to have a
|
||||
``tuner`` field like struct :ref:`v4l2_input <v4l2-input>`, not
|
||||
only making the API more consistent but also permitting radio devices
|
||||
with multiple tuners.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,390 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
**********
|
||||
References
|
||||
**********
|
||||
|
||||
|
||||
.. _cea608:
|
||||
|
||||
CEA 608-E
|
||||
=========
|
||||
|
||||
|
||||
:title: CEA-608-E R-2014 "Line 21 Data Services"
|
||||
|
||||
:author: Consumer Electronics Association (http://www.ce.org)
|
||||
|
||||
.. _en300294:
|
||||
|
||||
EN 300 294
|
||||
==========
|
||||
|
||||
|
||||
:title: EN 300 294 "625-line television Wide Screen Signalling (WSS)"
|
||||
|
||||
:author: European Telecommunication Standards Institute (http://www.etsi.org)
|
||||
|
||||
.. _ets300231:
|
||||
|
||||
ETS 300 231
|
||||
===========
|
||||
|
||||
|
||||
:title: ETS 300 231 "Specification of the domestic video Programme Delivery Control system (PDC)"
|
||||
|
||||
:author: European Telecommunication Standards Institute (http://www.etsi.org)
|
||||
|
||||
.. _ets300706:
|
||||
|
||||
ETS 300 706
|
||||
===========
|
||||
|
||||
|
||||
:title: ETS 300 706 "Enhanced Teletext specification"
|
||||
|
||||
:author: European Telecommunication Standards Institute (http://www.etsi.org)
|
||||
|
||||
.. _mpeg2part1:
|
||||
|
||||
ISO 13818-1
|
||||
===========
|
||||
|
||||
|
||||
:title: ITU-T Rec. H.222.0 | ISO/IEC 13818-1 "Information technology — Generic coding of moving pictures and associated audio information: Systems"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch), International Organisation for Standardisation (http://www.iso.ch)
|
||||
|
||||
.. _mpeg2part2:
|
||||
|
||||
ISO 13818-2
|
||||
===========
|
||||
|
||||
|
||||
:title: ITU-T Rec. H.262 | ISO/IEC 13818-2 "Information technology — Generic coding of moving pictures and associated audio information: Video"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch), International Organisation for Standardisation (http://www.iso.ch)
|
||||
|
||||
.. _itu470:
|
||||
|
||||
ITU BT.470
|
||||
==========
|
||||
|
||||
|
||||
:title: ITU-R Recommendation BT.470-6 "Conventional Television Systems"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch)
|
||||
|
||||
.. _itu601:
|
||||
|
||||
ITU BT.601
|
||||
==========
|
||||
|
||||
|
||||
:title: ITU-R Recommendation BT.601-5 "Studio Encoding Parameters of Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect Ratios"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch)
|
||||
|
||||
.. _itu653:
|
||||
|
||||
ITU BT.653
|
||||
==========
|
||||
|
||||
|
||||
:title: ITU-R Recommendation BT.653-3 "Teletext systems"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch)
|
||||
|
||||
.. _itu709:
|
||||
|
||||
ITU BT.709
|
||||
==========
|
||||
|
||||
|
||||
:title: ITU-R Recommendation BT.709-5 "Parameter values for the HDTV standards for production and international programme exchange"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch)
|
||||
|
||||
.. _itu1119:
|
||||
|
||||
ITU BT.1119
|
||||
===========
|
||||
|
||||
|
||||
:title: ITU-R Recommendation BT.1119 "625-line television Wide Screen Signalling (WSS)"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch)
|
||||
|
||||
.. _jfif:
|
||||
|
||||
JFIF
|
||||
====
|
||||
|
||||
|
||||
:title: JPEG File Interchange Format
|
||||
:subtitle: Version 1.02
|
||||
|
||||
:author: Independent JPEG Group (http://www.ijg.org)
|
||||
|
||||
.. _itu-t81:
|
||||
|
||||
ITU-T.81
|
||||
========
|
||||
|
||||
|
||||
:title: ITU-T Recommendation T.81 "Information Technology — Digital Compression and Coding of Continous-Tone Still Images — Requirements and Guidelines"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.int)
|
||||
|
||||
.. _w3c-jpeg-jfif:
|
||||
|
||||
W3C JPEG JFIF
|
||||
=============
|
||||
|
||||
|
||||
:title: JPEG JFIF
|
||||
|
||||
:author: The World Wide Web Consortium (http://www.w3.org)
|
||||
|
||||
.. _smpte12m:
|
||||
|
||||
SMPTE 12M
|
||||
=========
|
||||
|
||||
|
||||
:title: SMPTE 12M-1999 "Television, Audio and Film - Time and Control Code"
|
||||
|
||||
:author: Society of Motion Picture and Television Engineers (http://www.smpte.org)
|
||||
|
||||
.. _smpte170m:
|
||||
|
||||
SMPTE 170M
|
||||
==========
|
||||
|
||||
|
||||
:title: SMPTE 170M-1999 "Television - Composite Analog Video Signal - NTSC for Studio Applications"
|
||||
|
||||
:author: Society of Motion Picture and Television Engineers (http://www.smpte.org)
|
||||
|
||||
.. _smpte240m:
|
||||
|
||||
SMPTE 240M
|
||||
==========
|
||||
|
||||
|
||||
:title: SMPTE 240M-1999 "Television - Signal Parameters - 1125-Line High-Definition Production"
|
||||
|
||||
:author: Society of Motion Picture and Television Engineers (http://www.smpte.org)
|
||||
|
||||
.. _smpte431:
|
||||
|
||||
SMPTE RP 431-2
|
||||
==============
|
||||
|
||||
|
||||
:title: SMPTE RP 431-2:2011 "D-Cinema Quality - Reference Projector and Environment"
|
||||
|
||||
:author: Society of Motion Picture and Television Engineers (http://www.smpte.org)
|
||||
|
||||
.. _smpte2084:
|
||||
|
||||
SMPTE ST 2084
|
||||
=============
|
||||
|
||||
|
||||
:title: SMPTE ST 2084:2014 "High Dynamic Range Electro-Optical Transfer Function of Master Reference Displays"
|
||||
|
||||
:author: Society of Motion Picture and Television Engineers (http://www.smpte.org)
|
||||
|
||||
.. _srgb:
|
||||
|
||||
sRGB
|
||||
====
|
||||
|
||||
|
||||
:title: IEC 61966-2-1 ed1.0 "Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB"
|
||||
|
||||
:author: International Electrotechnical Commission (http://www.iec.ch)
|
||||
|
||||
.. _sycc:
|
||||
|
||||
sYCC
|
||||
====
|
||||
|
||||
|
||||
:title: IEC 61966-2-1-am1 ed1.0 "Amendment 1 - Multimedia systems and equipment - Colour measurement and management - Part 2-1: Colour management - Default RGB colour space - sRGB"
|
||||
|
||||
:author: International Electrotechnical Commission (http://www.iec.ch)
|
||||
|
||||
.. _xvycc:
|
||||
|
||||
xvYCC
|
||||
=====
|
||||
|
||||
|
||||
:title: IEC 61966-2-4 ed1.0 "Multimedia systems and equipment - Colour measurement and management - Part 2-4: Colour management - Extended-gamut YCC colour space for video applications - xvYCC"
|
||||
|
||||
:author: International Electrotechnical Commission (http://www.iec.ch)
|
||||
|
||||
.. _adobergb:
|
||||
|
||||
AdobeRGB
|
||||
========
|
||||
|
||||
|
||||
:title: Adobe© RGB (1998) Color Image Encoding Version 2005-05
|
||||
|
||||
:author: Adobe Systems Incorporated (http://www.adobe.com)
|
||||
|
||||
.. _oprgb:
|
||||
|
||||
opRGB
|
||||
=====
|
||||
|
||||
|
||||
:title: IEC 61966-2-5 "Multimedia systems and equipment - Colour measurement and management - Part 2-5: Colour management - Optional RGB colour space - opRGB"
|
||||
|
||||
:author: International Electrotechnical Commission (http://www.iec.ch)
|
||||
|
||||
.. _itu2020:
|
||||
|
||||
ITU BT.2020
|
||||
===========
|
||||
|
||||
|
||||
:title: ITU-R Recommendation BT.2020 (08/2012) "Parameter values for ultra-high definition television systems for production and international programme exchange"
|
||||
|
||||
:author: International Telecommunication Union (http://www.itu.ch)
|
||||
|
||||
.. _tech3213:
|
||||
|
||||
EBU Tech 3213
|
||||
=============
|
||||
|
||||
|
||||
:title: E.B.U. Standard for Chromaticity Tolerances for Studio Monitors"
|
||||
|
||||
:author: European Broadcast Union (http://www.ebu.ch)
|
||||
|
||||
.. _iec62106:
|
||||
|
||||
IEC 62106
|
||||
=========
|
||||
|
||||
|
||||
:title: Specification of the radio data system (RDS) for VHF/FM sound broadcasting in the frequency range from 87,5 to 108,0 MHz
|
||||
|
||||
:author: International Electrotechnical Commission (http://www.iec.ch)
|
||||
|
||||
.. _nrsc4:
|
||||
|
||||
NRSC-4-B
|
||||
========
|
||||
|
||||
|
||||
:title: NRSC-4-B: United States RBDS Standard
|
||||
|
||||
:author: National Radio Systems Committee (http://www.nrscstandards.org)
|
||||
|
||||
.. _iso12232:
|
||||
|
||||
ISO 12232:2006
|
||||
==============
|
||||
|
||||
|
||||
:title: Photography — Digital still cameras — Determination of exposure index, ISO speed ratings, standard output sensitivity, and recommended exposure index
|
||||
|
||||
:author: International Organization for Standardization (http://www.iso.org)
|
||||
|
||||
.. _cea861:
|
||||
|
||||
CEA-861-E
|
||||
=========
|
||||
|
||||
|
||||
:title: A DTV Profile for Uncompressed High Speed Digital Interfaces
|
||||
|
||||
:author: Consumer Electronics Association (http://www.ce.org)
|
||||
|
||||
.. _vesadmt:
|
||||
|
||||
VESA DMT
|
||||
========
|
||||
|
||||
|
||||
:title: VESA and Industry Standards and Guidelines for Computer Display Monitor Timing (DMT)
|
||||
|
||||
:author: Video Electronics Standards Association (http://www.vesa.org)
|
||||
|
||||
.. _vesaedid:
|
||||
|
||||
EDID
|
||||
====
|
||||
|
||||
|
||||
:title: VESA Enhanced Extended Display Identification Data Standard
|
||||
:subtitle: Release A, Revision 2
|
||||
|
||||
:author: Video Electronics Standards Association (http://www.vesa.org)
|
||||
|
||||
.. _hdcp:
|
||||
|
||||
HDCP
|
||||
====
|
||||
|
||||
|
||||
:title: High-bandwidth Digital Content Protection System
|
||||
:subtitle: Revision 1.3
|
||||
|
||||
:author: Digital Content Protection LLC (http://www.digital-cp.com)
|
||||
|
||||
.. _hdmi:
|
||||
|
||||
HDMI
|
||||
====
|
||||
|
||||
|
||||
:title: High-Definition Multimedia Interface
|
||||
:subtitle: Specification Version 1.4a
|
||||
|
||||
:author: HDMI Licensing LLC (http://www.hdmi.org)
|
||||
|
||||
.. _dp:
|
||||
|
||||
DP
|
||||
==
|
||||
|
||||
|
||||
:title: VESA DisplayPort Standard
|
||||
:subtitle: Version 1, Revision 2
|
||||
|
||||
:author: Video Electronics Standards Association (http://www.vesa.org)
|
||||
|
||||
.. _poynton:
|
||||
|
||||
poynton
|
||||
=======
|
||||
|
||||
|
||||
:title: Digital Video and HDTV, Algorithms and Interfaces
|
||||
|
||||
:author: Charles Poynton
|
||||
|
||||
.. _colimg:
|
||||
|
||||
colimg
|
||||
======
|
||||
|
||||
|
||||
:title: Color Imaging: Fundamentals and Applications
|
||||
|
||||
:author: Erik Reinhard et al.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,966 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _buffer:
|
||||
|
||||
*******
|
||||
Buffers
|
||||
*******
|
||||
|
||||
A buffer contains data exchanged by application and driver using one of
|
||||
the Streaming I/O methods. In the multi-planar API, the data is held in
|
||||
planes, while the buffer structure acts as a container for the planes.
|
||||
Only pointers to buffers (planes) are exchanged, the data itself is not
|
||||
copied. These pointers, together with meta-information like timestamps
|
||||
or field parity, are stored in a struct :c:type:`struct v4l2_buffer`,
|
||||
argument to the :ref:`VIDIOC_QUERYBUF <vidioc-querybuf>`,
|
||||
:ref:`VIDIOC_QBUF <vidioc-qbuf>` and
|
||||
:ref:`VIDIOC_DQBUF <vidioc-qbuf>` ioctl. In the multi-planar API,
|
||||
some plane-specific members of struct :c:type:`struct v4l2_buffer`,
|
||||
such as pointers and sizes for each plane, are stored in struct
|
||||
:c:type:`struct v4l2_plane` instead. In that case, struct
|
||||
:c:type:`struct v4l2_buffer` contains an array of plane structures.
|
||||
|
||||
Dequeued video buffers come with timestamps. The driver decides at which
|
||||
part of the frame and with which clock the timestamp is taken. Please
|
||||
see flags in the masks ``V4L2_BUF_FLAG_TIMESTAMP_MASK`` and
|
||||
``V4L2_BUF_FLAG_TSTAMP_SRC_MASK`` in :ref:`buffer-flags`. These flags
|
||||
are always valid and constant across all buffers during the whole video
|
||||
stream. Changes in these flags may take place as a side effect of
|
||||
:ref:`VIDIOC_S_INPUT <vidioc-g-input>` or
|
||||
:ref:`VIDIOC_S_OUTPUT <vidioc-g-output>` however. The
|
||||
``V4L2_BUF_FLAG_TIMESTAMP_COPY`` timestamp type which is used by e.g. on
|
||||
mem-to-mem devices is an exception to the rule: the timestamp source
|
||||
flags are copied from the OUTPUT video buffer to the CAPTURE video
|
||||
buffer.
|
||||
|
||||
|
||||
.. _v4l2-buffer:
|
||||
|
||||
.. flat-table:: struct v4l2_buffer
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u32
|
||||
|
||||
- ``index``
|
||||
|
||||
-
|
||||
- Number of the buffer, set by the application except when calling
|
||||
:ref:`VIDIOC_DQBUF <vidioc-qbuf>`, then it is set by the
|
||||
driver. This field can range from zero to the number of buffers
|
||||
allocated with the :ref:`VIDIOC_REQBUFS <vidioc-reqbufs>` ioctl
|
||||
(struct :ref:`v4l2_requestbuffers <v4l2-requestbuffers>`
|
||||
``count``), plus any buffers allocated with
|
||||
:ref:`VIDIOC_CREATE_BUFS <vidioc-create-bufs>` minus one.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u32
|
||||
|
||||
- ``type``
|
||||
|
||||
-
|
||||
- Type of the buffer, same as struct
|
||||
:ref:`v4l2_format <v4l2-format>` ``type`` or struct
|
||||
:ref:`v4l2_requestbuffers <v4l2-requestbuffers>` ``type``, set
|
||||
by the application. See :ref:`v4l2-buf-type`
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u32
|
||||
|
||||
- ``bytesused``
|
||||
|
||||
-
|
||||
- The number of bytes occupied by the data in the buffer. It depends
|
||||
on the negotiated data format and may change with each buffer for
|
||||
compressed variable size data like JPEG images. Drivers must set
|
||||
this field when ``type`` refers to a capture stream, applications
|
||||
when it refers to an output stream. If the application sets this
|
||||
to 0 for an output stream, then ``bytesused`` will be set to the
|
||||
size of the buffer (see the ``length`` field of this struct) by
|
||||
the driver. For multiplanar formats this field is ignored and the
|
||||
``planes`` pointer is used instead.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u32
|
||||
|
||||
- ``flags``
|
||||
|
||||
-
|
||||
- Flags set by the application or driver, see :ref:`buffer-flags`.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- __u32
|
||||
|
||||
- ``field``
|
||||
|
||||
-
|
||||
- Indicates the field order of the image in the buffer, see
|
||||
:ref:`v4l2-field`. This field is not used when the buffer
|
||||
contains VBI data. Drivers must set it when ``type`` refers to a
|
||||
capture stream, applications when it refers to an output stream.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- struct timeval
|
||||
|
||||
- ``timestamp``
|
||||
|
||||
-
|
||||
- For capture streams this is time when the first data byte was
|
||||
captured, as returned by the :c:func:`clock_gettime()` function
|
||||
for the relevant clock id; see ``V4L2_BUF_FLAG_TIMESTAMP_*`` in
|
||||
:ref:`buffer-flags`. For output streams the driver stores the
|
||||
time at which the last data byte was actually sent out in the
|
||||
``timestamp`` field. This permits applications to monitor the
|
||||
drift between the video and system clock. For output streams that
|
||||
use ``V4L2_BUF_FLAG_TIMESTAMP_COPY`` the application has to fill
|
||||
in the timestamp which will be copied by the driver to the capture
|
||||
stream.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- struct :ref:`v4l2_timecode <v4l2-timecode>`
|
||||
|
||||
- ``timecode``
|
||||
|
||||
-
|
||||
- When ``type`` is ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` and the
|
||||
``V4L2_BUF_FLAG_TIMECODE`` flag is set in ``flags``, this
|
||||
structure contains a frame timecode. In
|
||||
:ref:`V4L2_FIELD_ALTERNATE <v4l2-field>` mode the top and
|
||||
bottom field contain the same timecode. Timecodes are intended to
|
||||
help video editing and are typically recorded on video tapes, but
|
||||
also embedded in compressed formats like MPEG. This field is
|
||||
independent of the ``timestamp`` and ``sequence`` fields.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- __u32
|
||||
|
||||
- ``sequence``
|
||||
|
||||
-
|
||||
- Set by the driver, counting the frames (not fields!) in sequence.
|
||||
This field is set for both input and output devices.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- :cspan:`3`
|
||||
|
||||
In :ref:`V4L2_FIELD_ALTERNATE <v4l2-field>` mode the top and
|
||||
bottom field have the same sequence number. The count starts at
|
||||
zero and includes dropped or repeated frames. A dropped frame was
|
||||
received by an input device but could not be stored due to lack of
|
||||
free buffer space. A repeated frame was displayed again by an
|
||||
output device because the application did not pass new data in
|
||||
time.
|
||||
|
||||
Note this may count the frames received e.g. over USB, without
|
||||
taking into account the frames dropped by the remote hardware due
|
||||
to limited compression throughput or bus bandwidth. These devices
|
||||
identify by not enumerating any video standards, see
|
||||
:ref:`standard`.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- __u32
|
||||
|
||||
- ``memory``
|
||||
|
||||
-
|
||||
- This field must be set by applications and/or drivers in
|
||||
accordance with the selected I/O method. See :ref:`v4l2-memory`
|
||||
|
||||
- .. row 11
|
||||
|
||||
- union
|
||||
|
||||
- ``m``
|
||||
|
||||
- .. row 12
|
||||
|
||||
-
|
||||
- __u32
|
||||
|
||||
- ``offset``
|
||||
|
||||
- For the single-planar API and when ``memory`` is
|
||||
``V4L2_MEMORY_MMAP`` this is the offset of the buffer from the
|
||||
start of the device memory. The value is returned by the driver
|
||||
and apart of serving as parameter to the
|
||||
:ref:`mmap() <func-mmap>` function not useful for applications.
|
||||
See :ref:`mmap` for details
|
||||
|
||||
- .. row 13
|
||||
|
||||
-
|
||||
- unsigned long
|
||||
|
||||
- ``userptr``
|
||||
|
||||
- For the single-planar API and when ``memory`` is
|
||||
``V4L2_MEMORY_USERPTR`` this is a pointer to the buffer (casted to
|
||||
unsigned long type) in virtual memory, set by the application. See
|
||||
:ref:`userp` for details.
|
||||
|
||||
- .. row 14
|
||||
|
||||
-
|
||||
- struct v4l2_plane
|
||||
|
||||
- ``*planes``
|
||||
|
||||
- When using the multi-planar API, contains a userspace pointer to
|
||||
an array of struct :ref:`v4l2_plane <v4l2-plane>`. The size of
|
||||
the array should be put in the ``length`` field of this
|
||||
:c:type:`struct v4l2_buffer` structure.
|
||||
|
||||
- .. row 15
|
||||
|
||||
-
|
||||
- int
|
||||
|
||||
- ``fd``
|
||||
|
||||
- For the single-plane API and when ``memory`` is
|
||||
``V4L2_MEMORY_DMABUF`` this is the file descriptor associated with
|
||||
a DMABUF buffer.
|
||||
|
||||
- .. row 16
|
||||
|
||||
- __u32
|
||||
|
||||
- ``length``
|
||||
|
||||
-
|
||||
- Size of the buffer (not the payload) in bytes for the
|
||||
single-planar API. This is set by the driver based on the calls to
|
||||
:ref:`VIDIOC_REQBUFS <vidioc-reqbufs>` and/or
|
||||
:ref:`VIDIOC_CREATE_BUFS <vidioc-create-bufs>`. For the
|
||||
multi-planar API the application sets this to the number of
|
||||
elements in the ``planes`` array. The driver will fill in the
|
||||
actual number of valid elements in that array.
|
||||
|
||||
- .. row 17
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved2``
|
||||
|
||||
-
|
||||
- A place holder for future extensions. Drivers and applications
|
||||
must set this to 0.
|
||||
|
||||
- .. row 18
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved``
|
||||
|
||||
-
|
||||
- A place holder for future extensions. Drivers and applications
|
||||
must set this to 0.
|
||||
|
||||
|
||||
|
||||
.. _v4l2-plane:
|
||||
|
||||
.. flat-table:: struct v4l2_plane
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u32
|
||||
|
||||
- ``bytesused``
|
||||
|
||||
-
|
||||
- The number of bytes occupied by data in the plane (its payload).
|
||||
Drivers must set this field when ``type`` refers to a capture
|
||||
stream, applications when it refers to an output stream. If the
|
||||
application sets this to 0 for an output stream, then
|
||||
``bytesused`` will be set to the size of the plane (see the
|
||||
``length`` field of this struct) by the driver. Note that the
|
||||
actual image data starts at ``data_offset`` which may not be 0.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u32
|
||||
|
||||
- ``length``
|
||||
|
||||
-
|
||||
- Size in bytes of the plane (not its payload). This is set by the
|
||||
driver based on the calls to
|
||||
:ref:`VIDIOC_REQBUFS <vidioc-reqbufs>` and/or
|
||||
:ref:`VIDIOC_CREATE_BUFS <vidioc-create-bufs>`.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- union
|
||||
|
||||
- ``m``
|
||||
|
||||
-
|
||||
-
|
||||
|
||||
- .. row 4
|
||||
|
||||
-
|
||||
- __u32
|
||||
|
||||
- ``mem_offset``
|
||||
|
||||
- When the memory type in the containing struct
|
||||
:ref:`v4l2_buffer <v4l2-buffer>` is ``V4L2_MEMORY_MMAP``, this
|
||||
is the value that should be passed to :ref:`mmap() <func-mmap>`,
|
||||
similar to the ``offset`` field in struct
|
||||
:ref:`v4l2_buffer <v4l2-buffer>`.
|
||||
|
||||
- .. row 5
|
||||
|
||||
-
|
||||
- unsigned long
|
||||
|
||||
- ``userptr``
|
||||
|
||||
- When the memory type in the containing struct
|
||||
:ref:`v4l2_buffer <v4l2-buffer>` is ``V4L2_MEMORY_USERPTR``,
|
||||
this is a userspace pointer to the memory allocated for this plane
|
||||
by an application.
|
||||
|
||||
- .. row 6
|
||||
|
||||
-
|
||||
- int
|
||||
|
||||
- ``fd``
|
||||
|
||||
- When the memory type in the containing struct
|
||||
:ref:`v4l2_buffer <v4l2-buffer>` is ``V4L2_MEMORY_DMABUF``,
|
||||
this is a file descriptor associated with a DMABUF buffer, similar
|
||||
to the ``fd`` field in struct :ref:`v4l2_buffer <v4l2-buffer>`.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- __u32
|
||||
|
||||
- ``data_offset``
|
||||
|
||||
-
|
||||
- Offset in bytes to video data in the plane. Drivers must set this
|
||||
field when ``type`` refers to a capture stream, applications when
|
||||
it refers to an output stream. Note that data_offset is included
|
||||
in ``bytesused``. So the size of the image in the plane is
|
||||
``bytesused``-``data_offset`` at offset ``data_offset`` from the
|
||||
start of the plane.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- __u32
|
||||
|
||||
- ``reserved[11]``
|
||||
|
||||
-
|
||||
- Reserved for future use. Should be zeroed by drivers and
|
||||
applications.
|
||||
|
||||
|
||||
|
||||
.. _v4l2-buf-type:
|
||||
|
||||
.. flat-table:: enum v4l2_buf_type
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``V4L2_BUF_TYPE_VIDEO_CAPTURE``
|
||||
|
||||
- 1
|
||||
|
||||
- Buffer of a single-planar video capture stream, see
|
||||
:ref:`capture`.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``
|
||||
|
||||
- 9
|
||||
|
||||
- Buffer of a multi-planar video capture stream, see
|
||||
:ref:`capture`.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
|
||||
|
||||
- 2
|
||||
|
||||
- Buffer of a single-planar video output stream, see
|
||||
:ref:`output`.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``
|
||||
|
||||
- 10
|
||||
|
||||
- Buffer of a multi-planar video output stream, see :ref:`output`.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- ``V4L2_BUF_TYPE_VIDEO_OVERLAY``
|
||||
|
||||
- 3
|
||||
|
||||
- Buffer for video overlay, see :ref:`overlay`.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- ``V4L2_BUF_TYPE_VBI_CAPTURE``
|
||||
|
||||
- 4
|
||||
|
||||
- Buffer of a raw VBI capture stream, see :ref:`raw-vbi`.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- ``V4L2_BUF_TYPE_VBI_OUTPUT``
|
||||
|
||||
- 5
|
||||
|
||||
- Buffer of a raw VBI output stream, see :ref:`raw-vbi`.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- ``V4L2_BUF_TYPE_SLICED_VBI_CAPTURE``
|
||||
|
||||
- 6
|
||||
|
||||
- Buffer of a sliced VBI capture stream, see :ref:`sliced`.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- ``V4L2_BUF_TYPE_SLICED_VBI_OUTPUT``
|
||||
|
||||
- 7
|
||||
|
||||
- Buffer of a sliced VBI output stream, see :ref:`sliced`.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- ``V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY``
|
||||
|
||||
- 8
|
||||
|
||||
- Buffer for video output overlay (OSD), see :ref:`osd`.
|
||||
|
||||
- .. row 11
|
||||
|
||||
- ``V4L2_BUF_TYPE_SDR_CAPTURE``
|
||||
|
||||
- 11
|
||||
|
||||
- Buffer for Software Defined Radio (SDR) capture stream, see
|
||||
:ref:`sdr`.
|
||||
|
||||
- .. row 12
|
||||
|
||||
- ``V4L2_BUF_TYPE_SDR_OUTPUT``
|
||||
|
||||
- 12
|
||||
|
||||
- Buffer for Software Defined Radio (SDR) output stream, see
|
||||
:ref:`sdr`.
|
||||
|
||||
|
||||
|
||||
.. _buffer-flags:
|
||||
|
||||
.. flat-table:: Buffer Flags
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``V4L2_BUF_FLAG_MAPPED``
|
||||
|
||||
- 0x00000001
|
||||
|
||||
- The buffer resides in device memory and has been mapped into the
|
||||
application's address space, see :ref:`mmap` for details.
|
||||
Drivers set or clear this flag when the
|
||||
:ref:`VIDIOC_QUERYBUF <vidioc-querybuf>`,
|
||||
:ref:`VIDIOC_QBUF <vidioc-qbuf>` or
|
||||
:ref:`VIDIOC_DQBUF <vidioc-qbuf>` ioctl is called. Set by the
|
||||
driver.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``V4L2_BUF_FLAG_QUEUED``
|
||||
|
||||
- 0x00000002
|
||||
|
||||
- Internally drivers maintain two buffer queues, an incoming and
|
||||
outgoing queue. When this flag is set, the buffer is currently on
|
||||
the incoming queue. It automatically moves to the outgoing queue
|
||||
after the buffer has been filled (capture devices) or displayed
|
||||
(output devices). Drivers set or clear this flag when the
|
||||
``VIDIOC_QUERYBUF`` ioctl is called. After (successful) calling
|
||||
the ``VIDIOC_QBUF``\ ioctl it is always set and after
|
||||
``VIDIOC_DQBUF`` always cleared.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``V4L2_BUF_FLAG_DONE``
|
||||
|
||||
- 0x00000004
|
||||
|
||||
- When this flag is set, the buffer is currently on the outgoing
|
||||
queue, ready to be dequeued from the driver. Drivers set or clear
|
||||
this flag when the ``VIDIOC_QUERYBUF`` ioctl is called. After
|
||||
calling the ``VIDIOC_QBUF`` or ``VIDIOC_DQBUF`` it is always
|
||||
cleared. Of course a buffer cannot be on both queues at the same
|
||||
time, the ``V4L2_BUF_FLAG_QUEUED`` and ``V4L2_BUF_FLAG_DONE`` flag
|
||||
are mutually exclusive. They can be both cleared however, then the
|
||||
buffer is in "dequeued" state, in the application domain so to
|
||||
say.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``V4L2_BUF_FLAG_ERROR``
|
||||
|
||||
- 0x00000040
|
||||
|
||||
- When this flag is set, the buffer has been dequeued successfully,
|
||||
although the data might have been corrupted. This is recoverable,
|
||||
streaming may continue as normal and the buffer may be reused
|
||||
normally. Drivers set this flag when the ``VIDIOC_DQBUF`` ioctl is
|
||||
called.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- ``V4L2_BUF_FLAG_KEYFRAME``
|
||||
|
||||
- 0x00000008
|
||||
|
||||
- Drivers set or clear this flag when calling the ``VIDIOC_DQBUF``
|
||||
ioctl. It may be set by video capture devices when the buffer
|
||||
contains a compressed image which is a key frame (or field), i. e.
|
||||
can be decompressed on its own. Also known as an I-frame.
|
||||
Applications can set this bit when ``type`` refers to an output
|
||||
stream.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- ``V4L2_BUF_FLAG_PFRAME``
|
||||
|
||||
- 0x00000010
|
||||
|
||||
- Similar to ``V4L2_BUF_FLAG_KEYFRAME`` this flags predicted frames
|
||||
or fields which contain only differences to a previous key frame.
|
||||
Applications can set this bit when ``type`` refers to an output
|
||||
stream.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- ``V4L2_BUF_FLAG_BFRAME``
|
||||
|
||||
- 0x00000020
|
||||
|
||||
- Similar to ``V4L2_BUF_FLAG_KEYFRAME`` this flags a bi-directional
|
||||
predicted frame or field which contains only the differences
|
||||
between the current frame and both the preceding and following key
|
||||
frames to specify its content. Applications can set this bit when
|
||||
``type`` refers to an output stream.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- ``V4L2_BUF_FLAG_TIMECODE``
|
||||
|
||||
- 0x00000100
|
||||
|
||||
- The ``timecode`` field is valid. Drivers set or clear this flag
|
||||
when the ``VIDIOC_DQBUF`` ioctl is called. Applications can set
|
||||
this bit and the corresponding ``timecode`` structure when
|
||||
``type`` refers to an output stream.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- ``V4L2_BUF_FLAG_PREPARED``
|
||||
|
||||
- 0x00000400
|
||||
|
||||
- The buffer has been prepared for I/O and can be queued by the
|
||||
application. Drivers set or clear this flag when the
|
||||
:ref:`VIDIOC_QUERYBUF <vidioc-querybuf>`,
|
||||
:ref:`VIDIOC_PREPARE_BUF <vidioc-qbuf>`,
|
||||
:ref:`VIDIOC_QBUF <vidioc-qbuf>` or
|
||||
:ref:`VIDIOC_DQBUF <vidioc-qbuf>` ioctl is called.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- ``V4L2_BUF_FLAG_NO_CACHE_INVALIDATE``
|
||||
|
||||
- 0x00000800
|
||||
|
||||
- Caches do not have to be invalidated for this buffer. Typically
|
||||
applications shall use this flag if the data captured in the
|
||||
buffer is not going to be touched by the CPU, instead the buffer
|
||||
will, probably, be passed on to a DMA-capable hardware unit for
|
||||
further processing or output.
|
||||
|
||||
- .. row 11
|
||||
|
||||
- ``V4L2_BUF_FLAG_NO_CACHE_CLEAN``
|
||||
|
||||
- 0x00001000
|
||||
|
||||
- Caches do not have to be cleaned for this buffer. Typically
|
||||
applications shall use this flag for output buffers if the data in
|
||||
this buffer has not been created by the CPU but by some
|
||||
DMA-capable unit, in which case caches have not been used.
|
||||
|
||||
- .. row 12
|
||||
|
||||
- ``V4L2_BUF_FLAG_LAST``
|
||||
|
||||
- 0x00100000
|
||||
|
||||
- Last buffer produced by the hardware. mem2mem codec drivers set
|
||||
this flag on the capture queue for the last buffer when the
|
||||
:ref:`VIDIOC_QUERYBUF <vidioc-querybuf>` or
|
||||
:ref:`VIDIOC_DQBUF <vidioc-qbuf>` ioctl is called. Due to
|
||||
hardware limitations, the last buffer may be empty. In this case
|
||||
the driver will set the ``bytesused`` field to 0, regardless of
|
||||
the format. Any Any subsequent call to the
|
||||
:ref:`VIDIOC_DQBUF <vidioc-qbuf>` ioctl will not block anymore,
|
||||
but return an EPIPE error code.
|
||||
|
||||
- .. row 13
|
||||
|
||||
- ``V4L2_BUF_FLAG_TIMESTAMP_MASK``
|
||||
|
||||
- 0x0000e000
|
||||
|
||||
- Mask for timestamp types below. To test the timestamp type, mask
|
||||
out bits not belonging to timestamp type by performing a logical
|
||||
and operation with buffer flags and timestamp mask.
|
||||
|
||||
- .. row 14
|
||||
|
||||
- ``V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN``
|
||||
|
||||
- 0x00000000
|
||||
|
||||
- Unknown timestamp type. This type is used by drivers before Linux
|
||||
3.9 and may be either monotonic (see below) or realtime (wall
|
||||
clock). Monotonic clock has been favoured in embedded systems
|
||||
whereas most of the drivers use the realtime clock. Either kinds
|
||||
of timestamps are available in user space via
|
||||
:c:func:`clock_gettime(2)` using clock IDs ``CLOCK_MONOTONIC``
|
||||
and ``CLOCK_REALTIME``, respectively.
|
||||
|
||||
- .. row 15
|
||||
|
||||
- ``V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC``
|
||||
|
||||
- 0x00002000
|
||||
|
||||
- The buffer timestamp has been taken from the ``CLOCK_MONOTONIC``
|
||||
clock. To access the same clock outside V4L2, use
|
||||
:c:func:`clock_gettime(2)`.
|
||||
|
||||
- .. row 16
|
||||
|
||||
- ``V4L2_BUF_FLAG_TIMESTAMP_COPY``
|
||||
|
||||
- 0x00004000
|
||||
|
||||
- The CAPTURE buffer timestamp has been taken from the corresponding
|
||||
OUTPUT buffer. This flag applies only to mem2mem devices.
|
||||
|
||||
- .. row 17
|
||||
|
||||
- ``V4L2_BUF_FLAG_TSTAMP_SRC_MASK``
|
||||
|
||||
- 0x00070000
|
||||
|
||||
- Mask for timestamp sources below. The timestamp source defines the
|
||||
point of time the timestamp is taken in relation to the frame.
|
||||
Logical 'and' operation between the ``flags`` field and
|
||||
``V4L2_BUF_FLAG_TSTAMP_SRC_MASK`` produces the value of the
|
||||
timestamp source. Applications must set the timestamp source when
|
||||
``type`` refers to an output stream and
|
||||
``V4L2_BUF_FLAG_TIMESTAMP_COPY`` is set.
|
||||
|
||||
- .. row 18
|
||||
|
||||
- ``V4L2_BUF_FLAG_TSTAMP_SRC_EOF``
|
||||
|
||||
- 0x00000000
|
||||
|
||||
- End Of Frame. The buffer timestamp has been taken when the last
|
||||
pixel of the frame has been received or the last pixel of the
|
||||
frame has been transmitted. In practice, software generated
|
||||
timestamps will typically be read from the clock a small amount of
|
||||
time after the last pixel has been received or transmitten,
|
||||
depending on the system and other activity in it.
|
||||
|
||||
- .. row 19
|
||||
|
||||
- ``V4L2_BUF_FLAG_TSTAMP_SRC_SOE``
|
||||
|
||||
- 0x00010000
|
||||
|
||||
- Start Of Exposure. The buffer timestamp has been taken when the
|
||||
exposure of the frame has begun. This is only valid for the
|
||||
``V4L2_BUF_TYPE_VIDEO_CAPTURE`` buffer type.
|
||||
|
||||
|
||||
|
||||
.. _v4l2-memory:
|
||||
|
||||
.. flat-table:: enum v4l2_memory
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``V4L2_MEMORY_MMAP``
|
||||
|
||||
- 1
|
||||
|
||||
- The buffer is used for :ref:`memory mapping <mmap>` I/O.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``V4L2_MEMORY_USERPTR``
|
||||
|
||||
- 2
|
||||
|
||||
- The buffer is used for :ref:`user pointer <userp>` I/O.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``V4L2_MEMORY_OVERLAY``
|
||||
|
||||
- 3
|
||||
|
||||
- [to do]
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``V4L2_MEMORY_DMABUF``
|
||||
|
||||
- 4
|
||||
|
||||
- The buffer is used for :ref:`DMA shared buffer <dmabuf>` I/O.
|
||||
|
||||
|
||||
|
||||
Timecodes
|
||||
=========
|
||||
|
||||
The :c:type:`struct v4l2_timecode` structure is designed to hold a
|
||||
:ref:`smpte12m` or similar timecode. (struct
|
||||
:c:type:`struct timeval` timestamps are stored in struct
|
||||
:ref:`v4l2_buffer <v4l2-buffer>` field ``timestamp``.)
|
||||
|
||||
|
||||
.. _v4l2-timecode:
|
||||
|
||||
.. flat-table:: struct v4l2_timecode
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 1 1 2
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- __u32
|
||||
|
||||
- ``type``
|
||||
|
||||
- Frame rate the timecodes are based on, see :ref:`timecode-type`.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- __u32
|
||||
|
||||
- ``flags``
|
||||
|
||||
- Timecode flags, see :ref:`timecode-flags`.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- __u8
|
||||
|
||||
- ``frames``
|
||||
|
||||
- Frame count, 0 ... 23/24/29/49/59, depending on the type of
|
||||
timecode.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- __u8
|
||||
|
||||
- ``seconds``
|
||||
|
||||
- Seconds count, 0 ... 59. This is a binary, not BCD number.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- __u8
|
||||
|
||||
- ``minutes``
|
||||
|
||||
- Minutes count, 0 ... 59. This is a binary, not BCD number.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- __u8
|
||||
|
||||
- ``hours``
|
||||
|
||||
- Hours count, 0 ... 29. This is a binary, not BCD number.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- __u8
|
||||
|
||||
- ``userbits``\ [4]
|
||||
|
||||
- The "user group" bits from the timecode.
|
||||
|
||||
|
||||
|
||||
.. _timecode-type:
|
||||
|
||||
.. flat-table:: Timecode Types
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``V4L2_TC_TYPE_24FPS``
|
||||
|
||||
- 1
|
||||
|
||||
- 24 frames per second, i. e. film.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``V4L2_TC_TYPE_25FPS``
|
||||
|
||||
- 2
|
||||
|
||||
- 25 frames per second, i. e. PAL or SECAM video.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``V4L2_TC_TYPE_30FPS``
|
||||
|
||||
- 3
|
||||
|
||||
- 30 frames per second, i. e. NTSC video.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``V4L2_TC_TYPE_50FPS``
|
||||
|
||||
- 4
|
||||
|
||||
-
|
||||
|
||||
- .. row 5
|
||||
|
||||
- ``V4L2_TC_TYPE_60FPS``
|
||||
|
||||
- 5
|
||||
|
||||
-
|
||||
|
||||
|
||||
|
||||
.. _timecode-flags:
|
||||
|
||||
.. flat-table:: Timecode Flags
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
:widths: 3 1 4
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``V4L2_TC_FLAG_DROPFRAME``
|
||||
|
||||
- 0x0001
|
||||
|
||||
- Indicates "drop frame" semantics for counting frames in 29.97 fps
|
||||
material. When set, frame numbers 0 and 1 at the start of each
|
||||
minute, except minutes 0, 10, 20, 30, 40, 50 are omitted from the
|
||||
count.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``V4L2_TC_FLAG_COLORFRAME``
|
||||
|
||||
- 0x0002
|
||||
|
||||
- The "color frame" flag.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``V4L2_TC_USERBITS_field``
|
||||
|
||||
- 0x000C
|
||||
|
||||
- Field mask for the "binary group flags".
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``V4L2_TC_USERBITS_USERDEFINED``
|
||||
|
||||
- 0x0000
|
||||
|
||||
- Unspecified format.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- ``V4L2_TC_USERBITS_8BITCHARS``
|
||||
|
||||
- 0x0008
|
||||
|
||||
- 8-bit ISO characters.
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _capture-example:
|
||||
|
||||
*********************
|
||||
Video Capture Example
|
||||
*********************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
capture.c
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,675 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
file: media/v4l/capture.c
|
||||
=========================
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/*
|
||||
* V4L2 video capture example
|
||||
*
|
||||
* This program can be used and distributed without restrictions.
|
||||
*
|
||||
* This program is provided with the V4L2 API
|
||||
* see https://linuxtv.org/docs.php for more information
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <getopt.h> /* getopt_long() */
|
||||
|
||||
#include <fcntl.h> /* low-level i/o */
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#include <linux/videodev2.h>
|
||||
|
||||
#define CLEAR(x) memset(&(x), 0, sizeof(x))
|
||||
|
||||
enum io_method {
|
||||
IO_METHOD_READ,
|
||||
IO_METHOD_MMAP,
|
||||
IO_METHOD_USERPTR,
|
||||
};
|
||||
|
||||
struct buffer {
|
||||
void *start;
|
||||
size_t length;
|
||||
};
|
||||
|
||||
static char *dev_name;
|
||||
static enum io_method io = IO_METHOD_MMAP;
|
||||
static int fd = -1;
|
||||
struct buffer *buffers;
|
||||
static unsigned int n_buffers;
|
||||
static int out_buf;
|
||||
static int force_format;
|
||||
static int frame_count = 70;
|
||||
|
||||
static void errno_exit(const char *s)
|
||||
{
|
||||
fprintf(stderr, "%s error %d, %s\\n", s, errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
static int xioctl(int fh, int request, void *arg)
|
||||
{
|
||||
int r;
|
||||
|
||||
do {
|
||||
r = ioctl(fh, request, arg);
|
||||
} while (-1 == r && EINTR == errno);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static void process_image(const void *p, int size)
|
||||
{
|
||||
if (out_buf)
|
||||
fwrite(p, size, 1, stdout);
|
||||
|
||||
fflush(stderr);
|
||||
fprintf(stderr, ".");
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
static int read_frame(void)
|
||||
{
|
||||
struct v4l2_buffer buf;
|
||||
unsigned int i;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
if (-1 == read(fd, buffers[0].start, buffers[0].length)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
return 0;
|
||||
|
||||
case EIO:
|
||||
/* Could ignore EIO, see spec. */
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
errno_exit("read");
|
||||
}
|
||||
}
|
||||
|
||||
process_image(buffers[0].start, buffers[0].length);
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
CLEAR(buf);
|
||||
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
return 0;
|
||||
|
||||
case EIO:
|
||||
/* Could ignore EIO, see spec. */
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
errno_exit("VIDIOC_DQBUF");
|
||||
}
|
||||
}
|
||||
|
||||
assert(buf.index < n_buffers);
|
||||
|
||||
process_image(buffers[buf.index].start, buf.bytesused);
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
CLEAR(buf);
|
||||
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_USERPTR;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
|
||||
switch (errno) {
|
||||
case EAGAIN:
|
||||
return 0;
|
||||
|
||||
case EIO:
|
||||
/* Could ignore EIO, see spec. */
|
||||
|
||||
/* fall through */
|
||||
|
||||
default:
|
||||
errno_exit("VIDIOC_DQBUF");
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < n_buffers; ++i)
|
||||
if (buf.m.userptr == (unsigned long)buffers[i].start
|
||||
&& buf.length == buffers[i].length)
|
||||
break;
|
||||
|
||||
assert(i < n_buffers);
|
||||
|
||||
process_image((void *)buf.m.userptr, buf.bytesused);
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
break;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void mainloop(void)
|
||||
{
|
||||
unsigned int count;
|
||||
|
||||
count = frame_count;
|
||||
|
||||
while (count-- > 0) {
|
||||
for (;;) {
|
||||
fd_set fds;
|
||||
struct timeval tv;
|
||||
int r;
|
||||
|
||||
FD_ZERO(&fds);
|
||||
FD_SET(fd, &fds);
|
||||
|
||||
/* Timeout. */
|
||||
tv.tv_sec = 2;
|
||||
tv.tv_usec = 0;
|
||||
|
||||
r = select(fd + 1, &fds, NULL, NULL, &tv);
|
||||
|
||||
if (-1 == r) {
|
||||
if (EINTR == errno)
|
||||
continue;
|
||||
errno_exit("select");
|
||||
}
|
||||
|
||||
if (0 == r) {
|
||||
fprintf(stderr, "select timeout\\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (read_frame())
|
||||
break;
|
||||
/* EAGAIN - continue select loop. */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void stop_capturing(void)
|
||||
{
|
||||
enum v4l2_buf_type type;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
/* Nothing to do. */
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
case IO_METHOD_USERPTR:
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (-1 == xioctl(fd, VIDIOC_STREAMOFF, &type))
|
||||
errno_exit("VIDIOC_STREAMOFF");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void start_capturing(void)
|
||||
{
|
||||
unsigned int i;
|
||||
enum v4l2_buf_type type;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
/* Nothing to do. */
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
for (i = 0; i < n_buffers; ++i) {
|
||||
struct v4l2_buffer buf;
|
||||
|
||||
CLEAR(buf);
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
buf.index = i;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
}
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
|
||||
errno_exit("VIDIOC_STREAMON");
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
for (i = 0; i < n_buffers; ++i) {
|
||||
struct v4l2_buffer buf;
|
||||
|
||||
CLEAR(buf);
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_USERPTR;
|
||||
buf.index = i;
|
||||
buf.m.userptr = (unsigned long)buffers[i].start;
|
||||
buf.length = buffers[i].length;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
|
||||
errno_exit("VIDIOC_QBUF");
|
||||
}
|
||||
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (-1 == xioctl(fd, VIDIOC_STREAMON, &type))
|
||||
errno_exit("VIDIOC_STREAMON");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void uninit_device(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
free(buffers[0].start);
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
for (i = 0; i < n_buffers; ++i)
|
||||
if (-1 == munmap(buffers[i].start, buffers[i].length))
|
||||
errno_exit("munmap");
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
for (i = 0; i < n_buffers; ++i)
|
||||
free(buffers[i].start);
|
||||
break;
|
||||
}
|
||||
|
||||
free(buffers);
|
||||
}
|
||||
|
||||
static void init_read(unsigned int buffer_size)
|
||||
{
|
||||
buffers = calloc(1, sizeof(*buffers));
|
||||
|
||||
if (!buffers) {
|
||||
fprintf(stderr, "Out of memory\\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
buffers[0].length = buffer_size;
|
||||
buffers[0].start = malloc(buffer_size);
|
||||
|
||||
if (!buffers[0].start) {
|
||||
fprintf(stderr, "Out of memory\\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
static void init_mmap(void)
|
||||
{
|
||||
struct v4l2_requestbuffers req;
|
||||
|
||||
CLEAR(req);
|
||||
|
||||
req.count = 4;
|
||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
req.memory = V4L2_MEMORY_MMAP;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
|
||||
if (EINVAL == errno) {
|
||||
fprintf(stderr, "%s does not support "
|
||||
"memory mappingn", dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
errno_exit("VIDIOC_REQBUFS");
|
||||
}
|
||||
}
|
||||
|
||||
if (req.count < 2) {
|
||||
fprintf(stderr, "Insufficient buffer memory on %s\\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
buffers = calloc(req.count, sizeof(*buffers));
|
||||
|
||||
if (!buffers) {
|
||||
fprintf(stderr, "Out of memory\\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {
|
||||
struct v4l2_buffer buf;
|
||||
|
||||
CLEAR(buf);
|
||||
|
||||
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
buf.memory = V4L2_MEMORY_MMAP;
|
||||
buf.index = n_buffers;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf))
|
||||
errno_exit("VIDIOC_QUERYBUF");
|
||||
|
||||
buffers[n_buffers].length = buf.length;
|
||||
buffers[n_buffers].start =
|
||||
mmap(NULL /* start anywhere */,
|
||||
buf.length,
|
||||
PROT_READ | PROT_WRITE /* required */,
|
||||
MAP_SHARED /* recommended */,
|
||||
fd, buf.m.offset);
|
||||
|
||||
if (MAP_FAILED == buffers[n_buffers].start)
|
||||
errno_exit("mmap");
|
||||
}
|
||||
}
|
||||
|
||||
static void init_userp(unsigned int buffer_size)
|
||||
{
|
||||
struct v4l2_requestbuffers req;
|
||||
|
||||
CLEAR(req);
|
||||
|
||||
req.count = 4;
|
||||
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
req.memory = V4L2_MEMORY_USERPTR;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &req)) {
|
||||
if (EINVAL == errno) {
|
||||
fprintf(stderr, "%s does not support "
|
||||
"user pointer i/on", dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
errno_exit("VIDIOC_REQBUFS");
|
||||
}
|
||||
}
|
||||
|
||||
buffers = calloc(4, sizeof(*buffers));
|
||||
|
||||
if (!buffers) {
|
||||
fprintf(stderr, "Out of memory\\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (n_buffers = 0; n_buffers < 4; ++n_buffers) {
|
||||
buffers[n_buffers].length = buffer_size;
|
||||
buffers[n_buffers].start = malloc(buffer_size);
|
||||
|
||||
if (!buffers[n_buffers].start) {
|
||||
fprintf(stderr, "Out of memory\\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void init_device(void)
|
||||
{
|
||||
struct v4l2_capability cap;
|
||||
struct v4l2_cropcap cropcap;
|
||||
struct v4l2_crop crop;
|
||||
struct v4l2_format fmt;
|
||||
unsigned int min;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) {
|
||||
if (EINVAL == errno) {
|
||||
fprintf(stderr, "%s is no V4L2 device\\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
errno_exit("VIDIOC_QUERYCAP");
|
||||
}
|
||||
}
|
||||
|
||||
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
|
||||
fprintf(stderr, "%s is no video capture device\\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
if (!(cap.capabilities & V4L2_CAP_READWRITE)) {
|
||||
fprintf(stderr, "%s does not support read i/o\\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
case IO_METHOD_USERPTR:
|
||||
if (!(cap.capabilities & V4L2_CAP_STREAMING)) {
|
||||
fprintf(stderr, "%s does not support streaming i/o\\n",
|
||||
dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* Select video input, video standard and tune here. */
|
||||
|
||||
|
||||
CLEAR(cropcap);
|
||||
|
||||
cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) {
|
||||
crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
crop.c = cropcap.defrect; /* reset to default */
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) {
|
||||
switch (errno) {
|
||||
case EINVAL:
|
||||
/* Cropping not supported. */
|
||||
break;
|
||||
default:
|
||||
/* Errors ignored. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Errors ignored. */
|
||||
}
|
||||
|
||||
|
||||
CLEAR(fmt);
|
||||
|
||||
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
if (force_format) {
|
||||
fmt.fmt.pix.width = 640;
|
||||
fmt.fmt.pix.height = 480;
|
||||
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
|
||||
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
|
||||
|
||||
if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt))
|
||||
errno_exit("VIDIOC_S_FMT");
|
||||
|
||||
/* Note VIDIOC_S_FMT may change width and height. */
|
||||
} else {
|
||||
/* Preserve original settings as set by v4l2-ctl for example */
|
||||
if (-1 == xioctl(fd, VIDIOC_G_FMT, &fmt))
|
||||
errno_exit("VIDIOC_G_FMT");
|
||||
}
|
||||
|
||||
/* Buggy driver paranoia. */
|
||||
min = fmt.fmt.pix.width * 2;
|
||||
if (fmt.fmt.pix.bytesperline < min)
|
||||
fmt.fmt.pix.bytesperline = min;
|
||||
min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height;
|
||||
if (fmt.fmt.pix.sizeimage < min)
|
||||
fmt.fmt.pix.sizeimage = min;
|
||||
|
||||
switch (io) {
|
||||
case IO_METHOD_READ:
|
||||
init_read(fmt.fmt.pix.sizeimage);
|
||||
break;
|
||||
|
||||
case IO_METHOD_MMAP:
|
||||
init_mmap();
|
||||
break;
|
||||
|
||||
case IO_METHOD_USERPTR:
|
||||
init_userp(fmt.fmt.pix.sizeimage);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void close_device(void)
|
||||
{
|
||||
if (-1 == close(fd))
|
||||
errno_exit("close");
|
||||
|
||||
fd = -1;
|
||||
}
|
||||
|
||||
static void open_device(void)
|
||||
{
|
||||
struct stat st;
|
||||
|
||||
if (-1 == stat(dev_name, &st)) {
|
||||
fprintf(stderr, "Cannot identify '%s': %d, %s\\n",
|
||||
dev_name, errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (!S_ISCHR(st.st_mode)) {
|
||||
fprintf(stderr, "%s is no devicen", dev_name);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
fd = open(dev_name, O_RDWR /* required */ | O_NONBLOCK, 0);
|
||||
|
||||
if (-1 == fd) {
|
||||
fprintf(stderr, "Cannot open '%s': %d, %s\\n",
|
||||
dev_name, errno, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
static void usage(FILE *fp, int argc, char **argv)
|
||||
{
|
||||
fprintf(fp,
|
||||
"Usage: %s [options]\\n\\n"
|
||||
"Version 1.3\\n"
|
||||
"Options:\\n"
|
||||
"-d | --device name Video device name [%s]n"
|
||||
"-h | --help Print this messagen"
|
||||
"-m | --mmap Use memory mapped buffers [default]n"
|
||||
"-r | --read Use read() callsn"
|
||||
"-u | --userp Use application allocated buffersn"
|
||||
"-o | --output Outputs stream to stdoutn"
|
||||
"-f | --format Force format to 640x480 YUYVn"
|
||||
"-c | --count Number of frames to grab [%i]n"
|
||||
"",
|
||||
argv[0], dev_name, frame_count);
|
||||
}
|
||||
|
||||
static const char short_options[] = "d:hmruofc:";
|
||||
|
||||
static const struct option
|
||||
long_options[] = {
|
||||
{ "device", required_argument, NULL, 'd' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "mmap", no_argument, NULL, 'm' },
|
||||
{ "read", no_argument, NULL, 'r' },
|
||||
{ "userp", no_argument, NULL, 'u' },
|
||||
{ "output", no_argument, NULL, 'o' },
|
||||
{ "format", no_argument, NULL, 'f' },
|
||||
{ "count", required_argument, NULL, 'c' },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
dev_name = "/dev/video0";
|
||||
|
||||
for (;;) {
|
||||
int idx;
|
||||
int c;
|
||||
|
||||
c = getopt_long(argc, argv,
|
||||
short_options, long_options, &idx);
|
||||
|
||||
if (-1 == c)
|
||||
break;
|
||||
|
||||
switch (c) {
|
||||
case 0: /* getopt_long() flag */
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
dev_name = optarg;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
usage(stdout, argc, argv);
|
||||
exit(EXIT_SUCCESS);
|
||||
|
||||
case 'm':
|
||||
io = IO_METHOD_MMAP;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
io = IO_METHOD_READ;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
io = IO_METHOD_USERPTR;
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
out_buf++;
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
force_format++;
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
errno = 0;
|
||||
frame_count = strtol(optarg, NULL, 0);
|
||||
if (errno)
|
||||
errno_exit(optarg);
|
||||
break;
|
||||
|
||||
default:
|
||||
usage(stderr, argc, argv);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
open_device();
|
||||
init_device();
|
||||
start_capturing();
|
||||
mainloop();
|
||||
stop_capturing();
|
||||
uninit_device();
|
||||
close_device();
|
||||
fprintf(stderr, "\\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,172 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _colorspaces:
|
||||
|
||||
***********
|
||||
Colorspaces
|
||||
***********
|
||||
|
||||
'Color' is a very complex concept and depends on physics, chemistry and
|
||||
biology. Just because you have three numbers that describe the 'red',
|
||||
'green' and 'blue' components of the color of a pixel does not mean that
|
||||
you can accurately display that color. A colorspace defines what it
|
||||
actually *means* to have an RGB value of e.g. (255, 0, 0). That is,
|
||||
which color should be reproduced on the screen in a perfectly calibrated
|
||||
environment.
|
||||
|
||||
In order to do that we first need to have a good definition of color,
|
||||
i.e. some way to uniquely and unambiguously define a color so that
|
||||
someone else can reproduce it. Human color vision is trichromatic since
|
||||
the human eye has color receptors that are sensitive to three different
|
||||
wavelengths of light. Hence the need to use three numbers to describe
|
||||
color. Be glad you are not a mantis shrimp as those are sensitive to 12
|
||||
different wavelengths, so instead of RGB we would be using the
|
||||
ABCDEFGHIJKL colorspace...
|
||||
|
||||
Color exists only in the eye and brain and is the result of how strongly
|
||||
color receptors are stimulated. This is based on the Spectral Power
|
||||
Distribution (SPD) which is a graph showing the intensity (radiant
|
||||
power) of the light at wavelengths covering the visible spectrum as it
|
||||
enters the eye. The science of colorimetry is about the relationship
|
||||
between the SPD and color as perceived by the human brain.
|
||||
|
||||
Since the human eye has only three color receptors it is perfectly
|
||||
possible that different SPDs will result in the same stimulation of
|
||||
those receptors and are perceived as the same color, even though the SPD
|
||||
of the light is different.
|
||||
|
||||
In the 1920s experiments were devised to determine the relationship
|
||||
between SPDs and the perceived color and that resulted in the CIE 1931
|
||||
standard that defines spectral weighting functions that model the
|
||||
perception of color. Specifically that standard defines functions that
|
||||
can take an SPD and calculate the stimulus for each color receptor.
|
||||
After some further mathematical transforms these stimuli are known as
|
||||
the *CIE XYZ tristimulus* values and these X, Y and Z values describe a
|
||||
color as perceived by a human unambiguously. These X, Y and Z values are
|
||||
all in the range [0…1].
|
||||
|
||||
The Y value in the CIE XYZ colorspace corresponds to luminance. Often
|
||||
the CIE XYZ colorspace is transformed to the normalized CIE xyY
|
||||
colorspace:
|
||||
|
||||
x = X / (X + Y + Z)
|
||||
|
||||
y = Y / (X + Y + Z)
|
||||
|
||||
The x and y values are the chromaticity coordinates and can be used to
|
||||
define a color without the luminance component Y. It is very confusing
|
||||
to have such similar names for these colorspaces. Just be aware that if
|
||||
colors are specified with lower case 'x' and 'y', then the CIE xyY
|
||||
colorspace is used. Upper case 'X' and 'Y' refer to the CIE XYZ
|
||||
colorspace. Also, y has nothing to do with luminance. Together x and y
|
||||
specify a color, and Y the luminance. That is really all you need to
|
||||
remember from a practical point of view. At the end of this section you
|
||||
will find reading resources that go into much more detail if you are
|
||||
interested.
|
||||
|
||||
A monitor or TV will reproduce colors by emitting light at three
|
||||
different wavelengths, the combination of which will stimulate the color
|
||||
receptors in the eye and thus cause the perception of color.
|
||||
Historically these wavelengths were defined by the red, green and blue
|
||||
phosphors used in the displays. These *color primaries* are part of what
|
||||
defines a colorspace.
|
||||
|
||||
Different display devices will have different primaries and some
|
||||
primaries are more suitable for some display technologies than others.
|
||||
This has resulted in a variety of colorspaces that are used for
|
||||
different display technologies or uses. To define a colorspace you need
|
||||
to define the three color primaries (these are typically defined as x, y
|
||||
chromaticity coordinates from the CIE xyY colorspace) but also the white
|
||||
reference: that is the color obtained when all three primaries are at
|
||||
maximum power. This determines the relative power or energy of the
|
||||
primaries. This is usually chosen to be close to daylight which has been
|
||||
defined as the CIE D65 Illuminant.
|
||||
|
||||
To recapitulate: the CIE XYZ colorspace uniquely identifies colors.
|
||||
Other colorspaces are defined by three chromaticity coordinates defined
|
||||
in the CIE xyY colorspace. Based on those a 3x3 matrix can be
|
||||
constructed that transforms CIE XYZ colors to colors in the new
|
||||
colorspace.
|
||||
|
||||
Both the CIE XYZ and the RGB colorspace that are derived from the
|
||||
specific chromaticity primaries are linear colorspaces. But neither the
|
||||
eye, nor display technology is linear. Doubling the values of all
|
||||
components in the linear colorspace will not be perceived as twice the
|
||||
intensity of the color. So each colorspace also defines a transfer
|
||||
function that takes a linear color component value and transforms it to
|
||||
the non-linear component value, which is a closer match to the
|
||||
non-linear performance of both the eye and displays. Linear component
|
||||
values are denoted RGB, non-linear are denoted as R'G'B'. In general
|
||||
colors used in graphics are all R'G'B', except in openGL which uses
|
||||
linear RGB. Special care should be taken when dealing with openGL to
|
||||
provide linear RGB colors or to use the built-in openGL support to apply
|
||||
the inverse transfer function.
|
||||
|
||||
The final piece that defines a colorspace is a function that transforms
|
||||
non-linear R'G'B' to non-linear Y'CbCr. This function is determined by
|
||||
the so-called luma coefficients. There may be multiple possible Y'CbCr
|
||||
encodings allowed for the same colorspace. Many encodings of color
|
||||
prefer to use luma (Y') and chroma (CbCr) instead of R'G'B'. Since the
|
||||
human eye is more sensitive to differences in luminance than in color
|
||||
this encoding allows one to reduce the amount of color information
|
||||
compared to the luma data. Note that the luma (Y') is unrelated to the Y
|
||||
in the CIE XYZ colorspace. Also note that Y'CbCr is often called YCbCr
|
||||
or YUV even though these are strictly speaking wrong.
|
||||
|
||||
Sometimes people confuse Y'CbCr as being a colorspace. This is not
|
||||
correct, it is just an encoding of an R'G'B' color into luma and chroma
|
||||
values. The underlying colorspace that is associated with the R'G'B'
|
||||
color is also associated with the Y'CbCr color.
|
||||
|
||||
The final step is how the RGB, R'G'B' or Y'CbCr values are quantized.
|
||||
The CIE XYZ colorspace where X, Y and Z are in the range [0…1] describes
|
||||
all colors that humans can perceive, but the transform to another
|
||||
colorspace will produce colors that are outside the [0…1] range. Once
|
||||
clamped to the [0…1] range those colors can no longer be reproduced in
|
||||
that colorspace. This clamping is what reduces the extent or gamut of
|
||||
the colorspace. How the range of [0…1] is translated to integer values
|
||||
in the range of [0…255] (or higher, depending on the color depth) is
|
||||
called the quantization. This is *not* part of the colorspace
|
||||
definition. In practice RGB or R'G'B' values are full range, i.e. they
|
||||
use the full [0…255] range. Y'CbCr values on the other hand are limited
|
||||
range with Y' using [16…235] and Cb and Cr using [16…240].
|
||||
|
||||
Unfortunately, in some cases limited range RGB is also used where the
|
||||
components use the range [16…235]. And full range Y'CbCr also exists
|
||||
using the [0…255] range.
|
||||
|
||||
In order to correctly interpret a color you need to know the
|
||||
quantization range, whether it is R'G'B' or Y'CbCr, the used Y'CbCr
|
||||
encoding and the colorspace. From that information you can calculate the
|
||||
corresponding CIE XYZ color and map that again to whatever colorspace
|
||||
your display device uses.
|
||||
|
||||
The colorspace definition itself consists of the three chromaticity
|
||||
primaries, the white reference chromaticity, a transfer function and the
|
||||
luma coefficients needed to transform R'G'B' to Y'CbCr. While some
|
||||
colorspace standards correctly define all four, quite often the
|
||||
colorspace standard only defines some, and you have to rely on other
|
||||
standards for the missing pieces. The fact that colorspaces are often a
|
||||
mix of different standards also led to very confusing naming conventions
|
||||
where the name of a standard was used to name a colorspace when in fact
|
||||
that standard was part of various other colorspaces as well.
|
||||
|
||||
If you want to read more about colors and colorspaces, then the
|
||||
following resources are useful: :ref:`poynton` is a good practical
|
||||
book for video engineers, :ref:`colimg` has a much broader scope and
|
||||
describes many more aspects of color (physics, chemistry, biology,
|
||||
etc.). The
|
||||
`http://www.brucelindbloom.com <http://www.brucelindbloom.com>`__
|
||||
website is an excellent resource, especially with respect to the
|
||||
mathematics behind colorspace conversions. The wikipedia
|
||||
`CIE 1931 colorspace <http://en.wikipedia.org/wiki/CIE_1931_color_space#CIE_xy_chromaticity_diagram_and_the_CIE_xyY_color_space>`__
|
||||
article is also very useful.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,24 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _common-defs:
|
||||
|
||||
******************************************************
|
||||
Common definitions for V4L2 and V4L2 subdev interfaces
|
||||
******************************************************
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
selections-common
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,56 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _common:
|
||||
|
||||
###################
|
||||
Common API Elements
|
||||
###################
|
||||
Programming a V4L2 device consists of these steps:
|
||||
|
||||
- Opening the device
|
||||
|
||||
- Changing device properties, selecting a video and audio input, video
|
||||
standard, picture brightness a. o.
|
||||
|
||||
- Negotiating a data format
|
||||
|
||||
- Negotiating an input/output method
|
||||
|
||||
- The actual input/output loop
|
||||
|
||||
- Closing the device
|
||||
|
||||
In practice most steps are optional and can be executed out of order. It
|
||||
depends on the V4L2 device type, you can read about the details in
|
||||
:ref:`devices`. In this chapter we will discuss the basic concepts
|
||||
applicable to all devices.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
open
|
||||
querycap
|
||||
app-pri
|
||||
video
|
||||
audio
|
||||
tuner
|
||||
standard
|
||||
dv-timings
|
||||
controls
|
||||
format
|
||||
planar-apis
|
||||
crop
|
||||
selection-api
|
||||
streaming-par
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,29 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _compat:
|
||||
|
||||
*******
|
||||
Changes
|
||||
*******
|
||||
|
||||
The following chapters document the evolution of the V4L2 API, errata or
|
||||
extensions. They are also intended to help application and driver
|
||||
writers to port or update their code.
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
diff-v4l
|
||||
hist-v4l2
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,536 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _control:
|
||||
|
||||
*************
|
||||
User Controls
|
||||
*************
|
||||
|
||||
Devices typically have a number of user-settable controls such as
|
||||
brightness, saturation and so on, which would be presented to the user
|
||||
on a graphical user interface. But, different devices will have
|
||||
different controls available, and furthermore, the range of possible
|
||||
values, and the default value will vary from device to device. The
|
||||
control ioctls provide the information and a mechanism to create a nice
|
||||
user interface for these controls that will work correctly with any
|
||||
device.
|
||||
|
||||
All controls are accessed using an ID value. V4L2 defines several IDs
|
||||
for specific purposes. Drivers can also implement their own custom
|
||||
controls using ``V4L2_CID_PRIVATE_BASE`` [1]_ and higher values. The
|
||||
pre-defined control IDs have the prefix ``V4L2_CID_``, and are listed in
|
||||
:ref:`control-id`. The ID is used when querying the attributes of a
|
||||
control, and when getting or setting the current value.
|
||||
|
||||
Generally applications should present controls to the user without
|
||||
assumptions about their purpose. Each control comes with a name string
|
||||
the user is supposed to understand. When the purpose is non-intuitive
|
||||
the driver writer should provide a user manual, a user interface plug-in
|
||||
or a driver specific panel application. Predefined IDs were introduced
|
||||
to change a few controls programmatically, for example to mute a device
|
||||
during a channel switch.
|
||||
|
||||
Drivers may enumerate different controls after switching the current
|
||||
video input or output, tuner or modulator, or audio input or output.
|
||||
Different in the sense of other bounds, another default and current
|
||||
value, step size or other menu items. A control with a certain *custom*
|
||||
ID can also change name and type.
|
||||
|
||||
If a control is not applicable to the current configuration of the
|
||||
device (for example, it doesn't apply to the current video input)
|
||||
drivers set the ``V4L2_CTRL_FLAG_INACTIVE`` flag.
|
||||
|
||||
Control values are stored globally, they do not change when switching
|
||||
except to stay within the reported bounds. They also do not change e. g.
|
||||
when the device is opened or closed, when the tuner radio frequency is
|
||||
changed or generally never without application request.
|
||||
|
||||
V4L2 specifies an event mechanism to notify applications when controls
|
||||
change value (see
|
||||
:ref:`VIDIOC_SUBSCRIBE_EVENT <vidioc-subscribe-event>`, event
|
||||
``V4L2_EVENT_CTRL``), panel applications might want to make use of that
|
||||
in order to always reflect the correct control value.
|
||||
|
||||
All controls use machine endianness.
|
||||
|
||||
|
||||
.. _control-id:
|
||||
|
||||
Control IDs
|
||||
===========
|
||||
|
||||
``V4L2_CID_BASE``
|
||||
First predefined ID, equal to ``V4L2_CID_BRIGHTNESS``.
|
||||
|
||||
``V4L2_CID_USER_BASE``
|
||||
Synonym of ``V4L2_CID_BASE``.
|
||||
|
||||
``V4L2_CID_BRIGHTNESS`` ``(integer)``
|
||||
Picture brightness, or more precisely, the black level.
|
||||
|
||||
``V4L2_CID_CONTRAST`` ``(integer)``
|
||||
Picture contrast or luma gain.
|
||||
|
||||
``V4L2_CID_SATURATION`` ``(integer)``
|
||||
Picture color saturation or chroma gain.
|
||||
|
||||
``V4L2_CID_HUE`` ``(integer)``
|
||||
Hue or color balance.
|
||||
|
||||
``V4L2_CID_AUDIO_VOLUME`` ``(integer)``
|
||||
Overall audio volume. Note some drivers also provide an OSS or ALSA
|
||||
mixer interface.
|
||||
|
||||
``V4L2_CID_AUDIO_BALANCE`` ``(integer)``
|
||||
Audio stereo balance. Minimum corresponds to all the way left,
|
||||
maximum to right.
|
||||
|
||||
``V4L2_CID_AUDIO_BASS`` ``(integer)``
|
||||
Audio bass adjustment.
|
||||
|
||||
``V4L2_CID_AUDIO_TREBLE`` ``(integer)``
|
||||
Audio treble adjustment.
|
||||
|
||||
``V4L2_CID_AUDIO_MUTE`` ``(boolean)``
|
||||
Mute audio, i. e. set the volume to zero, however without affecting
|
||||
``V4L2_CID_AUDIO_VOLUME``. Like ALSA drivers, V4L2 drivers must mute
|
||||
at load time to avoid excessive noise. Actually the entire device
|
||||
should be reset to a low power consumption state.
|
||||
|
||||
``V4L2_CID_AUDIO_LOUDNESS`` ``(boolean)``
|
||||
Loudness mode (bass boost).
|
||||
|
||||
``V4L2_CID_BLACK_LEVEL`` ``(integer)``
|
||||
Another name for brightness (not a synonym of
|
||||
``V4L2_CID_BRIGHTNESS``). This control is deprecated and should not
|
||||
be used in new drivers and applications.
|
||||
|
||||
``V4L2_CID_AUTO_WHITE_BALANCE`` ``(boolean)``
|
||||
Automatic white balance (cameras).
|
||||
|
||||
``V4L2_CID_DO_WHITE_BALANCE`` ``(button)``
|
||||
This is an action control. When set (the value is ignored), the
|
||||
device will do a white balance and then hold the current setting.
|
||||
Contrast this with the boolean ``V4L2_CID_AUTO_WHITE_BALANCE``,
|
||||
which, when activated, keeps adjusting the white balance.
|
||||
|
||||
``V4L2_CID_RED_BALANCE`` ``(integer)``
|
||||
Red chroma balance.
|
||||
|
||||
``V4L2_CID_BLUE_BALANCE`` ``(integer)``
|
||||
Blue chroma balance.
|
||||
|
||||
``V4L2_CID_GAMMA`` ``(integer)``
|
||||
Gamma adjust.
|
||||
|
||||
``V4L2_CID_WHITENESS`` ``(integer)``
|
||||
Whiteness for grey-scale devices. This is a synonym for
|
||||
``V4L2_CID_GAMMA``. This control is deprecated and should not be
|
||||
used in new drivers and applications.
|
||||
|
||||
``V4L2_CID_EXPOSURE`` ``(integer)``
|
||||
Exposure (cameras). [Unit?]
|
||||
|
||||
``V4L2_CID_AUTOGAIN`` ``(boolean)``
|
||||
Automatic gain/exposure control.
|
||||
|
||||
``V4L2_CID_GAIN`` ``(integer)``
|
||||
Gain control.
|
||||
|
||||
``V4L2_CID_HFLIP`` ``(boolean)``
|
||||
Mirror the picture horizontally.
|
||||
|
||||
``V4L2_CID_VFLIP`` ``(boolean)``
|
||||
Mirror the picture vertically.
|
||||
|
||||
.. _`v4l2-power-line-frequency`:
|
||||
|
||||
``V4L2_CID_POWER_LINE_FREQUENCY`` ``(enum)``
|
||||
Enables a power line frequency filter to avoid flicker. Possible
|
||||
values for ``enum v4l2_power_line_frequency`` are:
|
||||
``V4L2_CID_POWER_LINE_FREQUENCY_DISABLED`` (0),
|
||||
``V4L2_CID_POWER_LINE_FREQUENCY_50HZ`` (1),
|
||||
``V4L2_CID_POWER_LINE_FREQUENCY_60HZ`` (2) and
|
||||
``V4L2_CID_POWER_LINE_FREQUENCY_AUTO`` (3).
|
||||
|
||||
``V4L2_CID_HUE_AUTO`` ``(boolean)``
|
||||
Enables automatic hue control by the device. The effect of setting
|
||||
``V4L2_CID_HUE`` while automatic hue control is enabled is
|
||||
undefined, drivers should ignore such request.
|
||||
|
||||
``V4L2_CID_WHITE_BALANCE_TEMPERATURE`` ``(integer)``
|
||||
This control specifies the white balance settings as a color
|
||||
temperature in Kelvin. A driver should have a minimum of 2800
|
||||
(incandescent) to 6500 (daylight). For more information about color
|
||||
temperature see
|
||||
`Wikipedia <http://en.wikipedia.org/wiki/Color_temperature>`__.
|
||||
|
||||
``V4L2_CID_SHARPNESS`` ``(integer)``
|
||||
Adjusts the sharpness filters in a camera. The minimum value
|
||||
disables the filters, higher values give a sharper picture.
|
||||
|
||||
``V4L2_CID_BACKLIGHT_COMPENSATION`` ``(integer)``
|
||||
Adjusts the backlight compensation in a camera. The minimum value
|
||||
disables backlight compensation.
|
||||
|
||||
``V4L2_CID_CHROMA_AGC`` ``(boolean)``
|
||||
Chroma automatic gain control.
|
||||
|
||||
``V4L2_CID_CHROMA_GAIN`` ``(integer)``
|
||||
Adjusts the Chroma gain control (for use when chroma AGC is
|
||||
disabled).
|
||||
|
||||
``V4L2_CID_COLOR_KILLER`` ``(boolean)``
|
||||
Enable the color killer (i. e. force a black & white image in case
|
||||
of a weak video signal).
|
||||
|
||||
.. _`v4l2-colorfx`:
|
||||
|
||||
``V4L2_CID_COLORFX`` ``(enum)``
|
||||
Selects a color effect. The following values are defined:
|
||||
|
||||
|
||||
|
||||
.. flat-table::
|
||||
:header-rows: 0
|
||||
:stub-columns: 0
|
||||
|
||||
|
||||
- .. row 1
|
||||
|
||||
- ``V4L2_COLORFX_NONE``
|
||||
|
||||
- Color effect is disabled.
|
||||
|
||||
- .. row 2
|
||||
|
||||
- ``V4L2_COLORFX_ANTIQUE``
|
||||
|
||||
- An aging (old photo) effect.
|
||||
|
||||
- .. row 3
|
||||
|
||||
- ``V4L2_COLORFX_ART_FREEZE``
|
||||
|
||||
- Frost color effect.
|
||||
|
||||
- .. row 4
|
||||
|
||||
- ``V4L2_COLORFX_AQUA``
|
||||
|
||||
- Water color, cool tone.
|
||||
|
||||
- .. row 5
|
||||
|
||||
- ``V4L2_COLORFX_BW``
|
||||
|
||||
- Black and white.
|
||||
|
||||
- .. row 6
|
||||
|
||||
- ``V4L2_COLORFX_EMBOSS``
|
||||
|
||||
- Emboss, the highlights and shadows replace light/dark boundaries
|
||||
and low contrast areas are set to a gray background.
|
||||
|
||||
- .. row 7
|
||||
|
||||
- ``V4L2_COLORFX_GRASS_GREEN``
|
||||
|
||||
- Grass green.
|
||||
|
||||
- .. row 8
|
||||
|
||||
- ``V4L2_COLORFX_NEGATIVE``
|
||||
|
||||
- Negative.
|
||||
|
||||
- .. row 9
|
||||
|
||||
- ``V4L2_COLORFX_SEPIA``
|
||||
|
||||
- Sepia tone.
|
||||
|
||||
- .. row 10
|
||||
|
||||
- ``V4L2_COLORFX_SKETCH``
|
||||
|
||||
- Sketch.
|
||||
|
||||
- .. row 11
|
||||
|
||||
- ``V4L2_COLORFX_SKIN_WHITEN``
|
||||
|
||||
- Skin whiten.
|
||||
|
||||
- .. row 12
|
||||
|
||||
- ``V4L2_COLORFX_SKY_BLUE``
|
||||
|
||||
- Sky blue.
|
||||
|
||||
- .. row 13
|
||||
|
||||
- ``V4L2_COLORFX_SOLARIZATION``
|
||||
|
||||
- Solarization, the image is partially reversed in tone, only color
|
||||
values above or below a certain threshold are inverted.
|
||||
|
||||
- .. row 14
|
||||
|
||||
- ``V4L2_COLORFX_SILHOUETTE``
|
||||
|
||||
- Silhouette (outline).
|
||||
|
||||
- .. row 15
|
||||
|
||||
- ``V4L2_COLORFX_VIVID``
|
||||
|
||||
- Vivid colors.
|
||||
|
||||
- .. row 16
|
||||
|
||||
- ``V4L2_COLORFX_SET_CBCR``
|
||||
|
||||
- The Cb and Cr chroma components are replaced by fixed coefficients
|
||||
determined by ``V4L2_CID_COLORFX_CBCR`` control.
|
||||
|
||||
|
||||
|
||||
``V4L2_CID_COLORFX_CBCR`` ``(integer)``
|
||||
Determines the Cb and Cr coefficients for ``V4L2_COLORFX_SET_CBCR``
|
||||
color effect. Bits [7:0] of the supplied 32 bit value are
|
||||
interpreted as Cr component, bits [15:8] as Cb component and bits
|
||||
[31:16] must be zero.
|
||||
|
||||
``V4L2_CID_AUTOBRIGHTNESS`` ``(boolean)``
|
||||
Enable Automatic Brightness.
|
||||
|
||||
``V4L2_CID_ROTATE`` ``(integer)``
|
||||
Rotates the image by specified angle. Common angles are 90, 270 and
|
||||
180. Rotating the image to 90 and 270 will reverse the height and
|
||||
width of the display window. It is necessary to set the new height
|
||||
and width of the picture using the
|
||||
:ref:`VIDIOC_S_FMT <vidioc-g-fmt>` ioctl according to the
|
||||
rotation angle selected.
|
||||
|
||||
``V4L2_CID_BG_COLOR`` ``(integer)``
|
||||
Sets the background color on the current output device. Background
|
||||
color needs to be specified in the RGB24 format. The supplied 32 bit
|
||||
value is interpreted as bits 0-7 Red color information, bits 8-15
|
||||
Green color information, bits 16-23 Blue color information and bits
|
||||
24-31 must be zero.
|
||||
|
||||
``V4L2_CID_ILLUMINATORS_1 V4L2_CID_ILLUMINATORS_2`` ``(boolean)``
|
||||
Switch on or off the illuminator 1 or 2 of the device (usually a
|
||||
microscope).
|
||||
|
||||
``V4L2_CID_MIN_BUFFERS_FOR_CAPTURE`` ``(integer)``
|
||||
This is a read-only control that can be read by the application and
|
||||
used as a hint to determine the number of CAPTURE buffers to pass to
|
||||
REQBUFS. The value is the minimum number of CAPTURE buffers that is
|
||||
necessary for hardware to work.
|
||||
|
||||
``V4L2_CID_MIN_BUFFERS_FOR_OUTPUT`` ``(integer)``
|
||||
This is a read-only control that can be read by the application and
|
||||
used as a hint to determine the number of OUTPUT buffers to pass to
|
||||
REQBUFS. The value is the minimum number of OUTPUT buffers that is
|
||||
necessary for hardware to work.
|
||||
|
||||
.. _`v4l2-alpha-component`:
|
||||
|
||||
``V4L2_CID_ALPHA_COMPONENT`` ``(integer)``
|
||||
Sets the alpha color component. When a capture device (or capture
|
||||
queue of a mem-to-mem device) produces a frame format that includes
|
||||
an alpha component (e.g.
|
||||
:ref:`packed RGB image formats <rgb-formats>`) and the alpha value
|
||||
is not defined by the device or the mem-to-mem input data this
|
||||
control lets you select the alpha component value of all pixels.
|
||||
When an output device (or output queue of a mem-to-mem device)
|
||||
consumes a frame format that doesn't include an alpha component and
|
||||
the device supports alpha channel processing this control lets you
|
||||
set the alpha component value of all pixels for further processing
|
||||
in the device.
|
||||
|
||||
``V4L2_CID_LASTP1``
|
||||
End of the predefined control IDs (currently
|
||||
``V4L2_CID_ALPHA_COMPONENT`` + 1).
|
||||
|
||||
``V4L2_CID_PRIVATE_BASE``
|
||||
ID of the first custom (driver specific) control. Applications
|
||||
depending on particular custom controls should check the driver name
|
||||
and version, see :ref:`querycap`.
|
||||
|
||||
Applications can enumerate the available controls with the
|
||||
:ref:`VIDIOC_QUERYCTRL <vidioc-queryctrl>` and
|
||||
:ref:`VIDIOC_QUERYMENU <vidioc-queryctrl>` ioctls, get and set a
|
||||
control value with the :ref:`VIDIOC_G_CTRL <vidioc-g-ctrl>` and
|
||||
:ref:`VIDIOC_S_CTRL <vidioc-g-ctrl>` ioctls. Drivers must implement
|
||||
``VIDIOC_QUERYCTRL``, ``VIDIOC_G_CTRL`` and ``VIDIOC_S_CTRL`` when the
|
||||
device has one or more controls, ``VIDIOC_QUERYMENU`` when it has one or
|
||||
more menu type controls.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_queryctrl queryctrl;
|
||||
struct v4l2_querymenu querymenu;
|
||||
|
||||
static void enumerate_menu(void)
|
||||
{
|
||||
printf(" Menu items:\\n");
|
||||
|
||||
memset(&querymenu, 0, sizeof(querymenu));
|
||||
querymenu.id = queryctrl.id;
|
||||
|
||||
for (querymenu.index = queryctrl.minimum;
|
||||
querymenu.index <= queryctrl.maximum;
|
||||
querymenu.index++) {
|
||||
if (0 == ioctl(fd, VIDIOC_QUERYMENU, &querymenu)) {
|
||||
printf(" %s\\n", querymenu.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
memset(&queryctrl, 0, sizeof(queryctrl));
|
||||
|
||||
for (queryctrl.id = V4L2_CID_BASE;
|
||||
queryctrl.id < V4L2_CID_LASTP1;
|
||||
queryctrl.id++) {
|
||||
if (0 == ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
||||
if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
|
||||
continue;
|
||||
|
||||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu();
|
||||
} else {
|
||||
if (errno == EINVAL)
|
||||
continue;
|
||||
|
||||
perror("VIDIOC_QUERYCTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
for (queryctrl.id = V4L2_CID_PRIVATE_BASE;;
|
||||
queryctrl.id++) {
|
||||
if (0 == ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
||||
if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
|
||||
continue;
|
||||
|
||||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu();
|
||||
} else {
|
||||
if (errno == EINVAL)
|
||||
break;
|
||||
|
||||
perror("VIDIOC_QUERYCTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
memset(&queryctrl, 0, sizeof(queryctrl));
|
||||
|
||||
queryctrl.id = V4L2_CTRL_CLASS_USER | V4L2_CTRL_FLAG_NEXT_CTRL;
|
||||
while (0 == ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
||||
if (V4L2_CTRL_ID2CLASS(queryctrl.id) != V4L2_CTRL_CLASS_USER)
|
||||
break;
|
||||
if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED)
|
||||
continue;
|
||||
|
||||
printf("Control %s\\n", queryctrl.name);
|
||||
|
||||
if (queryctrl.type == V4L2_CTRL_TYPE_MENU)
|
||||
enumerate_menu();
|
||||
|
||||
queryctrl.id |= V4L2_CTRL_FLAG_NEXT_CTRL;
|
||||
}
|
||||
if (errno != EINVAL) {
|
||||
perror("VIDIOC_QUERYCTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_queryctrl queryctrl;
|
||||
struct v4l2_control control;
|
||||
|
||||
memset(&queryctrl, 0, sizeof(queryctrl));
|
||||
queryctrl.id = V4L2_CID_BRIGHTNESS;
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_QUERYCTRL, &queryctrl)) {
|
||||
if (errno != EINVAL) {
|
||||
perror("VIDIOC_QUERYCTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
} else {
|
||||
printf("V4L2_CID_BRIGHTNESS is not supportedn");
|
||||
}
|
||||
} else if (queryctrl.flags & V4L2_CTRL_FLAG_DISABLED) {
|
||||
printf("V4L2_CID_BRIGHTNESS is not supportedn");
|
||||
} else {
|
||||
memset(&control, 0, sizeof (control));
|
||||
control.id = V4L2_CID_BRIGHTNESS;
|
||||
control.value = queryctrl.default_value;
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_S_CTRL, &control)) {
|
||||
perror("VIDIOC_S_CTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
memset(&control, 0, sizeof(control));
|
||||
control.id = V4L2_CID_CONTRAST;
|
||||
|
||||
if (0 == ioctl(fd, VIDIOC_G_CTRL, &control)) {
|
||||
control.value += 1;
|
||||
|
||||
/* The driver may clamp the value or return ERANGE, ignored here */
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_S_CTRL, &control)
|
||||
&& errno != ERANGE) {
|
||||
perror("VIDIOC_S_CTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
/* Ignore if V4L2_CID_CONTRAST is unsupported */
|
||||
} else if (errno != EINVAL) {
|
||||
perror("VIDIOC_G_CTRL");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
control.id = V4L2_CID_AUDIO_MUTE;
|
||||
control.value = 1; /* silence */
|
||||
|
||||
/* Errors ignored */
|
||||
ioctl(fd, VIDIOC_S_CTRL, &control);
|
||||
|
||||
.. [1]
|
||||
The use of ``V4L2_CID_PRIVATE_BASE`` is problematic because different
|
||||
drivers may use the same ``V4L2_CID_PRIVATE_BASE`` ID for different
|
||||
controls. This makes it hard to programatically set such controls
|
||||
since the meaning of the control with that ID is driver dependent. In
|
||||
order to resolve this drivers use unique IDs and the
|
||||
``V4L2_CID_PRIVATE_BASE`` IDs are mapped to those unique IDs by the
|
||||
kernel. Consider these ``V4L2_CID_PRIVATE_BASE`` IDs as aliases to
|
||||
the real IDs.
|
||||
|
||||
Many applications today still use the ``V4L2_CID_PRIVATE_BASE`` IDs
|
||||
instead of using :ref:`VIDIOC_QUERYCTRL <vidioc-queryctrl>` with
|
||||
the ``V4L2_CTRL_FLAG_NEXT_CTRL`` flag to enumerate all IDs, so
|
||||
support for ``V4L2_CID_PRIVATE_BASE`` is still around.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,18 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
control
|
||||
extended-controls
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,300 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _crop:
|
||||
|
||||
*************************************
|
||||
Image Cropping, Insertion and Scaling
|
||||
*************************************
|
||||
|
||||
Some video capture devices can sample a subsection of the picture and
|
||||
shrink or enlarge it to an image of arbitrary size. We call these
|
||||
abilities cropping and scaling. Some video output devices can scale an
|
||||
image up or down and insert it at an arbitrary scan line and horizontal
|
||||
offset into a video signal.
|
||||
|
||||
Applications can use the following API to select an area in the video
|
||||
signal, query the default area and the hardware limits. *Despite their
|
||||
name, the :ref:`VIDIOC_CROPCAP <vidioc-cropcap>`,
|
||||
:ref:`VIDIOC_G_CROP <vidioc-g-crop>` and
|
||||
:ref:`VIDIOC_S_CROP <vidioc-g-crop>` ioctls apply to input as well
|
||||
as output devices.*
|
||||
|
||||
Scaling requires a source and a target. On a video capture or overlay
|
||||
device the source is the video signal, and the cropping ioctls determine
|
||||
the area actually sampled. The target are images read by the application
|
||||
or overlaid onto the graphics screen. Their size (and position for an
|
||||
overlay) is negotiated with the :ref:`VIDIOC_G_FMT <vidioc-g-fmt>`
|
||||
and :ref:`VIDIOC_S_FMT <vidioc-g-fmt>` ioctls.
|
||||
|
||||
On a video output device the source are the images passed in by the
|
||||
application, and their size is again negotiated with the
|
||||
``VIDIOC_G/S_FMT`` ioctls, or may be encoded in a compressed video
|
||||
stream. The target is the video signal, and the cropping ioctls
|
||||
determine the area where the images are inserted.
|
||||
|
||||
Source and target rectangles are defined even if the device does not
|
||||
support scaling or the ``VIDIOC_G/S_CROP`` ioctls. Their size (and
|
||||
position where applicable) will be fixed in this case. *All capture and
|
||||
output device must support the ``VIDIOC_CROPCAP`` ioctl such that
|
||||
applications can determine if scaling takes place.*
|
||||
|
||||
|
||||
Cropping Structures
|
||||
===================
|
||||
|
||||
|
||||
.. _crop-scale:
|
||||
|
||||
.. figure:: crop_files/crop.*
|
||||
:alt: crop.pdf / crop.gif
|
||||
:align: center
|
||||
|
||||
Image Cropping, Insertion and Scaling
|
||||
|
||||
The cropping, insertion and scaling process
|
||||
|
||||
|
||||
|
||||
For capture devices the coordinates of the top left corner, width and
|
||||
height of the area which can be sampled is given by the ``bounds``
|
||||
substructure of the struct :ref:`v4l2_cropcap <v4l2-cropcap>`
|
||||
returned by the ``VIDIOC_CROPCAP`` ioctl. To support a wide range of
|
||||
hardware this specification does not define an origin or units. However
|
||||
by convention drivers should horizontally count unscaled samples
|
||||
relative to 0H (the leading edge of the horizontal sync pulse, see
|
||||
:ref:`vbi-hsync`). Vertically ITU-R line numbers of the first field
|
||||
(:ref:`vbi-525`, :ref:`vbi-625`), multiplied by two if the driver
|
||||
can capture both fields.
|
||||
|
||||
The top left corner, width and height of the source rectangle, that is
|
||||
the area actually sampled, is given by struct
|
||||
:ref:`v4l2_crop <v4l2-crop>` using the same coordinate system as
|
||||
struct :ref:`v4l2_cropcap <v4l2-cropcap>`. Applications can use the
|
||||
``VIDIOC_G_CROP`` and ``VIDIOC_S_CROP`` ioctls to get and set this
|
||||
rectangle. It must lie completely within the capture boundaries and the
|
||||
driver may further adjust the requested size and/or position according
|
||||
to hardware limitations.
|
||||
|
||||
Each capture device has a default source rectangle, given by the
|
||||
``defrect`` substructure of struct
|
||||
:ref:`v4l2_cropcap <v4l2-cropcap>`. The center of this rectangle
|
||||
shall align with the center of the active picture area of the video
|
||||
signal, and cover what the driver writer considers the complete picture.
|
||||
Drivers shall reset the source rectangle to the default when the driver
|
||||
is first loaded, but not later.
|
||||
|
||||
For output devices these structures and ioctls are used accordingly,
|
||||
defining the *target* rectangle where the images will be inserted into
|
||||
the video signal.
|
||||
|
||||
|
||||
Scaling Adjustments
|
||||
===================
|
||||
|
||||
Video hardware can have various cropping, insertion and scaling
|
||||
limitations. It may only scale up or down, support only discrete scaling
|
||||
factors, or have different scaling abilities in horizontal and vertical
|
||||
direction. Also it may not support scaling at all. At the same time the
|
||||
struct :ref:`v4l2_crop <v4l2-crop>` rectangle may have to be aligned,
|
||||
and both the source and target rectangles may have arbitrary upper and
|
||||
lower size limits. In particular the maximum ``width`` and ``height`` in
|
||||
struct :ref:`v4l2_crop <v4l2-crop>` may be smaller than the struct
|
||||
:ref:`v4l2_cropcap <v4l2-cropcap>`. ``bounds`` area. Therefore, as
|
||||
usual, drivers are expected to adjust the requested parameters and
|
||||
return the actual values selected.
|
||||
|
||||
Applications can change the source or the target rectangle first, as
|
||||
they may prefer a particular image size or a certain area in the video
|
||||
signal. If the driver has to adjust both to satisfy hardware
|
||||
limitations, the last requested rectangle shall take priority, and the
|
||||
driver should preferably adjust the opposite one. The
|
||||
:ref:`VIDIOC_TRY_FMT <vidioc-g-fmt>` ioctl however shall not change
|
||||
the driver state and therefore only adjust the requested rectangle.
|
||||
|
||||
Suppose scaling on a video capture device is restricted to a factor 1:1
|
||||
or 2:1 in either direction and the target image size must be a multiple
|
||||
of 16 × 16 pixels. The source cropping rectangle is set to defaults,
|
||||
which are also the upper limit in this example, of 640 × 400 pixels at
|
||||
offset 0, 0. An application requests an image size of 300 × 225 pixels,
|
||||
assuming video will be scaled down from the "full picture" accordingly.
|
||||
The driver sets the image size to the closest possible values 304 × 224,
|
||||
then chooses the cropping rectangle closest to the requested size, that
|
||||
is 608 × 224 (224 × 2:1 would exceed the limit 400). The offset 0, 0 is
|
||||
still valid, thus unmodified. Given the default cropping rectangle
|
||||
reported by ``VIDIOC_CROPCAP`` the application can easily propose
|
||||
another offset to center the cropping rectangle.
|
||||
|
||||
Now the application may insist on covering an area using a picture
|
||||
aspect ratio closer to the original request, so it asks for a cropping
|
||||
rectangle of 608 × 456 pixels. The present scaling factors limit
|
||||
cropping to 640 × 384, so the driver returns the cropping size 608 × 384
|
||||
and adjusts the image size to closest possible 304 × 192.
|
||||
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
Source and target rectangles shall remain unchanged across closing and
|
||||
reopening a device, such that piping data into or out of a device will
|
||||
work without special preparations. More advanced applications should
|
||||
ensure the parameters are suitable before starting I/O.
|
||||
|
||||
(A video capture device is assumed; change
|
||||
``V4L2_BUF_TYPE_VIDEO_CAPTURE`` for other devices.)
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_cropcap cropcap;
|
||||
struct v4l2_crop crop;
|
||||
|
||||
memset (&cropcap, 0, sizeof (cropcap));
|
||||
cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_CROPCAP, &cropcap)) {
|
||||
perror ("VIDIOC_CROPCAP");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
memset (&crop, 0, sizeof (crop));
|
||||
crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
crop.c = cropcap.defrect;
|
||||
|
||||
/* Ignore if cropping is not supported (EINVAL). */
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop)
|
||||
&& errno != EINVAL) {
|
||||
perror ("VIDIOC_S_CROP");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
(A video capture device is assumed.)
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_cropcap cropcap;
|
||||
struct v4l2_format format;
|
||||
|
||||
reset_cropping_parameters ();
|
||||
|
||||
/* Scale down to 1/4 size of full picture. */
|
||||
|
||||
memset (&format, 0, sizeof (format)); /* defaults */
|
||||
|
||||
format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
format.fmt.pix.width = cropcap.defrect.width >> 1;
|
||||
format.fmt.pix.height = cropcap.defrect.height >> 1;
|
||||
format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_S_FMT, &format)) {
|
||||
perror ("VIDIOC_S_FORMAT");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* We could check the actual image size now, the actual scaling factor
|
||||
or if the driver can scale at all. */
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_cropcap cropcap;
|
||||
struct v4l2_crop crop;
|
||||
|
||||
memset (&cropcap, 0, sizeof (cropcap));
|
||||
cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_CROPCAP;, &cropcap)) {
|
||||
perror ("VIDIOC_CROPCAP");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
memset (&crop, 0, sizeof (crop));
|
||||
|
||||
crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
|
||||
crop.c = cropcap.defrect;
|
||||
|
||||
/* Scale the width and height to 50 % of their original size
|
||||
and center the output. */
|
||||
|
||||
crop.c.width /= 2;
|
||||
crop.c.height /= 2;
|
||||
crop.c.left += crop.c.width / 2;
|
||||
crop.c.top += crop.c.height / 2;
|
||||
|
||||
/* Ignore if cropping is not supported (EINVAL). */
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop)
|
||||
&& errno != EINVAL) {
|
||||
perror ("VIDIOC_S_CROP");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
(A video capture device is assumed.)
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct v4l2_cropcap cropcap;
|
||||
struct v4l2_crop crop;
|
||||
struct v4l2_format format;
|
||||
double hscale, vscale;
|
||||
double aspect;
|
||||
int dwidth, dheight;
|
||||
|
||||
memset (&cropcap, 0, sizeof (cropcap));
|
||||
cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_CROPCAP, &cropcap)) {
|
||||
perror ("VIDIOC_CROPCAP");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
memset (&crop, 0, sizeof (crop));
|
||||
crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_G_CROP, &crop)) {
|
||||
if (errno != EINVAL) {
|
||||
perror ("VIDIOC_G_CROP");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Cropping not supported. */
|
||||
crop.c = cropcap.defrect;
|
||||
}
|
||||
|
||||
memset (&format, 0, sizeof (format));
|
||||
format.fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (-1 == ioctl (fd, VIDIOC_G_FMT, &format)) {
|
||||
perror ("VIDIOC_G_FMT");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* The scaling applied by the driver. */
|
||||
|
||||
hscale = format.fmt.pix.width / (double) crop.c.width;
|
||||
vscale = format.fmt.pix.height / (double) crop.c.height;
|
||||
|
||||
aspect = cropcap.pixelaspect.numerator /
|
||||
(double) cropcap.pixelaspect.denominator;
|
||||
aspect = aspect * hscale / vscale;
|
||||
|
||||
/* Devices following ITU-R BT.601 do not capture
|
||||
square pixels. For playback on a computer monitor
|
||||
we should scale the images to this size. */
|
||||
|
||||
dwidth = format.fmt.pix.width / aspect;
|
||||
dheight = format.fmt.pix.height;
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
|
@ -0,0 +1,26 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _depth-formats:
|
||||
|
||||
*************
|
||||
Depth Formats
|
||||
*************
|
||||
|
||||
Depth data provides distance to points, mapped onto the image plane
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
pixfmt-z16
|
||||
|
||||
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,111 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _capture:
|
||||
|
||||
***********************
|
||||
Video Capture Interface
|
||||
***********************
|
||||
|
||||
Video capture devices sample an analog video signal and store the
|
||||
digitized images in memory. Today nearly all devices can capture at full
|
||||
25 or 30 frames/second. With this interface applications can control the
|
||||
capture process and move images from the driver into user space.
|
||||
|
||||
Conventionally V4L2 video capture devices are accessed through character
|
||||
device special files named ``/dev/video`` and ``/dev/video0`` to
|
||||
``/dev/video63`` with major number 81 and minor numbers 0 to 63.
|
||||
``/dev/video`` is typically a symbolic link to the preferred video
|
||||
device. Note the same device files are used for video output devices.
|
||||
|
||||
|
||||
Querying Capabilities
|
||||
=====================
|
||||
|
||||
Devices supporting the video capture interface set the
|
||||
``V4L2_CAP_VIDEO_CAPTURE`` or ``V4L2_CAP_VIDEO_CAPTURE_MPLANE`` flag in
|
||||
the ``capabilities`` field of struct
|
||||
:ref:`v4l2_capability <v4l2-capability>` returned by the
|
||||
:ref:`VIDIOC_QUERYCAP <vidioc-querycap>` ioctl. As secondary device
|
||||
functions they may also support the :ref:`video overlay <overlay>`
|
||||
(``V4L2_CAP_VIDEO_OVERLAY``) and the :ref:`raw VBI capture <raw-vbi>`
|
||||
(``V4L2_CAP_VBI_CAPTURE``) interface. At least one of the read/write or
|
||||
streaming I/O methods must be supported. Tuners and audio inputs are
|
||||
optional.
|
||||
|
||||
|
||||
Supplemental Functions
|
||||
======================
|
||||
|
||||
Video capture devices shall support :ref:`audio input <audio>`,
|
||||
:ref:`tuner <tuner>`, :ref:`controls <control>`,
|
||||
:ref:`cropping and scaling <crop>` and
|
||||
:ref:`streaming parameter <streaming-par>` ioctls as needed. The
|
||||
:ref:`video input <video>` and :ref:`video standard <standard>`
|
||||
ioctls must be supported by all video capture devices.
|
||||
|
||||
|
||||
Image Format Negotiation
|
||||
========================
|
||||
|
||||
The result of a capture operation is determined by cropping and image
|
||||
format parameters. The former select an area of the video picture to
|
||||
capture, the latter how images are stored in memory, i. e. in RGB or YUV
|
||||
format, the number of bits per pixel or width and height. Together they
|
||||
also define how images are scaled in the process.
|
||||
|
||||
As usual these parameters are *not* reset at :ref:`open() <func-open>`
|
||||
time to permit Unix tool chains, programming a device and then reading
|
||||
from it as if it was a plain file. Well written V4L2 applications ensure
|
||||
they really get what they want, including cropping and scaling.
|
||||
|
||||
Cropping initialization at minimum requires to reset the parameters to
|
||||
defaults. An example is given in :ref:`crop`.
|
||||
|
||||
To query the current image format applications set the ``type`` field of
|
||||
a struct :ref:`v4l2_format <v4l2-format>` to
|
||||
``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or
|
||||
``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE`` and call the
|
||||
:ref:`VIDIOC_G_FMT <vidioc-g-fmt>` ioctl with a pointer to this
|
||||
structure. Drivers fill the struct
|
||||
:ref:`v4l2_pix_format <v4l2-pix-format>` ``pix`` or the struct
|
||||
:ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` ``pix_mp``
|
||||
member of the ``fmt`` union.
|
||||
|
||||
To request different parameters applications set the ``type`` field of a
|
||||
struct :ref:`v4l2_format <v4l2-format>` as above and initialize all
|
||||
fields of the struct :ref:`v4l2_pix_format <v4l2-pix-format>`
|
||||
``vbi`` member of the ``fmt`` union, or better just modify the results
|
||||
of ``VIDIOC_G_FMT``, and call the :ref:`VIDIOC_S_FMT <vidioc-g-fmt>`
|
||||
ioctl with a pointer to this structure. Drivers may adjust the
|
||||
parameters and finally return the actual parameters as ``VIDIOC_G_FMT``
|
||||
does.
|
||||
|
||||
Like ``VIDIOC_S_FMT`` the :ref:`VIDIOC_TRY_FMT <vidioc-g-fmt>` ioctl
|
||||
can be used to learn about hardware limitations without disabling I/O or
|
||||
possibly time consuming hardware preparations.
|
||||
|
||||
The contents of struct :ref:`v4l2_pix_format <v4l2-pix-format>` and
|
||||
struct :ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` are
|
||||
discussed in :ref:`pixfmt`. See also the specification of the
|
||||
``VIDIOC_G_FMT``, ``VIDIOC_S_FMT`` and ``VIDIOC_TRY_FMT`` ioctls for
|
||||
details. Video capture devices must implement both the ``VIDIOC_G_FMT``
|
||||
and ``VIDIOC_S_FMT`` ioctl, even if ``VIDIOC_S_FMT`` ignores all
|
||||
requests and always returns default parameters as ``VIDIOC_G_FMT`` does.
|
||||
``VIDIOC_TRY_FMT`` is optional.
|
||||
|
||||
|
||||
Reading Images
|
||||
==============
|
||||
|
||||
A video capture device may support the :ref:`read() function <rw>`
|
||||
and/or streaming (:ref:`memory mapping <mmap>` or
|
||||
:ref:`user pointer <userp>`) I/O. See :ref:`io` for details.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,41 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _codec:
|
||||
|
||||
***************
|
||||
Codec Interface
|
||||
***************
|
||||
|
||||
A V4L2 codec can compress, decompress, transform, or otherwise convert
|
||||
video data from one format into another format, in memory. Typically
|
||||
such devices are memory-to-memory devices (i.e. devices with the
|
||||
``V4L2_CAP_VIDEO_M2M`` or ``V4L2_CAP_VIDEO_M2M_MPLANE`` capability set).
|
||||
|
||||
A memory-to-memory video node acts just like a normal video node, but it
|
||||
supports both output (sending frames from memory to the codec hardware)
|
||||
and capture (receiving the processed frames from the codec hardware into
|
||||
memory) stream I/O. An application will have to setup the stream I/O for
|
||||
both sides and finally call :ref:`VIDIOC_STREAMON <vidioc-streamon>`
|
||||
for both capture and output to start the codec.
|
||||
|
||||
Video compression codecs use the MPEG controls to setup their codec
|
||||
parameters (note that the MPEG controls actually support many more
|
||||
codecs than just MPEG). See :ref:`mpeg-controls`.
|
||||
|
||||
Memory-to-memory devices can often be used as a shared resource: you can
|
||||
open the video node multiple times, each application setting up their
|
||||
own codec properties that are local to the file handle, and each can use
|
||||
it independently from the others. The driver will arbitrate access to
|
||||
the codec and reprogram it whenever another file handler gets access.
|
||||
This is different from the usual video node behavior where the video
|
||||
properties are global to the device (i.e. changing something through one
|
||||
file handle is visible through another file handle).
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,31 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _effect:
|
||||
|
||||
************************
|
||||
Effect Devices Interface
|
||||
************************
|
||||
|
||||
**Note**
|
||||
|
||||
This interface has been be suspended from the V4L2 API implemented
|
||||
in Linux 2.6 until we have more experience with effect device
|
||||
interfaces.
|
||||
|
||||
A V4L2 video effect device can do image effects, filtering, or combine
|
||||
two or more images or image streams. For example video transitions or
|
||||
wipes. Applications send data to be processed and receive the result
|
||||
data either with :ref:`read() <func-read>` and
|
||||
:ref:`write() <func-write>` functions, or through the streaming I/O
|
||||
mechanism.
|
||||
|
||||
[to do]
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,56 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _event:
|
||||
|
||||
***************
|
||||
Event Interface
|
||||
***************
|
||||
|
||||
The V4L2 event interface provides a means for a user to get immediately
|
||||
notified on certain conditions taking place on a device. This might
|
||||
include start of frame or loss of signal events, for example. Changes in
|
||||
the value or state of a V4L2 control can also be reported through
|
||||
events.
|
||||
|
||||
To receive events, the events the user is interested in first must be
|
||||
subscribed using the
|
||||
:ref:`VIDIOC_SUBSCRIBE_EVENT <vidioc-subscribe-event>` ioctl. Once
|
||||
an event is subscribed, the events of subscribed types are dequeueable
|
||||
using the :ref:`VIDIOC_DQEVENT <vidioc-dqevent>` ioctl. Events may be
|
||||
unsubscribed using VIDIOC_UNSUBSCRIBE_EVENT ioctl. The special event
|
||||
type V4L2_EVENT_ALL may be used to unsubscribe all the events the
|
||||
driver supports.
|
||||
|
||||
The event subscriptions and event queues are specific to file handles.
|
||||
Subscribing an event on one file handle does not affect other file
|
||||
handles.
|
||||
|
||||
The information on dequeueable events is obtained by using select or
|
||||
poll system calls on video devices. The V4L2 events use POLLPRI events
|
||||
on poll system call and exceptions on select system call.
|
||||
|
||||
Starting with kernel 3.1 certain guarantees can be given with regards to
|
||||
events:
|
||||
|
||||
1. Each subscribed event has its own internal dedicated event queue.
|
||||
This means that flooding of one event type will not interfere with
|
||||
other event types.
|
||||
|
||||
2. If the internal event queue for a particular subscribed event becomes
|
||||
full, then the oldest event in that queue will be dropped.
|
||||
|
||||
3. Where applicable, certain event types can ensure that the payload of
|
||||
the oldest event that is about to be dropped will be merged with the
|
||||
payload of the next oldest event. Thus ensuring that no information
|
||||
is lost, but only an intermediate step leading up to that
|
||||
information. See the documentation for the event you want to
|
||||
subscribe to whether this is applicable for that event or not.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,154 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _osd:
|
||||
|
||||
******************************
|
||||
Video Output Overlay Interface
|
||||
******************************
|
||||
|
||||
|
||||
**Also known as On-Screen Display (OSD)**
|
||||
Some video output devices can overlay a framebuffer image onto the
|
||||
outgoing video signal. Applications can set up such an overlay using
|
||||
this interface, which borrows structures and ioctls of the
|
||||
:ref:`Video Overlay <overlay>` interface.
|
||||
|
||||
The OSD function is accessible through the same character special file
|
||||
as the :ref:`Video Output <capture>` function. Note the default
|
||||
function of such a ``/dev/video`` device is video capturing or output.
|
||||
The OSD function is only available after calling the
|
||||
:ref:`VIDIOC_S_FMT <vidioc-g-fmt>` ioctl.
|
||||
|
||||
|
||||
Querying Capabilities
|
||||
=====================
|
||||
|
||||
Devices supporting the *Video Output Overlay* interface set the
|
||||
``V4L2_CAP_VIDEO_OUTPUT_OVERLAY`` flag in the ``capabilities`` field of
|
||||
struct :ref:`v4l2_capability <v4l2-capability>` returned by the
|
||||
:ref:`VIDIOC_QUERYCAP <vidioc-querycap>` ioctl.
|
||||
|
||||
|
||||
Framebuffer
|
||||
===========
|
||||
|
||||
Contrary to the *Video Overlay* interface the framebuffer is normally
|
||||
implemented on the TV card and not the graphics card. On Linux it is
|
||||
accessible as a framebuffer device (``/dev/fbN``). Given a V4L2 device,
|
||||
applications can find the corresponding framebuffer device by calling
|
||||
the :ref:`VIDIOC_G_FBUF <vidioc-g-fbuf>` ioctl. It returns, amongst
|
||||
other information, the physical address of the framebuffer in the
|
||||
``base`` field of struct :ref:`v4l2_framebuffer <v4l2-framebuffer>`.
|
||||
The framebuffer device ioctl ``FBIOGET_FSCREENINFO`` returns the same
|
||||
address in the ``smem_start`` field of struct
|
||||
:c:type:`struct fb_fix_screeninfo`. The ``FBIOGET_FSCREENINFO``
|
||||
ioctl and struct :c:type:`struct fb_fix_screeninfo` are defined in
|
||||
the ``linux/fb.h`` header file.
|
||||
|
||||
The width and height of the framebuffer depends on the current video
|
||||
standard. A V4L2 driver may reject attempts to change the video standard
|
||||
(or any other ioctl which would imply a framebuffer size change) with an
|
||||
EBUSY error code until all applications closed the framebuffer device.
|
||||
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
#include <linux/fb.h>
|
||||
|
||||
struct v4l2_framebuffer fbuf;
|
||||
unsigned int i;
|
||||
int fb_fd;
|
||||
|
||||
if (-1 == ioctl(fd, VIDIOC_G_FBUF, &fbuf)) {
|
||||
perror("VIDIOC_G_FBUF");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (i = 0; i < 30; i++) {
|
||||
char dev_name[16];
|
||||
struct fb_fix_screeninfo si;
|
||||
|
||||
snprintf(dev_name, sizeof(dev_name), "/dev/fb%u", i);
|
||||
|
||||
fb_fd = open(dev_name, O_RDWR);
|
||||
if (-1 == fb_fd) {
|
||||
switch (errno) {
|
||||
case ENOENT: /* no such file */
|
||||
case ENXIO: /* no driver */
|
||||
continue;
|
||||
|
||||
default:
|
||||
perror("open");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == ioctl(fb_fd, FBIOGET_FSCREENINFO, &si)) {
|
||||
if (si.smem_start == (unsigned long)fbuf.base)
|
||||
break;
|
||||
} else {
|
||||
/* Apparently not a framebuffer device. */
|
||||
}
|
||||
|
||||
close(fb_fd);
|
||||
fb_fd = -1;
|
||||
}
|
||||
|
||||
/* fb_fd is the file descriptor of the framebuffer device
|
||||
for the video output overlay, or -1 if no device was found. */
|
||||
|
||||
|
||||
Overlay Window and Scaling
|
||||
==========================
|
||||
|
||||
The overlay is controlled by source and target rectangles. The source
|
||||
rectangle selects a subsection of the framebuffer image to be overlaid,
|
||||
the target rectangle an area in the outgoing video signal where the
|
||||
image will appear. Drivers may or may not support scaling, and arbitrary
|
||||
sizes and positions of these rectangles. Further drivers may support any
|
||||
(or none) of the clipping/blending methods defined for the
|
||||
:ref:`Video Overlay <overlay>` interface.
|
||||
|
||||
A struct :ref:`v4l2_window <v4l2-window>` defines the size of the
|
||||
source rectangle, its position in the framebuffer and the
|
||||
clipping/blending method to be used for the overlay. To get the current
|
||||
parameters applications set the ``type`` field of a struct
|
||||
:ref:`v4l2_format <v4l2-format>` to
|
||||
``V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY`` and call the
|
||||
:ref:`VIDIOC_G_FMT <vidioc-g-fmt>` ioctl. The driver fills the
|
||||
:c:type:`struct v4l2_window` substructure named ``win``. It is not
|
||||
possible to retrieve a previously programmed clipping list or bitmap.
|
||||
|
||||
To program the source rectangle applications set the ``type`` field of a
|
||||
struct :ref:`v4l2_format <v4l2-format>` to
|
||||
``V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY``, initialize the ``win``
|
||||
substructure and call the :ref:`VIDIOC_S_FMT <vidioc-g-fmt>` ioctl.
|
||||
The driver adjusts the parameters against hardware limits and returns
|
||||
the actual parameters as ``VIDIOC_G_FMT`` does. Like ``VIDIOC_S_FMT``,
|
||||
the :ref:`VIDIOC_TRY_FMT <vidioc-g-fmt>` ioctl can be used to learn
|
||||
about driver capabilities without actually changing driver state. Unlike
|
||||
``VIDIOC_S_FMT`` this also works after the overlay has been enabled.
|
||||
|
||||
A struct :ref:`v4l2_crop <v4l2-crop>` defines the size and position
|
||||
of the target rectangle. The scaling factor of the overlay is implied by
|
||||
the width and height given in struct :ref:`v4l2_window <v4l2-window>`
|
||||
and struct :ref:`v4l2_crop <v4l2-crop>`. The cropping API applies to
|
||||
*Video Output* and *Video Output Overlay* devices in the same way as to
|
||||
*Video Capture* and *Video Overlay* devices, merely reversing the
|
||||
direction of the data flow. For more information see :ref:`crop`.
|
||||
|
||||
|
||||
Enabling Overlay
|
||||
================
|
||||
|
||||
There is no V4L2 ioctl to enable or disable the overlay, however the
|
||||
framebuffer interface of the driver may support the ``FBIOBLANK`` ioctl.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
|
@ -0,0 +1,108 @@
|
|||
.. -*- coding: utf-8; mode: rst -*-
|
||||
|
||||
.. _output:
|
||||
|
||||
**********************
|
||||
Video Output Interface
|
||||
**********************
|
||||
|
||||
Video output devices encode stills or image sequences as analog video
|
||||
signal. With this interface applications can control the encoding
|
||||
process and move images from user space to the driver.
|
||||
|
||||
Conventionally V4L2 video output devices are accessed through character
|
||||
device special files named ``/dev/video`` and ``/dev/video0`` to
|
||||
``/dev/video63`` with major number 81 and minor numbers 0 to 63.
|
||||
``/dev/video`` is typically a symbolic link to the preferred video
|
||||
device. Note the same device files are used for video capture devices.
|
||||
|
||||
|
||||
Querying Capabilities
|
||||
=====================
|
||||
|
||||
Devices supporting the video output interface set the
|
||||
``V4L2_CAP_VIDEO_OUTPUT`` or ``V4L2_CAP_VIDEO_OUTPUT_MPLANE`` flag in
|
||||
the ``capabilities`` field of struct
|
||||
:ref:`v4l2_capability <v4l2-capability>` returned by the
|
||||
:ref:`VIDIOC_QUERYCAP <vidioc-querycap>` ioctl. As secondary device
|
||||
functions they may also support the :ref:`raw VBI output <raw-vbi>`
|
||||
(``V4L2_CAP_VBI_OUTPUT``) interface. At least one of the read/write or
|
||||
streaming I/O methods must be supported. Modulators and audio outputs
|
||||
are optional.
|
||||
|
||||
|
||||
Supplemental Functions
|
||||
======================
|
||||
|
||||
Video output devices shall support :ref:`audio output <audio>`,
|
||||
:ref:`modulator <tuner>`, :ref:`controls <control>`,
|
||||
:ref:`cropping and scaling <crop>` and
|
||||
:ref:`streaming parameter <streaming-par>` ioctls as needed. The
|
||||
:ref:`video output <video>` and :ref:`video standard <standard>`
|
||||
ioctls must be supported by all video output devices.
|
||||
|
||||
|
||||
Image Format Negotiation
|
||||
========================
|
||||
|
||||
The output is determined by cropping and image format parameters. The
|
||||
former select an area of the video picture where the image will appear,
|
||||
the latter how images are stored in memory, i. e. in RGB or YUV format,
|
||||
the number of bits per pixel or width and height. Together they also
|
||||
define how images are scaled in the process.
|
||||
|
||||
As usual these parameters are *not* reset at :ref:`open() <func-open>`
|
||||
time to permit Unix tool chains, programming a device and then writing
|
||||
to it as if it was a plain file. Well written V4L2 applications ensure
|
||||
they really get what they want, including cropping and scaling.
|
||||
|
||||
Cropping initialization at minimum requires to reset the parameters to
|
||||
defaults. An example is given in :ref:`crop`.
|
||||
|
||||
To query the current image format applications set the ``type`` field of
|
||||
a struct :ref:`v4l2_format <v4l2-format>` to
|
||||
``V4L2_BUF_TYPE_VIDEO_OUTPUT`` or ``V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE``
|
||||
and call the :ref:`VIDIOC_G_FMT <vidioc-g-fmt>` ioctl with a pointer
|
||||
to this structure. Drivers fill the struct
|
||||
:ref:`v4l2_pix_format <v4l2-pix-format>` ``pix`` or the struct
|
||||
:ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` ``pix_mp``
|
||||
member of the ``fmt`` union.
|
||||
|
||||
To request different parameters applications set the ``type`` field of a
|
||||
struct :ref:`v4l2_format <v4l2-format>` as above and initialize all
|
||||
fields of the struct :ref:`v4l2_pix_format <v4l2-pix-format>`
|
||||
``vbi`` member of the ``fmt`` union, or better just modify the results
|
||||
of ``VIDIOC_G_FMT``, and call the :ref:`VIDIOC_S_FMT <vidioc-g-fmt>`
|
||||
ioctl with a pointer to this structure. Drivers may adjust the
|
||||
parameters and finally return the actual parameters as ``VIDIOC_G_FMT``
|
||||
does.
|
||||
|
||||
Like ``VIDIOC_S_FMT`` the :ref:`VIDIOC_TRY_FMT <vidioc-g-fmt>` ioctl
|
||||
can be used to learn about hardware limitations without disabling I/O or
|
||||
possibly time consuming hardware preparations.
|
||||
|
||||
The contents of struct :ref:`v4l2_pix_format <v4l2-pix-format>` and
|
||||
struct :ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` are
|
||||
discussed in :ref:`pixfmt`. See also the specification of the
|
||||
``VIDIOC_G_FMT``, ``VIDIOC_S_FMT`` and ``VIDIOC_TRY_FMT`` ioctls for
|
||||
details. Video output devices must implement both the ``VIDIOC_G_FMT``
|
||||
and ``VIDIOC_S_FMT`` ioctl, even if ``VIDIOC_S_FMT`` ignores all
|
||||
requests and always returns default parameters as ``VIDIOC_G_FMT`` does.
|
||||
``VIDIOC_TRY_FMT`` is optional.
|
||||
|
||||
|
||||
Writing Images
|
||||
==============
|
||||
|
||||
A video output device may support the :ref:`write() function <rw>`
|
||||
and/or streaming (:ref:`memory mapping <mmap>` or
|
||||
:ref:`user pointer <userp>`) I/O. See :ref:`io` for details.
|
||||
|
||||
|
||||
.. ------------------------------------------------------------------------------
|
||||
.. This file was automatically converted from DocBook-XML with the dbxml
|
||||
.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
|
||||
.. from the linux kernel, refer to:
|
||||
..
|
||||
.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
|
||||
.. ------------------------------------------------------------------------------
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue