diff options
author | Adam Boot <rotator@gmail.com> | 2007-04-06 21:48:17 +0000 |
---|---|---|
committer | Adam Boot <rotator@gmail.com> | 2007-04-06 21:48:17 +0000 |
commit | a5d7309d96cca974e1524dc746482ab2a26d7395 (patch) | |
tree | 8d835f98b75c7abd46f1c0b430b390b4c269f10f /apps/codecs/mpc.c | |
parent | 8527ce82b651b20f2f3406a9b95c4948e8c7dddf (diff) | |
download | rockbox-a5d7309d96cca974e1524dc746482ab2a26d7395.tar.gz rockbox-a5d7309d96cca974e1524dc746482ab2a26d7395.zip |
Support resume for Musepack
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13049 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/mpc.c')
-rw-r--r-- | apps/codecs/mpc.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/apps/codecs/mpc.c b/apps/codecs/mpc.c index fe22c8cccb..122cb22025 100644 --- a/apps/codecs/mpc.c +++ b/apps/codecs/mpc.c | |||
@@ -100,6 +100,8 @@ next_track: | |||
100 | goto exit; | 100 | goto exit; |
101 | } | 101 | } |
102 | 102 | ||
103 | samplesdone = ci->id3->offset; | ||
104 | |||
103 | /* read file's streaminfo data */ | 105 | /* read file's streaminfo data */ |
104 | mpc_streaminfo_init(&info); | 106 | mpc_streaminfo_init(&info); |
105 | if (mpc_streaminfo_read(&info, &reader) != ERROR_CODE_OK) { | 107 | if (mpc_streaminfo_read(&info, &reader) != ERROR_CODE_OK) { |
@@ -128,9 +130,21 @@ next_track: | |||
128 | retval = CODEC_ERROR; | 130 | retval = CODEC_ERROR; |
129 | goto done; | 131 | goto done; |
130 | } | 132 | } |
133 | |||
134 | /* Resume to saved sample offset. */ | ||
135 | if(samplesdone > 0) { | ||
136 | /* hack to improve seek time if filebuf goes empty */ | ||
137 | ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, 1024*512); | ||
138 | if (mpc_decoder_seek_sample(&decoder, samplesdone)) { | ||
139 | ci->set_elapsed(samplesdone/frequency); | ||
140 | } else { | ||
141 | samplesdone = 0; | ||
142 | } | ||
143 | /* reset chunksize */ | ||
144 | ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, 1024*16); | ||
145 | } | ||
131 | 146 | ||
132 | /* This is the decoding loop. */ | 147 | /* This is the decoding loop. */ |
133 | samplesdone = 0; | ||
134 | do { | 148 | do { |
135 | #if 1 | 149 | #if 1 |
136 | /* Complete seek handler. */ | 150 | /* Complete seek handler. */ |
@@ -173,6 +187,7 @@ next_track: | |||
173 | status); | 187 | status); |
174 | samplesdone += status; | 188 | samplesdone += status; |
175 | ci->set_elapsed(samplesdone/frequency); | 189 | ci->set_elapsed(samplesdone/frequency); |
190 | ci->set_offset(samplesdone); | ||
176 | } | 191 | } |
177 | } while (status != 0); | 192 | } while (status != 0); |
178 | retval = CODEC_OK; | 193 | retval = CODEC_OK; |