forked from len0rd/rockbox
use the full resolution we get from the WMA decoder and let the DSP code do the rest
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14224 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
0ee44031f0
commit
c43629f08b
3 changed files with 9 additions and 19 deletions
|
|
@ -172,6 +172,6 @@ int wma_decode_init(WMADecodeContext* s, asf_waveformatex_t *wfx);
|
||||||
int wma_decode_superframe_init(WMADecodeContext* s,
|
int wma_decode_superframe_init(WMADecodeContext* s,
|
||||||
uint8_t *buf, int buf_size);
|
uint8_t *buf, int buf_size);
|
||||||
int wma_decode_superframe_frame(WMADecodeContext* s,
|
int wma_decode_superframe_frame(WMADecodeContext* s,
|
||||||
int16_t *samples,
|
int32_t *samples,
|
||||||
uint8_t *buf, int buf_size);
|
uint8_t *buf, int buf_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1619,10 +1619,10 @@ next:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* decode a frame of frame_len samples */
|
/* decode a frame of frame_len samples */
|
||||||
static int wma_decode_frame(WMADecodeContext *s, int16_t *samples)
|
static int wma_decode_frame(WMADecodeContext *s, int32_t *samples)
|
||||||
{
|
{
|
||||||
int ret, i, n, a, ch, incr;
|
int ret, i, n, ch, incr;
|
||||||
int16_t *ptr;
|
int32_t *ptr;
|
||||||
fixed32 *iptr;
|
fixed32 *iptr;
|
||||||
// rb->splash(HZ, "in wma_decode_frame");
|
// rb->splash(HZ, "in wma_decode_frame");
|
||||||
|
|
||||||
|
|
@ -1646,7 +1646,7 @@ static int wma_decode_frame(WMADecodeContext *s, int16_t *samples)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* convert frame to integer */
|
/* return frame with full 30-bit precision */
|
||||||
n = s->frame_len;
|
n = s->frame_len;
|
||||||
incr = s->nb_channels;
|
incr = s->nb_channels;
|
||||||
for(ch = 0; ch < s->nb_channels; ++ch)
|
for(ch = 0; ch < s->nb_channels; ++ch)
|
||||||
|
|
@ -1656,17 +1656,7 @@ static int wma_decode_frame(WMADecodeContext *s, int16_t *samples)
|
||||||
|
|
||||||
for (i=0;i<n;++i)
|
for (i=0;i<n;++i)
|
||||||
{
|
{
|
||||||
a = fixtoi32(*iptr++)<<1; //ugly but good enough for now
|
*ptr = (*iptr++);
|
||||||
|
|
||||||
if (a > 32767)
|
|
||||||
{
|
|
||||||
a = 32767;
|
|
||||||
}
|
|
||||||
else if (a < -32768)
|
|
||||||
{
|
|
||||||
a = -32768;
|
|
||||||
}
|
|
||||||
*ptr = a;
|
|
||||||
ptr += incr;
|
ptr += incr;
|
||||||
}
|
}
|
||||||
/* prepare for next block */
|
/* prepare for next block */
|
||||||
|
|
@ -1719,7 +1709,7 @@ int wma_decode_superframe_init(WMADecodeContext* s,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int wma_decode_superframe_frame(WMADecodeContext* s,
|
int wma_decode_superframe_frame(WMADecodeContext* s,
|
||||||
int16_t* samples, /*output*/
|
int32_t* samples, /*output*/
|
||||||
uint8_t *buf, /*input*/
|
uint8_t *buf, /*input*/
|
||||||
int buf_size)
|
int buf_size)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ CODEC_HEADER
|
||||||
BLOCK_MAX_SIZE is 2048 (samples) and MAX_CHANNELS is 2.
|
BLOCK_MAX_SIZE is 2048 (samples) and MAX_CHANNELS is 2.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static uint16_t decoded[BLOCK_MAX_SIZE * MAX_CHANNELS];
|
static uint32_t decoded[BLOCK_MAX_SIZE * MAX_CHANNELS];
|
||||||
|
|
||||||
/* NOTE: WMADecodeContext is 120152 bytes (on x86) */
|
/* NOTE: WMADecodeContext is 120152 bytes (on x86) */
|
||||||
static WMADecodeContext wmadec;
|
static WMADecodeContext wmadec;
|
||||||
|
|
@ -319,7 +319,7 @@ enum codec_status codec_main(void)
|
||||||
ci->configure(CODEC_SET_FILEBUF_WATERMARK, 1024*512);
|
ci->configure(CODEC_SET_FILEBUF_WATERMARK, 1024*512);
|
||||||
ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, 1024*128);
|
ci->configure(CODEC_SET_FILEBUF_CHUNKSIZE, 1024*128);
|
||||||
|
|
||||||
ci->configure(DSP_SET_SAMPLE_DEPTH, 15);
|
ci->configure(DSP_SET_SAMPLE_DEPTH, 30);
|
||||||
|
|
||||||
next_track:
|
next_track:
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue