2005-04-16 14:51:09 +02:00
|
|
|
/* Imported from the dvbstream project
|
|
|
|
*
|
2006-06-22 15:34:00 +02:00
|
|
|
* Modified for use with MPlayer, for details see the changelog at
|
|
|
|
* http://svn.mplayerhq.hu/mplayer/trunk/
|
2005-04-16 14:51:09 +02:00
|
|
|
* $Id$
|
|
|
|
*/
|
2003-03-16 21:13:28 +01:00
|
|
|
|
2008-02-22 10:09:46 +01:00
|
|
|
#ifndef MPLAYER_DVBIN_H
|
|
|
|
#define MPLAYER_DVBIN_H
|
2003-03-16 21:13:28 +01:00
|
|
|
|
2010-01-04 19:58:35 +01:00
|
|
|
#include "config.h"
|
2003-08-11 02:02:46 +02:00
|
|
|
#include "stream.h"
|
|
|
|
|
2017-10-10 15:51:16 +02:00
|
|
|
#if !HAVE_GPL
|
|
|
|
#error GPL only
|
|
|
|
#endif
|
|
|
|
|
2015-01-06 20:19:49 +01:00
|
|
|
#define SLOF (11700 * 1000UL)
|
|
|
|
#define LOF1 (9750 * 1000UL)
|
|
|
|
#define LOF2 (10600 * 1000UL)
|
2006-07-15 00:07:05 +02:00
|
|
|
|
2010-06-21 16:39:24 +02:00
|
|
|
#include <inttypes.h>
|
2010-03-02 20:57:17 +01:00
|
|
|
#include <linux/dvb/dmx.h>
|
|
|
|
#include <linux/dvb/frontend.h>
|
|
|
|
#include <linux/dvb/version.h>
|
2003-03-16 21:13:28 +01:00
|
|
|
|
2017-12-15 13:37:30 +01:00
|
|
|
#define MAX_ADAPTERS 16
|
|
|
|
#define MAX_FRONTENDS 8
|
|
|
|
|
2023-01-10 16:28:31 +01:00
|
|
|
#if DVB_API_VERSION < 5 || DVB_API_VERSION_MINOR < 8
|
|
|
|
#error DVB support requires a non-ancient kernel
|
2005-01-06 10:43:10 +01:00
|
|
|
#endif
|
2003-03-16 21:13:28 +01:00
|
|
|
|
|
|
|
#define DVB_CHANNEL_LOWER -1
|
|
|
|
#define DVB_CHANNEL_HIGHER 1
|
|
|
|
|
2004-07-12 22:52:02 +02:00
|
|
|
#ifndef DMX_FILTER_SIZE
|
2015-01-05 20:27:22 +01:00
|
|
|
#define DMX_FILTER_SIZE 32
|
2004-07-12 22:52:02 +02:00
|
|
|
#endif
|
2003-03-16 21:13:28 +01:00
|
|
|
|
|
|
|
typedef struct {
|
2015-01-06 20:19:49 +01:00
|
|
|
char *name;
|
2017-02-13 02:55:35 +01:00
|
|
|
unsigned int freq, srate, diseqc;
|
2015-01-06 20:19:49 +01:00
|
|
|
char pol;
|
2017-02-13 02:55:35 +01:00
|
|
|
unsigned int tpid, dpid1, dpid2, progid, ca, pids[DMX_FILTER_SIZE], pids_cnt;
|
2017-12-15 13:37:30 +01:00
|
|
|
bool is_dvb_x2; /* Used only in dvb_get_channels() and parse_vdr_par_string(), use delsys. */
|
|
|
|
unsigned int frontend;
|
2017-02-13 02:55:35 +01:00
|
|
|
unsigned int delsys;
|
|
|
|
unsigned int stream_id;
|
|
|
|
unsigned int service_id;
|
2015-01-06 20:19:49 +01:00
|
|
|
fe_spectral_inversion_t inv;
|
|
|
|
fe_modulation_t mod;
|
|
|
|
fe_transmit_mode_t trans;
|
|
|
|
fe_bandwidth_t bw;
|
|
|
|
fe_guard_interval_t gi;
|
|
|
|
fe_code_rate_t cr, cr_lp;
|
|
|
|
fe_hierarchy_t hier;
|
2003-03-16 21:13:28 +01:00
|
|
|
} dvb_channel_t;
|
|
|
|
|
|
|
|
typedef struct {
|
2017-02-13 02:55:35 +01:00
|
|
|
unsigned int NUM_CHANNELS;
|
|
|
|
unsigned int current;
|
2015-01-06 20:19:49 +01:00
|
|
|
dvb_channel_t *channels;
|
2017-02-13 02:55:35 +01:00
|
|
|
} dvb_channels_list_t;
|
2003-03-16 21:13:28 +01:00
|
|
|
|
2004-04-26 23:22:33 +02:00
|
|
|
typedef struct {
|
2015-01-06 20:19:49 +01:00
|
|
|
int devno;
|
2017-12-15 13:37:30 +01:00
|
|
|
unsigned int delsys_mask[MAX_FRONTENDS];
|
2017-02-13 02:55:35 +01:00
|
|
|
dvb_channels_list_t *list;
|
|
|
|
} dvb_adapter_config_t;
|
2004-04-26 23:22:33 +02:00
|
|
|
|
|
|
|
typedef struct {
|
2017-02-13 02:55:35 +01:00
|
|
|
unsigned int adapters_count;
|
|
|
|
dvb_adapter_config_t *adapters;
|
|
|
|
unsigned int cur_adapter;
|
2017-12-15 13:37:30 +01:00
|
|
|
unsigned int cur_frontend;
|
2003-03-16 21:13:28 +01:00
|
|
|
|
2015-01-06 20:19:49 +01:00
|
|
|
int fe_fd;
|
|
|
|
int dvr_fd;
|
2016-01-07 18:53:42 +01:00
|
|
|
int demux_fd[3], demux_fds[DMX_FILTER_SIZE], demux_fds_cnt;
|
2015-01-06 20:19:49 +01:00
|
|
|
|
2023-10-20 21:17:22 +02:00
|
|
|
bool is_on;
|
2015-01-06 20:19:49 +01:00
|
|
|
int retry;
|
2017-02-13 02:55:35 +01:00
|
|
|
unsigned int last_freq;
|
2016-01-07 23:55:15 +01:00
|
|
|
bool switching_channel;
|
2016-01-08 18:37:30 +01:00
|
|
|
bool stream_used;
|
2016-01-07 23:30:46 +01:00
|
|
|
} dvb_state_t;
|
|
|
|
|
2017-02-13 02:55:35 +01:00
|
|
|
typedef struct {
|
2015-01-06 20:19:49 +01:00
|
|
|
char *cfg_prog;
|
2017-02-13 02:55:35 +01:00
|
|
|
int cfg_devno;
|
2015-01-06 20:19:49 +01:00
|
|
|
int cfg_timeout;
|
|
|
|
char *cfg_file;
|
2023-02-20 04:32:50 +01:00
|
|
|
bool cfg_full_transponder;
|
2019-10-01 23:54:54 +02:00
|
|
|
int cfg_channel_switch_offset;
|
2019-10-01 01:46:07 +02:00
|
|
|
} dvb_opts_t;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
struct mp_log *log;
|
|
|
|
|
|
|
|
dvb_state_t *state;
|
|
|
|
|
2019-10-01 23:31:17 +02:00
|
|
|
char *prog;
|
|
|
|
int devno;
|
|
|
|
|
2023-10-20 20:08:06 +02:00
|
|
|
int opts_check_time;
|
2019-10-01 01:46:07 +02:00
|
|
|
dvb_opts_t *opts;
|
|
|
|
struct m_config_cache *opts_cache;
|
2003-03-16 21:13:28 +01:00
|
|
|
} dvb_priv_t;
|
|
|
|
|
2017-02-13 02:55:35 +01:00
|
|
|
|
|
|
|
/* Keep in sync with enum fe_delivery_system. */
|
|
|
|
#define SYS_DVB__COUNT__ (SYS_DVBC_ANNEX_C + 1)
|
|
|
|
|
|
|
|
|
|
|
|
#define DELSYS_BIT(__bit) (((unsigned int)1) << (__bit))
|
|
|
|
|
|
|
|
#define DELSYS_SET(__mask, __bit) \
|
|
|
|
(__mask) |= DELSYS_BIT((__bit))
|
|
|
|
|
|
|
|
#define DELSYS_IS_SET(__mask, __bit) \
|
|
|
|
(0 != ((__mask) & DELSYS_BIT((__bit))))
|
|
|
|
|
|
|
|
|
|
|
|
#define DELSYS_SUPP_MASK \
|
|
|
|
( \
|
|
|
|
DELSYS_BIT(SYS_DVBC_ANNEX_A) | \
|
|
|
|
DELSYS_BIT(SYS_DVBT) | \
|
|
|
|
DELSYS_BIT(SYS_DVBS) | \
|
|
|
|
DELSYS_BIT(SYS_DVBS2) | \
|
|
|
|
DELSYS_BIT(SYS_ATSC) | \
|
2017-10-08 18:34:45 +02:00
|
|
|
DELSYS_BIT(SYS_DVBC_ANNEX_B) | \
|
2017-02-13 02:55:35 +01:00
|
|
|
DELSYS_BIT(SYS_DVBT2) | \
|
2023-08-23 22:42:42 +02:00
|
|
|
DELSYS_BIT(SYS_ISDBT) | \
|
2017-02-13 02:55:35 +01:00
|
|
|
DELSYS_BIT(SYS_DVBC_ANNEX_C) \
|
|
|
|
)
|
|
|
|
|
2019-10-01 23:46:29 +02:00
|
|
|
void dvb_update_config(stream_t *);
|
2019-10-01 23:31:17 +02:00
|
|
|
int dvb_parse_path(stream_t *);
|
2017-02-13 02:55:35 +01:00
|
|
|
int dvb_set_channel(stream_t *, unsigned int, unsigned int);
|
2016-01-07 23:30:46 +01:00
|
|
|
dvb_state_t *dvb_get_state(stream_t *);
|
2003-03-16 21:13:28 +01:00
|
|
|
|
2008-02-22 10:09:46 +01:00
|
|
|
#endif /* MPLAYER_DVBIN_H */
|