# HG changeset patch # User alex # Date 1005956628 0 # Node ID 60c1b7c0ea21f29ce0982ca9f343da644b8aa649 # Parent 1902b7ff9cdc77fd9a29f78e1edfe092d161fc5b added support for norm=,chanlist=,channel= and also on-the-fly channel chaning with keys diff -r 1902b7ff9cdc -r 60c1b7c0ea21 cfg-common.h --- a/cfg-common.h Fri Nov 16 23:17:52 2001 +0000 +++ b/cfg-common.h Sat Nov 17 00:23:48 2001 +0000 @@ -98,6 +98,7 @@ {"device", &tv_param_device, CONF_TYPE_STRING, 0, 0, 0}, {"freq", &tv_param_freq, CONF_TYPE_STRING, 0, 0, 0}, {"channel", &tv_param_channel, CONF_TYPE_STRING, 0, 0, 0}, + {"chanlist", &tv_param_chanlist, CONF_TYPE_STRING, 0, 0, 0}, {"norm", &tv_param_norm, CONF_TYPE_STRING, 0, 0, 0}, {"width", &tv_param_width, CONF_TYPE_INT, 0, 0, 4096}, {"height", &tv_param_height, CONF_TYPE_INT, 0, 0, 4096}, diff -r 1902b7ff9cdc -r 60c1b7c0ea21 libmpdemux/Makefile --- a/libmpdemux/Makefile Fri Nov 16 23:17:52 2001 +0000 +++ b/libmpdemux/Makefile Sat Nov 17 00:23:48 2001 +0000 @@ -3,7 +3,7 @@ include ../config.mak -SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c aviwrite.c demux_asf.c demux_avi.c demux_mov.c demux_mpg.c demux_viv.c demuxer.c dvdauth.c open.c parse_es.c stream.c tv.c tvi_dummy.c tvi_v4l.c +SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c aviwrite.c demux_asf.c demux_avi.c demux_mov.c demux_mpg.c demux_viv.c demuxer.c dvdauth.c open.c parse_es.c stream.c tv.c tvi_dummy.c tvi_v4l.c frequencies.c ifeq ($(STREAMING),yes) SRCS += asf_streaming.c url.c http.c network.c endif diff -r 1902b7ff9cdc -r 60c1b7c0ea21 libmpdemux/tv.c --- a/libmpdemux/tv.c Fri Nov 16 23:17:52 2001 +0000 +++ b/libmpdemux/tv.c Sat Nov 17 00:23:48 2001 +0000 @@ -29,10 +29,13 @@ #include "tv.h" +#include "frequencies.h" + /* some default values */ char *tv_param_freq = NULL; char *tv_param_channel = "26"; /* hungarian national tv channel 1 */ char *tv_param_norm = "pal"; +char *tv_param_chanlist = "europe-east"; char *tv_param_device = NULL; char *tv_param_driver = "dummy"; int tv_param_width = -1; @@ -92,6 +95,7 @@ int stream_open_tv(stream_t *stream, tvi_handle_t *tvh) { + int i; tvi_functions_t *funcs = tvh->functions; int picture_format = 0; @@ -160,6 +164,56 @@ mp_msg(MSGT_TV, MSGL_INFO, "Current frequency: %lu (%.3f)\n", freq, (float)freq/16); } + + /* select video norm */ + if (!strcasecmp(tv_param_norm, "pal")) + tvh->norm = TV_NORM_PAL; + else if (!strcasecmp(tv_param_norm, "ntsc")) + tvh->norm = TV_NORM_NTSC; + else if (!strcasecmp(tv_param_norm, "secam")) + tvh->norm = TV_NORM_SECAM; + + mp_msg(MSGT_TV, MSGL_INFO, "Selected norm: %s\n", tv_param_norm); + + /* select channel list */ + for (i = 0; chanlists[i].name != NULL; i++) + { + if (!strcasecmp(chanlists[i].name, tv_param_chanlist)) + { + tvh->chanlist = i; + tvh->chanlist_s = chanlists[i].list; + break; + } + } + + if (tvh->chanlist == -1) + mp_msg(MSGT_TV, MSGL_WARN, "Unable to find selected channel list! (%s)\n", + tv_param_chanlist); + + mp_msg(MSGT_TV, MSGL_INFO, "Selected channel list: %s (including %d channels)\n", + chanlists[tvh->chanlist].name, chanlists[tvh->chanlist].count); + + if (tv_param_freq && tv_param_channel) + mp_msg(MSGT_TV, MSGL_HINT, "You can't set frequency and channel simultanly!\n"); + + if (!tv_param_freq && tv_param_channel) + { + struct CHANLIST cl; + for (i = 0; i < chanlists[tvh->chanlist].count; i++) + { + cl = tvh->chanlist_s[i]; +// printf("count%d: name: %s, freq: %d\n", +// i, cl.name, cl.freq); + if (!strcasecmp(cl.name, tv_param_channel)) + { + tvh->channel = i; + mp_msg(MSGT_TV, MSGL_INFO, "Selected channel: %s (freq: %.3f)\n", + cl.name, (float)cl.freq/1000); + tv_set_freq(tvh, (unsigned long)(((float)cl.freq/1000)*16)); + break; + } + } + } /* also start device! */ return(funcs->start(tvh->priv)); @@ -366,4 +420,54 @@ return(1); } + +int tv_set_freq(tvi_handle_t *tvh, unsigned long freq) +{ + if (tvh->functions->control(tvh->priv, TVI_CONTROL_IS_TUNER, 0) == TVI_CONTROL_TRUE) + { +// unsigned long freq = atof(tv_param_freq)*16; + + /* set freq in MHz */ + tvh->functions->control(tvh->priv, TVI_CONTROL_TUN_SET_FREQ, &freq); + + tvh->functions->control(tvh->priv, TVI_CONTROL_TUN_GET_FREQ, &freq); + mp_msg(MSGT_TV, MSGL_INFO, "Current frequency: %lu (%.3f)\n", + freq, (float)freq/16); + } +} + +int tv_step_channel(tvi_handle_t *tvh, int direction) +{ + struct CHANLIST cl; + + if (direction == TV_CHANNEL_LOWER) + { + if (tvh->channel-1 >= 0) + { + cl = tvh->chanlist_s[tvh->channel--]; + mp_msg(MSGT_TV, MSGL_INFO, "Selected channel: %s (freq: %.3f)\n", + cl.name, (float)cl.freq/1000); + tv_set_freq(tvh, (unsigned long)(((float)cl.freq/1000)*16)); + } + } + + if (direction == TV_CHANNEL_HIGHER) + { + if (tvh->channel+1 <= chanlists[tvh->chanlist].count) + { + cl = tvh->chanlist_s[tvh->channel++]; + mp_msg(MSGT_TV, MSGL_INFO, "Selected channel: %s (freq: %.3f)\n", + cl.name, (float)cl.freq/1000); + tv_set_freq(tvh, (unsigned long)(((float)cl.freq/1000)*16)); + } + } +} + +int tv_step_norm(tvi_handle_t *tvh) +{ +} + +int tv_step_chanlist(tvi_handle_t *tvh) +{ +} #endif /* USE_TV */ diff -r 1902b7ff9cdc -r 60c1b7c0ea21 libmpdemux/tv.h --- a/libmpdemux/tv.h Fri Nov 16 23:17:52 2001 +0000 +++ b/libmpdemux/tv.h Sat Nov 17 00:23:48 2001 +0000 @@ -1,3 +1,5 @@ +#ifndef TV_H +#define TV_H extern int tv_param_on; @@ -9,6 +11,7 @@ extern char *tv_param_freq; extern char *tv_param_channel; +extern char *tv_param_chanlist; extern char *tv_param_norm; extern char *tv_param_device; extern char *tv_param_driver; @@ -48,6 +51,12 @@ void *priv; tvi_param_t *params; int seq; + + /* specific */ + int norm; + int chanlist; + struct CHANLIST *chanlist_s; + int channel; } tvi_handle_t; @@ -111,10 +120,23 @@ extern int tv_init(tvi_handle_t *tvh); extern int tv_uninit(tvi_handle_t *tvh); - +int tv_set_color_options(tvi_handle_t *tvh, int opt, int val); #define TV_COLOR_BRIGHTNESS 1 #define TV_COLOR_HUE 2 #define TV_COLOR_SATURATION 3 #define TV_COLOR_CONTRAST 4 +int tv_step_channel(tvi_handle_t *tvh, int direction); +#define TV_CHANNEL_LOWER 1 +#define TV_CHANNEL_HIGHER 2 + +int tv_step_norm(tvi_handle_t *tvh); +int tv_step_chanlist(tvi_handle_t *tvh); + +#define TV_NORM_PAL 1 +#define TV_NORM_NTSC 2 +#define TV_NORM_SECAM 3 + #endif /* USE_TV */ + +#endif /* TV_H */ diff -r 1902b7ff9cdc -r 60c1b7c0ea21 libmpdemux/tvi_def.h --- a/libmpdemux/tvi_def.h Fri Nov 16 23:17:52 2001 +0000 +++ b/libmpdemux/tvi_def.h Sat Nov 17 00:23:48 2001 +0000 @@ -36,6 +36,10 @@ h->functions = &functions; h->params = NULL; h->seq = 0; + h->chanlist = -1; + h->chanlist_s = NULL; + h->norm = -1; + h->channel = -1; return(h); } diff -r 1902b7ff9cdc -r 60c1b7c0ea21 mplayer.c --- a/mplayer.c Fri Nov 16 23:17:52 2001 +0000 +++ b/mplayer.c Sat Nov 17 00:23:48 2001 +0000 @@ -79,6 +79,13 @@ #include #endif +#ifdef USE_TV +#include "libmpdemux/tv.h" + +extern int tv_param_on; +extern tvi_handle_t *tv_handler; +#endif + //**************************************************************************// // Config file //**************************************************************************// @@ -1820,6 +1827,25 @@ frame_dropping=(frame_dropping+1)%3; mp_msg(MSGT_CPLAYER,MSGL_V,"== drop: %d == \n",frame_dropping); break; + +#ifdef USE_TV + case 'h': + if (tv_param_on == 1) + tv_step_channel(tv_handler, TV_CHANNEL_HIGHER); + break; + case 'l': + if (tv_param_on == 1) + tv_step_channel(tv_handler, TV_CHANNEL_LOWER); + break; + case 'n': + if (tv_param_on == 1) + tv_step_norm(tv_handler); + break; + case 'b': + if (tv_param_on == 1) + tv_step_chanlist(tv_handler); + break; +#endif } } // keyboard event handler