diff options
author | anders <anders@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-01-27 10:59:03 +0000 |
---|---|---|
committer | anders <anders@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-01-27 10:59:03 +0000 |
commit | f7737ca1e02fc99a441c9cdaf5bfb7c2bf9dc736 (patch) | |
tree | 4354374af0e235ad74fe59f9ed50934037144c28 /libao2 | |
parent | c0451487611b4338397377207fc479caf1dcd5f7 (diff) | |
download | mpv-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.c | 36 |
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; } |