diff options
-rw-r--r-- | apps/codecs.h | 12 | ||||
-rw-r--r-- | apps/playback.c | 34 | ||||
-rw-r--r-- | apps/playback.h | 2 | ||||
-rw-r--r-- | firmware/export/pcm_playback.h | 6 | ||||
-rw-r--r-- | firmware/pcm_playback.c | 35 |
5 files changed, 47 insertions, 42 deletions
diff --git a/apps/codecs.h b/apps/codecs.h index c373bdb8ba..c50af3030e 100644 --- a/apps/codecs.h +++ b/apps/codecs.h @@ -139,24 +139,24 @@ struct codec_api { int seek_time; /* Returns buffer to malloc array. Only codeclib should need this. */ - void* (*get_codec_memory)(size_t *size); + void* (*get_codec_memory)(long *size); /* Insert PCM data into audio buffer for playback. Playback will start automatically. */ - bool (*audiobuffer_insert)(char *data, size_t length); - bool (*audiobuffer_insert_split)(void *ch1, void *ch2, size_t length); + bool (*audiobuffer_insert)(char *data, long length); + bool (*audiobuffer_insert_split)(void *ch1, void *ch2, long length); /* Set song position in WPS (value in ms). */ void (*set_elapsed)(unsigned int value); /* Read next <size> amount bytes from file buffer to <ptr>. Will return number of bytes read or 0 if end of file. */ - size_t (*read_filebuf)(void *ptr, size_t size); + long (*read_filebuf)(void *ptr, long size); /* Request pointer to file buffer which can be used to read <realsize> amount of data. <reqsize> tells the buffer system how much data it should try to allocate. If <realsize> is 0, end of file is reached. */ - void* (*request_buffer)(size_t *realsize, size_t reqsize); + void* (*request_buffer)(long *realsize, long reqsize); /* Advance file buffer position by <amount> amount of bytes. */ - void (*advance_buffer)(size_t amount); + void (*advance_buffer)(long amount); /* Advance file buffer to a pointer location inside file buffer. */ void (*advance_buffer_loc)(void *ptr); /* Seek file buffer to position <newpos> beginning of file. */ diff --git a/apps/playback.c b/apps/playback.c index 429141f759..5721e7c21b 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -145,7 +145,7 @@ static bool track_changed; static int current_fd; /* Information about how many bytes left on the buffer re-fill run. */ -static size_t fill_bytesleft; +static long fill_bytesleft; /* Track info structure about songs in the file buffer. */ static struct track_info tracks[MAX_TRACK]; @@ -172,7 +172,7 @@ int mp3_get_file_pos(void); /* Simulator stubs. */ #ifdef SIMULATOR -bool pcm_insert_buffer(char *buf, size_t length) +bool pcm_insert_buffer(char *buf, long length) { (void)buf; (void)length; @@ -180,13 +180,13 @@ bool pcm_insert_buffer(char *buf, size_t length) return true; } -void pcm_flush_buffer(size_t length) +void pcm_flush_buffer(long length) { (void)length; } -void* pcm_request_buffer(size_t length, size_t *realsize) +void* pcm_request_buffer(long length, long *realsize) { (void)length; (void)realsize; @@ -244,10 +244,10 @@ int ata_sleep(void) } #endif -bool codec_audiobuffer_insert_callback(char *buf, size_t length) +bool codec_audiobuffer_insert_callback(char *buf, long length) { char *dest; - size_t realsize; + long realsize; int factor; int next_channel = 0; int processed_length; @@ -292,10 +292,10 @@ bool codec_audiobuffer_insert_callback(char *buf, size_t length) } bool codec_audiobuffer_insert_split_callback(void *ch1, void *ch2, - size_t length) + long length) { char *dest; - size_t realsize; + long realsize; int factor; int processed_length; @@ -330,7 +330,7 @@ bool codec_audiobuffer_insert_split_callback(void *ch1, void *ch2, return true; } -void* get_codec_memory_callback(size_t *size) +void* get_codec_memory_callback(long *size) { *size = MALLOC_BUFSIZE; return &audiobuf[0]; @@ -353,7 +353,7 @@ void codec_set_elapsed_callback(unsigned int value) } } -size_t codec_filebuf_callback(void *ptr, size_t size) +long codec_filebuf_callback(void *ptr, long size) { char *buf = (char *)ptr; int copy_n; @@ -389,9 +389,9 @@ size_t codec_filebuf_callback(void *ptr, size_t size) return copy_n; } -void* codec_request_buffer_callback(size_t *realsize, size_t reqsize) +void* codec_request_buffer_callback(long *realsize, long reqsize) { - size_t part_n; + long part_n; if (ci.stop_codec || !playing) { *realsize = 0; @@ -423,7 +423,7 @@ void* codec_request_buffer_callback(size_t *realsize, size_t reqsize) return (char *)&codecbuf[buf_ridx]; } -void codec_advance_buffer_callback(size_t amount) +void codec_advance_buffer_callback(long amount) { if ((int)amount > cur_ti->available + cur_ti->filerem) amount = cur_ti->available + cur_ti->filerem; @@ -457,7 +457,7 @@ void codec_advance_buffer_callback(size_t amount) void codec_advance_buffer_loc_callback(void *ptr) { - size_t amount; + long amount; amount = (int)ptr - (int)&codecbuf[buf_ridx]; codec_advance_buffer_callback(amount); @@ -560,7 +560,7 @@ void yield_codecs(void) void audio_fill_file_buffer(void) { - size_t i, size; + long i, size; int rc; if (current_fd < 0) @@ -587,10 +587,10 @@ void audio_fill_file_buffer(void) buf_widx -= codecbuflen; i += rc; tracks[track_widx].available += rc; + codecbufused += rc; fill_bytesleft -= rc; } - codecbufused += i; tracks[track_widx].filerem -= i; tracks[track_widx].filepos += i; /*logf("Filled:%d/%d", tracks[track_widx].available, @@ -1176,7 +1176,7 @@ void audio_thread(void) void codec_thread(void) { struct event ev; - size_t codecsize; + long codecsize; int status; int wrap; diff --git a/apps/playback.h b/apps/playback.h index 672ddae440..f0ae9eae42 100644 --- a/apps/playback.h +++ b/apps/playback.h @@ -49,7 +49,7 @@ struct track_info { struct mp3entry id3; /* TAG metadata */ struct mp3info mp3data; /* MP3 metadata */ char *codecbuf; /* Pointer to codec buffer */ - size_t codecsize; /* Codec length in bytes */ + long codecsize; /* Codec length in bytes */ off_t filerem; /* Remaining bytes of file NOT in buffer */ off_t filesize; /* File total length */ diff --git a/firmware/export/pcm_playback.h b/firmware/export/pcm_playback.h index 3fe60670b3..07e33e96bf 100644 --- a/firmware/export/pcm_playback.h +++ b/firmware/export/pcm_playback.h @@ -48,9 +48,9 @@ bool pcm_is_lowdata(void); bool pcm_crossfade_init(void); void audiobuffer_add_event(void (*event_handler)(void)); unsigned int audiobuffer_get_latency(void); -bool pcm_insert_buffer(char *buf, size_t length); -void pcm_flush_buffer(size_t length); -void* pcm_request_buffer(size_t length, size_t *realsize); +bool pcm_insert_buffer(char *buf, long length); +void pcm_flush_buffer(long length); +void* pcm_request_buffer(long length, long *realsize); bool pcm_is_crossfade_enabled(void); void pcm_crossfade_enable(bool on_off); diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 89e72c76a0..b0bdfbbb32 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c @@ -55,9 +55,9 @@ static bool pcm_paused; static int pcm_freq = 0x6; /* 44.1 is default */ static char *audiobuffer; -static size_t audiobuffer_pos; -size_t audiobuffer_free; -static size_t audiobuffer_fillpos; +static long audiobuffer_pos; +long audiobuffer_free; +static long audiobuffer_fillpos; static bool boost_mode; static bool crossfade_enabled; @@ -457,7 +457,7 @@ int crossfade(short *buf, const short *buf2, int length) return size; } -inline static bool prepare_insert(size_t length) +inline static bool prepare_insert(long length) { crossfade_start(); if (audiobuffer_free < length + audiobuffer_fillpos @@ -476,7 +476,7 @@ inline static bool prepare_insert(size_t length) return true; } -void* pcm_request_buffer(size_t length, size_t *realsize) +void* pcm_request_buffer(long length, long *realsize) { void *ptr = NULL; @@ -487,13 +487,15 @@ void* pcm_request_buffer(size_t length, size_t *realsize) if (crossfade_active) { *realsize = MIN(length, PCMBUF_GUARD); + //logf("cfb:%d/%d", *realsize, length); ptr = &guardbuf[0]; } else { *realsize = MIN(length, PCMBUF_SIZE - audiobuffer_pos - audiobuffer_fillpos); if (*realsize < length) { + //logf("gbr1:%d/%d", *realsize, length); *realsize += MIN((long)(length - *realsize), PCMBUF_GUARD); - //logf("gbr:%d/%d", *realsize, length); + //logf("gbr2:%d/%d", *realsize, length); } ptr = &audiobuffer[audiobuffer_pos + audiobuffer_fillpos]; } @@ -501,16 +503,18 @@ void* pcm_request_buffer(size_t length, size_t *realsize) return ptr; } -void pcm_flush_buffer(size_t length) +void pcm_flush_buffer(long length) { int copy_n; char *buf; if (crossfade_active) { + //logf("cfbf"); buf = &guardbuf[0]; length = MIN(length, PCMBUF_GUARD); while (length > 0 && crossfade_active) { - copy_n = MIN(length, PCMBUF_SIZE - (unsigned int)crossfade_pos); + //logf("cfl:%d", length); + copy_n = MIN(length, PCMBUF_SIZE - crossfade_pos); copy_n = 2 * crossfade((short *)&audiobuffer[crossfade_pos], (const short *)buf, copy_n/2); buf += copy_n; @@ -521,7 +525,8 @@ void pcm_flush_buffer(size_t length) } while (length > 0) { - copy_n = MIN(length, PCMBUF_SIZE - (unsigned)audiobuffer_pos); + //logf("cfl2:%d", length); + copy_n = MIN(length, PCMBUF_SIZE - audiobuffer_pos); memcpy(&audiobuffer[audiobuffer_pos], buf, copy_n); audiobuffer_fillpos = copy_n; buf += copy_n; @@ -538,12 +543,12 @@ void pcm_flush_buffer(size_t length) - audiobuffer_pos - audiobuffer_fillpos > 0) return ; - copy_n = MIN((long)(audiobuffer_fillpos - (PCMBUF_SIZE - - audiobuffer_pos)), PCMBUF_GUARD); + copy_n = audiobuffer_fillpos - (PCMBUF_SIZE - audiobuffer_pos); if (copy_n > 0) { - //logf("guard buf used:%d", copy_n); + //logf("gbu:%d/%d/%d", copy_n, audiobuffer_fillpos, audiobuffer_pos); audiobuffer_fillpos -= copy_n; pcm_flush_fillpos(); + copy_n = MIN(copy_n, PCMBUF_GUARD); memcpy(&audiobuffer[0], &guardbuf[0], copy_n); audiobuffer_fillpos = copy_n; goto try_flush; @@ -551,16 +556,16 @@ void pcm_flush_buffer(size_t length) pcm_flush_fillpos(); } -bool pcm_insert_buffer(char *buf, size_t length) +bool pcm_insert_buffer(char *buf, long length) { - size_t copy_n = 0; + long copy_n = 0; if (!prepare_insert(length)) return false; while (length > 0) { if (crossfade_active) { - copy_n = MIN(length, PCMBUF_SIZE - (unsigned int)crossfade_pos); + copy_n = MIN(length, PCMBUF_SIZE - crossfade_pos); copy_n = 2 * crossfade((short *)&audiobuffer[crossfade_pos], (const short *)buf, copy_n/2); |