demux.h revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * demux.h 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2002 Convergence GmbH 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * based on code: 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2000 Nokia Research Center 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Tampere, FINLAND 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU Lesser General Public License 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 2.1 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the License, or (at your option) any later version. 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU Lesser General Public License 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __DEMUX_H 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __DEMUX_H 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h> 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/errno.h> 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/list.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/time.h> 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Common definitions */ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter. 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DMX_MAX_FILTER_SIZE 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_MAX_FILTER_SIZE 18 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter. 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DMX_MAX_SECFEED_SIZE 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_MAX_SECFEED_SIZE 4096 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * enum dmx_success: Success codes for the Demux Callback API. 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum dmx_success { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_OK = 0, /* Received Ok */ 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_LENGTH_ERROR, /* Incorrect length */ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */ 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_CRC_ERROR, /* Incorrect CRC */ 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRAME_ERROR, /* Frame alignment error */ 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FIFO_ERROR, /* Receiver FIFO overrun */ 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_MISSED_ERROR /* Receiver missed packet */ 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} ; 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* TS packet reception */ 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* TS filter type for set() */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds payload (<=184 bytes per packet) to callback */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TS_DECODER 4 /* send stream to built-in decoder (if present) */ 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PES type for filters which write to built-in decoder */ 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these should be kept identical to the types in dmx.h */ 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum dmx_ts_pes 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ /* also send packets to decoder (if it exists) */ 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_AUDIO0, 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_VIDEO0, 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_TELETEXT0, 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_SUBTITLE0, 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_PCR0, 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_AUDIO1, 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_VIDEO1, 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_TELETEXT1, 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_SUBTITLE1, 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_PCR1, 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_AUDIO2, 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_VIDEO2, 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_TELETEXT2, 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_SUBTITLE2, 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_PCR2, 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_AUDIO3, 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_VIDEO3, 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_TELETEXT3, 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_SUBTITLE3, 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_PCR3, 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_TS_PES_OTHER 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_PES_AUDIO DMX_TS_PES_AUDIO0 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_PES_VIDEO DMX_TS_PES_VIDEO0 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_PES_TELETEXT DMX_TS_PES_TELETEXT0 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_PES_SUBTITLE DMX_TS_PES_SUBTITLE0 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_PES_PCR DMX_TS_PES_PCR0 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_ts_feed { 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int is_filtering; /* Set to non-zero when filtering in progress */ 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_demux *parent; /* Back-pointer */ 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void *priv; /* Pointer to private data of the API client */ 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*set) (struct dmx_ts_feed *feed, 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pid, 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int type, 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_ts_pes pes_type, 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t callback_length, 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t circular_buffer_size, 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int descramble, 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct timespec timeout); 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*start_filtering) (struct dmx_ts_feed* feed); 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*stop_filtering) (struct dmx_ts_feed* feed); 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Section reception */ 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_section_filter { 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 filter_value [DMX_MAX_FILTER_SIZE]; 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 filter_mask [DMX_MAX_FILTER_SIZE]; 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 filter_mode [DMX_MAX_FILTER_SIZE]; 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_feed* parent; /* Back-pointer */ 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void* priv; /* Pointer to private data of the API client */ 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_section_feed { 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int is_filtering; /* Set to non-zero when filtering in progress */ 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_demux* parent; /* Back-pointer */ 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void* priv; /* Pointer to private data of the API client */ 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int check_crc; 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 crc_val; 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 *secbuf; 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 secbuf_base[DMX_MAX_SECFEED_SIZE]; 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 secbufp, seclen, tsfeedp; 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*set) (struct dmx_section_feed* feed, 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pid, 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t circular_buffer_size, 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int descramble, 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int check_crc); 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*allocate_filter) (struct dmx_section_feed* feed, 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_filter** filter); 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*release_filter) (struct dmx_section_feed* feed, 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_filter* filter); 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*start_filtering) (struct dmx_section_feed* feed); 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*stop_filtering) (struct dmx_section_feed* feed); 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Callback functions */ 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef int (*dmx_ts_cb) ( const u8 * buffer1, 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer1_length, 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const u8 * buffer2, 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer2_length, 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_ts_feed* source, 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_success success); 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef int (*dmx_section_cb) ( const u8 * buffer1, 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer1_len, 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const u8 * buffer2, 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer2_len, 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_filter * source, 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_success success); 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* DVB Front-End */ 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum dmx_frontend_source { 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_MEMORY_FE, 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_0, 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_1, 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_2, 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_FRONTEND_3, 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_0, /* external stream input, e.g. LVDS */ 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_1, 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_2, 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds DMX_STREAM_3 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_frontend { 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head connectivity_list; /* List of front-ends that can 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds be connected to a particular 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds demux */ 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void* priv; /* Pointer to private data of the API client */ 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds enum dmx_frontend_source source; 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* MPEG-2 TS Demux */ 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Flags OR'ed in the capabilites field of struct dmx_demux. 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_FILTERING 1 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_PES_FILTERING 2 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_SECTION_FILTERING 4 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */ 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_CRC_CHECKING 16 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_TS_DESCRAMBLING 32 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_SECTION_PAYLOAD_DESCRAMBLING 64 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_MAC_ADDRESS_DESCRAMBLING 128 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Demux resource type identifier. 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/ 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_FE_ENTRY(): Casts elements in the list of registered 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * front-ends from the generic type struct list_head 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to the type * struct dmx_frontend 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *. 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/ 2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list) 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dmx_demux { 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 capabilities; /* Bitfield of capability flags */ 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend; /* Front-end connected to the demux */ 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head reg_list; /* List of registered demuxes */ 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void* priv; /* Pointer to private data of the API client */ 2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int users; /* Number of users */ 2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*open) (struct dmx_demux* demux); 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*close) (struct dmx_demux* demux); 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*write) (struct dmx_demux* demux, const char* buf, size_t count); 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*allocate_ts_feed) (struct dmx_demux* demux, 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_ts_feed** feed, 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dmx_ts_cb callback); 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*release_ts_feed) (struct dmx_demux* demux, 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_ts_feed* feed); 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*allocate_section_feed) (struct dmx_demux* demux, 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_feed** feed, 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds dmx_section_cb callback); 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*release_section_feed) (struct dmx_demux* demux, 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_section_feed* feed); 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*descramble_mac_address) (struct dmx_demux* demux, 2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8* buffer1, 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer1_length, 2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8* buffer2, 2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer2_length, 2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pid); 2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*descramble_section_payload) (struct dmx_demux* demux, 2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8* buffer1, 2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds size_t buffer1_length, 2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8* buffer2, size_t buffer2_length, 2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 pid); 2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*add_frontend) (struct dmx_demux* demux, 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend); 2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*remove_frontend) (struct dmx_demux* demux, 2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend); 2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head* (*get_frontends) (struct dmx_demux* demux); 2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*connect_frontend) (struct dmx_demux* demux, 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dmx_frontend* frontend); 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*disconnect_frontend) (struct dmx_demux* demux); 2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids); 2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*get_stc) (struct dmx_demux* demux, unsigned int num, 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u64 *stc, unsigned int *base); 2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Demux directory */ 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*--------------------------------------------------------------------------*/ 2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DMX_DIR_ENTRY(): Casts elements in the list of registered 2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * demuxes from the generic type struct list_head* to the type struct dmx_demux 2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *. 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DMX_DIR_ENTRY(list) list_entry(list, struct dmx_demux, reg_list) 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* #ifndef __DEMUX_H */ 302