stream_dvb: Allow actual zapping of channels again.

This is realized by dvbin-channel-switch-offset,
which is a numeric offset on the channel initially tuned to.
Since the channel list is kept in the stream alone
depending on detected hardware and chosen card,
and no available backchannel to the player, there's no direct
property which could be switched.

Using input.conf like:
H cycle dvbin-channel-switch-offset up
K cycle dvbin-channel-switch-offset down
Q set dvbin-prog "ZDF HD"
allow fast and reliable channel switching again.
This commit is contained in:
Oliver Freyermuth 2019-10-01 23:54:54 +02:00
parent c408a48119
commit 12d74e4d95
3 changed files with 9 additions and 0 deletions

View File

@ -3530,6 +3530,7 @@ static const struct m_property mp_properties_base[] = {
{"edition-list", property_list_editions},
{"dvbin-prog", mp_property_dvb_channel},
{"dvbin-channel-switch-offset", mp_property_dvb_channel},
{"playlist", mp_property_playlist},
{"playlist-pos", mp_property_playlist_pos},

View File

@ -121,6 +121,7 @@ typedef struct {
int cfg_timeout;
char *cfg_file;
int cfg_full_transponder;
int cfg_channel_switch_offset;
} dvb_opts_t;
typedef struct {

View File

@ -78,6 +78,7 @@ const struct m_sub_options stream_dvb_conf = {
OPT_INTRANGE("timeout", cfg_timeout, 0, 1, 30),
OPT_STRING("file", cfg_file, M_OPT_FILE),
OPT_FLAG("full-transponder", cfg_full_transponder, 0),
OPT_INT("channel-switch-offset", cfg_channel_switch_offset, 0),
{0}
},
.size = sizeof(dvb_opts_t),
@ -1044,6 +1045,12 @@ static int dvb_streaming_start(stream_t *stream, char *progname)
}
list->current = i;
// When switching channels, cfg_channel_switch_offset
// keeps the offset to the initially chosen channel.
list->current = (list->NUM_CHANNELS + list->current + priv->opts->cfg_channel_switch_offset) % list->NUM_CHANNELS;
channel = &(list->channels[list->current]);
MP_INFO(stream, "Tuning to channel \"%s\"...\n", channel->name);
MP_VERBOSE(stream, "PROGRAM NUMBER %d: name=%s, freq=%u\n", i,
channel->name, channel->freq);