summaryrefslogtreecommitdiffstats
path: root/stream/stream_dvb.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-01-06 20:19:49 +0100
committerwm4 <wm4@nowhere>2015-01-06 20:19:49 +0100
commitc915b0b0ecb9bbe66252ab96113c8c3bc9c70eb3 (patch)
treec26188fd3bb8ddf54b4e484f791f9b9f0f78910e /stream/stream_dvb.c
parentec92ab294e68dc29ce2c179bae4e1587950da1f2 (diff)
downloadmpv-c915b0b0ecb9bbe66252ab96113c8c3bc9c70eb3.tar.bz2
mpv-c915b0b0ecb9bbe66252ab96113c8c3bc9c70eb3.tar.xz
dvb: uncrustify
Mostly automatic, some manual changes.
Diffstat (limited to 'stream/stream_dvb.c')
-rw-r--r--stream/stream_dvb.c1588
1 files changed, 799 insertions, 789 deletions
diff --git a/stream/stream_dvb.c b/stream/stream_dvb.c
index 065604f7ab..66c762a75e 100644
--- a/stream/stream_dvb.c
+++ b/stream/stream_dvb.c
@@ -1,32 +1,32 @@
/*
-dvbstream
-(C) Dave Chapman <dave@dchapman.com> 2001, 2002.
+ dvbstream
+ (C) Dave Chapman <dave@dchapman.com> 2001, 2002.
-Original authors: Nico, probably Arpi
+ Original authors: Nico, probably Arpi
-Some code based on dvbstream, 0.4.3-pre3 (CVS checkout),
-http://sourceforge.net/projects/dvbtools/
+ Some code based on dvbstream, 0.4.3-pre3 (CVS checkout),
+ http://sourceforge.net/projects/dvbtools/
-Modified for use with MPlayer, for details see the changelog at
-http://svn.mplayerhq.hu/mplayer/trunk/
-$Id$
+ Modified for use with MPlayer, for details see the changelog at
+ http://svn.mplayerhq.hu/mplayer/trunk/
+ $Id$
-Copyright notice:
+ Copyright notice:
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
@@ -55,14 +55,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#include "dvbin.h"
#include "dvb_tune.h"
-
#define MAX_CHANNELS 8
#define CHANNEL_LINE_LEN 256
#define min(a, b) ((a) <= (b) ? (a) : (b))
-
-//TODO: CAMBIARE list_ptr e da globale a per_priv
-
#define OPT_BASE_STRUCT struct dvb_params
/// URL definition
@@ -76,7 +72,7 @@ const struct m_sub_options stream_dvb_conf = {
.opts = (const m_option_t[]) {
OPT_STRING("prog", cfg_prog, 0),
OPT_INTRANGE("card", cfg_card, 0, 1, 4),
- OPT_INTRANGE("timeout", cfg_timeout, 0, 1, 30),
+ OPT_INTRANGE("timeout", cfg_timeout, 0, 1, 30),
OPT_STRING("file", cfg_file, 0),
OPT_FLAG("full-transponder", cfg_full_transponder, 0),
{0}
@@ -89,665 +85,684 @@ const struct m_sub_options stream_dvb_conf = {
},
};
-static void parse_vdr_par_string(const char* vdr_par_str, dvb_channel_t* ptr) {
- //FIXME: There is more information in this parameter string, especially related
- // to non-DVB-S reception.
- if (vdr_par_str[0]) {
- const char* vdr_par = &vdr_par_str[0];
- while (vdr_par && *vdr_par) {
- switch (mp_toupper(*vdr_par)) {
- case 'H':
- ptr->pol = 'H';
- vdr_par++;
- break;
- case 'V':
- ptr->pol = 'V';
- vdr_par++;
- break;
- case 'S':
- vdr_par++;
- if (*vdr_par == '1') {
- ptr->is_dvb_s2 = true;
- } else {
- ptr->is_dvb_s2 = false;
- }
- vdr_par++;
- break;
- case 'P':
- vdr_par++;
- char *endptr = NULL;
- errno = 0;
- int n = strtol(vdr_par, &endptr, 10);
- if (!errno && endptr != vdr_par) {
- ptr->stream_id = n;
- vdr_par = endptr;
- }
- break;
- case 'I':
- vdr_par++;
- if (*vdr_par == '1') {
- ptr->inv = INVERSION_ON;
- } else {
- ptr->inv = INVERSION_OFF;
+static void parse_vdr_par_string(const char *vdr_par_str, dvb_channel_t *ptr)
+{
+ //FIXME: There is more information in this parameter string, especially related
+ // to non-DVB-S reception.
+ if (vdr_par_str[0]) {
+ const char *vdr_par = &vdr_par_str[0];
+ while (vdr_par && *vdr_par) {
+ switch (mp_toupper(*vdr_par)) {
+ case 'H':
+ ptr->pol = 'H';
+ vdr_par++;
+ break;
+ case 'V':
+ ptr->pol = 'V';
+ vdr_par++;
+ break;
+ case 'S':
+ vdr_par++;
+ if (*vdr_par == '1') {
+ ptr->is_dvb_s2 = true;
+ } else {
+ ptr->is_dvb_s2 = false;
+ }
+ vdr_par++;
+ break;
+ case 'P':
+ vdr_par++;
+ char *endptr = NULL;
+ errno = 0;
+ int n = strtol(vdr_par, &endptr, 10);
+ if (!errno && endptr != vdr_par) {
+ ptr->stream_id = n;
+ vdr_par = endptr;
+ }
+ break;
+ case 'I':
+ vdr_par++;
+ if (*vdr_par == '1') {
+ ptr->inv = INVERSION_ON;
+ } else {
+ ptr->inv = INVERSION_OFF;
+ }
+ vdr_par++;
+ break;
+ default:
+ vdr_par++;
+ }
}
- vdr_par++;
- break;
- default:
- vdr_par++;
- }
}
- }
}
-static char* dvb_strtok_r(char* s, const char* sep, char** p) {
- if (!s && !(s = *p)) {
- return NULL;
- }
-
- /* Skip leading separators. */
- s += strspn(s, sep);
-
- /* s points at first non-separator, or end of string. */
- if (!*s) {
- return (*p = 0);
- }
-
- /* Move *p to next separator. */
- *p = s + strcspn(s, sep);
- if (**p) {
- *(*p)++ = 0;
- } else {
- *p = 0;
- }
- return s;
+static char *dvb_strtok_r(char *s, const char *sep, char **p)
+{
+ if (!s && !(s = *p))
+ return NULL;
+
+ /* Skip leading separators. */
+ s += strspn(s, sep);
+
+ /* s points at first non-separator, or end of string. */
+ if (!*s)
+ return *p = 0;
+
+ /* Move *p to next separator. */
+ *p = s + strcspn(s, sep);
+ if (**p) {
+ *(*p)++ = 0;
+ } else {
+ *p = 0;
+ }
+ return s;
}
-static bool parse_pid_string(struct mp_log *log, char* pid_string, dvb_channel_t* ptr) {
- if (pid_string[0]) {
- int pcnt = 0;
- /** These tokens also catch vdr-style PID lists.
- * They can contain 123=deu@3,124=eng+jap@4;125
- * 3 and 4 are codes for codec type, =langLeft+langRight is allowed,
- * and ; may separate a dolby channel.
- * With the numChars-test and the full token-list, all is handled gracefully.
- */
- const char* tokens = "+,;";
- char* pidPart;
- char* savePtr;
- pidPart = dvb_strtok_r(pid_string, tokens, &savePtr);
- while (pidPart != NULL) {
- if (ptr->pids_cnt >= DMX_FILTER_SIZE-1) {
- mp_verbose(log, "Maximum number of PIDs for one channel reached, ignoring further ones!\n");
- return (pcnt > 0);
- }
- int numChars = 0;
- int pid = 0;
- pcnt += sscanf(pidPart, "%d%n", &pid, &numChars);
- if (numChars > 0) {
- ptr->pids[ptr->pids_cnt] = pid;
- ptr->pids_cnt++;
- }
- pidPart = dvb_strtok_r(NULL, tokens, &savePtr);
- }
- if (pcnt > 0) {
- return true;
+static bool parse_pid_string(struct mp_log *log, char *pid_string,
+ dvb_channel_t *ptr)
+{
+ if (pid_string[0]) {
+ int pcnt = 0;
+ /* These tokens also catch vdr-style PID lists.
+ * They can contain 123=deu@3,124=eng+jap@4;125
+ * 3 and 4 are codes for codec type, =langLeft+langRight is allowed,
+ * and ; may separate a dolby channel.
+ * With the numChars-test and the full token-list, all is handled
+ * gracefully.
+ */
+ const char *tokens = "+,;";
+ char *pidPart;
+ char *savePtr;
+ pidPart = dvb_strtok_r(pid_string, tokens, &savePtr);
+ while (pidPart != NULL) {
+ if (ptr->pids_cnt >= DMX_FILTER_SIZE - 1) {
+ mp_verbose(log, "Maximum number of PIDs for one channel "
+ "reached, ignoring further ones!\n");
+ return pcnt > 0;
+ }
+ int numChars = 0;
+ int pid = 0;
+ pcnt += sscanf(pidPart, "%d%n", &pid, &numChars);
+ if (numChars > 0) {
+ ptr->pids[ptr->pids_cnt] = pid;
+ ptr->pids_cnt++;
+ }
+ pidPart = dvb_strtok_r(NULL, tokens, &savePtr);
+ }
+ if (pcnt > 0)
+ return true;
}
- }
- return false;
+ return false;
}
-static dvb_channels_list *dvb_get_channels(struct mp_log *log, int cfg_full_transponder, char *filename, int type)
+static dvb_channels_list *dvb_get_channels(struct mp_log *log,
+ int cfg_full_transponder,
+ char *filename,
+ int type)
{
- dvb_channels_list *list;
- FILE *f;
- char line[CHANNEL_LINE_LEN], *colon;
-
- if (!filename)
- return NULL;
-
- int fields, cnt, k;
- int has8192, has0;
- dvb_channel_t *ptr, *tmp, chn;
- char tmp_lcr[256], tmp_hier[256], inv[256], bw[256], cr[256], mod[256], transm[256], gi[256], vpid_str[256], apid_str[256], tpid_str[256],
- vdr_par_str[256], vdr_loc_str[256];
- const char *cbl_conf = "%d:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%255[^:]\n";
- const char *sat_conf = "%d:%c:%d:%d:%255[^:]:%255[^:]\n";
- const char *ter_conf = "%d:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]\n";
- const char *atsc_conf = "%d:%255[^:]:%255[^:]:%255[^:]\n";
-
- const char *vdr_conf = "%d:%255[^:]:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%*255[^:]:%d:%*d:%*d:%*d\n%n";
-
- mp_verbose(log, "CONFIG_READ FILE: %s, type: %d\n", filename, type);
- if((f=fopen(filename, "r"))==NULL)
- {
- mp_fatal(log, "CAN'T READ CONFIG FILE %s\n", filename);
- return NULL;
- }
+ dvb_channels_list *list;
+ FILE *f;
+ char line[CHANNEL_LINE_LEN], *colon;
+
+ if (!filename)
+ return NULL;
+
+ int fields, cnt, k;
+ int has8192, has0;
+ dvb_channel_t *ptr, *tmp, chn;
+ char tmp_lcr[256], tmp_hier[256], inv[256], bw[256], cr[256], mod[256],
+ transm[256], gi[256], vpid_str[256], apid_str[256], tpid_str[256],
+ vdr_par_str[256], vdr_loc_str[256];
+ const char *cbl_conf =
+ "%d:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%255[^:]\n";
+ const char *sat_conf = "%d:%c:%d:%d:%255[^:]:%255[^:]\n";
+ const char *ter_conf =
+ "%d:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]\n";
+ const char *atsc_conf = "%d:%255[^:]:%255[^:]:%255[^:]\n";
+
+ const char *vdr_conf =
+ "%d:%255[^:]:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%*255[^:]:%d:%*d:%*d:%*d\n%n";
+
+ mp_verbose(log, "CONFIG_READ FILE: %s, type: %d\n", filename, type);
+ if ((f = fopen(filename, "r")) == NULL) {
+ mp_fatal(log, "CAN'T READ CONFIG FILE %s\n", filename);
+ return NULL;
+ }
- list = malloc(sizeof(dvb_channels_list));
- if(list == NULL)
- {
- fclose(f);
- mp_verbose(log, "DVB_GET_CHANNELS: couldn't malloc enough memory\n");
- return NULL;
- }
+ list = malloc(sizeof(dvb_channels_list));
+ if (list == NULL) {
+ fclose(f);
+ mp_verbose(log, "DVB_GET_CHANNELS: couldn't malloc enough memory\n");
+ return NULL;
+ }
- ptr = &chn;
- list->NUM_CHANNELS = 0;
- list->channels = NULL;
- while(! feof(f))
- {
- if( fgets(line, CHANNEL_LINE_LEN, f) == NULL )
- continue;
-
- if((line[0] == '#') || (strlen(line) == 0))
- continue;
-
- colon = strchr(line, ':');
- if (colon) {
- k = colon - line;
- if(!k)
- continue;
- // In some modern VDR-style configs, channel name also has bouquet after ;.
- // Parse that off, we ignore it.
- char* bouquet_sep = strchr(line, ';');
- int channel_name_length = k;
- if (bouquet_sep && bouquet_sep < colon) {
- channel_name_length = bouquet_sep - line;
- }
- ptr->name = malloc(channel_name_length+1);
- if(! ptr->name)
- continue;
- av_strlcpy(ptr->name, line, channel_name_length+1);
- } else {
- continue;
- }
- k++;
- vpid_str[0] = apid_str[0] = tpid_str[0] = 0;
- vdr_loc_str[0] = vdr_par_str[0] = 0;
- ptr->pids_cnt = 0;
- ptr->freq = 0;
- ptr->is_dvb_s2 = false;
- ptr->service_id = -1;
- ptr->stream_id = NO_STREAM_ID_FILTER;
+ ptr = &chn;
+ list->NUM_CHANNELS = 0;
+ list->channels = NULL;
+ while (!feof(f)) {
+ if (fgets(line, CHANNEL_LINE_LEN, f) == NULL)
+ continue;
+
+ if ((line[0] == '#') || (strlen(line) == 0))
+ continue;
+
+ colon = strchr(line, ':');
+ if (colon) {
+ k = colon - line;
+ if (!k)
+ continue;
+ // In some modern VDR-style configs, channel name also has bouquet after ;.
+ // Parse that off, we ignore it.
+ char *bouquet_sep = strchr(line, ';');
+ int channel_name_length = k;
+ if (bouquet_sep && bouquet_sep < colon)
+ channel_name_length = bouquet_sep - line;
+ ptr->name = malloc(channel_name_length + 1);
+ if (!ptr->name)
+ continue;
+ av_strlcpy(ptr->name, line, channel_name_length + 1);
+ } else {
+ continue;
+ }
+ k++;
+ vpid_str[0] = apid_str[0] = tpid_str[0] = 0;
+ vdr_loc_str[0] = vdr_par_str[0] = 0;
+ ptr->pids_cnt = 0;
+ ptr->freq = 0;
+ ptr->is_dvb_s2 = false;
+ ptr->service_id = -1;
+ ptr->stream_id = NO_STREAM_ID_FILTER;
+ ptr->inv = INVERSION_AUTO;
+
+ // Check if VDR-type channels.conf-line - then full line is consumed by the scan.
+ int num_chars = 0;
+ fields = sscanf(&line[k], vdr_conf,
+ &ptr->freq, vdr_par_str, vdr_loc_str, &ptr->srate,
+ vpid_str, apid_str, tpid_str, &ptr->service_id,
+ &num_chars);
+
+ if (num_chars == strlen(&line[k])) {
+ // It's a VDR-style config line.
+ parse_vdr_par_string(vdr_par_str, ptr);
+ // We still need the special SAT-handling here.
+ if (type != TUNER_TER && type != TUNER_CBL && type != TUNER_ATSC) {
+ ptr->freq *= 1000UL;
+ ptr->srate *= 1000UL;
+ ptr->tone = -1;
ptr->inv = INVERSION_AUTO;
-
- // Check if VDR-type channels.conf-line - then full line is consumed by the scan.
- int num_chars = 0;
- fields = sscanf(&line[k], vdr_conf,
- &ptr->freq, vdr_par_str, vdr_loc_str, &ptr->srate, vpid_str, apid_str, tpid_str, &ptr->service_id, &num_chars);
-
- if (num_chars == strlen(&line[k])) {
- // It's a VDR-style config line.
- parse_vdr_par_string(vdr_par_str, ptr);
- // We still need the special SAT-handling here.
- if (type != TUNER_TER && type != TUNER_CBL && type != TUNER_ATSC) {
- ptr->freq *= 1000UL;
- ptr->srate *= 1000UL;
- ptr->tone = -1;
- ptr->inv = INVERSION_AUTO;
- ptr->cr = FEC_AUTO;
-
- if (vdr_loc_str[0]) {
- // In older vdr config format, this field contained the DISEQc information.
- // If it is numeric, assume that's it.
- int diseqc_info = 0;
- int valid_digits = 0;
- if (sscanf(vdr_loc_str, "%d%n", &diseqc_info, &valid_digits) == 1) {
+ ptr->cr = FEC_AUTO;
+
+ if (vdr_loc_str[0]) {
+ // In older vdr config format, this field contained the DISEQc information.
+ // If it is numeric, assume that's it.
+ int diseqc_info = 0;
+ int valid_digits = 0;
+ if (sscanf(vdr_loc_str, "%d%n", &diseqc_info,
+ &valid_digits) == 1)
+ {
if (valid_digits == strlen(vdr_loc_str)) {
- ptr->diseqc = diseqc_info;
- if((ptr->diseqc > 4) || (ptr->diseqc < 0))
- continue;
- if(ptr->diseqc > 0)
- ptr->diseqc--;
+ ptr->diseqc = diseqc_info;
+ if ((ptr->diseqc > 4) || (ptr->diseqc < 0))
+ continue;
+ if (ptr->diseqc > 0)
+ ptr->diseqc--;
}
- }
}
-
- mp_verbose(log, "SAT, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d, S2: %s, StreamID: %d, SID: %d",
- list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate, ptr->pol, ptr->diseqc,
- ptr->is_dvb_s2 ? "yes" : "no", ptr->stream_id, ptr->service_id);
- } else {
- mp_verbose(log, "VDR, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d",
- list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate);
- }
- } else if (type == TUNER_TER) {
- fields = sscanf(&line[k], ter_conf,
- &ptr->freq, inv, bw, cr, tmp_lcr, mod,
- transm, gi, tmp_hier, vpid_str, apid_str);
- mp_verbose(log, "TER, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d",
- list->NUM_CHANNELS, fields, ptr->name, ptr->freq);
- } else if (type == TUNER_CBL) {
- fields = sscanf(&line[k], cbl_conf,
- &ptr->freq, inv, &ptr->srate,
- cr, mod, vpid_str, apid_str);
- mp_verbose(log, "CBL, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d",
- list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate);
}
+
+ mp_verbose(log, "SAT, NUM: %d, NUM_FIELDS: %d, NAME: %s, "
+ "FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d, S2: %s, "
+ "StreamID: %d, SID: %d", list->NUM_CHANNELS,
+ fields, ptr->name, ptr->freq, ptr->srate, ptr->pol,
+ ptr->diseqc, ptr->is_dvb_s2 ? "yes" : "no",
+ ptr->stream_id, ptr->service_id);
+ } else {
+ mp_verbose(log, "VDR, NUM: %d, NUM_FIELDS: %d, NAME: %s, "
+ "FREQ: %d, SRATE: %d", list->NUM_CHANNELS, fields,
+ ptr->name, ptr->freq, ptr->srate);
+ }
+ } else if (type == TUNER_TER) {
+ fields = sscanf(&line[k], ter_conf,
+ &ptr->freq, inv, bw, cr, tmp_lcr, mod,
+ transm, gi, tmp_hier, vpid_str, apid_str);
+ mp_verbose(log, "TER, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d",
+ list->NUM_CHANNELS, fields, ptr->name, ptr->freq);
+ } else if (type == TUNER_CBL) {
+ fields = sscanf(&line[k], cbl_conf,
+ &ptr->freq, inv, &ptr->srate,
+ cr, mod, vpid_str, apid_str);
+ mp_verbose(log, "CBL, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, "
+ "SRATE: %d", list->NUM_CHANNELS, fields, ptr->name,
+ ptr->freq, ptr->srate);
+ }
#ifdef DVB_ATSC
- else if (type == TUNER_ATSC)
- {
- fields = sscanf(&line[k], atsc_conf,
- &ptr->freq, mod, vpid_str, apid_str);
- mp_verbose(log, "ATSC, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d\n",
- list->NUM_CHANNELS, fields, ptr->name, ptr->freq);
- }
+ else if (type == TUNER_ATSC) {
+ fields = sscanf(&line[k], atsc_conf,
+ &ptr->freq, mod, vpid_str, apid_str);
+ mp_verbose(log, "ATSC, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d\n",
+ list->NUM_CHANNELS, fields, ptr->name, ptr->freq);
+ }
#endif
- else //SATELLITE
- {
- fields = sscanf(&line[k], sat_conf,
- &ptr->freq, &ptr->pol, &ptr->diseqc, &ptr->srate, vpid_str, apid_str);
- ptr->pol = mp_toupper(ptr->pol);
- ptr->freq *= 1000UL;
- ptr->srate *= 1000UL;
- ptr->tone = -1;
- ptr->inv = INVERSION_AUTO;
- ptr->cr = FEC_AUTO;
- if((ptr->diseqc > 4) || (ptr->diseqc < 0))
- continue;
- if(ptr->diseqc > 0)
- ptr->diseqc--;
- mp_verbose(log, "SAT, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d",
- list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate, ptr->pol, ptr->diseqc);
- }
-
- if (parse_pid_string(log, vpid_str, ptr)) {
- fields++;
- }
- if (parse_pid_string(log, apid_str, ptr)) {
- fields++;
- }
- /* If we do not know the service_id, PMT can not be extracted.
- Teletext decoding will fail without PMT. */
- if (ptr->service_id != -1) {
- if (parse_pid_string(log, tpid_str, ptr)) {
- fields++;
- }
- }
-
-
- if((fields < 2) || (ptr->pids_cnt <= 0) || (ptr->freq == 0) || (strlen(ptr->name) == 0))
- continue;
-
- /* Add some PIDs which are mandatory in DVB,
- * and contain human-readable helpful data. */
-
- /* This is the STD, the service description table.
- * It contains service names and such, ffmpeg decodes it. */
- ptr->pids[ptr->pids_cnt] = 0x0011;
- ptr->pids_cnt++;
+ else { //SATELLITE
+ fields = sscanf(&line[k], sat_conf,
+ &ptr->freq, &ptr->pol, &ptr->diseqc, &ptr->srate,
+ vpid_str,
+ apid_str);
+ ptr->pol = mp_toupper(ptr->pol);
+ ptr->freq *= 1000UL;
+ ptr->srate *= 1000UL;
+ ptr->tone = -1;
+ ptr->inv = INVERSION_AUTO;
+ ptr->cr = FEC_AUTO;
+ if ((ptr->diseqc > 4) || (ptr->diseqc < 0))
+ continue;
+ if (ptr->diseqc > 0)
+ ptr->diseqc--;
+ mp_verbose(log, "SAT, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, "
+ "SRATE: %d, POL: %c, DISEQC: %d",
+ list->NUM_CHANNELS, fields, ptr->name, ptr->freq,
+ ptr->srate, ptr->pol, ptr->diseqc);
+ }
- /* This is the EIT, which contains EPG data.
- * ffmpeg can not decode it (yet), but e.g. VLC
- * shows what was recorded. */
- ptr->pids[ptr->pids_cnt] = 0x0012;
- ptr->pids_cnt++;
+ if (parse_pid_string(log, vpid_str, ptr))
+ fields++;
+ if (parse_pid_string(log, apid_str, ptr))
+ fields++;
+ /* If we do not know the service_id, PMT can not be extracted.
+ Teletext decoding will fail without PMT. */
+ if (ptr->service_id != -1) {
+ if (parse_pid_string(log, tpid_str, ptr))
+ fields++;
+ }
- if (ptr->service_id != -1) {
- /* We have the PMT-PID in addition.
- This will be found later, when we tune to the channel.
- Push back here to create the additional demux. */
- ptr->pids[ptr->pids_cnt] = -1; // Placeholder.
- ptr->pids_cnt++;
- }
-
- has8192 = has0 = 0;
- for(cnt = 0; cnt < ptr->pids_cnt; cnt++)
- {
- if(ptr->pids[cnt] == 8192)
- has8192 = 1;
- if(ptr->pids[cnt] == 0)
- has0 = 1;
- }
-
- /* 8192 is the pseudo-PID for full TP dump,
- enforce that if requested. */
- if (!has8192 && cfg_full_transponder) {
- has8192 = 1;
- }
- if (has8192) {
- ptr->pids[0] = 8192;
- ptr->pids_cnt = 1;
- } else if (!has0) {
- ptr->pids[ptr->pids_cnt] = 0; //PID 0 is the PAT
- ptr->pids_cnt++;
- }
- mp_verbose(log, " PIDS: ");
- for(cnt = 0; cnt < ptr->pids_cnt; cnt++)
- mp_verbose(log, " %d ", ptr->pids[cnt]);
- mp_verbose(log, "\n");
-
- if((type == TUNER_TER) || (type == TUNER_CBL))
- {
- if(! strcmp(inv, "INVERSION_ON"))
- ptr->inv = INVERSION_ON;
- else if(! strcmp(inv, "INVERSION_OFF"))
- ptr->inv = INVERSION_OFF;
- else
- ptr->inv = INVERSION_AUTO;
-
-
- if(! strcmp(cr, "FEC_1_2"))
- ptr->cr =FEC_1_2;
- else if(! strcmp(cr, "FEC_2_3"))
- ptr->cr =FEC_2_3;
- else if(! strcmp(cr, "FEC_3_4"))
- ptr->cr =FEC_3_4;
- else if(! strcmp(cr, "FEC_4_5"))
- ptr->cr =FEC_4_5;
- else if(! strcmp(cr, "FEC_6_7"))
- ptr->cr =FEC_6_7;
- else if(! strcmp(cr, "FEC_8_9"))
- ptr->cr =FEC_8_9;
- else if(! strcmp(cr, "FEC_5_6"))
- ptr->cr =FEC_5_6;
- else if(! strcmp(cr, "FEC_7_8"))
- ptr->cr =FEC_7_8;
- else if(! strcmp(cr, "FEC_NONE"))
- ptr->cr =FEC_NONE;
- else ptr->cr =FEC_AUTO;
- }
+ if ((fields < 2) || (ptr->pids_cnt <= 0) || (ptr->freq == 0) ||
+ (strlen(ptr->name) == 0))
+ continue;
+
+ /* Add some PIDs which are mandatory in DVB,
+ * and contain human-readable helpful data. */
+
+ /* This is the STD, the service description table.
+ * It contains service names and such, ffmpeg decodes it. */
+ ptr->pids[ptr->pids_cnt] = 0x0011;
+ ptr->pids_cnt++;
+ /* This is the EIT, which contains EPG data.
+ * ffmpeg can not decode it (yet), but e.g. VLC
+ * shows what was recorded. */
+ ptr->pids[ptr->pids_cnt] = 0x0012;
+ ptr->pids_cnt++;
+
+ if (ptr->service_id != -1) {
+ /* We have the PMT-PID in addition.
+ This will be found later, when we tune to the channel.
+ Push back here to create the additional demux. */
+ ptr->pids[ptr->pids_cnt] = -1; // Placeholder.
+ ptr->pids_cnt++;
+ }
+
+ has8192 = has0 = 0;
+ for (cnt = 0; cnt < ptr->pids_cnt; cnt++) {
+ if (ptr->pids[cnt] == 8192)
+ has8192 = 1;
+ if (ptr->pids[cnt] == 0)
+ has0 = 1;
+ }
- if((type == TUNER_TER) || (type == TUNER_CBL) || (type == TUNER_ATSC))
- {
- if(! strcmp(mod, "QAM_128"))
- ptr->mod = QAM_128;
- else if(! strcmp(mod, "QAM_256"))
- ptr->mod = QAM_256;
- else if(! strcmp(mod, "QAM_64"))
- ptr->mod = QAM_64;
- else if(! strcmp(mod, "QAM_32"))
- ptr->mod = QAM_32;
- else if(! strcmp(mod, "QAM_16"))
- ptr->mod = QAM_16;
+ /* 8192 is the pseudo-PID for full TP dump,
+ enforce that if requested. */
+ if (!has8192 && cfg_full_transponder)
+ has8192 = 1;
+ if (has8192) {
+ ptr->pids[0] = 8192;
+ ptr->pids_cnt = 1;
+ } else if (!has0) {
+ ptr->pids[ptr->pids_cnt] = 0; //PID 0 is the PAT
+ ptr->pids_cnt++;
+ }
+
+ mp_verbose(log, " PIDS: ");
+ for (cnt = 0; cnt < ptr->pids_cnt; cnt++)
+ mp_verbose(log, " %d ", ptr->pids[cnt]);
+ mp_verbose(log, "\n");
+
+ if ((type == TUNER_TER) || (type == TUNER_CBL)) {
+ if (!strcmp(inv, "INVERSION_ON")) {
+ ptr->inv = INVERSION_ON;
+ } else if (!strcmp(inv, "INVERSION_OFF")) {
+ ptr->inv = INVERSION_OFF;
+ } else {
+ ptr->inv = INVERSION_AUTO;
+ }
+
+
+ if (!strcmp(cr, "FEC_1_2")) {
+ ptr->cr = FEC_1_2;
+ } else if (!strcmp(cr, "FEC_2_3")) {
+ ptr->cr = FEC_2_3;
+ } else if (!strcmp(cr, "FEC_3_4")) {
+ ptr->cr = FEC_3_4;
+ } else if (!strcmp(cr, "FEC_4_5")) {
+ ptr->cr = FEC_4_5;
+ } else if (!strcmp(cr, "FEC_6_7")) {
+ ptr->cr = FEC_6_7;
+ } else if (!strcmp(cr, "FEC_8_9")) {
+ ptr->cr = FEC_8_9;
+ } else if (!strcmp(cr, "FEC_5_6")) {
+ ptr->cr = FEC_5_6;
+ } else if (!strcmp(cr, "FEC_7_8")) {
+ ptr->cr = FEC_7_8;
+ } else if (!strcmp(cr, "FEC_NONE")) {
+ ptr->cr = FEC_NONE;
+ } else {
+ ptr->cr = FEC_AUTO;
+ }
+ }
+
+
+ if (type == TUNER_TER || type == TUNER_CBL || type == TUNER_ATSC) {
+ if (!strcmp(mod, "QAM_128")) {
+ ptr->mod = QAM_128;
+ } else if (!strcmp(mod, "QAM_256")) {
+ ptr->mod = QAM_256;
+ } else if (!strcmp(mod, "QAM_64")) {
+ ptr->mod = QAM_64;
+ } else if (!strcmp(mod, "QAM_32")) {
+ ptr->mod = QAM_32;
+ } else if (!strcmp(mod, "QAM_16")) {
+ ptr->mod = QAM_16;
#ifdef DVB_ATSC
- else if(! strcmp(mod, "VSB_8") || ! strcmp(mod, "8VSB"))
- ptr->mod = VSB_8;
- else if(! strcmp(mod, "VSB_16") || !strcmp(mod, "16VSB"))
- ptr->mod = VSB_16;
- else if(! strcmp(mod, "QAM_AUTO"))
- ptr->mod = QAM_AUTO;
+ } else if (!strcmp(mod, "VSB_8") || !strcmp(mod, "8VSB")) {
+ ptr->mod = VSB_8;
+ } else if (!strcmp(mod, "VSB_16") || !strcmp(mod, "16VSB")) {
+ ptr->mod = VSB_16;
+ } else if (!strcmp(mod, "QAM_AUTO")) {
+ ptr->mod = QAM_AUTO;
+ }
#endif
- }
+ }
- if(type == TUNER_TER)
- {
- if(! strcmp(bw, "BANDWIDTH_6_MHZ"))
- ptr->bw = BANDWIDTH_6_MHZ;
- else if(! strcmp(bw, "BANDWIDTH_7_MHZ"))
- ptr->bw = BANDWIDTH_7_MHZ;
- else if(! strcmp(bw, "BANDWIDTH_8_MHZ"))
- ptr->bw = BANDWIDTH_8_MHZ;
-
-
- if(! strcmp(transm, "TRANSMISSION_MODE_2K"))
- ptr->trans = TRANSMISSION_MODE_2K;
- else if(! strcmp(transm, "TRANSMISSION_MODE_8K"))
- ptr->trans = TRANSMISSION_MODE_8K;
- else if(! strcmp(transm, "TRANSMISSION_MODE_AUTO"))
- ptr->trans = TRANSMISSION_MODE_AUTO;
-
- if(! strcmp(gi, "GUARD_INTERVAL_1_32"))
- ptr->gi = GUARD_INTERVAL_1_32;
- else if(! strcmp(gi, "GUARD_INTERVAL_1_16"))
- ptr->gi = GUARD_INTERVAL_1_16;
- else if(! strcmp(gi, "GUARD_INTERVAL_1_8"))
- ptr->gi = GUARD_INTERVAL_1_8;
- else if(! strcmp(gi, "GUARD_INTERVAL_1_4"))
- ptr->gi = GUARD_INTERVAL_1_4;
- else ptr->gi = GUARD_INTERVAL_AUTO;
-
- if(! strcmp(tmp_lcr, "FEC_1_2"))
- ptr->cr_lp =FEC_1_2;
- else if(! strcmp(tmp_lcr, "FEC_2_3"))
- ptr->cr_lp =FEC_2_3;
- else if(! strcmp(tmp_lcr, "FEC_3_4"))
- ptr->cr_lp =FEC_3_4;
- else if(! strcmp(tmp_lcr, "FEC_4_5"))
- ptr->cr_lp =FEC_4_5;
- else if(! strcmp(tmp_lcr, "FEC_6_7"))
- ptr->cr_lp =FEC_6_7;
- else if(! strcmp(tmp_lcr, "FEC_8_9"))
- ptr->cr_lp =FEC_8_9;
- else if(! strcmp(tmp_lcr, "FEC_5_6"))
- ptr->cr_lp =FEC_5_6;