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);