summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/a52.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/a52.c')
-rw-r--r--lib/rbcodec/codecs/a52.c28
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(&param); 176 enum codec_command_action action = ci->get_command(&param);
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 }