summaryrefslogtreecommitdiff
path: root/apps/codecs.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-10 16:33:03 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-10 16:33:03 +0000
commit645a2e16ed645c30858e3b494ba2ff7d00b7a09b (patch)
treebe5da24477ae465c77342947de6ef73c57505e0d /apps/codecs.c
parenta9203b4d8352d9de761c5baf95314ff189242ec0 (diff)
downloadrockbox-645a2e16ed645c30858e3b494ba2ff7d00b7a09b.zip
rockbox-645a2e16ed645c30858e3b494ba2ff7d00b7a09b.tar.gz
rockbox-645a2e16ed645c30858e3b494ba2ff7d00b7a09b.tar.bz2
rockbox-645a2e16ed645c30858e3b494ba2ff7d00b7a09b.tar.xz
Fixed a simulator crash while trying to play a song. Fixed crossfade
when selecting a new track to play. Most likely fixed a bug which caused playback to stop on track change. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7094 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs.c')
-rw-r--r--apps/codecs.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/apps/codecs.c b/apps/codecs.c
index 400e7fb..dd87ddf 100644
--- a/apps/codecs.c
+++ b/apps/codecs.c
@@ -56,8 +56,9 @@
#if CONFIG_HWCODEC == MASNONE
static unsigned char codecbuf[CODEC_SIZE];
#endif
-void *sim_codec_load(char *plugin, int *fd);
-void sim_codec_close(int fd);
+void *sim_codec_load_ram(char* codecptr, int size,
+ void* ptr2, int bufwrap, int *pd);
+void sim_codec_close(int pd);
#else
#define sim_codec_close(x)
extern unsigned char codecbuf[];
@@ -245,11 +246,12 @@ struct codec_api ci = {
memchr,
};
-int codec_load_ram(char* codecptr, size_t size, void* ptr2, size_t bufwrap)
+int codec_load_ram(char* codecptr, int size, void* ptr2, int bufwrap)
{
enum codec_status (*codec_start)(const struct codec_api* api);
- int copy_n;
int status;
+#ifndef SIMULATOR
+ int copy_n;
if ((char *)&codecbuf[0] != codecptr) {
/* zero out codec buffer to ensure a properly zeroed bss area */
@@ -265,8 +267,19 @@ int codec_load_ram(char* codecptr, size_t size, void* ptr2, size_t bufwrap)
}
codec_start = (void*)&codecbuf;
+#else /* SIMULATOR */
+ int pd;
+
+ codec_start = sim_codec_load_ram(codecptr, size, ptr2, bufwrap, &pd);
+ if (pd < 0)
+ return CODEC_ERROR;
+#endif /* SIMULATOR */
+
invalidate_icache();
status = codec_start(&ci);
+#ifdef SIMULATOR
+ sim_codec_close(pd);
+#endif
return status;
}
@@ -294,7 +307,7 @@ int codec_load_file(const char *plugin)
logf("Codec read error");
return CODEC_ERROR;
}
-
+
return codec_load_ram(codecbuf, (size_t)rc, NULL, 0);
}