[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[190] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-10-22 09:38:15
|
Revision: 190 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=190&view=rev Author: nickols_k Date: 2012-10-22 09:38:04 +0000 (Mon, 22 Oct 2012) Log Message: ----------- improve libao2 re-enterability Modified Paths: -------------- mplayerxp/libao2/ao_alsa9.c mplayerxp/libao2/ao_esd.c mplayerxp/libao2/ao_jack.c mplayerxp/libao2/ao_null.c mplayerxp/libao2/ao_openal.c mplayerxp/libao2/ao_oss.c mplayerxp/libao2/ao_sdl.c mplayerxp/libao2/ao_wav.c mplayerxp/libao2/audio_out.c mplayerxp/libao2/audio_out.h mplayerxp/mplayer.c Modified: mplayerxp/libao2/ao_alsa9.c =================================================================== --- mplayerxp/libao2/ao_alsa9.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_alsa9.c 2012-10-22 09:38:04 UTC (rev 190) @@ -329,11 +329,11 @@ MSG_V("alsa-init: compiled for ALSA-%s\n", SND_LIB_VERSION_STR); - if (ao_subdevice) { + if (ao->subdevice) { const char *param; char *p; // example: -ao alsa:hw:0#mmap=1 - param=mrl_parse_line(ao_subdevice,NULL,NULL,&alsa_dev,&alsa_port); + param=mrl_parse_line(ao->subdevice,NULL,NULL,&alsa_dev,&alsa_port); mrl_parse_params(param,alsaconf); if(alsa_port) { p=strchr(alsa_port,','); @@ -347,7 +347,7 @@ if(alsa_port) snprintf(alsa_device,sizeof(alsa_device),"%s:%s",alsa_dev,alsa_port); else strncpy(alsa_device,alsa_dev,sizeof(alsa_device)); MSG_V("alsa-init: soundcard set to %s\n", alsa_device); - } //end parsing ao_subdevice + } //end parsing ao->subdevice } if ((err = snd_card_next(&cards)) < 0 || cards < 0) { Modified: mplayerxp/libao2/ao_esd.c =================================================================== --- mplayerxp/libao2/ao_esd.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_esd.c 2012-10-22 09:38:04 UTC (rev 190) @@ -166,7 +166,7 @@ priv_t*priv=ao->priv; memset(priv,0,sizeof(priv_t)); priv->fd=priv->play_fd=-1; - char *server = ao_subdevice; /* NULL for localhost */ + char *server = ao->subdevice; /* NULL for localhost */ UNUSED(flags); if (priv->fd < 0) { priv->fd = esd_open_sound(server); @@ -181,7 +181,7 @@ static int configure(ao_data_t* ao,unsigned rate_hz,unsigned channels,unsigned format) { priv_t*priv=ao->priv; - char *server = ao_subdevice; /* NULL for localhost */ + char *server = ao->subdevice; /* NULL for localhost */ esd_format_t esd_fmt; int bytes_per_sample; int fl; Modified: mplayerxp/libao2/ao_jack.c =================================================================== --- mplayerxp/libao2/ao_jack.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_jack.c 2012-10-22 09:38:04 UTC (rev 190) @@ -240,7 +240,7 @@ priv->estimate = 1; UNUSED(format); /* - if (subopt_parse(ao_subdevice, subopts) != 0) { + if (subopt_parse(ao->subdevice, subopts) != 0) { print_help(); return 0; } @@ -266,7 +266,7 @@ // list matching priv->ports if (!port_name) port_flags |= JackPortIsPhysical; - matching_ports = jack_get_ports(priv->client, ao_subdevice, NULL, port_flags); + matching_ports = jack_get_ports(priv->client, ao->subdevice, NULL, port_flags); if (!matching_ports || !matching_ports[0]) { MSG_FATAL("[JACK] no physical priv->ports available\n"); goto err_out; Modified: mplayerxp/libao2/ao_null.c =================================================================== --- mplayerxp/libao2/ao_null.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_null.c 2012-10-22 09:38:04 UTC (rev 190) @@ -111,13 +111,13 @@ memset(priv,0,sizeof(priv_t)); char *null_dev=NULL,*mode=NULL; UNUSED(flags); - if (ao_subdevice) { - mrl_parse_line(ao_subdevice,NULL,NULL,&null_dev,&mode); + if (ao->subdevice) { + mrl_parse_line(ao->subdevice,NULL,NULL,&null_dev,&mode); priv->fd=NULL; if(null_dev) priv->fd = fopen(null_dev, "wb"); //if(priv->fd) priv->fast_mode=1; if(strcmp(mode,"wav")==0) priv->wav_mode=1; - } //end parsing ao_subdevice + } //end parsing ao->subdevice return 1; } Modified: mplayerxp/libao2/ao_openal.c =================================================================== --- mplayerxp/libao2/ao_openal.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_openal.c 2012-10-22 09:38:04 UTC (rev 190) @@ -124,7 +124,7 @@ const opt_t subopts[] = { {NULL} }; - if (subopt_parse(ao_subdevice, subopts) != 0) { + if (subopt_parse(ao->subdevice, subopts) != 0) { print_help(); return 0; } Modified: mplayerxp/libao2/ao_oss.c =================================================================== --- mplayerxp/libao2/ao_oss.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_oss.c 2012-10-22 09:38:04 UTC (rev 190) @@ -35,6 +35,7 @@ int mixer_channel; int fd; audio_buf_info zz; + int delay_method; }priv_t; const char *oss_mixer_device = PATH_DEV_MIXER; @@ -97,7 +98,7 @@ if(ao->format == AFMT_AC3) return CONTROL_TRUE; - + if ((fd = open(oss_mixer_device, O_RDONLY)) > 0) { ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs); @@ -188,7 +189,7 @@ if(rval & DSP_CAP_MMAP) MSG_INFO("mmap "); if(rval & DSP_CAP_MULTI) MSG_INFO("multiopen "); if(rval & DSP_CAP_BIND) MSG_INFO("bind "); - MSG_INFO("\n"); + MSG_INFO("\n"); } close(priv->fd); } @@ -203,11 +204,12 @@ priv->dsp=PATH_DEV_DSP; priv->mixer_channel=SOUND_MIXER_PCM; priv->fd=-1; - if (ao_subdevice) + priv->delay_method=2; + if (ao->subdevice) { char *p; - p=strrchr(ao_subdevice,':'); - priv->dsp = ao_subdevice; + p=strrchr(ao->subdevice,':'); + priv->dsp = ao->subdevice; if(p) { *p=0; p++; if(strcmp(p,"-1")==0) { show_caps(ao); return 0; } } } @@ -439,14 +441,12 @@ return len; } -static int audio_delay_method=2; - // return: delay in seconds between first and last sample in buffer static float get_delay(ao_data_t* ao){ priv_t*priv=ao->priv; int ierr; /* Calculate how many bytes/second is sent out */ - if(audio_delay_method==2){ + if(priv->delay_method==2){ #ifdef SNDCTL_DSP_GETODELAY int r=0; ierr=ioctl(priv->fd, SNDCTL_DSP_GETODELAY, &r); @@ -455,16 +455,16 @@ return ((float)r)/(float)ao->bps; } #endif - audio_delay_method=1; // fallback if not supported + priv->delay_method=1; // fallback if not supported } - if(audio_delay_method==1){ + if(priv->delay_method==1){ // SNDCTL_DSP_GETOSPACE ierr=ioctl(priv->fd, SNDCTL_DSP_GETOSPACE, &priv->zz); if(ierr!=-1) { return ((float)(ao->buffersize-priv->zz.bytes))/(float)ao->bps; } - audio_delay_method=0; // fallback if not supported + priv->delay_method=0; // fallback if not supported } return ((float)ao->buffersize)/(float)ao->bps; } Modified: mplayerxp/libao2/ao_sdl.c =================================================================== --- mplayerxp/libao2/ao_sdl.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_sdl.c 2012-10-22 09:38:04 UTC (rev 190) @@ -152,8 +152,8 @@ /* Allocate ring-priv->buffer memory */ for(i=0;i<NUM_BUFS;i++) priv->buffer[i]=(unsigned char *) malloc(BUFFSIZE); - if(ao_subdevice) { - setenv("SDL_AUDIODRIVER", ao_subdevice, 1); + if(ao->subdevice) { + setenv("SDL_AUDIODRIVER", ao->subdevice, 1); } ao->priv=malloc(sizeof(priv_t)); memset(ao->priv,0,sizeof(priv_t)); Modified: mplayerxp/libao2/ao_wav.c =================================================================== --- mplayerxp/libao2/ao_wav.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/ao_wav.c 2012-10-22 09:38:04 UTC (rev 190) @@ -109,7 +109,7 @@ unsigned bits; char str[256]; - if(ao_subdevice) priv->out_filename = ao_subdevice; + if(ao->subdevice) priv->out_filename = ao->subdevice; else priv->out_filename = strdup("mpxp_adump.wav"); bits=8; Modified: mplayerxp/libao2/audio_out.c =================================================================== --- mplayerxp/libao2/audio_out.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/audio_out.c 2012-10-22 09:38:04 UTC (rev 190) @@ -7,9 +7,6 @@ #include "afmt.h" #include "ao_msg.h" -// there are some globals: -char *ao_subdevice = NULL; - extern const ao_functions_t audio_out_wav; extern const ao_functions_t audio_out_null; #ifdef USE_OSS_AUDIO Modified: mplayerxp/libao2/audio_out.h =================================================================== --- mplayerxp/libao2/audio_out.h 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/libao2/audio_out.h 2012-10-22 09:38:04 UTC (rev 190) @@ -13,6 +13,7 @@ /** Global data used by mplayerxp and plugins */ typedef struct ao_data_s { + char* subdevice; unsigned samplerate; /**< rate of samples in Hz */ unsigned channels; /**< number of audio channels */ unsigned format; /**< format of audio samples */ @@ -77,8 +78,6 @@ void (*resume)(ao_data_t*); } ao_functions_t; - -extern char *ao_subdevice; extern const ao_functions_t* audio_out_drivers[]; /**< NULL terminated array of all drivers */ #define CONTROL_OK 1 Modified: mplayerxp/mplayer.c =================================================================== --- mplayerxp/mplayer.c 2012-10-21 10:26:52 UTC (rev 189) +++ mplayerxp/mplayer.c 2012-10-22 09:38:04 UTC (rev 190) @@ -1711,9 +1711,9 @@ if (audio_driver[i] == ':') { - ao_subdevice = malloc(i2-i); - if (ao_subdevice != NULL) - strncpy(ao_subdevice, (char *)(audio_driver+i+1), i2-i); + ao_data->subdevice = malloc(i2-i); + if (ao_data->subdevice != NULL) + strncpy(ao_data->subdevice, (char *)(audio_driver+i+1), i2-i); audio_driver[i] = '\0'; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |