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,
|
||||
uint8_t *buf, int buf_size);
|
||||
int wma_decode_superframe_frame(WMADecodeContext* s,
|
||||
int16_t *samples,
|
||||
int32_t *samples,
|
||||
uint8_t *buf, int buf_size);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1619,10 +1619,10 @@ next:
|
|||
}
|
||||
|
||||
/* 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;
|
||||
int16_t *ptr;
|
||||
int ret, i, n, ch, incr;
|
||||
int32_t *ptr;
|
||||
fixed32 *iptr;
|
||||
// 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;
|
||||
incr = s->nb_channels;
|
||||
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)
|
||||
{
|
||||
a = fixtoi32(*iptr++)<<1; //ugly but good enough for now
|
||||
|
||||
if (a > 32767)
|
||||
{
|
||||
a = 32767;
|
||||
}
|
||||
else if (a < -32768)
|
||||
{
|
||||
a = -32768;
|
||||
}
|
||||
*ptr = a;
|
||||
*ptr = (*iptr++);
|
||||
ptr += incr;
|
||||
}
|
||||
/* prepare for next block */
|
||||
|
|
@ -1719,7 +1709,7 @@ int wma_decode_superframe_init(WMADecodeContext* s,
|
|||
*/
|
||||
|
||||
int wma_decode_superframe_frame(WMADecodeContext* s,
|
||||
int16_t* samples, /*output*/
|
||||
int32_t* samples, /*output*/
|
||||
uint8_t *buf, /*input*/
|
||||
int buf_size)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ CODEC_HEADER
|
|||
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) */
|
||||
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_CHUNKSIZE, 1024*128);
|
||||
|
||||
ci->configure(DSP_SET_SAMPLE_DEPTH, 15);
|
||||
ci->configure(DSP_SET_SAMPLE_DEPTH, 30);
|
||||
|
||||
next_track:
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue