summaryrefslogtreecommitdiff
path: root/apps/codecs
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs')
-rw-r--r--apps/codecs/mpc.c17
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;