summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Boot <rotator@gmail.com>2007-04-06 21:48:17 +0000
committerAdam Boot <rotator@gmail.com>2007-04-06 21:48:17 +0000
commita5d7309d96cca974e1524dc746482ab2a26d7395 (patch)
tree8d835f98b75c7abd46f1c0b430b390b4c269f10f
parent8527ce82b651b20f2f3406a9b95c4948e8c7dddf (diff)
downloadrockbox-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
-rw-r--r--apps/codecs/mpc.c17
-rw-r--r--apps/playback.c1
2 files changed, 17 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;
diff --git a/apps/playback.c b/apps/playback.c
index cf8d94f303..6fea60c7ea 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -2855,6 +2855,7 @@ static bool audio_load_track(int offset, bool start_play, bool rebuffer)
2855 case AFMT_PCM_WAV: 2855 case AFMT_PCM_WAV:
2856 case AFMT_A52: 2856 case AFMT_A52:
2857 case AFMT_AAC: 2857 case AFMT_AAC:
2858 case AFMT_MPC:
2858 tracks[track_widx].id3.offset = offset; 2859 tracks[track_widx].id3.offset = offset;
2859 break; 2860 break;
2860 } 2861 }