diff options
Diffstat (limited to 'lib/rbcodec/codecs/a52.c')
-rw-r--r-- | lib/rbcodec/codecs/a52.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/lib/rbcodec/codecs/a52.c b/lib/rbcodec/codecs/a52.c index 77caaf87c1..da670308b8 100644 --- a/lib/rbcodec/codecs/a52.c +++ b/lib/rbcodec/codecs/a52.c | |||
@@ -150,19 +150,28 @@ enum codec_status codec_run(void) | |||
150 | 150 | ||
151 | samplesdone = 0; | 151 | samplesdone = 0; |
152 | 152 | ||
153 | /* The main decoding loop */ | ||
154 | if (ci->id3->offset) { | 153 | if (ci->id3->offset) { |
155 | if (ci->seek_buffer(ci->id3->offset)) { | 154 | sample_loc = (ci->id3->offset / ci->id3->bytesperframe) * |
156 | samplesdone = (ci->id3->offset / ci->id3->bytesperframe) * | 155 | A52_SAMPLESPERFRAME; |
157 | A52_SAMPLESPERFRAME; | 156 | param = ci->id3->offset; |
158 | ci->set_elapsed(samplesdone/(ci->id3->frequency / 1000)); | 157 | } |
159 | } | 158 | else if (ci->id3->elapsed) { |
159 | sample_loc = ci->id3->elapsed/1000 * ci->id3->frequency; | ||
160 | param = sample_loc/A52_SAMPLESPERFRAME*ci->id3->bytesperframe; | ||
160 | } | 161 | } |
161 | else { | 162 | else { |
162 | ci->seek_buffer(ci->id3->first_frame_offset); | 163 | sample_loc = 0; |
163 | ci->set_elapsed(0); | 164 | param = ci->id3->first_frame_offset; |
165 | } | ||
166 | |||
167 | if (ci->seek_buffer(param)) { | ||
168 | samplesdone = sample_loc; | ||
164 | } | 169 | } |
165 | 170 | ||
171 | ci->set_elapsed(samplesdone/(ci->id3->frequency/1000)); | ||
172 | |||
173 | /* The main decoding loop */ | ||
174 | |||
166 | while (1) { | 175 | while (1) { |
167 | enum codec_command_action action = ci->get_command(¶m); | 176 | enum codec_command_action action = ci->get_command(¶m); |
168 | 177 | ||
@@ -172,7 +181,8 @@ enum codec_status codec_run(void) | |||
172 | if (action == CODEC_ACTION_SEEK_TIME) { | 181 | if (action == CODEC_ACTION_SEEK_TIME) { |
173 | sample_loc = param/1000 * ci->id3->frequency; | 182 | sample_loc = param/1000 * ci->id3->frequency; |
174 | 183 | ||
175 | if (ci->seek_buffer((sample_loc/A52_SAMPLESPERFRAME)*ci->id3->bytesperframe)) { | 184 | if (ci->seek_buffer((sample_loc/A52_SAMPLESPERFRAME)* |
185 | ci->id3->bytesperframe)) { | ||
176 | samplesdone = sample_loc; | 186 | samplesdone = sample_loc; |
177 | ci->set_elapsed(samplesdone/(ci->id3->frequency/1000)); | 187 | ci->set_elapsed(samplesdone/(ci->id3->frequency/1000)); |
178 | } | 188 | } |