summaryrefslogtreecommitdiffstats
path: root/stream/stream_dvb.c
diff options
context:
space:
mode:
Diffstat (limited to 'stream/stream_dvb.c')
-rw-r--r--stream/stream_dvb.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/stream/stream_dvb.c b/stream/stream_dvb.c
index cdf282d3ac..c1697ddebd 100644
--- a/stream/stream_dvb.c
+++ b/stream/stream_dvb.c
@@ -550,13 +550,26 @@ int dvb_step_channel(stream_t *stream, int dir)
return 0;
}
- new_current = (list->NUM_CHANNELS + list->current + (dir == DVB_CHANNEL_HIGHER ? 1 : -1)) % list->NUM_CHANNELS;
+ new_current = (list->NUM_CHANNELS + list->current + (dir >= 0 ? 1 : -1)) % list->NUM_CHANNELS;
return dvb_set_channel(stream, priv->card, new_current);
}
-
-
+static int dvbin_stream_control(struct stream *s, int cmd, void *arg)
+{
+ int r;
+ switch (cmd) {
+ case STREAM_CTRL_DVB_SET_CHANNEL: {
+ int *iarg = arg;
+ r = dvb_set_channel(s, iarg[1], iarg[0]);
+ return r ? STREAM_OK : STREAM_ERROR;
+ }
+ case STREAM_CTRL_DVB_STEP_CHANNEL:
+ r = dvb_step_channel(s, *(int *)arg);
+ return r ? STREAM_OK : STREAM_ERROR;
+ }
+ return STREAM_UNSUPPORTED;
+}
static void dvbin_close(stream_t *stream)
{
@@ -692,6 +705,7 @@ static int dvb_open(stream_t *stream)
stream->type = STREAMTYPE_DVB;
stream->fill_buffer = dvb_streaming_read;
stream->close = dvbin_close;
+ stream->control = dvbin_stream_control;
stream->demuxer = "lavf";
stream->lavf_type = "mpegts";