[MPlayer-cvslog] r23910 - in trunk: cfg-common.h stream/stream_radio.c stream/stream_radio.h
voroshil
subversion at mplayerhq.hu
Sun Jul 29 14:20:25 CEST 2007
Author: voroshil
Date: Sun Jul 29 14:20:25 2007
New Revision: 23910
Log:
Replacing global variables in radio:// with
context-sensitive structure.
Modified:
trunk/cfg-common.h
trunk/stream/stream_radio.c
trunk/stream/stream_radio.h
Modified: trunk/cfg-common.h
==============================================================================
--- trunk/cfg-common.h (original)
+++ trunk/cfg-common.h Sun Jul 29 14:20:25 2007
@@ -402,17 +402,17 @@ extern char* edl_output_filename;
#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
Modified: trunk/stream/stream_radio.c
==============================================================================
--- trunk/stream/stream_radio.c (original)
+++ trunk/stream/stream_radio.c Sun Jul 29 14:20:25 2007
@@ -88,39 +88,23 @@ typedef struct radio_channels_s {
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 @@ typedef struct radio_priv_s {
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 @@ typedef struct radio_driver_s {
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 @@ static int clear_buffer(radio_priv_t* pr
/*****************************************************************
- * \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 @@ static int init_frac_v4l2(radio_priv_t*
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 const radio_driver_t radio_driver
*/
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 @@ static int init_audio(radio_priv_t *priv
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 @@ static int init_audio(radio_priv_t *priv
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 @@ static int init_audio(radio_priv_t *priv
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 @@ int radio_step_freq(struct stream_st *st
* \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 @@ int radio_step_channel(struct stream_st
* \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 @@ static const radio_driver_t* radio_drive
* \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 @@ static int open_s(stream_t *stream,int m
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 @@ static int open_s(stream_t *stream,int m
- 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 @@ static int open_s(stream_t *stream,int m
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 @@ static int open_s(stream_t *stream,int m
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 @@ static int open_s(stream_t *stream,int m
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 @@ static int open_s(stream_t *stream,int m
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 @@ static int open_s(stream_t *stream,int m
}
#endif
- set_volume(priv,radio_param_volume);
+ set_volume(priv,priv->radio_param->volume);
return STREAM_OK;
}
@@ -1260,6 +1244,8 @@ static void close_s(struct stream_st * s
close(priv->radio_fd);
}
+ if(priv->radio_param)
+ m_struct_free(&stream_opts,priv->radio_param);
free(priv);
stream->priv=NULL;
}
Modified: trunk/stream/stream_radio.h
==============================================================================
--- trunk/stream/stream_radio.h (original)
+++ trunk/stream/stream_radio.h Sun Jul 29 14:20:25 2007
@@ -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);
More information about the MPlayer-cvslog
mailing list