RCS file: /cvs/mplayer/libmpdemux/demux_mov.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
|
|
|
|
| 112 | 112 | int duration; // 0 = variable |
| 113 | 113 | int width,height; // for video |
| 114 | 114 | unsigned int fourcc; |
| | 115 | unsigned int nchannels; |
| | 116 | unsigned int samplebits; // 1 for bytes, 2 for shorts |
| 115 | 117 | // |
| 116 | 118 | int tkdata_len; // track data |
| 117 | 119 | unsigned char* tkdata; |
| … |
… |
|
| 863 | 865 | sh_audio_t* sh=new_sh_audio(demuxer,priv->track_db); |
| 864 | 866 | sh->format=trak->fourcc; |
| 865 | 867 | |
| | 868 | switch( sh->format ) { |
| | 869 | case 0x726D6173: /* samr */ |
| | 870 | /* amr narrowband */ |
| | 871 | trak->samplebits=sh->samplesize=1; |
| | 872 | trak->nchannels=sh->channels=1; |
| | 873 | sh->samplerate=8000; |
| | 874 | break; |
| | 875 | |
| | 876 | case 0x62776173: /* sawb */ |
| | 877 | /* amr wideband */ |
| | 878 | trak->samplebits=sh->samplesize=1; |
| | 879 | trak->nchannels=sh->channels=1; |
| | 880 | sh->samplerate=16000; |
| | 881 | break; |
| | 882 | |
| | 883 | default: |
| | 884 | |
| 866 | 885 | // assumptions for below table: short is 16bit, int is 32bit, intfp is 16bit |
| 867 | 886 | // XXX: 32bit fixed point numbers (intfp) are only 2 Byte! |
| 868 | 887 | // short values are usually one byte leftpadded by zero |
| … |
… |
|
| 889 | 908 | // 32 char[4] atom type (fourc charater code -> esds) |
| 890 | 909 | // 36 char[] atom data (len=size-8) |
| 891 | 910 | |
| 892 | | sh->samplesize=char2short(trak->stdata,18)/8; |
| 893 | | sh->channels=char2short(trak->stdata,16); |
| | 911 | trak->samplebits=sh->samplesize=char2short(trak->stdata,18)/8; |
| | 912 | trak->nchannels=sh->channels=char2short(trak->stdata,16); |
| 894 | 913 | /*printf("MOV: timescale: %d samplerate: %d durmap: %d (%d) -> %d (%d)\n", |
| 895 | 914 | trak->timescale, char2short(trak->stdata,24), trak->durmap[0].dur, |
| 896 | 915 | trak->durmap[0].num, trak->timescale/trak->durmap[0].dur, |
| … |
… |
|
| 913 | 932 | sh->samplerate = 44100; |
| 914 | 933 | } |
| 915 | 934 | } |
| 916 | | |
| | 935 | } |
| 917 | 936 | mp_msg(MSGT_DEMUX, MSGL_INFO, "Audio bits: %d chans: %d rate: %d\n", |
| 918 | | trak->stdata[19],trak->stdata[17],sh->samplerate); |
| | 937 | sh->samplesize*8,sh->channels,sh->samplerate); |
| 919 | 938 | |
| 920 | 939 | if(trak->stdata_len >= 44 && trak->stdata[9]>=1){ |
| 921 | 940 | mp_msg(MSGT_DEMUX,MSGL_V,"Audio header: samp/pack=%d bytes/pack=%d bytes/frame=%d bytes/samp=%d \n", |
| … |
… |
|
| 982 | 1001 | // Emulate WAVEFORMATEX struct: |
| 983 | 1002 | sh->wf=malloc(sizeof(WAVEFORMATEX)); |
| 984 | 1003 | memset(sh->wf,0,sizeof(WAVEFORMATEX)); |
| 985 | | sh->wf->nChannels=(trak->stdata[16]<<8)+trak->stdata[17]; |
| | 1004 | sh->wf->nChannels=sh->channels; |
| 986 | 1005 | sh->wf->wBitsPerSample=(trak->stdata[18]<<8)+trak->stdata[19]; |
| 987 | 1006 | // sh->wf->nSamplesPerSec=trak->timescale; |
| 988 | 1007 | sh->wf->nSamplesPerSec=(trak->stdata[24]<<8)+trak->stdata[25]; |
| … |
… |
|
| 1683 | 1702 | // with missing stsd v1 header containing compression rate |
| 1684 | 1703 | x/=ds->ss_div; x*=ds->ss_mul; // compression ratio fix ! HACK ! |
| 1685 | 1704 | } else { |
| 1686 | | x*=(trak->stdata[16]<<8)+trak->stdata[17]; //channels |
| 1687 | | x*=(trak->stdata[18]<<8)+trak->stdata[19]; //bits/sample |
| 1688 | | x/=8; // bits/sample |
| | 1705 | x*=trak->nchannels; |
| | 1706 | x*=trak->samplebits; |
| 1689 | 1707 | } |
| 1690 | 1708 | } |
| 1691 | 1709 | mp_msg(MSGT_DEMUX, MSGL_DBG2, "Audio sample %d bytes pts %5.3f\n",trak->chunks[trak->pos].size*trak->samplesize,pts); |