summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/atrac3_oma.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/atrac3_oma.c')
-rw-r--r--lib/rbcodec/codecs/atrac3_oma.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/rbcodec/codecs/atrac3_oma.c b/lib/rbcodec/codecs/atrac3_oma.c
index d394fffdcb..2b212ad5f8 100644
--- a/lib/rbcodec/codecs/atrac3_oma.c
+++ b/lib/rbcodec/codecs/atrac3_oma.c
@@ -23,7 +23,6 @@
23 23
24#include "logf.h" 24#include "logf.h"
25#include "codeclib.h" 25#include "codeclib.h"
26#include "inttypes.h"
27#include "libatrac/atrac3.h" 26#include "libatrac/atrac3.h"
28 27
29CODEC_HEADER 28CODEC_HEADER
@@ -66,12 +65,16 @@ enum codec_status codec_run(void)
66 65
67 ci->configure(DSP_SET_FREQUENCY, ci->id3->frequency); 66 ci->configure(DSP_SET_FREQUENCY, ci->id3->frequency);
68 ci->configure(DSP_SET_SAMPLE_DEPTH, 17); /* Remark: atrac3 uses s15.0 by default, s15.2 was hacked. */ 67 ci->configure(DSP_SET_SAMPLE_DEPTH, 17); /* Remark: atrac3 uses s15.0 by default, s15.2 was hacked. */
69 ci->configure(DSP_SET_STEREO_MODE, ci->id3->channels == 1 ? 68 const uint8_t channels = 2;
69 ci->configure(DSP_SET_STEREO_MODE, channels == 1 ?
70 STEREO_MONO : STEREO_NONINTERLEAVED); 70 STEREO_MONO : STEREO_NONINTERLEAVED);
71 71
72 ci->seek_buffer(0); 72 ci->seek_buffer(0);
73 73
74 res = atrac3_decode_init(&q, ci->id3); 74 /* fake the atrac3 extradata (wav format, makes stream copy to wav work) */
75 /* ATRAC3 expects and extra-data size of 14 bytes for wav format, and *
76 * looks for that in the id3v2buf. */
77 res = atrac3_decode_init(&q, ci->id3, channels, 14);
75 if(res < 0) { 78 if(res < 0) {
76 DEBUGF("failed to initialize OMA atrac decoder\n"); 79 DEBUGF("failed to initialize OMA atrac decoder\n");
77 return CODEC_ERROR; 80 return CODEC_ERROR;
@@ -143,7 +146,7 @@ enum codec_status codec_run(void)
143 146
144 if(datasize) 147 if(datasize)
145 ci->pcmbuf_insert(q.outSamples, q.outSamples + 1024, 148 ci->pcmbuf_insert(q.outSamples, q.outSamples + 1024,
146 q.samples_per_frame / ci->id3->channels); 149 q.samples_per_frame / channels);
147 150
148 elapsed += (FRAMESIZE * 8) / BITRATE; 151 elapsed += (FRAMESIZE * 8) / BITRATE;
149 ci->set_elapsed(elapsed); 152 ci->set_elapsed(elapsed);