Mercurial > mplayer.hg
comparison dec_audio.c @ 2420:311676805f20
ima4 mov audio support
author | arpi |
---|---|
date | Tue, 23 Oct 2001 13:56:44 +0000 |
parents | eab58e827cf7 |
children | ff50f2a576f2 |
comparison
equal
deleted
inserted
replaced
2419:24ba3dfb8e89 | 2420:311676805f20 |
---|---|
29 #include "alaw.h" | 29 #include "alaw.h" |
30 | 30 |
31 #include "xa/xa_gsm.h" | 31 #include "xa/xa_gsm.h" |
32 | 32 |
33 #include "ac3-iec958.h" | 33 #include "ac3-iec958.h" |
34 | |
35 #include "ima4.h" | |
34 | 36 |
35 #ifdef USE_DIRECTSHOW | 37 #ifdef USE_DIRECTSHOW |
36 #include "loader/DirectShow/DS_AudioDec.h" | 38 #include "loader/DirectShow/DS_AudioDec.h" |
37 #endif | 39 #endif |
38 | 40 |
224 sh_audio->sample_format = AFMT_AC3; | 226 sh_audio->sample_format = AFMT_AC3; |
225 break; | 227 break; |
226 case AFM_GSM: | 228 case AFM_GSM: |
227 // MS-GSM audio codec: | 229 // MS-GSM audio codec: |
228 sh_audio->audio_out_minsize=4*320; | 230 sh_audio->audio_out_minsize=4*320; |
231 break; | |
232 case AFM_IMA4: | |
233 // IMA-ADPCM 4:1 audio codec: | |
234 sh_audio->audio_out_minsize=4096; //4*IMA4_SAMPLES_PER_BLOCK; | |
235 sh_audio->ds->ss_div=IMA4_SAMPLES_PER_BLOCK; | |
236 sh_audio->ds->ss_mul=IMA4_BLOCK_SIZE; | |
229 break; | 237 break; |
230 case AFM_MPEG: | 238 case AFM_MPEG: |
231 // MPEG Audio: | 239 // MPEG Audio: |
232 sh_audio->audio_out_minsize=4608; | 240 sh_audio->audio_out_minsize=4608; |
233 break; | 241 break; |
408 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; | 416 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; |
409 // decodes 65 byte -> 320 short | 417 // decodes 65 byte -> 320 short |
410 // 1 sec: sh_audio->channels*sh_audio->samplerate samples | 418 // 1 sec: sh_audio->channels*sh_audio->samplerate samples |
411 // 1 frame: 320 samples | 419 // 1 frame: 320 samples |
412 sh_audio->i_bps=65*(sh_audio->channels*sh_audio->samplerate)/320; // 1:10 | 420 sh_audio->i_bps=65*(sh_audio->channels*sh_audio->samplerate)/320; // 1:10 |
421 break; | |
422 } | |
423 case AFM_IMA4: { | |
424 // IMA-ADPCM 4:1 audio codec: | |
425 sh_audio->channels=sh_audio->wf->nChannels; | |
426 sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; | |
427 // decodes 34 byte -> 64 short | |
428 sh_audio->i_bps=IMA4_BLOCK_SIZE*(sh_audio->channels*sh_audio->samplerate)/IMA4_SAMPLES_PER_BLOCK; // 1:4 | |
413 break; | 429 break; |
414 } | 430 } |
415 case AFM_MPEG: { | 431 case AFM_MPEG: { |
416 // MPEG Audio: | 432 // MPEG Audio: |
417 dec_audio_sh=sh_audio; // save sh_audio for the callback: | 433 dec_audio_sh=sh_audio; // save sh_audio for the callback: |
771 while(l>0){ --l; d[l]=ulaw2short[s[l]]; } | 787 while(l>0){ --l; d[l]=ulaw2short[s[l]]; } |
772 } | 788 } |
773 break; | 789 break; |
774 } | 790 } |
775 case AFM_GSM: // MS-GSM decoder | 791 case AFM_GSM: // MS-GSM decoder |
776 { unsigned char buf[65]; // 65 bytes / frame | 792 { unsigned char ibuf[65]; // 65 bytes / frame |
777 if(demux_read_data(sh_audio->ds,buf,65)!=65) break; // EOF | 793 if(demux_read_data(sh_audio->ds,ibuf,65)!=65) break; // EOF |
778 XA_MSGSM_Decoder(buf,(unsigned short *) buf); // decodes 65 byte -> 320 short | 794 XA_MSGSM_Decoder(ibuf,(unsigned short *) buf); // decodes 65 byte -> 320 short |
779 // XA_GSM_Decoder(buf,(unsigned short *) &sh_audio->a_buffer[sh_audio->a_buffer_len]); // decodes 33 byte -> 160 short | 795 // XA_GSM_Decoder(buf,(unsigned short *) &sh_audio->a_buffer[sh_audio->a_buffer_len]); // decodes 33 byte -> 160 short |
780 len=2*320; | 796 len=2*320; |
797 break; | |
798 } | |
799 case AFM_IMA4: // IMA-ADPCM 4:1 audio codec: | |
800 { unsigned char ibuf[IMA4_BLOCK_SIZE]; // bytes / frame | |
801 if(demux_read_data(sh_audio->ds,ibuf,IMA4_BLOCK_SIZE)!=IMA4_BLOCK_SIZE) break; // EOF | |
802 len=2*ima4_decode_block(buf,ibuf,2*IMA4_SAMPLES_PER_BLOCK); | |
781 break; | 803 break; |
782 } | 804 } |
783 case AFM_AC3: // AC3 decoder | 805 case AFM_AC3: // AC3 decoder |
784 //printf("{1:%d}",avi_header.idx_pos);fflush(stdout); | 806 //printf("{1:%d}",avi_header.idx_pos);fflush(stdout); |
785 if(!sh_audio->ac3_frame) sh_audio->ac3_frame=ac3_decode_frame(); | 807 if(!sh_audio->ac3_frame) sh_audio->ac3_frame=ac3_decode_frame(); |