mirror of
https://github.com/mpv-player/mpv
synced 2025-02-20 06:46:55 +00:00
dvb: rename dvb_config_t to dvb_state_t, keep config and state there.
The state-struct now contains everything which can be kept after initial initialization. This includes the channel-lists, configuration, device-fds and also information like current channel and current card. The dvb_priv_t is kept containing the mp-options, a pointer to the state and to the logger. After this restructuring, the state-struct contains all information which can be persisted across channel switching.
This commit is contained in:
parent
9a88b118b4
commit
4c3f95708f
@ -79,32 +79,34 @@ int dvb_open_devices(dvb_priv_t *priv, int n, int demux_cnt)
|
||||
int i;
|
||||
char frontend_dev[32], dvr_dev[32], demux_dev[32];
|
||||
|
||||
dvb_state_t* state = priv->state;
|
||||
|
||||
sprintf(frontend_dev, "/dev/dvb/adapter%d/frontend0", n);
|
||||
sprintf(dvr_dev, "/dev/dvb/adapter%d/dvr0", n);
|
||||
sprintf(demux_dev, "/dev/dvb/adapter%d/demux0", n);
|
||||
priv->fe_fd = open(frontend_dev, O_RDWR | O_NONBLOCK | O_CLOEXEC);
|
||||
if (priv->fe_fd < 0) {
|
||||
state->fe_fd = open(frontend_dev, O_RDWR | O_NONBLOCK | O_CLOEXEC);
|
||||
if (state->fe_fd < 0) {
|
||||
MP_ERR(priv, "ERROR OPENING FRONTEND DEVICE %s: ERRNO %d\n",
|
||||
frontend_dev, errno);
|
||||
return 0;
|
||||
}
|
||||
priv->demux_fds_cnt = 0;
|
||||
state->demux_fds_cnt = 0;
|
||||
MP_VERBOSE(priv, "DVB_OPEN_DEVICES(%d)\n", demux_cnt);
|
||||
for (i = 0; i < demux_cnt; i++) {
|
||||
priv->demux_fds[i] = open(demux_dev, O_RDWR | O_NONBLOCK | O_CLOEXEC);
|
||||
if (priv->demux_fds[i] < 0) {
|
||||
state->demux_fds[i] = open(demux_dev, O_RDWR | O_NONBLOCK | O_CLOEXEC);
|
||||
if (state->demux_fds[i] < 0) {
|
||||
MP_ERR(priv, "ERROR OPENING DEMUX 0: %d\n", errno);
|
||||
return 0;
|
||||
} else {
|
||||
MP_VERBOSE(priv, "OPEN(%d), file %s: FD=%d, CNT=%d\n", i, demux_dev,
|
||||
priv->demux_fds[i], priv->demux_fds_cnt);
|
||||
priv->demux_fds_cnt++;
|
||||
state->demux_fds[i], state->demux_fds_cnt);
|
||||
state->demux_fds_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
priv->dvr_fd = open(dvr_dev, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
|
||||
if (priv->dvr_fd < 0) {
|
||||
state->dvr_fd = open(dvr_dev, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
|
||||
if (state->dvr_fd < 0) {
|
||||
MP_ERR(priv, "ERROR OPENING DVR DEVICE %s: %d\n", dvr_dev, errno);
|
||||
return 0;
|
||||
}
|
||||
@ -117,25 +119,27 @@ int dvb_fix_demuxes(dvb_priv_t *priv, int cnt)
|
||||
{
|
||||
int i;
|
||||
char demux_dev[32];
|
||||
|
||||
dvb_state_t* state = priv->state;
|
||||
|
||||
sprintf(demux_dev, "/dev/dvb/adapter%d/demux0", priv->card);
|
||||
MP_VERBOSE(priv, "FIX %d -> %d\n", priv->demux_fds_cnt, cnt);
|
||||
if (priv->demux_fds_cnt >= cnt) {
|
||||
for (i = priv->demux_fds_cnt - 1; i >= cnt; i--) {
|
||||
MP_VERBOSE(priv, "FIX, CLOSE fd(%d): %d\n", i, priv->demux_fds[i]);
|
||||
close(priv->demux_fds[i]);
|
||||
sprintf(demux_dev, "/dev/dvb/adapter%d/demux0", state->card);
|
||||
MP_VERBOSE(priv, "FIX %d -> %d\n", state->demux_fds_cnt, cnt);
|
||||
if (state->demux_fds_cnt >= cnt) {
|
||||
for (i = state->demux_fds_cnt - 1; i >= cnt; i--) {
|
||||
MP_VERBOSE(priv, "FIX, CLOSE fd(%d): %d\n", i, state->demux_fds[i]);
|
||||
close(state->demux_fds[i]);
|
||||
}
|
||||
priv->demux_fds_cnt = cnt;
|
||||
} else if (priv->demux_fds_cnt < cnt) {
|
||||
for (i = priv->demux_fds_cnt; i < cnt; i++) {
|
||||
priv->demux_fds[i] = open(demux_dev,
|
||||
state->demux_fds_cnt = cnt;
|
||||
} else if (state->demux_fds_cnt < cnt) {
|
||||
for (i = state->demux_fds_cnt; i < cnt; i++) {
|
||||
state->demux_fds[i] = open(demux_dev,
|
||||
O_RDWR | O_NONBLOCK | O_CLOEXEC);
|
||||
MP_VERBOSE(priv, "FIX, OPEN fd(%d): %d\n", i, priv->demux_fds[i]);
|
||||
if (priv->demux_fds[i] < 0) {
|
||||
MP_VERBOSE(priv, "FIX, OPEN fd(%d): %d\n", i, state->demux_fds[i]);
|
||||
if (state->demux_fds[i] < 0) {
|
||||
MP_ERR(priv, "ERROR OPENING DEMUX 0: %d\n", errno);
|
||||
return 0;
|
||||
} else
|
||||
priv->demux_fds_cnt++;
|
||||
state->demux_fds_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -548,7 +552,9 @@ int dvb_tune(dvb_priv_t *priv, int freq, char pol, int srate, int diseqc,
|
||||
{
|
||||
MP_INFO(priv, "dvb_tune Freq: %lu\n", (long unsigned int) freq);
|
||||
|
||||
int ris = tune_it(priv, priv->fe_fd, freq, srate, pol, tone,
|
||||
dvb_state_t* state = priv->state;
|
||||
|
||||
int ris = tune_it(priv, state->fe_fd, freq, srate, pol, tone,
|
||||
is_dvb_s2, stream_id, specInv, diseqc, modulation,
|
||||
HP_CodeRate, TransmissionMode, guardInterval,
|
||||
bandWidth, LP_CodeRate, hier, timeout);
|
||||
|
@ -90,23 +90,24 @@ typedef struct {
|
||||
typedef struct {
|
||||
int count;
|
||||
dvb_card_config_t *cards;
|
||||
void *priv;
|
||||
} dvb_config_t;
|
||||
|
||||
typedef struct dvb_params {
|
||||
struct mp_log *log;
|
||||
int card;
|
||||
int fe_fd;
|
||||
int dvr_fd;
|
||||
int demux_fd[3], demux_fds[DMX_FILTER_SIZE], demux_fds_cnt;
|
||||
|
||||
dvb_config_t *config;
|
||||
dvb_channels_list *list;
|
||||
int tuner_type;
|
||||
int is_on;
|
||||
int retry;
|
||||
int timeout;
|
||||
int last_freq;
|
||||
} dvb_state_t;
|
||||
|
||||
typedef struct dvb_params {
|
||||
struct mp_log *log;
|
||||
|
||||
dvb_state_t *state;
|
||||
|
||||
char *cfg_prog;
|
||||
int cfg_card;
|
||||
@ -123,7 +124,7 @@ typedef struct dvb_params {
|
||||
|
||||
int dvb_step_channel(stream_t *, int);
|
||||
int dvb_set_channel(stream_t *, int, int);
|
||||
dvb_config_t *dvb_get_config(stream_t *);
|
||||
void dvb_free_config(dvb_config_t *config);
|
||||
dvb_state_t *dvb_get_state(stream_t *);
|
||||
void dvb_free_state(dvb_state_t *);
|
||||
|
||||
#endif /* MPLAYER_DVBIN_H */
|
||||
|
@ -576,22 +576,22 @@ static dvb_channels_list *dvb_get_channels(struct mp_log *log,
|
||||
return list;
|
||||
}
|
||||
|
||||
void dvb_free_config(dvb_config_t *config)
|
||||
void dvb_free_state(dvb_state_t *state)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < config->count; i++) {
|
||||
free(config->cards[i].name);
|
||||
if (!config->cards[i].list)
|
||||
for (i = 0; i < state->count; i++) {
|
||||
free(state->cards[i].name);
|
||||
if (!state->cards[i].list)
|
||||
continue;
|
||||
if (config->cards[i].list->channels) {
|
||||
for (j = 0; j < config->cards[i].list->NUM_CHANNELS; j++)
|
||||
free(config->cards[i].list->channels[j].name);
|
||||
free(config->cards[i].list->channels);
|
||||
if (state->cards[i].list->channels) {
|
||||
for (j = 0; j < state->cards[i].list->NUM_CHANNELS; j++)
|
||||
free(state->cards[i].list->channels[j].name);
|
||||
free(state->cards[i].list->channels);
|
||||
}
|
||||
free(config->cards[i].list);
|
||||
free(state->cards[i].list);
|
||||
}
|
||||
free(config);
|
||||
free(state);
|
||||
}
|
||||
|
||||
static int dvb_streaming_read(stream_t *stream, char *buffer, int size)
|
||||
@ -599,12 +599,13 @@ static int dvb_streaming_read(stream_t *stream, char *buffer, int size)
|
||||
struct pollfd pfds[1];
|
||||
int pos = 0, tries, rk, fd;
|
||||
dvb_priv_t *priv = (dvb_priv_t *) stream->priv;
|
||||
dvb_state_t* state = priv->state;
|
||||
|
||||
MP_TRACE(stream, "dvb_streaming_read(%d)\n", size);
|
||||
|
||||
tries = priv->retry + 1;
|
||||
tries = state->retry + 1;
|
||||
|
||||
fd = priv->dvr_fd;
|
||||
fd = state->dvr_fd;
|
||||
while (pos < size) {
|
||||
pfds[0].fd = fd;
|
||||
pfds[0].events = POLLIN | POLLPRI;
|
||||
@ -642,18 +643,18 @@ int dvb_set_channel(stream_t *stream, int card, int n)
|
||||
dvb_channel_t *channel;
|
||||
dvb_priv_t *priv = stream->priv;
|
||||
char buf[4096];
|
||||
dvb_config_t *conf = (dvb_config_t *) priv->config;
|
||||
dvb_state_t *state = (dvb_state_t *) priv->state;
|
||||
int devno;
|
||||
int i;
|
||||
|
||||
if ((card < 0) || (card > conf->count)) {
|
||||
if ((card < 0) || (card > state->count)) {
|
||||
MP_ERR(stream, "dvb_set_channel: INVALID CARD NUMBER: %d vs %d, abort\n",
|
||||
card, conf->count);
|
||||
card, state->count);
|
||||
return 0;
|
||||
}
|
||||
|
||||
devno = conf->cards[card].devno;
|
||||
new_list = conf->cards[card].list;
|
||||
devno = state->cards[card].devno;
|
||||
new_list = state->cards[card].list;
|
||||
if ((n > new_list->NUM_CHANNELS) || (n < 0)) {
|
||||
MP_ERR(stream, "dvb_set_channel: INVALID CHANNEL NUMBER: %d, for "
|
||||
"card %d, abort\n", n, card);
|
||||
@ -661,14 +662,14 @@ int dvb_set_channel(stream_t *stream, int card, int n)
|
||||
}
|
||||
channel = &(new_list->channels[n]);
|
||||
|
||||
if (priv->is_on) { //the fds are already open and we have to stop the demuxers
|
||||
for (i = 0; i < priv->demux_fds_cnt; i++)
|
||||
dvb_demux_stop(priv->demux_fds[i]);
|
||||
if (state->is_on) { //the fds are already open and we have to stop the demuxers
|
||||
for (i = 0; i < state->demux_fds_cnt; i++)
|
||||
dvb_demux_stop(state->demux_fds[i]);
|
||||
|
||||
priv->retry = 0;
|
||||
state->retry = 0;
|
||||
//empty both the stream's and driver's buffer
|
||||
while (dvb_streaming_read(stream, buf, 4096) > 0) {}
|
||||
if (priv->card != card) {
|
||||
if (state->card != card) {
|
||||
dvbin_close(stream);
|
||||
if (!dvb_open_devices(priv, devno, channel->pids_cnt)) {
|
||||
MP_ERR(stream, "DVB_SET_CHANNEL, COULDN'T OPEN DEVICES OF "
|
||||
@ -689,16 +690,16 @@ int dvb_set_channel(stream_t *stream, int card, int n)
|
||||
}
|
||||
}
|
||||
|
||||
priv->card = card;
|
||||
priv->list = new_list;
|
||||
priv->retry = 5;
|
||||
state->card = card;
|
||||
state->list = new_list;
|
||||
state->retry = 5;
|
||||
new_list->current = n;
|
||||
MP_VERBOSE(stream, "DVB_SET_CHANNEL: new channel name=%s, card: %d, "
|
||||
"channel %d\n", channel->name, card, n);
|
||||
|
||||
stream_drop_buffers(stream);
|
||||
|
||||
if (channel->freq != priv->last_freq) {
|
||||
if (channel->freq != state->last_freq) {
|
||||
if (!dvb_tune(priv, channel->freq, channel->pol, channel->srate,
|
||||
channel->diseqc, channel->tone,
|
||||
channel->is_dvb_s2, channel->stream_id, channel->inv,
|
||||
@ -708,8 +709,8 @@ int dvb_set_channel(stream_t *stream, int card, int n)
|
||||
return 0;
|
||||
}
|
||||
|
||||
priv->last_freq = channel->freq;
|
||||
priv->is_on = 1;
|
||||
state->last_freq = channel->freq;
|
||||
state->is_on = 1;
|
||||
|
||||
if (channel->service_id != -1) {
|
||||
/* We need the PMT-PID in addition.
|
||||
@ -734,7 +735,7 @@ int dvb_set_channel(stream_t *stream, int card, int n)
|
||||
MP_ERR(stream, "DVB_SET_CHANNEL: PMT-PID not found, "
|
||||
"teletext-decoding may fail.\n");
|
||||
} else {
|
||||
if (!dvb_set_ts_filt(priv, priv->demux_fds[i], channel->pids[i],
|
||||
if (!dvb_set_ts_filt(priv, state->demux_fds[i], channel->pids[i],
|
||||
DMX_PES_OTHER))
|
||||
return 0;
|
||||
}
|
||||
@ -748,6 +749,7 @@ int dvb_step_channel(stream_t *stream, int dir)
|
||||
int new_current;
|
||||
dvb_channels_list *list;
|
||||
dvb_priv_t *priv = stream->priv;
|
||||
dvb_state_t* state = priv->state;
|
||||
|
||||
MP_VERBOSE(stream, "DVB_STEP_CHANNEL dir %d\n", dir);
|
||||
|
||||
@ -756,7 +758,7 @@ int dvb_step_channel(stream_t *stream, int dir)
|
||||
return 0;
|
||||
}
|
||||
|
||||
list = priv->list;
|
||||
list = state->list;
|
||||
if (list == NULL) {
|
||||
MP_ERR(stream, "dvb_step_channel: NULL list_ptr, quit\n");
|
||||
return 0;
|
||||
@ -765,7 +767,7 @@ int dvb_step_channel(stream_t *stream, int dir)
|
||||
new_current = (list->NUM_CHANNELS + list->current +
|
||||
(dir >= 0 ? 1 : -1)) % list->NUM_CHANNELS;
|
||||
|
||||
return dvb_set_channel(stream, priv->card, new_current);
|
||||
return dvb_set_channel(stream, state->card, new_current);
|
||||
}
|
||||
|
||||
static int dvbin_stream_control(struct stream *s, int cmd, void *arg)
|
||||
@ -788,20 +790,21 @@ static void dvbin_close(stream_t *stream)
|
||||
{
|
||||
int i;
|
||||
dvb_priv_t *priv = (dvb_priv_t *) stream->priv;
|
||||
dvb_state_t* state = priv->state;
|
||||
|
||||
for (i = priv->demux_fds_cnt - 1; i >= 0; i--) {
|
||||
priv->demux_fds_cnt--;
|
||||
for (i = state->demux_fds_cnt - 1; i >= 0; i--) {
|
||||
state->demux_fds_cnt--;
|
||||
MP_VERBOSE(stream, "DVBIN_CLOSE, close(%d), fd=%d, COUNT=%d\n", i,
|
||||
priv->demux_fds[i], priv->demux_fds_cnt);
|
||||
close(priv->demux_fds[i]);
|
||||
state->demux_fds[i], state->demux_fds_cnt);
|
||||
close(state->demux_fds[i]);
|
||||
}
|
||||
close(priv->dvr_fd);
|
||||
close(state->dvr_fd);
|
||||
|
||||
close(priv->fe_fd);
|
||||
priv->fe_fd = priv->dvr_fd = -1;
|
||||
close(state->fe_fd);
|
||||
state->fe_fd = state->dvr_fd = -1;
|
||||
|
||||
priv->is_on = 0;
|
||||
dvb_free_config(priv->config);
|
||||
state->is_on = 0;
|
||||
dvb_free_state(state);
|
||||
}
|
||||
|
||||
static int dvb_streaming_start(stream_t *stream, int tuner_type, char *progname)
|
||||
@ -809,23 +812,24 @@ static int dvb_streaming_start(stream_t *stream, int tuner_type, char *progname)
|
||||
int i;
|
||||
dvb_channel_t *channel = NULL;
|
||||
dvb_priv_t *priv = stream->priv;
|
||||
dvb_state_t* state = priv->state;
|
||||
dvb_priv_t *opts = priv;
|
||||
|
||||
MP_VERBOSE(stream, "\r\ndvb_streaming_start(PROG: %s, CARD: %d)\n",
|
||||
opts->cfg_prog, opts->cfg_card);
|
||||
|
||||
priv->is_on = 0;
|
||||
state->is_on = 0;
|
||||
|
||||
i = 0;
|
||||
while ((channel == NULL) && i < priv->list->NUM_CHANNELS) {
|
||||
if (!strcmp(priv->list->channels[i].name, progname))
|
||||
channel = &(priv->list->channels[i]);
|
||||
while ((channel == NULL) && i < state->list->NUM_CHANNELS) {
|
||||
if (!strcmp(state->list->channels[i].name, progname))
|
||||
channel = &(state->list->channels[i]);
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
if (channel != NULL) {
|
||||
priv->list->current = i - 1;
|
||||
state->list->current = i - 1;
|
||||
MP_VERBOSE(stream, "PROGRAM NUMBER %d: name=%s, freq=%u\n", i - 1,
|
||||
channel->name, channel->freq);
|
||||
} else {
|
||||
@ -834,8 +838,8 @@ static int dvb_streaming_start(stream_t *stream, int tuner_type, char *progname)
|
||||
}
|
||||
|
||||
|
||||
if (!dvb_set_channel(stream, priv->card, priv->list->current)) {
|
||||
MP_ERR(stream, "ERROR, COULDN'T SET CHANNEL %i: ", priv->list->current);
|
||||
if (!dvb_set_channel(stream, state->card, state->list->current)) {
|
||||
MP_ERR(stream, "ERROR, COULDN'T SET CHANNEL %i: ", state->list->current);
|
||||
dvbin_close(stream);
|
||||
return 0;
|
||||
}
|
||||
@ -858,29 +862,29 @@ static int dvb_open(stream_t *stream)
|
||||
char *progname;
|
||||
int tuner_type = 0, i;
|
||||
|
||||
priv->fe_fd = priv->dvr_fd = -1;
|
||||
priv->config = dvb_get_config(stream);
|
||||
if (priv->config == NULL) {
|
||||
dvb_state_t* state = dvb_get_state(stream);
|
||||
priv->state = state;
|
||||
if (state == NULL) {
|
||||
MP_ERR(stream, "DVB CONFIGURATION IS EMPTY, exit\n");
|
||||
return STREAM_ERROR;
|
||||
}
|
||||
|
||||
priv->card = -1;
|
||||
for (i = 0; i < priv->config->count; i++) {
|
||||
if (priv->config->cards[i].devno + 1 == p->cfg_card) {
|
||||
priv->card = i;
|
||||
state->card = -1;
|
||||
for (i = 0; i < state->count; i++) {
|
||||
if (state->cards[i].devno + 1 == p->cfg_card) {
|
||||
state->card = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->card == -1) {
|
||||
if (state->card == -1) {
|
||||
MP_ERR(stream, "NO CONFIGURATION FOUND FOR CARD N. %d, exit\n",
|
||||
p->cfg_card);
|
||||
return STREAM_ERROR;
|
||||
}
|
||||
priv->timeout = p->cfg_timeout;
|
||||
state->timeout = p->cfg_timeout;
|
||||
|
||||
tuner_type = priv->config->cards[priv->card].type;
|
||||
tuner_type = state->cards[state->card].type;
|
||||
|
||||
if (tuner_type == 0) {
|
||||
MP_VERBOSE(stream,
|
||||
@ -888,15 +892,15 @@ static int dvb_open(stream_t *stream)
|
||||
return STREAM_ERROR;
|
||||
}
|
||||
|
||||
priv->tuner_type = tuner_type;
|
||||
state->tuner_type = tuner_type;
|
||||
|
||||
MP_VERBOSE(stream, "OPEN_DVB: prog=%s, card=%d, type=%d\n",
|
||||
p->cfg_prog, priv->card + 1, priv->tuner_type);
|
||||
p->cfg_prog, state->card + 1, state->tuner_type);
|
||||
|
||||
priv->list = priv->config->cards[priv->card].list;
|
||||
state->list = state->cards[state->card].list;
|
||||
|
||||
if ((!strcmp(p->cfg_prog, "")) && (priv->list != NULL)) {
|
||||
progname = priv->list->channels[0].name;
|
||||
if ((!strcmp(p->cfg_prog, "")) && (state->list != NULL)) {
|
||||
progname = state->list->channels[0].name;
|
||||
} else {
|
||||
progname = p->cfg_prog;
|
||||
}
|
||||
@ -918,27 +922,27 @@ static int dvb_open(stream_t *stream)
|
||||
}
|
||||
|
||||
#define MAX_CARDS 4
|
||||
dvb_config_t *dvb_get_config(stream_t *stream)
|
||||
dvb_state_t *dvb_get_state(stream_t *stream)
|
||||
{
|
||||
struct mp_log *log = stream->log;
|
||||
struct mpv_global *global = stream->global;
|
||||
dvb_priv_t *priv = stream->priv;
|
||||
int i, fd, type, size;
|
||||
int type, size;
|
||||
char filename[30], *name;
|
||||
dvb_channels_list *list;
|
||||
dvb_card_config_t *cards = NULL, *tmp;
|
||||
dvb_config_t *conf = NULL;
|
||||
dvb_state_t *state = NULL;
|
||||
|
||||
conf = malloc(sizeof(dvb_config_t));
|
||||
if (conf == NULL)
|
||||
state = malloc(sizeof(dvb_state_t));
|
||||
if (state == NULL)
|
||||
return NULL;
|
||||
|
||||
conf->priv = NULL;
|
||||
conf->count = 0;
|
||||
conf->cards = NULL;
|
||||
for (i = 0; i < MAX_CARDS; i++) {
|
||||
|
||||
state->count = 0;
|
||||
state->cards = NULL;
|
||||
state->fe_fd = state->dvr_fd = -1;
|
||||
for (int i = 0; i < MAX_CARDS; i++) {
|
||||
snprintf(filename, sizeof(filename), "/dev/dvb/adapter%d/frontend0", i);
|
||||
fd = open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
|
||||
int fd = open(filename, O_RDONLY | O_NONBLOCK | O_CLOEXEC);
|
||||
if (fd < 0) {
|
||||
mp_verbose(log, "DVB_CONFIG, can't open device %s, skipping\n",
|
||||
filename);
|
||||
@ -992,8 +996,8 @@ dvb_config_t *dvb_get_config(stream_t *stream)
|
||||
if (list == NULL)
|
||||
continue;
|
||||
|
||||
size = sizeof(dvb_card_config_t) * (conf->count + 1);
|
||||
tmp = realloc(conf->cards, size);
|
||||
size = sizeof(dvb_card_config_t) * (state->count + 1);
|
||||
tmp = realloc(state->cards, size);
|
||||
|
||||
if (tmp == NULL) {
|
||||
fprintf(stderr, "DVB_CONFIG, can't realloc %d bytes, skipping\n",
|
||||
@ -1008,23 +1012,23 @@ dvb_config_t *dvb_get_config(stream_t *stream)
|
||||
continue;
|
||||
}
|
||||
|
||||
conf->cards = cards;
|
||||
conf->cards[conf->count].devno = i;
|
||||
conf->cards[conf->count].list = list;
|
||||
conf->cards[conf->count].type = type;
|
||||
state->cards = cards;
|
||||
state->cards[state->count].devno = i;
|
||||
state->cards[state->count].list = list;
|
||||
state->cards[state->count].type = type;
|
||||
snprintf(name, 20, "DVB-%c card n. %d",
|
||||
type == TUNER_TER ? 'T' : (type == TUNER_CBL ? 'C' : 'S'),
|
||||
conf->count + 1);
|
||||
conf->cards[conf->count].name = name;
|
||||
conf->count++;
|
||||
state->count + 1);
|
||||
state->cards[state->count].name = name;
|
||||
state->count++;
|
||||
}
|
||||
|
||||
if (conf->count == 0) {
|
||||
free(conf);
|
||||
conf = NULL;
|
||||
if (state->count == 0) {
|
||||
free(state);
|
||||
state = NULL;
|
||||
}
|
||||
|
||||
return conf;
|
||||
return state;
|
||||
}
|
||||
|
||||
static void *get_defaults(stream_t *st)
|
||||
|
Loading…
Reference in New Issue
Block a user