Mercurial > mplayer.hg
comparison libmpdemux/demux_mov.c @ 5212:12f7cbbe7022
add alternative samplerate calculation for files with timescale\!=samplerate
author | atmos4 |
---|---|
date | Wed, 20 Mar 2002 04:22:14 +0000 |
parents | 2ca5a9bfaa98 |
children | f8a00b2c9c39 |
comparison
equal
deleted
inserted
replaced
5211:fc9ccaa09006 | 5212:12f7cbbe7022 |
---|---|
625 #define char2short(x,y) ((x[y]<<8)|x[y+1]) | 625 #define char2short(x,y) ((x[y]<<8)|x[y+1]) |
626 #define char2int(x,y) ((x[y]<<24)|(x[y+1]<<16)|(x[y+2]<<8)|x[y+3]) | 626 #define char2int(x,y) ((x[y]<<24)|(x[y+1]<<16)|(x[y+2]<<8)|x[y+3]) |
627 | 627 |
628 sh->samplesize=char2short(trak->stdata,18)/8; | 628 sh->samplesize=char2short(trak->stdata,18)/8; |
629 sh->channels=char2short(trak->stdata,16); | 629 sh->channels=char2short(trak->stdata,16); |
630 /*printf("MOV: timescale: %d samplerate: %d durmap: %d (%d) -> %d (%d)\n", | |
631 trak->timescale, char2short(trak->stdata,24), trak->durmap[0].dur, | |
632 trak->durmap[0].num, trak->timescale/trak->durmap[0].dur, | |
633 char2short(trak->stdata,24)/trak->durmap[0].dur);*/ | |
630 sh->samplerate=char2short(trak->stdata,24); | 634 sh->samplerate=char2short(trak->stdata,24); |
635 if((sh->samplerate < 8000) && trak->durmap) { | |
636 switch(char2short(trak->stdata,24)/trak->durmap[0].dur) { | |
637 // TODO: add more cases. | |
638 case 31: | |
639 sh->samplerate = 32000; break; | |
640 case 43: | |
641 sh->samplerate = 44100; break; | |
642 case 47: | |
643 sh->samplerate = 48000; break; | |
644 default: | |
645 mp_msg(MSGT_DEMUX, MSGL_WARN, | |
646 "MOV: unable to determine audio samplerate, " | |
647 "assuming 44.1kHz (got %d)\n", | |
648 char2short(trak->stdata,24)/trak->durmap[0].dur); | |
649 sh->samplerate = 44100; | |
650 } | |
651 } | |
631 | 652 |
632 mp_msg(MSGT_DEMUX, MSGL_INFO, "Audio bits: %d chans: %d\n", | 653 mp_msg(MSGT_DEMUX, MSGL_INFO, "Audio bits: %d chans: %d\n", |
633 trak->stdata[19],trak->stdata[17]); | 654 trak->stdata[19],trak->stdata[17]); |
634 mp_msg(MSGT_DEMUX, MSGL_INFO, "Audio sample rate: %d\n", | 655 mp_msg(MSGT_DEMUX, MSGL_INFO, "Audio sample rate: %d\n", |
635 char2short(trak->stdata,24)); | 656 sh->samplerate/*char2short(trak->stdata,24)*/); |
636 if((trak->stdata[9]==0) && trak->stdata_len >= 36) { // version 0 with extra atoms | 657 if((trak->stdata[9]==0) && trak->stdata_len >= 36) { // version 0 with extra atoms |
637 int atom_len = char2int(trak->stdata,28); | 658 int atom_len = char2int(trak->stdata,28); |
638 switch(char2int(trak->stdata,32)) { // atom type | 659 switch(char2int(trak->stdata,32)) { // atom type |
639 case MOV_FOURCC('e','s','d','s'): | 660 case MOV_FOURCC('e','s','d','s'): |
640 mp_msg(MSGT_DEMUX, MSGL_INFO, "MOV: MP4 esds audio atom found (%d)!\n", atom_len); | 661 mp_msg(MSGT_DEMUX, MSGL_INFO, "MOV: MP4 esds audio atom found (%d)!\n", atom_len); |