From 85f49731065d0730022a92c3144c963ef8927a88 Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Mon, 27 Jun 2005 19:29:49 +0000 Subject: Replaced some size_t with longs. That might solve some problems. Fixed also problem where codec buffer length indicator goes negative. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6898 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs.h | 12 ++++++------ apps/playback.c | 34 +++++++++++++++++----------------- apps/playback.h | 2 +- firmware/export/pcm_playback.h | 6 +++--- firmware/pcm_playback.c | 35 ++++++++++++++++++++--------------- 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/apps/codecs.h b/apps/codecs.h index c373bdb..c50af30 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 amount bytes from file buffer to . 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 amount of data. tells the buffer system how much data it should try to allocate. If 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 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 beginning of file. */ diff --git a/apps/playback.c b/apps/playback.c index 429141f..5721e7c 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 672ddae..f0ae9ea 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 3fe6067..07e33e9 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 89e72c7..b0bdfbb 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); -- cgit v1.1