fix sample cache

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@775 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2006-04-22 21:04:35 +00:00
parent 0e02e844a2
commit 55e19cbc03

View file

@ -115,7 +115,6 @@ static pa_scache_entry* scache_add_item(pa_core *c, const char *name) {
pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_NEW, e->index); pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_NEW, e->index);
} }
pa_cvolume_reset(&e->volume, PA_CHANNELS_MAX);
e->last_used_time = 0; e->last_used_time = 0;
e->memchunk.memblock = NULL; e->memchunk.memblock = NULL;
e->memchunk.index = e->memchunk.length = 0; e->memchunk.index = e->memchunk.length = 0;
@ -124,6 +123,7 @@ static pa_scache_entry* scache_add_item(pa_core *c, const char *name) {
e->last_used_time = 0; e->last_used_time = 0;
memset(&e->sample_spec, 0, sizeof(pa_sample_spec)); memset(&e->sample_spec, 0, sizeof(pa_sample_spec));
pa_cvolume_reset(&e->volume, PA_CHANNELS_MAX);
return e; return e;
} }
@ -138,6 +138,7 @@ int pa_scache_add_item(pa_core *c, const char *name, const pa_sample_spec *ss, c
if (ss) { if (ss) {
e->sample_spec = *ss; e->sample_spec = *ss;
pa_channel_map_init_auto(&e->channel_map, ss->channels); pa_channel_map_init_auto(&e->channel_map, ss->channels);
e->volume.channels = e->sample_spec.channels;
} }
if (map) if (map)
@ -242,7 +243,10 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, const pa_cv
pa_scache_entry *e; pa_scache_entry *e;
char *t; char *t;
pa_cvolume r; pa_cvolume r;
assert(c && name && sink);
assert(c);
assert(name);
assert(sink);
if (!(e = pa_namereg_get(c, name, PA_NAMEREG_SAMPLE, 1))) if (!(e = pa_namereg_get(c, name, PA_NAMEREG_SAMPLE, 1)))
return -1; return -1;
@ -252,6 +256,7 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, const pa_cv
return -1; return -1;
pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_CHANGE, e->index); pa_subscription_post(c, PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE|PA_SUBSCRIPTION_EVENT_CHANGE, e->index);
e->volume.channels = e->sample_spec.channels;
} }
if (!e->memchunk.memblock) if (!e->memchunk.memblock)
@ -259,12 +264,19 @@ int pa_scache_play_item(pa_core *c, const char *name, pa_sink *sink, const pa_cv
t = pa_sprintf_malloc("sample:%s", name); t = pa_sprintf_malloc("sample:%s", name);
if (pa_play_memchunk(sink, t, &e->sample_spec, &e->channel_map, &e->memchunk, pa_sw_cvolume_multiply(&r, volume, &e->volume)) < 0) { if (volume) {
free(t); r = *volume;
r.channels = e->volume.channels;
pa_sw_cvolume_multiply(&r, &r, &e->volume);
} else
r = e->volume;
if (pa_play_memchunk(sink, t, &e->sample_spec, &e->channel_map, &e->memchunk, &r) < 0) {
pa_xfree(t);
return -1; return -1;
} }
free(t); pa_xfree(t);
if (e->lazy) if (e->lazy)
time(&e->last_used_time); time(&e->last_used_time);