annotate libmpdemux/dvbin.c @ 10560:11826d9f90c7

this patch fixes 1) some bugs introduced in the tuner autodetection and in the channel-parsing functions, 3) retries reading when the mplayer/mencoder don't read fast enough (sooner it exited) but especially 4) makes the stream compliant with the new, modular stream api (the one currently in CVS is not and is totally unreachable). [and maybe more, next time please include cvslog in patch! -- A'rpi] patch by Nico <nsabbi@libero.it>
author arpi
date Mon, 11 Aug 2003 00:02:46 +0000
parents 76c6d8f1ebf5
children a57e8d980652
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
1 /*
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
2
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
3 dvbstream
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
4 (C) Dave Chapman <dave@dchapman.com> 2001, 2002.
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
5
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
6 The latest version can be found at http://www.linuxstb.org/dvbstream
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
7
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
8 Copyright notice:
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
9
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
10 This program is free software; you can redistribute it and/or modify
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
11 it under the terms of the GNU General Public License as published by
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
12 the Free Software Foundation; either version 2 of the License, or
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
13 (at your option) any later version.
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
14
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
15 This program is distributed in the hope that it will be useful,
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
18 GNU General Public License for more details.
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
19
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
21 along with this program; if not, write to the Free Software
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
23
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
24 */
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
25
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
26 #include "config.h"
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
27 #include <stdio.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
28 #include <stdlib.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
29 #include <string.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
30 #include <ctype.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
31 #include <sys/ioctl.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
32 #include <sys/time.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
33 #include <sys/poll.h>
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
34 #include <unistd.h>
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
35 #include <fcntl.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
36 #include <string.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
37 #include <errno.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
38 #include <fcntl.h>
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
39
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
40 #include "stream.h"
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
41 #include "demuxer.h"
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
42 #include "help_mp.h"
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
43 #include "../m_option.h"
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
44 #include "../m_struct.h"
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
45
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
46 #include "dvbin.h"
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
47
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
48
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
49 #define MAX_CHANNELS 8
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
50 #define CHANNEL_LINE_LEN 256
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
51 #define min(a, b) ((a) <= (b) ? (a) : (b))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
52
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
53
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
54 //TODO: CAMBIARE list_ptr e da globale a per_priv
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
55
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
56
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
57 static struct stream_priv_s
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
58 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
59 char *prog;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
60 int card;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
61 char *type;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
62 int vid, aid;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
63 char *file;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
64 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
65 stream_defaults =
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
66 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
67 "", 1, "", 0, 0, "channels.conf"
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
68 };
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
69
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
70 #define ST_OFF(f) M_ST_OFF(struct stream_priv_s, f)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
71
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
72 /// URL definition
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
73 static m_option_t stream_params[] = {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
74 {"prog", ST_OFF(prog), CONF_TYPE_STRING, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
75 {"card", ST_OFF(card), CONF_TYPE_INT, M_OPT_RANGE, 1, 4, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
76 {"type", ST_OFF(type), CONF_TYPE_STRING, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
77 {"vid", ST_OFF(vid), CONF_TYPE_INT, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
78 {"aid", ST_OFF(aid), CONF_TYPE_INT, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
79 {"file", ST_OFF(file), CONF_TYPE_STRING, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
80
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
81 {"hostname", ST_OFF(prog), CONF_TYPE_STRING, 0, 0, 0, NULL },
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
82 {"filename", ST_OFF(card), CONF_TYPE_INT, M_OPT_RANGE, 1, 4, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
83 {NULL, NULL, 0, 0, 0, 0, NULL}
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
84 };
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
85
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
86 static struct m_struct_st stream_opts = {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
87 "dvbin",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
88 sizeof(struct stream_priv_s),
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
89 &stream_defaults,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
90 stream_params
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
91 };
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
92
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
93
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
94
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
95 m_option_t dvbin_opts_conf[] = {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
96 {"prog", &stream_defaults.prog, CONF_TYPE_STRING, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
97 {"card", &stream_defaults.card, CONF_TYPE_INT, M_OPT_RANGE, 1, 4, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
98 {"type", &stream_defaults.type, CONF_TYPE_STRING, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
99 {"vid", &stream_defaults.vid, CONF_TYPE_INT, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
100 {"aid", &stream_defaults.aid, CONF_TYPE_INT, 0, 0 ,0, NULL},
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
101 {"file", &stream_defaults.file, CONF_TYPE_STRING, 0, 0 ,0, NULL},
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
102
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
103 {NULL, NULL, 0, 0, 0, 0, NULL}
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
104 };
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
105
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
106
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
107
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
108
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
109 extern int dvb_set_ts_filt(int fd, uint16_t pid, dmx_pes_type_t pestype);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
110 extern int dvb_demux_stop(int fd);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
111 extern int dvb_get_tuner_type(dvb_priv_t *priv);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
112
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
113 extern int dvb_tune(dvb_priv_t *priv, int freq, char pol, int srate, int diseqc, int tone,
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
114 fe_spectral_inversion_t specInv, fe_modulation_t modulation, fe_guard_interval_t guardInterval,
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
115 fe_transmit_mode_t TransmissionMode, fe_bandwidth_t bandWidth, fe_code_rate_t HP_CodeRate);
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
116 extern char *dvb_dvrdev[4], *dvb_demuxdev[4];
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
117
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
118 dvb_channels_list *dvb_list_ptr = NULL;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
119
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
120
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
121 static dvb_channels_list *dvb_get_channels(char *filename, int type)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
122 {
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
123 dvb_channels_list *list;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
124 FILE *f;
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
125 uint8_t line[CHANNEL_LINE_LEN];
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
126
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
127 int fields, row_count;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
128 dvb_channel_t *ptr;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
129 char *tmp_lcr, *tmp_hier, *inv, *bw, *cr, *mod, *transm, *gi;
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
130 const char *cbl_conf = "%a[^:]:%d:%c:%d:%a[^:]:%a[^:]:%d:%d\n";
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
131 const char *sat_conf = "%a[^:]:%d:%c:%d:%d:%d:%d:%d:%d:%d\n";
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
132 const char *ter_conf = "%a[^:]:%d:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%d:%d\n";
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
133
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
134 if(type != TUNER_SAT && type != TUNER_TER && type != TUNER_CBL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
135 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
136 mp_msg(MSGT_DEMUX, MSGL_V, "DVB_GET_CHANNELS: wrong tuner type, exit\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
137 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
138 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
139
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
140 list = malloc(sizeof(dvb_channels_list));
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
141 if(list == NULL)
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
142 {
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
143 mp_msg(MSGT_DEMUX, MSGL_V, "DVB_GET_CHANNELS: couldn't malloc enough memory\n");
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
144 return NULL;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
145 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
146
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
147 bzero(list, sizeof(dvb_channels_list));
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
148 mp_msg(MSGT_DEMUX, MSGL_V, "CONFIG_READ FILE: %s, type: %d\n", filename, type);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
149 if((f=fopen(filename, "r"))==NULL)
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
150 {
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
151 mp_msg(MSGT_DEMUX, MSGL_FATAL, "CAN'T READ CONFIG FILE %s\n", filename);
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
152 return NULL;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
153 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
154
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
155 list->NUM_CHANNELS = 0;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
156 row_count = 0;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
157 while(! feof(f) && row_count < 512)
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
158 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
159 if( fgets(line, CHANNEL_LINE_LEN, f) == NULL ) continue;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
160
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
161 if(line[0] == '#')
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
162 continue;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
163
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
164 ptr = &(list->channels[list->NUM_CHANNELS]);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
165
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
166 if(type == TUNER_TER)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
167 {
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
168 fields = sscanf(line, ter_conf,
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
169 &ptr->name, &ptr->freq, &inv, &bw, &cr, &tmp_lcr, &mod,
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
170 &transm, &gi, &tmp_hier, &ptr->vpid, &ptr->apid1);
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
171 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
172 else if(type == TUNER_CBL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
173 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
174 fields = sscanf(line, cbl_conf,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
175 &ptr->name, &ptr->freq, &inv, &ptr->srate,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
176 &cr, &mod, &ptr->vpid, &ptr->apid1);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
177 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
178 else //SATELLITE
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
179 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
180 fields = sscanf(line, sat_conf,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
181 &ptr->name, &ptr->freq, &ptr->pol, &ptr->diseqc, &ptr->srate, &ptr->vpid, &ptr->apid1,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
182 &ptr->tpid, &ptr->ca, &ptr->progid);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
183 ptr->pol = toupper(ptr->pol);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
184 ptr->freq *= 1000UL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
185 ptr->srate *= 1000UL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
186 ptr->tone = -1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
187 mp_msg(MSGT_DEMUX, MSGL_V,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
188 "NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d, TONE: %d, VPID: %d, APID1: %d, APID2: %d, TPID: %d, PROGID: %d, NUM: %d\n",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
189 fields, ptr->name, ptr->freq, ptr->srate, ptr->pol, ptr->diseqc, ptr->tone, ptr->vpid, ptr->apid1, ptr->apid2, ptr->tpid, ptr->progid, list->NUM_CHANNELS);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
190 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
191
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
192
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
193 if((type == TUNER_TER) || (type == TUNER_CBL))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
194 {
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
195 if(! strcmp(inv, "INVERSION_ON"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
196 ptr->inv = INVERSION_ON;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
197 else if(! strcmp(inv, "INVERSION_OFF"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
198 ptr->inv = INVERSION_OFF;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
199 else
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
200 ptr->inv = INVERSION_AUTO;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
201
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
202
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
203 if(! strcmp(cr, "FEC_1_2"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
204 ptr->cr =FEC_1_2;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
205 else if(! strcmp(cr, "FEC_2_3"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
206 ptr->cr =FEC_2_3;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
207 else if(! strcmp(cr, "FEC_3_4"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
208 ptr->cr =FEC_3_4;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
209 #ifdef HAVE_DVB_HEAD
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
210 else if(! strcmp(cr, "FEC_4_5"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
211 ptr->cr =FEC_4_5;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
212 else if(! strcmp(cr, "FEC_6_7"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
213 ptr->cr =FEC_6_7;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
214 else if(! strcmp(cr, "FEC_8_9"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
215 ptr->cr =FEC_8_9;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
216 #endif
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
217 else if(! strcmp(cr, "FEC_5_6"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
218 ptr->cr =FEC_5_6;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
219 else if(! strcmp(cr, "FEC_7_8"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
220 ptr->cr =FEC_7_8;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
221 else if(! strcmp(cr, "FEC_NONE"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
222 ptr->cr =FEC_NONE;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
223 else ptr->cr =FEC_AUTO;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
224
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
225 if(! strcmp(mod, "QAM_128"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
226 ptr->mod = QAM_128;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
227 else if(! strcmp(mod, "QAM_256"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
228 ptr->mod = QAM_256;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
229 else if(! strcmp(mod, "QAM_64"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
230 ptr->mod = QAM_64;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
231 else if(! strcmp(mod, "QAM_32"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
232 ptr->mod = QAM_32;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
233 else if(! strcmp(mod, "QAM_16"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
234 ptr->mod = QAM_16;
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
235 //else ptr->mod = QPSK;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
236 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
237
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
238
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
239 if(type == TUNER_TER)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
240 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
241 if(! strcmp(bw, "BANDWIDTH_6_MHZ"))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
242 ptr->bw = BANDWIDTH_6_MHZ;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
243 else if(! strcmp(bw, "BANDWIDTH_7_MHZ"))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
244 ptr->bw = BANDWIDTH_7_MHZ;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
245 else if(! strcmp(bw, "BANDWIDTH_8_MHZ"))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
246 ptr->bw = BANDWIDTH_8_MHZ;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
247
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
248
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
249 if(! strcmp(transm, "TRANSMISSION_MODE_2K"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
250 ptr->trans = TRANSMISSION_MODE_2K;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
251 else if(! strcmp(transm, "TRANSMISSION_MODE_8K"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
252 ptr->trans = TRANSMISSION_MODE_8K;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
253
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
254
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
255 if(! strcmp(gi, "GUARD_INTERVAL_1_32"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
256 ptr->gi = GUARD_INTERVAL_1_32;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
257 else if(! strcmp(gi, "GUARD_INTERVAL_1_16"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
258 ptr->gi = GUARD_INTERVAL_1_16;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
259 else if(! strcmp(gi, "GUARD_INTERVAL_1_8"))
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
260 ptr->gi = GUARD_INTERVAL_1_8;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
261 else ptr->gi = GUARD_INTERVAL_1_4;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
262 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
263
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
264 list->NUM_CHANNELS++;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
265 row_count++;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
266 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
267
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
268 fclose(f);
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
269 list->current = 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
270 return list;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
271 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
272
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
273
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
274
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
275 static int dvb_streaming_read(stream_t *stream, char *buffer, int size)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
276 {
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
277 struct pollfd pfds[1];
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
278 int pos=0, tries, rk;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
279 int fd = stream->fd;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
280 dvb_priv_t *priv = (dvb_priv_t *) stream->priv;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
281
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
282 mp_msg(MSGT_DEMUX, MSGL_V, "dvb_streaming_read(%d)\n", size);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
283
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
284 if(priv->retry)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
285 tries = 5;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
286 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
287 tries = 1;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
288 while(pos < size)
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
289 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
290 pfds[0].fd = fd;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
291 pfds[0].events = POLLIN | POLLPRI;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
292
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
293 poll(pfds, 1, 500);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
294 rk = size - pos;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
295 if((rk = read(fd, &buffer[pos], rk)) > 0)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
296 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
297 pos += rk;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
298 mp_msg(MSGT_DEMUX, MSGL_V, "ret (%d) bytes\n", pos);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
299 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
300 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
301 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
302 mp_msg(MSGT_DEMUX, MSGL_ERR, "dvb_streaming_read, attempt N. %d failed with errno %d when reading %d bytes\n", tries, errno, size-pos);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
303 if(--tries > 0)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
304 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
305 errno = 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
306 //reset_demuxers(priv);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
307 continue;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
308 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
309 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
310 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
311 errno = 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
312 break;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
313 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
314 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
315 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
316
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
317 if(! pos)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
318 mp_msg(MSGT_DEMUX, MSGL_ERR, "dvb_streaming_read, return %d bytes\n", pos);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
319
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
320 return pos;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
321 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
322
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
323
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
324 static int reset_demuxers(dvb_priv_t *priv)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
325 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
326 dvb_channel_t *channel;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
327 dvb_channels_list *list = priv->list;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
328
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
329 channel = &(list->channels[list->current]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
330
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
331 if(priv->is_on) //the fds are already open and we have to stop the demuxers
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
332 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
333 dvb_demux_stop(priv->demux_fd[0]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
334 dvb_demux_stop(priv->demux_fd[1]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
335 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
336
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
337 if(channel->vpid)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
338 if(! dvb_set_ts_filt(priv->demux_fd[0], channel->vpid, DMX_PES_VIDEO))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
339 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
340 //dvb_demux_start(priv->demux_fd[0]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
341
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
342 if(channel->apid1)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
343 if(! dvb_set_ts_filt(priv->demux_fd[1], channel->apid1, DMX_PES_AUDIO))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
344 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
345
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
346 printf("RESET DEMUXERS SUCCEDED, errno=%d\n\n\n", errno);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
347 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
348
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
349
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
350 int dvb_set_channel(dvb_priv_t *priv, int n)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
351 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
352 dvb_channels_list *list;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
353 dvb_channel_t *channel;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
354 int do_tuning;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
355 stream_t *stream = (stream_t*) priv->stream;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
356 char buf[4096];
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
357
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
358 if(priv->is_on) //the fds are already open and we have to stop the demuxers
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
359 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
360 dvb_demux_stop(priv->demux_fd[0]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
361 dvb_demux_stop(priv->demux_fd[1]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
362 priv->retry = 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
363 while(stream_read(stream, buf, 4096)); //empty both the stream's and driver's buffer
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
364 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
365
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
366 priv->retry = 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
367 mp_msg(MSGT_DEMUX, MSGL_V, "DVB_SET_CHANNEL: channel %d\n", n);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
368 list = priv->list;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
369 if(list == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
370 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
371 mp_msg(MSGT_DEMUX, MSGL_ERR, "dvb_set_channel: LIST NULL PTR, quit\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
372 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
373 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
374
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
375 if((n > list->NUM_CHANNELS) || (n < 0))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
376 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
377 mp_msg(MSGT_DEMUX, MSGL_ERR, "dvb_set_channel: INVALID CHANNEL NUMBER: %d, abort\n", n);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
378 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
379 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
380
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
381 list->current = n;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
382 channel = &(list->channels[list->current]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
383 mp_msg(MSGT_DEMUX, MSGL_V, "DVB_SET_CHANNEL: new channel name=%s\n", channel->name);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
384
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
385 switch(priv->tuner_type)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
386 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
387 case TUNER_SAT:
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
388 sprintf(priv->new_tuning, "%d|%09d|%09d|%d|%c", priv->card, channel->freq, channel->srate, channel->diseqc, channel->pol);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
389 break;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
390
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
391 case TUNER_TER:
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
392 sprintf(priv->new_tuning, "%d|%09d|%d|%d|%d|%d|%d|%d", priv->card, channel->freq, channel->inv,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
393 channel->bw, channel->cr, channel->mod, channel->trans, channel->gi);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
394 break;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
395
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
396 case TUNER_CBL:
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
397 sprintf(priv->new_tuning, "%d|%09d|%d|%d|%d|%d", priv->card, channel->freq, channel->inv, channel->srate,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
398 channel->cr, channel->mod);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
399 break;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
400 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
401
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
402
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
403
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
404 if(strcmp(priv->prev_tuning, priv->new_tuning))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
405 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
406 mp_msg(MSGT_DEMUX, MSGL_V, "DIFFERENT TUNING THAN THE PREVIOUS: %s -> %s\n", priv->prev_tuning, priv->new_tuning);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
407 strcpy(priv->prev_tuning, priv->new_tuning);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
408 do_tuning = 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
409 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
410 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
411 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
412 mp_msg(MSGT_DEMUX, MSGL_V, "SAME TUNING, NO TUNING\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
413 do_tuning = 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
414 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
415
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
416 stream->eof=1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
417 stream_reset(stream);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
418
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
419
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
420 if(do_tuning)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
421 if (! dvb_tune(priv, channel->freq, channel->pol, channel->srate, channel->diseqc, channel->tone,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
422 channel->inv, channel->mod, channel->gi, channel->trans, channel->bw, channel->cr))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
423 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
424
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
425
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
426 priv->is_on = 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
427
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
428 //sets demux filters and restart the stream
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
429 if(channel->vpid)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
430 if(! dvb_set_ts_filt(priv->demux_fd[0], channel->vpid, DMX_PES_VIDEO))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
431 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
432 //dvb_demux_start(priv->demux_fd[0]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
433
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
434 if(channel->apid1)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
435 if(! dvb_set_ts_filt(priv->demux_fd[1], channel->apid1, DMX_PES_AUDIO))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
436 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
437 //dvb_demux_start(priv->demux_fd[1]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
438
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
439 return 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
440 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
441
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
442
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
443
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
444 int dvb_step_channel(dvb_priv_t *priv, int dir)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
445 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
446 int new_current;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
447 dvb_channels_list *list;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
448
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
449 mp_msg(MSGT_DEMUX, MSGL_V, "DVB_STEP_CHANNEL dir %d\n", dir);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
450
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
451 if(priv == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
452 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
453 mp_msg(MSGT_DEMUX, MSGL_ERR, "dvb_step_channel: NULL priv_ptr, quit\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
454 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
455 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
456
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
457 list = priv->list;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
458 if(list == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
459 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
460 mp_msg(MSGT_DEMUX, MSGL_ERR, "dvb_step_channel: NULL list_ptr, quit\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
461 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
462 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
463
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
464
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
465 if(dir == DVB_CHANNEL_HIGHER)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
466 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
467 if(list->current == list->NUM_CHANNELS-1)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
468 return 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
469
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
470 new_current = list->current + 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
471 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
472 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
473 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
474 if(list->current == 0)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
475 return 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
476
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
477 new_current = list->current - 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
478 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
479
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
480 return dvb_set_channel(priv, new_current);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
481 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
482
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
483
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
484
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
485
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
486 extern char *get_path(char *);
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
487
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
488 static void dvbin_close(stream_t *stream)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
489 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
490 dvb_priv_t *priv = (dvb_priv_t *) stream->priv;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
491
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
492 close(priv->dvr_fd);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
493 close(priv->demux_fd[0]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
494 close(priv->demux_fd[1]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
495 priv->is_on = 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
496 priv->stream = NULL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
497 if(dvb_list_ptr)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
498 free(dvb_list_ptr);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
499
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
500 dvb_list_ptr = NULL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
501 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
502
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
503
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
504 static int dvb_streaming_start(dvb_priv_t *priv, struct stream_priv_s *opts, int tuner_type)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
505 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
506 int pids[MAX_CHANNELS], pestypes[MAX_CHANNELS], npids = 0, i;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
507 dvb_channel_t *channel = NULL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
508 stream_t *stream = (stream_t*) priv->stream;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
509
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
510
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
511 mp_msg(MSGT_DEMUX, MSGL_INFO, "code taken from dvbstream for mplayer v0.4pre1 - (C) Dave Chapman 2001\n");
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
512 mp_msg(MSGT_DEMUX, MSGL_INFO, "Released under the GPL.\n");
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
513 mp_msg(MSGT_DEMUX, MSGL_INFO, "Latest version available from http://www.linuxstb.org/\n");
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
514 mp_msg(MSGT_DEMUX, MSGL_V, "PROG: %s, CARD: %d, VID: %d, AID: %d, TYPE: %s, FILE: %s\n",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
515 opts->prog, opts->card, opts->vid, opts->aid, opts->type, opts->file);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
516
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
517 priv->is_on = 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
518
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
519 if(strlen(opts->prog))
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
520 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
521 if(dvb_list_ptr != NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
522 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
523 i = 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
524 while((channel == NULL) && i < dvb_list_ptr->NUM_CHANNELS)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
525 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
526 if(! strcmp(dvb_list_ptr->channels[i].name, opts->prog))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
527 channel = &(dvb_list_ptr->channels[i]);
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
528
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
529 i++;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
530 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
531
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
532 if(channel != NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
533 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
534 dvb_list_ptr->current = i-1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
535 mp_msg(MSGT_DEMUX, MSGL_V, "PROGRAM NUMBER %d: name=%s, vid=%d, aid=%d, freq=%lu, srate=%lu, pol=%c, diseqc: %d, tone: %d\n", i-1,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
536 channel->name, channel->vpid, channel->apid1,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
537 channel->freq, channel->srate, channel->pol, channel->diseqc, channel->tone);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
538 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
539 else if(opts->prog)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
540 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
541 mp_msg(MSGT_DEMUX, MSGL_ERR, "\n\nDVBIN: no such channel \"%s\"\n\n", opts->prog);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
542 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
543 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
544 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
545 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
546 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
547 mp_msg(MSGT_DEMUX, MSGL_ERR, "DVBIN: chanel %s requested, but no channel list supplied %s\n", opts->prog);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
548 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
549 }
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
550 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
551
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
552
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
553
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
554 if(opts->vid > 0)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
555 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
556 pids[npids] = opts->vid;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
557 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
558 else if(channel != NULL)
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
559 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
560 pids[npids] = channel->vpid;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
561 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
562 pestypes[npids] = DMX_PES_VIDEO;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
563 npids++;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
564
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
565 if(opts->aid > 0)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
566 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
567 pids[npids] = opts->aid;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
568 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
569 else if(channel != NULL)
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
570 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
571 pids[npids] = channel->apid1;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
572 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
573 pestypes[npids] = DMX_PES_AUDIO;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
574 npids++;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
575
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
576
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
577
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
578 priv->demux_fd[0] = open(dvb_demuxdev[priv->card], O_RDWR);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
579 if(priv->demux_fd[0] < 0)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
580 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
581 mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR OPENING DEMUX 0: %d\n", errno);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
582 return 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
583 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
584
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
585 priv->demux_fd[1] = open(dvb_demuxdev[priv->card], O_RDWR);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
586 if(priv->demux_fd[1] < 0)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
587 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
588 mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR OPENING DEMUX 1: %d\n", errno);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
589 return 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
590 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
591
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
592
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
593 priv->dvr_fd = open(dvb_dvrdev[priv->card], O_RDONLY| O_NONBLOCK);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
594 if(priv->dvr_fd < 0)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
595 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
596 mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR OPENING DVR DEVICE %s: %d\n", dvb_dvrdev[priv->card], errno);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
597 return 0;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
598 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
599
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
600
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
601 strcpy(priv->prev_tuning, "");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
602 if(!dvb_set_channel(priv, dvb_list_ptr->current))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
603 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
604 mp_msg(MSGT_DEMUX, MSGL_ERR, "ERROR, COULDN'T SET CHANNEL %i: ", dvb_list_ptr->current);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
605 dvbin_close(stream);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
606 return 0;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
607 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
608
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
609 stream->fd = priv->dvr_fd;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
610
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
611 mp_msg(MSGT_DEMUX, MSGL_V, "SUCCESSFUL EXIT from dvb_streaming_start\n");
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
612
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
613 return 1;
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
614 }
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
615
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
616
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
617
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
618
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
619 static int dvb_open(stream_t *stream, int mode, void *opts, int *file_format)
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
620 {
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
621 // I don't force the file format bacause, although it's almost always TS,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
622 // there are some providers that stream an IP multicast with M$ Mpeg4 inside
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
623 struct stream_priv_s* p = (struct stream_priv_s*)opts;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
624 char *name = NULL, *filename;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
625 dvb_priv_t *priv;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
626 int tuner_type;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
627
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
628
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
629
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
630 if(mode != STREAM_READ)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
631 return STREAM_UNSUPORTED;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
632
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
633 stream->priv = (dvb_priv_t*) malloc(sizeof(dvb_priv_t));
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
634 if(stream->priv == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
635 return STREAM_ERROR;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
636
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
637 priv = (dvb_priv_t *)stream->priv;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
638 priv->stream = stream;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
639
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
640 name = malloc(sizeof(char)*128);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
641
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
642 if(name == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
643 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
644 mp_msg(MSGT_DEMUX, MSGL_ERR, "COULDN'T MALLOC SOME TMP MEMORY, EXIT!\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
645 return STREAM_ERROR;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
646 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
647
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
648 priv->card = p->card - 1;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
649
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
650 if(!strncmp(p->type, "CBL", 3))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
651 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
652 tuner_type = TUNER_CBL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
653 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
654 else if(!strncmp(p->type, "TER", 3))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
655 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
656 tuner_type = TUNER_TER;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
657 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
658 else if(!strncmp(p->type, "SAT", 3))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
659 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
660 tuner_type = TUNER_SAT;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
661 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
662 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
663 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
664 int t = dvb_get_tuner_type(priv);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
665
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
666 if((t==TUNER_SAT) || (t==TUNER_TER) || (t==TUNER_CBL))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
667 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
668 tuner_type = t;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
669 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
670 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
671
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
672 priv->tuner_type = tuner_type;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
673
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
674 mp_msg(MSGT_DEMUX, MSGL_V, "OPEN_DVB: prog=%s, card=%d, type=%d, vid=%d, aid=%d, file=%s\n",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
675 p->prog, priv->card+1, priv->tuner_type, p->vid, p->aid, p->file);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
676
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
677 if(dvb_list_ptr == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
678 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
679 filename = get_path(p->file);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
680 if(filename)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
681 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
682 if((dvb_list_ptr = dvb_get_channels(filename, tuner_type)) == NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
683 mp_msg(MSGT_DEMUX, MSGL_ERR, "EMPTY CHANNELS LIST FROM FILE %s!\n", filename);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
684 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
685 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
686 priv->list = dvb_list_ptr;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
687 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
688 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
689 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
690 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
691 dvb_list_ptr = NULL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
692 mp_msg(MSGT_DEMUX, MSGL_WARN, "NO CHANNELS FILE FOUND!\n");
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
693 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
694 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
695 else
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
696 priv->list = dvb_list_ptr;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
697
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
698
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
699 if(! strcmp(p->prog, ""))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
700 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
701 if(dvb_list_ptr != NULL)
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
702 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
703 dvb_channel_t *channel;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
704
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
705 channel = &(dvb_list_ptr->channels[dvb_list_ptr->current]);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
706 p->prog = channel->name;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
707 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
708 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
709
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
710
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
711 if(! dvb_streaming_start(priv, p, tuner_type))
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
712 {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
713 free(stream->priv);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
714 stream->priv = NULL;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
715 return STREAM_ERROR;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
716 }
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
717
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
718 stream->type = STREAMTYPE_DVB;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
719 stream->fill_buffer = dvb_streaming_read;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
720 stream->close = dvbin_close;
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
721 m_struct_free(&stream_opts, opts);
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
722
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
723 return STREAM_OK;
9610
76c6d8f1ebf5 this is a combo patch that:
arpi
parents:
diff changeset
724 }
10560
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
725
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
726
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
727
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
728 stream_info_t stream_info_dvb = {
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
729 "Dvb Input",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
730 "dvbin",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
731 "Nico",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
732 "based on the code from ??? (probably Arpi)",
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
733 dvb_open,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
734 { "dvb", NULL },
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
735 &stream_opts,
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
736 1 // Urls are an option string
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
737 };
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
738
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
739
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
740
11826d9f90c7 this patch fixes
arpi
parents: 9610
diff changeset
741