blob: ffd62ed1b6ba3000e6bc8dc7c5f3b9f1167e025d [file] [log] [blame]
Miika Pekkarinen20b38972005-07-13 12:48:22 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2005 by Miika Pekkarinen
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef PCMBUF_H
20#define PCMBUF_H
21
Brandon Low413da2a2006-02-07 20:38:55 +000022#define PCMBUF_TARGET_CHUNK 32768 /* This is the target fill size of chunks
23 on the pcm buffer */
Brandon Low413da2a2006-02-07 20:38:55 +000024#define PCMBUF_MIN_CHUNK 4096 /* We try to never feed a chunk smaller than
25 this to the DMA */
Brandon Lowf3bc1ef2006-04-22 14:40:13 +000026#define PCMBUF_MIX_CHUNK 8192 /* This is the maximum size of one packet
Brandon Low413da2a2006-02-07 20:38:55 +000027 for mixing (crossfade or voice) */
Miika Pekkarinen20b38972005-07-13 12:48:22 +000028
Brandon Low413da2a2006-02-07 20:38:55 +000029/* Returns true if the buffer needs to change size */
30bool pcmbuf_is_same_size(size_t bufsize);
31void pcmbuf_init(size_t bufsize);
32/* Size in bytes used by the pcmbuffer */
33size_t pcmbuf_get_bufsize(void);
34size_t get_pcmbuf_descsize(void);
Miika Pekkarinen20b38972005-07-13 12:48:22 +000035
Brandon Low413da2a2006-02-07 20:38:55 +000036void pcmbuf_pause(bool pause);
Miika Pekkarinen20b38972005-07-13 12:48:22 +000037void pcmbuf_play_stop(void);
38bool pcmbuf_is_crossfade_active(void);
39
40/* These functions are for playing chained buffers of PCM data */
Brandon Low413da2a2006-02-07 20:38:55 +000041#if defined(HAVE_ADJUSTABLE_CPU_FREQ) && !defined(SIMULATOR)
Miika Pekkarinen29aad552005-08-28 14:16:03 +000042void pcmbuf_boost(bool state);
Miika Pekkarinen20b38972005-07-13 12:48:22 +000043void pcmbuf_set_boost_mode(bool state);
Miika Pekkarinen65d43a22005-08-28 19:55:30 +000044#else
Brandon Low413da2a2006-02-07 20:38:55 +000045#define pcmbuf_boost(state) do { } while(0)
Miika Pekkarinen65d43a22005-08-28 19:55:30 +000046#define pcmbuf_set_boost_mode(state) do { } while(0)
47#endif
Miika Pekkarinen20b38972005-07-13 12:48:22 +000048bool pcmbuf_is_lowdata(void);
Miika Pekkarinen159c52d2005-08-20 11:13:19 +000049void pcmbuf_play_start(void);
Miika Pekkarinena4f8d1c2006-01-27 16:25:44 +000050bool pcmbuf_crossfade_init(bool manual_skip);
Brandon Low413da2a2006-02-07 20:38:55 +000051void pcmbuf_set_event_handler(void (*callback)(void));
52void pcmbuf_set_position_callback(void (*callback)(size_t size));
Brandon Low6c0908b2006-04-23 22:54:34 +000053size_t pcmbuf_free(void);
Miika Pekkarinen20b38972005-07-13 12:48:22 +000054unsigned int pcmbuf_get_latency(void);
Miika Pekkarinen4408b6b2006-02-07 19:17:51 +000055void pcmbuf_set_low_latency(bool state);
Brandon Low413da2a2006-02-07 20:38:55 +000056void pcmbuf_write_complete(size_t length);
Brandon Low413da2a2006-02-07 20:38:55 +000057void* pcmbuf_request_buffer(size_t length, size_t *realsize);
58void* pcmbuf_request_voice_buffer(size_t length, size_t *realsize, bool mix);
Miika Pekkarinen20b38972005-07-13 12:48:22 +000059bool pcmbuf_is_crossfade_enabled(void);
60void pcmbuf_crossfade_enable(bool on_off);
61
Miika Pekkarinen159c52d2005-08-20 11:13:19 +000062int pcmbuf_usage(void);
Brandon Lowf3bc1ef2006-04-22 14:40:13 +000063int pcmbuf_mix_free(void);
Brandon Low9535a9a2006-02-22 01:56:44 +000064void pcmbuf_beep(unsigned int frequency, size_t duration, int amplitude);
Brandon Lowf3bc1ef2006-04-22 14:40:13 +000065void pcmbuf_mix_voice(size_t length);
Brandon Low413da2a2006-02-07 20:38:55 +000066
67int pcmbuf_used_descs(void);
68int pcmbuf_descs(void);
Miika Pekkarinen159c52d2005-08-20 11:13:19 +000069
Miika Pekkarinen20b38972005-07-13 12:48:22 +000070#endif