summaryrefslogtreecommitdiff
path: root/apps/pcmbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/pcmbuf.c')
-rw-r--r--apps/pcmbuf.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c
index f9d60e9b58..e2b1d7f87b 100644
--- a/apps/pcmbuf.c
+++ b/apps/pcmbuf.c
@@ -791,21 +791,20 @@ static bool prepare_insert(size_t length)
791 return true; 791 return true;
792} 792}
793 793
794void* pcmbuf_request_buffer(size_t length, size_t *realsize) 794void* pcmbuf_request_buffer(int *count)
795{ 795{
796 if (crossfade_init) 796 if (crossfade_init)
797 crossfade_start(); 797 crossfade_start();
798 798
799 if (crossfade_active) { 799 if (crossfade_active) {
800 *realsize = MIN(length, PCMBUF_MIX_CHUNK); 800 *count = MIN(*count, PCMBUF_MIX_CHUNK/4);
801 return fadebuf; 801 return fadebuf;
802 } 802 }
803 else 803 else
804 { 804 {
805 if(prepare_insert(length)) 805 if(prepare_insert(*count << 2))
806 { 806 {
807 size_t audiobuffer_index = audiobuffer_pos + audiobuffer_fillpos; 807 size_t audiobuffer_index = audiobuffer_pos + audiobuffer_fillpos;
808 *realsize = length;
809 if (pcmbuf_size - audiobuffer_index >= PCMBUF_MIN_CHUNK) 808 if (pcmbuf_size - audiobuffer_index >= PCMBUF_MIN_CHUNK)
810 { 809 {
811 /* Usual case, there's space here */ 810 /* Usual case, there's space here */
@@ -821,34 +820,31 @@ void* pcmbuf_request_buffer(size_t length, size_t *realsize)
821 } 820 }
822 else 821 else
823 { 822 {
824 *realsize = 0;
825 return NULL; 823 return NULL;
826 } 824 }
827 } 825 }
828} 826}
829 827
830void* pcmbuf_request_voice_buffer(size_t length, size_t *realsize, bool mix) 828void* pcmbuf_request_voice_buffer(int *count, bool mix)
831{ 829{
832 if (mix) 830 if (mix)
833 { 831 {
834 if (pcmbuf_read == NULL) 832 if (pcmbuf_read == NULL)
835 { 833 {
836 *realsize = 0;
837 return NULL; 834 return NULL;
838 } 835 }
839 else if (pcmbuf_mix_chunk || pcmbuf_read->link) 836 else if (pcmbuf_mix_chunk || pcmbuf_read->link)
840 { 837 {
841 *realsize = MIN(length, PCMBUF_MIX_CHUNK); 838 *count = MIN(*count, PCMBUF_MIX_CHUNK/4);
842 return voicebuf; 839 return voicebuf;
843 } 840 }
844 else 841 else
845 { 842 {
846 *realsize = 0;
847 return NULL; 843 return NULL;
848 } 844 }
849 } 845 }
850 else 846 else
851 return pcmbuf_request_buffer(length, realsize); 847 return pcmbuf_request_buffer(count);
852} 848}
853 849
854bool pcmbuf_is_crossfade_active(void) 850bool pcmbuf_is_crossfade_active(void)
@@ -856,8 +852,10 @@ bool pcmbuf_is_crossfade_active(void)
856 return crossfade_active || crossfade_init; 852 return crossfade_active || crossfade_init;
857} 853}
858 854
859void pcmbuf_write_complete(size_t length) 855void pcmbuf_write_complete(int count)
860{ 856{
857 size_t length = (size_t)(unsigned int)count << 2;
858
861 if (crossfade_active) 859 if (crossfade_active)
862 { 860 {
863 flush_crossfade(fadebuf, length); 861 flush_crossfade(fadebuf, length);
@@ -874,8 +872,10 @@ void pcmbuf_write_complete(size_t length)
874} 872}
875 873
876#if 0 874#if 0
877bool pcmbuf_insert_buffer(char *buf, size_t length) 875bool pcmbuf_insert_buffer(char *buf, int count)
878{ 876{
877 size_t length = (size_t)(unsigned int)count << 2;
878
879 if (crossfade_active) 879 if (crossfade_active)
880 { 880 {
881 flush_crossfade(buf, length); 881 flush_crossfade(buf, length);
@@ -980,7 +980,7 @@ int pcmbuf_mix_free(void)
980 return 100; 980 return 100;
981} 981}
982 982
983void pcmbuf_mix_voice(size_t length) 983void pcmbuf_mix_voice(int count)
984{ 984{
985 short *ibuf = (short *)voicebuf; 985 short *ibuf = (short *)voicebuf;
986 short *obuf; 986 short *obuf;
@@ -998,9 +998,9 @@ void pcmbuf_mix_voice(size_t length)
998 obuf = (short *)pcmbuf_mix_chunk->addr; 998 obuf = (short *)pcmbuf_mix_chunk->addr;
999 chunk_samples = pcmbuf_mix_chunk->size / 2; 999 chunk_samples = pcmbuf_mix_chunk->size / 2;
1000 1000
1001 length /= 2; 1001 count <<= 1;
1002 1002
1003 while (length-- > 0) { 1003 while (count-- > 0) {
1004 int sample = *ibuf++; 1004 int sample = *ibuf++;
1005 if (pcmbuf_mix_sample >= chunk_samples) 1005 if (pcmbuf_mix_sample >= chunk_samples)
1006 { 1006 {