Revision a350e694

b/hw/musicpal.c
244 244
    uint32_t status;
245 245
    uint32_t irq_enable;
246 246
    unsigned long phys_buf;
247
    void *target_buffer;
247
    int8_t *target_buffer;
248 248
    unsigned int threshold;
249 249
    unsigned int play_pos;
250 250
    unsigned int last_free;
......
256 256
{
257 257
    musicpal_audio_state *s = opaque;
258 258
    int16_t *codec_buffer;
259
    void *mem_buffer;
259
    int8_t *mem_buffer;
260 260
    int pos, block_size;
261 261

  
262 262
    if (!(s->playback_mode & MP_AUDIO_PLAYBACK_EN))
......
277 277
        if (s->playback_mode & MP_AUDIO_MONO) {
278 278
            codec_buffer = wm8750_dac_buffer(s->wm, block_size >> 1);
279 279
            for (pos = 0; pos < block_size; pos += 2) {
280
                *codec_buffer++ = *(uint16_t *)mem_buffer;
281
                *codec_buffer++ = *(uint16_t *)mem_buffer;
280
                *codec_buffer++ = *(int16_t *)mem_buffer;
281
                *codec_buffer++ = *(int16_t *)mem_buffer;
282 282
                mem_buffer += 2;
283 283
            }
284 284
        } else
......
288 288
        if (s->playback_mode & MP_AUDIO_MONO) {
289 289
            codec_buffer = wm8750_dac_buffer(s->wm, block_size);
290 290
            for (pos = 0; pos < block_size; pos++) {
291
                *codec_buffer++ = cpu_to_le16(256 * *(int8_t *)mem_buffer);
292
                *codec_buffer++ = cpu_to_le16(256 * *(int8_t *)mem_buffer++);
291
                *codec_buffer++ = cpu_to_le16(256 * *mem_buffer);
292
                *codec_buffer++ = cpu_to_le16(256 * *mem_buffer++);
293 293
            }
294 294
        } else {
295 295
            codec_buffer = wm8750_dac_buffer(s->wm, block_size >> 1);
296 296
            for (pos = 0; pos < block_size; pos += 2) {
297
                *codec_buffer++ = cpu_to_le16(256 * *(int8_t *)mem_buffer++);
298
                *codec_buffer++ = cpu_to_le16(256 * *(int8_t *)mem_buffer++);
297
                *codec_buffer++ = cpu_to_le16(256 * *mem_buffer++);
298
                *codec_buffer++ = cpu_to_le16(256 * *mem_buffer++);
299 299
            }
300 300
        }
301 301
    }

Also available in: Unified diff