diff options
Diffstat (limited to 'lib/rbcodec/codecs/atrac3_oma.c')
-rw-r--r-- | lib/rbcodec/codecs/atrac3_oma.c | 11 |
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 | ||
29 | CODEC_HEADER | 28 | CODEC_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); |