aboutsummaryrefslogtreecommitdiffhomepage
path: root/stream/dvbin.h
blob: 4caba45c7d453a56833d4e5f17b137fe1c2db8b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* Imported from the dvbstream project
 *
 * Modified for use with MPlayer, for details see the changelog at
 * http://svn.mplayerhq.hu/mplayer/trunk/
 * $Id$
 */

#ifndef MPLAYER_DVBIN_H
#define MPLAYER_DVBIN_H

#include "config.h"
#include "stream.h"

#define SLOF (11700*1000UL)
#define LOF1 (9750*1000UL)
#define LOF2 (10600*1000UL)

#include <inttypes.h>
#include <linux/dvb/dmx.h>
#include <linux/dvb/frontend.h>
#include <linux/dvb/version.h>

#undef DVB_ATSC
#if defined(DVB_API_VERSION_MINOR)

/* kernel headers >=2.6.28 have version 5.
 *
 * FIXME: are there any real differences between 3.1 and 5?
 */

#if (DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR >= 1) || DVB_API_VERSION == 5
#define DVB_ATSC 1
#endif

#endif


#define DVB_CHANNEL_LOWER -1
#define DVB_CHANNEL_HIGHER 1

#ifndef DMX_FILTER_SIZE
#define DMX_FILTER_SIZE 16
#endif

typedef struct {
        char                            *name;
        int                             freq, srate, diseqc, tone;
        char                            pol;
        int                             tpid, dpid1, dpid2, progid, ca, pids[DMX_FILTER_SIZE], pids_cnt;
        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;
} dvb_channel_t;

typedef struct {
        uint16_t NUM_CHANNELS;
        uint16_t current;
        dvb_channel_t *channels;
} dvb_channels_list;

typedef struct {
        int type;
        dvb_channels_list *list;
        char *name;
        int devno;
} dvb_card_config_t;

typedef struct {
        int count;
        dvb_card_config_t *cards;
        void *priv;
} dvb_config_t;

typedef struct {
        struct mp_log *log;
        int fd;
        int card;
        int fe_fd;
        int sec_fd;
        int demux_fd[3], demux_fds[DMX_FILTER_SIZE], demux_fds_cnt;
        int dvr_fd;

        dvb_config_t *config;
        dvb_channels_list *list;
        int tuner_type;
        int is_on;
        int retry;
        int timeout;
        int last_freq;

        char *cfg_prog;
        int cfg_card;
        int cfg_timeout;
} dvb_priv_t;


#define TUNER_SAT       1
#define TUNER_TER       2
#define TUNER_CBL       3
#define TUNER_ATSC      4

int dvb_step_channel(stream_t *, int);
int dvb_set_channel(stream_t *, int, int);
dvb_config_t *dvb_get_config(stream_t *);
void dvb_free_config(dvb_config_t *config);

#endif /* MPLAYER_DVBIN_H */