summaryrefslogtreecommitdiffstats
path: root/libao2
diff options
context:
space:
mode:
authoranders <anders@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-27 10:59:03 +0000
committeranders <anders@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-27 10:59:03 +0000
commitf7737ca1e02fc99a441c9cdaf5bfb7c2bf9dc736 (patch)
tree4354374af0e235ad74fe59f9ed50934037144c28 /libao2
parentc0451487611b4338397377207fc479caf1dcd5f7 (diff)
downloadmpv-f7737ca1e02fc99a441c9cdaf5bfb7c2bf9dc736.tar.bz2
mpv-f7737ca1e02fc99a441c9cdaf5bfb7c2bf9dc736.tar.xz
Fixed sig 11 caused by buffer full in ao driver
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4376 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2')
-rw-r--r--libao2/ao_plugin.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/libao2/ao_plugin.c b/libao2/ao_plugin.c
index 9c84ce4d05..817f575420 100644
--- a/libao2/ao_plugin.c
+++ b/libao2/ao_plugin.c
@@ -217,22 +217,26 @@ static int play(void* data,int len,int flags){
// Limit length to avoid over flow in plugins
int tmp = driver()->get_space();
int ret_len =(tmp<len)?tmp:len;
- // Filter data
- ao_plugin_data.len=ret_len;
- ao_plugin_data.data=data;
- while(plugin(i))
- plugin(i++)->play();
- // Copy data to output buffer
- memcpy(ao_plugin_local_data.buf+ao_plugin_local_data.len,
- ao_plugin_data.data,ao_plugin_data.len);
- // Send data to output
- l=driver()->play(ao_plugin_local_data.buf,
- ao_plugin_data.len+ao_plugin_local_data.len,flags);
- // Save away unsent data
- ao_plugin_local_data.len=ao_plugin_data.len+ao_plugin_local_data.len-l;
- memcpy(ao_plugin_local_data.buf,ao_plugin_local_data.buf+l,
- ao_plugin_local_data.len);
-
+ if(ret_len){
+ // Filter data
+ ao_plugin_data.len=ret_len;
+ ao_plugin_data.data=data;
+ while(plugin(i)){
+ printf("%i \n",ao_plugin_data.len);
+ plugin(i++)->play();
+ printf("%i \n",ao_plugin_data.len);
+ }
+ // Copy data to output buffer
+ memcpy(ao_plugin_local_data.buf+ao_plugin_local_data.len,
+ ao_plugin_data.data,ao_plugin_data.len);
+ // Send data to output
+ l=driver()->play(ao_plugin_local_data.buf,
+ ao_plugin_data.len+ao_plugin_local_data.len,flags);
+ // Save away unsent data
+ ao_plugin_local_data.len=ao_plugin_data.len+ao_plugin_local_data.len-l;
+ memcpy(ao_plugin_local_data.buf,ao_plugin_local_data.buf+l,
+ ao_plugin_local_data.len);
+ }
return ret_len;
}