summaryrefslogtreecommitdiffstats
path: root/libao2
diff options
context:
space:
mode:
authordiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-08-15 17:14:53 +0000
committerdiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2008-08-15 17:14:53 +0000
commit5a4496ca5df4b83f41a6b36a30df1bc6aae5ebbd (patch)
treec71409a8ad06b883986eabab7f8aefeaa063b208 /libao2
parenta42593f347350d47b9fe8d6779d3dfa39e295c61 (diff)
downloadmpv-5a4496ca5df4b83f41a6b36a30df1bc6aae5ebbd.tar.bz2
mpv-5a4496ca5df4b83f41a6b36a30df1bc6aae5ebbd.tar.xz
Work correctly with very small files where less than outburst is to be played.
patch by Tobias Diedrich, ranma tdiedrich de git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27467 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2')
-rw-r--r--libao2/ao_nas.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/libao2/ao_nas.c b/libao2/ao_nas.c
index 4888cfc366..a61791bff3 100644
--- a/libao2/ao_nas.c
+++ b/libao2/ao_nas.c
@@ -574,6 +574,29 @@ static int play(void* data,int len,int flags)
if (len == 0)
return 0;
+ if (len < ao_data.outburst) {
+ unsigned tempbufsz = ao_data.outburst;
+ void *tempbuf = malloc(tempbufsz);
+
+ memset(tempbuf, 0, tempbufsz);
+ memcpy(tempbuf, data, len);
+
+ play(tempbuf, ao_data.outburst, flags);
+
+ if (nas_data->state != AuStateStart) {
+ mp_msg(MSGT_AO, MSGL_DBG2, "ao_nas: play(): Starting flow.\n");
+ nas_data->expect_underrun = 1;
+ nas_data->state = AuStateStart;
+ AuStartFlow(nas_data->aud, nas_data->flow, &as);
+ if (as != AuSuccess)
+ nas_print_error(nas_data->aud, "play(): AuStartFlow", as);
+ }
+
+ free(tempbuf);
+
+ return len;
+ }
+
pthread_mutex_lock(&nas_data->buffer_mutex);
maxbursts = (nas_data->client_buffer_size -
nas_data->client_buffer_used) / ao_data.outburst;