Mercurial > mplayer.hg
changeset 23890:4587edae1790
Replacing global variables in radio:// with
context-sensitive structure.
author | voroshil |
---|---|
date | Sun, 29 Jul 2007 12:20:25 +0000 |
parents | 0ad7037df91f |
children | 542d4cda34c3 |
files | cfg-common.h stream/stream_radio.c stream/stream_radio.h |
diffstat | 3 files changed, 87 insertions(+), 83 deletions(-) [+] |
line wrap: on
line diff
--- a/cfg-common.h Sun Jul 29 10:30:41 2007 +0000 +++ b/cfg-common.h Sun Jul 29 12:20:25 2007 +0000 @@ -402,17 +402,17 @@ #ifdef USE_RADIO m_option_t radioopts_conf[]={ - {"device", &radio_param_device, CONF_TYPE_STRING, 0, 0 ,0, NULL}, - {"driver", &radio_param_driver, CONF_TYPE_STRING, 0, 0 ,0, NULL}, + {"device", &stream_radio_defaults.device, CONF_TYPE_STRING, 0, 0 ,0, NULL}, + {"driver", &stream_radio_defaults.driver, CONF_TYPE_STRING, 0, 0 ,0, NULL}, #ifdef RADIO_BSDBT848_HDR - {"freq_min", &radio_param_freq_min, CONF_TYPE_FLOAT, 0, 0 ,0, NULL}, - {"freq_max", &radio_param_freq_max, CONF_TYPE_FLOAT, 0, 0 ,0, NULL}, + {"freq_min", &stream_radio_defaults.freq_min, CONF_TYPE_FLOAT, 0, 0 ,0, NULL}, + {"freq_max", &stream_radio_defaults.freq_max, CONF_TYPE_FLOAT, 0, 0 ,0, NULL}, #endif - {"channels", &radio_param_channels, CONF_TYPE_STRING_LIST, 0, 0 ,0, NULL}, - {"volume", &radio_param_volume, CONF_TYPE_INT, CONF_RANGE, 0 ,100, NULL}, - {"adevice", &radio_param_adevice, CONF_TYPE_STRING, 0, 0 ,0, NULL}, - {"arate", &radio_param_arate, CONF_TYPE_INT, CONF_MIN, 0 ,0, NULL}, - {"achannels", &radio_param_achannels, CONF_TYPE_INT, CONF_MIN, 0 ,0, NULL}, + {"channels", &stream_radio_defaults.channels, CONF_TYPE_STRING_LIST, 0, 0 ,0, NULL}, + {"volume", &stream_radio_defaults.volume, CONF_TYPE_INT, CONF_RANGE, 0 ,100, NULL}, + {"adevice", &stream_radio_defaults.adevice, CONF_TYPE_STRING, 0, 0 ,0, NULL}, + {"arate", &stream_radio_defaults.arate, CONF_TYPE_INT, CONF_MIN, 0 ,0, NULL}, + {"achannels", &stream_radio_defaults.achannels, CONF_TYPE_INT, CONF_MIN, 0 ,0, NULL}, {NULL, NULL, 0, 0, 0, 0, NULL} }; #endif
--- a/stream/stream_radio.c Sun Jul 29 10:30:41 2007 +0000 +++ b/stream/stream_radio.c Sun Jul 29 12:20:25 2007 +0000 @@ -88,39 +88,23 @@ struct radio_channels_s * prev; } radio_channels_t; +/// default values for options +radio_param_t stream_radio_defaults={ #ifdef HAVE_RADIO_BSDBT848 -/** (device,string, "/dev/tuner0") name of radio device file */ -char* radio_param_device="/dev/tuner0"; -/** radio_param_freq_min (freq_min,float,87.5) minimal allowed frequency */ -float radio_param_freq_min=87.50; -/** radio_param_freq_min (freq_min,float,108.0) maximal allowed frequency */ -float radio_param_freq_max=108.00; + "/dev/tuner0", //device + 87.50, //freq_min + 108.00, //freq_max #else -/** (device,string, "/dev/radio0") name of radio device file */ -char* radio_param_device="/dev/radio0"; + "/dev/radio0", //device; #endif -/** (driver,string, "v4l2") radio driver (v4l,v4l2) */ -char* radio_param_driver="default"; -/** radio_param_channels (channels,string,NULL) channels list (see man page) */ -char** radio_param_channels; -/** radio_param_volume (volume,number,100) initial volume for radio device */ -int radio_param_volume=100; -/** radio_param_adevice (adevice,string,NULL) name of audio device file to grab data from */ -char* radio_param_adevice; -/** radio_param_arate (arate,number,44100) audio framerate -(please also set -rawaudio rate parameter to the same value) */ -int radio_param_arate=44100; -/** radio_param_achannels (achannels,number,2) number of audio channels */ -int radio_param_achannels=2; -extern int demux_rawaudio_packs_per_sec; - -static struct stream_priv_s { - /* if channels parameter exist here will be channel number otherwise - frequency */ - float radio_param_freq_channel; - char* capture; -} stream_priv_dflts = { - 0, - NULL + "default", //driver + NULL, //channels + 100, //volume + NULL, //adevice + 44100, //arate + 2, //achannels + 0, //freq_channel + NULL, //capture }; typedef struct radio_priv_s { @@ -143,6 +127,7 @@ int audio_drop; ///< number of dropped bytes int audio_inited; #endif + radio_param_t *radio_param; } radio_priv_t; typedef struct radio_driver_s { @@ -155,17 +140,17 @@ int (*get_frequency)(radio_priv_t* priv,float* frequency); } radio_driver_t; -#define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f) +#define ST_OFF(f) M_ST_OFF(radio_param_t,f) static m_option_t stream_opts_fields[] = { - {"hostname", ST_OFF(radio_param_freq_channel), CONF_TYPE_FLOAT, 0, 0 ,0, NULL}, + {"hostname", ST_OFF(freq_channel), CONF_TYPE_FLOAT, 0, 0 ,0, NULL}, {"filename", ST_OFF(capture), CONF_TYPE_STRING, 0, 0 ,0, NULL}, { NULL, NULL, 0, 0, 0, 0, NULL } }; static struct m_struct_st stream_opts = { "radio", - sizeof(struct stream_priv_s), - &stream_priv_dflts, + sizeof(radio_param_t), + &stream_radio_defaults, stream_opts_fields }; @@ -176,26 +161,26 @@ /***************************************************************** - * \brief parse radio_param_channels parameter and store result into list - * \param freq_channel if radio_param_channels!=NULL this mean channel number, otherwise - frequency + * \brief parse channels parameter and store result into list + * \param freq_channel if channels!=NULL this mean channel number, otherwise - frequency * \param pfreq selected frequency (from selected channel or from URL) * \result STREAM_OK if success, STREAM_ERROR otherwise * - * radio_param_channels (channels options) must be in the following format + * channels option must be in the following format * <frequency>-<name>,<frequency>-<name>,... * * '_' will be replaced with spaces. * - * If radio_param_channels is not null, number in movie URL will be treated as + * If channels option is not null, number in movie URL will be treated as * channel position in channel list. */ static int parse_channels(radio_priv_t* priv,float freq_channel,float* pfreq){ char** channels; int i; int channel = 0; - if (radio_param_channels){ + if (priv->radio_param->channels){ /*parsing channels string*/ - channels =radio_param_channels; + channels=priv->radio_param->channels; mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_ChannelNamesDetected); priv->radio_channel_list = malloc(sizeof(radio_channels_t)); @@ -289,7 +274,7 @@ return STREAM_ERROR; } if(tuner.type!=V4L2_TUNER_RADIO){ - mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_NotRadioDevice,radio_param_device); + mp_msg(MSGT_RADIO,MSGL_ERR,MSGTR_RADIO_NotRadioDevice,priv->radio_param->device); return STREAM_ERROR; } if(tuner.capability & V4L2_TUNER_CAP_LOW){ @@ -576,8 +561,8 @@ */ static int init_frac_bsdbt848(radio_priv_t* priv){ priv->frac=100; - priv->rangelow=radio_param_freq_min; - priv->rangehigh=radio_param_freq_max; + priv->rangelow=priv->radio_param->freq_min; + priv->rangehigh=priv->radio_param->freq_max; return STREAM_OK; } @@ -843,7 +828,7 @@ if(!priv->do_capture) return STREAM_OK; - if (!radio_param_adevice){ + if (!priv->radio_param->adevice){ priv->do_capture=0; return STREAM_OK; } @@ -851,12 +836,12 @@ priv->do_capture=1; mp_msg(MSGT_RADIO,MSGL_V,MSGTR_RADIO_CaptureStarting); #if defined(HAVE_ALSA9) || defined(HAVE_ALSA1X) - while ((tmp = strrchr(radio_param_adevice, '='))){ + while ((tmp = strrchr(priv->radio_param->adevice, '='))){ tmp[0] = ':'; - //radio_param_adevice looks like ALSA device name. Switching to ALSA + //adevice option looks like ALSA device name. Switching to ALSA is_oss=0; } - while ((tmp = strrchr(radio_param_adevice, '.'))) + while ((tmp = strrchr(priv->radio_param->adevice, '.'))) tmp[0] = ','; #endif @@ -864,9 +849,9 @@ mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_AudioInInitFailed,strerror(errno)); } - audio_in_set_device(&priv->audio_in, radio_param_adevice); - audio_in_set_channels(&priv->audio_in, radio_param_achannels); - audio_in_set_samplerate(&priv->audio_in, radio_param_arate); + audio_in_set_device(&priv->audio_in, priv->radio_param->adevice); + audio_in_set_channels(&priv->audio_in, priv->radio_param->achannels); + audio_in_set_samplerate(&priv->audio_in, priv->radio_param->arate); if (audio_in_setup(&priv->audio_in) < 0) { mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_AudioInSetupFailed, strerror(errno)); @@ -966,7 +951,7 @@ * \parameter direction RADIO_CHANNEL_LOWER - go to prev channel,RADIO_CHANNEL_HIGHER - to next * \return 1 if success,0 - otherwise * - * if radio_param_channel is NULL function prints error message and does nothing, otherwise + * if channel parameter is NULL function prints error message and does nothing, otherwise * changes channel to prev or next in list */ int radio_step_channel(struct stream_st *stream, int direction) { @@ -1008,7 +993,7 @@ * \parameter channel string, containing channel number * \return 1 if success,0 - otherwise * - * if radio_param_channel is NULL function prints error message and does nothing, otherwise + * if channel parameter is NULL function prints error message and does nothing, otherwise * changes channel to given */ int radio_set_channel(struct stream_st *stream, char *channel) { @@ -1109,7 +1094,6 @@ * \return STREAM_OK if success, STREAM_ERROR otherwise */ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) { - struct stream_priv_s* p=(struct stream_priv_s*)opts; radio_priv_t* priv; float frequency=0; int i; @@ -1120,16 +1104,16 @@ if(mode != STREAM_READ) return STREAM_UNSUPORTED; - priv=malloc(sizeof(radio_priv_t)); + priv=calloc(1,sizeof(radio_priv_t)); if (!priv) return STREAM_ERROR; - memset(priv,0,sizeof(radio_priv_t)); + priv->radio_param=opts; #ifdef USE_RADIO_CAPTURE - if (p->capture && strncmp("capture",p->capture,7)==0) + if (priv->radio_param->capture && strncmp("capture",priv->radio_param->capture,7)==0) priv->do_capture=1; else priv->do_capture=0; @@ -1137,7 +1121,7 @@ - if (strncmp(radio_param_driver,"default",7)==0) + if (strncmp(priv->radio_param->driver,"default",7)==0) priv->driver=radio_drivers[0]; else priv->driver=NULL; @@ -1145,7 +1129,7 @@ mp_msg(MSGT_RADIO,MSGL_V,MSGTR_RADIO_AvailableDrivers); for(i=0;radio_drivers[i];i++){ mp_msg(MSGT_RADIO,MSGL_V,"%s, ",radio_drivers[i]->name); - if(strcmp(radio_param_driver,radio_drivers[i]->name)==0) + if(strcmp(priv->radio_param->driver,radio_drivers[i]->name)==0) priv->driver=radio_drivers[i]; } mp_msg(MSGT_RADIO,MSGL_V,"\n"); @@ -1153,7 +1137,7 @@ if(priv->driver) mp_msg(MSGT_RADIO, MSGL_INFO, priv->driver->info); else{ - mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_DriverUnknownStr,radio_param_driver); + mp_msg(MSGT_RADIO, MSGL_INFO, MSGTR_RADIO_DriverUnknownStr,priv->radio_param->driver); close_s(stream); return STREAM_ERROR; } @@ -1171,14 +1155,14 @@ stream->close=close_s; stream->fill_buffer=fill_buffer_s; - priv->radio_fd = open(radio_param_device, O_RDONLY); + priv->radio_fd = open(priv->radio_param->device, O_RDONLY); if (priv->radio_fd < 0) { mp_msg(MSGT_RADIO, MSGL_ERR, MSGTR_RADIO_UnableOpenDevice, - radio_param_device, strerror(errno)); + priv->radio_param->device, strerror(errno)); close_s(stream); return STREAM_ERROR; } - mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_RadioDevice, priv->radio_fd,radio_param_device); + mp_msg(MSGT_RADIO, MSGL_V, MSGTR_RADIO_RadioDevice, priv->radio_fd,priv->radio_param->device); fcntl(priv->radio_fd, F_SETFD, FD_CLOEXEC); get_volume(priv, &priv->old_snd_volume); @@ -1189,7 +1173,7 @@ return STREAM_ERROR; }; - if (parse_channels(priv,p->radio_param_freq_channel,&frequency)!=STREAM_OK){ + if (parse_channels(priv,priv->radio_param->freq_channel,&frequency)!=STREAM_OK){ close_s(stream); return STREAM_ERROR; } @@ -1225,7 +1209,7 @@ } #endif - set_volume(priv,radio_param_volume); + set_volume(priv,priv->radio_param->volume); return STREAM_OK; } @@ -1260,6 +1244,8 @@ close(priv->radio_fd); } + if(priv->radio_param) + m_struct_free(&stream_opts,priv->radio_param); free(priv); stream->priv=NULL; }
--- a/stream/stream_radio.h Sun Jul 29 10:30:41 2007 +0000 +++ b/stream/stream_radio.h Sun Jul 29 12:20:25 2007 +0000 @@ -4,17 +4,35 @@ #define RADIO_CHANNEL_LOWER 1 #define RADIO_CHANNEL_HIGHER 2 -extern char *radio_param_device; -extern char *radio_param_driver; -#ifdef RADIO_BSDBT848_HDR -extern float radio_param_freq_min; -extern float radio_param_freq_max; +typedef struct radio_param_s{ + /** name of radio device file */ + char* device; +#ifdef HAVE_RADIO_BSDBT848 + /** minimal allowed frequency */ + float freq_min; + /** maximal allowed frequency */ + float freq_max; #endif -extern char **radio_param_channels; -extern int radio_param_volume; -extern char* radio_param_adevice; -extern int radio_param_arate; -extern int radio_param_achannels; + /** radio driver (v4l,v4l2) */ + char* driver; + /** channels list (see man page) */ + char** channels; + /** initial volume for radio device */ + int volume; + /** name of audio device file to grab data from */ + char* adevice; + /** audio framerate (please also set -rawaudio rate + parameter to the same value) */ + int arate; + /** number of audio channels */ + int achannels; + /** if channels parameter exist, here will be channel + number otherwise - frequency */ + float freq_channel; + char* capture; +} radio_param_t; + +extern radio_param_t stream_radio_defaults; int radio_set_freq(struct stream_st *stream, float freq); int radio_get_freq(struct stream_st *stream, float* freq);