comparison pcm.c @ 5422:ad384eda0cb7 libavcodec

support silly PCM variant used by zork nemesis fixes audio decoding of T000A11C.AVI
author michael
date Mon, 30 Jul 2007 02:05:16 +0000
parents 91015dc624ad
children 13039fd7cf10
comparison
equal deleted inserted replaced
5421:0e593c7d0ebc 5422:ad384eda0cb7
289 for(;n>0;n--) { 289 for(;n>0;n--) {
290 v = *samples++; 290 v = *samples++;
291 *dst++ = (v >> 8) + 128; 291 *dst++ = (v >> 8) + 128;
292 } 292 }
293 break; 293 break;
294 case CODEC_ID_PCM_ZORK:
295 for(;n>0;n--) {
296 v= *samples++ >> 8;
297 if(v<0) v = -v;
298 else v+= 128;
299 *dst++ = v;
300 }
301 break;
294 case CODEC_ID_PCM_ALAW: 302 case CODEC_ID_PCM_ALAW:
295 for(;n>0;n--) { 303 for(;n>0;n--) {
296 v = *samples++; 304 v = *samples++;
297 *dst++ = linear_to_alaw[(v + 32768) >> 2]; 305 *dst++ = linear_to_alaw[(v + 32768) >> 2];
298 } 306 }
448 break; 456 break;
449 case CODEC_ID_PCM_U8: 457 case CODEC_ID_PCM_U8:
450 n = buf_size; 458 n = buf_size;
451 for(;n>0;n--) { 459 for(;n>0;n--) {
452 *samples++ = ((int)*src++ - 128) << 8; 460 *samples++ = ((int)*src++ - 128) << 8;
461 }
462 break;
463 case CODEC_ID_PCM_ZORK:
464 n = buf_size;
465 for(;n>0;n--) {
466 int x= *src++;
467 if(x&128) x-= 128;
468 else x = -x;
469 *samples++ = x << 8;
453 } 470 }
454 break; 471 break;
455 case CODEC_ID_PCM_ALAW: 472 case CODEC_ID_PCM_ALAW:
456 case CODEC_ID_PCM_MULAW: 473 case CODEC_ID_PCM_MULAW:
457 n = buf_size; 474 n = buf_size;
503 PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be); 520 PCM_CODEC(CODEC_ID_PCM_U16BE, pcm_u16be);
504 PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8); 521 PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8);
505 PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8); 522 PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8);
506 PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw); 523 PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw);
507 PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); 524 PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw);
525 PCM_CODEC(CODEC_ID_PCM_ZORK, pcm_zork);
508 526
509 #undef PCM_CODEC 527 #undef PCM_CODEC