M7350v1_en_gpl

This commit is contained in:
T
2024-09-09 08:52:07 +00:00
commit f9cc65cfda
65988 changed files with 26357421 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
header-y += audio.h
header-y += ca.h
header-y += dmx.h
header-y += frontend.h
header-y += net.h
header-y += osd.h
header-y += version.h
header-y += video.h

View File

@@ -0,0 +1,135 @@
/*
* 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_ */

View File

@@ -0,0 +1,90 @@
/*
* 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

View File

@@ -0,0 +1,823 @@
/*
* dmx.h
*
* Copyright (C) 2000 Marcus Metzler <marcus@convergence.de>
* & Ralph Metzler <ralph@convergence.de>
* for convergence integrated media GmbH
*
* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
*
* 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 _DVBDMX_H_
#define _DVBDMX_H_
#include <linux/types.h>
#ifdef __KERNEL__
#include <linux/time.h>
#else
#include <time.h>
#endif
#define DMX_FILTER_SIZE 16
/* Min recording chunk upon which event is generated */
#define DMX_REC_BUFF_CHUNK_MIN_SIZE (100*188)
#define DMX_MAX_DECODER_BUFFER_NUM (32)
typedef enum
{
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 */
} dmx_output_t;
typedef enum
{
DMX_IN_FRONTEND, /* Input from a front-end device. */
DMX_IN_DVR /* Input from the logical DVR device. */
} dmx_input_t;
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;
#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;
/* Filter flags */
#define DMX_CHECK_CRC 0x01
#define DMX_ONESHOT 0x02
#define DMX_IMMEDIATE_START 0x04
#define DMX_KERNEL_CLIENT 0x8000
struct dmx_sct_filter_params
{
__u16 pid;
dmx_filter_t filter;
__u32 timeout;
__u32 flags;
};
enum dmx_video_codec {
DMX_VIDEO_CODEC_MPEG2,
DMX_VIDEO_CODEC_H264,
DMX_VIDEO_CODEC_VC1
};
/* Index entries types */
#define DMX_IDX_RAI 0x00000001
#define DMX_IDX_PUSI 0x00000002
#define DMX_IDX_MPEG_SEQ_HEADER 0x00000004
#define DMX_IDX_MPEG_GOP 0x00000008
#define DMX_IDX_MPEG_FIRST_SEQ_FRAME_START 0x00000010
#define DMX_IDX_MPEG_FIRST_SEQ_FRAME_END 0x00000020
#define DMX_IDX_MPEG_I_FRAME_START 0x00000040
#define DMX_IDX_MPEG_I_FRAME_END 0x00000080
#define DMX_IDX_MPEG_P_FRAME_START 0x00000100
#define DMX_IDX_MPEG_P_FRAME_END 0x00000200
#define DMX_IDX_MPEG_B_FRAME_START 0x00000400
#define DMX_IDX_MPEG_B_FRAME_END 0x00000800
#define DMX_IDX_H264_SPS 0x00001000
#define DMX_IDX_H264_PPS 0x00002000
#define DMX_IDX_H264_FIRST_SPS_FRAME_START 0x00004000
#define DMX_IDX_H264_FIRST_SPS_FRAME_END 0x00008000
#define DMX_IDX_H264_IDR_START 0x00010000
#define DMX_IDX_H264_IDR_END 0x00020000
#define DMX_IDX_H264_NON_IDR_START 0x00040000
#define DMX_IDX_H264_NON_IDR_END 0x00080000
#define DMX_IDX_VC1_SEQ_HEADER 0x00100000
#define DMX_IDX_VC1_ENTRY_POINT 0x00200000
#define DMX_IDX_VC1_FIRST_SEQ_FRAME_START 0x00400000
#define DMX_IDX_VC1_FIRST_SEQ_FRAME_END 0x00800000
#define DMX_IDX_VC1_FRAME_START 0x01000000
#define DMX_IDX_VC1_FRAME_END 0x02000000
struct dmx_pes_filter_params
{
__u16 pid;
dmx_input_t input;
dmx_output_t output;
dmx_pes_type_t pes_type;
__u32 flags;
/*
* The following configures when the event
* DMX_EVENT_NEW_REC_CHUNK will be triggered.
* When new recorded data is received with size
* equal or larger than this value a new event
* will be triggered. This is relevant when
* output is DMX_OUT_TS_TAP or DMX_OUT_TSDEMUX_TAP,
* size must be at least DMX_REC_BUFF_CHUNK_MIN_SIZE
* and smaller than buffer size.
*/
__u32 rec_chunk_size;
enum dmx_video_codec video_codec;
};
struct dmx_buffer_status {
/* size of buffer in bytes */
unsigned int size;
/* fullness of buffer in bytes */
unsigned int fullness;
/*
* How many bytes are free
* It's the same as: size-fullness-1
*/
unsigned int free_bytes;
/* read pointer offset in bytes */
unsigned int read_offset;
/* write pointer offset in bytes */
unsigned int write_offset;
/* non-zero if data error occurred */
int error;
};
/* Events associated with each demux filter */
enum dmx_event {
/* New PES packet is ready to be consumed */
DMX_EVENT_NEW_PES = 0x00000001,
/* New section is ready to be consumed */
DMX_EVENT_NEW_SECTION = 0x00000002,
/* New recording chunk is ready to be consumed */
DMX_EVENT_NEW_REC_CHUNK = 0x00000004,
/* New PCR value is ready */
DMX_EVENT_NEW_PCR = 0x00000008,
/* Overflow */
DMX_EVENT_BUFFER_OVERFLOW = 0x00000010,
/* Section was dropped due to CRC error */
DMX_EVENT_SECTION_CRC_ERROR = 0x00000020,
/* End-of-stream, no more data from this filter */
DMX_EVENT_EOS = 0x00000040,
/* New Elementary Stream data is ready */
DMX_EVENT_NEW_ES_DATA = 0x00000080,
/* Data markers */
DMX_EVENT_MARKER = 0x00000100,
/* New indexing entry is ready */
DMX_EVENT_NEW_INDEX_ENTRY = 0x00000200,
/*
* Section filter timer expired. This is notified
* when timeout is configured to section filter
* (dmx_sct_filter_params) and no sections were
* received for the given time.
*/
DMX_EVENT_SECTION_TIMEOUT = 0x00000400,
/* Scrambling bits change between clear and scrambled */
DMX_EVENT_SCRAMBLING_STATUS_CHANGE = 0x00000800
};
enum dmx_oob_cmd {
/* End-of-stream, no more data from this filter */
DMX_OOB_CMD_EOS,
/* Data markers */
DMX_OOB_CMD_MARKER,
};
/* Flags passed in filter events */
/* Continuity counter error was detected */
#define DMX_FILTER_CC_ERROR 0x01
/* Discontinuity indicator was set */
#define DMX_FILTER_DISCONTINUITY_INDICATOR 0x02
/* PES length in PES header is not correct */
#define DMX_FILTER_PES_LENGTH_ERROR 0x04
/* PES info associated with DMX_EVENT_NEW_PES event */
struct dmx_pes_event_info {
/* Offset at which PES information starts */
__u32 base_offset;
/*
* Start offset at which PES data
* from the stream starts.
* Equal to base_offset if PES data
* starts from the beginning.
*/
__u32 start_offset;
/* Total length holding the PES information */
__u32 total_length;
/* Actual length holding the PES data */
__u32 actual_length;
/* Local receiver timestamp in 27MHz */
__u64 stc;
/* Flags passed in filter events */
__u32 flags;
/*
* Number of TS packets with Transport Error Indicator (TEI)
* found while constructing the PES.
*/
__u32 transport_error_indicator_counter;
/* Number of continuity errors found while constructing the PES */
__u32 continuity_error_counter;
/* Total number of TS packets holding the PES */
__u32 ts_packets_num;
};
/* Section info associated with DMX_EVENT_NEW_SECTION event */
struct dmx_section_event_info {
/* Offset at which section information starts */
__u32 base_offset;
/*
* Start offset at which section data
* from the stream starts.
* Equal to base_offset if section data
* starts from the beginning.
*/
__u32 start_offset;
/* Total length holding the section information */
__u32 total_length;
/* Actual length holding the section data */
__u32 actual_length;
/* Flags passed in filter events */
__u32 flags;
};
/* Recording info associated with DMX_EVENT_NEW_REC_CHUNK event */
struct dmx_rec_chunk_event_info {
/* Offset at which recording chunk starts */
__u32 offset;
/* Size of recording chunk in bytes */
__u32 size;
};
/* PCR info associated with DMX_EVENT_NEW_PCR event */
struct dmx_pcr_event_info {
/* Local timestamp in 27MHz
* when PCR packet was received
*/
__u64 stc;
/* PCR value in 27MHz */
__u64 pcr;
/* Flags passed in filter events */
__u32 flags;
};
/*
* Elementary stream data information associated
* with DMX_EVENT_NEW_ES_DATA event
*/
struct dmx_es_data_event_info {
/* Buffer user-space handle */
int buf_handle;
/*
* Cookie to provide when releasing the buffer
* using the DMX_RELEASE_DECODER_BUFFER ioctl command
*/
int cookie;
/* Offset of data from the beginning of the buffer */
__u32 offset;
/* Length of data in buffer (in bytes) */
__u32 data_len;
/* Indication whether PTS value is valid */
int pts_valid;
/* PTS value associated with the buffer */
__u64 pts;
/* Indication whether DTS value is valid */
int dts_valid;
/* DTS value associated with the buffer */
__u64 dts;
/* STC value associated with the buffer in 27MHz */
__u64 stc;
/*
* Number of TS packets with Transport Error Indicator (TEI) set
* in the TS packet header since last reported event
*/
__u32 transport_error_indicator_counter;
/* Number of continuity errors since last reported event */
__u32 continuity_error_counter;
/* Total number of TS packets processed since last reported event */
__u32 ts_packets_num;
/*
* Number of dropped bytes due to insufficient buffer space,
* since last reported event
*/
__u32 ts_dropped_bytes;
};
/* Marker details associated with DMX_EVENT_MARKER event */
struct dmx_marker_event_info {
/* Marker id */
__u64 id;
};
/* Indexing information associated with DMX_EVENT_NEW_INDEX_ENTRY event */
struct dmx_index_event_info {
/* Index entry type, one of of DMX_IDX_* */
__u64 type;
/*
* The PID the index entry belongs to.
* In case of recording filter, multiple PIDs may exist in the same
* filter through DMX_ADD_PID ioctl and each can be indexed separately.
*/
__u16 pid;
/*
* The TS packet number in the recorded data at which
* the indexing event is found.
*/
__u64 match_tsp_num;
/*
* The TS packet number in the recorded data preceding
* match_tsp_num and has PUSI set.
*/
__u64 last_pusi_tsp_num;
/* STC associated with match_tsp_num, in 27MHz */
__u64 stc;
};
/* Scrambling information associated with DMX_EVENT_SCRAMBLING_STATUS_CHANGE */
struct dmx_scrambling_status_event_info {
/*
* The PID which its scrambling bit status changed.
* In case of recording filter, multiple PIDs may exist in the same
* filter through DMX_ADD_PID ioctl, each may have
* different scrambling bits status.
*/
__u16 pid;
/* old value of scrambling bits */
__u8 old_value;
/* new value of scrambling bits */
__u8 new_value;
};
/*
* Filter's event returned through DMX_GET_EVENT.
* poll with POLLPRI would block until events are available.
*/
struct dmx_filter_event {
enum dmx_event type;
union {
struct dmx_pes_event_info pes;
struct dmx_section_event_info section;
struct dmx_rec_chunk_event_info recording_chunk;
struct dmx_pcr_event_info pcr;
struct dmx_es_data_event_info es_data;
struct dmx_marker_event_info marker;
struct dmx_index_event_info index;
struct dmx_scrambling_status_event_info scrambling_status;
} params;
};
/* Filter's buffer requirement returned in dmx_caps */
struct dmx_buffer_requirement {
/* Buffer size alignment, 0 means no special requirement */
__u32 size_alignment;
/* Maximum buffer size allowed */
__u32 max_size;
/* Maximum number of linear buffers handled by demux */
__u32 max_buffer_num;
/* Feature support bitmap as detailed below */
__u32 flags;
/* Buffer must be allocated as physically contiguous memory */
#define DMX_BUFFER_CONTIGUOUS_MEM 0x1
/* If the filter's data is decrypted, the buffer should be secured one */
#define DMX_BUFFER_SECURED_IF_DECRYPTED 0x2
/* Buffer can be allocated externally */
#define DMX_BUFFER_EXTERNAL_SUPPORT 0x4
/* Buffer can be allocated internally */
#define DMX_BUFFER_INTERNAL_SUPPORT 0x8
/* Filter output can be output to a linear buffer group */
#define DMX_BUFFER_LINEAR_GROUP_SUPPORT 0x10
};
/* Out-of-band (OOB) command */
struct dmx_oob_command {
enum dmx_oob_cmd type;
union {
struct dmx_marker_event_info marker;
} params;
};
typedef struct dmx_caps {
__u32 caps;
/* Indicates whether demux support playback from memory in pull mode */
#define DMX_CAP_PULL_MODE 0x01
/* Indicates whether demux support indexing of recorded video stream */
#define DMX_CAP_VIDEO_INDEXING 0x02
/* Indicates whether demux support sending data directly to video decoder */
#define DMX_CAP_VIDEO_DECODER_DATA 0x04
/* Indicates whether demux support sending data directly to audio decoder */
#define DMX_CAP_AUDIO_DECODER_DATA 0x08
/* Indicates whether demux support sending data directly to subtitle decoder */
#define DMX_CAP_SUBTITLE_DECODER_DATA 0x10
/* Number of decoders demux can output data to */
int num_decoders;
/* Number of demux devices */
int num_demux_devices;
/* Max number of PID filters */
int num_pid_filters;
/* Max number of section filters */
int num_section_filters;
/*
* Max number of section filters using same PID,
* 0 if not supported
*/
int num_section_filters_per_pid;
/*
* Length of section filter, not including section
* length field (2 bytes).
*/
int section_filter_length;
/* Max number of demod based input */
int num_demod_inputs;
/* Max number of memory based input */
int num_memory_inputs;
/* Overall bitrate from all inputs concurrently. Mbit/sec */
int max_bitrate;
/* Max bitrate from single demod input. Mbit/sec */
int demod_input_max_bitrate;
/* Max bitrate from single memory input. Mbit/sec */
int memory_input_max_bitrate;
struct dmx_buffer_requirement section;
/* For PES not sent to decoder */
struct dmx_buffer_requirement pes;
/* For PES sent to decoder */
struct dmx_buffer_requirement decoder;
/* Recording buffer for recording of 188 bytes packets */
struct dmx_buffer_requirement recording_188_tsp;
/* Recording buffer for recording of 192 bytes packets */
struct dmx_buffer_requirement recording_192_tsp;
/* DVR input buffer for playback of 188 bytes packets */
struct dmx_buffer_requirement playback_188_tsp;
/* DVR input buffer for playback of 192 bytes packets */
struct dmx_buffer_requirement playback_192_tsp;
} dmx_caps_t;
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;
enum dmx_tsp_format_t {
DMX_TSP_FORMAT_188 = 0,
DMX_TSP_FORMAT_192_TAIL,
DMX_TSP_FORMAT_192_HEAD,
DMX_TSP_FORMAT_204,
};
enum dmx_playback_mode_t {
/*
* In push mode, if one of output buffers
* is full, the buffer would overflow
* and demux continue processing incoming stream.
* This is the default mode. When playing from frontend,
* this is the only mode that is allowed.
*/
DMX_PB_MODE_PUSH = 0,
/*
* In pull mode, if one of output buffers
* is full, demux stalls waiting for free space,
* this would cause DVR input buffer fullness
* to accumulate.
* This mode is possible only when playing
* from DVR.
*/
DMX_PB_MODE_PULL,
};
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 */
};
enum dmx_buffer_mode {
/*
* demux buffers are allocated internally
* by the demux driver. This is the default mode.
* DMX_SET_BUFFER_SIZE can be used to set the size of
* this buffer.
*/
DMX_BUFFER_MODE_INTERNAL,
/*
* demux buffers are allocated externally and provided
* to demux through DMX_SET_BUFFER.
* When this mode is used DMX_SET_BUFFER_SIZE and
* mmap are prohibited.
*/
DMX_BUFFER_MODE_EXTERNAL,
};
struct dmx_buffer {
unsigned int size;
int handle;
};
struct dmx_decoder_buffers {
/*
* Specify if linear buffer support is requested. If set, buffers_num
* must be greater than 1
*/
int is_linear;
/*
* Specify number of external buffers allocated by user.
* If set to 0 means internal buffer allocation is requested
*/
__u32 buffers_num;
/* Specify buffer size, either external or internal */
__u32 buffers_size;
/* Array of externally allocated buffer handles */
int handles[DMX_MAX_DECODER_BUFFER_NUM];
};
struct dmx_secure_mode {
/*
* Specifies whether secure mode should be set or not for the filter's
* pid. Note that DMX_OUT_TSDEMUX_TAP filters can have more than 1 pid
*/
int is_secured;
/* PID to associate with key ladder id */
__u16 pid;
/* key ladder information to associate with the specified pid */
__u32 key_ladder_id;
};
struct dmx_events_mask {
/*
* Bitmask of events to be disabled (dmx_event).
* Disabled events will not be notified to the user.
* By default all events are enabled except for
* DMX_EVENT_NEW_ES_DATA.
* Overflow event can't be disabled.
*/
__u32 disable_mask;
/*
* Bitmask of events that will not wake-up the user
* when user calls poll with POLLPRI flag.
* Events that are used as wake-up source should not be
* disabled in disable_mask or they would not be used
* as a wake-up source.
* By default all enabled events are set as wake-up events.
* Overflow event can't be disabled as a wake-up source.
*/
__u32 no_wakeup_mask;
/*
* Number of ready wake-up events which will trigger
* a wake-up when user calls poll with POLLPRI flag.
* Default is set to 1.
*/
__u32 wakeup_threshold;
};
struct dmx_indexing_params {
/*
* PID to index. In case of recording filter, multiple PIDs
* may exist in the same filter through DMX_ADD_PID ioctl.
* It is assumed that the PID was already added using DMX_ADD_PID
* or an error will be reported.
*/
__u16 pid;
/* enable or disable indexing, default is disabled */
int enable;
/* combination of DMX_IDX_* bits */
__u64 types;
};
struct dmx_set_ts_insertion {
/*
* Unique identifier managed by the caller.
* This identifier can be used later to remove the
* insertion using DMX_ABORT_TS_INSERTION ioctl.
*/
__u32 identifier;
/*
* Repetition time in msec, minimum allowed value is 25msec.
* 0 repetition time means one-shot insertion is done.
* Insertion done based on wall-clock.
*/
__u32 repetition_time;
/*
* TS packets buffer to be inserted.
* The buffer is inserted as-is to the recording buffer
* without any modification.
* It is advised to set discontinuity flag in the very
* first TS packet in the buffer.
*/
const __u8 *ts_packets;
/*
* Size in bytes of the TS packets buffer to be inserted.
* Should be in multiples of 188 or 192 bytes
* depending on recording filter output format.
*/
size_t size;
};
struct dmx_abort_ts_insertion {
/*
* Identifier of the insertion buffer previously set
* using DMX_SET_TS_INSERTION.
*/
__u32 identifier;
};
struct dmx_scrambling_bits {
/*
* The PID to return its scrambling bit value.
* In case of recording filter, multiple PIDs may exist in the same
* filter through DMX_ADD_PID ioctl, each may have different
* scrambling bits status.
*/
__u16 pid;
/* Current value of scrambling bits: 0, 1, 2 or 3 */
__u8 value;
};
#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)
#define DMX_SET_TS_PACKET_FORMAT _IOW('o', 53, enum dmx_tsp_format_t)
#define DMX_SET_TS_OUT_FORMAT _IOW('o', 54, enum dmx_tsp_format_t)
#define DMX_SET_DECODER_BUFFER_SIZE _IO('o', 55)
#define DMX_GET_BUFFER_STATUS _IOR('o', 56, struct dmx_buffer_status)
#define DMX_RELEASE_DATA _IO('o', 57)
#define DMX_FEED_DATA _IO('o', 58)
#define DMX_SET_PLAYBACK_MODE _IOW('o', 59, enum dmx_playback_mode_t)
#define DMX_GET_EVENT _IOR('o', 60, struct dmx_filter_event)
#define DMX_SET_BUFFER_MODE _IOW('o', 61, enum dmx_buffer_mode)
#define DMX_SET_BUFFER _IOW('o', 62, struct dmx_buffer)
#define DMX_SET_DECODER_BUFFER _IOW('o', 63, struct dmx_decoder_buffers)
#define DMX_REUSE_DECODER_BUFFER _IO('o', 64)
#define DMX_SET_SECURE_MODE _IOW('o', 65, struct dmx_secure_mode)
#define DMX_SET_EVENTS_MASK _IOW('o', 66, struct dmx_events_mask)
#define DMX_GET_EVENTS_MASK _IOR('o', 67, struct dmx_events_mask)
#define DMX_PUSH_OOB_COMMAND _IOW('o', 68, struct dmx_oob_command)
#define DMX_SET_INDEXING_PARAMS _IOW('o', 69, struct dmx_indexing_params)
#define DMX_SET_TS_INSERTION _IOW('o', 70, struct dmx_set_ts_insertion)
#define DMX_ABORT_TS_INSERTION _IOW('o', 71, struct dmx_abort_ts_insertion)
#define DMX_GET_SCRAMBLING_BITS _IOWR('o', 72, struct dmx_scrambling_bits)
#endif /*_DVBDMX_H_*/

View File

@@ -0,0 +1,436 @@
/*
* 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>
typedef enum fe_type {
FE_QPSK,
FE_QAM,
FE_OFDM,
FE_ATSC
} fe_type_t;
typedef enum fe_caps {
FE_IS_STUPID = 0,
FE_CAN_INVERSION_AUTO = 0x1,
FE_CAN_FEC_1_2 = 0x2,
FE_CAN_FEC_2_3 = 0x4,
FE_CAN_FEC_3_4 = 0x8,
FE_CAN_FEC_4_5 = 0x10,
FE_CAN_FEC_5_6 = 0x20,
FE_CAN_FEC_6_7 = 0x40,
FE_CAN_FEC_7_8 = 0x80,
FE_CAN_FEC_8_9 = 0x100,
FE_CAN_FEC_AUTO = 0x200,
FE_CAN_QPSK = 0x400,
FE_CAN_QAM_16 = 0x800,
FE_CAN_QAM_32 = 0x1000,
FE_CAN_QAM_64 = 0x2000,
FE_CAN_QAM_128 = 0x4000,
FE_CAN_QAM_256 = 0x8000,
FE_CAN_QAM_AUTO = 0x10000,
FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000,
FE_CAN_BANDWIDTH_AUTO = 0x40000,
FE_CAN_GUARD_INTERVAL_AUTO = 0x80000,
FE_CAN_HIERARCHY_AUTO = 0x100000,
FE_CAN_8VSB = 0x200000,
FE_CAN_16VSB = 0x400000,
FE_HAS_EXTENDED_CAPS = 0x800000, /* We need more bitspace for newer APIs, indicate this. */
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 */
} fe_caps_t;
struct dvb_frontend_info {
char name[128];
fe_type_t 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 */
fe_caps_t 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 */
typedef enum fe_sec_voltage {
SEC_VOLTAGE_13,
SEC_VOLTAGE_18,
SEC_VOLTAGE_OFF
} fe_sec_voltage_t;
typedef enum fe_sec_tone_mode {
SEC_TONE_ON,
SEC_TONE_OFF
} fe_sec_tone_mode_t;
typedef enum fe_sec_mini_cmd {
SEC_MINI_A,
SEC_MINI_B
} fe_sec_mini_cmd_t;
typedef enum fe_status {
FE_HAS_SIGNAL = 0x01, /* found something above the noise level */
FE_HAS_CARRIER = 0x02, /* found a DVB signal */
FE_HAS_VITERBI = 0x04, /* FEC is stable */
FE_HAS_SYNC = 0x08, /* found sync bytes */
FE_HAS_LOCK = 0x10, /* everything's working... */
FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */
FE_REINIT = 0x40 /* frontend was reinitialized, */
} fe_status_t; /* application is recommended to reset */
/* DiSEqC, tone and parameters */
typedef enum fe_spectral_inversion {
INVERSION_OFF,
INVERSION_ON,
INVERSION_AUTO
} fe_spectral_inversion_t;
typedef enum fe_code_rate {
FEC_NONE = 0,
FEC_1_2,
FEC_2_3,
FEC_3_4,
FEC_4_5,
FEC_5_6,
FEC_6_7,
FEC_7_8,
FEC_8_9,
FEC_AUTO,
FEC_3_5,
FEC_9_10,
} fe_code_rate_t;
typedef 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,
} fe_modulation_t;
typedef 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,
} fe_transmit_mode_t;
#if defined(__DVB_CORE__) || !defined (__KERNEL__)
typedef enum fe_bandwidth {
BANDWIDTH_8_MHZ,
BANDWIDTH_7_MHZ,
BANDWIDTH_6_MHZ,
BANDWIDTH_AUTO,
BANDWIDTH_5_MHZ,
BANDWIDTH_10_MHZ,
BANDWIDTH_1_712_MHZ,
} fe_bandwidth_t;
#endif
typedef 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,
} fe_guard_interval_t;
typedef enum fe_hierarchy {
HIERARCHY_NONE,
HIERARCHY_1,
HIERARCHY_2,
HIERARCHY_4,
HIERARCHY_AUTO
} fe_hierarchy_t;
#if defined(__DVB_CORE__) || !defined (__KERNEL__)
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 QAM/OFDM/ATSC */
/* 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;
};
struct dvb_frontend_event {
fe_status_t status;
struct dvb_frontend_parameters parameters;
};
#endif
/* 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_ISDBS_TS_ID 42
#define DTV_DVBT2_PLP_ID 43
#define DTV_ENUM_DELSYS 44
#define DTV_MAX_COMMAND DTV_ENUM_DELSYS
typedef enum fe_pilot {
PILOT_ON,
PILOT_OFF,
PILOT_AUTO,
} fe_pilot_t;
typedef enum fe_rolloff {
ROLLOFF_35, /* Implied value in DVB-S, default for DVB-S2 */
ROLLOFF_20,
ROLLOFF_25,
ROLLOFF_AUTO,
} fe_rolloff_t;
typedef 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_DMBTH,
SYS_CMMB,
SYS_DAB,
SYS_DVBT2,
SYS_TURBO,
SYS_DVBC_ANNEX_C,
} fe_delivery_system_t;
#define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A
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 */
};
struct dtv_property {
__u32 cmd;
__u32 reserved[3];
union {
__u32 data;
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;
};
#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_*/

View File

@@ -0,0 +1,52 @@
/*
* net.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 _DVBNET_H_
#define _DVBNET_H_
#include <linux/types.h>
struct dvb_net_if {
__u16 pid;
__u16 if_num;
__u8 feedtype;
#define DVB_NET_FEEDTYPE_MPE 0 /* multi protocol encapsulation */
#define DVB_NET_FEEDTYPE_ULE 1 /* ultra lightweight encapsulation */
};
#define NET_ADD_IF _IOWR('o', 52, struct dvb_net_if)
#define NET_REMOVE_IF _IO('o', 53)
#define NET_GET_IF _IOWR('o', 54, struct dvb_net_if)
/* binary compatibility cruft: */
struct __dvb_net_if_old {
__u16 pid;
__u16 if_num;
};
#define __NET_ADD_IF_OLD _IOWR('o', 52, struct __dvb_net_if_old)
#define __NET_GET_IF_OLD _IOWR('o', 54, struct __dvb_net_if_old)
#endif /*_DVBNET_H_*/

View File

@@ -0,0 +1,144 @@
/*
* osd.h
*
* Copyright (C) 2001 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 _DVBOSD_H_
#define _DVBOSD_H_
#include <linux/compiler.h>
typedef enum {
// All functions return -2 on "not open"
OSD_Close=1, // ()
// Disables OSD and releases the buffers
// returns 0 on success
OSD_Open, // (x0,y0,x1,y1,BitPerPixel[2/4/8](color&0x0F),mix[0..15](color&0xF0))
// Opens OSD with this size and bit depth
// returns 0 on success, -1 on DRAM allocation error, -2 on "already open"
OSD_Show, // ()
// enables OSD mode
// returns 0 on success
OSD_Hide, // ()
// disables OSD mode
// returns 0 on success
OSD_Clear, // ()
// Sets all pixel to color 0
// returns 0 on success
OSD_Fill, // (color)
// Sets all pixel to color <col>
// returns 0 on success
OSD_SetColor, // (color,R{x0},G{y0},B{x1},opacity{y1})
// set palette entry <num> to <r,g,b>, <mix> and <trans> apply
// R,G,B: 0..255
// R=Red, G=Green, B=Blue
// opacity=0: pixel opacity 0% (only video pixel shows)
// opacity=1..254: pixel opacity as specified in header
// opacity=255: pixel opacity 100% (only OSD pixel shows)
// returns 0 on success, -1 on error
OSD_SetPalette, // (firstcolor{color},lastcolor{x0},data)
// Set a number of entries in the palette
// sets the entries "firstcolor" through "lastcolor" from the array "data"
// data has 4 byte for each color:
// R,G,B, and a opacity value: 0->transparent, 1..254->mix, 255->pixel
OSD_SetTrans, // (transparency{color})
// Sets transparency of mixed pixel (0..15)
// returns 0 on success
OSD_SetPixel, // (x0,y0,color)
// sets pixel <x>,<y> to color number <col>
// returns 0 on success, -1 on error
OSD_GetPixel, // (x0,y0)
// returns color number of pixel <x>,<y>, or -1
OSD_SetRow, // (x0,y0,x1,data)
// fills pixels x0,y through x1,y with the content of data[]
// returns 0 on success, -1 on clipping all pixel (no pixel drawn)
OSD_SetBlock, // (x0,y0,x1,y1,increment{color},data)
// fills pixels x0,y0 through x1,y1 with the content of data[]
// inc contains the width of one line in the data block,
// inc<=0 uses blockwidth as linewidth
// returns 0 on success, -1 on clipping all pixel
OSD_FillRow, // (x0,y0,x1,color)
// fills pixels x0,y through x1,y with the color <col>
// returns 0 on success, -1 on clipping all pixel
OSD_FillBlock, // (x0,y0,x1,y1,color)
// fills pixels x0,y0 through x1,y1 with the color <col>
// returns 0 on success, -1 on clipping all pixel
OSD_Line, // (x0,y0,x1,y1,color)
// draw a line from x0,y0 to x1,y1 with the color <col>
// returns 0 on success
OSD_Query, // (x0,y0,x1,y1,xasp{color}}), yasp=11
// fills parameters with the picture dimensions and the pixel aspect ratio
// returns 0 on success
OSD_Test, // ()
// draws a test picture. for debugging purposes only
// returns 0 on success
// TODO: remove "test" in final version
OSD_Text, // (x0,y0,size,color,text)
OSD_SetWindow, // (x0) set window with number 0<x0<8 as current
OSD_MoveWindow, // move current window to (x0, y0)
OSD_OpenRaw, // Open other types of OSD windows
} OSD_Command;
typedef struct osd_cmd_s {
OSD_Command cmd;
int x0;
int y0;
int x1;
int y1;
int color;
void __user *data;
} osd_cmd_t;
/* OSD_OpenRaw: set 'color' to desired window type */
typedef enum {
OSD_BITMAP1, /* 1 bit bitmap */
OSD_BITMAP2, /* 2 bit bitmap */
OSD_BITMAP4, /* 4 bit bitmap */
OSD_BITMAP8, /* 8 bit bitmap */
OSD_BITMAP1HR, /* 1 Bit bitmap half resolution */
OSD_BITMAP2HR, /* 2 bit bitmap half resolution */
OSD_BITMAP4HR, /* 4 bit bitmap half resolution */
OSD_BITMAP8HR, /* 8 bit bitmap half resolution */
OSD_YCRCB422, /* 4:2:2 YCRCB Graphic Display */
OSD_YCRCB444, /* 4:4:4 YCRCB Graphic Display */
OSD_YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */
OSD_VIDEOTSIZE, /* True Size Normal MPEG Video Display */
OSD_VIDEOHSIZE, /* MPEG Video Display Half Resolution */
OSD_VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */
OSD_VIDEODSIZE, /* MPEG Video Display Double Resolution */
OSD_VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */
OSD_VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/
OSD_VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */
OSD_VIDEONSIZE, /* Full Size MPEG Video Display */
OSD_CURSOR /* Cursor */
} osd_raw_window_t;
typedef struct osd_cap_s {
int cmd;
#define OSD_CAP_MEMSIZE 1 /* memory size */
long val;
} osd_cap_t;
#define OSD_SEND_CMD _IOW('o', 160, osd_cmd_t)
#define OSD_GET_CAPABILITY _IOR('o', 161, osd_cap_t)
#endif

View File

@@ -0,0 +1,29 @@
/*
* version.h
*
* Copyright (C) 2000 Holger Waechtler <holger@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 _DVBVERSION_H_
#define _DVBVERSION_H_
#define DVB_API_VERSION 5
#define DVB_API_VERSION_MINOR 5
#endif /*_DVBVERSION_H_*/

View File

@@ -0,0 +1,400 @@
/*
* video.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 _DVBVIDEO_H_
#define _DVBVIDEO_H_
#include <linux/types.h>
#ifdef __KERNEL__
#include <linux/compiler.h>
#else
#include <stdint.h>
#include <time.h>
#endif
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;
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;
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;
enum video_codec_t {
VIDEO_CODECTYPE_NONE,
VIDEO_CODECTYPE_MPEG2,
VIDEO_CODECTYPE_MPEG4,
VIDEO_CODECTYPE_H264,
VIDEO_CODECTYPE_VC1
};
enum video_out_format_t {
VIDEO_YUV_FORMAT_NV12,
VIDEO_YUV_FORMAT_TILE_4x2
};
typedef struct {
int w;
int h;
video_format_t aspect_ratio;
} video_size_t;
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;
typedef enum {
VIDEO_STOPPED, /* Video is stopped */
VIDEO_PLAYING, /* Video is currently playing */
VIDEO_FREEZED /* Video is freezed */
} video_play_state_t;
/* Decoder commands */
#define VIDEO_CMD_PLAY (0)
#define VIDEO_CMD_STOP (1)
#define VIDEO_CMD_FREEZE (2)
#define VIDEO_CMD_CONTINUE (3)
#define VIDEO_CMD_SET_CODEC (4)
#define VIDEO_CMD_GET_CODEC (5)
#define VIDEO_CMD_SET_OUTPUT_FORMAT (6)
#define VIDEO_CMD_GET_OUTPUT_FORMAT (7)
#define VIDEO_CMD_GET_BUFFER_REQ (8)
#define VIDEO_CMD_SET_INPUT_BUFFERS (9)
#define VIDEO_CMD_SET_OUTPUT_BUFFERS (10)
#define VIDEO_CMD_READ_RAW_OUTPUT (11)
#define VIDEO_CMD_GET_PIC_RES (12)
#define VIDEO_CMD_FREE_INPUT_BUFFERS (13)
#define VIDEO_CMD_FREE_OUTPUT_BUFFERS (14)
#define VIDEO_CMD_GET_H264_MV_BUFFER (15)
#define VIDEO_CMD_SET_H264_MV_BUFFER (16)
#define VIDEO_CMD_FREE_H264_MV_BUFFER (17)
#define VIDEO_CMD_CLEAR_INPUT_BUFFER (18)
#define VIDEO_CMD_CLEAR_OUTPUT_BUFFER (19)
#define VIDEO_CMD_SET_BUFFER_COUNT (20)
/* Flags for VIDEO_CMD_FREEZE */
#define VIDEO_CMD_FREEZE_TO_BLACK (1 << 0)
/* Flags for VIDEO_CMD_STOP */
#define VIDEO_CMD_STOP_TO_BLACK (1 << 0)
#define VIDEO_CMD_STOP_IMMEDIATELY (1 << 1)
/* Play input formats: */
/* The decoder has no special format requirements */
#define VIDEO_PLAY_FMT_NONE (0)
/* The decoder requires full GOPs */
#define VIDEO_PLAY_FMT_GOP (1)
/* Picture Resolution for Video Data */
struct video_pic_res {
unsigned int width;
unsigned int height;
unsigned int stride;
unsigned int scan_lines;
};
/* Video Buffer Properties */
struct video_buffer_prop {
unsigned int alignment;
unsigned int buf_poolid;
size_t buf_size;
};
/* Buffer Requirements from Video Decoder */
struct video_buffer_req {
unsigned int num_input_buffers; /* Number of Input Buffers */
unsigned int num_output_buffers; /* Number of Output Buffers */
struct video_buffer_prop input_buf_prop; /* Input Buffer Properties */
struct video_buffer_prop output_buf_prop; /* Output Buffer Prop */
};
enum scan_format {
INTERLACE_FRAME_PROGRESSIVE,
INTERLACE_INTERLEAVE_FRAME_TOP_FIELD_FIRST,
INTERLACE_INTERLEAVE_FRAME_BOTTOM_FIELD_FIRST
};
/* Video Data Buffer Structure for Input and Output */
struct video_data_buffer {
void __user *bufferaddr; /* Pointer to Buffer */
size_t buffer_len; /* Length of Buffer */
int ion_fd; /* file Descriptor */
size_t offset;
size_t mmaped_size;
void *client_data;
void *ip_buffer_tag;
__u64 pts;
enum scan_format interlaced_format;
};
struct video_h264_mv {
size_t size;
int count;
int ion_fd;
int offset;
};
struct video_mv_buff_size {
int width;
int height;
int size;
int alignment;
};
/* The structure must be zeroed before use by the application
This ensures it can be extended safely in the future. */
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;
union {
enum video_codec_t codec; /* Video Codec Type */
enum video_out_format_t format; /* YUV Format */
struct video_pic_res frame_res; /* Frame Resolution */
/* Buffer Requirements for Video Decoder */
struct video_buffer_req buf_req;
struct video_data_buffer buffer; /* Buffer Details */
struct video_mv_buff_size mv_buffer_req;
struct video_h264_mv mv_buffer_prop;
};
struct {
__u32 data[16];
} raw;
};
};
/* FIELD_UNKNOWN can be used if the hardware does not know whether
the Vsync is for an odd, even or progressive (i.e. non-interlaced)
field. */
#define VIDEO_VSYNC_FIELD_UNKNOWN (0)
#define VIDEO_VSYNC_FIELD_ODD (1)
#define VIDEO_VSYNC_FIELD_EVEN (2)
#define VIDEO_VSYNC_FIELD_PROGRESSIVE (3)
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)
#define VIDEO_EVENT_DECODER_PLAYING (5)
#define VIDEO_EVENT_DECODER_FREEZED (6)
#define VIDEO_EVENT_DECODER_RESUMED (7)
#define VIDEO_EVENT_INPUT_BUFFER_DONE (8)
#define VIDEO_EVENT_SEQ_HDR_FOUND (9)
#define VIDEO_EVENT_OUTPUT_BUFFER_DONE (10)
#define VIDEO_EVENT_OUTPUT_FLUSH_DONE (11)
#define VIDEO_EVENT_INPUT_FLUSH_DONE (12)
#define VIDEO_EVENT_INPUT_FLUSHED (13)
#define VIDEO_EVENT_OUTPUT_FLUSHED (14)
unsigned int status;
#define VIDEO_STATUS_SUCESS 0
#define VIDEO_STATUS_BITSTREAM_ERROR 1
#define VIDEO_STATUS_FAILED 2
#define VIDEO_STATUS_NORESOURCE 3
#define VIDEO_STATUS_INVALID_CMD 4
#define VIDEO_STATUS_INVALID_PARAM 5
#define VIDEO_STATUS_INVALID_STATE 6
#define VIDEO_STATUS_BUSY 7
#define VIDEO_STATUS_INVALID_HANDLE 8
#define VIDEO_STATUS_NO_SUPPORT 9
__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 */
struct video_data_buffer buffer; /* Output Buffer Details */
} u;
};
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 */
};
struct video_still_picture {
char __user *iFrame; /* pointer to a single iframe in memory */
__s32 size;
};
typedef
struct video_highlight {
int active; /* 1=show highlight, 0=hide highlight */
__u8 contrast1; /* 7- 4 Pattern pixel contrast */
/* 3- 0 Background pixel contrast */
__u8 contrast2; /* 7- 4 Emphasis pixel-2 contrast */
/* 3- 0 Emphasis pixel-1 contrast */
__u8 color1; /* 7- 4 Pattern pixel color */
/* 3- 0 Background pixel color */
__u8 color2; /* 7- 4 Emphasis pixel-2 color */
/* 3- 0 Emphasis pixel-1 color */
__u32 ypos; /* 23-22 auto action mode */
/* 21-12 start y */
/* 9- 0 end y */
__u32 xpos; /* 23-22 button color number */
/* 21-12 start x */
/* 9- 0 end x */
} video_highlight_t;
typedef struct video_spu {
int active;
int stream_id;
} video_spu_t;
typedef struct video_spu_palette { /* SPU Palette information */
int length;
__u8 __user *palette;
} video_spu_palette_t;
typedef struct video_navi_pack {
int length; /* 0 ... 1024 */
__u8 data[1024];
} video_navi_pack_t;
typedef __u16 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)) */
/* 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
#define VIDEO_STOP _IO('o', 21)
#define VIDEO_PLAY _IO('o', 22)
#define VIDEO_FREEZE _IO('o', 23)
#define VIDEO_CONTINUE _IO('o', 24)
#define VIDEO_SELECT_SOURCE _IO('o', 25)
#define VIDEO_SET_BLANK _IO('o', 26)
#define VIDEO_GET_STATUS _IOR('o', 27, struct video_status)
#define VIDEO_GET_EVENT _IOR('o', 28, struct video_event)
#define VIDEO_SET_DISPLAY_FORMAT _IO('o', 29)
#define VIDEO_STILLPICTURE _IOW('o', 30, struct video_still_picture)
#define VIDEO_FAST_FORWARD _IO('o', 31)
#define VIDEO_SLOWMOTION _IO('o', 32)
#define VIDEO_GET_CAPABILITIES _IOR('o', 33, unsigned int)
#define VIDEO_CLEAR_BUFFER _IO('o', 34)
#define VIDEO_SET_ID _IO('o', 35)
#define VIDEO_SET_STREAMTYPE _IO('o', 36)
#define VIDEO_SET_FORMAT _IO('o', 37)
#define VIDEO_SET_SYSTEM _IO('o', 38)
#define VIDEO_SET_HIGHLIGHT _IOW('o', 39, video_highlight_t)
#define VIDEO_SET_SPU _IOW('o', 50, video_spu_t)
#define VIDEO_SET_SPU_PALETTE _IOW('o', 51, video_spu_palette_t)
#define VIDEO_GET_NAVI _IOR('o', 52, video_navi_pack_t)
#define VIDEO_SET_ATTRIBUTES _IO('o', 53)
#define VIDEO_GET_SIZE _IOR('o', 55, video_size_t)
#define VIDEO_GET_FRAME_RATE _IOR('o', 56, unsigned int)
/**
* VIDEO_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 VIDEO_GET_PTS _IOR('o', 57, __u64)
/* Read the number of displayed frames since the decoder was started */
#define VIDEO_GET_FRAME_COUNT _IOR('o', 58, __u64)
#define VIDEO_COMMAND _IOWR('o', 59, struct video_command)
#define VIDEO_TRY_COMMAND _IOWR('o', 60, struct video_command)
#endif /*_DVBVIDEO_H_*/