comparison libmpdemux/demux_audio.c @ 35246:db605820eef9

Remove completely unnecessary huge on-stack buffer.
author reimar
date Mon, 05 Nov 2012 19:32:28 +0000
parents f8759138eefa
children 15b6ae10180a
comparison
equal deleted inserted replaced
35245:6055467828a4 35246:db605820eef9
549 demuxer->movi_start = stream_tell(s); 549 demuxer->movi_start = stream_tell(s);
550 demuxer->movi_end = chunk_size ? demuxer->movi_start + chunk_size : s->end_pos; 550 demuxer->movi_end = chunk_size ? demuxer->movi_start + chunk_size : s->end_pos;
551 // printf("wav: %X .. %X\n",(int)demuxer->movi_start,(int)demuxer->movi_end); 551 // printf("wav: %X .. %X\n",(int)demuxer->movi_start,(int)demuxer->movi_end);
552 // Check if it contains dts audio 552 // Check if it contains dts audio
553 if((w->wFormatTag == 0x01) && (w->nChannels == 2) && (w->nSamplesPerSec == 44100)) { 553 if((w->wFormatTag == 0x01) && (w->nChannels == 2) && (w->nSamplesPerSec == 44100)) {
554 unsigned char buf[16384]; // vlc uses 16384*4 (4 dts frames) 554 uint32_t value = stream_read_dword(demuxer->stream);
555 unsigned int i; 555 unsigned int i;
556 memset(buf, 0, sizeof(buf)); 556 // vlc uses 16384*4 (4 dts frames)
557 stream_read(s, buf, sizeof(buf)); 557 for (i = 0; i < 16384; i += 2) {
558 for (i = 0; i < sizeof(buf) - 5; i += 2) { 558 uint16_t next = stream_read_word(demuxer->stream);
559 // DTS, 14 bit, LE 559 // DTS, 14 bit, LE
560 if((buf[i] == 0xff) && (buf[i+1] == 0x1f) && (buf[i+2] == 0x00) && 560 if(value == 0xff1f00e8u && (next & 0xfeff) == 0xf007) {
561 (buf[i+3] == 0xe8) && ((buf[i+4] & 0xfe) == 0xf0) && (buf[i+5] == 0x07)) {
562 sh_audio->format = 0x2001; 561 sh_audio->format = 0x2001;
563 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 14 bit, LE\n"); 562 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 14 bit, LE\n");
564 break; 563 break;
565 } 564 }
566 // DTS, 14 bit, BE 565 // DTS, 14 bit, BE
567 if((buf[i] == 0x1f) && (buf[i+1] == 0xff) && (buf[i+2] == 0xe8) && 566 if(value == 0x1fffe800u && (next & 0xfffe) == 0x07f0) {
568 (buf[i+3] == 0x00) && (buf[i+4] == 0x07) && ((buf[i+5] & 0xfe) == 0xf0)) {
569 sh_audio->format = 0x2001; 567 sh_audio->format = 0x2001;
570 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 14 bit, BE\n"); 568 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 14 bit, BE\n");
571 break; 569 break;
572 } 570 }
573 // DTS, 16 bit, BE 571 // DTS, 16 bit, BE
574 if((buf[i] == 0x7f) && (buf[i+1] == 0xfe) && (buf[i+2] == 0x80) && 572 if(value == 0x7ffe8001u) {
575 (buf[i+3] == 0x01)) {
576 sh_audio->format = 0x2001; 573 sh_audio->format = 0x2001;
577 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 16 bit, BE\n"); 574 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 16 bit, BE\n");
578 break; 575 break;
579 } 576 }
580 // DTS, 16 bit, LE 577 // DTS, 16 bit, LE
581 if((buf[i] == 0xfe) && (buf[i+1] == 0x7f) && (buf[i+2] == 0x01) && 578 if(value == 0xfe7f0180u) {
582 (buf[i+3] == 0x80)) {
583 sh_audio->format = 0x2001; 579 sh_audio->format = 0x2001;
584 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 16 bit, LE\n"); 580 mp_msg(MSGT_DEMUX,MSGL_V,"[demux_audio] DTS audio in wav, 16 bit, LE\n");
585 break; 581 break;
586 } 582 }
583 value <<= 16;
584 value |= next;
587 } 585 }
588 if (sh_audio->format == 0x2001) { 586 if (sh_audio->format == 0x2001) {
589 mp_msg(MSGT_DEMUX,MSGL_DBG2,"[demux_audio] DTS sync offset = %u\n", i); 587 mp_msg(MSGT_DEMUX,MSGL_DBG2,"[demux_audio] DTS sync offset = %u\n", i);
590 } 588 }
591 589