Mercurial > mplayer.hg
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 |