# HG changeset patch # User ib # Date 1385728461 0 # Node ID 7766530caa76d0a71a63494860a538b5ffb8ca25 # Parent 960593201c48fa21b364ff45613f0c001842d700 Add new stream control command STREAM_CTRL_GET_CURRENT_CHANNEL. This provides the name of the currently selected DVB channel. (Unsupported for analog TV though.) diff -r 960593201c48 -r 7766530caa76 stream/cache2.c --- a/stream/cache2.c Fri Nov 29 00:26:17 2013 +0000 +++ b/stream/cache2.c Fri Nov 29 12:34:21 2013 +0000 @@ -94,6 +94,7 @@ volatile int control; volatile uint64_t control_uint_arg; volatile double control_double_arg; + volatile char *control_char_p_arg; volatile struct stream_lang_req control_lang_arg; volatile int control_res; volatile double stream_time_length; @@ -327,6 +328,9 @@ case STREAM_CTRL_GET_LANG: s->control_res = s->stream->control(s->stream, s->control, (void *)&s->control_lang_arg); break; + case STREAM_CTRL_GET_CURRENT_CHANNEL: + s->control_res = s->stream->control(s->stream, s->control, &s->control_char_p_arg); + break; default: s->control_res = STREAM_UNSUPPORTED; break; @@ -654,6 +658,10 @@ case -2: s->control = cmd; break; + case STREAM_CTRL_GET_CURRENT_CHANNEL: + s->control_char_p_arg = *(char **)arg; + s->control = cmd; + break; default: return STREAM_UNSUPPORTED; } @@ -699,6 +707,9 @@ case STREAM_CTRL_GET_LANG: *(struct stream_lang_req *)arg = s->control_lang_arg; break; + case STREAM_CTRL_GET_CURRENT_CHANNEL: + *(char **)arg = (char *)s->control_char_p_arg; + break; } return s->control_res; } diff -r 960593201c48 -r 7766530caa76 stream/stream.h --- a/stream/stream.h Fri Nov 29 00:26:17 2013 +0000 +++ b/stream/stream.h Fri Nov 29 12:34:21 2013 +0000 @@ -97,6 +97,7 @@ #define STREAM_CTRL_GET_NUM_TITLES 12 #define STREAM_CTRL_GET_LANG 13 #define STREAM_CTRL_GET_CURRENT_TITLE 14 +#define STREAM_CTRL_GET_CURRENT_CHANNEL 15 enum stream_ctrl_type { stream_ctrl_audio, diff -r 960593201c48 -r 7766530caa76 stream/stream_dvb.c --- a/stream/stream_dvb.c Fri Nov 29 00:26:17 2013 +0000 +++ b/stream/stream_dvb.c Fri Nov 29 12:34:21 2013 +0000 @@ -656,6 +656,25 @@ +static int dvb_control(stream_t *stream, int cmd, void *arg) +{ + dvb_priv_t *priv = stream->priv; + dvb_channels_list *list; + + switch (cmd) { + case STREAM_CTRL_GET_CURRENT_CHANNEL: + if (priv) { + list = priv->list; + *(char **)arg = list->channels[list->current].name; + return STREAM_OK; + } else + return STREAM_ERROR; + } + + return STREAM_UNSUPPORTED; +} + + static int dvb_open(stream_t *stream, int mode, void *opts, int *file_format) { @@ -734,6 +753,7 @@ stream->type = STREAMTYPE_DVB; stream->fill_buffer = dvb_streaming_read; + stream->control = dvb_control; stream->close = dvbin_close; m_struct_free(&stream_opts, opts); diff -r 960593201c48 -r 7766530caa76 stream/stream_tv.c --- a/stream/stream_tv.c Fri Nov 29 00:26:17 2013 +0000 +++ b/stream/stream_tv.c Fri Nov 29 12:34:21 2013 +0000 @@ -106,12 +106,17 @@ m_struct_free(&stream_opts,stream->priv); stream->priv=NULL; } +static int tv_stream_control(stream_t *stream, int cmd, void *arg) +{ + return STREAM_UNSUPPORTED; +} static int tv_stream_open (stream_t *stream, int mode, void *opts, int *file_format) { stream->type = STREAMTYPE_TV; stream->priv = opts; + stream->control = tv_stream_control; stream->close=tv_stream_close; *file_format = DEMUXER_TYPE_TV;